Compare commits
109 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a98692b37c | ||
|
|
a843cf6d6b | ||
|
|
72736a6879 | ||
|
|
296bb35317 | ||
|
|
7adecdc5df | ||
|
|
23259c9e3f | ||
|
|
5770517a71 | ||
|
|
601b7ad1fc | ||
|
|
e79d778606 | ||
|
|
04dad48bc5 | ||
|
|
dd9c48196d | ||
|
|
db9cd7af52 | ||
|
|
893dc9e0e8 | ||
|
|
b172f4316e | ||
|
|
60e42bd350 | ||
|
|
272e33d320 | ||
|
|
0af9969e53 | ||
|
|
afbe6576d6 | ||
|
|
a61276c72e | ||
|
|
e43c2a7f23 | ||
|
|
06fe7d6a3f | ||
|
|
81ff3fc1d1 | ||
|
|
776ef4f43c | ||
|
|
e4edabddb9 | ||
|
|
028afec837 | ||
|
|
049c4cd61e | ||
|
|
b13a7bf1ab | ||
|
|
e278f27a61 | ||
|
|
f70a0e1945 | ||
|
|
26f85a75d2 | ||
|
|
da7c09f66e | ||
|
|
f5175bd4b2 | ||
|
|
cb7da732fe | ||
|
|
2200ab47d3 | ||
|
|
c537469638 | ||
|
|
f09836cc84 | ||
|
|
eaf51b2da4 | ||
|
|
66b3574d64 | ||
|
|
435d2bd66b | ||
|
|
ca330378d0 | ||
|
|
aa7efeacc4 | ||
|
|
0febdd831f | ||
|
|
99d5d7a6da | ||
|
|
533b820e32 | ||
|
|
cd7b9bf03d | ||
|
|
c97b456bce | ||
|
|
9a04665ad2 | ||
|
|
2d5a5fd90a | ||
|
|
7ed8092d8a | ||
|
|
7128fc608e | ||
|
|
b470bc691c | ||
|
|
d67626a6e1 | ||
|
|
10b146a358 | ||
|
|
641bf8a933 | ||
|
|
f0f168376a | ||
|
|
34594af2bd | ||
|
|
e686494545 | ||
|
|
6eb0acac4e | ||
|
|
8b0cf96c69 | ||
|
|
48376a2621 | ||
|
|
2c580552b4 | ||
|
|
95a625dcd4 | ||
|
|
3af8508c46 | ||
|
|
609fd065da | ||
|
|
b4afb9c8da | ||
|
|
3292edab39 | ||
|
|
754300465a | ||
|
|
5834504dd9 | ||
|
|
29a7763ce2 | ||
|
|
f19e0696ce | ||
|
|
872adfa333 | ||
|
|
428460ea46 | ||
|
|
96da221758 | ||
|
|
0cf7c22379 | ||
|
|
f78ef546a8 | ||
|
|
7558bef262 | ||
|
|
51b12ae55c | ||
|
|
c60323c28c | ||
|
|
d71b18d0e7 | ||
|
|
10e3aa4377 | ||
|
|
d1262f4c7f | ||
|
|
03aefa2cd5 | ||
|
|
41f8ce9660 | ||
|
|
2b41a44538 | ||
|
|
8ffb43b8e0 | ||
|
|
b39b835390 | ||
|
|
24a6ef9fd9 | ||
|
|
17967a9598 | ||
|
|
9dc93a602d | ||
|
|
b672e884d9 | ||
|
|
46bbb6485b | ||
|
|
b530c40486 | ||
|
|
5d1fdd703c | ||
|
|
706486b3b7 | ||
|
|
3a7b878847 | ||
|
|
2eb158f32b | ||
|
|
3fa66dac91 | ||
|
|
9a236be5d5 | ||
|
|
dd39ba7722 | ||
|
|
1b6847f0c7 | ||
|
|
3b8297f10c | ||
|
|
530fffc49d | ||
|
|
6461798850 | ||
|
|
e731e808a3 | ||
|
|
099575b9cf | ||
|
|
d79a33d514 | ||
|
|
6630882137 | ||
|
|
a723c0f137 | ||
|
|
54a6ec1d5c |
61
.github/workflows/font.yml
vendored
@@ -1,61 +0,0 @@
|
||||
name: Build Lucide
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
Build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
- name: Clone 'Lucide'
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Update repos
|
||||
run: sudo apt-get update
|
||||
|
||||
- name: Install FontForge
|
||||
run: sudo apt-get install zlib1g-dev fontforge
|
||||
|
||||
- name: Clone sfnt2woff-zopfli repo
|
||||
run: git clone https://github.com/bramstein/sfnt2woff-zopfli.git sfnt2woff-zopfli
|
||||
|
||||
- name: Install and move sfnt2woff-zopfli
|
||||
run: |
|
||||
cd sfnt2woff-zopfli
|
||||
make
|
||||
sudo mv sfnt2woff-zopfli /usr/local/bin/sfnt2woff
|
||||
|
||||
- name: Clone woff2
|
||||
run: git clone --recursive https://github.com/google/woff2.git
|
||||
|
||||
- name: Install woff2
|
||||
run: |
|
||||
cd woff2
|
||||
sudo make clean all
|
||||
sudo mv woff2_compress /usr/local/bin/ && sudo mv woff2_decompress /usr/local/bin/
|
||||
|
||||
- name: Install Font Custom dependency
|
||||
run: sudo gem install fontcustom
|
||||
|
||||
- name: Install "outline-stroke"
|
||||
run: sudo yarn add svg-outline-stroke -W
|
||||
|
||||
- name: "Outline SVG"
|
||||
run: mkdir converted_icons && node scripts/outline_svg.js
|
||||
|
||||
- name: Build 'Lucide'
|
||||
run: echo "Building Lucide font" && fontcustom compile ./converted_icons -h -n Lucide -o build -F
|
||||
|
||||
- name: Zip 'Lucide'
|
||||
run: zip -r Lucide.zip build
|
||||
|
||||
- name: 'Upload to Artifacts'
|
||||
uses: actions/upload-artifact@v1.0.0
|
||||
with:
|
||||
name: Lucide
|
||||
path: build
|
||||
254
.github/workflows/release.yml
vendored
@@ -13,11 +13,10 @@ on:
|
||||
|
||||
jobs:
|
||||
pre-build:
|
||||
if: github.repository == 'lucide-icons/lucide'
|
||||
if: github.repository == 'lucide-icons/lucide' && contains('["locness3","ericfennis", "johnletey"]', github.actor)
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
VERSION: ${{ steps.get_version.outputs.VERSION }}
|
||||
YARN_CACHE_DIR: ${{ steps.yarn_cache.outputs.YARN_CACHE_DIR }}
|
||||
|
||||
steps:
|
||||
- name: Get the version
|
||||
@@ -28,25 +27,19 @@ jobs:
|
||||
env:
|
||||
VERSION_REF: ${{ github.event.inputs.version || github.ref }}
|
||||
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn_cache
|
||||
run: echo "::set-output name=YARN_CACHE_DIR::$(yarn cache dir)"
|
||||
|
||||
lucide:
|
||||
if: github.repository == 'lucide-icons/lucide'
|
||||
runs-on: ubuntu-latest
|
||||
needs: pre-build
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
- uses: actions/setup-node@v2.4.0
|
||||
with:
|
||||
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
node-version: '14'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn --pure-lockfile
|
||||
run: yarn
|
||||
|
||||
- name: Set Auth Token
|
||||
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
|
||||
@@ -75,15 +68,13 @@ jobs:
|
||||
needs: pre-build
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
- uses: actions/setup-node@v2.4.0
|
||||
with:
|
||||
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
node-version: '14'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn --pure-lockfile
|
||||
run: yarn
|
||||
|
||||
- name: Set Auth Token
|
||||
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
|
||||
@@ -112,19 +103,13 @@ jobs:
|
||||
needs: pre-build
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
- uses: actions/setup-node@v2.4.0
|
||||
with:
|
||||
node-version: '12.x'
|
||||
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
node-version: '14'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn --pure-lockfile
|
||||
run: yarn
|
||||
|
||||
- name: Set Auth Token
|
||||
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
|
||||
@@ -153,19 +138,13 @@ jobs:
|
||||
needs: pre-build
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
- uses: actions/setup-node@v2.4.0
|
||||
with:
|
||||
node-version: '12.x'
|
||||
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
node-version: '14'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn --pure-lockfile
|
||||
run: yarn
|
||||
|
||||
- name: Set Auth Token
|
||||
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
|
||||
@@ -194,12 +173,10 @@ jobs:
|
||||
needs: pre-build
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
- uses: actions/setup-node@v2.4.0
|
||||
with:
|
||||
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
node-version: '14'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn --pure-lockfile
|
||||
@@ -231,15 +208,13 @@ jobs:
|
||||
needs: pre-build
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
- uses: actions/setup-node@v2.4.0
|
||||
with:
|
||||
path: ${{ needs.pre-build.outputs.YARN_CACHE_DIR }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
node-version: '14'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn --pure-lockfile
|
||||
run: yarn
|
||||
|
||||
- name: Set Auth Token
|
||||
run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }}
|
||||
@@ -262,28 +237,171 @@ jobs:
|
||||
name: lucide-preact-package-json
|
||||
path: packages/lucide-preact/package.json
|
||||
|
||||
upload-package-jsons:
|
||||
lucide-font:
|
||||
if: github.repository == 'lucide-icons/lucide'
|
||||
runs-on: ubuntu-latest
|
||||
needs: [pre-build, lucide, lucide-react, lucide-vue, lucide-vue-next, lucide-angular, lucide-preact]
|
||||
needs: pre-build
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2.4.0
|
||||
with:
|
||||
node-version: '14'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Update repos
|
||||
run: sudo apt-get update
|
||||
|
||||
- name: Install FontForge
|
||||
run: sudo apt-get install zlib1g-dev fontforge
|
||||
|
||||
- name: Clone sfnt2woff-zopfli repo
|
||||
run: git clone https://github.com/bramstein/sfnt2woff-zopfli.git sfnt2woff-zopfli
|
||||
|
||||
- name: Install and move sfnt2woff-zopfli
|
||||
run: |
|
||||
cd sfnt2woff-zopfli
|
||||
make
|
||||
sudo mv sfnt2woff-zopfli /usr/local/bin/sfnt2woff
|
||||
|
||||
- name: Clone woff2
|
||||
run: git clone --recursive https://github.com/google/woff2.git
|
||||
|
||||
- name: Install woff2
|
||||
run: |
|
||||
cd woff2
|
||||
sudo make clean all
|
||||
sudo mv woff2_compress /usr/local/bin/ && sudo mv woff2_decompress /usr/local/bin/
|
||||
|
||||
- name: Install Font Custom dependency
|
||||
run: sudo gem install fontcustom
|
||||
|
||||
- name: Install
|
||||
run: yarn
|
||||
|
||||
- name: "Outline SVG"
|
||||
run: yarn build:outline-icons
|
||||
|
||||
- name: Build Icon Font
|
||||
run: |
|
||||
mkdir build
|
||||
list=(-200 -300 "" -500 -600)
|
||||
command=''
|
||||
for name in "${list[@]}"
|
||||
do
|
||||
subcommand="(fontcustom compile "./converted_icons${name}" -h -n "lucide${name}" -o ./tmp -F && mv ./tmp/* build)"
|
||||
if [ -z "$command" ]
|
||||
then
|
||||
command="$subcommand";
|
||||
else
|
||||
command="$command & $subcommand";
|
||||
fi
|
||||
done
|
||||
|
||||
eval $command
|
||||
|
||||
- name: 'Upload to Artifacts'
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: lucide-font
|
||||
path: build
|
||||
|
||||
lucide-flutter:
|
||||
if: github.repository == 'lucide-icons/lucide'
|
||||
runs-on: ubuntu-latest
|
||||
needs: [pre-build, lucide-font]
|
||||
container:
|
||||
image: cirrusci/flutter:latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/download-artifact@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: '~/.pub-cache'
|
||||
key: ${{ runner.os }}-pub-${{ hashFiles('~/.pub-cache') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pub-
|
||||
|
||||
- name: Setup credentials
|
||||
run: |
|
||||
mkdir -p ~/.pub-cache
|
||||
cat <<EOF > ~/.pub-cache/credentials.json
|
||||
{
|
||||
"accessToken": "${{ secrets.GOOGLE_OAUTH_ACCESS_TOKEN }}",
|
||||
"refreshToken": "${{ secrets.GOOGLE_OAUTH_REFRESH_TOKEN }}",
|
||||
"idToken": "${{ secrets.GOOGLE_OAUTH_ID_TOKEN }}",
|
||||
"tokenEndpoint":"https://accounts.google.com/o/oauth2/token",
|
||||
"scopes": [ "openid", "https://www.googleapis.com/auth/userinfo.email" ],
|
||||
"expiration": 1629835569218
|
||||
}
|
||||
EOF
|
||||
|
||||
- name: Get packages
|
||||
run: flutter pub get
|
||||
working-directory: packages/lucide-flutter
|
||||
|
||||
- name: List lucide-font folder
|
||||
run: ls lucide-font
|
||||
|
||||
- name: Move the ttf file
|
||||
run: mv lucide-font/lucide.ttf packages/lucide-flutter/assets/Lucide.ttf
|
||||
|
||||
- name: Generate exports file
|
||||
run: dart tool/generate_fonts.dart lucide-font/lucide-preview.html
|
||||
working-directory: packages/lucide-flutter
|
||||
|
||||
- name: Update yaml
|
||||
run: sed -E 's/(version:)[^\n]*/\1 ${{ needs.pre-build.outputs.VERSION }}/;' pubspec.yaml > pubspec && mv pubspec pubspec.yaml
|
||||
working-directory: packages/lucide-flutter
|
||||
|
||||
- name: Flutter publish
|
||||
run: flutter pub publish -f
|
||||
working-directory: packages/lucide-flutter
|
||||
|
||||
- name: Upload pubspec.yaml
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: lucide-flutter-pubspec-yaml
|
||||
path: packages/lucide-flutter/pubspec.yaml
|
||||
|
||||
|
||||
post-release:
|
||||
if: github.repository == 'lucide-icons/lucide'
|
||||
runs-on: ubuntu-latest
|
||||
needs: [pre-build, lucide, lucide-react, lucide-vue, lucide-vue-next, lucide-angular, lucide-preact, lucide-flutter, lucide-font]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/download-artifact@v2
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/download-artifact@v2
|
||||
|
||||
- name: Commit package.jsons
|
||||
run: |
|
||||
mv lucide-package-json/package.json packages/lucide/package.json
|
||||
mv lucide-react-package-json/package.json packages/lucide-react/package.json
|
||||
mv lucide-vue-package-json/package.json packages/lucide-vue/package.json
|
||||
mv lucide-preact-package-json/package.json packages/lucide-preact/package.json
|
||||
mv lucide-vue-next-package-json/package.json packages/lucide-vue-next/package.json
|
||||
mv lucide-angular-package-json/package.json packages/lucide-angular/package.json
|
||||
- name: Commit package files
|
||||
run: |
|
||||
mv lucide-package-json/package.json packages/lucide/package.json
|
||||
mv lucide-react-package-json/package.json packages/lucide-react/package.json
|
||||
mv lucide-vue-package-json/package.json packages/lucide-vue/package.json
|
||||
mv lucide-preact-package-json/package.json packages/lucide-preact/package.json
|
||||
mv lucide-vue-next-package-json/package.json packages/lucide-vue-next/package.json
|
||||
mv lucide-angular-package-json/package.json packages/lucide-angular/package.json
|
||||
mv lucide-flutter-pubspec-yaml/pubspec.yaml packages/lucide-flutter/pubspec.yaml
|
||||
|
||||
- name: Commit package.jsons
|
||||
run: |
|
||||
git add packages/*/package.json
|
||||
git -c user.name="Lucide Bot" -c user.email="lucide-bot@users.noreply.github.com" \
|
||||
commit -m ":package: Bump lucide package versions to ${{ needs.pre-build.outputs.VERSION }}" --no-verify --quiet
|
||||
git remote set-url --push origin https://lucide-bot:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY.git
|
||||
git push origin HEAD:master
|
||||
- name: Commit package.jsons
|
||||
run: |
|
||||
git add packages/*/package.json packages/lucide-flutter/pubspec.yaml
|
||||
git -c user.name="Lucide Bot" -c user.email="lucide-bot@users.noreply.github.com" \
|
||||
commit -m ":package: Bump lucide package versions to ${{ needs.pre-build.outputs.VERSION }}" --no-verify --quiet
|
||||
git remote set-url --push origin https://lucide-bot:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY.git
|
||||
git push origin HEAD:master
|
||||
|
||||
- name: Zip font and icons
|
||||
run: |
|
||||
zip -r lucide-font-${{ needs.pre-build.outputs.VERSION }}.zip lucide-font
|
||||
zip -r lucide-icons-${{ needs.pre-build.outputs.VERSION }}.zip icons
|
||||
|
||||
- name: Release zip and fonts
|
||||
uses: softprops/action-gh-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CREATE_RELEASE_TOKEN }}
|
||||
with:
|
||||
tag_name: v${{ steps.new-version.outputs.VERSION }}
|
||||
files: |
|
||||
lucide-font-${{ needs.pre-build.outputs.VERSION }}.zip
|
||||
lucide-icons-${{ needs.pre-build.outputs.VERSION }}.zip
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
# Contribution Guidelines
|
||||
|
||||
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
|
||||
@@ -22,8 +23,23 @@ Guidelines for pull requests:
|
||||
|
||||
#### Guidelines
|
||||
|
||||
Please make sure you follow the icon guidelines, that should be followed to keep quality and consistency when making icons for Lucide
|
||||
Read it here: [ICON_GUIDELINES](docs/ICON_DESIGN_GUIDE.md)
|
||||
Please make sure you follow the icon guidelines, that should be followed to keep quality and consistency when making icons for Lucide.
|
||||
|
||||
Read it here: [ICON_GUIDELINES](docs/ICON_DESIGN_GUIDE.md).
|
||||
|
||||
### Templates
|
||||
|
||||
Here you can find templates and instructions on how to implement the guidelines with different programs.
|
||||
|
||||
#### Adobe Illustrator
|
||||
|
||||
`Template`: You can find a template for Adobe Illustrator under `/docs/templates/illustrator-template.ai`.
|
||||
`Instructions`: You can find the [Illustrator Guide](/docs/ILLUSTRATOR_GUIDE.md) and how to work with the template in `/docs/ILLUSTRATOR_GUIDE.md`.
|
||||
|
||||
#### Inkscape
|
||||
|
||||
`Template`: None
|
||||
`Instructions`: You can find the [Inkscape Guide](/docs/INKSCAPE_GUIDE.md) and how to set up Inkscape under `/docs/INKSCAPE_GUIDE.md`.
|
||||
|
||||
#### Submitting Mulitple Icons
|
||||
|
||||
|
||||
25
README.md
@@ -4,6 +4,7 @@
|
||||
|
||||

|
||||
[](https://www.npmjs.com/package/lucide)
|
||||
[](https://www.figma.com/community/plugin/939567362549682242/Lucide-Icons)
|
||||
[](https://discord.gg/EH6nSts)
|
||||
|
||||
## What is Lucide?
|
||||
@@ -16,7 +17,7 @@ Lucide is trying to expand the icon set as much as possible while staying faithf
|
||||
|
||||
### Why choose Lucide over Feather Icons
|
||||
|
||||
- Lucide already expended the icon set by 130+ in less then a year, so more icons to work with.
|
||||
- Lucide already expanded the icon set by 130+ in less then a year, so more icons to work with.
|
||||
- Well maintained code base.
|
||||
- Active community.
|
||||
|
||||
@@ -33,6 +34,8 @@ Lucide is trying to expand the icon set as much as possible while staying faithf
|
||||
* [Angular](#angular)
|
||||
* [Preact](#preact)
|
||||
* [Figma](#figma)
|
||||
* [Laravel](#laravel)
|
||||
* [Flutter](#flutter)
|
||||
* [Contributing](#contributing)
|
||||
* [Community](#community)
|
||||
* [License](#license)
|
||||
@@ -134,6 +137,26 @@ Visit [Figma community page](https://www.figma.com/community/plugin/939567362549
|
||||
|
||||
<img width="420" src="https://www.figma.com/community/plugin/939567362549682242/thumbnail" alt="Figma Lucide Cover">
|
||||
|
||||
### Laravel
|
||||
|
||||
Implementation of Lucide icon's using `blade-icons` for Laravel based projects.
|
||||
|
||||
```sh
|
||||
composer require mallardduck/blade-lucide-icons
|
||||
```
|
||||
|
||||
For more details, see the [documentation](https://github.com/mallardduck/blade-lucide-icons/blob/main/README.md).
|
||||
|
||||
### Flutter
|
||||
|
||||
Implementation of Lucide icon library for Flutter applications.
|
||||
|
||||
```sh
|
||||
flutter pub add lucide_icons
|
||||
```
|
||||
|
||||
For more details, see the [pub.dev](https://pub.dev/packages/lucide_icons).
|
||||
|
||||
## Contributing
|
||||
|
||||
For more info on how to contribute please see the [contribution guidelines](https://github.com/lucide-icons/lucide/blob/master/CONTRIBUTING.md).
|
||||
|
||||
28
docs/ILLUSTRATOR_GUIDE.md
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
# Illustrator Template Guide
|
||||
|
||||
This Guide explains how to properly use the Adobe Illustrator Template for Lucide.
|
||||
|
||||
>Attention: Even though it is unlikely the template can be outdated or not 100% correct. Please check the Icon Design Guide before you start working with the template to ensure integrity with the Lucide icon pack.
|
||||
|
||||
## General Workflow
|
||||
|
||||
The Illustrator template is created following guidelines from the [Icon Design Guide](ICON_DESIGN_GUIDE.md).
|
||||
|
||||
**Workflow:**
|
||||
|
||||
1. Open the Document which can be found under __*/docs/templates/illustrator_template.ai*__ .
|
||||
|
||||
2. You can now remove the content from the example logo layer ("Draw") and start creating.
|
||||
|
||||
3. Verify that you follow the [Icon Design Guidelines](ICON_DESIGN_GUIDE.md).
|
||||
|
||||
4. Before you export the file as an SVG make sure to check that you followed the guidelines and remove all unecessary layers (especially "Padding" and "Grid").
|
||||
|
||||
5. Export the file with the export menu under: `Export > Export As..` than safe the file as SVG. Select the following options in the SVG Options dialog:
|
||||
|
||||

|
||||
|
||||
After that, double check that the [code conventions and SVG global attributes](https://github.com/lucide-icons/lucide/blob/master/docs/ICON_DESIGN_GUIDE.md#code-conventions) are correct.
|
||||
|
||||
7. Minify paths with [SVGOMG](https://jakearchibald.github.io/svgomg/).
|
||||
BIN
docs/images/illustrator-svg-options.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
1935
docs/templates/illustrator_template.ai
vendored
Normal file
17
icons/alarm-clock-off.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M19.94 14A8 8 0 0 0 10 5.25m8.13 12.89A8 8 0 1 1 6.87 6.86" />
|
||||
<path d="m22 6-3-3" />
|
||||
<path d="m6 19-2 2" />
|
||||
<path d="m2 2 20 20" />
|
||||
<path d="M4 4 2 6" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 382 B |
@@ -1,15 +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"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<polyline points="21 8 21 21 3 21 3 8" />
|
||||
<rect x="1" y="3" width="22" height="5" />
|
||||
<line x1="10" y1="12" x2="14" y2="12" />
|
||||
</svg>
|
||||
<path d="M20 9v9a2 2 0 01-2 2H6a2 2 0 01-2-2V9M20 4H4a2 2 0 00-2 2v1a2 2 0 002 2h16a2 2 0 002-2V6a2 2 0 00-2-2zM10 13h4"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 323 B |
@@ -9,7 +9,8 @@
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M7 7H3.78A1.73 1.73 0 002 8.67v6.66A1.73 1.73 0 003.78 17H6m8-10h2.22A1.73 1.73 0 0118 8.67v6.66A1.73 1.73 0 0116.22 17H13" />
|
||||
<path d="M14 7h2a2 2 0 012 2v6a2 2 0 01-2 2h-3" />
|
||||
<path d="M7 7H4a2 2 0 00-2 2v6a2 2 0 002 2h2" />
|
||||
<polyline points="11 7 8 12 12 12 9 17" />
|
||||
<line x1="22" x2="22" y1="11" y2="13" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 434 B After Width: | Height: | Size: 400 B |
13
icons/chevrons-down-up.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M7 20l5-5 5 5" />
|
||||
<path d="M7 4l5 5 5-5" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 243 B |
17
icons/currency.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<circle cx="12" cy="12" r="8" />
|
||||
<line x1="3" y1="3" x2="6" y2="6" />
|
||||
<line x1="21" y1="3" x2="18" y2="6" />
|
||||
<line x1="3" y1="21" x2="6" y2="18" />
|
||||
<line x1="21" y1="21" x2="18" y2="18" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 407 B |
13
icons/flag-triangle-left.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M17 22 17 2 7 7 17 12" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 245 B |
13
icons/flag-triangle-right.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M7 22 7 2 17 7 7 12" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 243 B |
14
icons/forward.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<polyline points="15 17 20 12 15 7"></polyline>
|
||||
<path d="M4 18v-2a4 4 0 0 1 4-4h12"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 304 B |
14
icons/function-square.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<rect x="3" y="3" width="18" height="18" rx="2" ry="2" />
|
||||
<path d="M9 17c1.93 0 2.85-1 2.85-2.8V9.99c0-1.93 1.03-3.26 3.15-2.93M9 11.24h5.66" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 357 B |
13
icons/graduation-cap.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M22 10v6M2 10l10-5 10 5-10 5z" />
|
||||
<path d="M6 12v5c3 3 9 3 12 0v-5" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 270 B |
16
icons/hand-metal.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M18 12.5V10a2 2 0 00-2-2v0a2 2 0 00-2 2v1.4" />
|
||||
<path d="M14 11V9a2 2 0 10-4 0v2" />
|
||||
<path d="M10 10.5V5a2 2 0 10-4 0v9" />
|
||||
<path d="M7 15l-1.76-1.76a2 2 0 00-2.83 2.82l3.6 3.6C7.5 21.14 9.2 22 12 22h2a8 8 0 008-8V7a2 2 0 10-4 0v5" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 460 B |
15
icons/import.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M12 3v12" />
|
||||
<path d="M8 11l4 4 4-4" />
|
||||
<path d="M8 5H4a2 2 0 00-2 2v10a2 2 0 002 2h16a2 2 0 002-2V7a2 2 0 00-2-2h-4" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 344 B |
18
icons/landmark.svg
Normal file
@@ -0,0 +1,18 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<line x1="3" y1="22" x2="21" y2="22" />
|
||||
<line x1="6" y1="18" x2="6" y2="11" />
|
||||
<line x1="10" y1="18" x2="10" y2="11" />
|
||||
<line x1="14" y1="18" x2="14" y2="11" />
|
||||
<line x1="18" y1="18" x2="18" y2="11" />
|
||||
<polygon points="12 2 20 7 4 7" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 457 B |
14
icons/megaphone.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M3 11l18-5v12L3 14v-3z" />
|
||||
<path d="M11.6 16.8a3 3 0 11-5.8-1.6" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 289 B |
14
icons/mountain-snow.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M8 3L12 11L17 6L22 21H2L8 3Z" />
|
||||
<path d="M4.14 15.08c2.62-1.57 5.24-1.43 7.86.42 2.74 1.94 5.49 2 8.23.19" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 332 B |
13
icons/mountain.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M8 3L12 11L17 6L22 21H2L8 3Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 252 B |
14
icons/quote.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" />
|
||||
<path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 506 B |
15
icons/reply-all.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<polyline points="7 17 2 12 7 7"></polyline>
|
||||
<polyline points="12 17 7 12 12 7"></polyline>
|
||||
<path d="M22 18v-2a4 4 0 0 0-4-4H7"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 350 B |
14
icons/reply.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<polyline points="9 17 4 12 9 7"></polyline>
|
||||
<path d="M20 18v-2a4 4 0 0 0-4-4H4"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 301 B |
16
icons/rocking-chair.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<polyline points="3.5 2 6.5 12.5 18 12.5" />
|
||||
<line x1="9.5" y1="12.5" x2="5.5" y2="20" />
|
||||
<line x1="15" y1="12.5" x2="18.5" y2="20" />
|
||||
<path d="M2.75 18a13 13 0 0018.5 0" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 390 B |
14
icons/smartphone-charging.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<rect x="5" y="2" width="14" height="20" rx="2" ry="2" />
|
||||
<path d="M12.667 8L10 12h4l-2.667 4" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 310 B |
@@ -10,5 +10,5 @@
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<rect x="5" y="2" width="14" height="20" rx="2" ry="2" />
|
||||
<line x1="12" y1="18" x2="12.01" y2="18" />
|
||||
<path d="M12 18h.01" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 314 B After Width: | Height: | Size: 294 B |
16
icons/timer-reset.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M10 2h4" />
|
||||
<path d="M12 14v-4"/>
|
||||
<path d="M4 13a8 8 0 018-7 8 8 0 11-5.3 14L4 17.6" />
|
||||
<path d="M9 17H4v5" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 336 B |
@@ -9,5 +9,5 @@
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M23 3a10.9 10.9 0 01-3.14 1.53 4.48 4.48 0 00-7.86 3v1A10.66 10.66 0 013 4s-4 9 5 13a11.64 11.64 0 01-7 2c9 5 20 0 20-11.5a4.5 4.5 0 00-.08-.83A7.72 7.72 0 0023 3z" />
|
||||
<path d="M23 3a10.9 10.9 0 01-3.14 1.53 4.48 4.48 0 00-7.86 3v1A10.66 10.66 0 013 4s-4 9 5 13a11.64 11.64 0 01-7 2c9 5 20 0 20-11.5 0-.28-.03-.56-.08-.83A7.72 7.72 0 0023 3z" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 387 B After Width: | Height: | Size: 388 B |
25
package.json
@@ -5,13 +5,20 @@
|
||||
"packages/*"
|
||||
],
|
||||
"nohoist": [
|
||||
"**/jest", "**/jest/**",
|
||||
"**/jasmine", "**/jasmine/**",
|
||||
"**/react", "**/react/**",
|
||||
"**/testing-library__jest-dom", "**/testing-library__jest-dom/**",
|
||||
"**/testing-library__react-hooks", "**/testing-library__react-hooks/**",
|
||||
"**/react-dom", "**/react-dom/**",
|
||||
"**/react-test-renderer", "**/react-test-renderer/**"
|
||||
"**/jest",
|
||||
"**/jest/**",
|
||||
"**/jasmine",
|
||||
"**/jasmine/**",
|
||||
"**/react",
|
||||
"**/react/**",
|
||||
"**/testing-library__jest-dom",
|
||||
"**/testing-library__jest-dom/**",
|
||||
"**/testing-library__react-hooks",
|
||||
"**/testing-library__react-hooks/**",
|
||||
"**/react-dom",
|
||||
"**/react-dom/**",
|
||||
"**/react-test-renderer",
|
||||
"**/react-test-renderer/**"
|
||||
]
|
||||
},
|
||||
"scripts": {
|
||||
@@ -24,6 +31,7 @@
|
||||
"lucide-vue": "yarn workspace lucide-vue",
|
||||
"lucide-vue-next": "yarn workspace lucide-vue-next",
|
||||
"build:icons": "babel-node ./scripts/buildIcons.js --presets @babel/env",
|
||||
"build:outline-icons": "babel-node ./scripts/outlineSvg.js --presets @babel/env",
|
||||
"optimize": "babel-node ./scripts/optimizeSvgs.js --presets @babel/env",
|
||||
"addtags": "babel-node ./scripts/addMissingKeysToTags.js --presets @babel/env",
|
||||
"generate:changelog": "babel-node ./scripts/generateChangelog.js --presets @babel/env"
|
||||
@@ -68,5 +76,8 @@
|
||||
},
|
||||
"lint-staged": {
|
||||
"icons/*.svg": "npx babel-node ./scripts/optimizeStagedSvgs.js --presets @babel/env"
|
||||
},
|
||||
"dependencies": {
|
||||
"svg-outline-stroke": "^1.3.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "lucide-angular",
|
||||
"description": "Lucide Angular package, Lucide is a community-run fork of Feather Icons, open for anyone to contribute icons.",
|
||||
"version": "0.15.1-beta.1",
|
||||
"version": "0.16.0",
|
||||
"author": "SMAH1",
|
||||
"license": "ISC",
|
||||
"homepage": "https://lucide.dev",
|
||||
@@ -40,14 +40,14 @@
|
||||
"@angular/core": "^11.2.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "~0.1102.5",
|
||||
"@angular/cli": "~11.2.5",
|
||||
"@angular/common": "~11.2.6",
|
||||
"@angular/compiler": "~11.2.6",
|
||||
"@angular/compiler-cli": "~11.2.6",
|
||||
"@angular/core": "~11.2.6",
|
||||
"@angular/platform-browser": "~11.2.6",
|
||||
"@angular/platform-browser-dynamic": "~11.2.6",
|
||||
"@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",
|
||||
|
||||
@@ -3,5 +3,6 @@
|
||||
"id": "939567362549682242",
|
||||
"api": "1.0.0",
|
||||
"ui": "build/ui.html",
|
||||
"main": "build/main.js"
|
||||
"main": "build/main.js",
|
||||
"editorType": ["figma"]
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"css-loader": "^3.0.0",
|
||||
"html-webpack-inline-source-plugin": "^0.0.10",
|
||||
"html-webpack-plugin": "^3.2.0",
|
||||
"lucide-react": "0.15.11",
|
||||
"lucide-react": "0.16.0",
|
||||
"react": "^16.8.6",
|
||||
"react-dom": "^16.8.6",
|
||||
"style-loader": "^0.23.1",
|
||||
|
||||
@@ -2495,9 +2495,9 @@ path-key@^2.0.1:
|
||||
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
|
||||
|
||||
path-parse@^1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
||||
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||
|
||||
path-type@^4.0.0:
|
||||
version "4.0.0"
|
||||
@@ -2586,9 +2586,9 @@ postcss-value-parser@^4.1.0:
|
||||
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
|
||||
|
||||
postcss@^7.0.14, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6:
|
||||
version "7.0.35"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24"
|
||||
integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==
|
||||
version "7.0.36"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb"
|
||||
integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==
|
||||
dependencies:
|
||||
chalk "^2.4.2"
|
||||
source-map "^0.6.1"
|
||||
|
||||
76
packages/lucide-flutter/.gitignore
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
# Miscellaneous
|
||||
*.class
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
|
||||
# IntelliJ related
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
.idea/
|
||||
|
||||
# The .vscode folder contains launch configuration and tasks you configure in
|
||||
# VS Code which you may wish to be included in version control, so this line
|
||||
# is commented out by default.
|
||||
#.vscode/
|
||||
|
||||
# Flutter/Dart/Pub related
|
||||
**/doc/api/
|
||||
.dart_tool/
|
||||
.flutter-plugins
|
||||
.flutter-plugins-dependencies
|
||||
.packages
|
||||
.pub-cache/
|
||||
.pub/
|
||||
build/
|
||||
assets
|
||||
|
||||
# Android related
|
||||
**/android/**/gradle-wrapper.jar
|
||||
**/android/.gradle
|
||||
**/android/captures/
|
||||
**/android/gradlew
|
||||
**/android/gradlew.bat
|
||||
**/android/local.properties
|
||||
**/android/**/GeneratedPluginRegistrant.java
|
||||
|
||||
# iOS/XCode related
|
||||
**/ios/**/*.mode1v3
|
||||
**/ios/**/*.mode2v3
|
||||
**/ios/**/*.moved-aside
|
||||
**/ios/**/*.pbxuser
|
||||
**/ios/**/*.perspectivev3
|
||||
**/ios/**/*sync/
|
||||
**/ios/**/.sconsign.dblite
|
||||
**/ios/**/.tags*
|
||||
**/ios/**/.vagrant/
|
||||
**/ios/**/DerivedData/
|
||||
**/ios/**/Icon?
|
||||
**/ios/**/Pods/
|
||||
**/ios/**/.symlinks/
|
||||
**/ios/**/profile
|
||||
**/ios/**/xcuserdata
|
||||
**/ios/.generated/
|
||||
**/ios/Flutter/App.framework
|
||||
**/ios/Flutter/Flutter.framework
|
||||
**/ios/Flutter/Flutter.podspec
|
||||
**/ios/Flutter/Generated.xcconfig
|
||||
**/ios/Flutter/ephemeral
|
||||
**/ios/Flutter/app.flx
|
||||
**/ios/Flutter/app.zip
|
||||
**/ios/Flutter/flutter_assets/
|
||||
**/ios/Flutter/flutter_export_environment.sh
|
||||
**/ios/ServiceDefinitions.json
|
||||
**/ios/Runner/GeneratedPluginRegistrant.*
|
||||
|
||||
# Exceptions to above rules.
|
||||
!**/ios/**/default.mode1v3
|
||||
!**/ios/**/default.mode2v3
|
||||
!**/ios/**/default.pbxuser
|
||||
!**/ios/**/default.perspectivev3
|
||||
3
packages/lucide-flutter/CHANGELOG.md
Normal file
@@ -0,0 +1,3 @@
|
||||
## 0.15.30
|
||||
|
||||
* Initial release
|
||||
15
packages/lucide-flutter/LICENSE
Normal 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.
|
||||
8
packages/lucide-flutter/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# lucide_icons
|
||||
|
||||
Lucide Icons ([lucide.dev](https://lucide.dev)) for Flutter. Visit the website for the full list of icons
|
||||
|
||||
## Example
|
||||
```dart
|
||||
Icon(LucideIcons.activity);
|
||||
```
|
||||
18
packages/lucide-flutter/analysis_option.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
include: package:lint/analysis_options.yaml
|
||||
|
||||
linter:
|
||||
rules:
|
||||
omit_local_variable_types: true
|
||||
avoid_classes_with_only_static_members: false
|
||||
prefer_single_quotes: true
|
||||
|
||||
file_names: false
|
||||
|
||||
avoid_setters_without_getters: false
|
||||
|
||||
sort_pub_dependencies: false
|
||||
|
||||
prefer_relative_imports: true
|
||||
|
||||
# only for debug
|
||||
avoid_print: false
|
||||
BIN
packages/lucide-flutter/assets/Lucide.ttf
Normal file
9
packages/lucide-flutter/example/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
```dart
|
||||
|
||||
Icon(LucideIcons.activity);
|
||||
Icon(LucideIcons.airplay);
|
||||
// ...
|
||||
// for full list see
|
||||
// https://lucide.dev
|
||||
|
||||
```
|
||||
499
packages/lucide-flutter/lib/lucide_icons.dart
Normal file
@@ -0,0 +1,499 @@
|
||||
library lucide_icons;
|
||||
import "package:flutter/widgets.dart";
|
||||
import "src/icon_data.dart";
|
||||
|
||||
// THIS FILE IS AUTOMATICALLY GENERATED!
|
||||
|
||||
class LucideIcons {
|
||||
static const IconData activity = const LucideIconData(0xf100);
|
||||
static const IconData airplay = const LucideIconData(0xf101);
|
||||
static const IconData alarmCheck = const LucideIconData(0xf102);
|
||||
static const IconData alarmClock = const LucideIconData(0xf103);
|
||||
static const IconData alarmMinus = const LucideIconData(0xf104);
|
||||
static const IconData alarmPlus = const LucideIconData(0xf105);
|
||||
static const IconData album = const LucideIconData(0xf106);
|
||||
static const IconData alertCircle = const LucideIconData(0xf107);
|
||||
static const IconData alertOctagon = const LucideIconData(0xf108);
|
||||
static const IconData alertTriangle = const LucideIconData(0xf109);
|
||||
static const IconData alignCenter = const LucideIconData(0xf10a);
|
||||
static const IconData alignJustify = const LucideIconData(0xf10b);
|
||||
static const IconData alignLeft = const LucideIconData(0xf10c);
|
||||
static const IconData alignRight = const LucideIconData(0xf10d);
|
||||
static const IconData anchor = const LucideIconData(0xf10e);
|
||||
static const IconData aperture = const LucideIconData(0xf10f);
|
||||
static const IconData archive = const LucideIconData(0xf110);
|
||||
static const IconData arrowBigDown = const LucideIconData(0xf111);
|
||||
static const IconData arrowBigLeft = const LucideIconData(0xf112);
|
||||
static const IconData arrowBigRight = const LucideIconData(0xf113);
|
||||
static const IconData arrowBigUp = const LucideIconData(0xf114);
|
||||
static const IconData arrowDown = const LucideIconData(0xf115);
|
||||
static const IconData arrowDownCircle = const LucideIconData(0xf116);
|
||||
static const IconData arrowDownLeft = const LucideIconData(0xf117);
|
||||
static const IconData arrowDownRight = const LucideIconData(0xf118);
|
||||
static const IconData arrowLeft = const LucideIconData(0xf119);
|
||||
static const IconData arrowLeftCircle = const LucideIconData(0xf11a);
|
||||
static const IconData arrowRight = const LucideIconData(0xf11b);
|
||||
static const IconData arrowRightCircle = const LucideIconData(0xf11c);
|
||||
static const IconData arrowUp = const LucideIconData(0xf11d);
|
||||
static const IconData arrowUpCircle = const LucideIconData(0xf11e);
|
||||
static const IconData arrowUpLeft = const LucideIconData(0xf11f);
|
||||
static const IconData arrowUpRight = const LucideIconData(0xf120);
|
||||
static const IconData asterisk = const LucideIconData(0xf121);
|
||||
static const IconData atSign = const LucideIconData(0xf122);
|
||||
static const IconData award = const LucideIconData(0xf123);
|
||||
static const IconData axe = const LucideIconData(0xf124);
|
||||
static const IconData banknote = const LucideIconData(0xf125);
|
||||
static const IconData barChart = const LucideIconData(0xf126);
|
||||
static const IconData barChart2 = const LucideIconData(0xf127);
|
||||
static const IconData battery = const LucideIconData(0xf128);
|
||||
static const IconData batteryCharging = const LucideIconData(0xf129);
|
||||
static const IconData batteryFull = const LucideIconData(0xf12a);
|
||||
static const IconData batteryLow = const LucideIconData(0xf12b);
|
||||
static const IconData batteryMedium = const LucideIconData(0xf12c);
|
||||
static const IconData beaker = const LucideIconData(0xf12d);
|
||||
static const IconData bell = const LucideIconData(0xf12e);
|
||||
static const IconData bellMinus = const LucideIconData(0xf12f);
|
||||
static const IconData bellOff = const LucideIconData(0xf130);
|
||||
static const IconData bellPlus = const LucideIconData(0xf131);
|
||||
static const IconData bellRing = const LucideIconData(0xf132);
|
||||
static const IconData bike = const LucideIconData(0xf133);
|
||||
static const IconData binary = const LucideIconData(0xf134);
|
||||
static const IconData bitcoin = const LucideIconData(0xf135);
|
||||
static const IconData bluetooth = const LucideIconData(0xf136);
|
||||
static const IconData bluetoothConnected = const LucideIconData(0xf137);
|
||||
static const IconData bluetoothOff = const LucideIconData(0xf138);
|
||||
static const IconData bluetoothSearching = const LucideIconData(0xf139);
|
||||
static const IconData bold = const LucideIconData(0xf13a);
|
||||
static const IconData book = const LucideIconData(0xf13b);
|
||||
static const IconData bookOpen = const LucideIconData(0xf13c);
|
||||
static const IconData bookmark = const LucideIconData(0xf13d);
|
||||
static const IconData bot = const LucideIconData(0xf13e);
|
||||
static const IconData box = const LucideIconData(0xf13f);
|
||||
static const IconData boxSelect = const LucideIconData(0xf140);
|
||||
static const IconData briefcase = const LucideIconData(0xf141);
|
||||
static const IconData brush = const LucideIconData(0xf142);
|
||||
static const IconData bug = const LucideIconData(0xf143);
|
||||
static const IconData building = const LucideIconData(0xf144);
|
||||
static const IconData bus = const LucideIconData(0xf145);
|
||||
static const IconData calculator = const LucideIconData(0xf146);
|
||||
static const IconData calendar = const LucideIconData(0xf147);
|
||||
static const IconData camera = const LucideIconData(0xf148);
|
||||
static const IconData cameraOff = const LucideIconData(0xf149);
|
||||
static const IconData car = const LucideIconData(0xf14a);
|
||||
static const IconData cast = const LucideIconData(0xf14b);
|
||||
static const IconData check = const LucideIconData(0xf14c);
|
||||
static const IconData checkCircle = const LucideIconData(0xf14d);
|
||||
static const IconData checkCircle2 = const LucideIconData(0xf14e);
|
||||
static const IconData checkSquare = const LucideIconData(0xf14f);
|
||||
static const IconData chevronDown = const LucideIconData(0xf150);
|
||||
static const IconData chevronLeft = const LucideIconData(0xf151);
|
||||
static const IconData chevronRight = const LucideIconData(0xf152);
|
||||
static const IconData chevronUp = const LucideIconData(0xf153);
|
||||
static const IconData chevronsDown = const LucideIconData(0xf154);
|
||||
static const IconData chevronsDownUp = const LucideIconData(0xf155);
|
||||
static const IconData chevronsLeft = const LucideIconData(0xf156);
|
||||
static const IconData chevronsRight = const LucideIconData(0xf157);
|
||||
static const IconData chevronsUp = const LucideIconData(0xf158);
|
||||
static const IconData chevronsUpDown = const LucideIconData(0xf159);
|
||||
static const IconData chrome = const LucideIconData(0xf15a);
|
||||
static const IconData circle = const LucideIconData(0xf15b);
|
||||
static const IconData circleSlashed = const LucideIconData(0xf15c);
|
||||
static const IconData clipboard = const LucideIconData(0xf15d);
|
||||
static const IconData clipboardCheck = const LucideIconData(0xf15e);
|
||||
static const IconData clipboardCopy = const LucideIconData(0xf15f);
|
||||
static const IconData clipboardList = const LucideIconData(0xf160);
|
||||
static const IconData clipboardX = const LucideIconData(0xf161);
|
||||
static const IconData clock = const LucideIconData(0xf162);
|
||||
static const IconData cloud = const LucideIconData(0xf163);
|
||||
static const IconData cloudDrizzle = const LucideIconData(0xf164);
|
||||
static const IconData cloudFog = const LucideIconData(0xf165);
|
||||
static const IconData cloudHail = const LucideIconData(0xf166);
|
||||
static const IconData cloudLightning = const LucideIconData(0xf167);
|
||||
static const IconData cloudMoon = const LucideIconData(0xf168);
|
||||
static const IconData cloudOff = const LucideIconData(0xf169);
|
||||
static const IconData cloudRain = const LucideIconData(0xf16a);
|
||||
static const IconData cloudRainWind = const LucideIconData(0xf16b);
|
||||
static const IconData cloudSnow = const LucideIconData(0xf16c);
|
||||
static const IconData cloudSun = const LucideIconData(0xf16d);
|
||||
static const IconData cloudy = const LucideIconData(0xf16e);
|
||||
static const IconData clover = const LucideIconData(0xf16f);
|
||||
static const IconData code = const LucideIconData(0xf170);
|
||||
static const IconData code2 = const LucideIconData(0xf171);
|
||||
static const IconData codepen = const LucideIconData(0xf172);
|
||||
static const IconData codesandbox = const LucideIconData(0xf173);
|
||||
static const IconData coffee = const LucideIconData(0xf174);
|
||||
static const IconData coins = const LucideIconData(0xf175);
|
||||
static const IconData columns = const LucideIconData(0xf176);
|
||||
static const IconData command = const LucideIconData(0xf177);
|
||||
static const IconData compass = const LucideIconData(0xf178);
|
||||
static const IconData contact = const LucideIconData(0xf179);
|
||||
static const IconData contrast = const LucideIconData(0xf17a);
|
||||
static const IconData copy = const LucideIconData(0xf17b);
|
||||
static const IconData copyleft = const LucideIconData(0xf17c);
|
||||
static const IconData copyright = const LucideIconData(0xf17d);
|
||||
static const IconData cornerDownLeft = const LucideIconData(0xf17e);
|
||||
static const IconData cornerDownRight = const LucideIconData(0xf17f);
|
||||
static const IconData cornerLeftDown = const LucideIconData(0xf180);
|
||||
static const IconData cornerLeftUp = const LucideIconData(0xf181);
|
||||
static const IconData cornerRightDown = const LucideIconData(0xf182);
|
||||
static const IconData cornerRightUp = const LucideIconData(0xf183);
|
||||
static const IconData cornerUpLeft = const LucideIconData(0xf184);
|
||||
static const IconData cornerUpRight = const LucideIconData(0xf185);
|
||||
static const IconData cpu = const LucideIconData(0xf186);
|
||||
static const IconData creditCard = const LucideIconData(0xf187);
|
||||
static const IconData crop = const LucideIconData(0xf188);
|
||||
static const IconData cross = const LucideIconData(0xf189);
|
||||
static const IconData crosshair = const LucideIconData(0xf18a);
|
||||
static const IconData crown = const LucideIconData(0xf18b);
|
||||
static const IconData currency = const LucideIconData(0xf18c);
|
||||
static const IconData database = const LucideIconData(0xf18d);
|
||||
static const IconData delete = const LucideIconData(0xf18e);
|
||||
static const IconData disc = const LucideIconData(0xf18f);
|
||||
static const IconData divide = const LucideIconData(0xf190);
|
||||
static const IconData divideCircle = const LucideIconData(0xf191);
|
||||
static const IconData divideSquare = const LucideIconData(0xf192);
|
||||
static const IconData dollarSign = const LucideIconData(0xf193);
|
||||
static const IconData download = const LucideIconData(0xf194);
|
||||
static const IconData downloadCloud = const LucideIconData(0xf195);
|
||||
static const IconData dribbble = const LucideIconData(0xf196);
|
||||
static const IconData droplet = const LucideIconData(0xf197);
|
||||
static const IconData droplets = const LucideIconData(0xf198);
|
||||
static const IconData edit = const LucideIconData(0xf199);
|
||||
static const IconData edit2 = const LucideIconData(0xf19a);
|
||||
static const IconData edit3 = const LucideIconData(0xf19b);
|
||||
static const IconData equal = const LucideIconData(0xf19c);
|
||||
static const IconData equalNot = const LucideIconData(0xf19d);
|
||||
static const IconData euro = const LucideIconData(0xf19e);
|
||||
static const IconData expand = const LucideIconData(0xf19f);
|
||||
static const IconData externalLink = const LucideIconData(0xf1a0);
|
||||
static const IconData eye = const LucideIconData(0xf1a1);
|
||||
static const IconData eyeOff = const LucideIconData(0xf1a2);
|
||||
static const IconData facebook = const LucideIconData(0xf1a3);
|
||||
static const IconData fastForward = const LucideIconData(0xf1a4);
|
||||
static const IconData feather = const LucideIconData(0xf1a5);
|
||||
static const IconData figma = const LucideIconData(0xf1a6);
|
||||
static const IconData file = const LucideIconData(0xf1a7);
|
||||
static const IconData fileCheck = const LucideIconData(0xf1a8);
|
||||
static const IconData fileCheck2 = const LucideIconData(0xf1a9);
|
||||
static const IconData fileCode = const LucideIconData(0xf1aa);
|
||||
static const IconData fileDigit = const LucideIconData(0xf1ab);
|
||||
static const IconData fileInput = const LucideIconData(0xf1ac);
|
||||
static const IconData fileMinus = const LucideIconData(0xf1ad);
|
||||
static const IconData fileMinus2 = const LucideIconData(0xf1ae);
|
||||
static const IconData fileOutput = const LucideIconData(0xf1af);
|
||||
static const IconData filePlus = const LucideIconData(0xf1b0);
|
||||
static const IconData filePlus2 = const LucideIconData(0xf1b1);
|
||||
static const IconData fileSearch = const LucideIconData(0xf1b2);
|
||||
static const IconData fileText = const LucideIconData(0xf1b3);
|
||||
static const IconData fileX = const LucideIconData(0xf1b4);
|
||||
static const IconData fileX2 = const LucideIconData(0xf1b5);
|
||||
static const IconData files = const LucideIconData(0xf1b6);
|
||||
static const IconData film = const LucideIconData(0xf1b7);
|
||||
static const IconData filter = const LucideIconData(0xf1b8);
|
||||
static const IconData flag = const LucideIconData(0xf1b9);
|
||||
static const IconData flame = const LucideIconData(0xf1ba);
|
||||
static const IconData flashlight = const LucideIconData(0xf1bb);
|
||||
static const IconData flashlightOff = const LucideIconData(0xf1bc);
|
||||
static const IconData flaskConical = const LucideIconData(0xf1bd);
|
||||
static const IconData flaskRound = const LucideIconData(0xf1be);
|
||||
static const IconData folder = const LucideIconData(0xf1bf);
|
||||
static const IconData folderMinus = const LucideIconData(0xf1c0);
|
||||
static const IconData folderPlus = const LucideIconData(0xf1c1);
|
||||
static const IconData formInput = const LucideIconData(0xf1c2);
|
||||
static const IconData forward = const LucideIconData(0xf1c3);
|
||||
static const IconData framer = const LucideIconData(0xf1c4);
|
||||
static const IconData frown = const LucideIconData(0xf1c5);
|
||||
static const IconData functionSquare = const LucideIconData(0xf1c6);
|
||||
static const IconData gamepad = const LucideIconData(0xf1c7);
|
||||
static const IconData gamepad2 = const LucideIconData(0xf1c8);
|
||||
static const IconData gauge = const LucideIconData(0xf1c9);
|
||||
static const IconData gavel = const LucideIconData(0xf1ca);
|
||||
static const IconData ghost = const LucideIconData(0xf1cb);
|
||||
static const IconData gift = const LucideIconData(0xf1cc);
|
||||
static const IconData gitBranch = const LucideIconData(0xf1cd);
|
||||
static const IconData gitBranchPlus = const LucideIconData(0xf1ce);
|
||||
static const IconData gitCommit = const LucideIconData(0xf1cf);
|
||||
static const IconData gitMerge = const LucideIconData(0xf1d0);
|
||||
static const IconData gitPullRequest = const LucideIconData(0xf1d1);
|
||||
static const IconData github = const LucideIconData(0xf1d2);
|
||||
static const IconData gitlab = const LucideIconData(0xf1d3);
|
||||
static const IconData glasses = const LucideIconData(0xf1d4);
|
||||
static const IconData globe = const LucideIconData(0xf1d5);
|
||||
static const IconData globe2 = const LucideIconData(0xf1d6);
|
||||
static const IconData grab = const LucideIconData(0xf1d7);
|
||||
static const IconData graduationCap = const LucideIconData(0xf1d8);
|
||||
static const IconData grid = const LucideIconData(0xf1d9);
|
||||
static const IconData gripHorizontal = const LucideIconData(0xf1da);
|
||||
static const IconData gripVertical = const LucideIconData(0xf1db);
|
||||
static const IconData hammer = const LucideIconData(0xf1dc);
|
||||
static const IconData hand = const LucideIconData(0xf1dd);
|
||||
static const IconData handMetal = const LucideIconData(0xf1de);
|
||||
static const IconData hardDrive = const LucideIconData(0xf1df);
|
||||
static const IconData hardHat = const LucideIconData(0xf1e0);
|
||||
static const IconData hash = const LucideIconData(0xf1e1);
|
||||
static const IconData haze = const LucideIconData(0xf1e2);
|
||||
static const IconData headphones = const LucideIconData(0xf1e3);
|
||||
static const IconData heart = const LucideIconData(0xf1e4);
|
||||
static const IconData helpCircle = const LucideIconData(0xf1e5);
|
||||
static const IconData hexagon = const LucideIconData(0xf1e6);
|
||||
static const IconData highlighter = const LucideIconData(0xf1e7);
|
||||
static const IconData history = const LucideIconData(0xf1e8);
|
||||
static const IconData home = const LucideIconData(0xf1e9);
|
||||
static const IconData image = const LucideIconData(0xf1ea);
|
||||
static const IconData imageMinus = const LucideIconData(0xf1eb);
|
||||
static const IconData imageOff = const LucideIconData(0xf1ec);
|
||||
static const IconData imagePlus = const LucideIconData(0xf1ed);
|
||||
static const IconData import = const LucideIconData(0xf1ee);
|
||||
static const IconData inbox = const LucideIconData(0xf1ef);
|
||||
static const IconData indent = const LucideIconData(0xf1f0);
|
||||
static const IconData indianRupee = const LucideIconData(0xf1f1);
|
||||
static const IconData infinity = const LucideIconData(0xf1f2);
|
||||
static const IconData info = const LucideIconData(0xf1f3);
|
||||
static const IconData inspect = const LucideIconData(0xf1f4);
|
||||
static const IconData instagram = const LucideIconData(0xf1f5);
|
||||
static const IconData italic = const LucideIconData(0xf1f6);
|
||||
static const IconData jerseyPound = const LucideIconData(0xf1f7);
|
||||
static const IconData key = const LucideIconData(0xf1f8);
|
||||
static const IconData languages = const LucideIconData(0xf1f9);
|
||||
static const IconData laptop = const LucideIconData(0xf1fa);
|
||||
static const IconData laptop2 = const LucideIconData(0xf1fb);
|
||||
static const IconData lasso = const LucideIconData(0xf1fc);
|
||||
static const IconData lassoSelect = const LucideIconData(0xf1fd);
|
||||
static const IconData layers = const LucideIconData(0xf1fe);
|
||||
static const IconData layout = const LucideIconData(0xf1ff);
|
||||
static const IconData layoutDashboard = const LucideIconData(0xf200);
|
||||
static const IconData layoutGrid = const LucideIconData(0xf201);
|
||||
static const IconData layoutList = const LucideIconData(0xf202);
|
||||
static const IconData layoutTemplate = const LucideIconData(0xf203);
|
||||
static const IconData library = const LucideIconData(0xf204);
|
||||
static const IconData lifeBuoy = const LucideIconData(0xf205);
|
||||
static const IconData lightbulb = const LucideIconData(0xf206);
|
||||
static const IconData lightbulbOff = const LucideIconData(0xf207);
|
||||
static const IconData link = const LucideIconData(0xf208);
|
||||
static const IconData link2 = const LucideIconData(0xf209);
|
||||
static const IconData link2Off = const LucideIconData(0xf20a);
|
||||
static const IconData linkedin = const LucideIconData(0xf20b);
|
||||
static const IconData list = const LucideIconData(0xf20c);
|
||||
static const IconData listChecks = const LucideIconData(0xf20d);
|
||||
static const IconData listOrdered = const LucideIconData(0xf20e);
|
||||
static const IconData loader = const LucideIconData(0xf20f);
|
||||
static const IconData loader2 = const LucideIconData(0xf210);
|
||||
static const IconData locate = const LucideIconData(0xf211);
|
||||
static const IconData locateFixed = const LucideIconData(0xf212);
|
||||
static const IconData lock = const LucideIconData(0xf213);
|
||||
static const IconData logIn = const LucideIconData(0xf214);
|
||||
static const IconData logOut = const LucideIconData(0xf215);
|
||||
static const IconData mail = const LucideIconData(0xf216);
|
||||
static const IconData map = const LucideIconData(0xf217);
|
||||
static const IconData mapPin = const LucideIconData(0xf218);
|
||||
static const IconData maximize = const LucideIconData(0xf219);
|
||||
static const IconData maximize2 = const LucideIconData(0xf21a);
|
||||
static const IconData meh = const LucideIconData(0xf21b);
|
||||
static const IconData menu = const LucideIconData(0xf21c);
|
||||
static const IconData messageCircle = const LucideIconData(0xf21d);
|
||||
static const IconData messageSquare = const LucideIconData(0xf21e);
|
||||
static const IconData mic = const LucideIconData(0xf21f);
|
||||
static const IconData micOff = const LucideIconData(0xf220);
|
||||
static const IconData minimize = const LucideIconData(0xf221);
|
||||
static const IconData minimize2 = const LucideIconData(0xf222);
|
||||
static const IconData minus = const LucideIconData(0xf223);
|
||||
static const IconData minusCircle = const LucideIconData(0xf224);
|
||||
static const IconData minusSquare = const LucideIconData(0xf225);
|
||||
static const IconData monitor = const LucideIconData(0xf226);
|
||||
static const IconData monitorOff = const LucideIconData(0xf227);
|
||||
static const IconData monitorSpeaker = const LucideIconData(0xf228);
|
||||
static const IconData moon = const LucideIconData(0xf229);
|
||||
static const IconData moreHorizontal = const LucideIconData(0xf22a);
|
||||
static const IconData moreVertical = const LucideIconData(0xf22b);
|
||||
static const IconData mountain = const LucideIconData(0xf22c);
|
||||
static const IconData mountainSnow = const LucideIconData(0xf22d);
|
||||
static const IconData mousePointer = const LucideIconData(0xf22e);
|
||||
static const IconData mousePointer2 = const LucideIconData(0xf22f);
|
||||
static const IconData mousePointerClick = const LucideIconData(0xf230);
|
||||
static const IconData move = const LucideIconData(0xf231);
|
||||
static const IconData moveDiagonal = const LucideIconData(0xf232);
|
||||
static const IconData moveDiagonal2 = const LucideIconData(0xf233);
|
||||
static const IconData moveHorizontal = const LucideIconData(0xf234);
|
||||
static const IconData moveVertical = const LucideIconData(0xf235);
|
||||
static const IconData music = const LucideIconData(0xf236);
|
||||
static const IconData navigation = const LucideIconData(0xf237);
|
||||
static const IconData navigation2 = const LucideIconData(0xf238);
|
||||
static const IconData network = const LucideIconData(0xf239);
|
||||
static const IconData octagon = const LucideIconData(0xf23a);
|
||||
static const IconData option = const LucideIconData(0xf23b);
|
||||
static const IconData outdent = const LucideIconData(0xf23c);
|
||||
static const IconData package = const LucideIconData(0xf23d);
|
||||
static const IconData palette = const LucideIconData(0xf23e);
|
||||
static const IconData paperclip = const LucideIconData(0xf23f);
|
||||
static const IconData pause = const LucideIconData(0xf240);
|
||||
static const IconData pauseCircle = const LucideIconData(0xf241);
|
||||
static const IconData pauseOctagon = const LucideIconData(0xf242);
|
||||
static const IconData penTool = const LucideIconData(0xf243);
|
||||
static const IconData pencil = const LucideIconData(0xf244);
|
||||
static const IconData percent = const LucideIconData(0xf245);
|
||||
static const IconData personStanding = const LucideIconData(0xf246);
|
||||
static const IconData phone = const LucideIconData(0xf247);
|
||||
static const IconData phoneCall = const LucideIconData(0xf248);
|
||||
static const IconData phoneForwarded = const LucideIconData(0xf249);
|
||||
static const IconData phoneIncoming = const LucideIconData(0xf24a);
|
||||
static const IconData phoneMissed = const LucideIconData(0xf24b);
|
||||
static const IconData phoneOff = const LucideIconData(0xf24c);
|
||||
static const IconData phoneOutgoing = const LucideIconData(0xf24d);
|
||||
static const IconData pieChart = const LucideIconData(0xf24e);
|
||||
static const IconData pipette = const LucideIconData(0xf24f);
|
||||
static const IconData plane = const LucideIconData(0xf250);
|
||||
static const IconData play = const LucideIconData(0xf251);
|
||||
static const IconData playCircle = const LucideIconData(0xf252);
|
||||
static const IconData plugZap = const LucideIconData(0xf253);
|
||||
static const IconData plus = const LucideIconData(0xf254);
|
||||
static const IconData plusCircle = const LucideIconData(0xf255);
|
||||
static const IconData plusSquare = const LucideIconData(0xf256);
|
||||
static const IconData pocket = const LucideIconData(0xf257);
|
||||
static const IconData podcast = const LucideIconData(0xf258);
|
||||
static const IconData pointer = const LucideIconData(0xf259);
|
||||
static const IconData poundSterling = const LucideIconData(0xf25a);
|
||||
static const IconData power = const LucideIconData(0xf25b);
|
||||
static const IconData powerOff = const LucideIconData(0xf25c);
|
||||
static const IconData printer = const LucideIconData(0xf25d);
|
||||
static const IconData qrCode = const LucideIconData(0xf25e);
|
||||
static const IconData radio = const LucideIconData(0xf25f);
|
||||
static const IconData radioReceiver = const LucideIconData(0xf260);
|
||||
static const IconData redo = const LucideIconData(0xf261);
|
||||
static const IconData refreshCcw = const LucideIconData(0xf262);
|
||||
static const IconData refreshCw = const LucideIconData(0xf263);
|
||||
static const IconData regex = const LucideIconData(0xf264);
|
||||
static const IconData repeat = const LucideIconData(0xf265);
|
||||
static const IconData repeat1 = const LucideIconData(0xf266);
|
||||
static const IconData reply = const LucideIconData(0xf267);
|
||||
static const IconData replyAll = const LucideIconData(0xf268);
|
||||
static const IconData rewind = const LucideIconData(0xf269);
|
||||
static const IconData rockingChair = const LucideIconData(0xf26a);
|
||||
static const IconData rotateCcw = const LucideIconData(0xf26b);
|
||||
static const IconData rotateCw = const LucideIconData(0xf26c);
|
||||
static const IconData rss = const LucideIconData(0xf26d);
|
||||
static const IconData ruler = const LucideIconData(0xf26e);
|
||||
static const IconData russianRuble = const LucideIconData(0xf26f);
|
||||
static const IconData save = const LucideIconData(0xf270);
|
||||
static const IconData scale = const LucideIconData(0xf271);
|
||||
static const IconData scissors = const LucideIconData(0xf272);
|
||||
static const IconData screenShare = const LucideIconData(0xf273);
|
||||
static const IconData screenShareOff = const LucideIconData(0xf274);
|
||||
static const IconData search = const LucideIconData(0xf275);
|
||||
static const IconData send = const LucideIconData(0xf276);
|
||||
static const IconData separatorHorizontal = const LucideIconData(0xf277);
|
||||
static const IconData separatorVertical = const LucideIconData(0xf278);
|
||||
static const IconData server = const LucideIconData(0xf279);
|
||||
static const IconData serverCrash = const LucideIconData(0xf27a);
|
||||
static const IconData serverOff = const LucideIconData(0xf27b);
|
||||
static const IconData settings = const LucideIconData(0xf27c);
|
||||
static const IconData share = const LucideIconData(0xf27d);
|
||||
static const IconData share2 = const LucideIconData(0xf27e);
|
||||
static const IconData sheet = const LucideIconData(0xf27f);
|
||||
static const IconData shield = const LucideIconData(0xf280);
|
||||
static const IconData shieldAlert = const LucideIconData(0xf281);
|
||||
static const IconData shieldCheck = const LucideIconData(0xf282);
|
||||
static const IconData shieldClose = const LucideIconData(0xf283);
|
||||
static const IconData shieldOff = const LucideIconData(0xf284);
|
||||
static const IconData shirt = const LucideIconData(0xf285);
|
||||
static const IconData shoppingBag = const LucideIconData(0xf286);
|
||||
static const IconData shoppingCart = const LucideIconData(0xf287);
|
||||
static const IconData shovel = const LucideIconData(0xf288);
|
||||
static const IconData shrink = const LucideIconData(0xf289);
|
||||
static const IconData shuffle = const LucideIconData(0xf28a);
|
||||
static const IconData sidebar = const LucideIconData(0xf28b);
|
||||
static const IconData sidebarClose = const LucideIconData(0xf28c);
|
||||
static const IconData sidebarOpen = const LucideIconData(0xf28d);
|
||||
static const IconData sigma = const LucideIconData(0xf28e);
|
||||
static const IconData skipBack = const LucideIconData(0xf28f);
|
||||
static const IconData skipForward = const LucideIconData(0xf290);
|
||||
static const IconData skull = const LucideIconData(0xf291);
|
||||
static const IconData slack = const LucideIconData(0xf292);
|
||||
static const IconData slash = const LucideIconData(0xf293);
|
||||
static const IconData sliders = const LucideIconData(0xf294);
|
||||
static const IconData smartphone = const LucideIconData(0xf295);
|
||||
static const IconData smartphoneCharging = const LucideIconData(0xf296);
|
||||
static const IconData smile = const LucideIconData(0xf297);
|
||||
static const IconData snowflake = const LucideIconData(0xf298);
|
||||
static const IconData sortAsc = const LucideIconData(0xf299);
|
||||
static const IconData sortDesc = const LucideIconData(0xf29a);
|
||||
static const IconData speaker = const LucideIconData(0xf29b);
|
||||
static const IconData sprout = const LucideIconData(0xf29c);
|
||||
static const IconData square = const LucideIconData(0xf29d);
|
||||
static const IconData star = const LucideIconData(0xf29e);
|
||||
static const IconData starHalf = const LucideIconData(0xf29f);
|
||||
static const IconData stopCircle = const LucideIconData(0xf2a0);
|
||||
static const IconData strikethrough = const LucideIconData(0xf2a1);
|
||||
static const IconData sun = const LucideIconData(0xf2a2);
|
||||
static const IconData sunrise = const LucideIconData(0xf2a3);
|
||||
static const IconData sunset = const LucideIconData(0xf2a4);
|
||||
static const IconData swissFranc = const LucideIconData(0xf2a5);
|
||||
static const IconData switchCamera = const LucideIconData(0xf2a6);
|
||||
static const IconData table = const LucideIconData(0xf2a7);
|
||||
static const IconData tablet = const LucideIconData(0xf2a8);
|
||||
static const IconData tag = const LucideIconData(0xf2a9);
|
||||
static const IconData target = const LucideIconData(0xf2aa);
|
||||
static const IconData tent = const LucideIconData(0xf2ab);
|
||||
static const IconData terminal = const LucideIconData(0xf2ac);
|
||||
static const IconData terminalSquare = const LucideIconData(0xf2ad);
|
||||
static const IconData thermometer = const LucideIconData(0xf2ae);
|
||||
static const IconData thermometerSnowflake = const LucideIconData(0xf2af);
|
||||
static const IconData thermometerSun = const LucideIconData(0xf2b0);
|
||||
static const IconData thumbsDown = const LucideIconData(0xf2b1);
|
||||
static const IconData thumbsUp = const LucideIconData(0xf2b2);
|
||||
static const IconData ticket = const LucideIconData(0xf2b3);
|
||||
static const IconData timer = const LucideIconData(0xf2b4);
|
||||
static const IconData toggleLeft = const LucideIconData(0xf2b5);
|
||||
static const IconData toggleRight = const LucideIconData(0xf2b6);
|
||||
static const IconData tornado = const LucideIconData(0xf2b7);
|
||||
static const IconData trash = const LucideIconData(0xf2b8);
|
||||
static const IconData trash2 = const LucideIconData(0xf2b9);
|
||||
static const IconData trello = const LucideIconData(0xf2ba);
|
||||
static const IconData trendingDown = const LucideIconData(0xf2bb);
|
||||
static const IconData trendingUp = const LucideIconData(0xf2bc);
|
||||
static const IconData triangle = const LucideIconData(0xf2bd);
|
||||
static const IconData truck = const LucideIconData(0xf2be);
|
||||
static const IconData tv = const LucideIconData(0xf2bf);
|
||||
static const IconData tv2 = const LucideIconData(0xf2c0);
|
||||
static const IconData twitch = const LucideIconData(0xf2c1);
|
||||
static const IconData twitter = const LucideIconData(0xf2c2);
|
||||
static const IconData type = const LucideIconData(0xf2c3);
|
||||
static const IconData umbrella = const LucideIconData(0xf2c4);
|
||||
static const IconData underline = const LucideIconData(0xf2c5);
|
||||
static const IconData undo = const LucideIconData(0xf2c6);
|
||||
static const IconData unlink = const LucideIconData(0xf2c7);
|
||||
static const IconData unlink2 = const LucideIconData(0xf2c8);
|
||||
static const IconData unlock = const LucideIconData(0xf2c9);
|
||||
static const IconData upload = const LucideIconData(0xf2ca);
|
||||
static const IconData uploadCloud = const LucideIconData(0xf2cb);
|
||||
static const IconData user = const LucideIconData(0xf2cc);
|
||||
static const IconData userCheck = const LucideIconData(0xf2cd);
|
||||
static const IconData userMinus = const LucideIconData(0xf2ce);
|
||||
static const IconData userPlus = const LucideIconData(0xf2cf);
|
||||
static const IconData userX = const LucideIconData(0xf2d0);
|
||||
static const IconData users = const LucideIconData(0xf2d1);
|
||||
static const IconData vibrate = const LucideIconData(0xf2d2);
|
||||
static const IconData video = const LucideIconData(0xf2d3);
|
||||
static const IconData videoOff = const LucideIconData(0xf2d4);
|
||||
static const IconData view = const LucideIconData(0xf2d5);
|
||||
static const IconData voicemail = const LucideIconData(0xf2d6);
|
||||
static const IconData volume = const LucideIconData(0xf2d7);
|
||||
static const IconData volume1 = const LucideIconData(0xf2d8);
|
||||
static const IconData volume2 = const LucideIconData(0xf2d9);
|
||||
static const IconData volumeX = const LucideIconData(0xf2da);
|
||||
static const IconData wallet = const LucideIconData(0xf2db);
|
||||
static const IconData watch = const LucideIconData(0xf2dc);
|
||||
static const IconData webcam = const LucideIconData(0xf2dd);
|
||||
static const IconData wifi = const LucideIconData(0xf2de);
|
||||
static const IconData wifiOff = const LucideIconData(0xf2df);
|
||||
static const IconData wind = const LucideIconData(0xf2e0);
|
||||
static const IconData wrench = const LucideIconData(0xf2e1);
|
||||
static const IconData x = const LucideIconData(0xf2e2);
|
||||
static const IconData xCircle = const LucideIconData(0xf2e3);
|
||||
static const IconData xOctagon = const LucideIconData(0xf2e4);
|
||||
static const IconData xSquare = const LucideIconData(0xf2e5);
|
||||
static const IconData youtube = const LucideIconData(0xf2e6);
|
||||
static const IconData zap = const LucideIconData(0xf2e7);
|
||||
static const IconData zapOff = const LucideIconData(0xf2e8);
|
||||
static const IconData zoomIn = const LucideIconData(0xf2e9);
|
||||
static const IconData zoomOut = const LucideIconData(0xf2ea);
|
||||
}
|
||||
10
packages/lucide-flutter/lib/src/icon_data.dart
Normal file
@@ -0,0 +1,10 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
class LucideIconData extends IconData {
|
||||
const LucideIconData(int codePoint)
|
||||
: super(
|
||||
codePoint,
|
||||
fontFamily: 'Lucide',
|
||||
fontPackage: 'lucide_icons',
|
||||
);
|
||||
}
|
||||
175
packages/lucide-flutter/pubspec.lock
Normal file
@@ -0,0 +1,175 @@
|
||||
# Generated by pub
|
||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||
packages:
|
||||
async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.6.1"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: boolean_selector
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: characters
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
charcode:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: charcode
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
clock:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: clock
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: collection
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.15.0"
|
||||
csslib:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: csslib
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.17.0"
|
||||
fake_async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: fake_async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
html:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: html
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.15.0"
|
||||
lint:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: lint
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.6.0"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.12.10"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.0"
|
||||
recase:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: recase
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.0.0"
|
||||
sky_engine:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.99"
|
||||
source_span:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_span
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.1"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.10.0"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
string_scanner:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: string_scanner
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: term_glyph
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.0"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: typed_data
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
vector_math:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_math
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
sdks:
|
||||
dart: ">=2.13.0 <3.0.0"
|
||||
flutter: ">=1.17.0"
|
||||
26
packages/lucide-flutter/pubspec.yaml
Normal file
@@ -0,0 +1,26 @@
|
||||
name: lucide_icons
|
||||
description: Lucide icon pack for Flutter
|
||||
version: 0.16.0
|
||||
homepage: https://lucide.dev
|
||||
repository: https://github.com/lucide-icons/lucide
|
||||
|
||||
environment:
|
||||
sdk: ">=2.12.0 <3.0.0"
|
||||
flutter: ">=1.17.0"
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
html: ^0.15.0
|
||||
recase: ^4.0.0
|
||||
lint: ^1.5.3
|
||||
|
||||
flutter:
|
||||
fonts:
|
||||
- family: Lucide
|
||||
fonts:
|
||||
- asset: assets/Lucide.ttf
|
||||
49
packages/lucide-flutter/tool/generate_fonts.dart
Normal file
@@ -0,0 +1,49 @@
|
||||
import "dart:io";
|
||||
|
||||
import 'package:html/parser.dart' show parse;
|
||||
import 'package:recase/recase.dart';
|
||||
|
||||
void main(List<String> args) {
|
||||
File fontsPreviewFile = File(args[0]);
|
||||
|
||||
if (!fontsPreviewFile.existsSync()) {
|
||||
print('lucide preview file not found');
|
||||
exit(0);
|
||||
}
|
||||
|
||||
String content = fontsPreviewFile.readAsStringSync();
|
||||
final c = parse(content);
|
||||
final list = c.getElementsByClassName('glyph');
|
||||
|
||||
List<String> generatedOutput = [
|
||||
"library lucide_icons;\n",
|
||||
"import \"package:flutter/widgets.dart\";\n",
|
||||
"import \"src/icon_data.dart\";\n\n",
|
||||
"// THIS FILE IS AUTOMATICALLY GENERATED!\n\n",
|
||||
"class LucideIcons {\n"
|
||||
];
|
||||
|
||||
for (final icon in list) {
|
||||
final name = icon
|
||||
.getElementsByClassName('class')
|
||||
.first
|
||||
.attributes['value']!
|
||||
.replaceFirst('.icon-', '');
|
||||
final val = icon
|
||||
.getElementsByClassName('point')
|
||||
.first
|
||||
.attributes['value']!
|
||||
.replaceFirst('&#x', '')
|
||||
.replaceFirst(';', '');
|
||||
|
||||
generatedOutput.add(
|
||||
"static const IconData ${ReCase(name).camelCase} = const LucideIconData(0x$val);\n");
|
||||
|
||||
print('$val $name');
|
||||
}
|
||||
|
||||
generatedOutput.add("}\n");
|
||||
|
||||
File output = File('./lib/lucide_icons.dart');
|
||||
output.writeAsStringSync(generatedOutput.join());
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "lucide-preact",
|
||||
"description": "Lucide Preact package, Lucide is a community-run fork of Feather Icons, open for anyone to contribute icons.",
|
||||
"version": "0.15.10-beta.7",
|
||||
"version": "0.16.0",
|
||||
"license": "ISC",
|
||||
"homepage": "https://lucide.dev",
|
||||
"bugs": "https://github.com/lucide-icons/lucide/issues",
|
||||
@@ -18,9 +18,8 @@
|
||||
"unpkg": "dist/umd/lucide-preact.min.js",
|
||||
"typings": "dist/lucide-preact.d.ts",
|
||||
"sideEffects": false,
|
||||
|
||||
"scripts": {
|
||||
"build": "yarn clean && yarn build:icons && yarn build:es && yarn build:types && yarn build:bundles",
|
||||
"build": "yarn clean && yarn build:icons && (yarn build:es & yarn build:types & yarn build:bundles)",
|
||||
"clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.js",
|
||||
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-preact/src --templateSrc=../packages/lucide-preact/scripts/exportTemplate --renderUniqueKey",
|
||||
"build:es": "babel src -d dist/esm",
|
||||
|
||||
@@ -1,6 +1,16 @@
|
||||
import { h } from 'preact';
|
||||
import defaultAttributes from './defaultAttributes';
|
||||
|
||||
/**
|
||||
* Converts string to KebabCase
|
||||
* Copied from scripts/helper. If anyone knows how to properly import it here
|
||||
* then please fix it.
|
||||
*
|
||||
* @param {string} string
|
||||
* @returns {string} A kebabized string
|
||||
*/
|
||||
export const toKebabCase = string => string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
||||
|
||||
export default (iconName, iconNode) => {
|
||||
const Component = ({ color = 'currentColor', size = 24, strokeWidth = 2, ...rest }) =>
|
||||
h(
|
||||
@@ -11,6 +21,7 @@ export default (iconName, iconNode) => {
|
||||
height: size,
|
||||
stroke: color,
|
||||
'stroke-width': strokeWidth,
|
||||
class: `lucide lucide-${toKebabCase(iconName)}`,
|
||||
...rest,
|
||||
},
|
||||
iconNode.map(([tag, attrs]) => h(tag, attrs)),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`Using lucide icon components should adjust the size, stroke color and stroke width 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"48\\" height=\\"48\\" viewBox=\\"0 0 24 24\\" fill=\\"none\\" stroke=\\"red\\" stroke-width=\\"4\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" data-testid=\\"grid-icon\\"><rect x=\\"3\\" y=\\"3\\" width=\\"18\\" height=\\"18\\" rx=\\"2\\" ry=\\"2\\"></rect><line x1=\\"3\\" y1=\\"9\\" x2=\\"21\\" y2=\\"9\\"></line><line x1=\\"3\\" y1=\\"15\\" x2=\\"21\\" y2=\\"15\\"></line><line x1=\\"9\\" y1=\\"3\\" x2=\\"9\\" y2=\\"21\\"></line><line x1=\\"15\\" y1=\\"3\\" x2=\\"15\\" y2=\\"21\\"></line></svg>"`;
|
||||
exports[`Using lucide icon components should adjust the size, stroke color and stroke width 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"48\\" height=\\"48\\" viewBox=\\"0 0 24 24\\" fill=\\"none\\" stroke=\\"red\\" stroke-width=\\"4\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" class=\\"lucide lucide-grid\\" data-testid=\\"grid-icon\\"><rect x=\\"3\\" y=\\"3\\" width=\\"18\\" height=\\"18\\" rx=\\"2\\" ry=\\"2\\"></rect><line x1=\\"3\\" y1=\\"9\\" x2=\\"21\\" y2=\\"9\\"></line><line x1=\\"3\\" y1=\\"15\\" x2=\\"21\\" y2=\\"15\\"></line><line x1=\\"9\\" y1=\\"3\\" x2=\\"9\\" y2=\\"21\\"></line><line x1=\\"15\\" y1=\\"3\\" x2=\\"15\\" y2=\\"21\\"></line></svg>"`;
|
||||
|
||||
exports[`Using lucide icon components should render an component 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"24\\" height=\\"24\\" viewBox=\\"0 0 24 24\\" fill=\\"none\\" stroke=\\"currentColor\\" stroke-width=\\"2\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\"><rect x=\\"3\\" y=\\"3\\" width=\\"18\\" height=\\"18\\" rx=\\"2\\" ry=\\"2\\"></rect><line x1=\\"3\\" y1=\\"9\\" x2=\\"21\\" y2=\\"9\\"></line><line x1=\\"3\\" y1=\\"15\\" x2=\\"21\\" y2=\\"15\\"></line><line x1=\\"9\\" y1=\\"3\\" x2=\\"9\\" y2=\\"21\\"></line><line x1=\\"15\\" y1=\\"3\\" x2=\\"15\\" y2=\\"21\\"></line></svg>"`;
|
||||
exports[`Using lucide icon components should render an component 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"24\\" height=\\"24\\" viewBox=\\"0 0 24 24\\" fill=\\"none\\" stroke=\\"currentColor\\" stroke-width=\\"2\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" class=\\"lucide lucide-grid\\"><rect x=\\"3\\" y=\\"3\\" width=\\"18\\" height=\\"18\\" rx=\\"2\\" ry=\\"2\\"></rect><line x1=\\"3\\" y1=\\"9\\" x2=\\"21\\" y2=\\"9\\"></line><line x1=\\"3\\" y1=\\"15\\" x2=\\"21\\" y2=\\"15\\"></line><line x1=\\"9\\" y1=\\"3\\" x2=\\"9\\" y2=\\"21\\"></line><line x1=\\"15\\" y1=\\"3\\" x2=\\"15\\" y2=\\"21\\"></line></svg>"`;
|
||||
|
||||
@@ -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.15.17",
|
||||
"version": "0.16.0",
|
||||
"license": "ISC",
|
||||
"homepage": "https://lucide.dev",
|
||||
"bugs": "https://github.com/lucide-icons/lucide/issues",
|
||||
@@ -19,7 +19,7 @@
|
||||
"typings": "dist/lucide-react.d.ts",
|
||||
"sideEffects": false,
|
||||
"scripts": {
|
||||
"build": "yarn clean && yarn build:icons && yarn build:es && yarn build:types && yarn build:bundles",
|
||||
"build": "yarn clean && yarn build:icons && (yarn build:es & yarn build:types & yarn build:bundles)",
|
||||
"clean": "rm -rf dist && rm -rf 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": "babel src -d dist/esm",
|
||||
@@ -37,6 +37,6 @@
|
||||
},
|
||||
"peerDependencies": {
|
||||
"prop-types": "^15.7.2",
|
||||
"react": "^16.5.1"
|
||||
"react": "^16.5.1 || ^17.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,29 +1,22 @@
|
||||
import path from 'path';
|
||||
import {
|
||||
writeFile,
|
||||
readSvgDirectory,
|
||||
resetFile,
|
||||
toPascalCase,
|
||||
appendFile,
|
||||
} from '../../../scripts/helpers';
|
||||
import path from "path";
|
||||
import {appendFile, readSvgDirectory, resetFile, toPascalCase, writeFile} from "../../../scripts/helpers";
|
||||
|
||||
const srcDirectory = path.join(__dirname, '../dist');
|
||||
const srcDirectory=path.join(__dirname, "../dist");
|
||||
|
||||
// Declare type definitions
|
||||
const typeDefinitions = `\
|
||||
/// <reference types="vue" />
|
||||
import { SVGAttributes } from 'vue'
|
||||
const typeDefinitions=`\
|
||||
/// <reference types="react" />
|
||||
import { SVGAttributes } from 'react'
|
||||
|
||||
declare module 'lucide-vue-next'
|
||||
declare module 'lucide-react'
|
||||
|
||||
// Create interface extending SVGAttributes
|
||||
// Create interface extending SVGProps
|
||||
export interface LucideProps extends Partial<React.SVGProps<SVGSVGElement>> {
|
||||
color?: string
|
||||
size?: string | number
|
||||
stroke?: string | number
|
||||
strokeWidth?: string | number
|
||||
}
|
||||
|
||||
export type Icon = React.FC<LucideProps>;
|
||||
|
||||
// Generated icons
|
||||
`;
|
||||
|
||||
|
||||
@@ -2,6 +2,16 @@ import { forwardRef, createElement } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import defaultAttributes from './defaultAttributes';
|
||||
|
||||
/**
|
||||
* Converts string to KebabCase
|
||||
* Copied from scripts/helper. If anyone knows how to properly import it here
|
||||
* then please fix it.
|
||||
*
|
||||
* @param {string} string
|
||||
* @returns {string} A kebabized string
|
||||
*/
|
||||
export const toKebabCase = string => string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
||||
|
||||
export default (iconName, iconNode) => {
|
||||
const Component = forwardRef(
|
||||
({ color = 'currentColor', size = 24, strokeWidth = 2, ...rest }, ref) =>
|
||||
@@ -14,6 +24,7 @@ export default (iconName, iconNode) => {
|
||||
height: size,
|
||||
stroke: color,
|
||||
strokeWidth,
|
||||
className: `lucide lucide-${toKebabCase(iconName)}`,
|
||||
...rest,
|
||||
},
|
||||
iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`Using lucide icon components should adjust the size, stroke color and stroke width 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"48\\" height=\\"48\\" viewBox=\\"0 0 24 24\\" fill=\\"none\\" stroke=\\"red\\" stroke-width=\\"4\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" data-testid=\\"grid-icon\\"><rect x=\\"3\\" y=\\"3\\" width=\\"18\\" height=\\"18\\" rx=\\"2\\" ry=\\"2\\"></rect><line x1=\\"3\\" y1=\\"9\\" x2=\\"21\\" y2=\\"9\\"></line><line x1=\\"3\\" y1=\\"15\\" x2=\\"21\\" y2=\\"15\\"></line><line x1=\\"9\\" y1=\\"3\\" x2=\\"9\\" y2=\\"21\\"></line><line x1=\\"15\\" y1=\\"3\\" x2=\\"15\\" y2=\\"21\\"></line></svg>"`;
|
||||
exports[`Using lucide icon components should adjust the size, stroke color and stroke width 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"48\\" height=\\"48\\" viewBox=\\"0 0 24 24\\" fill=\\"none\\" stroke=\\"red\\" stroke-width=\\"4\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" class=\\"lucide lucide-grid\\" data-testid=\\"grid-icon\\"><rect x=\\"3\\" y=\\"3\\" width=\\"18\\" height=\\"18\\" rx=\\"2\\" ry=\\"2\\"></rect><line x1=\\"3\\" y1=\\"9\\" x2=\\"21\\" y2=\\"9\\"></line><line x1=\\"3\\" y1=\\"15\\" x2=\\"21\\" y2=\\"15\\"></line><line x1=\\"9\\" y1=\\"3\\" x2=\\"9\\" y2=\\"21\\"></line><line x1=\\"15\\" y1=\\"3\\" x2=\\"15\\" y2=\\"21\\"></line></svg>"`;
|
||||
|
||||
exports[`Using lucide icon components should render an component 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"24\\" height=\\"24\\" viewBox=\\"0 0 24 24\\" fill=\\"none\\" stroke=\\"currentColor\\" stroke-width=\\"2\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\"><rect x=\\"3\\" y=\\"3\\" width=\\"18\\" height=\\"18\\" rx=\\"2\\" ry=\\"2\\"></rect><line x1=\\"3\\" y1=\\"9\\" x2=\\"21\\" y2=\\"9\\"></line><line x1=\\"3\\" y1=\\"15\\" x2=\\"21\\" y2=\\"15\\"></line><line x1=\\"9\\" y1=\\"3\\" x2=\\"9\\" y2=\\"21\\"></line><line x1=\\"15\\" y1=\\"3\\" x2=\\"15\\" y2=\\"21\\"></line></svg>"`;
|
||||
exports[`Using lucide icon components should render an component 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"24\\" height=\\"24\\" viewBox=\\"0 0 24 24\\" fill=\\"none\\" stroke=\\"currentColor\\" stroke-width=\\"2\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" class=\\"lucide lucide-grid\\"><rect x=\\"3\\" y=\\"3\\" width=\\"18\\" height=\\"18\\" rx=\\"2\\" ry=\\"2\\"></rect><line x1=\\"3\\" y1=\\"9\\" x2=\\"21\\" y2=\\"9\\"></line><line x1=\\"3\\" y1=\\"15\\" x2=\\"21\\" y2=\\"15\\"></line><line x1=\\"9\\" y1=\\"3\\" x2=\\"9\\" y2=\\"21\\"></line><line x1=\\"15\\" y1=\\"3\\" x2=\\"15\\" y2=\\"21\\"></line></svg>"`;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "lucide-vue-next",
|
||||
"version": "0.15.17-beta.0",
|
||||
"version": "0.16.0",
|
||||
"author": "Eric Fennis",
|
||||
"description": "Lucide Vue 3 Package",
|
||||
"license": "ISC",
|
||||
@@ -20,9 +20,9 @@
|
||||
"typings": "dist/lucide-vue-next.d.ts",
|
||||
"sideEffects": false,
|
||||
"scripts": {
|
||||
"build": "yarn clean && yarn build:icons && yarn build:es && yarn build:types && yarn build:bundles",
|
||||
"build": "yarn clean && yarn build:icons && (yarn build:es & yarn build:types & yarn build:bundles)",
|
||||
"clean": "rm -rf dist && rm -rf ./src/icons/*.js",
|
||||
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-vue-next/src --templateSrc=../packages/lucide-vue-next/scripts/exportTemplate",
|
||||
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-vue-next/src --templateSrc=../packages/lucide-vue-next/scripts/exportTemplate --renderUniqueKey",
|
||||
"build:es": "babel src -d dist/esm",
|
||||
"build:types": "yarn --cwd ../../ babel-node packages/lucide-vue-next/scripts/buildTypes.js",
|
||||
"build:bundles": "yarn --cwd ../../ rollup -c packages/lucide-vue-next/rollup.config.js",
|
||||
@@ -33,8 +33,8 @@
|
||||
"@vue/compiler-sfc": "^3.0.0",
|
||||
"@vue/test-utils": "^2.0.0-rc.6",
|
||||
"jest-serializer-vue": "^2.0.2",
|
||||
"vue-jest": "^5.0.0-alpha.7",
|
||||
"vue": "3.0.6"
|
||||
"vue": "3.0.6",
|
||||
"vue-jest": "^5.0.0-alpha.7"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vue": "^3.0.0"
|
||||
|
||||
@@ -1,15 +1,24 @@
|
||||
import { h } from 'vue';
|
||||
import defaultAttributes from './defaultAttributes';
|
||||
|
||||
/**
|
||||
* Converts string to KebabCase
|
||||
* Copied from scripts/helper. If anyone knows how to properly import it here
|
||||
* then please fix it.
|
||||
*
|
||||
* @param {string} string
|
||||
* @returns {string} A kebabized string
|
||||
*/
|
||||
export const toKebabCase = string => string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
||||
|
||||
const createVueComponent = (iconName, iconNode) => (props, context) =>
|
||||
h(
|
||||
'svg',
|
||||
{
|
||||
...defaultAttributes,
|
||||
...{
|
||||
width: props.size || defaultAttributes.width,
|
||||
height: props.size || defaultAttributes.height,
|
||||
},
|
||||
width: props.size || defaultAttributes.width,
|
||||
height: props.size || defaultAttributes.height,
|
||||
class: ['lucide', `lucide-${toKebabCase(iconName)}`],
|
||||
...context.attrs,
|
||||
...props,
|
||||
},
|
||||
|
||||
@@ -160,6 +160,7 @@ VueWrapper {
|
||||
data-v-app=""
|
||||
>
|
||||
<svg
|
||||
class="lucide lucide-smile-icon"
|
||||
fill="none"
|
||||
height="24"
|
||||
stroke="currentColor"
|
||||
@@ -253,6 +254,7 @@ VueWrapper {
|
||||
},
|
||||
"rootVM": Object {},
|
||||
"wrapperElement": <svg
|
||||
class="lucide lucide-smile-icon"
|
||||
fill="none"
|
||||
height="24"
|
||||
stroke="currentColor"
|
||||
@@ -304,6 +306,7 @@ VueWrapper {
|
||||
data-v-app=""
|
||||
>
|
||||
<svg
|
||||
class="lucide lucide-smile-icon"
|
||||
fill="none"
|
||||
height="48"
|
||||
size="48"
|
||||
@@ -398,6 +401,7 @@ VueWrapper {
|
||||
},
|
||||
"rootVM": Object {},
|
||||
"wrapperElement": <svg
|
||||
class="lucide lucide-smile-icon"
|
||||
fill="none"
|
||||
height="48"
|
||||
size="48"
|
||||
@@ -450,6 +454,7 @@ VueWrapper {
|
||||
data-v-app=""
|
||||
>
|
||||
<svg
|
||||
class="lucide lucide-smile-icon"
|
||||
fill="none"
|
||||
height="24"
|
||||
stroke="currentColor"
|
||||
@@ -542,6 +547,7 @@ VueWrapper {
|
||||
},
|
||||
"rootVM": Object {},
|
||||
"wrapperElement": <svg
|
||||
class="lucide lucide-smile-icon"
|
||||
fill="none"
|
||||
height="24"
|
||||
stroke="currentColor"
|
||||
|
||||
@@ -105,3 +105,21 @@ export default {
|
||||
</div>
|
||||
</template>
|
||||
```
|
||||
|
||||
## Use with [@nuxt/components](https://github.com/nuxt/components#readme)
|
||||
|
||||
### Setup
|
||||
In your `nuxt.config.js`, add `lucide-vue/nuxt` to your `buildModules`
|
||||
```js
|
||||
export default {
|
||||
buildModules: ['lucide-vue/nuxt']
|
||||
}
|
||||
```
|
||||
|
||||
### How to use
|
||||
Icon components are prefixed with `Icon`. Use icon components without importing them.
|
||||
|
||||
### Example
|
||||
```html
|
||||
<IconCamera color="red" :size="32" />
|
||||
```
|
||||
@@ -1,12 +1,14 @@
|
||||
const mainConfig = require('../../babel.config');
|
||||
|
||||
module.exports = {
|
||||
presets: [
|
||||
[
|
||||
'@babel/preset-env',
|
||||
'@babel/env',
|
||||
{
|
||||
targets: {
|
||||
node: 'current',
|
||||
},
|
||||
loose: true,
|
||||
modules: false,
|
||||
},
|
||||
],
|
||||
],
|
||||
env: mainConfig.env,
|
||||
};
|
||||
|
||||
11
packages/lucide-vue/nuxt.js
Normal file
@@ -0,0 +1,11 @@
|
||||
import { join } from 'path';
|
||||
|
||||
export default function() {
|
||||
this.nuxt.hook('components:dirs', dirs => {
|
||||
dirs.push({
|
||||
path: join(__dirname, 'dist', 'esm', 'icons'),
|
||||
prefix: 'Icon',
|
||||
ignore: ['**/index.js'],
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "lucide-vue",
|
||||
"version": "0.15.17",
|
||||
"version": "0.16.1",
|
||||
"author": "Eric Fennis",
|
||||
"description": "Lucide Vue Package",
|
||||
"license": "ISC",
|
||||
@@ -19,7 +19,7 @@
|
||||
"unpkg": "dist/umd/lucide-vue.min.js",
|
||||
"sideEffects": false,
|
||||
"scripts": {
|
||||
"build": "yarn clean && yarn build:icons && yarn build:es && yarn build:bundles",
|
||||
"build": "yarn clean && yarn build:icons && (yarn build:es & yarn build:bundles)",
|
||||
"clean": "rm -rf dist && rm -rf 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": "babel src -d dist/esm",
|
||||
@@ -30,9 +30,9 @@
|
||||
"devDependencies": {
|
||||
"@vue/test-utils": "^1.1.2",
|
||||
"jest-serializer-vue": "^2.0.2",
|
||||
"vue": "^2.6.12",
|
||||
"vue-jest": "^3.0.7",
|
||||
"vue-template-compiler": "^2.6.12",
|
||||
"vue": "^2.6.12"
|
||||
"vue-template-compiler": "^2.6.12"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vue": "^2.6.12"
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
import defaultAttributes from './defaultAttributes';
|
||||
|
||||
/**
|
||||
* Converts string to KebabCase
|
||||
* Copied from scripts/helper. If anyone knows how to properly import it here
|
||||
* then please fix it.
|
||||
*
|
||||
* @param {string} string
|
||||
* @returns {string} A kebabized string
|
||||
*/
|
||||
export const toKebabCase = string => string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
||||
|
||||
export default (iconName, iconNode) => ({
|
||||
name: iconName,
|
||||
functional: true,
|
||||
@@ -18,7 +28,7 @@ export default (iconName, iconNode) => ({
|
||||
},
|
||||
defaultClass: {
|
||||
type: String,
|
||||
default: 'lucide-icon',
|
||||
default: `lucide-icon lucide lucide-${toKebabCase(iconName).replace('-icon', '')}`,
|
||||
},
|
||||
},
|
||||
render(
|
||||
@@ -42,6 +52,7 @@ export default (iconName, iconNode) => ({
|
||||
'stroke-width': strokeWidth,
|
||||
...data.attrs,
|
||||
},
|
||||
on: data?.on || {}
|
||||
},
|
||||
iconNode.map(([tag, attrs]) => createElement(tag, { attrs })),
|
||||
);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`Using lucide icon components should add a class to the element 1`] = `
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide-icon my-icon">
|
||||
<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" class="lucide-icon lucide lucide-smile my-icon">
|
||||
<circle cx="12" cy="12" r="10"></circle>
|
||||
<path d="M8 14s1.5 2 4 2 4-2 4-2"></path>
|
||||
<line x1="9" y1="9" x2="9.01" y2="9"></line>
|
||||
@@ -10,7 +10,7 @@ exports[`Using lucide icon components should add a class to the element 1`] = `
|
||||
`;
|
||||
|
||||
exports[`Using lucide icon components should add a style attribute to the element 1`] = `
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="position: absolute" class="lucide-icon">
|
||||
<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" style="position: absolute" class="lucide-icon lucide lucide-smile">
|
||||
<circle cx="12" cy="12" r="10"></circle>
|
||||
<path d="M8 14s1.5 2 4 2 4-2 4-2"></path>
|
||||
<line x1="9" y1="9" x2="9.01" y2="9"></line>
|
||||
@@ -19,7 +19,7 @@ exports[`Using lucide icon components should add a style attribute to the elemen
|
||||
`;
|
||||
|
||||
exports[`Using lucide icon components should adjust the size, stroke color and stroke width 1`] = `
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="red" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" class="lucide-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="red" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" class="lucide-icon lucide lucide-smile">
|
||||
<circle cx="12" cy="12" r="10"></circle>
|
||||
<path d="M8 14s1.5 2 4 2 4-2 4-2"></path>
|
||||
<line x1="9" y1="9" x2="9.01" y2="9"></line>
|
||||
@@ -28,7 +28,7 @@ exports[`Using lucide icon components should adjust the size, stroke color and s
|
||||
`;
|
||||
|
||||
exports[`Using lucide icon components should render an component 1`] = `
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide-icon">
|
||||
<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" class="lucide-icon lucide lucide-smile">
|
||||
<circle cx="12" cy="12" r="10"></circle>
|
||||
<path d="M8 14s1.5 2 4 2 4-2 4-2"></path>
|
||||
<line x1="9" y1="9" x2="9.01" y2="9"></line>
|
||||
|
||||
@@ -28,7 +28,7 @@ describe('Using lucide icon components', () => {
|
||||
})
|
||||
|
||||
expect(wrapper).toMatchSnapshot();
|
||||
expect(String(wrapper.classes())).toBe(String(['lucide-icon', 'my-icon']))
|
||||
expect(String(wrapper.classes())).toBe(String(['lucide-icon','lucide','lucide-smile', 'my-icon']))
|
||||
});
|
||||
|
||||
it('should add a style attribute to the element', () => {
|
||||
@@ -36,10 +36,21 @@ describe('Using lucide icon components', () => {
|
||||
attrs: {
|
||||
style: 'position: absolute',
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
expect(wrapper).toMatchSnapshot();
|
||||
expect(wrapper.attributes('style')).toContain('position: absolute')
|
||||
});
|
||||
|
||||
it('should call the onClick event', () => {
|
||||
const onClick = jest.fn()
|
||||
const wrapper = mount(Smile, {
|
||||
listeners: {
|
||||
click: onClick
|
||||
}
|
||||
})
|
||||
|
||||
wrapper.trigger('click')
|
||||
expect(onClick).toHaveBeenCalled()
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "lucide",
|
||||
"description": "Lucide is a community-run fork of Feather Icons, open for anyone to contribute icons.",
|
||||
"version": "0.15.17",
|
||||
"version": "0.16.0",
|
||||
"license": "ISC",
|
||||
"homepage": "https://lucide.dev",
|
||||
"bugs": "https://github.com/lucide-icons/lucide/issues",
|
||||
@@ -19,7 +19,7 @@
|
||||
"typings": "dist/lucide.d.ts",
|
||||
"sideEffects": false,
|
||||
"scripts": {
|
||||
"build": "yarn clean && yarn build:icons && yarn build:es && yarn build:types && yarn build:bundles",
|
||||
"build": "yarn clean && yarn build:icons && (yarn build:es & yarn build:types & yarn build:bundles)",
|
||||
"clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.js",
|
||||
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide/src",
|
||||
"build:es": "babel src -d dist/esm",
|
||||
|
||||
@@ -73,7 +73,7 @@ export default (element, { nameAttr, icons, attrs }) => {
|
||||
...attrs,
|
||||
};
|
||||
|
||||
const classNames = combineClassNames(['lucide', elementAttrs, attrs]);
|
||||
const classNames = combineClassNames(['lucide', `lucide-${iconName}`, elementAttrs, attrs]);
|
||||
|
||||
if (classNames) {
|
||||
iconAttrs.class = classNames;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`createIcons should add custom attributes 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"24\\" height=\\"24\\" viewBox=\\"0 0 24 24\\" fill=\\"black\\" stroke=\\"currentColor\\" stroke-width=\\"2\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" icon-name=\\"volume-2\\" class=\\"lucide icon custom-class\\"><polygon points=\\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\\"></polygon><path d=\\"M19.07 4.93a10 10 0 010 14.14M15.54 8.46a5 5 0 010 7.07\\"></path></svg>"`;
|
||||
exports[`createIcons should add custom attributes 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"24\\" height=\\"24\\" viewBox=\\"0 0 24 24\\" fill=\\"black\\" stroke=\\"currentColor\\" stroke-width=\\"2\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" icon-name=\\"volume-2\\" class=\\"lucide lucide-volume-2 icon custom-class\\"><polygon points=\\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\\"></polygon><path d=\\"M19.07 4.93a10 10 0 010 14.14M15.54 8.46a5 5 0 010 7.07\\"></path></svg>"`;
|
||||
|
||||
exports[`createIcons should read elements from DOM and replace it with icons 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"24\\" height=\\"24\\" viewBox=\\"0 0 24 24\\" fill=\\"none\\" stroke=\\"currentColor\\" stroke-width=\\"2\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" icon-name=\\"volume-2\\" class=\\"lucide\\"><polygon points=\\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\\"></polygon><path d=\\"M19.07 4.93a10 10 0 010 14.14M15.54 8.46a5 5 0 010 7.07\\"></path></svg>"`;
|
||||
exports[`createIcons should read elements from DOM and replace it with icons 1`] = `"<svg xmlns=\\"http://www.w3.org/2000/svg\\" width=\\"24\\" height=\\"24\\" viewBox=\\"0 0 24 24\\" fill=\\"none\\" stroke=\\"currentColor\\" stroke-width=\\"2\\" stroke-linecap=\\"round\\" stroke-linejoin=\\"round\\" icon-name=\\"volume-2\\" class=\\"lucide lucide-volume-2\\"><polygon points=\\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\\"></polygon><path d=\\"M19.07 4.93a10 10 0 010 14.14M15.54 8.46a5 5 0 010 7.07\\"></path></svg>"`;
|
||||
|
||||
@@ -11,7 +11,7 @@ const getOriginalSvg = (iconName) => {
|
||||
const svgParsed = parseSync(svgContent);
|
||||
|
||||
svgParsed.attributes['icon-name'] = iconName;
|
||||
svgParsed.attributes['class'] = 'lucide';
|
||||
svgParsed.attributes['class'] = `lucide lucide-${iconName}`;
|
||||
|
||||
return stringify(svgParsed, { selfClose: false });
|
||||
};
|
||||
@@ -45,7 +45,7 @@ describe('createIcons', () => {
|
||||
document.body.innerHTML = `<i icon-name="volume-2" class="lucide"></i>`;
|
||||
|
||||
const attrs = {
|
||||
class: 'lucide icon custom-class',
|
||||
class: 'lucide lucide-volume-2 icon custom-class',
|
||||
fill: 'black',
|
||||
};
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import prettier from 'prettier';
|
||||
import { promises } from 'stream';
|
||||
import { toPascalCase } from '../helpers';
|
||||
|
||||
export default function({ iconNodes, outputDirectory, template, showLog = true, iconFileExtention = '.js' }) {
|
||||
@@ -12,7 +13,7 @@ export default function({ iconNodes, outputDirectory, template, showLog = true,
|
||||
fs.mkdirSync(iconsDistDirectory);
|
||||
}
|
||||
|
||||
icons.forEach(iconName => {
|
||||
const writeIconFiles = icons.map(async iconName => {
|
||||
const location = path.join(iconsDistDirectory, `${iconName}${iconFileExtention}`);
|
||||
const componentName = toPascalCase(iconName);
|
||||
|
||||
@@ -21,11 +22,16 @@ export default function({ iconNodes, outputDirectory, template, showLog = true,
|
||||
|
||||
const elementTemplate = template({ componentName, iconName, children });
|
||||
|
||||
|
||||
fs.writeFileSync(location, prettier.format(elementTemplate, { singleQuote: true, trailingComma: 'all', parser: 'babel' }), 'utf-8');
|
||||
|
||||
if(showLog) {
|
||||
console.log('Successfully built', componentName);
|
||||
}
|
||||
await fs.promises.writeFile(location, prettier.format(elementTemplate, { singleQuote: true, trailingComma: 'all', parser: 'babel' }), 'utf-8');
|
||||
});
|
||||
|
||||
Promise.all(writeIconFiles)
|
||||
.then(() => {
|
||||
if(showLog) {
|
||||
console.log('Successfully built', icons.length, 'icons.');
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
throw new Error(`Something went wrong generating icon files,\n ${error}`)
|
||||
})
|
||||
}
|
||||
|
||||
78
scripts/outlineSvg.js
Normal file
@@ -0,0 +1,78 @@
|
||||
import { promises as fs } from 'fs';
|
||||
import outlineStroke from 'svg-outline-stroke';
|
||||
import { parse, stringify } from 'svgson'; // eslint-disable-line import/no-extraneous-dependencies
|
||||
|
||||
const inputDir = `./icons/`;
|
||||
const outputDirs = {
|
||||
'converted_icons-200': '1',
|
||||
'converted_icons-300': '1.5',
|
||||
converted_icons: '2',
|
||||
'converted_icons-500': '2.5',
|
||||
'converted_icons-600': '3',
|
||||
};
|
||||
|
||||
function transformForward(node) {
|
||||
if (node.name === 'svg') {
|
||||
return {
|
||||
...node,
|
||||
attributes: {
|
||||
...node.attributes,
|
||||
width: 960,
|
||||
height: 960,
|
||||
},
|
||||
};
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
function transformBackwards(node) {
|
||||
if (node.name === 'svg') {
|
||||
const { width, height, ...attributes } = node.attributes;
|
||||
return {
|
||||
...node,
|
||||
attributes,
|
||||
};
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
async function init() {
|
||||
console.time('icon outliner');
|
||||
try {
|
||||
const createDirectories = Object.keys(outputDirs).map(directory => fs.mkdir(`./${directory}`));
|
||||
await Promise.all(createDirectories);
|
||||
|
||||
const icons = await fs.readdir(inputDir);
|
||||
const parsedIconNodes = await Promise.all(
|
||||
icons.map(async file => {
|
||||
const iconContent = await fs.readFile(`${inputDir}${file}`);
|
||||
const iconNode = await parse(iconContent.toString(), {
|
||||
transformNode: transformForward,
|
||||
});
|
||||
return [file, iconNode];
|
||||
}),
|
||||
);
|
||||
|
||||
await Promise.all(
|
||||
Object.entries(outputDirs).map(async ([directory, width]) => {
|
||||
await Promise.all(
|
||||
parsedIconNodes.map(async ([file, iconNode]) => {
|
||||
iconNode.attributes['stroke-width'] = width;
|
||||
const outlined = await outlineStroke(stringify(iconNode));
|
||||
const outlinedWithoutAttrs = await parse(outlined, {
|
||||
transformNode: transformBackwards,
|
||||
});
|
||||
|
||||
await fs.writeFile(`./${directory}/${file}`, stringify(outlinedWithoutAttrs));
|
||||
}),
|
||||
);
|
||||
}),
|
||||
);
|
||||
|
||||
console.timeEnd('icon outliner');
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
}
|
||||
|
||||
init();
|
||||
@@ -1,52 +0,0 @@
|
||||
const { promises: fs } = require('fs');
|
||||
const outlineStroke = require('svg-outline-stroke');
|
||||
const { parse, stringify } = require('svgson');
|
||||
|
||||
const inputDir = `./icons/`;
|
||||
const outputDir = `./converted_icons/`;
|
||||
|
||||
async function init() {
|
||||
try {
|
||||
const files = await fs.readdir(inputDir);
|
||||
for (const file of files) {
|
||||
const icon = await fs.readFile(`${inputDir}${file}`);
|
||||
const scaled = await parse(icon.toString(), {
|
||||
transformNode: transformForward,
|
||||
});
|
||||
const outlined = await outlineStroke(stringify(scaled));
|
||||
const outlinedWithoutAttrs = await parse(outlined, {
|
||||
transformNode: transformBackwards,
|
||||
});
|
||||
await fs.writeFile(`${outputDir}${file}`, stringify(outlinedWithoutAttrs));
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
}
|
||||
|
||||
init();
|
||||
|
||||
function transformForward(node) {
|
||||
if (node.name === 'svg') {
|
||||
return {
|
||||
...node,
|
||||
attributes: {
|
||||
...node.attributes,
|
||||
width: 960,
|
||||
height: 960,
|
||||
},
|
||||
};
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
function transformBackwards(node) {
|
||||
if (node.name === 'svg') {
|
||||
const { width, height, ...attributes } = node.attributes;
|
||||
return {
|
||||
...node,
|
||||
attributes,
|
||||
};
|
||||
}
|
||||
return node;
|
||||
}
|
||||
@@ -1,4 +1,21 @@
|
||||
const { builtinModules } = require('module')
|
||||
const rootConfig = require('../.eslintrc.js')
|
||||
|
||||
module.exports = rootConfig;
|
||||
/* eslint-disable no-undef */
|
||||
module.exports = {
|
||||
root: true,
|
||||
parser: '@typescript-eslint/parser',
|
||||
plugins: ['@typescript-eslint', 'import', 'prettier'],
|
||||
extends: [
|
||||
'eslint:recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:@next/next/recommended',
|
||||
'prettier',
|
||||
],
|
||||
rules: {
|
||||
'prettier/prettier': [
|
||||
'error',
|
||||
{
|
||||
singleQuote: true,
|
||||
trailingComma: 'all',
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
7
site/next-env.d.ts
vendored
@@ -1,7 +1,6 @@
|
||||
/// <reference types="next" />
|
||||
/// <reference types="next/types/global" />
|
||||
/// <reference types="next/image-types/global" />
|
||||
|
||||
declare module "*.svg" {
|
||||
const content: any;
|
||||
export default content;
|
||||
}
|
||||
// NOTE: This file should not be edited
|
||||
// see https://nextjs.org/docs/basic-features/typescript for more information.
|
||||
|
||||
21
site/next.config.js
Normal file
@@ -0,0 +1,21 @@
|
||||
/* eslint-disable no-undef */
|
||||
module.exports = {
|
||||
webpack: (config, options) => {
|
||||
config.module.rules.push({
|
||||
test: /\.svg/,
|
||||
use: [
|
||||
{
|
||||
loader: 'babel-loader',
|
||||
},
|
||||
{
|
||||
loader: 'react-svg-loader',
|
||||
options: {
|
||||
jsx: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
return config;
|
||||
},
|
||||
};
|
||||
@@ -8,6 +8,7 @@
|
||||
"build": "next build",
|
||||
"export": "next export -o build",
|
||||
"deploy": "yarn build && yarn export",
|
||||
"lint": "eslint .",
|
||||
"test": "jest"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -16,16 +17,17 @@
|
||||
"@emotion/styled": "^11",
|
||||
"downloadjs": "^1.4.7",
|
||||
"framer-motion": "^4",
|
||||
"jszip": "^3.4.0",
|
||||
"jszip": "^3.7.0",
|
||||
"lodash": "^4.17.20",
|
||||
"lucide-react": "0.14.0",
|
||||
"next": "^10.0.4",
|
||||
"next": "^11.1.1",
|
||||
"react": "^17.0.1",
|
||||
"react-color": "^2.19.3",
|
||||
"react-dom": "^17.0.1",
|
||||
"react-svg-loader": "^3.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@next/eslint-plugin-next": "^11.1.0",
|
||||
"@testing-library/dom": "^7.24.4",
|
||||
"@testing-library/jest-dom": "^5.11.4",
|
||||
"@testing-library/react": "^11.0.4",
|
||||
@@ -33,10 +35,14 @@
|
||||
"@types/node": "^14.0.11",
|
||||
"@types/react": "^16.9.35",
|
||||
"@types/react-dom": "^16.9.8",
|
||||
"@typescript-eslint/eslint-plugin": "^4.29.1",
|
||||
"@typescript-eslint/parser": "^4.29.1",
|
||||
"babel-jest": "^26.5.2",
|
||||
"babel-loader": "^8.1.0",
|
||||
"cheerio": "^1.0.0-rc.3",
|
||||
"eslint": "^7.32.0",
|
||||
"jest": "^26.5.2",
|
||||
"typescript": "^4.2.4"
|
||||
"prettier": "^2.3.2",
|
||||
"typescript": "^4.3.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,22 @@
|
||||
import { Button, Flex, Link, WrapItem, Text, Wrap } from "@chakra-ui/react";
|
||||
import download from "downloadjs";
|
||||
import JSZip from "jszip";
|
||||
import { Button, Flex, Link, WrapItem, Text, Wrap } from '@chakra-ui/react';
|
||||
import download from 'downloadjs';
|
||||
import JSZip from 'jszip';
|
||||
import { Download, Github } from 'lucide-react';
|
||||
import { IconCustomizerDrawer } from "./IconCustomizerDrawer";
|
||||
import { IconCustomizerDrawer } from './IconCustomizerDrawer';
|
||||
|
||||
function generateZip(icons) {
|
||||
const zip = new JSZip();
|
||||
Object.values(icons).forEach((icon) =>
|
||||
Object.values(icons).forEach(icon =>
|
||||
// @ts-ignore
|
||||
zip.file(`${icon.name}.svg`, icon.src)
|
||||
zip.file(`${icon.name}.svg`, icon.src),
|
||||
);
|
||||
return zip.generateAsync({ type: 'blob' });
|
||||
}
|
||||
|
||||
const Header = ({ data }) => {
|
||||
const downloadAllIcons = async () => {
|
||||
|
||||
const zip = await generateZip(data);
|
||||
download(zip, 'feather.zip');
|
||||
download(zip, 'lucide.zip');
|
||||
};
|
||||
|
||||
const repositoryUrl = 'https://github.com/lucide-icons/lucide';
|
||||
@@ -28,41 +27,41 @@ const Header = ({ data }) => {
|
||||
Simply beautiful open source icons, community-sourced
|
||||
</Text>
|
||||
<Text fontSize="lg" as="p" textAlign="center" mb="8">
|
||||
An open-source icon library, a fork of <Link href="https://github.com/feathericons/feather" isExternal>Feather Icons</Link>. <br/>We're expanding the icon set as much as possible while keeping it nice-looking - <Link href={repositoryUrl} isExternal>join us</Link>!
|
||||
An open-source icon library, a fork of{' '}
|
||||
<Link href="https://github.com/feathericons/feather" isExternal>
|
||||
Feather Icons
|
||||
</Link>
|
||||
. <br />
|
||||
We're expanding the icon set as much as possible while keeping it nice-looking -{' '}
|
||||
<Link href={repositoryUrl} isExternal>
|
||||
join us
|
||||
</Link>
|
||||
!
|
||||
</Text>
|
||||
<Wrap
|
||||
marginTop={3}
|
||||
marginBottom={10}
|
||||
spacing="15px"
|
||||
justify="center"
|
||||
>
|
||||
<Wrap marginTop={3} marginBottom={10} spacing="15px" justify="center">
|
||||
<WrapItem>
|
||||
<Button
|
||||
leftIcon={<Download/>}
|
||||
size="lg"
|
||||
onClick={downloadAllIcons}
|
||||
>
|
||||
<Button leftIcon={<Download />} size="lg" onClick={downloadAllIcons}>
|
||||
Download all
|
||||
</Button>
|
||||
</WrapItem>
|
||||
<WrapItem>
|
||||
<IconCustomizerDrawer/>
|
||||
<IconCustomizerDrawer />
|
||||
</WrapItem>
|
||||
<WrapItem>
|
||||
<Button
|
||||
as="a"
|
||||
leftIcon={<Github/>}
|
||||
size="lg"
|
||||
href={repositoryUrl}
|
||||
target="__blank"
|
||||
onClick={downloadAllIcons}
|
||||
>
|
||||
Github
|
||||
</Button>
|
||||
<Button
|
||||
as="a"
|
||||
leftIcon={<Github />}
|
||||
size="lg"
|
||||
href={repositoryUrl}
|
||||
target="__blank"
|
||||
onClick={downloadAllIcons}
|
||||
>
|
||||
Github
|
||||
</Button>
|
||||
</WrapItem>
|
||||
</Wrap>
|
||||
</Flex>
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
export default Header;
|
||||
|
||||
@@ -1,26 +1,38 @@
|
||||
import { Box, Divider, Flex, Text, Link, Icon, useColorMode, useColorModeValue, IconButton } from "@chakra-ui/react";
|
||||
import { useKeyBindings } from "../lib/key";
|
||||
import { useRouter } from "next/router";
|
||||
import NextLink from "next/link"
|
||||
import {
|
||||
Box,
|
||||
Divider,
|
||||
Flex,
|
||||
Text,
|
||||
Link,
|
||||
Icon,
|
||||
useColorMode,
|
||||
useColorModeValue,
|
||||
IconButton,
|
||||
} from '@chakra-ui/react';
|
||||
import { useKeyBindings } from '../lib/key';
|
||||
import { useRouter } from 'next/router';
|
||||
import NextLink from 'next/link';
|
||||
import { Moon, Sun } from 'lucide-react';
|
||||
import Logo from 'babel-loader!react-svg-loader?jsx=true!../../public/logo.svg';
|
||||
import Logo from '../../public/logo.svg';
|
||||
|
||||
const Layout = ({ children }) => {
|
||||
const router = useRouter();
|
||||
const { colorMode, toggleColorMode } = useColorMode();
|
||||
const text = useColorModeValue('dark', 'light')
|
||||
const { toggleColorMode } = useColorMode();
|
||||
const text = useColorModeValue('dark', 'light');
|
||||
const ColorModeToggle = useColorModeValue(Moon, Sun);
|
||||
|
||||
function setQuery(query){
|
||||
router.push({
|
||||
pathname: '/',
|
||||
query: { query: query }
|
||||
}).then();
|
||||
function setQuery(query) {
|
||||
router
|
||||
.push({
|
||||
pathname: '/',
|
||||
query: { query: query },
|
||||
})
|
||||
.then();
|
||||
}
|
||||
|
||||
useKeyBindings({
|
||||
Escape: {
|
||||
fn: () => setQuery(""),
|
||||
fn: () => setQuery(''),
|
||||
},
|
||||
KeyT: {
|
||||
fn: () => toggleColorMode(),
|
||||
@@ -42,45 +54,42 @@ const Layout = ({ children }) => {
|
||||
>
|
||||
<Flex justifyContent="center" alignItems="center">
|
||||
<NextLink href="/" passHref>
|
||||
<Link display="flex" _hover={{textDecoration: 'none'}}>
|
||||
<Link display="flex" _hover={{ textDecoration: 'none' }}>
|
||||
<Icon boxSize={12} marginRight="8px">
|
||||
<Logo/>
|
||||
<Logo />
|
||||
</Icon>
|
||||
<Text
|
||||
fontSize="40px"
|
||||
lineHeight="48px"
|
||||
>
|
||||
<Text fontSize="40px" lineHeight="48px">
|
||||
Lucide
|
||||
</Text>
|
||||
</Link>
|
||||
</NextLink>
|
||||
</Flex>
|
||||
<Flex justifyContent="center" alignItems="center">
|
||||
<Link
|
||||
href="https://github.com/lucide-icons/lucide"
|
||||
isExternal
|
||||
marginRight={6}
|
||||
fontSize="xl"
|
||||
>
|
||||
Github
|
||||
</Link>
|
||||
<IconButton
|
||||
size="md"
|
||||
fontSize="lg"
|
||||
aria-label={`Switch to ${text} mode`}
|
||||
variant="ghost"
|
||||
color="current"
|
||||
ml="3"
|
||||
onClick={toggleColorMode}
|
||||
icon={<ColorModeToggle />}
|
||||
/>
|
||||
<Link
|
||||
href="https://github.com/lucide-icons/lucide"
|
||||
isExternal
|
||||
marginRight={6}
|
||||
fontSize="xl"
|
||||
>
|
||||
Github
|
||||
</Link>
|
||||
<IconButton
|
||||
size="md"
|
||||
fontSize="lg"
|
||||
aria-label={`Switch to ${text} mode`}
|
||||
variant="ghost"
|
||||
color="current"
|
||||
ml="3"
|
||||
onClick={toggleColorMode}
|
||||
icon={<ColorModeToggle />}
|
||||
/>
|
||||
</Flex>
|
||||
</Flex>
|
||||
</Flex>
|
||||
<Flex margin="0 auto" direction="column" maxW="1250px" px={5}>
|
||||
{children}
|
||||
<Divider marginBottom={8} />
|
||||
<p style={{ alignSelf: "center" }}>
|
||||
<p style={{ alignSelf: 'center' }}>
|
||||
<a href="https://vercel.com?utm_source=lucide&utm_campaign=oss">
|
||||
<img src="/vercel.svg" alt="Powered by Vercel" width="200" />
|
||||
</a>
|
||||
|
||||
@@ -6,18 +6,16 @@ class MyDocument extends Document {
|
||||
return (
|
||||
<Html>
|
||||
<Head>
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Mukta:wght@400;600;700&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"/>
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"/>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Mukta:wght@400;600;700&display=swap" rel="stylesheet" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
|
||||
<link rel="manifest" href="/site.webmanifest"/>
|
||||
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#F56565"/>
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg"/>
|
||||
<meta name="msapplication-TileColor" content="#F56565"/>
|
||||
<meta name="theme-color" content="#F56565"></meta>
|
||||
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#F56565" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<meta name="msapplication-TileColor" content="#F56565" />
|
||||
<meta name="theme-color" content="#F56565" />
|
||||
<meta name="google-site-verification" content="pr2dEIF-6zFdjXlDxutqEokeinrQNLx5qAjeVCqASDY" />
|
||||
</Head>
|
||||
<style jsx global>{`
|
||||
* {
|
||||
|
||||
@@ -1,47 +1,48 @@
|
||||
import { useRouter } from 'next/router'
|
||||
import IconDetailOverlay from '../../components/IconDetailOverlay'
|
||||
import { useRouter } from 'next/router';
|
||||
import IconDetailOverlay from '../../components/IconDetailOverlay';
|
||||
import { getAllData, getData } from '../../lib/icons';
|
||||
import IconOverview from '../../components/IconOverview';
|
||||
import Layout from '../../components/Layout';
|
||||
import Header from '../../components/Header';
|
||||
|
||||
const IconPage = ({ icon, data }) => {
|
||||
const router = useRouter()
|
||||
const router = useRouter();
|
||||
|
||||
const onClose = () => {
|
||||
let query = {};
|
||||
|
||||
if(router.query.search) {
|
||||
if (router.query.search) {
|
||||
query = {
|
||||
search: router.query.search
|
||||
search: router.query.search,
|
||||
};
|
||||
}
|
||||
console.log('CLOSE');
|
||||
|
||||
router.push({
|
||||
pathname: '/',
|
||||
query,
|
||||
})
|
||||
}
|
||||
router.push(
|
||||
{
|
||||
pathname: '/',
|
||||
query,
|
||||
},
|
||||
undefined,
|
||||
{ scroll: false },
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<IconDetailOverlay
|
||||
key={icon.name}
|
||||
icon={icon}
|
||||
close={onClose}
|
||||
/>
|
||||
<Header {...{data}}/>
|
||||
<IconOverview {...{data}}/>
|
||||
<IconDetailOverlay key={icon.name} icon={icon} close={onClose} />
|
||||
<Header {...{ data }} />
|
||||
<IconOverview {...{ data }} />
|
||||
</Layout>
|
||||
)
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
export default IconPage
|
||||
export default IconPage;
|
||||
|
||||
export async function getStaticProps({ params: { iconName } }) {
|
||||
const data = await getAllData();
|
||||
const icon = await getData(iconName);
|
||||
return { props: { icon, data } }
|
||||
return { props: { icon, data } };
|
||||
}
|
||||
|
||||
export async function getStaticPaths() {
|
||||
@@ -52,5 +53,5 @@ export async function getStaticPaths() {
|
||||
params: { iconName },
|
||||
})),
|
||||
fallback: false,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
2723
site/yarn.lock
51
tags.json
@@ -231,6 +231,7 @@
|
||||
"pairing"
|
||||
],
|
||||
"bold": [
|
||||
"text",
|
||||
"strong"
|
||||
],
|
||||
"book": [
|
||||
@@ -341,6 +342,10 @@
|
||||
"chevrons-down": [
|
||||
"arrow"
|
||||
],
|
||||
"chevrons-down-up": [
|
||||
"arrow",
|
||||
"fold"
|
||||
],
|
||||
"chevrons-left": [
|
||||
"arrow"
|
||||
],
|
||||
@@ -351,7 +356,8 @@
|
||||
"arrow"
|
||||
],
|
||||
"chevrons-up-down": [
|
||||
"arrow"
|
||||
"arrow",
|
||||
"unfold"
|
||||
],
|
||||
"chrome": [
|
||||
"browser"
|
||||
@@ -552,6 +558,10 @@
|
||||
"winner",
|
||||
"favourite"
|
||||
],
|
||||
"currency": [
|
||||
"finance",
|
||||
"money"
|
||||
],
|
||||
"database": [
|
||||
"storage",
|
||||
"memory"
|
||||
@@ -848,6 +858,12 @@
|
||||
"grab": [
|
||||
"hand"
|
||||
],
|
||||
"graduation-cap": [
|
||||
"school",
|
||||
"university",
|
||||
"learn",
|
||||
"study"
|
||||
],
|
||||
"grid": [
|
||||
"table"
|
||||
],
|
||||
@@ -989,6 +1005,13 @@
|
||||
"languages": [
|
||||
"translate"
|
||||
],
|
||||
"landmark": [
|
||||
"bank",
|
||||
"building",
|
||||
"capitol",
|
||||
"finance",
|
||||
"money"
|
||||
],
|
||||
"laptop": [
|
||||
"computer"
|
||||
],
|
||||
@@ -1073,7 +1096,8 @@
|
||||
"order"
|
||||
],
|
||||
"loader": [
|
||||
"load"
|
||||
"load",
|
||||
"wait"
|
||||
],
|
||||
"loader-2": [
|
||||
"load"
|
||||
@@ -1217,6 +1241,16 @@
|
||||
"menu",
|
||||
"options"
|
||||
],
|
||||
"mountain": [
|
||||
"climb",
|
||||
"hike",
|
||||
"rock"
|
||||
],
|
||||
"mountain-snow": [
|
||||
"alpine",
|
||||
"climb",
|
||||
"snow"
|
||||
],
|
||||
"mouse-pointer": [
|
||||
"arrow",
|
||||
"cursor",
|
||||
@@ -1411,6 +1445,9 @@
|
||||
"office",
|
||||
"device"
|
||||
],
|
||||
"quote": [
|
||||
"quotation"
|
||||
],
|
||||
"qr-code": [
|
||||
"barcode"
|
||||
],
|
||||
@@ -1450,6 +1487,11 @@
|
||||
"rewind": [
|
||||
"music"
|
||||
],
|
||||
"rocking-chair": [
|
||||
"chair",
|
||||
"furniture",
|
||||
"seat"
|
||||
],
|
||||
"rotate-ccw": [
|
||||
"arrow",
|
||||
"left"
|
||||
@@ -1501,11 +1543,12 @@
|
||||
"magnifying glass"
|
||||
],
|
||||
"send": [
|
||||
"email",
|
||||
"message",
|
||||
"mail",
|
||||
"email",
|
||||
"paper airplane",
|
||||
"paper aeroplane"
|
||||
"paper aeroplane",
|
||||
"submit"
|
||||
],
|
||||
"separator-horizontal": [
|
||||
"move",
|
||||
|
||||