Compare commits

...

115 Commits

Author SHA1 Message Date
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 36232cd771 Fix release workflow 2021-03-23 20:15:01 +01:00
Eric Fennis 87863402ea Fix version 2021-03-23 19:49:34 +01:00
Eric Fennis b4e4f002f2 Lucide 0.15.0 (#272)
* add configs

* Add vue components

* Add documentation

* add alpha release version

* improve npm ignore files

* add tests

* Make style and class attrs work

* 📦 bump version

* Add Icon suffix for component names

* bump version

* Add icon component example

* remove space

* add new build strategy

* Write a better intro

* add other node design

* fix

* add new default template

* add tempalte

* improve code

* small improvements

* small improvements

* move files

* Connect lucide with lucide-react

* Add support for vue

* Add licenses to packages

* Fix tests

* refactor build scripts

* Minor code fixes

* update homepage readme

* Update footer text

* Add a better introduction to packages

* Split up in tempaltes

* Add new types build file

* Setup workflow file

* update readme

* update

* Fix build

* remove debug code

* Add check if svgs have duplicated children

* Add check if their are no children

* small fixes

* last fixes in the build

* Move script to packages folder

* Fix tests and add types for lucide

* Add rule to package.json

* add types in build

* add npm ignore

* update package.jsons
2021-03-23 19:26:50 +01:00
SMAH1 9d101a5275 Generate index.d.ts when build (#269) 2021-03-22 21:50:14 +01:00
Eric Fennis 3e50bf13e4 Fix cloud icons (#271) 2021-03-20 09:38:12 +01:00
Eric Fennis da946d5657 add new thermometer icons (#259) 2021-03-19 18:10:59 +01:00
R 16a1ffc40e lucide-react - Generate types for all exported icons (#243)
* Generate types for all exported icons

* renderUniqueKey will generate duplicate keys if the SVG attributse are identical.
Fixed by adding an index attribute to the hash.

* Revert "renderUniqueKey will generate duplicate keys if the SVG attributse are identical. Fixed by adding an index attribute to the hash."

This reverts commit 1c42b39e

* Update packages/lucide-react/build-types.js

* Update packages/lucide-react/build-types.js

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-03-17 20:35:57 +01:00
Andreas Törnkvist b4c034e729 file-input and file-output (#251)
* add file input and output icons

* Update icons/file-output.svg

* Update icons/file-input.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-03-16 21:14:29 +01:00
Eric Fennis cb61706968 refactor sun icons (#247) 2021-03-16 21:13:54 +01:00
Eric Fennis 17bdd7aa91 Refactor plus and minus size (#262) 2021-03-16 20:54:19 +01:00
Yashu Mittal 0f3551e9c7 add mouse-pointer-click icon (#216) 2021-03-16 20:49:07 +01:00
0xflotus 4a5898a458 fix: small error (#265) 2021-03-16 20:44:33 +01:00
Eric Fennis 3aa2521c37 Refactor redo & undo (#257)
* refactor redo

* refactor undo
2021-03-13 22:05:00 +01:00
dependabot[bot] 5f6d20ad82 chore(deps): Bump elliptic from 6.5.3 to 6.5.4 in /site (#260)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-03-13 22:03:27 +01:00
Eric Fennis 4bc8aae6bb Add more tags (#255) 2021-03-09 10:38:19 +01:00
Yashu Mittal d582a980d7 Add loader-2 icon (#229) 2021-03-08 18:09:22 +01:00
Eric Fennis 1513f61522 Fix duplicated contributors (#254) 2021-03-07 20:57:28 +01:00
Andreas Törnkvist 103d4aa3a4 fix spelling errors in tags.json (#249)
* fix spelling errors in tags.json

* US and UK spelling

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-03-07 10:32:11 +01:00
Yashu Mittal 303ad629fc add clipboard-list icon (#240) 2021-03-04 11:24:59 +01:00
Eric Fennis 32cef3bdbb New cloud icons (#246)
* refactor cloud icons

* Add new cloud icons
2021-03-03 16:16:35 +01:00
delnyn f45ea99192 💱 Add Johnletey's currencies and banknote icons (#234)
* 💱 Add Johnletey's currencies and banknote icons

Create banknote.svg, bitcoin.svg, euro.svg, pound-sterling.svg, indian-rupee.svg, jersey-pound.svg, russian-ruble.svg, swiss-franc.svg, and update tags.json

* Add files via upload

* Update icons/euro.svg

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

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-03-02 22:24:03 +01:00
Andreas Törnkvist 78690fb9ed droplets (#248)
* droplets icon

* Update icons/droplets.svg

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2021-03-01 19:47:09 +01:00
Eric Fennis f67eb1897a Merge branch 'hotfix/fix-react-component' 2021-02-27 11:39:14 +01:00
Eric Fennis 285f9446b4 Merge branch 'master' of github.com:lucide-icons/lucide 2021-02-27 11:38:49 +01: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
151 changed files with 7853 additions and 1649 deletions
+72
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 }}
+2 -8
View File
@@ -2,6 +2,7 @@ name: Build Lucide
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
@@ -20,13 +21,9 @@ jobs:
- name: Install FontForge
run: sudo apt-get install zlib1g-dev fontforge
- name: Install NodeJS and Yarn
run: sudo apt-get install nodejs yarn
- name: Clone sfnt2woff-zopfli repo
run: git clone https://github.com/bramstein/sfnt2woff-zopfli.git sfnt2woff-zopfli
- name: Install and move sfnt2woff-zopfli
run: |
cd sfnt2woff-zopfli
@@ -36,7 +33,6 @@ jobs:
- name: Clone woff2
run: git clone --recursive https://github.com/google/woff2.git
- name: Install woff2
run: |
cd woff2
@@ -47,16 +43,14 @@ jobs:
run: sudo gem install fontcustom
- name: Install "outline-stroke"
run: sudo yarn add svg-outline-stroke svgson
run: sudo yarn add svg-outline-stroke -W
- name: "Outline SVG"
run: mkdir converted_icons && node scripts/outline_svg.js
- name: Build 'Lucide'
run: echo "Building Lucide font" && fontcustom compile ./converted_icons -h -n Lucide -o build -F
- name: Zip 'Lucide'
run: zip -r Lucide.zip build
+119 -67
View File
@@ -1,4 +1,4 @@
name: Release to NPM
name: Release Packages
on:
push:
@@ -6,94 +6,146 @@ on:
- 'v*'
jobs:
build-and-deploy:
pre-build:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
outputs:
VERSION: ${{ steps.get_version.outputs.VERSION }}
YARN_CACHE_DIR: ${{ steps.yarn_cache.outputs.YARN_CACHE_DIR }}
steps:
- name: Get the version
id: get_version
run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\/\v}
- name: Get yarn cache directory path
id: yarn_cache
run: echo "::set-output name=YARN_CACHE_DIR::$(yarn cache dir)"
lucide:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
clean: true
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 }}
# Build lucide
- name: Install Dependencies Lucide
- name: Set new version
run: yarn workspace lucide version --new-version ${{ needs.pre-build.outputs.VERSION }} --no-git-tag-version
- name: Build
run: yarn workspace lucide build
- name: Test
run: yarn workspace lucide test
- name: Publish
run: yarn workspace lucide publish
- name: Upload package.json
uses: actions/upload-artifact@v2
with:
path: packages/lucide/package.json
lucide-react:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/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: Build lucide package
run: yarn build
- name: Set Auth Token
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
- name: Test lucide package
run: yarn test
# Build lucide-react
- name: Install Dependencies lucide-react
run: yarn --pure-lockfile
working-directory: packages/lucide-react
- name: Build lucide-react
run: yarn build
working-directory: packages/lucide-react
- name: Test lucide-react
run: yarn test
working-directory: packages/lucide-react
# Build lucide-vue
- name: Install Dependencies lucide-vue
run: yarn --pure-lockfile
working-directory: packages/lucide-vue
- name: Build lucide-vue
run: yarn build
working-directory: packages/lucide-vue
- name: Test lucide-vue
run: yarn test
working-directory: packages/lucide-vue
# Publish lucide
- name: Set package.json version lucide
run: yarn version --new-version ${{ steps.get_version.outputs.VERSION }} --no-git-tag-version
run: yarn workspace lucide-react version --new-version ${{ needs.pre-build.outputs.VERSION }} --no-git-tag-version
- name: publish lucide
run: yarn publish
- name: Build
run: yarn workspace lucide-react build
# Publish lucide-react
- name: Set package.json version lucide-react
run: yarn version --new-version ${{ steps.get_version.outputs.VERSION }} --no-git-tag-version
working-directory: packages/lucide-react
- name: Test
run: yarn workspace lucide-react test
- name: publish lucide-react
run: yarn publish
working-directory: packages/lucide-react
- name: Publish
run: yarn workspace lucide-react publish
# Publish lucide-vue
- name: Set package.json version lucide-vue
run: yarn version --new-version ${{ steps.get_version.outputs.VERSION }} --no-git-tag-version
working-directory: packages/lucide-vue
- name: Upload package.json
uses: actions/upload-artifact@v2
with:
path: packages/lucide-react/package.json
- name: publish lucide-vue
run: yarn publish
working-directory: packages/lucide-vue
lucide-vue:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
needs: pre-build
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '12.x'
- name: Commit package.json
run: |
git add package.json
git add packages/lucide-react/package.json
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 to ${{ steps.get_version.outputs.VERSION }}" --no-verify --quiet
git remote set-url --push origin https://lucide-bot:$GITHUB_TOKEN@github.com/$GITHUB_REPOSITORY.git
git push origin HEAD:master
- 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 new version
run: yarn workspace lucide-vue version --new-version ${{ needs.pre-build.outputs.VERSION }} --no-git-tag-version
- name: Build
run: yarn workspace lucide-vue build
- name: Test
run: yarn workspace lucide-vue test
- name: Publish
run: yarn workspace lucide-vue publish
- name: Upload package.json
uses: actions/upload-artifact@v2
with:
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: |
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
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 -1
View File
@@ -4,9 +4,9 @@
node_modules
dist
build
/lib
sandbox
stash
coverage
stats
*.log
packages/**/src/icons/*.js
+4 -2
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).
+50 -129
View File
@@ -9,6 +9,15 @@
## What is Lucide?
Lucide is a community-run fork of [Feather Icons](https://github.com/feathericons/feather), open for anyone to contribute icons.
Started after growing disaffection of the moderation of the [Feather Icons](https://github.com/feathericons/feather) project, with over 300+ open issues and over 100+ open PRs, this project is no longer maintained. The owner of the project stopped merging icons and want to keep the project like it now is. Hundreds of developers/designer wasted their time trying to contribute, what a shame.
We're trying to expanding the icon set as much as possible while keeping it nice-looking, we do it as a community of devs and designers, join us!
### Why choose Lucide over Feather Icons
- Lucide already expended the icon set by 130+ in less then a year, so more icons to work with.
- Well maintained code base.
- Active community.
## Table of Contents
@@ -16,38 +25,15 @@ Lucide is a community-run fork of [Feather Icons](https://github.com/feathericon
* [Package managers](#package-managers)
* [CDN](#cdn)
* [Usage](#usage)
* [Unpkg](#with-unpkg)
* [ESModules](#with-esmodules)
* [Options](#additional-options)
* [Treeshake library](#treeshake-the-library-only-use-the-icons-you-use)
* [Custom binding](#custom-element-binding)
* [React](#with-react)
* [Vue](#with-vue)
* [Web](#web)
* [React](#react)
* [Vue](#vue)
* [Angular](#angular)
* [Figma](#figma)
* [Contributing](#contributing)
* [Community](#community)
* [License](#license)
## Installation
### Package Managers
``` bash
npm install lucide
#or
yarn add lucide
```
### CDN
``` html
<!-- Development version -->
<script src="https://unpkg.com/lucide@latest/dist/umd/lucide.js"></script>
<!-- Production version -->
<script src="https://unpkg.com/lucide@latest"></script>
```
## Usage
At its core, Lucide is a collection of [SVG](https://svgontheweb.com/#svg) files. This means that you can use Feather icons in all the same ways you can use SVGs (e.g. `img`, `background-image`, `inline`, `object`, `embed`, `iframe`). Here's a helpful article detailing the many ways SVGs can be used on the web: [SVG on the Web Implementation Options](https://svgontheweb.com/#implementation)
@@ -55,104 +41,23 @@ At its core, Lucide is a collection of [SVG](https://svgontheweb.com/#svg) files
The following are additional ways you can use Lucide.
With the Javascript library you can easily incorporate the icon you want in your webpage.
### With unpkg
### Web
Here is a complete example with unpkg
Implementation of the lucide icon library for web applications.
```html
<!DOCTYPE html>
<body>
<i icon-name="volume-2" class="my-class"></i>
<i icon-name="x"></i>
<i icon-name="menu"></i>
```sh
npm install lucide
<script src="https://unpkg.com/lucide@latest"></script>
<script>
lucide.createIcons();
</script>
</body>
#or
yarn add lucide
```
### With ESModules
For more details, see the [documentation](https://github.com/lucide-icons/lucide/blob/master/packages/lucide-react/README.md).
To reduce bundle size, lucide is built to be fully treeshakable.
The `createIcons` function will search for HTMLElements with the attribute `icon-name` and replace it with the svg from the given icon name.
### React
```html
<!-- Your HTML file -->
<i icon-name="menu"></i>
```
```js
import { createIcons, icons } from 'lucide';
// Caution, this will import all the icons and bundle them.
createIcons({icons});
// Recommended way, to include only the icons you need.
import { createIcons, Menu, ArrowRight, Globe } from 'lucide';
createIcons({
icons: {
Menu,
ArrowRight,
Globe,
},
});
```
#### Additional Options
In the `createIcons` function you can pass some extra parameters to adjust the `nameAttr` or add custom attributes like for example classes.
Here is a full example:
```js
import { createIcons } from 'lucide';
createIcons({
attrs: {
class: ['my-custom-class', 'icon'],
'stroke-width': 1,
stroke: '#333',
},
nameAttr: 'icon-name', // atrribute for the icon name.
});
```
#### Treeshake the library, only use the icons you use
```js
import { createIcons, Menu, ArrowRight, Globe } from 'lucide';
createIcons({
icons: {
Menu,
ArrowRight,
Globe,
},
});
```
#### Custom Element binding
```js
import { createElement, Menu } from 'lucide';
const menuIcon = createElement(Menu); // Returns HTMLElement (svg)
// set custom attributes with browser native functions
menuIcon.setAttribute('stroke', '#333');
menuIcon.classList.add('my-icon-class');
// Append HTMLElement in webpage
const myApp = document.getElementById('app');
myApp.appendChild(menuIcon);
```
### With React
You can also use the Lucide library using the react package.
Implementation of the lucide icon library for react applications.
```sh
yarn add lucide-react
@@ -162,11 +67,11 @@ yarn add lucide-react
npm install lucide-react
```
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-react#lucide-react).
### With Vue
### Vue
You can also use the Lucide library using the Vue package.
Implementation of the lucide icon library for vue applications.
```sh
yarn add lucide-vue
@@ -176,11 +81,27 @@ yarn add lucide-vue
npm install lucide-vue
```
For more details, see the [documentation](https://github.com/lucide-icons/lucide/blob/master/packages/lucide-vue/README.md).
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/projects/lucide-angular#lucide-angular).
### Figma
You can use the components from [this Figma file](https://www.figma.com/file/g0UipfQlRfGrntKPxZknM7/Featherity).
The lucide figma plugin.
Visit [Figma community page](https://www.figma.com/community/plugin/939567362549682242/Lucide-Icons) to install the plugin.
<img width="420" src="https://www.figma.com/community/plugin/939567362549682242/thumbnail" alt="Figma Lucide Cover">
## Contributing
@@ -194,10 +115,10 @@ Join the community on our [Discord](https://discord.gg/EH6nSts) server!
## License
Lucide is licensed under the [ISC License](https://github.com/lucide-icons/lucide/blob/master/LICENSE).
Lucide is totally free for commercial use and personally use, this software is licensed under the [ISC License](https://github.com/lucide-icons/lucide/blob/master/LICENSE).
<p align="center">
<a href="https://vercel.com?utm_source=lucide&utm_campaign=oss">
<img src="./site/public/vercel.svg" alt="Powered by Vercel" width="200" />
</a>
</p>
## Sponsors
<a href="https://vercel.com?utm_source=lucide&utm_campaign=oss">
<img src="./site/public/vercel.svg" alt="Powered by Vercel" width="200" />
</a>
+1 -9
View File
@@ -1,13 +1,5 @@
module.exports = {
presets: [
[
'@babel/env',
{
loose: true,
modules: false,
},
],
],
presets: ['@babel/env'],
env: {
test: {
presets: ['@babel/env'],
+1 -1
View File
@@ -14,5 +14,5 @@
<path d="M22 6l-3-3" />
<path d="M6 19l-2 2" />
<path d="M18 19l2 2" />
<path d="M8 13h8" />
<path d="M9 13h6" />
</svg>

Before

Width:  |  Height:  |  Size: 382 B

After

Width:  |  Height:  |  Size: 382 B

+2 -2
View File
@@ -14,6 +14,6 @@
<path d="M22 6l-3-3" />
<path d="M6 19l-2 2" />
<path d="M18 19l2 2" />
<path d="M12 9v8" />
<path d="M8 13h8" />
<path d="M12 10v6" />
<path d="M9 13h6" />
</svg>

Before

Width:  |  Height:  |  Size: 405 B

After

Width:  |  Height:  |  Size: 406 B

+15
View File
@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width="24"
height="24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect x="2" y="6" width="20" height="12" rx="2" />
<circle cx="12" cy="12" r="2" />
<path d="M6 12h.01M18 12h.01" />
</svg>

After

Width:  |  Height:  |  Size: 331 B

+13
View File
@@ -0,0 +1,13 @@
<svg
width="24"
height="24"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M11.767 19.089c4.924.868 6.14-6.025 1.216-6.894m-1.216 6.894L5.86 18.047m5.908 1.042l-.347 1.97m1.563-8.864c4.924.869 6.14-6.025 1.215-6.893m-1.215 6.893l-3.94-.694m5.155-6.2L8.29 4.26m5.908 1.042l.348-1.97M7.48 20.364l3.126-17.727" />
</svg>

After

Width:  |  Height:  |  Size: 455 B

+22
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

+18
View File
@@ -0,0 +1,18 @@
<svg
width="24"
height="24"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2" />
<path d="M15 2H9a1 1 0 00-1 1v2a1 1 0 001 1h6a1 1 0 001-1V3a1 1 0 00-1-1z" />
<path d="M12 11h4" />
<path d="M12 16h4" />
<path d="M8 11h.01" />
<path d="M8 16h.01" />
</svg>

After

Width:  |  Height:  |  Size: 468 B

+7 -7
View File
@@ -9,11 +9,11 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<line x1="8" y1="19" x2="8" y2="21" />
<line x1="8" y1="13" x2="8" y2="15" />
<line x1="16" y1="19" x2="16" y2="21" />
<line x1="16" y1="13" x2="16" y2="15" />
<line x1="12" y1="21" x2="12" y2="23" />
<line x1="12" y1="15" x2="12" y2="17" />
<path d="M20 16.58A5 5 0 0018 7h-1.26A8 8 0 104 15.25" />
<path d="M20 16.2A4.5 4.5 0 0017.5 8h-1.8A7 7 0 104 14.9" />
<path d="M8 19v1" />
<path d="M8 14v1" />
<path d="M16 19v1" />
<path d="M16 14v1" />
<path d="M12 21v1" />
<path d="M12 16v1" />
</svg>

Before

Width:  |  Height:  |  Size: 522 B

After

Width:  |  Height:  |  Size: 413 B

+19
View File
@@ -0,0 +1,19 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M20 16.2A4.5 4.5 0 0017.5 8h-1.8A7 7 0 104 14.9" />
<path d="M16 14v2" />
<path d="M8 14v2" />
<path d="M16 20h0" />
<path d="M8 20h0" />
<path d="M12 16v2" />
<path d="M12 22h0" />
</svg>

After

Width:  |  Height:  |  Size: 413 B

+2 -2
View File
@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M19 16.9A5 5 0 0018 7h-1.26a8 8 0 10-11.62 9" />
<polyline points="13 11 9 17 15 17 11 23" />
<path d="M17.5 17a4.5 4.5 0 100-9h-1.8a7 7 0 10-10.3 8" />
<path d="M12 12l-3 5h5l-3 5" />
</svg>

Before

Width:  |  Height:  |  Size: 315 B

After

Width:  |  Height:  |  Size: 303 B

+3 -2
View File
@@ -9,6 +9,7 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M22.61 16.95A5 5 0 0018 10h-1.26a8 8 0 00-7.05-6M5 5a8 8 0 004 15h9a5 5 0 001.7-.3" />
<line x1="1" y1="1" x2="23" y2="23" />
<path d="M2 2l20 20" />
<path d="M10 5a7 7 0 015.7 5h1.8a4.5 4.5 0 014 6.5" />
<path d="M18.8 18.8c-.4.2-.8.2-1.3.2H9A7 7 0 015.8 5.8" />
</svg>

Before

Width:  |  Height:  |  Size: 347 B

After

Width:  |  Height:  |  Size: 352 B

+16
View File
@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M20 16.2A4.5 4.5 0 0017.5 8h-1.8A7 7 0 104 14.9" />
<path d="M9.2 22l3-7" />
<path d="M9 13l-3 7" />
<path d="M17 13l-3 7" />
</svg>

After

Width:  |  Height:  |  Size: 351 B

+4 -4
View File
@@ -9,8 +9,8 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<line x1="16" y1="13" x2="16" y2="21" />
<line x1="8" y1="13" x2="8" y2="21" />
<line x1="12" y1="15" x2="12" y2="23" />
<path d="M20 16.58A5 5 0 0018 7h-1.26A8 8 0 104 15.25" />
<path d="M20 16.2A4.5 4.5 0 0017.5 8h-1.8A7 7 0 104 14.9" />
<path d="M16 14v6" />
<path d="M8 14v6" />
<path d="M12 16v6" />
</svg>

Before

Width:  |  Height:  |  Size: 395 B

After

Width:  |  Height:  |  Size: 342 B

+7 -7
View File
@@ -9,11 +9,11 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M20 17.58A5 5 0 0018 8h-1.26A8 8 0 104 16.25" />
<line x1="8" y1="16" x2="8.01" y2="16" />
<line x1="8" y1="20" x2="8.01" y2="20" />
<line x1="12" y1="18" x2="12.01" y2="18" />
<line x1="12" y1="22" x2="12.01" y2="22" />
<line x1="16" y1="16" x2="16.01" y2="16" />
<line x1="16" y1="20" x2="16.01" y2="20" />
<path d="M20 16.2A4.5 4.5 0 0017.5 8h-1.8A7 7 0 104 14.9" />
<path d="M8 15h0" />
<path d="M8 19h0" />
<path d="M12 17h0" />
<path d="M12 21h0" />
<path d="M16 15h0" />
<path d="M16 19h0" />
</svg>

Before

Width:  |  Height:  |  Size: 540 B

After

Width:  |  Height:  |  Size: 413 B

+1 -1
View File
@@ -9,5 +9,5 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M18 10h-1.26A8 8 0 109 20h9a5 5 0 000-10z" />
<path d="M17.5 19a4.5 4.5 0 100-9h-1.8A7 7 0 109 19h8.5z" />
</svg>

Before

Width:  |  Height:  |  Size: 265 B

After

Width:  |  Height:  |  Size: 271 B

+15
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

+3 -3
View File
@@ -9,7 +9,7 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<polyline points="8 17 12 21 16 17" />
<line x1="12" y1="12" x2="12" y2="21" />
<path d="M20.88 18.09A5 5 0 0018 9h-1.26A8 8 0 103 16.29" />
<path d="M20 16.2A4.5 4.5 0 0017.5 8h-1.8A7 7 0 104 14.9" />
<path d="M12 12v9" />
<path d="M8 17l4 4 4-4" />
</svg>

Before

Width:  |  Height:  |  Size: 355 B

After

Width:  |  Height:  |  Size: 324 B

+14
View File
@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M7 16.3c2.2 0 4-1.83 4-4.05 0-1.16-.57-2.26-1.71-3.19S7.29 6.75 7 5.3c-.29 1.45-1.14 2.84-2.29 3.76S3 11.1 3 12.25c0 2.22 1.8 4.05 4 4.05z" />
<path d="M12.56 6.6A10.97 10.97 0 0014 3.02c.5 2.5 2 4.9 4 6.5s3 3.5 3 5.5a6.98 6.98 0 01-11.91 4.97" />
</svg>

After

Width:  |  Height:  |  Size: 469 B

+15
View File
@@ -0,0 +1,15 @@
<svg
width="24"
height="24"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M4 10h12" />
<path d="M4 14h9" />
<path d="M19 6a7.7 7.7 0 00-5.2-2A7.9 7.9 0 006 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2" />
</svg>

After

Width:  |  Height:  |  Size: 347 B

+16
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="M4 22h14a2 2 0 002-2V7.5L14.5 2H6a2 2 0 00-2 2v4" />
<path d="M14 2v6h6" />
<path d="M2 15h10" />
<path d="M9 18l3-3-3-3" />
</svg>

After

Width:  |  Height:  |  Size: 350 B

+16
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="M4 22h14a2 2 0 002-2V7.5L14.5 2H6a2 2 0 00-2 2v4" />
<path d="M14 2v6h6" />
<path d="M2 15h10" />
<path d="M5 12l-3 3 3 3" />
</svg>

After

Width:  |  Height:  |  Size: 351 B

+20
View File
@@ -0,0 +1,20 @@
<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="M5.2 6.2l1.4 1.4" />
<path d="M2 13h2" />
<path d="M20 13h2" />
<path d="M17.4 7.6l1.4-1.4" />
<path d="M22 17H2" />
<path d="M22 21H2" />
<path d="M16 13a4 4 0 00-8 0" />
<path d="M12 5V2.5" />
</svg>

After

Width:  |  Height:  |  Size: 428 B

+17
View File
@@ -0,0 +1,17 @@
<svg
width="24"
height="24"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M6 3h12" />
<path d="M6 8h12" />
<path d="M6 13l8.5 8" />
<path d="M6 13h3" />
<path d="M9 13c6.667 0 6.667-10 0-10" />
</svg>

After

Width:  |  Height:  |  Size: 347 B

+15
View File
@@ -0,0 +1,15 @@
<svg
width="24"
height="24"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 9.5V21m0-11.5L6 3m6 6.5L18 3" />
<path d="M6 15h12" />
<path d="M6 11h12" />
</svg>

After

Width:  |  Height:  |  Size: 304 B

+15
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
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

+13
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="M21 12a9 9 0 11-6.219-8.56" />
</svg>

After

Width:  |  Height:  |  Size: 250 B

+15
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 9l5 12 1.774-5.226L21 14 9 9z" />
<path d="M16.071 16.071l4.243 4.243" />
<path d="M7.188 2.239l.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656l-2.12 2.122" />
</svg>

After

Width:  |  Height:  |  Size: 410 B

+16
View File
@@ -0,0 +1,16 @@
<svg
width="24"
height="24"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M18 7c0-5.333-8-5.333-8 0" />
<path d="M10 7v14" />
<path d="M6 21h12" />
<path d="M6 13h10" />
</svg>

After

Width:  |  Height:  |  Size: 321 B

+15
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

+2 -2
View File
@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<polyline points="22 10 22 16 16 16" />
<path d="M1.994 16c1.813-6.542 9.559-9.482 15.36-4.36l4.64 4.36" />
<path d="M21 7v6h-6" />
<path d="M3 17a9 9 0 019-9 9 9 0 016 2.3l3 2.7" />
</svg>

Before

Width:  |  Height:  |  Size: 320 B

After

Width:  |  Height:  |  Size: 287 B

+17
View File
@@ -0,0 +1,17 @@
<svg
width="24"
height="24"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M14 11c5.333 0 5.333-8 0-8" />
<path d="M6 11h8" />
<path d="M6 15h8" />
<path d="M9 21V3" />
<path d="M9 3h5" />
</svg>

After

Width:  |  Height:  |  Size: 341 B

+13
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

+9 -9
View File
@@ -9,13 +9,13 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="12" r="5" />
<line x1="12" y1="1" x2="12" y2="3" />
<line x1="12" y1="21" x2="12" y2="23" />
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64" />
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78" />
<line x1="1" y1="12" x2="3" y2="12" />
<line x1="21" y1="12" x2="23" y2="12" />
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36" />
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22" />
<circle cx="12" cy="12" r="4" />
<path d="M12 2v2" />
<path d="M12 20v2" />
<path d="M5 5l1.5 1.5" />
<path d="M17.5 17.5L19 19" />
<path d="M2 12h2" />
<path d="M20 12h2" />
<path d="M5 19l1.5-1.5" />
<path d="M17.5 6.5L19 5" />
</svg>

Before

Width:  |  Height:  |  Size: 623 B

After

Width:  |  Height:  |  Size: 456 B

+8 -8
View File
@@ -9,12 +9,12 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M17 18a5 5 0 00-10 0" />
<line x1="12" y1="2" x2="12" y2="9" />
<line x1="4.22" y1="10.22" x2="5.64" y2="11.64" />
<line x1="1" y1="18" x2="3" y2="18" />
<line x1="21" y1="18" x2="23" y2="18" />
<line x1="18.36" y1="11.64" x2="19.78" y2="10.22" />
<line x1="23" y1="22" x2="1" y2="22" />
<polyline points="8 6 12 2 16 6" />
<path d="M12 2v8" />
<path d="M5.2 11.2l1.4 1.4" />
<path d="M2 18h2" />
<path d="M20 18h2" />
<path d="M17.4 12.6l1.4-1.4" />
<path d="M22 22H2" />
<path d="M8 6l4-4 4 4" />
<path d="M16 18a4 4 0 00-8 0" />
</svg>

Before

Width:  |  Height:  |  Size: 557 B

After

Width:  |  Height:  |  Size: 432 B

+8 -8
View File
@@ -9,12 +9,12 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M17 18a5 5 0 00-10 0" />
<line x1="12" y1="9" x2="12" y2="2" />
<line x1="4.22" y1="10.22" x2="5.64" y2="11.64" />
<line x1="1" y1="18" x2="3" y2="18" />
<line x1="21" y1="18" x2="23" y2="18" />
<line x1="18.36" y1="11.64" x2="19.78" y2="10.22" />
<line x1="23" y1="22" x2="1" y2="22" />
<polyline points="16 5 12 9 8 5" />
<path d="M12 10V2" />
<path d="M5.2 11.2l1.4 1.4" />
<path d="M2 18h2" />
<path d="M20 18h2" />
<path d="M17.4 12.6l1.4-1.4" />
<path d="M22 22H2" />
<path d="M16 6l-4 4-4-4" />
<path d="M16 18a4 4 0 00-8 0" />
</svg>

Before

Width:  |  Height:  |  Size: 557 B

After

Width:  |  Height:  |  Size: 435 B

+15
View File
@@ -0,0 +1,15 @@
<svg
width="24"
height="24"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10 21V3h8" />
<path d="M6 16h9" />
<path d="M10 9.5h7" />
</svg>

After

Width:  |  Height:  |  Size: 282 B

+15
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
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="M2 12h10" />
<path d="M9 4v16" />
<path d="M3 9l3 3-3 3" />
<path d="M12 6L9 9 6 6" />
<path d="M6 18l3-3 1.5 1.5" />
<path d="M18 2a2 2 0 00-2 2v10.5a4 4 0 104 0V4a2 2 0 00-2-2z" />
</svg>

After

Width:  |  Height:  |  Size: 412 B

+18
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="M12 9a4 4 0 00-2 7.5" />
<path d="M12 3v2" />
<path d="M6.6 18.4l-1.4 1.4" />
<path d="M18 2a2 2 0 012 2v10.5a4 4 0 11-4 0V4c0-1.1.9-2 2-2z" />
<path d="M4 13H2" />
<path d="M6.6 7.6L5.2 6.2" />
</svg>

After

Width:  |  Height:  |  Size: 424 B

+1 -1
View File
@@ -9,5 +9,5 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M14 14.76V3.5a2.5 2.5 0 00-5 0v11.26a4.5 4.5 0 105 0z" />
<path d="M12 2a2 2 0 00-2 2v10.5a4 4 0 104 0V4a2 2 0 00-2-2z" />
</svg>

Before

Width:  |  Height:  |  Size: 277 B

After

Width:  |  Height:  |  Size: 275 B

+2 -2
View File
@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<polyline points="2 10 2 16 8 16" />
<path d="M22 16c-1.814-6.542-9.56-9.482-15.36-4.36L2 16" />
<path d="M3 7v6h6" />
<path d="M21 17a9 9 0 00-9-9 9 9 0 00-6 2.3L3 13" />
</svg>

Before

Width:  |  Height:  |  Size: 309 B

After

Width:  |  Height:  |  Size: 287 B

+3 -4
View File
@@ -9,8 +9,7 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<polyline points="16 16 12 12 8 16" />
<line x1="12" y1="12" x2="12" y2="21" />
<path d="M20.39 18.39A5 5 0 0018 9h-1.26A8 8 0 103 16.3" />
<polyline points="16 16 12 12 8 16" />
<path d="M20 16.2A4.5 4.5 0 0017.5 8h-1.8A7 7 0 104 14.9" />
<path d="M12 12v9" />
<path d="M16 16l-4-4-4 4" />
</svg>

Before

Width:  |  Height:  |  Size: 395 B

After

Width:  |  Height:  |  Size: 326 B

+3 -1
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

-5
View File
@@ -1,5 +0,0 @@
[build]
base = "site/"
publish = "build/"
command = "yarn deploy"
ignore = "git diff --quiet origin/master HEAD ../icons ../site"
+33 -35
View File
@@ -1,66 +1,64 @@
{
"name": "lucide",
"description": "Lucide is a community-run fork of Feather Icons, open for anyone to contribute icons.",
"version": "0.14.0",
"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"
"private": true,
"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/**"
]
},
"amdName": "lucide",
"source": "build/lucide.js",
"main": "dist/cjs/lucide.js",
"main:umd": "dist/umd/lucide.js",
"module": "dist/esm/lucide.js",
"unpkg": "dist/umd/lucide.min.js",
"sideEffects": false,
"scripts": {
"start": "babel-watch --watch src",
"clean": "rimraf dist && rimraf build",
"build": "yarn clean && yarn build:move && yarn build:icons && yarn build:es && yarn build:bundles",
"build:move": "cp -av src build",
"build:icons": "npx babel-node ./scripts/buildIcons.js --presets @babel/env",
"build:es": "babel build -d dist/esm",
"build:bundles": "rollup -c rollup.config.js",
"optimize": "npx babel-node ./scripts/optimizeSvgs.js --presets @babel/env",
"addtags": "npx babel-node ./scripts/addMissingKeysToTags.js --presets @babel/env",
"test": "jest"
"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",
"generate:changelog": "babel-node ./scripts/generateChangelog.js --presets @babel/env"
},
"devDependencies": {
"@ampproject/rollup-plugin-closure-compiler": "^0.25.2",
"@atomico/rollup-plugin-sizes": "^1.1.4",
"@babel/cli": "^7.10.5",
"@babel/core": "^7.11.1",
"@babel/node": "^7.10.5",
"@babel/node": "^7.13.10",
"@babel/plugin-transform-runtime": "^7.11.5",
"@babel/preset-env": "^7.11.0",
"@rollup/plugin-babel": "^5.0.0",
"babel-jest": "^26.3.0",
"@rollup/plugin-commonjs": "^17.1.0",
"@rollup/plugin-node-resolve": "^11.2.0",
"@rollup/plugin-replace": "^2.4.1",
"babel-jest": "^26.6.3",
"babel-plugin-add-import-extension": "^1.4.3",
"cheerio": "^1.0.0-rc.2",
"core-js": "3",
"eslint": "^4.19.1",
"eslint-config-airbnb-base": "^12.1.0",
"eslint-config-prettier": "^2.9.0",
"eslint-plugin-import": "^2.5.0",
"eslint-plugin-prettier": "^2.5.0",
"html-minifier": "^3.5.8",
"htmlparser2": "^4.1.0",
"husky": "^4.3.6",
"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-commonjs": "^10.1.0",
"rollup-plugin-license": "^2.0.0",
"rollup-plugin-node-resolve": "^5.2.0",
"rollup-plugin-replace": "^2.2.0",
"rollup-plugin-terser": "^5.2.0",
"rollup-plugin-visualizer": "^4.1.0",
"svgo": "^1.3.2"
"svgo": "^1.3.2",
"svgson": "^4.1.0"
},
"husky": {
"hooks": {
+51
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
+48
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"
}
+65
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"
}
}
@@ -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
@@ -5,7 +5,7 @@ export default {
viewBox: '0 0 24 24',
fill: 'none',
stroke: 'currentColor',
strokeWidth: 2,
strokeLinecap: 'round',
strokeLinejoin: 'round',
'stroke-width': 2,
'stroke-linecap': 'round',
'stroke-linejoin': 'round',
};
@@ -0,0 +1,4 @@
export * from './build/icons-index';
import * as icons from './build/icons-index';
export { icons };
@@ -0,0 +1,7 @@
{
"ngPackage": {
"lib": {
"entryFile": "../icons-index.ts"
}
}
}
@@ -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
});
};
@@ -0,0 +1,4 @@
export * from './src/lib/lucide-angular.component';
export * from './src/lib/lucide-angular.module';
export * from './lucide';
@@ -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);
}
@@ -0,0 +1,7 @@
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/lucide-angular",
"lib": {
"entryFile": "./lib-index.ts"
}
}
@@ -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"
}
}
@@ -0,0 +1,3 @@
export class Icons {
constructor(private icons: object) {}
}
@@ -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();
});
});
@@ -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());
}
}
@@ -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 }
]
};
}
}
@@ -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);
@@ -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"
]
}
@@ -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
}
}
@@ -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"
]
}
@@ -0,0 +1,17 @@
{
"extends": "../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"lib",
"camelCase"
],
"component-selector": [
true,
"element",
"",
"kebab-case"
]
}
}
@@ -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');
@@ -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)}
];
`;
+31
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
}
}
+140
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
}
}
+3 -2
View File
@@ -1,7 +1,8 @@
{
"name": "lucide-figma",
"version": "0.13.0",
"version": "0.15.0",
"license": "ISC",
"private": true,
"main": "build/ui.js",
"scripts": {
"build": "webpack --mode=production",
@@ -14,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.0",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"style-loader": "^0.23.1",
+15
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.
+3 -1
View File
@@ -1,6 +1,8 @@
# Lucide React
Use the lucide icon library in you react app.
Implementation of the lucide icon library for react applications.
> What is lucide? Read it [here](https://github.com/lucide-icons/lucide#what-is-lucide).
## Installation
+3
View File
@@ -1,3 +1,6 @@
const mainConfig = require('../../babel.config');
module.exports = {
presets: ['react-app'],
env: mainConfig.env,
};
-3
View File
@@ -3,9 +3,6 @@ module.exports = {
roots: ['<rootDir>/src/', '<rootDir>/tests/'],
moduleFileExtensions: ['js'],
transformIgnorePatterns: [`/node_modules`],
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1',
},
transform: {
'^.+\\.js$': 'babel-jest',
},
+7 -6
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.0",
"license": "ISC",
"homepage": "https://lucide.dev",
"bugs": "https://github.com/lucide-icons/lucide/issues",
@@ -16,12 +16,13 @@
"main:umd": "dist/umd/lucide-react.js",
"module": "dist/esm/lucide-react.js",
"unpkg": "dist/umd/lucide-react.min.js",
"typings": "dist/lucide-react.d.ts",
"scripts": {
"build": "yarn clean && yarn build:move && yarn build:icons && yarn build:es && yarn build:bundles",
"clean": "rm -rf dist && rm -rf build",
"build:move": "cp -av src build",
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-react/build --templateSrc=../packages/lucide-react/scripts/exportTemplate --camelizeAttrs --noDefaultAttrs --renderUniqueKey",
"build:es": "yarn --cwd ../../ babel packages/lucide-react/build -d packages/lucide-react/dist/esm",
"build": "yarn clean && yarn build:icons && yarn build:es && yarn build:types && yarn build:bundles",
"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",
"build:bundles": "yarn --cwd ../../ rollup -c packages/lucide-react/rollup.config.js",
"test": "jest"
},
+5 -4
View File
@@ -1,11 +1,11 @@
const plugins = require('../../rollup.plugins');
const pkg = require('./package.json');
import plugins from '../../rollup.plugins';
import pkg from './package.json';
const packageName = 'LucideReact';
const outputFileName = 'lucide-react';
const rootDir = 'packages/lucide-react'; // It runs from the root
const outputDir = `${rootDir}/dist`;
const inputs = [`${rootDir}/build/lucide-react.js`];
const inputs = [`${rootDir}/src/lucide-react.js`];
const bundles = [
{
format: 'umd',
@@ -30,7 +30,7 @@ const configs = bundles
inputs.map(input => ({
input,
plugins: plugins(pkg, minify),
external: ['react', 'prop-types'],
external: ['react', 'prop-types', 'lucide'],
output: {
name: packageName,
file: `${outputDir}/${format}/${outputFileName}${minify ? '.min' : ''}.js`,
@@ -39,6 +39,7 @@ const configs = bundles
globals: {
react: 'react',
'prop-types': 'PropTypes',
lucide: 'lucide',
},
},
})),
@@ -0,0 +1,44 @@
import path from 'path';
import {
writeFile,
readSvgDirectory,
resetFile,
toPascalCase,
appendFile,
} from '../../../scripts/helpers';
const srcDirectory = path.join(__dirname, '../dist');
// Declare type definitions
const typeDefinitions = `\
/// <reference types="react" />
import { SVGAttributes } from 'react'
// Create interface extending SVGAttributes
export interface LucideProps extends Partial<React.SVGProps<SVGSVGElement>> {
color?: string
size?: string | number
stroke?: string | number
strokeWidth?: string | number
}
// Generated icons
`;
const ICONS_DIR = path.resolve(__dirname, '../../../icons');
const TYPES_FILE = 'lucide-react.d.ts';
resetFile(TYPES_FILE, srcDirectory);
writeFile(typeDefinitions, TYPES_FILE, srcDirectory);
const svgFiles = readSvgDirectory(ICONS_DIR);
svgFiles.forEach(svgFile => {
const iconName = path.basename(svgFile, '.svg');
const componentName = toPascalCase(iconName);
const exportTypeString = `export declare const ${componentName}: (props: LucideProps) => JSX.Element;\n`;
appendFile(exportTypeString, TYPES_FILE, srcDirectory);
});
console.log(`Generated ${TYPES_FILE} file with`, svgFiles.length, 'icons');
@@ -1,8 +1,7 @@
export default ({ componentName, node }) => `
export default ({ componentName, children }) => `
import createReactComponent from '../createReactComponent';
import defaultAttributes from '../defaultAttributes';
const ${componentName} = createReactComponent('${componentName}', ['svg', defaultAttributes, ${node}]);
const ${componentName} = createReactComponent('${componentName}', ${JSON.stringify(children)});
export default ${componentName};
`;
@@ -1,21 +1,22 @@
import { forwardRef, createElement } from 'react';
import PropTypes from 'prop-types';
import defaultAttributes from './defaultAttributes';
export default (iconName, [tag, attrs, children]) => {
export default (iconName, iconNode) => {
const Component = forwardRef(
({ color = 'currentColor', size = 24, strokeWidth = 2, ...rest }, ref) =>
createElement(
tag,
'svg',
{
ref,
...attrs,
...defaultAttributes,
width: size,
height: size,
stroke: color,
strokeWidth,
...rest,
},
children.map(([childTag, childAttrs]) => createElement(childTag, childAttrs)),
iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
),
);
+1
View File
@@ -0,0 +1 @@
Folder for generated icons
-5
View File
@@ -1,5 +0,0 @@
/*
Icons exports.
Will be generated
*/
@@ -1,6 +1,6 @@
import React from 'react';
import renderer from 'react-test-renderer';
import { Grid } from '..'
import { Grid } from '../src/icons'
describe('Using lucide icon components', () => {
it('should render an component', () => {
+3 -3
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"
+15
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.
+3 -1
View File
@@ -1,6 +1,8 @@
# Lucide Vue
Use the lucide icon library in you Vue app.
Implementation of the lucide icon library for Vue applications.
> What is lucide? Read it [here](https://github.com/lucide-icons/lucide#what-is-lucide).
## Installation
+1 -1
View File
@@ -7,7 +7,7 @@ module.exports = {
'^.+\\.vue$': 'vue-jest',
},
transformIgnorePatterns: [`/node_modules`],
snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'],
snapshotSerializers: ['jest-serializer-vue'],
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1',
},
+5 -8
View File
@@ -1,6 +1,6 @@
{
"name": "lucide-vue",
"version": "0.14.0",
"version": "0.15.0",
"author": "Eric Fennis",
"description": "Lucide Vue Package",
"license": "ISC",
@@ -21,19 +21,16 @@
"vue": "^2.6.12"
},
"scripts": {
"build": "yarn clean && yarn build:move && yarn build:icons && yarn build:es && yarn build:bundles",
"clean": "rm -rf dist && rm -rf build",
"build:move": "cp -av src build",
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-vue/build --templateSrc=../packages/lucide-vue/scripts/exportTemplate --noDefaultAttrs",
"build:es": "yarn --cwd ../../ babel packages/lucide-vue/build -d packages/lucide-vue/dist/esm",
"build": "yarn clean && yarn build:icons && yarn build:es && yarn build:bundles",
"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",
"test": "jest",
"test:watch": "jest --watchAll"
},
"devDependencies": {
"@vue/test-utils": "^1.1.2",
"babel-jest": "^26.6.3",
"jest": "^26.6.3",
"jest-serializer-vue": "^2.0.2",
"vue-jest": "^3.0.7",
"vue-template-compiler": "^2.6.12"
+3 -3
View File
@@ -1,11 +1,11 @@
const plugins = require('../../rollup.plugins');
const pkg = require('./package.json');
import plugins from '../../rollup.plugins';
import pkg from './package.json';
const packageName = 'LucideVue';
const outputFileName = 'lucide-vue';
const rootDir = 'packages/lucide-vue'; // It runs from the root
const outputDir = `${rootDir}/dist`;
const inputs = [`${rootDir}/build/lucide-vue.js`];
const inputs = [`${rootDir}/src/lucide-vue.js`];
const bundles = [
{
format: 'umd',
@@ -1,8 +1,7 @@
export default ({ componentName, node }) => `
export default ({ componentName, children }) => `
import createVueComponent from '../createVueComponent';
import defaultAttributes from '../defaultAttributes';
const ${componentName} = createVueComponent('${componentName}Icon', ['svg', defaultAttributes, ${node}]);
const ${componentName} = createVueComponent('${componentName}Icon', ${JSON.stringify(children)});
export default ${componentName};
`;
@@ -1,4 +1,6 @@
export default (iconName, [tag, defaultAttrs, children]) => ({
import defaultAttributes from './defaultAttributes';
export default (iconName, iconNode) => ({
name: iconName,
functional: true,
props: {
@@ -27,13 +29,13 @@ export default (iconName, [tag, defaultAttrs, children]) => ({
},
) {
return createElement(
tag,
'svg',
{
// eslint-disable-next-line prettier/prettier
class: [defaultClass, data.class, data.staticClass, data.attrs && data.attrs.class].filter(Boolean),
style: [data.style, data.staticStyle, data.attrs && data.attrs.style].filter(Boolean),
attrs: {
...defaultAttrs,
...defaultAttributes,
width: size,
height: size,
stroke: color,
@@ -41,7 +43,7 @@ export default (iconName, [tag, defaultAttrs, children]) => ({
...data.attrs,
},
},
children.map(([childTag, childAttrs]) => createElement(childTag, { attrs: childAttrs })),
iconNode.map(([tag, attrs]) => createElement(tag, { attrs })),
);
},
});
+1
View File
@@ -0,0 +1 @@
Folder for generated icons

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