Compare commits

...

94 Commits

Author SHA1 Message Date
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
69397ee269 Add bug icon (#256) 2021-04-11 19:47:06 +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
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
57 changed files with 1651 additions and 85 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 👍. 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:

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

@@ -0,0 +1,72 @@
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: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
with:
tag_name: ${{ steps.new-version.outputs.NEW_VERSION }}
release_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: on:
push: push:
branches: [ master ] branches: [ master ]
pull_request: pull_request:
branches: [ master ] branches: [ master ]

View File

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

View File

@@ -12,6 +12,7 @@ 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) [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 wont make apparent. - __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. - __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.
@@ -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. 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 ## 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). 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) * [Web](#web)
* [React](#react) * [React](#react)
* [Vue](#vue) * [Vue](#vue)
* [Angular](#angular)
* [Figma](#figma) * [Figma](#figma)
* [Contributing](#contributing) * [Contributing](#contributing)
* [Community](#community) * [Community](#community)
@@ -52,7 +53,7 @@ npm install lucide
yarn add 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 ### 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). 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/master/packages/lucide-angular/projects/lucide-angular#lucide-angular).
### Figma ### Figma
The lucide figma plugin. 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

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

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

View File

@@ -9,5 +9,7 @@
stroke-linecap="round" stroke-linecap="round"
stroke-linejoin="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> </svg>

Before

Width:  |  Height:  |  Size: 310 B

After

Width:  |  Height:  |  Size: 336 B

View File

@@ -1,18 +1,31 @@
{ {
"private": true, "private": true,
"workspaces": [ "workspaces": {
"packages": [
"packages/*", "packages/*",
"site" "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": { "scripts": {
"build": "yarn lucide build && yarn lucide-react build && yarn lucide-vue build", "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", "test": "yarn lucide build:icons && yarn lucide-react build:icons && yarn lucide-vue build:icons && jest",
"lucide": "yarn workspace lucide", "lucide": "yarn workspace lucide",
"lucide-angular": "yarn workspace lucide-angular",
"lucide-react": "yarn workspace lucide-react", "lucide-react": "yarn workspace lucide-react",
"lucide-vue": "yarn workspace lucide-vue", "lucide-vue": "yarn workspace lucide-vue",
"build:icons": "babel-node ./scripts/buildIcons.js --presets @babel/env", "build:icons": "babel-node ./scripts/buildIcons.js --presets @babel/env",
"optimize": "babel-node ./scripts/optimizeSvgs.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": { "devDependencies": {
"@ampproject/rollup-plugin-closure-compiler": "^0.25.2", "@ampproject/rollup-plugin-closure-compiler": "^0.25.2",
@@ -38,6 +51,7 @@
"jest": "^26.4.2", "jest": "^26.4.2",
"lint-staged": "^10.5.3", "lint-staged": "^10.5.3",
"minimist": "^1.2.5", "minimist": "^1.2.5",
"node-fetch": "^2.6.1",
"prettier": "1.17.1", "prettier": "1.17.1",
"rollup": "^2.7.3", "rollup": "^2.7.3",
"rollup-plugin-license": "^2.0.0", "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
yarn.lock

View File

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

View File

@@ -0,0 +1,65 @@
{
"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.0",
"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-vue"
},
"keywords": [
"Lucide",
"Angular",
"Feather",
"Icons",
"Icon",
"Feather Icons",
"Fontawesome",
"Font Awesome"
],
"scripts": {
"build": "yarn clean && yarn build:js && yarn build:icons && yarn build:iconsindex && yarn build:ng",
"clean": "rm -rf dist && rm -rf projects/lucide-angular/build",
"build:js": "mkdir -p projects/lucide-angular/build && cp -av ../lucide/src/createElement.js projects/lucide-angular/build/",
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-angular/projects/lucide-angular/build --templateSrc=../packages/lucide-angular/scripts/exportTemplate && for f in projects/lucide-angular/build/icons/*.js; do mv -- \"$f\" \"${f%.js}.ts\"; done",
"build:iconsindex": "yarn --cwd ../../ babel-node packages/lucide-angular/scripts/buildIconsIndex.js",
"build:ng": "ng build --prod",
"test:headless": "ng test --no-watch --no-progress --browsers=ChromeHeadlessCI",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"dependencies": {
"@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",
"tslib": "^2.0.0"
},
"devDependencies": {
"@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,191 @@
# 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`.
``` xml
<!-- app.component.html -->
<div id="ico"></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('ico');
const elm = createElement(Activity);
elm.setAttribute('color', 'red'); // or set `width`, `height`, `fill`, `stroke-width`, ...
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 } from 'lucide-angular';
import { AlarmCheck, Edit } from 'lucide-angular/icons'; // or import other icons
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
LucideAngularModule.pick({ AlarmCheck, Edit }) // add all of icons that is imported.
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
```
``` css
/* app.component.css */
.myicon {
/* Be sure to set these values */
width: 48px;
height: 48px;
/* or other properties like `color`, `fill`, `stroke-width` */
}
```
``` xml
<!-- app.component.html -->
<lucide-icon name="alarm-check" class="myicon"></lucide-icon>
<lucide-icon name="edit" class="myicon"></lucide-icon>
```
``` js
// app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
}
```
### 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 { }
```
``` css
/* app.component.css */
.myicon {
/* Be sure to set these values */
width: 48px;
height: 48px;
/* or other properties like `color`, `fill`, `stroke-width` */
}
```
``` 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/icons';
@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,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,4 @@
export * from './build/icons-index';
import * as icons from './build/icons-index';
export { icons };

View File

@@ -0,0 +1,7 @@
{
"ngPackage": {
"lib": {
"entryFile": "../icons-index.ts"
}
}
}

View File

@@ -0,0 +1,51 @@
// 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,4 @@
export * from './src/lib/lucide-angular.component';
export * from './src/lib/lucide-angular.module';
export * from './lucide';

View File

@@ -0,0 +1,10 @@
export type IconNode = readonly [string, object];
export type IconData = readonly [string, object, IconNode[] ];
export declare const icons: { [key: string]: IconData };
import { default as createElementTmp } from './build/createElement';
export function createElement(ico: IconData): HTMLElement {
return createElementTmp(ico as any);
}

View File

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

View File

@@ -0,0 +1,31 @@
{
"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.0",
"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-vue"
},
"keywords": [
"Lucide",
"Angular",
"Feather",
"Icons",
"Icon",
"Feather Icons",
"Fontawesome",
"Font Awesome"
],
"peerDependencies": {
"@angular/common": "^11.2.6",
"@angular/core": "^11.2.6"
},
"dependencies": {
"tslib": "^2.0.0"
}
}

View File

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

View File

@@ -0,0 +1,29 @@
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,68 @@
import { Component, ElementRef, Input, Inject, ChangeDetectorRef, OnChanges, SimpleChanges } from '@angular/core';
import { Icons } from './icons.provider';
import { createElement, IconData } from '../../lucide';
@Component({
selector: 'lucide-angular, lucide-icon, i-lucide, span-lucide',
template: `<ng-content></ng-content>`,
styles: [`
:host {
display: inline-block;
fill: none;
stroke: inherit;
stroke-width: inherit;
stroke-linecap: round;
stroke-linejoin: round;
}
`]
})
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,27 @@
import { NgModule, ModuleWithProviders, Optional } from '@angular/core';
import { LucideAngularComponent } from './lucide-angular.component';
import { Icons } from './icons.provider';
import { IconData } from '../../lucide';
@NgModule({
declarations: [LucideAngularComponent],
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,26 @@
/* 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
},
"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,17 @@
{
"extends": "../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"lib",
"camelCase"
],
"component-selector": [
true,
"element",
"",
"kebab-case"
]
}
}

View File

@@ -0,0 +1,39 @@
import path from 'path';
import {
writeFile,
resetFile,
appendFile,
readSvgDirectory,
} from '../../../scripts/helpers';
const TARGET_DIR = path.join(__dirname, '../projects/lucide-angular/build');
const ICONS_DIR = path.resolve(__dirname, '../../../icons');
const TYPES_FILE_NAME = 'icons-index.ts';
// Generates header of d.ts file include some types and functions
const typeDefinitions = `\
export type IconNode = readonly [string, object];
export type IconData = readonly [string, object, IconNode[] ];
export declare const icons: { [key: string]: IconData };
// Generated icons
`;
resetFile(TYPES_FILE_NAME, TARGET_DIR);
writeFile(typeDefinitions, TYPES_FILE_NAME, TARGET_DIR);
const svgFiles = readSvgDirectory(ICONS_DIR);
svgFiles.forEach(svgFile => {
const kebab = path.basename(svgFile, '.svg');
appendFile(
`export * from './icons/${kebab}';\n`,
TYPES_FILE_NAME,
TARGET_DIR,
);
});
console.log(`Generated ${TYPES_FILE_NAME} file with`, svgFiles.length, 'icons');

View File

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

View File

@@ -0,0 +1,31 @@
/* 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,
"allowJs": true,
"paths": {
"lucide-angular": [
"dist/lucide-angular/lucide-angular",
"dist/lucide-angular"
]
},
"moduleResolution": "node",
"importHelpers": true,
"target": "es2015",
"module": "es2020",
"lib": [
"es2018",
"dom"
]
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false
}
}

View File

@@ -0,0 +1,140 @@
{
"extends": "tslint:recommended",
"rulesDirectory": [
"codelyzer"
],
"rules": {
"align": {
"options": [
"parameters",
"statements"
]
},
"array-type": false,
"arrow-return-shorthand": true,
"curly": true,
"deprecation": {
"severity": "warning"
},
"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", "name": "lucide-figma",
"version": "0.13.0", "version": "0.15.0",
"license": "ISC", "license": "ISC",
"private": true, "private": true,
"main": "build/ui.js", "main": "build/ui.js",
@@ -15,7 +15,7 @@
"css-loader": "^3.0.0", "css-loader": "^3.0.0",
"html-webpack-inline-source-plugin": "^0.0.10", "html-webpack-inline-source-plugin": "^0.0.10",
"html-webpack-plugin": "^3.2.0", "html-webpack-plugin": "^3.2.0",
"lucide-react": "^0.13.0", "lucide-react": "^0.15.0",
"react": "^16.8.6", "react": "^16.8.6",
"react-dom": "^16.8.6", "react-dom": "^16.8.6",
"style-loader": "^0.23.1", "style-loader": "^0.23.1",

View File

@@ -1,7 +1,7 @@
{ {
"name": "lucide-react", "name": "lucide-react",
"description": "Lucide React package, Lucide is a community-run fork of Feather Icons, open for anyone to contribute icons.", "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.0",
"license": "ISC", "license": "ISC",
"homepage": "https://lucide.dev", "homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues", "bugs": "https://github.com/lucide-icons/lucide/issues",
@@ -19,7 +19,7 @@
"typings": "dist/lucide-react.d.ts", "typings": "dist/lucide-react.d.ts",
"scripts": { "scripts": {
"build": "yarn clean && yarn build:icons && yarn build:es && yarn build:types && yarn build:bundles", "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: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: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", "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== integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
y18n@^4.0.0: y18n@^4.0.0:
version "4.0.0" version "4.0.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
yallist@^4.0.0: yallist@^4.0.0:
version "4.0.0" version "4.0.0"

View File

@@ -1,6 +1,6 @@
{ {
"name": "lucide-vue", "name": "lucide-vue",
"version": "0.14.0", "version": "0.15.0",
"author": "Eric Fennis", "author": "Eric Fennis",
"description": "Lucide Vue Package", "description": "Lucide Vue Package",
"license": "ISC", "license": "ISC",
@@ -22,7 +22,7 @@
}, },
"scripts": { "scripts": {
"build": "yarn clean && yarn build:icons && yarn build:es && yarn build:bundles", "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: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: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", "build:bundles": "yarn --cwd ../../ rollup -c packages/lucide-vue/rollup.config.js",

View File

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

View File

@@ -1,6 +1,7 @@
import path from 'path'; import path from 'path';
import { readSvgDirectory, resetFile, appendFile, toPascalCase } from '../../../scripts/helpers'; import { readSvgDirectory, resetFile, appendFile, toPascalCase } from '../../../scripts/helpers';
import defaultAttributes from '../src/defaultAttributes';
const TARGET_DIR = path.join(__dirname, '../dist'); const TARGET_DIR = path.join(__dirname, '../dist');
const ICONS_DIR = path.resolve(__dirname, '../../../icons'); 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 // Generates header of d.ts file include some types and functions
const typeDefinitions = `\ const typeDefinitions = `\
export type IconName = string; declare module 'lucide'
export type IconNode = readonly [tag: string, object:SVGProps<SVGSVGElement>, children:IconNode?]; export interface SVGProps extends Partial<SVGElement> ${JSON.stringify(defaultAttributes, null, 2)}
export type IconsObj = { [IconName]: IconNode }
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 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 // Generated 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 { renderHook } from '@testing-library/react-hooks';
import useSearch from '../lib/useSearch'; import useSearch from '../src/lib/useSearch';
describe('Icon Overview', () => { describe('Icon Overview', () => {
it('can search filter icons', async () => { it('can search filter icons', async () => {

View File

@@ -1,10 +1,10 @@
import { act, fireEvent, screen } from '@testing-library/react'; import { act, fireEvent, screen } from '@testing-library/react';
import Index from '../pages/index'; import Index from '../src/pages/index';
import React from 'react'; import React from 'react';
import { render } from './test-utils'; 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', () => { describe('App', () => {
it('renders without crashing', () => { it('renders without crashing', () => {

View File

@@ -15,5 +15,5 @@
"jsx": "preserve" "jsx": "preserve"
}, },
"exclude": ["node_modules"], "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

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

View File

@@ -7180,14 +7180,6 @@ lucide-react@0.14.0:
prop-types "^15.7.2" prop-types "^15.7.2"
react "^16.5.1" react "^16.5.1"
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==
dependencies:
prop-types "^15.7.2"
react "^17.0.1"
lz-string@^1.4.4: lz-string@^1.4.4:
version "1.4.4" version "1.4.4"
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26"
@@ -7556,7 +7548,7 @@ node-environment-flags@^1.0.5:
object.getownpropertydescriptors "^2.0.3" object.getownpropertydescriptors "^2.0.3"
semver "^5.7.0" semver "^5.7.0"
node-fetch@2.6.1: node-fetch@2.6.1, node-fetch@^2.6.1:
version "2.6.1" version "2.6.1"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
@@ -8540,14 +8532,6 @@ react@^16.13.1, react@^16.5.1, react@^16.8.6:
object-assign "^4.1.1" object-assign "^4.1.1"
prop-types "^15.6.2" 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: reactcss@^1.2.0:
version "1.2.3" version "1.2.3"
resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd" resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd"