Compare commits

..
40 Commits
Author SHA1 Message Date
Karsa d1866225ba Fixes radiation center dot (#1655) 2023-10-31 07:13:25 +01:00
Jakob Guddas 372735999f fix: exclude renames from contributor generation (#1643)
* fix: exclude renames from contributor generation

* fix: exclude renames from contributor generation
2023-10-30 21:31:25 +01:00
Jakob GuddasandKarsa f3a33346dd Fixed gaps in cake icon (#1651)
* Fixed gaps in `cake` icon

* Update cake.json

* Update icons/cake.svg

Co-authored-by: Karsa <contact@karsa.org>

---------

Co-authored-by: Karsa <contact@karsa.org>
2023-10-30 20:13:21 +01:00
Jakob GuddasandKarsa 3373acf596 Rebuild tree-deciduous using arcs (#1647)
* Rebuild tree-deciduous using arcs

* Update icons/tree-deciduous.svg

Co-authored-by: Karsa <contact@karsa.org>

---------

Co-authored-by: Karsa <contact@karsa.org>
2023-10-30 20:11:40 +01:00
Eric Fennis 73d5bfc318 Fix icon contributors 2023-10-29 21:09:08 +01:00
ayushrakesh ddbc074aa3 Update README.md (#1652) 2023-10-29 18:47:00 +01:00
Jakob Guddas 8f4d6b1651 feat: added lint-contributors job (#1625)
* feat: added lint-contributors job

Signed-off-by: Jakob Guddas <github@jguddas.de>

* feat: improved lint-contributors job

Signed-off-by: Jakob Guddas <github@jguddas.de>

* feat: add comments to lint-contributors job

Signed-off-by: Jakob Guddas <github@jguddas.de>

---------

Signed-off-by: Jakob Guddas <github@jguddas.de>
2023-10-27 08:59:27 +02:00
Daniel Bayley d8b08f8fda Add missing git icons (#995)
* Add `git-pull-request-create` icon

* Add `git-pull-request-create-arrow` variant

* Improve `git-*` icons metadata

* Optimise `git-pull-request-closed` icon

* Refine `git-fork` icon

…to match [`network`](https://lucide.dev/icons/network)

* Add `git-graph` icon

* Rename `git-commit` to `git-commit-horizontal`

* Add `git-commit-vertical` icon

* Add `git-pull-request-arrow` icon

* Add `git-compare-arrows` icon
2023-10-27 08:56:26 +02:00
Daniel BayleyandEric Fennis fddacb6260 Optimise/add power[-circle/-square] icons (#1353)
* Add `power-circle` icon

* Optimise `power` icon

* Improve `power` icon metadata

* Add `power-square` icon

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2023-10-23 21:35:57 +02:00
Sun Xiaoran 3d0c8691c9 fix: jsx type for icons in vue 3 (#1617) 2023-10-23 21:24:05 +02:00
Jakob Guddas 47998b05aa feat: added linting and formatting of icon and category json files (#1632) 2023-10-23 21:05:02 +02:00
Sukomal Dutta 9a9e051343 correct typo in icon size example (#1634) 2023-10-23 21:02:05 +02:00
Jakob Guddas 6c6c8448fa fix: duplicate Next.js aliases (#1631) 2023-10-22 13:06:07 +02:00
Eric Fennis 49445aad3a Showcase page for the website (#1604)
* add showcase items

* Add showcase cards

* Complete showcase list

* Add light/dark mode versions
2023-10-20 13:45:47 +02:00
Jakob Guddas 70656eb4f0 Optimized armchair icon (#1610) 2023-10-20 11:38:03 +02:00
Sukomal DuttaandEric Fennis 930f862547 fix website jumping isuue (#1612)
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2023-10-20 11:36:53 +02:00
Eric Fennis 931b7f5376 Add pnpm action 2023-10-20 11:19:48 +02:00
Jakob GuddasandKarsa 81e44bdc40 feat: improved folder cohesion (#1223)
* feat: improved folders

* fix: snapped node

* Update icons/folder-heart.svg

Co-authored-by: Karsa <contact@karsa.org>

* Update folder-cog-2.svg

* Update folder-cog.svg

* feat: revert folder-symlink

* feat: revert folder-output

---------

Co-authored-by: Karsa <contact@karsa.org>
2023-10-20 09:27:48 +02:00
Parikshit Adhikari e6e90944b9 typo fixed (#1621) 2023-10-19 17:17:06 +02:00
Eric Fennis f6fd369bfe Github Actions cleanup - Use setup node for pnpm cache (#1616)
* Switch setup node for pnpm cache

* Test workflows

* Add pnpm setup back again
2023-10-18 09:50:18 +02:00
Eric Fennis bbf183fe48 Fix lock file 2023-10-17 21:43:34 +02:00
4f5642b872 Add book-* icons (#1352)
* Add `book-text` icon

* Add `book-open-text` icon

* Add `book-a` (dictionary) icon

* Improve `book`/`contact` icons metadata

* Add `book-check` (read) icon

* Add `book-type` (font book) icon

* Add `book-spine` icon

* Add `book-elastic` icon

* Add `book-user` (contacts) icon

* Add `book-address-user` (contacts variant) icon

* Add `book-address` (contacts variant) icon

* Add `book-heart` (diary/journal) icon

* Improve `book-*` icons metadata

* Add `book-image` icon

* Add `library-big` icon

* Improve metadata

* Rename `book-address`[`-*`] icons to `book-tabs`[`-*`]

* Improve metadata

* Add `notebook` icon

* Add `notebook-tabs` (contacts variant) icon

* Add `notebook-text` icon

* Add `notebook-elastic` icon

* Add `notebook-pencil` icon

* Add `notepad-text` (`notebook` variant) icon

* Add `notepad-lines` icon

* Refine `library-big` icon

Remove detail.

* Update icons/book-heart.json

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Refine `book-tabs` icon

* Remove `book-tabs-user` icon

* Improve `book` icons metadata

* Move `note`[`book`/`pad`] icons

* Add `book-volume` (audiobook) icon

* Add `book-headphones` (audiobook variant) icon

* Add `book-audio` variant icon

* Add `library-square` icon

* Add `book-open` variant

* Rename `book-template` to `book-dashed`

* Add `book-git-commit` icon

* Delete icons/book-elastic.json

* Delete icons/book-elastic.svg

* Delete icons/book-git-commit.json

* Delete icons/book-git-commit.svg

* Delete icons/book-open-2.json

* Delete icons/book-open-2.svg

* Delete icons/book-spine.json

* Delete icons/book-spine.svg

* Delete icons/book-tabs.json

* Delete icons/book-tabs.svg

* Delete icons/book-volume.json

* Delete icons/book-volume.svg

---------

Co-authored-by: Jakob Guddas <github@jguddas.de>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2023-10-17 21:38:27 +02:00
Emma Alexia 1dce6a141a fix/docs: release tags don't work for newly-created/updated icons (#1589)
As per 3391b5b717, the format of new GitHub release tags is just the version number without the `v` prefix. As we can see on https://github.com/lucide-icons/lucide/releases?page=2, versions older than 0.266.0 use a `v` prefix. The current docs assume that all versions contain the `v` prefix; this PR fixes it so that the format of versions both from before and after this change are accounted for.
2023-10-17 21:30:26 +02:00
Eric Fennis dbfce919fc Alias support for lucide package (#1592)
* Setup aliases for lucide

* Make aliases work for lucide package
2023-10-17 21:27:46 +02:00
Jakob Guddas 52adb78df8 Optimized globe (#1606) 2023-10-17 21:26:47 +02:00
Jan c5cfbed28c add info about dynamic imports to nextjs docs (#1564)
* add info about dynamic imports to nextjs docs

* remove warning
2023-10-17 21:25:49 +02:00
Jakob Guddas 1e4fd13852 Optimized backpack icon (#1611) 2023-10-17 21:11:44 +02:00
Eric Fennis 0a0fd1cf6c Adds new font in lucide-static and speed up icon outlining (#1599)
* Apply new icon font build in release

* remove dockerfile
2023-10-16 22:03:57 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 487d03fc4d Bump undici from 5.24.0 to 5.26.3 (#1615)
Bumps [undici](https://github.com/nodejs/undici) from 5.24.0 to 5.26.3.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.24.0...v5.26.3)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-16 21:43:56 +02:00
Karsa 950160ad5a Fixes some over-optimisation done in #1573 (#1605) 2023-10-13 17:15:24 +02:00
Eric Fennis b6f5898aee Remove lucide flutter form the main repo (#1593) 2023-10-13 14:33:45 +02:00
Sukomal Dutta a9c1dca801 fix #1579 issue added debounced in search (#1600)
* add debounced in search

* updated iconsCategoryOverview

* fix site loading issue

* apply suggestion
2023-10-13 14:32:34 +02:00
Jakob Guddas c05c7e333f feat: added umbrella-off icon (#1568)
* feat: added umbrella-off icon

* Update umbrella-off.svg

* Update umbrella-off.svg

* Update umbrella-off.svg

* Update icons/umbrella-off.json
2023-10-12 08:36:17 +02:00
Jakob Guddas dff42fe326 fix: gh-icon improvements (#1595) 2023-10-11 13:21:42 +02:00
Daniel Bayley c1f642e20f Add navigation icons (#1390)
* Add `signpost` icon

* Add `signpost-big` icon

* Improve `milestone` metadata

* Add `map-pinned` icon

* Add `waypoints` icon

* Add `route` (journey/planner) icon

* Add `route-off` (clear journey) icon

* Refine `map-pinned` icon

* Refine `map-pinned` icon
2023-10-10 08:38:37 +02:00
Jakob Guddas cf9565b69c feat: added image-down icon (#1570) 2023-10-05 22:39:32 +02:00
Daniel BayleyandEric Fennis 4cc4468d2f Add camping icons (#1409)
* Add `caravan` icon

* Improve `tent` metadata

* Rename `tent` to `tipi`

* Add `tent-tree` (camping) icon

* Add `flame-kindling` (campfire) icon

* Refine `tipi` icon

* Refine `tent-tree` icon

* Revert rename `tipi` to `tent`

* Refine `caravan` icon

* Refine `tent` icon

* Fix `flame-kindling` optimisation

* Update flame-kindling.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2023-10-03 09:53:21 +02:00
Daniel BayleyandEric Fennis fd9ab8f17a Add barcode/scan icons/optimise/improve metadata (#1354)
* Add `barcode` icon

* Add `scan-barcode` icon

* Add `scan-text` icon

* Improve `scan` icons metadata

* Add `scan-eye` icon

* Add `scan-search` icon

* Optimise `scan-line` icon

* Add `fullscreen` icon

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2023-10-03 09:35:20 +02:00
Eric FennisandJakob Guddas c9101f0f39 Add Lucide basics guide on site (#1521)
* add sidebar topics

* Start with styling icons doc

* write some doc text

* add sandpack

* Add custom sandpack theme

* Adjust sandpack

* update sidebar

* Add example

* Add more examples

* updat lockfile

* update vitepress

* Fix sidebar

* Adjust theme with latest vitepress!

* Example updates!

* Finish last examples

* Remove markdown comments

* Update docs/guide/advanced/filled-icons.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/color.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/color.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/stroke-width.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/color.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/sizing.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/stroke-width.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/stroke-width.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/color.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/color.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/sizing.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/sizing.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/sizing.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/sizing.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/sizing.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update docs/guide/basics/stroke-width.md

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Process feedback

* Add editor width percentage

* process feedback

---------

Co-authored-by: Jakob Guddas <github@jguddas.de>
2023-10-03 08:21:01 +02:00
614ef1a1d5 Lock icons (#1346)
* new lock/unlock icons

* Update icons/lock-2.svg

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update icons/unlock-2.svg

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update lock-2.svg

* Update unlock-2.svg

* Update unlock-2.svg

* Rename lock-2.json to lock-dot.json

* Rename lock-2.svg to lock-dot.svg

* Rename unlock-2.json to unlock-dot.json

* Rename unlock-2.svg to unlock-dot.svg

* Update icons/lock-dot.svg

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update icons/unlock-dot.svg

Co-authored-by: Jakob Guddas <github@jguddas.de>

* Update and rename lock-dot.json to lock-keyhole.json

* Rename lock-dot.svg to lock-keyhole.svg

* Update and rename unlock-dot.json to unlock-keyhole.json

* Rename unlock-dot.svg to unlock-keyhole.svg

---------

Co-authored-by: Jakob Guddas <github@jguddas.de>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2023-10-02 20:25:05 +02:00
275 changed files with 4648 additions and 1519 deletions
+6 -25
View File
@@ -16,32 +16,16 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3.8.1
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile
- name: Fetch tags
run: git fetch --all --tags
@@ -50,9 +34,6 @@ jobs:
id: latest-tag
run: echo "LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: pnpm install
- name: Check if we can patch
run: .github/workflows/version-up.sh --minor
+6 -22
View File
@@ -12,32 +12,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3.8.1
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter lucide-angular build
+6 -25
View File
@@ -12,39 +12,20 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3.4.1
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3.8.1
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --filter outline-svg
run: pnpm install --frozen-lockfile
- name: Outline svg Icons
run: pnpm build:outline-icons
- name: Install dependencies
run: pnpm install --filter build-font
- name: Create font in ./lucide-font
run: pnpm build:font
+6 -22
View File
@@ -12,32 +12,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3.8.1
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter lucide-preact build
+6 -22
View File
@@ -12,32 +12,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3.8.1
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter lucide-react-native build
+6 -22
View File
@@ -13,32 +13,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3.8.1
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter lucide-react build
+6 -22
View File
@@ -12,32 +12,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3.8.1
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter lucide-solid build
+6 -22
View File
@@ -12,32 +12,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3.8.1
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter lucide-static build
+6 -22
View File
@@ -12,32 +12,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3.8.1
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter lucide-svelte build
+6 -22
View File
@@ -12,32 +12,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3.8.1
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter lucide-vue-next build
+6 -22
View File
@@ -12,32 +12,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3.8.1
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter lucide-vue build
+6 -22
View File
@@ -12,32 +12,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3.8.1
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter lucide build
+38 -4
View File
@@ -5,13 +5,47 @@ on:
paths:
- 'icons/*.svg'
permissions:
pull-requests: write
contents: write
jobs:
lint-contributors:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
ref: refs/pull/${{ github.event.pull_request.number }}/merge
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v35
with:
files: icons/*
- uses: actions/setup-node@v3.8.1
- name: Install simple-git (safer and faster than installing all deps)
run: npm install simple-git
- env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FETCH_DEPTH: ${{ github.event.pull_request.commits }}
run: node ./scripts/updateContributors.mjs ${{ steps.changed-files.outputs.all_changed_files }}
- name: Generate annotations
env:
ANNOTATION_SEVERITY: notice
ANNOTATION_TITLE: Contributors have changed!
ANNOTATION_DESCRIPTION: Don't add people who have only performed automatic optimizations.
run: |
git diff --unified=0 -- icons/*.json | # diff icon metadata (unified=0 gives the correct chunk line number)
perl -ne '/^(\+|- |@)/ && print' | # get chunks (lines that start with "+++", "@@", "+ ", "- ")
perl -pe 's/\n/%0A/' | # url encode line breaks (\n -> %0A)
perl -pe 's/%0A(\+\+\+ b\/)/\n\1/g' | # split chunks(one chunk per line)
perl -pe "s/\+\+\+ b\/([^@]*)%0A@@ -(\d+)[^\s]* \+(\d+)[^@]*@@(.*)/::$ANNOTATION_SEVERITY file=\1,line=\2,endLine=\3,title=$ANNOTATION_TITLE::$ANNOTATION_DESCRIPTION%0A\4/"
# Example for the previous substitution
# input: +++ b/icons/accessibility.json%0A@@ -2,0 +3 @@%0A+ "contributors": ["hi"],%0A@@ -13 +14 @@%0A+}%0A
# output: ::$ANNOTATION_SEVERITY file=icons/accessibility.json,line=2,endLine=3,title=$ANNOTATION_TITLE::$ANNOTATION_DESCRIPTION%0A%0A+ "contributors": ["hi"],%0A@@ -13 +14 @@%0A+}%0A
- name: Fail if contributors have changed
run: git diff --exit-code -- icons/*.json
add-changed-icons-comment:
runs-on: ubuntu-latest
permissions:
pull-requests: write
contents: write
steps:
- uses: actions/checkout@v2
with:
+17 -70
View File
@@ -53,29 +53,13 @@ jobs:
]
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v2
with:
version: 8
- uses: actions/setup-node@v3
with:
node-version: 18
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
@@ -102,30 +86,13 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v2
- uses: pnpm/action-setup@v2
with:
version: 8
- uses: actions/setup-node@v3
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
@@ -149,44 +116,24 @@ jobs:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
needs: pre-release
container: ericfennis/lucide-font:latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3.4.1
- uses: pnpm/action-setup@v2
with:
node-version: 16
- uses: pnpm/action-setup@v2.0.1
name: Install pnpm
id: pnpm-install
version: 8
- uses: actions/setup-node@v3
with:
version: 7
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
node-version: 18
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --filter outline-svg
run: pnpm install --frozen-lockfile
- name: Outline svg Icons
run: pnpm build:outline-icons
- name: Create directory
run: mkdir lucide-font
- name: Build font
run: fontcustom compile "./outlined" -h -n "lucide" -o ./lucide-font -F
- name: Create font in ./lucide-font
run: pnpm build:font
- name: "Upload to Artifacts"
uses: actions/upload-artifact@v1
+2 -1
View File
@@ -3,5 +3,6 @@
"devs",
"preact",
"Preact"
]
],
"svg.preview.background": "transparent"
}
+1 -12
View File
@@ -18,7 +18,7 @@ Lucide is trying to expand the icon set as much as possible while staying faithf
### Why choose Lucide over Feather Icons
- More icons to work with: Lucide already has hundreds of icons more than Feather does.
- Official librairies and integrations with popular frameworks and design tools.
- Official libraries and integrations with popular frameworks and design tools.
- Well maintained code base.
- Active community, regularly growing and improving the set.
@@ -35,7 +35,6 @@ Lucide is trying to expand the icon set as much as possible while staying faithf
- [Static (svg sprite, font, icons ..)](#static-svg-sprite-font-icons-)
- [Figma](#figma)
- [Laravel](#laravel)
- [Flutter](#flutter)
- [Svelte](#svelte)
- [Solid](#solid)
- [Hyva](#hyva)
@@ -200,16 +199,6 @@ 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).
### Svelte
Implementation of the lucide icon library for Svelte applications.
+7 -6
View File
@@ -12,9 +12,11 @@
},
"title": "Lucide Icons category schema",
"type": "object",
"additionalProperties": false,
"required": ["$schema", "icon", "title"],
"properties": {
"title": {
"type": "string"
"$schema": {
"const": "../category.schema.json"
},
"description": {
"type": "string"
@@ -22,13 +24,12 @@
"icon": {
"type": "string"
},
"title": {
"type": "string"
},
"weight": {
"type": "integer"
}
},
"required": [
"title",
"icon"
],
"description": "A JSON Schema for categories defined by Lucide Icons."
}
+25 -22
View File
@@ -1,41 +1,44 @@
import { eventHandler, setResponseHeader, defaultContentType } from 'h3'
import { renderToString, renderToStaticMarkup } from 'react-dom/server'
import { createElement } from 'react'
import { eventHandler, setResponseHeader, defaultContentType } from 'h3';
import { renderToString, renderToStaticMarkup } from 'react-dom/server';
import { createElement } from 'react';
import SvgPreview from '../../lib/SvgPreview/index.tsx';
import iconNodes from '../../data/iconNodes'
import createLucideIcon from 'lucide-react/src/createLucideIcon'
import iconNodes from '../../data/iconNodes';
import createLucideIcon from 'lucide-react/src/createLucideIcon';
import Backdrop from '../../lib/SvgPreview/Backdrop.tsx';
export default eventHandler((event) => {
const { params } = event.context
const { params } = event.context;
const [name, svgData] = params.data.split('/');
const data = svgData.slice(0, -4);
const pathData = params.data.split('/');
const data = pathData.at(-1).slice(0, -4);
const [name] = pathData;
const src = Buffer.from(data, 'base64').toString('utf8');
const children = []
const children = [];
if (name in iconNodes) {
const iconNode = iconNodes[name]
// If the icon already exists, it uses the existing icon as the backdrop.
// If the icon does not exist but an icon exists that starts with the same group name, that icon
// is used as the backdrop
const backdropName =
name in iconNodes ? name : name.split('-')[0] in iconNodes ? name.split('-')[0] : null;
if (backdropName) {
const iconNode = iconNodes[backdropName];
const LucideIcon = createLucideIcon(name, iconNode)
const svg = renderToStaticMarkup(createElement(LucideIcon))
const LucideIcon = createLucideIcon(backdropName, iconNode);
const svg = renderToStaticMarkup(createElement(LucideIcon));
const backdropString = svg.replace(/<svg[^>]*>|<\/svg>/g, '');
children.push(createElement(Backdrop, { backdropString, src }))
children.push(createElement(Backdrop, { backdropString, src }));
}
const svg = Buffer.from(
// We can't use jsx here, is not supported here by nitro.
renderToString(createElement(SvgPreview, {src, showGrid: true}, children)).replace(
/>/,
'><style>@media screen and (prefers-color-scheme: dark) { svg { stroke: #fff } }</style>'
)
renderToString(createElement(SvgPreview, { src, showGrid: true }, children))
).toString('utf8');
defaultContentType(event, 'image/svg+xml')
setResponseHeader(event, 'Cache-Control', 'public,max-age=31536000')
defaultContentType(event, 'image/svg+xml');
setResponseHeader(event, 'Cache-Control', 'public,max-age=31536000');
return svg
})
return svg;
});
+1
View File
@@ -104,6 +104,7 @@ export default defineConfig({
{ text: 'Icons', link: '/icons/' },
{ text: 'Guide', link: '/guide/' },
{ text: 'Packages', link: '/packages' },
{ text: 'Showcase', link: '/showcase' },
{ text: 'License', link: '/license' },
],
sidebar,
+50
View File
@@ -0,0 +1,50 @@
[
{
"name": "Vercel",
"url": "https://vercel.com",
"image": {
"light": "/company-logos/vercel-light.svg",
"dark": "/company-logos/vercel-dark.svg"
}
},
{
"name": "Supabase",
"url": "https://supabase.com",
"image": {
"light": "/company-logos/supabase-light.svg",
"dark": "/company-logos/supabase-dark.svg"
}
},
{
"name": "Obsidian",
"url": "https://obsidian.md",
"image": {
"light": "/company-logos/obsidian-light.svg",
"dark": "/company-logos/obsidian-dark.svg"
}
},
{
"name": "Open Collective",
"url": "https://opencollective.com",
"image": {
"light": "/company-logos/open-collective-light.svg",
"dark": "/company-logos/open-collective-dark.svg"
}
},
{
"name": "Super",
"url": "https://super.so",
"image": {
"light": "/company-logos/super-light.svg",
"dark": "/company-logos/super-dark.svg"
}
},
{
"name": "Noodle",
"url": "https://noodle.run/",
"image": {
"light": "/company-logos/noodle-light.svg",
"dark": "/company-logos/noodle-dark.svg"
}
}
]
@@ -0,0 +1,18 @@
[
{
"name": "Shadcn/ui",
"url": "https://ui.shadcn.com/",
"image": {
"light": "/library-logos/shadcn-ui-light.svg",
"dark": "/library-logos/shadcn-ui-dark.svg"
}
},
{
"name": "Tamagui",
"url": "https://tamagui.dev/",
"image": {
"light": "/library-logos/tamagui.svg",
"dark": "/library-logos/tamagui.svg"
}
}
]
+37 -20
View File
@@ -10,26 +10,49 @@ const sidebar: UserConfig<DefaultTheme.Config>['themeConfig']['sidebar'] = {
{ text: 'Comparison', link: '/guide/comparison' }
]
},
{
text: 'Basics',
items: [
{
text: 'Color',
link: '/guide/basics/color'
},
{
text: 'Sizing',
link: '/guide/basics/sizing'
},
{
text: 'Stroke width',
link: '/guide/basics/stroke-width'
},
]
},
// TODO: Add this section
// {
// text: 'Using Icons',
// text: 'Advanced',
// items: [
// {
// text: 'How to use icons',
// link: 'how-to-use-icons'
// },
// {
// text: 'Styling icons',
// link: 'styling-icons'
// },
// {
// text: 'Accessibility',
// link: 'accessibility'
// link: '/guide/advanced/accessibility'
// },
// {
// text: 'What should I use',
// link: 'what-should-i-use'
// text: 'Global styling',
// },
// {
// text: 'Animations',
// },
// {
// text: 'Filled icons',
// },
// {
// text: 'Combining icons',
// },
// {
// text: 'Dynamic imports'
// },
// // {
// // text: 'Auto importing'
// // },
// ]
// },
{
@@ -103,15 +126,9 @@ const sidebar: UserConfig<DefaultTheme.Config>['themeConfig']['sidebar'] = {
]
},
],
// This should be here to keep the sidebar shown on the icons page
'icons': [
{ text: '', link: '/' },
// { text: 'Categorized', link: '/icons/categorized' },
// {
// text: 'Categories',
// items: [
// ...(getAllCategoryFiles().map((category) => ({ text: category, link: `/icons/category/${category}` })))
// ]
// }
],
}
@@ -7,5 +7,6 @@
<style scoped>
.container {
padding: 32px;
padding-top: 48px;
}
</style>
@@ -36,6 +36,7 @@ const component = computed(() => props.href ? 'a' : 'div')
border-radius: 6px;
background-color: var(--vp-c-bg-alt);
color: var(--vp-c-text-1);
text-decoration: none;
/* width: 56px;
height: 56px; */
font-size: 16px;
@@ -0,0 +1,56 @@
<script setup lang="ts">
import { computed } from 'vue';
const props = defineProps<{
href?: string;
}>()
const isExternal = computed(() => {
return props.href?.startsWith('http') ?? false
})
const component = computed(() => {
return props.href ? 'a' : 'div'
})
const rel = computed(() => {
return isExternal.value ? 'noreferrer noopener' : undefined
})
</script>
<template>
<component
:is="component"
:href="href"
:rel="rel"
class="card"
>
<slot />
</component>
</template>
<style scoped>
.card {
border: 1px solid var(--vp-c-bg-soft);
border-radius: 12px;
background-color: var(--vp-c-bg-soft);
display: flex;
flex-direction: column;
padding: 24px;
text-decoration: none;
}
.card[href] {
display: block;
border: 1px solid var(--vp-c-bg-soft);
border-radius: 12px;
height: 100%;
background-color: var(--vp-c-bg-soft);
transition: border-color .25s,background-color .25s;
}
.card[href]:hover {
border-color: var(--vp-c-brand-1);
}
</style>
@@ -0,0 +1,36 @@
<template>
<div class="grid">
<slot />
</div>
</template>
<style scoped>
.grid {
display: flex;
flex-wrap: wrap;
align-items: stretch;
justify-content: center;
align-content: space-evenly;
box-sizing: border-box;
margin: -8px;
}
.grid > * {
flex-basis: 100%;
box-sizing: border-box;
padding: 8px;
}
@media (min-width: 960px) {
.grid > * {
flex-basis: 50%;
}
}
@media (min-width: 1280px) {
.grid > * {
flex-basis: 33.33%;
}
}
</style>
@@ -0,0 +1,63 @@
<script setup lang="ts">
import { computed } from 'vue';
import CardGrid from './CardGrid.vue';
const props = defineProps<{
title: string,
headingLevel: 1 | 2 | 3 | 4 | 5 | 6,
}>()
const headingElement = computed(() => `h${props.headingLevel}`)
</script>
<template>
<section>
<component :is="headingElement" class="name">{{ title }}</component>
<CardGrid>
<slot />
</CardGrid>
</section>
</template>
<style scoped>
.name {
font-size: 32px;
font-weight: bold;
text-align: center;
margin-bottom: 32px;
}
section {
margin-bottom: 96px;
}
.grid {
display: flex;
flex-wrap: wrap;
align-items: stretch;
justify-content: center;
align-content: space-evenly;
box-sizing: border-box;
margin: -8px;
}
.grid > * {
flex-basis: 100%;
box-sizing: border-box;
padding: 8px;
}
@media (min-width: 960px) {
.grid > * {
flex-basis: 50%;
}
}
@media (min-width: 1280px) {
.grid > * {
flex-basis: 33.33%;
}
}
</style>
@@ -10,7 +10,7 @@ import { data } from './HomeHeroBefore.data'
:href="`https://github.com/lucide-icons/lucide/releases/tag/${data.version}`"
target="_blank"
rel="noreferrer noopener"
>{{ data.version }}</Badge>
>v{{ data.version }}</Badge>
</HomeContainer>
</template>
@@ -1,48 +1,50 @@
<script setup lang="ts">
import { onMounted } from 'vue'
import { useCategoryView } from '../../composables/useCategoryView'
import { onMounted } from 'vue';
import { useCategoryView } from '../../composables/useCategoryView';
interface Header {
level: number
title: string
slug: string
iconCount: number
link: string
children: Header[]
level: number;
title: string;
slug: string;
iconCount: number;
link: string;
children: Header[];
}
type MenuItem = Omit<Header, 'slug' | 'children'> & {
children?: MenuItem[]
}
children?: MenuItem[];
};
const props = defineProps<{
headers: MenuItem[]
root?: boolean
}>()
headers: MenuItem[];
root?: boolean;
}>();
const { selectedCategory } = useCategoryView()
const { selectedCategory } = useCategoryView();
function onClick(event: Event) {
const target = (event.target as HTMLElement).nodeName === 'span' ? (event.target as HTMLElement).parentNode : event.target as HTMLElement
const id = '#' + (target as HTMLAnchorElement).href!.split('#')[1]
const decodedId = decodeURIComponent(id)
const target =
(event.target as HTMLElement).nodeName === 'span'
? (event.target as HTMLElement).parentNode
: (event.target as HTMLElement);
const href = (target as HTMLAnchorElement)?.href;
selectedCategory.value = decodedId.replace('#', '')
if (href) {
const id = '#' + href.split('#')[1];
const decodedId = decodeURIComponent(id);
const heading = document.querySelector<HTMLAnchorElement>(decodedId)
heading?.focus()
selectedCategory.value = decodedId.replace('#', '');
const heading = document.querySelector<HTMLAnchorElement>(decodedId);
heading?.focus();
}
}
</script>
<template>
<ul :class="root ? 'root' : 'nested'">
<li v-for="{ children, link, title, iconCount } in headers">
<a
class="outline-link"
:href="link"
@click="onClick"
:title="title"
>
<a class="outline-link" :href="link" @click="onClick" :title="title">
<span>
{{ title }}
</span>
@@ -10,6 +10,7 @@ import { useRouter } from 'vitepress';
import IconInfo from './IconInfo.vue';
import Badge from '../base/Badge.vue';
import { computedAsync } from '@vueuse/core';
import { satisfies } from 'semver';
const props = defineProps<{
iconName: string
@@ -25,6 +26,12 @@ const icon = computedAsync<IconEntity | null>(async () => {
const emit = defineEmits(['close'])
const isOpen = computed(() => !!icon.value)
function releaseTagLink(version) {
const shouldAddV = satisfies(version, `<0.266.0`)
return `https://github.com/lucide-icons/lucide/releases/tag/${shouldAddV ? 'v' : ''}${version}`
}
function onClose() {
emit('close')
}
@@ -43,7 +50,7 @@ const Expand = createLucideIcon('Expand', expand)
<Badge
v-if="icon.createdRelease"
class="version"
:href="`https://github.com/lucide-icons/lucide/releases/tag/v${icon.createdRelease.version}`"
:href="releaseTagLink(icon.createdRelease.version)"
target="_blank"
rel="noreferrer noopener"
>v{{ icon.createdRelease.version }}</Badge>
@@ -1,93 +1,92 @@
<script setup lang="ts">
import { ref, computed, defineAsyncComponent } from 'vue'
import type { IconEntity, Category } from '../../types'
import useSearch from '../../composables/useSearch'
import InputSearch from '../base/InputSearch.vue'
import useSearchInput from '../../composables/useSearchInput'
import StickyBar from './StickyBar.vue'
import IconsCategory from './IconsCategory.vue'
import { useFetch } from '@vueuse/core'
import useFetchTags from '../../composables/useFetchTags'
import useFetchCategories from '../../composables/useFetchCategories'
import { ref, computed, defineAsyncComponent } from 'vue';
import type { IconEntity, Category } from '../../types';
import useSearch from '../../composables/useSearch';
import InputSearch from '../base/InputSearch.vue';
import useSearchInput from '../../composables/useSearchInput';
import StickyBar from './StickyBar.vue';
import IconsCategory from './IconsCategory.vue';
import { useFetch } from '@vueuse/core';
import useFetchTags from '../../composables/useFetchTags';
import useFetchCategories from '../../composables/useFetchCategories';
const props = defineProps<{
icons: IconEntity[]
categories: Category[]
iconCategories: Record<string, string[]>
}>()
icons: IconEntity[];
categories: Category[];
iconCategories: Record<string, string[]>;
}>();
const activeIconName = ref(null)
const { searchInput, searchQuery, searchQueryThrottled } = useSearchInput()
const activeIconName = ref(null);
const { searchInput, searchQuery, searchQueryDebounced } = useSearchInput();
const isSearching = computed(() => !!searchQuery.value)
const isSearching = computed(() => !!searchQuery.value);
function setActiveIconName(name: string) {
activeIconName.value = name
activeIconName.value = name;
}
const { execute: fetchTags, data: tags } = useFetchTags()
const { execute: fetchCategories, data: categoriesMap } = useFetchCategories()
const { execute: fetchTags, data: tags } = useFetchTags();
const { execute: fetchCategories, data: categoriesMap } = useFetchCategories();
const mappedIcons = computed(() => {
if(tags.value == null) {
return props.icons
if (tags.value == null) {
return props.icons;
}
return props.icons.map((icon) => {
const iconTags = tags.value[icon.name]
const iconCategories = categoriesMap.value?.[icon.name] ?? []
const iconTags = tags.value[icon.name];
const iconCategories = categoriesMap.value?.[icon.name] ?? [];
return {
...icon,
tags: iconTags,
categories: iconCategories,
}
})
})
};
});
});
const searchResults = useSearch(searchQuery, mappedIcons, [
{ name: 'name', weight: 2 },
{ name: 'tags', weight: 1 },
])
]);
const categories = computed(() => {
if( !props.categories?.length || !props.icons?.length ) return []
if (!props.categories?.length || !props.icons?.length) return [];
return props.categories.map(({ name, title }) => {
const categoryIcons = props.icons.filter((icon) => {
const iconCategories = props.iconCategories[icon.name]
return props.categories
.map(({ name, title }) => {
const categoryIcons = props.icons.filter((icon) => {
const iconCategories = props.iconCategories[icon.name];
return iconCategories?.includes(name)
return iconCategories?.includes(name);
});
const searchedCategoryIcons = isSearching
? categoryIcons.filter((icon) =>
searchResults.value.some((item) => item?.name === icon?.name)
)
: categoryIcons;
return {
title,
name,
icons: searchedCategoryIcons,
};
})
const searchedCategoryIcons = isSearching
? categoryIcons.filter(icon => searchResults.value.some((item) => item?.name === icon?.name))
: categoryIcons;
return {
title,
name,
icons: searchedCategoryIcons,
};
})
.filter(({ icons }) => icons.length)
})
.filter(({ icons }) => icons.length);
});
function onFocusSearchInput() {
if (tags.value == null) {
fetchTags()
fetchTags();
}
if (categoriesMap.value == null) {
fetchCategories()
fetchCategories();
}
}
const NoResults = defineAsyncComponent(() =>
import('./NoResults.vue')
)
const NoResults = defineAsyncComponent(() => import('./NoResults.vue'));
const IconDetailOverlay = defineAsyncComponent(() =>
import('./IconDetailOverlay.vue')
)
const IconDetailOverlay = defineAsyncComponent(() => import('./IconDetailOverlay.vue'));
</script>
<template>
@@ -100,11 +99,7 @@ const IconDetailOverlay = defineAsyncComponent(() =>
@focus="onFocusSearchInput"
/>
</StickyBar>
<NoResults
v-if="categories.length === 0"
:searchQuery="searchQuery"
@clear="searchQuery = ''"
/>
<NoResults v-if="categories.length === 0" :searchQuery="searchQuery" @clear="searchQuery = ''" />
<IconsCategory
v-for="category in categories"
:key="category.name"
@@ -1,21 +1,21 @@
<script setup lang="ts">
import { ref, computed, watch, defineAsyncComponent } from 'vue'
import type { IconEntity } from '../../types'
import { useMediaQuery, useOffsetPagination } from '@vueuse/core'
import IconGrid from './IconGrid.vue'
import InputSearch from '../base/InputSearch.vue'
import useSearch from '../../composables/useSearch'
import EndOfPage from '../base/EndOfPage.vue'
import useSearchInput from '../../composables/useSearchInput'
import StickyBar from './StickyBar.vue'
import useFetchTags from '../../composables/useFetchTags'
import useFetchCategories from '../../composables/useFetchCategories'
import { ref, computed, watch, defineAsyncComponent } from 'vue';
import type { IconEntity } from '../../types';
import { useMediaQuery, useOffsetPagination } from '@vueuse/core';
import IconGrid from './IconGrid.vue';
import InputSearch from '../base/InputSearch.vue';
import useSearch from '../../composables/useSearch';
import EndOfPage from '../base/EndOfPage.vue';
import useSearchInput from '../../composables/useSearchInput';
import StickyBar from './StickyBar.vue';
import useFetchTags from '../../composables/useFetchTags';
import useFetchCategories from '../../composables/useFetchCategories';
const props = defineProps<{
icons: IconEntity[]
}>()
icons: IconEntity[];
}>();
const activeIconName = ref(null)
const activeIconName = ref(null);
const isExtraLargeScreen = useMediaQuery('(min-width: 1440px)');
const isLargeScreen = useMediaQuery('(min-width: 1280px)');
@@ -23,84 +23,78 @@ const isMediumScreen = useMediaQuery('(min-width: 960px)');
const isSmallScreen = useMediaQuery('(min-width: 640px)');
const pageSize = computed(() => {
if(isExtraLargeScreen.value) {
if (isExtraLargeScreen.value) {
return 16 * 20;
}
if(isLargeScreen.value) {
if (isLargeScreen.value) {
return 16 * 12;
}
if(isMediumScreen.value) {
if (isMediumScreen.value) {
return 13 * 12;
}
if(isSmallScreen.value) {
if (isSmallScreen.value) {
return 10 * 10;
}
return 10 * 5;
})
});
const { execute: fetchTags, data: tags } = useFetchTags()
const { execute: fetchCategories, data: categories } = useFetchCategories()
const { execute: fetchTags, data: tags } = useFetchTags();
const { execute: fetchCategories, data: categories } = useFetchCategories();
const mappedIcons = computed(() => {
if(tags.value == null) {
return props.icons
if (tags.value == null) {
return props.icons;
}
return props.icons.map((icon) => {
const iconTags = tags.value[icon.name]
const iconCategories = categories.value?.[icon.name] ?? []
const iconTags = tags.value[icon.name];
const iconCategories = categories.value?.[icon.name] ?? [];
return {
...icon,
tags: iconTags,
categories: iconCategories,
}
})
})
};
});
});
const { searchInput, searchQuery, searchQueryThrottled } = useSearchInput()
const searchResults = useSearch(searchQueryThrottled, mappedIcons, [
const { searchInput, searchQuery, searchQueryDebounced } = useSearchInput();
const searchResults = useSearch(searchQueryDebounced, mappedIcons, [
{ name: 'name', weight: 3 },
{ name: 'tags', weight: 2 },
{ name: 'categories', weight: 1 },
])
const { next, currentPage } = useOffsetPagination( { pageSize })
]);
const { next, currentPage } = useOffsetPagination({ pageSize });
const paginatedIcons = computed(() => {
const end = pageSize.value * currentPage.value
const end = pageSize.value * currentPage.value;
return searchResults.value.slice(0, end)
})
return searchResults.value.slice(0, end);
});
function setActiveIconName(name: string) {
activeIconName.value = name
activeIconName.value = name;
}
watch(searchQueryThrottled, (searchString) => {
currentPage.value = 1
})
watch(searchQueryDebounced, (searchString) => {
currentPage.value = 1;
});
function onFocusSearchInput() {
if (tags.value == null) {
fetchTags()
fetchTags();
}
if (categories.value == null) {
fetchCategories()
fetchCategories();
}
}
const NoResults = defineAsyncComponent(() =>
import('./NoResults.vue')
)
const IconDetailOverlay = defineAsyncComponent(() =>
import('./IconDetailOverlay.vue')
)
const NoResults = defineAsyncComponent(() => import('./NoResults.vue'));
const IconDetailOverlay = defineAsyncComponent(() => import('./IconDetailOverlay.vue'));
</script>
<template>
@@ -124,7 +118,7 @@ const IconDetailOverlay = defineAsyncComponent(() =>
:icons="paginatedIcons"
@setActiveIcon="setActiveIconName"
/>
<EndOfPage @end-of-page="next" class="bottom-page"/>
<EndOfPage @end-of-page="next" class="bottom-page" />
<IconDetailOverlay
v-if="activeIconName != null"
:iconName="activeIconName"
@@ -1,24 +1,30 @@
<script setup lang="ts">
import {data} from './PackageList.data'
import GridSection from '../base/GridSection.vue'
import PackageListItem from "./PackageListItem.vue";</script>
<template>
<section class="package-group">
<h1 class="name">Packages</h1>
<div class="grid package-list" ref="container">
<div v-for="packageData in data.packages" class="item">
<PackageListItem :packageData="packageData"/>
</div>
</div>
</section>
<section class="package-group">
<h2 class="name">Third-party packages</h2>
<div class="grid package-list" ref="container">
<div v-for="packageData in data.thirdPartyPackages" class="item">
<PackageListItem :packageData="packageData"/>
</div>
</div>
</section>
<GridSection
title="Packages"
:headingLevel="1"
class="package-group"
>
<PackageListItem
v-for="packageData in data.packages"
:packageData="packageData"
/>
</GridSection>
<GridSection
title="Third-party packages"
:headingLevel="2"
class="package-group"
>
<PackageListItem
v-for="packageData in data.thirdPartyPackages"
:packageData="packageData"
/>
</GridSection>
</template>
<style scoped>
@@ -26,7 +32,7 @@ import PackageListItem from "./PackageListItem.vue";</script>
font-size: 32px;
font-weight: bold;
text-align: center;
margin-bottom: 24px;
margin-bottom: 32px;
}
.package-group {
@@ -2,6 +2,7 @@
import { useRouter } from 'vitepress';
import {PackageItem} from "../../types";
import VPButton from 'vitepress/dist/client/theme-default/components/VPButton.vue';
import Card from '../base/Card.vue'
const { go } = useRouter()
const props = defineProps<{
@@ -10,48 +11,42 @@ const props = defineProps<{
</script>
<template>
<article class="package">
<header class="package-header">
<div class="package-icon-well">
<img :src="packageData.icon" alt="" class="package-icon" :class="{[packageData.iconClass]: true, light: packageData.iconDark}" />
<img v-if="packageData.iconDark" :src="packageData.iconDark" alt="" class="package-icon dark" :class="packageData.iconClass" />
<div>
<Card class="package">
<header class="package-header">
<div class="package-icon-well">
<img :src="packageData.icon" alt="" class="package-icon" :class="{[packageData.iconClass]: true, light: packageData.iconDark}" />
<img v-if="packageData.iconDark" :src="packageData.iconDark" alt="" class="package-icon dark" :class="packageData.iconClass" />
</div>
<div class="package-title">
<h2 class="title">{{ props.packageData.name }}</h2>
<a v-for="shield in props.packageData.shields" :href="shield.href" class="package-shield" rel="noreferrer noopener">
<img :src="shield.src" :alt="shield.href" />
</a>
</div>
</header>
<div class="package-details">
{{ packageData.description }}
</div>
<div class="package-title">
<h2 class="title">{{ props.packageData.name }}</h2>
<a v-for="shield in props.packageData.shields" :href="shield.href" class="package-shield" rel="noreferrer noopener">
<img :src="shield.src" :alt="shield.href" />
</a>
</div>
</header>
<div class="package-details">
{{ packageData.description }}
</div>
<footer class="package-footer">
<VPButton
:href="packageData.documentation"
text="Guide"
theme="brand"
@click="go(packageData.documentation)"
/>
<VPButton
:href="packageData.source"
text="Source"
theme="alt"
@click="go(packageData.source)"
/>
</footer>
</article>
<footer class="package-footer">
<VPButton
:href="packageData.documentation"
text="Guide"
theme="brand"
@click="go(packageData.documentation)"
/>
<VPButton
:href="packageData.source"
text="Source"
theme="alt"
@click="go(packageData.source)"
/>
</footer>
</Card>
</div>
</template>
<style scoped>
.package {
border: 1px solid var(--vp-c-bg-soft);
border-radius: 12px;
background-color: var(--vp-c-bg-soft);
display: flex;
flex-direction: column;
padding: 24px;
}
.package {
display: flex;
flex-direction: column;
@@ -0,0 +1,72 @@
<script setup lang="ts">
import companies from '../../../data/companiesData.json'
import componentLibraries from '../../../data/componentLibrariesData.json'
import GridSection from '../base/GridSection.vue'
import ShowcaseListItem from "./ShowcaseListItem.vue";
</script>
<template>
<GridSection
title="Used by"
:headingLevel="1"
class="package-group"
>
<ShowcaseListItem
v-for="company in companies"
:showcaseItem="company"
/>
</GridSection>
<GridSection
title="Used in"
:headingLevel="1"
class="package-group"
>
<ShowcaseListItem
v-for="componentLibrary in componentLibraries"
:showcaseItem="componentLibrary"
/>
</GridSection>
</template>
<style scoped>
.name {
font-size: 32px;
font-weight: bold;
text-align: center;
margin-bottom: 32px;
}
.package-group {
margin-bottom: 96px;
}
.grid {
display: flex;
flex-wrap: wrap;
align-items: stretch;
justify-content: center;
align-content: space-evenly;
box-sizing: border-box;
margin: -8px;
}
.grid > * {
flex-basis: 100%;
box-sizing: border-box;
padding: 8px;
}
@media (min-width: 960px) {
.grid > * {
flex-basis: 50%;
}
}
@media (min-width: 1280px) {
.grid > * {
flex-basis: 33.33%;
}
}
</style>
@@ -0,0 +1,52 @@
<script setup lang="ts">
import { useRouter } from 'vitepress';
import { ShowcaseItem } from "../../types";
import Card from '../base/Card.vue'
const { go } = useRouter()
defineProps<{
showcaseItem: ShowcaseItem,
}>()
</script>
<template>
<div>
<Card
class="company"
:href="showcaseItem.url"
:aria-label="showcaseItem.name"
>
<img
:src="showcaseItem.image.light"
class="logo light"
:alt="`${showcaseItem.name} logo`"
/>
<img
:src="showcaseItem.image.dark"
class="logo dark"
:alt="`${showcaseItem.name} logo`"
/>
</Card>
</div>
</template>
<style scoped>
.company {
display: flex;
height: 100%;
padding: 48px 0;
}
.logo {
height:64px;
width: 240px;
margin: auto;
}
html.dark .logo.dark {
display: none;
}
html:not(.dark) .logo.light {
display: none;
}
</style>
@@ -1,43 +1,40 @@
import { refThrottled } from '@vueuse/core';
import { useDebounce } from '@vueuse/core';
import { nextTick, onMounted, ref, watch } from 'vue';
const useSearchInput = () => {
const searchInput = ref()
const searchInput = ref();
const searchQuery = ref(
typeof window === 'undefined'
? ''
: (
new URLSearchParams(window.location.search).get('search')
|| ''
)
)
const searchQueryThrottled = refThrottled(searchQuery, 400)
? ''
: new URLSearchParams(window.location.search).get('search') || ''
);
const searchQueryDebounced = useDebounce(searchQuery, 250);
watch(searchQueryThrottled, (searchString) => {
watch(searchQueryDebounced, (searchString) => {
const newUrl = new URL(window.location.href);
if(searchString === '') {
if (searchString === '') {
newUrl.searchParams.delete('search');
} else {
newUrl.searchParams.set('search', searchString);
}
nextTick(() => {
window.history.replaceState({}, '', newUrl)
})
})
window.history.replaceState({}, '', newUrl);
});
});
onMounted(() => {
const searchParams = new URLSearchParams(window.location.search);
if(searchParams.has('focus')) {
searchInput.value.focus()
if (searchParams.has('focus')) {
searchInput.value.focus();
}
})
});
return {
searchInput,
searchQuery,
searchQueryThrottled
searchQueryDebounced,
};
};
+34
View File
@@ -0,0 +1,34 @@
{
"colors": {
"surface1": "var(--vp-code-block-bg)",
"surface2": "var(--vp-code-block-bg)",
"surface3": "var(--vp-code-line-highlight-color)",
"clickable": "var(--vp-c-text-2)",
"base": "#323232",
"disabled": "#C5C5C5",
"hover": "var(--vp-c-brand)",
"accent": "var(--vp-c-brand)",
"error": "var(--vp-c-red)",
"errorSurface": "#ffeceb"
},
"syntax": {
"plain": "var(--vp-code-editor-plain)",
"comment": {
"color": "var(--vp-code-editor-comment)",
"fontStyle": "italic"
},
"keyword": "var(--vp-code-editor-keyword)",
"tag": "var(--vp-code-editor-tag)",
"punctuation": "var(--vp-code-editor-punctuation)",
"definition": "var(--vp-code-editor-definition)",
"property": "var(--vp-code-editor-property)",
"static": "var(--vp-code-editor-static)",
"string": "var(--vp-code-editor-string)"
},
"font": {
"body": "var(--vp-font-family-base)",
"mono": "var(--vp-font-family-mono)",
"size": "var(--vp-code-font-size)",
"lineHeight": "var(--vp-code-line-height)"
}
}
+75
View File
@@ -5,13 +5,39 @@
--vp-c-brand-dark: #DC5A5A;
--vp-c-brand-darker: #C45050;
--vp-c-brand-1: #F67373;
--vp-c-brand-2: #FF7070;
--vp-c-brand-3: #F56565;
--vp-c-brand-4: #DC5A5A;
--vp-c-brand-5: #C45050;
--vp-c-bg-alt-up: #fff;
--vp-c-bg-alt-down: #fff;
--vp-code-editor-plain: #24292E;
--vp-code-editor-comment: #6A737D;
--vp-code-editor-keyword: #D73A49;
--vp-code-editor-tag: #22863A;
--vp-code-editor-punctuation: #24292E;
--vp-code-editor-definition: #6F42C1;
--vp-code-editor-property: #005CC5;
--vp-code-editor-static: #F78C6C;
--vp-code-editor-string: #032F62;
}
.dark {
--vp-c-bg-alt-up: #1B1B1D;
--vp-c-bg-alt-down: #0F0F10;
--vp-code-editor-plain: #E1E4E8;
--vp-code-editor-comment: #6A737D;
--vp-code-editor-keyword: #F97583;
--vp-code-editor-tag: #85E89D;
--vp-code-editor-punctuation: #9ECBFF;
--vp-code-editor-definition: #B392F0;
--vp-code-editor-property: #79B8FF;
--vp-code-editor-static: #F78C6C;
--vp-code-editor-string: #9ECBFF;
}
.VPNavBarTitle .logo {
@@ -126,3 +152,52 @@
html:has(* .outline-link:target) {
scroll-behavior: smooth;
} */
.sp-wrapper .sp-layout {
border-radius: 8px;
}
.sp-wrapper .sp-tabs-scrollable-container {
border-radius: 8px 8px 0 0;
position: relative;
box-shadow: inset 0 -1px var(--vp-code-tab-divider);
margin-bottom: 0px;
margin-top: -1px;
height: 48px;
padding-bottom: 1px;
}
.sp-wrapper .sp-preview-container {
background-color: transparent;
}
.sp-wrapper .sp-tabs .sp-tab-button {
padding: 0 12px;
line-height: 48px;
height: 48px;
font-size: 14px;
font-weight: 500;
position: relative;
/* box-sizing: content-box; */
}
.sp-wrapper .sp-tabs .sp-tab-button:after {
position: absolute;
right: 8px;
left: 8px;
bottom: 0px;
z-index: 1;
height: 1px;
content: '';
background-color: transparent;
transition: background-color 0.25s;
}
.sp-wrapper .sp-tabs .sp-tab-button[data-active="true"] {
color: var(--vp-code-tab-active-text-color);
}
.sp-wrapper .sp-tabs .sp-tab-button[data-active="true"]:after {
background-color: var(--vp-code-tab-active-bar-color);
}
+11
View File
@@ -44,3 +44,14 @@ export interface Release {
version: string
date: string
}
interface ShowcaseItemImage {
light: string
dark: string
}
export interface ShowcaseItem {
name: string
url: string
image: ShowcaseItemImage
}
+4
View File
@@ -0,0 +1,4 @@
# Accessibility
<!-- Description how you should use svg icons keeping web accessible -->
<!-- See @JanTrichter comment about some information to write this: https://github.com/lucide-icons/lucide/pull/1521#discussion_r1332141390 -->
+13
View File
@@ -0,0 +1,13 @@
# Filled Icons
Fills are officially not supported.
However, all SVG properties are available on all icons.
Fill can still be used and will work fine on certain icons.
Example with stars:
<!-- Code Example with stars -->
## Will Lucide have fills in the future?
This feature is requested several times and discussion is happening at: [#458](https://github.com/lucide-icons/lucide/discussions/458).
+52
View File
@@ -0,0 +1,52 @@
<script setup>
import { Sandpack } from 'sandpack-vue3'
import sandpackTheme from '../../.vitepress/theme/sandpackTheme.json'
import buttonExampleFiles from './examples/button-example/files.ts'
import iconColorExampleFiles from './examples/color-icon/files.ts'
</script>
# Color
By default, all icons have the color value: `currentColor`. This keyword uses the element's computed text `color` value to represent the icon color.
Read more about [ `currentColor` on MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#currentcolor_keyword).
## Adjust the color using the `color` prop
The color can be adjusted by passing the color prop to the element.
<Sandpack
template="react"
:theme="sandpackTheme"
:files="iconColorExampleFiles"
:customSetup='{
dependencies: {
"lucide-react": "latest"
}
}'
:options="{
editorHeight: 295,
editorWidthPercentage: 60,
}"
/>
## Using parent elements text color value
Because the color of lucide icons uses `currentColor`, the color of the icon depends on the computed `color` of the element, or it inherits it from its parent.
For example, if a parent element's color value is `#fff` and one of the children is a lucide icon, the color of the icon will be rendered as `#fff`. This is browser native behavior.
<Sandpack
template="react"
:theme="sandpackTheme"
:files="buttonExampleFiles"
:customSetup='{
dependencies: {
"lucide-react": "latest"
}
}'
:options="{
editorHeight: 320,
editorWidthPercentage: 60,
}"
/>
@@ -0,0 +1,14 @@
import { RollerCoaster } from "lucide-react";
function App() {
return (
<div className="app">
<RollerCoaster
size={96}
absoluteStrokeWidth={true}
/>
</div>
);
}
export default App;
@@ -0,0 +1,15 @@
import App from './App.js?raw'
import styles from '../styles.css?raw'
const files = {
'App.js': {
code: App,
active: true,
},
'styles.css': {
code:styles,
hidden: true
},
}
export default files
@@ -0,0 +1,5 @@
import Button from "./Button";
export default function App() {
return <Button />;
}
@@ -0,0 +1,12 @@
import { ThumbsUp } from "lucide-react";
function LikeButton() {
return (
<button style={{ color: "#fff" }}>
<ThumbsUp />
Like
</button>
);
}
export default LikeButton;
@@ -0,0 +1,21 @@
import App from './App.js?raw'
import Button from './Button.jsx?raw'
import styles from '../styles.css?raw'
const files = {
'App.js': {
code: App,
hidden: true
},
'Button.jsx': {
code: Button,
active: true,
readOnly: false,
},
'styles.css': {
code:styles,
hidden: true
},
}
export default files
@@ -0,0 +1,11 @@
import { Smile } from "lucide-react";
function App() {
return (
<div className="app">
<Smile color="#3e9392" />
</div>
);
}
export default App;
@@ -0,0 +1,15 @@
import App from './App.js?raw'
import styles from '../styles.css?raw'
const files = {
'App.js': {
code: App,
active: true,
},
'styles.css': {
code:styles,
hidden: true
},
}
export default files
@@ -0,0 +1,12 @@
import { Beer } from "lucide-react";
import "./icon.css";
function App() {
return (
<div className="app">
<Beer className="my-beer-icon" />
</div>
);
}
export default App;
@@ -0,0 +1,21 @@
import App from './App.js?raw'
import styles from '../styles.css?raw'
import IconCss from './icon.css?raw'
const files = {
'icon.css': {
code: IconCss,
readOnly: false,
active: true,
},
'App.js': {
code: App,
},
'styles.css': {
code:styles,
hidden: true
},
}
export default files
@@ -0,0 +1,5 @@
.my-beer-icon {
/* Change this! */
width: 64px;
height: 64px;
}
@@ -0,0 +1,11 @@
import { Landmark } from "lucide-react";
function App() {
return (
<div className="app">
<Landmark size={64} />
</div>
);
}
export default App;
@@ -0,0 +1,15 @@
import App from './App.js?raw'
import styles from '../styles.css?raw'
const files = {
'App.js': {
code: App,
active: true,
},
'styles.css': {
code:styles,
hidden: true
},
}
export default files
@@ -0,0 +1,13 @@
import { Star } from "lucide-react";
import "./icon.css";
function App() {
return (
<div className="text-wrapper">
<Star class="my-icon" />
<div>Yes</div>
</div>
);
}
export default App;
@@ -0,0 +1,21 @@
import App from './App.js?raw'
import styles from '../styles.css?raw'
import IconCss from './icon.css?raw'
const files = {
'icon.css': {
code: IconCss,
readOnly: false,
active: true,
},
'App.js': {
code: App,
},
'styles.css': {
code: styles,
hidden: true
},
}
export default files
@@ -0,0 +1,15 @@
.my-icon {
/* Icon size will relative to font-size of .text-wrapper */
width: 1em;
height: 1em;
}
.text-wrapper {
/* Change this! */
font-size: 96px;
/* layout stuff */
display: flex;
gap: 0.25em;
align-items: center;
}
@@ -0,0 +1,11 @@
import { PartyPopper } from "lucide-react";
function App() {
return (
<div>
<PartyPopper className="w-24 h-24" />
</div>
);
}
export default App;
@@ -0,0 +1,15 @@
import App from './App.js?raw'
import styles from '../styles.css?raw'
const files = {
'App.js': {
code: App,
active: true
},
'styles.css': {
code:styles,
hidden: true
},
}
export default files
@@ -0,0 +1,11 @@
import { FolderLock } from "lucide-react";
function App() {
return (
<div className="app">
<FolderLock strokeWidth={1} />
</div>
);
}
export default App;
@@ -0,0 +1,15 @@
import App from './App.js?raw'
import styles from '../styles.css?raw'
const files = {
'App.js': {
code: App,
active: true,
},
'styles.css': {
code:styles,
hidden: true
},
}
export default files
+50
View File
@@ -0,0 +1,50 @@
body {
font-family: sans-serif;
-webkit-font-smoothing: auto;
-moz-font-smoothing: auto;
-moz-osx-font-smoothing: grayscale;
font-smoothing: auto;
text-rendering: optimizeLegibility;
font-smooth: always;
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none;
background: #202127;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
margin: 0;
color: #fff;
}
html,
body {
height: 100%;
min-height: 100%;
}
button {
display: flex;
align-items: center;
font-size: 18px;
padding: 10px 20px;
line-height: 24px;
gap: 8px;
border-radius: 24px;
outline: none;
border: none;
background: #111;
transition: all 0.3s ease;
}
button:hover {
background: #F56565;
}
.app {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 32px;
}
+87
View File
@@ -0,0 +1,87 @@
<script setup>
import { Sandpack } from 'sandpack-vue3'
import sandpackTheme from '../../.vitepress/theme/sandpackTheme.json'
import sizeIconExample from './examples/size-icon-example/files.ts'
import sizeIconCssExample from './examples/size-icon-css-example/files.ts'
import sizeIconFontExample from './examples/size-icon-font-example/files.ts'
import sizeIconTailwind from './examples/size-icon-tailwind-example/files.ts'
</script>
# Sizing
By default, the size of all icons is `24px` by `24px`. The size is adjustable using the `size` prop and CSS.
## Adjusting the icon size using the `size` prop
<Sandpack
template="react"
:theme="sandpackTheme"
:files="sizeIconExample"
:customSetup='{
dependencies: {
"lucide-react": "latest"
}
}'
:options="{
editorHeight: 300,
editorWidthPercentage: 60,
}"
/>
## Adjusting the icon size via CSS
The CSS properties `width` and `height` can be used to adjust the icon size.
<Sandpack
template="react"
:theme="sandpackTheme"
:files="sizeIconCssExample"
:customSetup='{
dependencies: {
"lucide-react": "latest"
}
}'
:options="{
editorHeight: 300,
}"
/>
### Dynamically change the icon size based on the font size
It is possible to resize icons based on font size. This can be achieved using the `em` unit. See this [MDN article](https://developer.mozilla.org/en-US/docs/Web/CSS/font-size#ems) for more information on the `em` unit.
<Sandpack
template="react"
:theme="sandpackTheme"
:files="sizeIconFontExample"
:customSetup='{
dependencies: {
"lucide-react": "latest"
}
}'
:options="{
editorHeight: 300,
}"
/>
### Resizing with Tailwind
`h-*` and `w-*` utilities can be used to adjust the size of the icon.
<Sandpack
template="react"
:theme="sandpackTheme"
:files="sizeIconTailwind"
:customSetup='{
dependencies: {
"lucide-react": "latest",
}
}'
:options="{
externalResources: ['https://cdn.tailwindcss.com'],
editorHeight: 300,
editorWidthPercentage: 60,
}"
/>
<!-- Code Example -->
+60
View File
@@ -0,0 +1,60 @@
<script setup>
import { Sandpack } from 'sandpack-vue3'
import sandpackTheme from '../../.vitepress/theme/sandpackTheme.json'
import strokeWidth from './examples/stroke-width-icon/files.ts'
import absoluteStrokeWidth from './examples/absolute-stroke-width-icon/files.ts'
</script>
# Stroke width
All icons are designed with SVG elements using strokes.
These have a default stroke width of `2px`.
The `strokeWidth` can be adjusted to create a different look of the icons.
## Adjusting stroke width with `strokeWidth` prop
<Sandpack
template="react"
:theme="sandpackTheme"
:files="strokeWidth"
:customSetup='{
dependencies: {
"lucide-react": "latest"
}
}'
:options="{
editorHeight: 300,
editorWidthPercentage: 60,
}"
/>
## Absolute stroke width
When adjusting the `size` prop the size of the stroke width will be relative to the size of the icon, this is the default SVG behavior. The `absoluteStrokeWidth` prop is introduced to adjust this behavior to make the stroke width constant no matter the size of the icon.
This means that when `absoluteStrokeWidth` is enabled and the `size` of the icons is set to `48px` the `strokeWidth` will still be `2px` on the screen.
Note `2px` is the default stroke width for a Lucide icon, this can be adjusted to all sizes.
![Absolute stroke width comparison](../../images/absolute-stroke-width-compare.png?raw=true "Absolute stroke width comparison")
### Adjusting stroke width with `absoluteStrokeWidth` prop
Setting `absoluteStrokeWidth` to `true` will make the stroke width absolute.
<Sandpack
template="react"
:theme="sandpackTheme"
:files="absoluteStrokeWidth"
:customSetup='{
dependencies: {
"lucide-react": "latest"
}
}'
:options="{
editorHeight: 320,
editorWidthPercentage: 60,
}"
/>
+1 -1
View File
@@ -20,7 +20,7 @@ The Illustrator template is created following guidelines from the [Icon Design G
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").
4. Before you export the file as an SVG make sure to check that you followed the guidelines and remove all unnecessary 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:
+1
View File
@@ -0,0 +1 @@
# How to use icons
-8
View File
@@ -1,8 +0,0 @@
# 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);
```
+15 -3
View File
@@ -99,8 +99,6 @@ export default App;
#### With Dynamic Imports
> :warning: This is experimental and only works with bundlers that support dynamic imports.
Lucide react exports a dynamic import map `dynamicIconImports`, which is useful for applications that want to show icons dynamically by icon name. For example, when using a content management system with where icon names are stored in a database.
When using client side rendering, it will fetch the icon component when it's needed. This will reduce the initial bundle size.
@@ -134,7 +132,21 @@ export default Icon
##### NextJS Example
In NextJS [the dynamic function](https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading#nextdynamic) can be used to load the icon component dynamically.
In NextJS, [the dynamic function](https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading#nextdynamic) can be used to dynamically load the icon component.
To make dynamic imports work with NextJS, you need to add `lucide-react` to the [`transpilePackages`](https://nextjs.org/docs/app/api-reference/next-config-js/transpilePackages) option in your `next.config.js` like this:
```js
/** @type {import('next').NextConfig} */
const nextConfig = {
transpilePackages: ['lucide-react'] // add this
}
module.exports = nextConfig
```
You can then start using it:
```tsx
import dynamic from 'next/dynamic'
+9 -2
View File
@@ -21,6 +21,7 @@ import Label from '../.vitepress/theme/components/base/Label.vue'
import VPButton from 'vitepress/dist/client/theme-default/components/VPButton.vue';
import { data } from './codeExamples.data'
import { camelCase, startCase } from 'lodash-es'
import { satisfies } from 'semver'
const { params } = useData()
@@ -35,6 +36,12 @@ const codeExample = computed(() => data.codeExamples?.map(
}
).join('') ?? []
)
function releaseTagLink(version) {
const shouldAddV = satisfies(version, `<0.266.0`)
return `https://github.com/lucide-icons/lucide/releases/tag/${shouldAddV ? 'v' : ''}${version}`
}
</script>
<div :class="$style.layout">
@@ -61,7 +68,7 @@ const codeExample = computed(() => data.codeExamples?.map(
>
<Label>Created:</Label>
<Badge
:href="`https://github.com/lucide-icons/lucide/releases/tag/v${params.createdRelease.version}`"
:href="releaseTagLink(params.createdRelease.version)"
target="_blank"
rel="noreferrer noopener"
>
@@ -74,7 +81,7 @@ const codeExample = computed(() => data.codeExamples?.map(
>
<Label>Last changed:</Label>
<Badge
:href="`https://github.com/lucide-icons/lucide/releases/tag/v${params.changedRelease.version}`"
:href="releaseTagLink(params.changedRelease.version)"
target="_blank"
rel="noreferrer noopener"
>
Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

+3 -1
View File
@@ -25,11 +25,12 @@
"license": "ISC",
"devDependencies": {
"@rollup/plugin-replace": "^5.0.2",
"@types/semver": "^7.5.3",
"h3": "^1.8.0",
"nitropack": "npm:nitropack-edge@latest",
"node-fetch": "2",
"rollup-plugin-copy": "^3.4.0",
"vitepress": "1.0.0-rc.4"
"vitepress": "1.0.0-rc.10"
},
"dependencies": {
"@floating-ui/vue": "^1.0.1",
@@ -47,6 +48,7 @@
"lucide-vue-next": "workspace:*",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"sandpack-vue3": "^3.1.6",
"semver": "^7.5.2",
"shiki": "^0.14.2",
"shiki-processor": "^0.1.3",
-1
View File
@@ -2,7 +2,6 @@
layout: page
outline: 2
outlineTitle: Packages
sidebar: true
---
<script setup>
import PageContainer from '.vitepress/theme/components/PageContainer.vue'
+28
View File
@@ -0,0 +1,28 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="10 -10 304 120">
<g clip-path="url(#a)">
<g clip-path="url(#b)">
<path fill="url(#c)" d="M72 0H28A28 28 0 0 0 0 28v44a28 28 0 0 0 28 28h44a28 28 0 0 0 28-28V28A28 28 0 0 0 72 0Z"/>
<path stroke="#161616" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" d="m47.81 54.34 26.63-6.66-19.73-19.1-26.63 6.67 19.73 19.1Z"/>
<path stroke="#161616" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" d="m47.81 54.34 18.23-4.56c.67 5.86-.29 11.8-2.76 17.15a31.87 31.87 0 0 0-19.65 3.01 31.87 31.87 0 0 0-15.5-12.43 32.2 32.2 0 0 1 6.18-16.23l13.5 13.06Z"/>
<path stroke="#161616" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" d="m33.37 67.04 5.17-19.32 11.84-2.96m-2.57 9.58 26.63-6.66-19.73-19.1-26.63 6.67 19.73 19.1Zm0 0 18.23-4.56c.67 5.86-.29 11.8-2.76 17.15a31.87 31.87 0 0 0-19.65 3.01 31.87 31.87 0 0 0-15.5-12.43 32.2 32.2 0 0 1 6.18-16.23l13.5 13.06Z"/>
</g>
<path fill="#161616" d="M281.5 67.51c-2.63 0-4.9-.54-6.8-1.64a11.08 11.08 0 0 1-4.39-4.67 15.64 15.64 0 0 1-1.53-7.14c0-2.7.51-5.05 1.53-7.09a11.6 11.6 0 0 1 4.33-4.77 12.14 12.14 0 0 1 6.53-1.72c1.62 0 3.14.26 4.57.78 1.44.51 2.72 1.3 3.82 2.39a11.18 11.18 0 0 1 2.62 4.12c.64 1.66.96 3.64.96 5.93v1.9h-21.46v-4.16h15.54a6.63 6.63 0 0 0-.76-3.16 5.58 5.58 0 0 0-2.1-2.2 5.9 5.9 0 0 0-3.1-.8c-1.26 0-2.37.31-3.33.92-.95.6-1.7 1.4-2.23 2.4a6.88 6.88 0 0 0-.8 3.21v3.63c0 1.53.28 2.83.83 3.92a5.96 5.96 0 0 0 2.34 2.5c1 .56 2.17.84 3.51.84.9 0 1.71-.12 2.44-.37a5.4 5.4 0 0 0 1.89-1.14c.53-.5.94-1.12 1.21-1.86l5.76.65a9 9 0 0 1-2.08 3.99c-1 1.12-2.3 2-3.88 2.62-1.58.61-3.39.92-5.42.92Z"/>
<path fill="#161616" d="M263.56 32.1V67h-6.17V32.1h6.17Z"/>
<path fill="#161616" d="M236.87 67.46a9.9 9.9 0 0 1-5.52-1.58 10.77 10.77 0 0 1-3.85-4.6 17.18 17.18 0 0 1-1.42-7.34c0-2.9.48-5.36 1.43-7.36a10.6 10.6 0 0 1 3.9-4.55 10.03 10.03 0 0 1 5.48-1.55c1.53 0 2.8.26 3.78.78a7.13 7.13 0 0 1 2.35 1.86c.58.72 1.03 1.4 1.35 2.03h.26V32.09h6.18V67h-6.06v-4.13h-.38c-.32.64-.78 1.32-1.38 2.03a7.6 7.6 0 0 1-6.12 2.56Zm1.72-5.06c1.3 0 2.42-.35 3.34-1.06a6.6 6.6 0 0 0 2.1-2.98c.48-1.27.72-2.76.72-4.45 0-1.7-.24-3.17-.72-4.42a6.28 6.28 0 0 0-2.08-2.91 5.38 5.38 0 0 0-3.36-1.04c-1.37 0-2.52.36-3.44 1.07a6.5 6.5 0 0 0-2.08 2.97c-.47 1.26-.7 2.7-.7 4.33 0 1.64.23 3.1.7 4.38a6.84 6.84 0 0 0 2.1 3.02 5.4 5.4 0 0 0 3.42 1.09Z"/>
<path fill="#161616" d="M209.37 67.51c-2.56 0-4.77-.56-6.65-1.69a11.46 11.46 0 0 1-4.36-4.72 15.52 15.52 0 0 1-1.53-7.09c0-2.7.5-5.07 1.53-7.1a11.43 11.43 0 0 1 4.36-4.75 12.68 12.68 0 0 1 6.65-1.68c2.56 0 4.78.56 6.65 1.68a11.32 11.32 0 0 1 4.35 4.74 15.47 15.47 0 0 1 1.55 7.11c0 2.7-.52 5.07-1.55 7.1a11.34 11.34 0 0 1-4.35 4.71 12.68 12.68 0 0 1-6.65 1.7Zm.04-4.94c1.38 0 2.54-.38 3.47-1.14a6.89 6.89 0 0 0 2.08-3.1c.47-1.3.7-2.74.7-4.34 0-1.6-.23-3.05-.7-4.34a6.88 6.88 0 0 0-2.08-3.12 5.27 5.27 0 0 0-3.47-1.16c-1.42 0-2.6.39-3.55 1.16a7 7 0 0 0-2.1 3.12c-.45 1.3-.68 2.74-.68 4.34 0 1.6.23 3.04.68 4.33a7 7 0 0 0 2.1 3.1 5.46 5.46 0 0 0 3.55 1.15Z"/>
<path fill="#161616" d="M180.17 67.51c-2.56 0-4.77-.56-6.65-1.69a11.46 11.46 0 0 1-4.36-4.72 15.52 15.52 0 0 1-1.54-7.09c0-2.7.51-5.07 1.54-7.1a11.43 11.43 0 0 1 4.36-4.75 12.68 12.68 0 0 1 6.65-1.68c2.56 0 4.77.56 6.65 1.68a11.32 11.32 0 0 1 4.34 4.74 15.49 15.49 0 0 1 1.55 7.11c0 2.7-.51 5.07-1.55 7.1a11.34 11.34 0 0 1-4.34 4.71 12.68 12.68 0 0 1-6.65 1.7Zm.03-4.94c1.39 0 2.55-.38 3.48-1.14a6.89 6.89 0 0 0 2.08-3.1c.47-1.3.7-2.74.7-4.34 0-1.6-.23-3.05-.7-4.34a6.88 6.88 0 0 0-2.08-3.12 5.26 5.26 0 0 0-3.48-1.16c-1.42 0-2.6.39-3.54 1.16a7 7 0 0 0-2.1 3.12c-.45 1.3-.68 2.74-.68 4.34 0 1.6.23 3.04.68 4.33a7 7 0 0 0 2.1 3.1 5.46 5.46 0 0 0 3.54 1.15Z"/>
<path fill="#161616" d="M162.13 32.1V67h-5.62l-16.45-23.78h-.3V67h-6.32V32.1h5.66l16.43 23.79h.31v-23.8h6.3Z"/>
</g>
<defs>
<clipPath id="a">
<path fill="#161616" d="M0 0h293.14v100H0z"/>
</clipPath>
<clipPath id="b">
<path fill="#161616" d="M0 0h100v100H0z"/>
</clipPath>
<linearGradient id="c" x1="0" x2="100" y1="50" y2="50" gradientUnits="userSpaceOnUse">
<stop stop-color="#F77062"/>
<stop offset="1" stop-color="#FE5196"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

@@ -0,0 +1,28 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="10 -10 304 120">
<g clip-path="url(#a)">
<g clip-path="url(#b)">
<path fill="url(#c)" d="M72 0H28A28 28 0 0 0 0 28v44a28 28 0 0 0 28 28h44a28 28 0 0 0 28-28V28A28 28 0 0 0 72 0Z"/>
<path stroke="#161616" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" d="m47.81 54.34 26.63-6.66-19.73-19.1-26.63 6.67 19.73 19.1Z"/>
<path stroke="#161616" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" d="m47.81 54.34 18.23-4.56c.67 5.86-.29 11.8-2.76 17.15a31.87 31.87 0 0 0-19.65 3.01 31.87 31.87 0 0 0-15.5-12.43 32.2 32.2 0 0 1 6.18-16.23l13.5 13.06Z"/>
<path stroke="#161616" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" d="m33.37 67.04 5.17-19.32 11.84-2.96m-2.57 9.58 26.63-6.66-19.73-19.1-26.63 6.67 19.73 19.1Zm0 0 18.23-4.56c.67 5.86-.29 11.8-2.76 17.15a31.87 31.87 0 0 0-19.65 3.01 31.87 31.87 0 0 0-15.5-12.43 32.2 32.2 0 0 1 6.18-16.23l13.5 13.06Z"/>
</g>
<path fill="#fff" d="M281.5 67.51c-2.63 0-4.9-.54-6.8-1.64a11.08 11.08 0 0 1-4.39-4.67 15.64 15.64 0 0 1-1.53-7.14c0-2.7.51-5.05 1.53-7.09a11.6 11.6 0 0 1 4.33-4.77 12.14 12.14 0 0 1 6.53-1.72c1.62 0 3.14.26 4.57.78 1.44.51 2.72 1.3 3.82 2.39a11.18 11.18 0 0 1 2.62 4.12c.64 1.66.96 3.64.96 5.93v1.9h-21.46v-4.16h15.54a6.63 6.63 0 0 0-.76-3.16 5.58 5.58 0 0 0-2.1-2.2 5.9 5.9 0 0 0-3.1-.8c-1.26 0-2.37.31-3.33.92-.95.6-1.7 1.4-2.23 2.4a6.88 6.88 0 0 0-.8 3.21v3.63c0 1.53.28 2.83.83 3.92a5.96 5.96 0 0 0 2.34 2.5c1 .56 2.17.84 3.51.84.9 0 1.71-.12 2.44-.37a5.4 5.4 0 0 0 1.89-1.14c.53-.5.94-1.12 1.21-1.86l5.76.65a9 9 0 0 1-2.08 3.99c-1 1.12-2.3 2-3.88 2.62-1.58.61-3.39.92-5.42.92Z"/>
<path fill="#fff" d="M263.56 32.1V67h-6.17V32.1h6.17Z"/>
<path fill="#fff" d="M236.87 67.46a9.9 9.9 0 0 1-5.52-1.58 10.77 10.77 0 0 1-3.85-4.6 17.18 17.18 0 0 1-1.42-7.34c0-2.9.48-5.36 1.43-7.36a10.6 10.6 0 0 1 3.9-4.55 10.03 10.03 0 0 1 5.48-1.55c1.53 0 2.8.26 3.78.78a7.13 7.13 0 0 1 2.35 1.86c.58.72 1.03 1.4 1.35 2.03h.26V32.09h6.18V67h-6.06v-4.13h-.38c-.32.64-.78 1.32-1.38 2.03a7.6 7.6 0 0 1-6.12 2.56Zm1.72-5.06c1.3 0 2.42-.35 3.34-1.06a6.6 6.6 0 0 0 2.1-2.98c.48-1.27.72-2.76.72-4.45 0-1.7-.24-3.17-.72-4.42a6.28 6.28 0 0 0-2.08-2.91 5.38 5.38 0 0 0-3.36-1.04c-1.37 0-2.52.36-3.44 1.07a6.5 6.5 0 0 0-2.08 2.97c-.47 1.26-.7 2.7-.7 4.33 0 1.64.23 3.1.7 4.38a6.84 6.84 0 0 0 2.1 3.02 5.4 5.4 0 0 0 3.42 1.09Z"/>
<path fill="#fff" d="M209.37 67.51c-2.56 0-4.77-.56-6.65-1.69a11.46 11.46 0 0 1-4.36-4.72 15.52 15.52 0 0 1-1.53-7.09c0-2.7.5-5.07 1.53-7.1a11.43 11.43 0 0 1 4.36-4.75 12.68 12.68 0 0 1 6.65-1.68c2.56 0 4.78.56 6.65 1.68a11.32 11.32 0 0 1 4.35 4.74 15.47 15.47 0 0 1 1.55 7.11c0 2.7-.52 5.07-1.55 7.1a11.34 11.34 0 0 1-4.35 4.71 12.68 12.68 0 0 1-6.65 1.7Zm.04-4.94c1.38 0 2.54-.38 3.47-1.14a6.89 6.89 0 0 0 2.08-3.1c.47-1.3.7-2.74.7-4.34 0-1.6-.23-3.05-.7-4.34a6.88 6.88 0 0 0-2.08-3.12 5.27 5.27 0 0 0-3.47-1.16c-1.42 0-2.6.39-3.55 1.16a7 7 0 0 0-2.1 3.12c-.45 1.3-.68 2.74-.68 4.34 0 1.6.23 3.04.68 4.33a7 7 0 0 0 2.1 3.1 5.46 5.46 0 0 0 3.55 1.15Z"/>
<path fill="#fff" d="M180.17 67.51c-2.56 0-4.77-.56-6.65-1.69a11.46 11.46 0 0 1-4.36-4.72 15.52 15.52 0 0 1-1.54-7.09c0-2.7.51-5.07 1.54-7.1a11.43 11.43 0 0 1 4.36-4.75 12.68 12.68 0 0 1 6.65-1.68c2.56 0 4.77.56 6.65 1.68a11.32 11.32 0 0 1 4.34 4.74 15.49 15.49 0 0 1 1.55 7.11c0 2.7-.51 5.07-1.55 7.1a11.34 11.34 0 0 1-4.34 4.71 12.68 12.68 0 0 1-6.65 1.7Zm.03-4.94c1.39 0 2.55-.38 3.48-1.14a6.89 6.89 0 0 0 2.08-3.1c.47-1.3.7-2.74.7-4.34 0-1.6-.23-3.05-.7-4.34a6.88 6.88 0 0 0-2.08-3.12 5.26 5.26 0 0 0-3.48-1.16c-1.42 0-2.6.39-3.54 1.16a7 7 0 0 0-2.1 3.12c-.45 1.3-.68 2.74-.68 4.34 0 1.6.23 3.04.68 4.33a7 7 0 0 0 2.1 3.1 5.46 5.46 0 0 0 3.54 1.15Z"/>
<path fill="#fff" d="M162.13 32.1V67h-5.62l-16.45-23.78h-.3V67h-6.32V32.1h5.66l16.43 23.79h.31v-23.8h6.3Z"/>
</g>
<defs>
<clipPath id="a">
<path fill="#fff" d="M0 0h293.14v100H0z"/>
</clipPath>
<clipPath id="b">
<path fill="#fff" d="M0 0h100v100H0z"/>
</clipPath>
<linearGradient id="c" x1="0" x2="100" y1="50" y2="50" gradientUnits="userSpaceOnUse">
<stop stop-color="#F77062"/>
<stop offset="1" stop-color="#FE5196"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

@@ -0,0 +1,14 @@
<svg alt="Obsidian" height="22" viewBox="0 0 143 25" width="126" xmlns="http://www.w3.org/2000/svg">
<path fill="#A88BFA" d="m6.91927 14.5955c.64053-.1907 1.67255-.4839 2.85923-.5565-.71191-1.7968-.88376-3.3691-.74554-4.76905.15962-1.61678.72977-2.9662 1.28554-4.11442.1186-.24501.2326-.47313.3419-.69198.1549-.30984.3004-.60109.4365-.8953.2266-.48978.3948-.92231.4798-1.32416.0836-.39515.0841-.74806-.0148-1.08657-.099-.338982-.3093-.703864-.7093-1.1038132-.5222-.1353116-1.1017-.0165173-1.53613.3742922l-5.15591 4.638241c-.28758.25871-.47636.60929-.53406.99179l-.44455 2.94723c.69903.6179 2.42435 2.41414 3.47374 4.90644.09364.2224.1819.4505.26358.6838z"></path>
<path fill="#A88BFA" d="m2.97347 10.3512c-.02431.1037-.05852.205-.10221.3024l-2.724986 6.0735c-.279882.6238-.15095061 1.3552.325357 1.8457l4.288349 4.4163c2.1899-3.2306 1.87062-6.2699.87032-8.6457-.75846-1.8013-1.90801-3.2112-2.65683-3.9922z"></path>
<path fill="#A88BFA" d="m5.7507 23.5094c.07515.012.15135.0192.2281.0215.81383.0244 2.18251.0952 3.29249.2997.90551.1669 2.70051.6687 4.17761 1.1005 1.1271.3294 2.2886-.5707 2.4522-1.7336.1192-.8481.343-1.8075.7553-2.6869l-.0095.0033c-.6982-1.9471-1.5865-3.2044-2.5178-4.0073-.9284-.8004-1.928-1.1738-2.8932-1.3095-1.60474-.2257-3.07497.1961-4.00103.4682.55465 2.3107.38396 5.0295-1.48417 7.8441z"></path>
<path fill="#A88BFA" d="m17.3708 19.3102c.9267-1.3985 1.5868-2.4862 1.9352-3.0758.1742-.295.1427-.6648-.0638-.9383-.5377-.7126-1.5666-2.1607-2.1272-3.5015-.5764-1.3785-.6624-3.51876-.6673-4.56119-.0019-.39626-.1275-.78328-.3726-1.09465l-3.3311-4.23183c-.0117.19075-.0392.37998-.0788.56747-.1109.52394-.32 1.04552-.5585 1.56101-.1398.30214-.3014.62583-.4646.95284-.1086.21764-.218.4368-.3222.652-.5385 1.11265-1.0397 2.32011-1.1797 3.73901-.1299 1.31514.0478 2.84484.8484 4.67094.1333.0113.2675.0262.4023.0452 1.1488.1615 2.3546.6115 3.4647 1.5685.9541.8226 1.8163 2.0012 2.5152 3.6463z"></path>
<path fill="#151515" d="m39.752 4.5038c-5.952 0-10.248 3.744-10.248 8.88s4.296 8.88 10.248 8.88c5.928 0 10.224-3.744 10.224-8.88s-4.296-8.88-10.224-8.88zm0 3.47999c3.576 0 6.144 2.13601 6.144 5.40001s-2.568 5.4-6.144 5.4c-3.6 0-6.168-2.136-6.168-5.4s2.568-5.40001 6.168-5.40001z"></path>
<path fill="#151515" d="m55.4847 20.5598c.864.936 2.472 1.704 4.584 1.704 4.32 0 6.8401-2.976 6.8401-6.576 0-3.624-2.5201-6.60001-6.8401-6.60001-2.112 0-3.72.79201-4.584 1.70401v-6.02401h-3.84v17.23201h3.84zm-.12-4.944c0-1.992 1.704-3.432 3.912-3.432 2.112 0 3.888 1.248 3.888 3.504s-1.776 3.48-3.888 3.48c-2.208 0-3.912-1.416-3.912-3.408z"></path>
<path fill="#151515" d="m67.3181 19.9118c1.464 1.488 4.272 2.352 7.2 2.352 3.96 0 6.936-1.44 6.936-4.392 0-2.88-2.832-3.432-6.072-3.816-2.736-.312-3.576-.384-3.576-1.08 0-.648.864-1.056 2.496-1.056 1.968 0 3.672.6 4.824 1.656l1.992-2.304c-1.272-1.224-3.648-2.18401-6.624-2.18401-4.008 0-6.48 1.72801-6.48 4.32001 0 2.712 2.52 3.312 5.544 3.696 2.832.336 4.032.336 4.032 1.176 0 .792-1.056 1.128-2.784 1.128-2.16 0-4.152-.672-5.664-2.064z"></path>
<path fill="#151515" d="m82.8395 8.05579h3.912v-3.288h-3.912zm3.864 1.29601h-3.84v12.648h3.84z"></path>
<path fill="#151515" d="m99.8264 20.5598v1.44h3.8396v-17.23201h-3.8396v6.02401c-.864-.912-2.472-1.70401-4.584-1.70401-4.32 0-6.84 2.97601-6.84 6.60001 0 3.6 2.52 6.576 6.84 6.576 2.112 0 3.72-.768 4.584-1.704zm.12-4.944v.144c0 1.992-1.704 3.408-3.912 3.408-2.112 0-3.888-1.224-3.888-3.48s1.776-3.504 3.888-3.504c2.208 0 3.912 1.44 3.912 3.432z"></path>
<path fill="#151515" d="m105.996 8.05579h3.912v-3.288h-3.912zm3.864 1.29601h-3.84v12.648h3.84z"></path>
<path fill="#151515" d="m116.863 22.2638c2.232 0 4.056-.648 5.208-1.656.648 1.2 2.184 1.92 4.992 1.392v-2.832c-1.344.288-1.632-.024-1.632-.696v-4.608c0-3.168-2.376-4.77601-6.408-4.77601-3.48 0-6.264 1.51201-7.056 3.79201l3.456.936c.384-.984 1.704-1.704 3.432-1.704 2.04 0 2.856.768 2.856 1.728v.072l-5.04.456c-2.976.288-5.16 1.512-5.16 3.984 0 2.496 2.232 3.912 5.352 3.912zm4.848-5.112c0 1.464-2.184 2.304-4.152 2.304-1.488 0-2.328-.432-2.328-1.248 0-.84.672-1.152 1.992-1.272l4.488-.456z"></path>
<path fill="#151515" d="m128.379 21.9998h3.84v-6.048c0-2.184 1.2-3.456 3.288-3.456 1.968 0 3 1.296 3 3.432v6.072h3.84v-7.2c0-3.504-2.232-5.71201-5.52-5.71201-2.04 0-3.624.76801-4.608 1.80001v-1.536h-3.84z"></path>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

@@ -0,0 +1,14 @@
<svg alt="Obsidian" height="22" viewBox="0 0 143 25" width="126" xmlns="http://www.w3.org/2000/svg">
<path fill="#A88BFA" d="m6.91927 14.5955c.64053-.1907 1.67255-.4839 2.85923-.5565-.71191-1.7968-.88376-3.3691-.74554-4.76905.15962-1.61678.72977-2.9662 1.28554-4.11442.1186-.24501.2326-.47313.3419-.69198.1549-.30984.3004-.60109.4365-.8953.2266-.48978.3948-.92231.4798-1.32416.0836-.39515.0841-.74806-.0148-1.08657-.099-.338982-.3093-.703864-.7093-1.1038132-.5222-.1353116-1.1017-.0165173-1.53613.3742922l-5.15591 4.638241c-.28758.25871-.47636.60929-.53406.99179l-.44455 2.94723c.69903.6179 2.42435 2.41414 3.47374 4.90644.09364.2224.1819.4505.26358.6838z"></path>
<path fill="#A88BFA" d="m2.97347 10.3512c-.02431.1037-.05852.205-.10221.3024l-2.724986 6.0735c-.279882.6238-.15095061 1.3552.325357 1.8457l4.288349 4.4163c2.1899-3.2306 1.87062-6.2699.87032-8.6457-.75846-1.8013-1.90801-3.2112-2.65683-3.9922z"></path>
<path fill="#A88BFA" d="m5.7507 23.5094c.07515.012.15135.0192.2281.0215.81383.0244 2.18251.0952 3.29249.2997.90551.1669 2.70051.6687 4.17761 1.1005 1.1271.3294 2.2886-.5707 2.4522-1.7336.1192-.8481.343-1.8075.7553-2.6869l-.0095.0033c-.6982-1.9471-1.5865-3.2044-2.5178-4.0073-.9284-.8004-1.928-1.1738-2.8932-1.3095-1.60474-.2257-3.07497.1961-4.00103.4682.55465 2.3107.38396 5.0295-1.48417 7.8441z"></path>
<path fill="#A88BFA" d="m17.3708 19.3102c.9267-1.3985 1.5868-2.4862 1.9352-3.0758.1742-.295.1427-.6648-.0638-.9383-.5377-.7126-1.5666-2.1607-2.1272-3.5015-.5764-1.3785-.6624-3.51876-.6673-4.56119-.0019-.39626-.1275-.78328-.3726-1.09465l-3.3311-4.23183c-.0117.19075-.0392.37998-.0788.56747-.1109.52394-.32 1.04552-.5585 1.56101-.1398.30214-.3014.62583-.4646.95284-.1086.21764-.218.4368-.3222.652-.5385 1.11265-1.0397 2.32011-1.1797 3.73901-.1299 1.31514.0478 2.84484.8484 4.67094.1333.0113.2675.0262.4023.0452 1.1488.1615 2.3546.6115 3.4647 1.5685.9541.8226 1.8163 2.0012 2.5152 3.6463z"></path>
<path fill="#fff" d="m39.752 4.5038c-5.952 0-10.248 3.744-10.248 8.88s4.296 8.88 10.248 8.88c5.928 0 10.224-3.744 10.224-8.88s-4.296-8.88-10.224-8.88zm0 3.47999c3.576 0 6.144 2.13601 6.144 5.40001s-2.568 5.4-6.144 5.4c-3.6 0-6.168-2.136-6.168-5.4s2.568-5.40001 6.168-5.40001z"></path>
<path fill="#fff" d="m55.4847 20.5598c.864.936 2.472 1.704 4.584 1.704 4.32 0 6.8401-2.976 6.8401-6.576 0-3.624-2.5201-6.60001-6.8401-6.60001-2.112 0-3.72.79201-4.584 1.70401v-6.02401h-3.84v17.23201h3.84zm-.12-4.944c0-1.992 1.704-3.432 3.912-3.432 2.112 0 3.888 1.248 3.888 3.504s-1.776 3.48-3.888 3.48c-2.208 0-3.912-1.416-3.912-3.408z"></path>
<path fill="#fff" d="m67.3181 19.9118c1.464 1.488 4.272 2.352 7.2 2.352 3.96 0 6.936-1.44 6.936-4.392 0-2.88-2.832-3.432-6.072-3.816-2.736-.312-3.576-.384-3.576-1.08 0-.648.864-1.056 2.496-1.056 1.968 0 3.672.6 4.824 1.656l1.992-2.304c-1.272-1.224-3.648-2.18401-6.624-2.18401-4.008 0-6.48 1.72801-6.48 4.32001 0 2.712 2.52 3.312 5.544 3.696 2.832.336 4.032.336 4.032 1.176 0 .792-1.056 1.128-2.784 1.128-2.16 0-4.152-.672-5.664-2.064z"></path>
<path fill="#fff" d="m82.8395 8.05579h3.912v-3.288h-3.912zm3.864 1.29601h-3.84v12.648h3.84z"></path>
<path fill="#fff" d="m99.8264 20.5598v1.44h3.8396v-17.23201h-3.8396v6.02401c-.864-.912-2.472-1.70401-4.584-1.70401-4.32 0-6.84 2.97601-6.84 6.60001 0 3.6 2.52 6.576 6.84 6.576 2.112 0 3.72-.768 4.584-1.704zm.12-4.944v.144c0 1.992-1.704 3.408-3.912 3.408-2.112 0-3.888-1.224-3.888-3.48s1.776-3.504 3.888-3.504c2.208 0 3.912 1.44 3.912 3.432z"></path>
<path fill="#fff" d="m105.996 8.05579h3.912v-3.288h-3.912zm3.864 1.29601h-3.84v12.648h3.84z"></path>
<path fill="#fff" d="m116.863 22.2638c2.232 0 4.056-.648 5.208-1.656.648 1.2 2.184 1.92 4.992 1.392v-2.832c-1.344.288-1.632-.024-1.632-.696v-4.608c0-3.168-2.376-4.77601-6.408-4.77601-3.48 0-6.264 1.51201-7.056 3.79201l3.456.936c.384-.984 1.704-1.704 3.432-1.704 2.04 0 2.856.768 2.856 1.728v.072l-5.04.456c-2.976.288-5.16 1.512-5.16 3.984 0 2.496 2.232 3.912 5.352 3.912zm4.848-5.112c0 1.464-2.184 2.304-4.152 2.304-1.488 0-2.328-.432-2.328-1.248 0-.84.672-1.152 1.992-1.272l4.488-.456z"></path>
<path fill="#fff" d="m128.379 21.9998h3.84v-6.048c0-2.184 1.2-3.456 3.288-3.456 1.968 0 3 1.296 3 3.432v6.072h3.84v-7.2c0-3.504-2.232-5.71201-5.52-5.71201-2.04 0-3.624.76801-4.608 1.80001v-1.536h-3.84z"></path>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="22 268.7 600 106">
<path fill="#b8d3f4" d="M109 321.8c0 6.7-1.9 13.1-5.3 18.4l13.6 13.7c6.7-8.9 10.8-20.1 10.8-32.1s-4.2-23.2-10.8-32.1l-13.6 13.7c3.3 5.3 5.3 11.5 5.3 18.4z"/>
<path fill="#3385ff" d="M75.1 355.9c-18.6 0-33.9-15.4-33.9-34.1 0-18.7 15.3-34.1 33.9-34.1 6.9 0 13.1 2 18.3 5.6l13.6-13.7c-8.9-6.7-20-10.9-32-10.9-29.2 0-53.1 23.7-53.1 53.3s23.9 53 53.1 53c12.2 0 23.4-4.2 32.2-10.9l-13.6-13.7c-5.2 3.5-11.6 5.5-18.5 5.5z"/>
<path fill="#000" d="M604.45 333.8c-3.4 0-6.4-1.4-8.5-3.8-.1-.2-.1-.5.1-.6l19.9-8.4 5.8-2.5c.2-.1.2-.2.2-.4a18 18 0 0 0-18.1-13.9c-9.2.4-17 7.8-17.3 17.1a18.01 18.01 0 0 0 34.6 7.8c.1-.2 0-.5-.2-.5l-5.8-1.1c-.1 0-.4 0-.4.2-2.1 3.6-5.9 6.1-10.3 6.1zm0-23c3.4 0 6.5 1.5 8.5 3.9.1.2.1.5-.1.6 0 0-19.2 8.2-19.4 8.3-.2.1-.5-.1-.5-.2v-.9c-.1-6.6 5.1-11.7 11.5-11.7zM585.75 304.8h-5.7c-.1 0-.2.1-.4.2l-9.2 27.1c-.2.6-.9.6-1.2 0l-9.2-27.1c0-.1-.1-.2-.4-.2h-5.7c-.2 0-.4.2-.4.5l11.7 34.1c0 .1.1.2.4.2h8.1c.1 0 .2-.1.4-.2l11.7-34.1c.2-.2.1-.5-.1-.5zM548.25 304.8h-5.8c-.2 0-.4.1-.4.4v34.1c0 .2.1.4.4.4h5.8c.2 0 .4-.1.4-.4v-34.1c0-.1-.2-.4-.4-.4zM548.25 293.7h-5.8c-.2 0-.4.1-.4.4v5.8c0 .2.1.4.4.4h5.8c.2 0 .4-.1.4-.4V294c0-.2-.2-.3-.4-.3zM536.25 304.8h-6.5c-.1 0-.2-.1-.2-.2v-14.8c0-.2-.1-.4-.4-.4h-5.8c-.2 0-.4.1-.4.4v14.8c0 .1-.1.2-.2.2h-6.4c-.2 0-.4.1-.4.4v5.8c0 .2.1.4.4.4h6.4c.1 0 .2.1.2.2v27.7c0 .2.1.4.4.4h5.8c.2 0 .4-.1.4-.4v-27.7c0-.1.1-.2.2-.2h6.5c.2 0 .4-.1.4-.4v-5.8c0-.1-.3-.4-.4-.4zM498.25 333.8c-7.1 0-12.7-6.4-11.4-13.8.7-4 4.7-8.2 8.8-9 4.4-.9 8.5.6 11.1 3.6.1.1.4.1.5 0l4.1-4.1c.1-.1.1-.4 0-.5-3.4-3.8-8.5-6-14.1-5.8-9.1.5-16.7 7.9-17.2 17.1-.5 10.3 7.7 18.9 18 18.9 5.2 0 10-2.3 13.3-5.8.1-.1.1-.2 0-.4l-4.1-4.1c-.1-.1-.4-.1-.5 0-2 2.4-5.1 3.9-8.5 3.9zM459.45 333.8c-3.4 0-6.4-1.4-8.5-3.8-.1-.2-.1-.5.1-.6l19.9-8.4 5.8-2.5c.2-.1.2-.2.2-.4a18 18 0 0 0-18.1-13.9c-9.2.4-17 7.8-17.3 17.1a18.01 18.01 0 0 0 34.6 7.8c.1-.2 0-.5-.2-.5l-5.8-1.1c-.1 0-.4 0-.4.2-2.1 3.6-6 6.1-10.3 6.1zm0-23c3.4 0 6.5 1.5 8.5 3.9.1.2.1.5-.1.6 0 0-19.2 8.2-19.4 8.3-.2.1-.5-.1-.5-.2v-.9c-.1-6.6 5.1-11.7 11.5-11.7zM436.55 289.4h-5.8c-.2 0-.4.1-.4.4v49.6c0 .2.1.4.4.4h5.8c.2 0 .4-.1.4-.4v-49.6c0-.3-.3-.4-.4-.4zM423.85 289.4h-5.8c-.2 0-.4.1-.4.4v49.6c0 .2.1.4.4.4h5.8c.2 0 .4-.1.4-.4v-49.6c-.1-.3-.3-.4-.4-.4zM395.45 310.8c6.4 0 11.5 5.2 11.5 11.5s-5.2 11.5-11.5 11.5-11.5-5.2-11.5-11.5 5.1-11.5 11.5-11.5zm0-6.6a17.99 17.99 0 1 0-.03 35.98 17.99 17.99 0 0 0 .03-35.98zM362.35 333.8c-7.1 0-12.7-6.4-11.4-13.8.7-4 4.7-8.2 8.8-9 4.4-.9 8.5.6 11.1 3.6.1.1.4.1.5 0l4.1-4.1c.1-.1.1-.4 0-.5-3.4-3.8-8.5-6-14.1-5.8-9.1.5-16.7 7.9-17.2 17.1-.5 10.3 7.7 18.9 18 18.9 5.2 0 10-2.3 13.3-5.8.1-.1.1-.2 0-.4l-4.1-4.1c-.1-.1-.4-.1-.5 0-2 2.4-5.1 3.9-8.5 3.9zM303.45 304.2c-3.8 0-8.2 2.4-10.2 5.2-.1.2-.6.1-.6-.1v-4.1c0-.1-.1-.4-.4-.4h-5.8c-.1 0-.4.1-.4.4v34.3c0 .1.1.4.4.4h5.8c.1 0 .4-.1.4-.4v-17.1c0-6.5 4.4-11.1 10.7-11.1 8.3 0 10.8 5.5 10.8 11.9v16.4c0 .1.1.4.4.4h5.8c.1 0 .4-.1.4-.4v-16.4c0-10.1-4.8-19-17.3-19zM265.15 333.8c-3.4 0-6.4-1.4-8.5-3.8-.1-.2-.1-.5.1-.6l19.9-8.4 5.8-2.5c.2-.1.2-.2.2-.4a18 18 0 0 0-18.1-13.9c-9.2.4-17 7.8-17.3 17.1a18.01 18.01 0 0 0 34.6 7.8c.1-.2 0-.5-.2-.5l-5.8-1.1c-.1 0-.4 0-.4.2-2.2 3.6-6 6.1-10.3 6.1zm0-23c3.4 0 6.5 1.5 8.5 3.9.1.2.1.5-.1.6 0 0-19.2 8.2-19.4 8.3-.2.1-.5-.1-.5-.2v-.9c0-6.6 5.2-11.7 11.5-11.7zM225.75 303.9c-4.5.1-8.1 1.9-10.6 4.9-.2.2-.6.1-.6-.2v-3.3c0-.2-.1-.4-.4-.4h-5.8c-.2 0-.4.1-.4.4V355c0 .2.1.4.4.4h5.7c.2 0 .4-.1.4-.4v-19.6c0-.4.4-.5.6-.2 2.5 3 6.2 4.9 10.9 4.9 11 0 19.8-10 17.7-21.3-1.4-8.9-9.2-15-17.9-14.9zm2.2 29.4c-7.8 1.3-14.6-5.5-13.3-13.3.8-4.7 4.6-8.7 9.4-9.4 7.8-1.3 14.6 5.5 13.3 13.3-.7 4.8-4.6 8.5-9.4 9.4zM186.75 304.2a17.99 17.99 0 1 0 0 36 17.99 17.99 0 1 0 0-36zm0 6.6c6.4 0 11.5 5.2 11.5 11.5s-5.2 11.5-11.5 11.5-11.5-5.2-11.5-11.5 5.2-11.5 11.5-11.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="22 268.7 600 106">
<path fill="#b8d3f4" d="M109 321.8c0 6.7-1.9 13.1-5.3 18.4l13.6 13.7c6.7-8.9 10.8-20.1 10.8-32.1s-4.2-23.2-10.8-32.1l-13.6 13.7c3.3 5.3 5.3 11.5 5.3 18.4z"/>
<path fill="#3385ff" d="M75.1 355.9c-18.6 0-33.9-15.4-33.9-34.1 0-18.7 15.3-34.1 33.9-34.1 6.9 0 13.1 2 18.3 5.6l13.6-13.7c-8.9-6.7-20-10.9-32-10.9-29.2 0-53.1 23.7-53.1 53.3s23.9 53 53.1 53c12.2 0 23.4-4.2 32.2-10.9l-13.6-13.7c-5.2 3.5-11.6 5.5-18.5 5.5z"/>
<path fill="#fff" d="M604.45 333.8c-3.4 0-6.4-1.4-8.5-3.8-.1-.2-.1-.5.1-.6l19.9-8.4 5.8-2.5c.2-.1.2-.2.2-.4a18 18 0 0 0-18.1-13.9c-9.2.4-17 7.8-17.3 17.1a18.01 18.01 0 0 0 34.6 7.8c.1-.2 0-.5-.2-.5l-5.8-1.1c-.1 0-.4 0-.4.2-2.1 3.6-5.9 6.1-10.3 6.1zm0-23c3.4 0 6.5 1.5 8.5 3.9.1.2.1.5-.1.6 0 0-19.2 8.2-19.4 8.3-.2.1-.5-.1-.5-.2v-.9c-.1-6.6 5.1-11.7 11.5-11.7zM585.75 304.8h-5.7c-.1 0-.2.1-.4.2l-9.2 27.1c-.2.6-.9.6-1.2 0l-9.2-27.1c0-.1-.1-.2-.4-.2h-5.7c-.2 0-.4.2-.4.5l11.7 34.1c0 .1.1.2.4.2h8.1c.1 0 .2-.1.4-.2l11.7-34.1c.2-.2.1-.5-.1-.5zM548.25 304.8h-5.8c-.2 0-.4.1-.4.4v34.1c0 .2.1.4.4.4h5.8c.2 0 .4-.1.4-.4v-34.1c0-.1-.2-.4-.4-.4zM548.25 293.7h-5.8c-.2 0-.4.1-.4.4v5.8c0 .2.1.4.4.4h5.8c.2 0 .4-.1.4-.4V294c0-.2-.2-.3-.4-.3zM536.25 304.8h-6.5c-.1 0-.2-.1-.2-.2v-14.8c0-.2-.1-.4-.4-.4h-5.8c-.2 0-.4.1-.4.4v14.8c0 .1-.1.2-.2.2h-6.4c-.2 0-.4.1-.4.4v5.8c0 .2.1.4.4.4h6.4c.1 0 .2.1.2.2v27.7c0 .2.1.4.4.4h5.8c.2 0 .4-.1.4-.4v-27.7c0-.1.1-.2.2-.2h6.5c.2 0 .4-.1.4-.4v-5.8c0-.1-.3-.4-.4-.4zM498.25 333.8c-7.1 0-12.7-6.4-11.4-13.8.7-4 4.7-8.2 8.8-9 4.4-.9 8.5.6 11.1 3.6.1.1.4.1.5 0l4.1-4.1c.1-.1.1-.4 0-.5-3.4-3.8-8.5-6-14.1-5.8-9.1.5-16.7 7.9-17.2 17.1-.5 10.3 7.7 18.9 18 18.9 5.2 0 10-2.3 13.3-5.8.1-.1.1-.2 0-.4l-4.1-4.1c-.1-.1-.4-.1-.5 0-2 2.4-5.1 3.9-8.5 3.9zM459.45 333.8c-3.4 0-6.4-1.4-8.5-3.8-.1-.2-.1-.5.1-.6l19.9-8.4 5.8-2.5c.2-.1.2-.2.2-.4a18 18 0 0 0-18.1-13.9c-9.2.4-17 7.8-17.3 17.1a18.01 18.01 0 0 0 34.6 7.8c.1-.2 0-.5-.2-.5l-5.8-1.1c-.1 0-.4 0-.4.2-2.1 3.6-6 6.1-10.3 6.1zm0-23c3.4 0 6.5 1.5 8.5 3.9.1.2.1.5-.1.6 0 0-19.2 8.2-19.4 8.3-.2.1-.5-.1-.5-.2v-.9c-.1-6.6 5.1-11.7 11.5-11.7zM436.55 289.4h-5.8c-.2 0-.4.1-.4.4v49.6c0 .2.1.4.4.4h5.8c.2 0 .4-.1.4-.4v-49.6c0-.3-.3-.4-.4-.4zM423.85 289.4h-5.8c-.2 0-.4.1-.4.4v49.6c0 .2.1.4.4.4h5.8c.2 0 .4-.1.4-.4v-49.6c-.1-.3-.3-.4-.4-.4zM395.45 310.8c6.4 0 11.5 5.2 11.5 11.5s-5.2 11.5-11.5 11.5-11.5-5.2-11.5-11.5 5.1-11.5 11.5-11.5zm0-6.6a17.99 17.99 0 1 0-.03 35.98 17.99 17.99 0 0 0 .03-35.98zM362.35 333.8c-7.1 0-12.7-6.4-11.4-13.8.7-4 4.7-8.2 8.8-9 4.4-.9 8.5.6 11.1 3.6.1.1.4.1.5 0l4.1-4.1c.1-.1.1-.4 0-.5-3.4-3.8-8.5-6-14.1-5.8-9.1.5-16.7 7.9-17.2 17.1-.5 10.3 7.7 18.9 18 18.9 5.2 0 10-2.3 13.3-5.8.1-.1.1-.2 0-.4l-4.1-4.1c-.1-.1-.4-.1-.5 0-2 2.4-5.1 3.9-8.5 3.9zM303.45 304.2c-3.8 0-8.2 2.4-10.2 5.2-.1.2-.6.1-.6-.1v-4.1c0-.1-.1-.4-.4-.4h-5.8c-.1 0-.4.1-.4.4v34.3c0 .1.1.4.4.4h5.8c.1 0 .4-.1.4-.4v-17.1c0-6.5 4.4-11.1 10.7-11.1 8.3 0 10.8 5.5 10.8 11.9v16.4c0 .1.1.4.4.4h5.8c.1 0 .4-.1.4-.4v-16.4c0-10.1-4.8-19-17.3-19zM265.15 333.8c-3.4 0-6.4-1.4-8.5-3.8-.1-.2-.1-.5.1-.6l19.9-8.4 5.8-2.5c.2-.1.2-.2.2-.4a18 18 0 0 0-18.1-13.9c-9.2.4-17 7.8-17.3 17.1a18.01 18.01 0 0 0 34.6 7.8c.1-.2 0-.5-.2-.5l-5.8-1.1c-.1 0-.4 0-.4.2-2.2 3.6-6 6.1-10.3 6.1zm0-23c3.4 0 6.5 1.5 8.5 3.9.1.2.1.5-.1.6 0 0-19.2 8.2-19.4 8.3-.2.1-.5-.1-.5-.2v-.9c0-6.6 5.2-11.7 11.5-11.7zM225.75 303.9c-4.5.1-8.1 1.9-10.6 4.9-.2.2-.6.1-.6-.2v-3.3c0-.2-.1-.4-.4-.4h-5.8c-.2 0-.4.1-.4.4V355c0 .2.1.4.4.4h5.7c.2 0 .4-.1.4-.4v-19.6c0-.4.4-.5.6-.2 2.5 3 6.2 4.9 10.9 4.9 11 0 19.8-10 17.7-21.3-1.4-8.9-9.2-15-17.9-14.9zm2.2 29.4c-7.8 1.3-14.6-5.5-13.3-13.3.8-4.7 4.6-8.7 9.4-9.4 7.8-1.3 14.6 5.5 13.3 13.3-.7 4.8-4.6 8.5-9.4 9.4zM186.75 304.2a17.99 17.99 0 1 0 0 36 17.99 17.99 0 1 0 0-36zm0 6.6c6.4 0 11.5 5.2 11.5 11.5s-5.2 11.5-11.5 11.5-11.5-5.2-11.5-11.5 5.2-11.5 11.5-11.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

@@ -0,0 +1,23 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 581 113" fill="#1F1F1F">
<path d="M151.4 66.76c.6 5.6 5.7 15.2 20.48 15.2 12.88 0 19.08-8.2 19.08-16.2 0-7.2-4.9-13.1-14.59-15.1l-7-1.5c-2.69-.5-4.49-2-4.49-4.4 0-2.8 2.8-4.9 6.3-4.9 5.6 0 7.69 3.7 8.09 6.6l11.09-2.5c-.6-5.3-5.3-14.2-19.28-14.2-10.6 0-18.38 7.3-18.38 16.1 0 6.9 4.3 12.6 13.78 14.7l6.5 1.5c3.8.8 5.3 2.6 5.3 4.8 0 2.6-2.1 4.9-6.5 4.9-5.8 0-8.7-3.6-9-7.5l-11.38 2.5Z"/>
<path d="M233.42 80.46h12.69c-.2-1.7-.5-5.1-.5-8.9v-40.3h-13.29v28.6c0 5.7-3.4 9.7-9.29 9.7-6.2 0-9-4.4-9-9.9v-28.4h-13.28v31.1c0 10.7 6.8 19.4 18.68 19.4 5.2 0 10.9-2 13.6-6.6 0 2 .2 4.3.4 5.3Z"/>
<path d="M273.08 99.47v-23.8c2.4 3.3 7.39 6 14.18 6 13.89 0 23.18-11 23.18-25.91 0-14.6-8.3-25.6-22.68-25.6-7.39 0-12.88 3.3-15.08 7.1v-6h-12.89v68.2h13.29Zm24.27-43.61c0 8.8-5.4 13.9-12.19 13.9-6.79 0-12.28-5.2-12.28-13.9s5.5-13.8 12.28-13.8c6.8 0 12.2 5.1 12.2 13.8Z"/>
<path d="M317.96 67.06c0 7.7 6.4 14.8 16.89 14.8 7.29 0 11.98-3.4 14.48-7.3 0 1.9.2 4.6.5 5.9h12.19c-.3-1.7-.6-5.2-.6-7.8v-24.2c0-9.9-5.8-18.7-21.38-18.7-13.19 0-20.28 8.5-21.08 16.2l11.8 2.5c.4-4.3 3.59-8 9.38-8 5.6 0 8.3 2.9 8.3 6.4 0 1.7-.9 3.1-3.7 3.5l-12.09 1.8c-8.2 1.2-14.69 6.1-14.69 14.9Zm19.68 4.9c-4.3 0-6.39-2.8-6.39-5.7 0-3.8 2.7-5.7 6.1-6.2l11.08-1.7v2.2c0 8.7-5.2 11.4-10.79 11.4Z"/>
<path d="M387.7 80.46v-6c2.6 4.2 7.8 7.2 14.59 7.2 13.99 0 23.18-11.1 23.18-26 0-14.6-8.3-25.7-22.68-25.7-7.3 0-12.69 3.2-14.89 6.7V8.04h-13.08v72.41h12.88Zm24.48-24.7c0 9-5.4 14-12.19 14-6.7 0-12.29-5.1-12.29-14 0-9 5.6-13.9 12.29-13.9 6.8 0 12.19 4.9 12.19 13.9Z"/>
<path d="M432.99 67.06c0 7.7 6.4 14.8 16.88 14.8 7.3 0 12-3.4 14.49-7.3 0 1.9.2 4.6.5 5.9h12.19c-.3-1.7-.6-5.2-.6-7.8v-24.2c0-9.9-5.8-18.7-21.38-18.7-13.19 0-20.28 8.5-21.08 16.2l11.79 2.5c.4-4.3 3.6-8 9.39-8 5.6 0 8.29 2.9 8.29 6.4 0 1.7-.9 3.1-3.7 3.5l-12.08 1.8c-8.2 1.2-14.69 6.1-14.69 14.9Zm19.68 4.9c-4.3 0-6.4-2.8-6.4-5.7 0-3.8 2.7-5.7 6.1-6.2l11.09-1.7v2.2c0 8.7-5.2 11.4-10.79 11.4Z"/>
<path d="M485.64 66.76c.6 5.6 5.7 15.2 20.48 15.2 12.9 0 19.09-8.2 19.09-16.2 0-7.2-4.9-13.1-14.59-15.1l-7-1.5c-2.7-.5-4.49-2-4.49-4.4 0-2.8 2.8-4.9 6.3-4.9 5.6 0 7.69 3.7 8.09 6.6l11.09-2.5c-.6-5.3-5.3-14.2-19.28-14.2-10.6 0-18.39 7.3-18.39 16.1 0 6.9 4.3 12.6 13.79 14.7l6.5 1.5c3.8.8 5.29 2.6 5.29 4.8 0 2.6-2.1 4.9-6.5 4.9-5.79 0-8.69-3.6-8.99-7.5l-11.38 2.5Z"/>
<path d="M545.38 50.26c.3-4.5 4.1-9.7 11-9.7 7.59 0 10.78 4.8 10.99 9.7h-21.99Zm23.28 12.8c-1.6 4.4-5 7.5-11.19 7.5-6.59 0-12.09-4.7-12.38-11.2h35.16c0-.2.2-2.2.2-4.1 0-15.8-9.09-25.5-24.28-25.5-12.58 0-24.17 10.2-24.17 25.9 0 16.6 11.89 26.3 25.37 26.3 12.1 0 19.88-7.1 22.38-15.6l-11.09-3.3Z"/>
<path fill="url(#a)" d="M63.7 110.28a4.9 4.9 0 0 1-8.72-2.97l-1-67.25h45.21a9.79 9.79 0 0 1 7.67 15.88L63.7 110.28Z"/>
<path fill="url(#b)" fill-opacity=".2" d="M63.7 110.28a4.9 4.9 0 0 1-8.72-2.97l-1-67.25h45.21a9.79 9.79 0 0 1 7.67 15.88L63.7 110.28Z"/>
<path fill="#3ECF8E" d="M45.32 2.07a4.9 4.9 0 0 1 8.72 2.97l.44 67.25H9.83a9.79 9.79 0 0 1-7.66-15.87L45.32 2.07Z"/>
<defs>
<linearGradient id="a" x1="53.97" x2="94.16" y1="54.97" y2="71.83" gradientUnits="userSpaceOnUse">
<stop stop-color="#249361"/>
<stop offset="1" stop-color="#3ECF8E"/>
</linearGradient>
<linearGradient id="b" x1="36.16" x2="54.48" y1="30.58" y2="65.08" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

@@ -0,0 +1,23 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 581 113" fill="#fff">
<path d="M151.4 66.76c.6 5.6 5.7 15.2 20.48 15.2 12.88 0 19.08-8.2 19.08-16.2 0-7.2-4.9-13.1-14.59-15.1l-7-1.5c-2.69-.5-4.49-2-4.49-4.4 0-2.8 2.8-4.9 6.3-4.9 5.6 0 7.69 3.7 8.09 6.6l11.09-2.5c-.6-5.3-5.3-14.2-19.28-14.2-10.6 0-18.38 7.3-18.38 16.1 0 6.9 4.3 12.6 13.78 14.7l6.5 1.5c3.8.8 5.3 2.6 5.3 4.8 0 2.6-2.1 4.9-6.5 4.9-5.8 0-8.7-3.6-9-7.5l-11.38 2.5Z"/>
<path d="M233.42 80.46h12.69c-.2-1.7-.5-5.1-.5-8.9v-40.3h-13.29v28.6c0 5.7-3.4 9.7-9.29 9.7-6.2 0-9-4.4-9-9.9v-28.4h-13.28v31.1c0 10.7 6.8 19.4 18.68 19.4 5.2 0 10.9-2 13.6-6.6 0 2 .2 4.3.4 5.3Z"/>
<path d="M273.08 99.47v-23.8c2.4 3.3 7.39 6 14.18 6 13.89 0 23.18-11 23.18-25.91 0-14.6-8.3-25.6-22.68-25.6-7.39 0-12.88 3.3-15.08 7.1v-6h-12.89v68.2h13.29Zm24.27-43.61c0 8.8-5.4 13.9-12.19 13.9-6.79 0-12.28-5.2-12.28-13.9s5.5-13.8 12.28-13.8c6.8 0 12.2 5.1 12.2 13.8Z"/>
<path d="M317.96 67.06c0 7.7 6.4 14.8 16.89 14.8 7.29 0 11.98-3.4 14.48-7.3 0 1.9.2 4.6.5 5.9h12.19c-.3-1.7-.6-5.2-.6-7.8v-24.2c0-9.9-5.8-18.7-21.38-18.7-13.19 0-20.28 8.5-21.08 16.2l11.8 2.5c.4-4.3 3.59-8 9.38-8 5.6 0 8.3 2.9 8.3 6.4 0 1.7-.9 3.1-3.7 3.5l-12.09 1.8c-8.2 1.2-14.69 6.1-14.69 14.9Zm19.68 4.9c-4.3 0-6.39-2.8-6.39-5.7 0-3.8 2.7-5.7 6.1-6.2l11.08-1.7v2.2c0 8.7-5.2 11.4-10.79 11.4Z"/>
<path d="M387.7 80.46v-6c2.6 4.2 7.8 7.2 14.59 7.2 13.99 0 23.18-11.1 23.18-26 0-14.6-8.3-25.7-22.68-25.7-7.3 0-12.69 3.2-14.89 6.7V8.04h-13.08v72.41h12.88Zm24.48-24.7c0 9-5.4 14-12.19 14-6.7 0-12.29-5.1-12.29-14 0-9 5.6-13.9 12.29-13.9 6.8 0 12.19 4.9 12.19 13.9Z"/>
<path d="M432.99 67.06c0 7.7 6.4 14.8 16.88 14.8 7.3 0 12-3.4 14.49-7.3 0 1.9.2 4.6.5 5.9h12.19c-.3-1.7-.6-5.2-.6-7.8v-24.2c0-9.9-5.8-18.7-21.38-18.7-13.19 0-20.28 8.5-21.08 16.2l11.79 2.5c.4-4.3 3.6-8 9.39-8 5.6 0 8.29 2.9 8.29 6.4 0 1.7-.9 3.1-3.7 3.5l-12.08 1.8c-8.2 1.2-14.69 6.1-14.69 14.9Zm19.68 4.9c-4.3 0-6.4-2.8-6.4-5.7 0-3.8 2.7-5.7 6.1-6.2l11.09-1.7v2.2c0 8.7-5.2 11.4-10.79 11.4Z"/>
<path d="M485.64 66.76c.6 5.6 5.7 15.2 20.48 15.2 12.9 0 19.09-8.2 19.09-16.2 0-7.2-4.9-13.1-14.59-15.1l-7-1.5c-2.7-.5-4.49-2-4.49-4.4 0-2.8 2.8-4.9 6.3-4.9 5.6 0 7.69 3.7 8.09 6.6l11.09-2.5c-.6-5.3-5.3-14.2-19.28-14.2-10.6 0-18.39 7.3-18.39 16.1 0 6.9 4.3 12.6 13.79 14.7l6.5 1.5c3.8.8 5.29 2.6 5.29 4.8 0 2.6-2.1 4.9-6.5 4.9-5.79 0-8.69-3.6-8.99-7.5l-11.38 2.5Z"/>
<path d="M545.38 50.26c.3-4.5 4.1-9.7 11-9.7 7.59 0 10.78 4.8 10.99 9.7h-21.99Zm23.28 12.8c-1.6 4.4-5 7.5-11.19 7.5-6.59 0-12.09-4.7-12.38-11.2h35.16c0-.2.2-2.2.2-4.1 0-15.8-9.09-25.5-24.28-25.5-12.58 0-24.17 10.2-24.17 25.9 0 16.6 11.89 26.3 25.37 26.3 12.1 0 19.88-7.1 22.38-15.6l-11.09-3.3Z"/>
<path fill="url(#a)" d="M63.7 110.28a4.9 4.9 0 0 1-8.72-2.97l-1-67.25h45.21a9.79 9.79 0 0 1 7.67 15.88L63.7 110.28Z"/>
<path fill="url(#b)" fill-opacity=".2" d="M63.7 110.28a4.9 4.9 0 0 1-8.72-2.97l-1-67.25h45.21a9.79 9.79 0 0 1 7.67 15.88L63.7 110.28Z"/>
<path fill="#3ECF8E" d="M45.32 2.07a4.9 4.9 0 0 1 8.72 2.97l.44 67.25H9.83a9.79 9.79 0 0 1-7.66-15.87L45.32 2.07Z"/>
<defs>
<linearGradient id="a" x1="53.97" x2="94.16" y1="54.97" y2="71.83" gradientUnits="userSpaceOnUse">
<stop stop-color="#249361"/>
<stop offset="1" stop-color="#3ECF8E"/>
</linearGradient>
<linearGradient id="b" x1="36.16" x2="54.48" y1="30.58" y2="65.08" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 151 31">
<path fill="#111" d="M49.37 7.6c-8.39 0-10.49 1.8-11.13 5.39-.62 3.58.93 5.06 8.1 5.06 4.2 0 5.39 0 5.2 1.04-.2 1.06-1.4 1.06-4.4 1.06-3 0-4.19 0-3.96-1.2H36.9c-.74 4.2 1.13 5.4 9.53 5.4 8.39 0 10.68-1.2 11.42-5.4.65-3.58-1.2-5.1-8.39-5.1-4.2 0-5.39-.02-5.2-1.03.2-1.06 1.4-1.06 4.4-1.06 2.38 0 4.19 0 3.96 1.2h5.97c.65-3.69-.83-5.36-9.23-5.36Z"/>
<path fill="#FFC158" d="M.84 15.81C.84 4.45 4.63.66 16 .66c11.37 0 15.15 3.79 15.15 15.15S27.36 30.96 16 30.96C4.63 30.96.84 27.17.84 15.81Z"/>
<path fill="#fff" fill-rule="evenodd" d="m16.16 8.37-5.8 8.87c-.18.28.02.65.36.65h5.32l-.99 5.37c-.08.46.52.7.77.31l5.8-8.86a.42.42 0 0 0-.36-.66H15.94l1-5.37c.08-.46-.52-.7-.78-.31Z" clip-rule="evenodd"/>
<path fill="#111" d="m77.04 8.18-1.38 7.78c-.53 3-2.9 4.2-5.33 4.2s-4.37-1.2-3.82-4.2l1.39-7.78h-6.71l-1.42 7.78c-1.08 5.97 2.14 8.39 7.63 8.39 4.28 0 7.04-1.81 7.04-1.81l.4 1.2h6.08l2.8-15.56h-6.68Z"/>
<path fill="#111" d="M98.83 7.6c-4.27 0-6.41 1.8-6.41 1.8l.23-1.19h-6.7l-4.09 22.75h6.71l1.51-8.39s1.52 1.8 5.8 1.8c5.48 0 10.05-1.8 11.24-8.38 1.15-6.62-2.8-8.4-8.29-8.4Zm1.55 8.36c-.53 3-2.9 4.2-5.33 4.2s-4.37-1.2-3.82-4.2c.53-3 2.9-4.2 5.33-4.2s4.34 1.2 3.82 4.2Z"/>
<path fill="#111" d="M121.08 7.6c-7.3 0-11.67 2.26-12.76 8.23-1.08 5.97 2.47 8.52 9.77 8.52 5.13 0 7.92-.9 10.55-3.23l-3.91-2.49c-.86.52-1.78 1.52-5.89 1.52-2.76 0-4-1.03-3.94-3.13h15.72c.1-.39.2-.77.26-1.2 1.05-6-2.5-8.22-9.8-8.22Zm-5.52 6.42c.78-1.68 2-2.26 4.76-2.26 2.73 0 3.78.55 3.95 2.26h-8.71Z"/>
<path fill="#111" d="m140.33 9.37.23-1.2h-6.7l-2.8 15.56h6.7l1.19-6.58c.76-4.2 3.91-4.78 6.35-4.78 2.4 0 3.19.26 4.76.62l.86-4.78c-.86-.26-2.9-.61-4.77-.61-4.27 0-5.82 1.77-5.82 1.77Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 151 31">
<path fill="#fff" d="M49.37 7.6c-8.39 0-10.49 1.8-11.13 5.39-.62 3.58.93 5.06 8.1 5.06 4.2 0 5.39 0 5.2 1.04-.2 1.06-1.4 1.06-4.4 1.06-3 0-4.19 0-3.96-1.2H36.9c-.74 4.2 1.13 5.4 9.53 5.4 8.39 0 10.68-1.2 11.42-5.4.65-3.58-1.2-5.1-8.39-5.1-4.2 0-5.39-.02-5.2-1.03.2-1.06 1.4-1.06 4.4-1.06 2.38 0 4.19 0 3.96 1.2h5.97c.65-3.69-.83-5.36-9.23-5.36Z"/>
<path fill="#FFC158" d="M.84 15.81C.84 4.45 4.63.66 16 .66c11.37 0 15.15 3.79 15.15 15.15S27.36 30.96 16 30.96C4.63 30.96.84 27.17.84 15.81Z"/>
<path fill="#fff" fill-rule="evenodd" d="m16.16 8.37-5.8 8.87c-.18.28.02.65.36.65h5.32l-.99 5.37c-.08.46.52.7.77.31l5.8-8.86a.42.42 0 0 0-.36-.66H15.94l1-5.37c.08-.46-.52-.7-.78-.31Z" clip-rule="evenodd"/>
<path fill="#fff" d="m77.04 8.18-1.38 7.78c-.53 3-2.9 4.2-5.33 4.2s-4.37-1.2-3.82-4.2l1.39-7.78h-6.71l-1.42 7.78c-1.08 5.97 2.14 8.39 7.63 8.39 4.28 0 7.04-1.81 7.04-1.81l.4 1.2h6.08l2.8-15.56h-6.68Z"/>
<path fill="#fff" d="M98.83 7.6c-4.27 0-6.41 1.8-6.41 1.8l.23-1.19h-6.7l-4.09 22.75h6.71l1.51-8.39s1.52 1.8 5.8 1.8c5.48 0 10.05-1.8 11.24-8.38 1.15-6.62-2.8-8.4-8.29-8.4Zm1.55 8.36c-.53 3-2.9 4.2-5.33 4.2s-4.37-1.2-3.82-4.2c.53-3 2.9-4.2 5.33-4.2s4.34 1.2 3.82 4.2Z"/>
<path fill="#fff" d="M121.08 7.6c-7.3 0-11.67 2.26-12.76 8.23-1.08 5.97 2.47 8.52 9.77 8.52 5.13 0 7.92-.9 10.55-3.23l-3.91-2.49c-.86.52-1.78 1.52-5.89 1.52-2.76 0-4-1.03-3.94-3.13h15.72c.1-.39.2-.77.26-1.2 1.05-6-2.5-8.22-9.8-8.22Zm-5.52 6.42c.78-1.68 2-2.26 4.76-2.26 2.73 0 3.78.55 3.95 2.26h-8.71Z"/>
<path fill="#fff" d="m140.33 9.37.23-1.2h-6.7l-2.8 15.56h6.7l1.19-6.58c.76-4.2 3.91-4.78 6.35-4.78 2.4 0 3.19.26 4.76.62l.86-4.78c-.86-.26-2.9-.61-4.77-.61-4.27 0-5.82 1.77-5.82 1.77Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="64" role="img" viewBox="-20 -20 343 104"><path d="M141.68 16.25c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zm117.14-14.5c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.45 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zm-39.03 3.5c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10zm82.48-29v46h-9v-46h9zM37.59.25l36.95 64H.64l36.95-64zm92.38 5l-27.71 48-27.71-48h10.39l17.32 30 17.32-30h10.39zm58.91 12v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10v14.8h-9v-34h9v9.2c0-5.08 5.91-9.2 13.2-9.2z" fill="#000"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="64" role="img" viewBox="-20 -20 343 104"><path d="M141.68 16.25c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zm117.14-14.5c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.45 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zm-39.03 3.5c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10zm82.48-29v46h-9v-46h9zM37.59.25l36.95 64H.64l36.95-64zm92.38 5l-27.71 48-27.71-48h10.39l17.32 30 17.32-30h10.39zm58.91 12v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10v14.8h-9v-34h9v9.2c0-5.08 5.91-9.2 13.2-9.2z" fill="white"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1144 256" fill="#000">
<path d="M1108.1 192V98.9h22V192h-22Zm11-106.3a12.8 12.8 0 0 1-11.7-7.3c-.7-1.4-1-3-1-4.6a11 11 0 0 1 3.8-8.4c2.4-2.3 5.6-3.6 9-3.5 3.5 0 6.4 1.2 9 3.5a11 11 0 0 1 3.7 8.4c0 3.3-1.3 6.1-3.8 8.4a12.7 12.7 0 0 1-9 3.5ZM1063.6 152.8V99h22V192h-21.3v-16.5h-1a28 28 0 0 1-10.4 12.7c-4.7 3.4-10.6 5-17.6 5a28.2 28.2 0 0 1-27-16c-2.7-5.2-4-11.6-4-19V98.9h22v55.9c0 5.9 1.5 10.6 4.8 14 3.2 3.5 7.4 5.3 12.7 5.3 3.2 0 6.4-.8 9.4-2.4 3-1.6 5.6-4 7.4-7 2-3.2 3-7.1 3-11.8ZM990.3 62l-40 148.7H931L971 62h19.2Z"/>
<path fill-rule="evenodd" d="M213.7 122.3a8 8 0 0 1 0 11.4l-80 80a8 8 0 0 1-11.4-11.4l80-80a8 8 0 0 1 11.4 0ZM197.7 34.3a8 8 0 0 1 0 11.4l-152 152a8 8 0 0 1-11.4-11.4l152-152a8 8 0 0 1 11.4 0Z" clip-rule="evenodd"/>
<path d="M857.5 137.5V192h-21.9V98.9h21v15.8h1c2.1-5 5.7-9.4 10.3-12.4 4.7-3 10.6-4.6 17.5-4.6a33 33 0 0 1 16.8 4.1c4.8 2.8 8.7 7 11.2 12 2.6 5.2 4 11.5 3.9 19V192h-22v-55.9c0-6.2-1.5-11-4.8-14.6a17 17 0 0 0-13.3-5.3c-3.8 0-7.2.9-10.2 2.6-3 1.7-5.4 4.2-7 7.2-1.6 3.2-2.5 7-2.5 11.5ZM777.7 193.8a40.9 40.9 0 0 1-39.3-23 55.8 55.8 0 0 1-5.3-25 55 55 0 0 1 5.5-25c3.4-7 8.7-13 15.4-17 6.6-4 14.5-6.1 23.6-6.1a46 46 0 0 1 20 4.2 34.3 34.3 0 0 1 20 29.3h-21a20 20 0 0 0-6-11.3c-3.2-3-7.4-4.5-12.7-4.5-4.2 0-8.4 1.2-11.8 3.6-3.4 2.4-6 5.8-8 10.3a42 42 0 0 0-2.8 16.2c0 6.3 1 11.8 2.8 16.3 1.9 4.5 4.5 8 7.9 10.5a20 20 0 0 0 11.9 3.6c3.2 0 6.1-.6 8.7-1.8 2.5-1.2 4.8-3 6.4-5.4 1.9-2.5 3-5.4 3.6-8.5h21a34.5 34.5 0 0 1-19.5 29.4 45.9 45.9 0 0 1-20.4 4.2ZM664.1 193.6a35.2 35.2 0 0 1-33.3-22 61 61 0 0 1-5-26c0-10.4 1.7-19.1 5-26.2 3.5-7.2 8.1-12.6 14-16.2a35.7 35.7 0 0 1 32.9-2.7c3.2 1.6 6 3.8 8.3 6.6 1.9 2.2 3.5 4.6 4.8 7.2h1V67.9h22V192h-21.6v-14.7h-1.4c-1.3 2.6-3 5-4.9 7.2a27 27 0 0 1-21.8 9.1Zm6.2-18a19 19 0 0 0 11.9-3.7c3.2-2.6 5.7-6.1 7.4-10.6a45 45 0 0 0 2.5-15.8c0-6-.8-11.3-2.5-15.7a22.4 22.4 0 0 0-7.4-10.4 19.1 19.1 0 0 0-12-3.7c-4.8 0-8.9 1.3-12.2 3.8-3.2 2.6-5.7 6-7.4 10.6a44.4 44.4 0 0 0-2.5 15.4c0 5.8.9 11 2.5 15.5 1.7 4.6 4.2 8.1 7.5 10.8 3.3 2.5 7.4 3.8 12.2 3.8ZM558.4 193.9c-5.9 0-11.2-1-16-3.2a26 26 0 0 1-11.1-9.4c-2.7-4.2-4-9.3-4-15.4 0-5.3 1-9.6 2.9-13 1.8-3.4 4.6-6.3 7.9-8.3a40 40 0 0 1 11.3-4.7c4.3-1 8.7-1.9 13.2-2.3l13.3-1.5c3.4-.5 5.8-1.3 7.4-2.2 1.5-1 2.3-2.6 2.3-4.7v-.3c0-4.6-1.4-8.2-4-10.7-2.8-2.5-6.7-3.7-11.8-3.7a21 21 0 0 0-12.7 3.5 17.4 17.4 0 0 0-6.3 8.3l-20.5-2.9a32.7 32.7 0 0 1 21.6-22.8 58.2 58.2 0 0 1 31.2-1.3c4.4 1 8.5 2.7 12.2 5.2 3.7 2.4 6.8 5.8 8.9 9.7 2.2 4.2 3.3 9.3 3.3 15.5V192h-21v-12.8h-.8a26.8 26.8 0 0 1-14.6 12.7c-3.6 1.3-7.9 2-12.7 2Zm5.7-16.1c4.4 0 8.2-1 11.4-2.6 3.1-1.7 5.7-4.1 7.5-7 1.8-3 2.7-6.2 2.7-9.6v-11c-.7.6-1.9 1.1-3.6 1.6a196.3 196.3 0 0 1-11.4 2.3l-5.2.7c-3.2.4-6.2 1.2-8.7 2.2-2.4.8-4.5 2.3-6.2 4.2-1.5 1.8-2.2 4-2.2 7 0 4 1.5 7 4.4 9 3 2.1 6.7 3.2 11.3 3.2ZM448.9 137.5V192h-22V67.9h21.5v46.8h1c2.1-5 5.7-9.4 10.2-12.4a31 31 0 0 1 17.6-4.6c6.4 0 12 1.3 16.9 4 4.8 2.8 8.5 6.7 11.1 12 2.7 5.1 4 11.5 4 19V192h-21.9v-55.9c0-6.2-1.6-11.1-4.9-14.6a17.2 17.2 0 0 0-13.4-5.3c-3.9 0-7.4.9-10.4 2.6-3 1.6-5.5 4.2-7.2 7.2-1.7 3.2-2.5 7-2.5 11.5ZM406.9 123.5l-20 2.2a16 16 0 0 0-8.6-10 20.1 20.1 0 0 0-8.6-1.6c-4.6 0-8.4 1-11.5 3-3 2-4.6 4.5-4.6 7.6a8 8 0 0 0 3 6.6c2 1.7 5.5 3.1 10.2 4.2l15.9 3.4a40 40 0 0 1 19.6 9c4.3 4.2 6.5 9.6 6.6 16.2 0 5.6-1.8 11-5.2 15.5a33 33 0 0 1-14 10.5 53 53 0 0 1-20.6 3.7 47.8 47.8 0 0 1-27.5-7.1 28.8 28.8 0 0 1-12.5-20l21.4-2.2c1 4.2 3 7.4 6.2 9.6 3.2 2.1 7.3 3.2 12.3 3.2 5.2 0 9.4-1.1 12.6-3.2 3.2-2.2 4.8-4.8 4.8-8a8.3 8.3 0 0 0-3.1-6.6c-2-1.7-5.2-3-9.5-4l-15.9-3.3c-8.9-1.9-15.5-5-19.8-9.4a23 23 0 0 1-6.3-16.9c0-5.7 1.5-10.7 4.6-14.9 3.2-4.2 7.6-7.5 13.3-9.8a51.5 51.5 0 0 1 19.7-3.5c10.9 0 19.5 2.3 25.8 7 6.3 4.6 10.2 10.9 11.7 18.8Z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="#fff" viewBox="0 0 1144 256">
<path d="M1108.1 192V98.9h22V192h-22Zm11-106.3a12.8 12.8 0 0 1-11.7-7.3c-.7-1.4-1-3-1-4.6a11 11 0 0 1 3.8-8.4c2.4-2.3 5.6-3.6 9-3.5 3.5 0 6.4 1.2 9 3.5a11 11 0 0 1 3.7 8.4c0 3.3-1.3 6.1-3.8 8.4a12.7 12.7 0 0 1-9 3.5ZM1063.6 152.8V99h22V192h-21.3v-16.5h-1a28 28 0 0 1-10.4 12.7c-4.7 3.4-10.6 5-17.6 5a28.2 28.2 0 0 1-27-16c-2.7-5.2-4-11.6-4-19V98.9h22v55.9c0 5.9 1.5 10.6 4.8 14 3.2 3.5 7.4 5.3 12.7 5.3 3.2 0 6.4-.8 9.4-2.4 3-1.6 5.6-4 7.4-7 2-3.2 3-7.1 3-11.8ZM990.3 62l-40 148.7H931L971 62h19.2Z"/>
<path fill-rule="evenodd" d="M213.7 122.3a8 8 0 0 1 0 11.4l-80 80a8 8 0 0 1-11.4-11.4l80-80a8 8 0 0 1 11.4 0ZM197.7 34.3a8 8 0 0 1 0 11.4l-152 152a8 8 0 0 1-11.4-11.4l152-152a8 8 0 0 1 11.4 0Z" clip-rule="evenodd"/>
<path d="M857.5 137.5V192h-21.9V98.9h21v15.8h1c2.1-5 5.7-9.4 10.3-12.4 4.7-3 10.6-4.6 17.5-4.6a33 33 0 0 1 16.8 4.1c4.8 2.8 8.7 7 11.2 12 2.6 5.2 4 11.5 3.9 19V192h-22v-55.9c0-6.2-1.5-11-4.8-14.6a17 17 0 0 0-13.3-5.3c-3.8 0-7.2.9-10.2 2.6-3 1.7-5.4 4.2-7 7.2-1.6 3.2-2.5 7-2.5 11.5ZM777.7 193.8a40.9 40.9 0 0 1-39.3-23 55.8 55.8 0 0 1-5.3-25 55 55 0 0 1 5.5-25c3.4-7 8.7-13 15.4-17 6.6-4 14.5-6.1 23.6-6.1a46 46 0 0 1 20 4.2 34.3 34.3 0 0 1 20 29.3h-21a20 20 0 0 0-6-11.3c-3.2-3-7.4-4.5-12.7-4.5-4.2 0-8.4 1.2-11.8 3.6-3.4 2.4-6 5.8-8 10.3a42 42 0 0 0-2.8 16.2c0 6.3 1 11.8 2.8 16.3 1.9 4.5 4.5 8 7.9 10.5a20 20 0 0 0 11.9 3.6c3.2 0 6.1-.6 8.7-1.8 2.5-1.2 4.8-3 6.4-5.4 1.9-2.5 3-5.4 3.6-8.5h21a34.5 34.5 0 0 1-19.5 29.4 45.9 45.9 0 0 1-20.4 4.2ZM664.1 193.6a35.2 35.2 0 0 1-33.3-22 61 61 0 0 1-5-26c0-10.4 1.7-19.1 5-26.2 3.5-7.2 8.1-12.6 14-16.2a35.7 35.7 0 0 1 32.9-2.7c3.2 1.6 6 3.8 8.3 6.6 1.9 2.2 3.5 4.6 4.8 7.2h1V67.9h22V192h-21.6v-14.7h-1.4c-1.3 2.6-3 5-4.9 7.2a27 27 0 0 1-21.8 9.1Zm6.2-18a19 19 0 0 0 11.9-3.7c3.2-2.6 5.7-6.1 7.4-10.6a45 45 0 0 0 2.5-15.8c0-6-.8-11.3-2.5-15.7a22.4 22.4 0 0 0-7.4-10.4 19.1 19.1 0 0 0-12-3.7c-4.8 0-8.9 1.3-12.2 3.8-3.2 2.6-5.7 6-7.4 10.6a44.4 44.4 0 0 0-2.5 15.4c0 5.8.9 11 2.5 15.5 1.7 4.6 4.2 8.1 7.5 10.8 3.3 2.5 7.4 3.8 12.2 3.8ZM558.4 193.9c-5.9 0-11.2-1-16-3.2a26 26 0 0 1-11.1-9.4c-2.7-4.2-4-9.3-4-15.4 0-5.3 1-9.6 2.9-13 1.8-3.4 4.6-6.3 7.9-8.3a40 40 0 0 1 11.3-4.7c4.3-1 8.7-1.9 13.2-2.3l13.3-1.5c3.4-.5 5.8-1.3 7.4-2.2 1.5-1 2.3-2.6 2.3-4.7v-.3c0-4.6-1.4-8.2-4-10.7-2.8-2.5-6.7-3.7-11.8-3.7a21 21 0 0 0-12.7 3.5 17.4 17.4 0 0 0-6.3 8.3l-20.5-2.9a32.7 32.7 0 0 1 21.6-22.8 58.2 58.2 0 0 1 31.2-1.3c4.4 1 8.5 2.7 12.2 5.2 3.7 2.4 6.8 5.8 8.9 9.7 2.2 4.2 3.3 9.3 3.3 15.5V192h-21v-12.8h-.8a26.8 26.8 0 0 1-14.6 12.7c-3.6 1.3-7.9 2-12.7 2Zm5.7-16.1c4.4 0 8.2-1 11.4-2.6 3.1-1.7 5.7-4.1 7.5-7 1.8-3 2.7-6.2 2.7-9.6v-11c-.7.6-1.9 1.1-3.6 1.6a196.3 196.3 0 0 1-11.4 2.3l-5.2.7c-3.2.4-6.2 1.2-8.7 2.2-2.4.8-4.5 2.3-6.2 4.2-1.5 1.8-2.2 4-2.2 7 0 4 1.5 7 4.4 9 3 2.1 6.7 3.2 11.3 3.2ZM448.9 137.5V192h-22V67.9h21.5v46.8h1c2.1-5 5.7-9.4 10.2-12.4a31 31 0 0 1 17.6-4.6c6.4 0 12 1.3 16.9 4 4.8 2.8 8.5 6.7 11.1 12 2.7 5.1 4 11.5 4 19V192h-21.9v-55.9c0-6.2-1.6-11.1-4.9-14.6a17.2 17.2 0 0 0-13.4-5.3c-3.9 0-7.4.9-10.4 2.6-3 1.6-5.5 4.2-7.2 7.2-1.7 3.2-2.5 7-2.5 11.5ZM406.9 123.5l-20 2.2a16 16 0 0 0-8.6-10 20.1 20.1 0 0 0-8.6-1.6c-4.6 0-8.4 1-11.5 3-3 2-4.6 4.5-4.6 7.6a8 8 0 0 0 3 6.6c2 1.7 5.5 3.1 10.2 4.2l15.9 3.4a40 40 0 0 1 19.6 9c4.3 4.2 6.5 9.6 6.6 16.2 0 5.6-1.8 11-5.2 15.5a33 33 0 0 1-14 10.5 53 53 0 0 1-20.6 3.7 47.8 47.8 0 0 1-27.5-7.1 28.8 28.8 0 0 1-12.5-20l21.4-2.2c1 4.2 3 7.4 6.2 9.6 3.2 2.1 7.3 3.2 12.3 3.2 5.2 0 9.4-1.1 12.6-3.2 3.2-2.2 4.8-4.8 4.8-8a8.3 8.3 0 0 0-3.1-6.6c-2-1.7-5.2-3-9.5-4l-15.9-3.3c-8.9-1.9-15.5-5-19.8-9.4a23 23 0 0 1-6.3-16.9c0-5.7 1.5-10.7 4.6-14.9 3.2-4.2 7.6-7.5 13.3-9.8a51.5 51.5 0 0 1 19.7-3.5c10.9 0 19.5 2.3 25.8 7 6.3 4.6 10.2 10.9 11.7 18.8Z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

+43
View File
@@ -0,0 +1,43 @@
<svg
width="373"
height="41"
viewBox="0 0 373 41"
xmlns="http://www.w3.org/2000/svg"
>
<polygon
shapeRendering="crispEdges"
fill="#f76808"
points="24.3870968 40.1612903 24.3870968 8.67741935 32.2580645 8.67741935 32.2580645 0.806451613 0.774193548 0.806451613 0.774193548 8.67741935 8.64516129 8.67741935 8.64516129 40.1612903"
/>
<path
shapeRendering="crispEdges"
fill="#f5d90a"
d="M87.3548387,0.806451613 L87.3548387,8.67741935 L95.2258065,8.67741935 L95.2258065,40.1612903 L79.483871,40.1612903 L79.483871,24.4193548 L71.6129032,24.4193548 L71.6129032,40.1612903 L55.8709677,40.1612903 L55.8709677,8.67741935 L63.7419355,8.67741935 L63.7419355,0.806451613 L87.3548387,0.806451613 Z M79.483871,8.67741935 L71.6129032,8.67741935 L71.6129032,16.5483871 L79.483871,16.5483871 L79.483871,8.67741935 Z"
fillRule="nonzero"
/>
<polygon
shapeRendering="crispEdges"
fill="#30a46c"
points="130.645161 40.1612903 130.645161 22.4516129 138.516129 22.4516129 138.516129 40.1612903 154.258065 40.1612903 154.258065 0.806451613 142.451613 0.806451613 142.451613 8.67741935 126.709677 8.67741935 126.709677 0.806451613 114.903226 0.806451613 114.903226 40.1612903"
/>
<path
fill="#0091ff"
d="M205.419355,0.806451613 L205.419355,8.67741935 L213.290323,8.67741935 L213.290323,40.1612903 L197.548387,40.1612903 L197.548387,24.4193548 L189.677419,24.4193548 L189.677419,40.1612903 L173.935484,40.1612903 L173.935484,8.67741935 L181.806452,8.67741935 L181.806452,0.806451613 L205.419355,0.806451613 Z M197.548387,8.67741935 L189.677419,8.67741935 L189.677419,16.5483871 L197.548387,16.5483871 L197.548387,8.67741935 Z"
fillRule="nonzero"
/>
<polygon
shapeRendering="crispEdges"
fill="#8e4ec6"
points="264.451613 40.1612903 264.451613 32.2903226 272.322581 32.2903226 272.322581 16.5483871 256.580645 16.5483871 256.580645 32.2903226 248.709677 32.2903226 248.709677 8.67741935 272.322581 8.67741935 272.322581 0.806451613 240.83871 0.806451613 240.83871 8.67741935 232.967742 8.67741935 232.967742 32.2903226 240.83871 32.2903226 240.83871 40.1612903"
/>
<polygon
shapeRendering="crispEdges"
fill="#d6409f"
points="323.483871 40.1612903 323.483871 32.2903226 331.354839 32.2903226 331.354839 0.806451613 315.612903 0.806451613 315.612903 32.2903226 307.741935 32.2903226 307.741935 0.806451613 292 0.806451613 292 32.2903226 299.870968 32.2903226 299.870968 40.1612903"
/>
<polygon
shapeRendering="crispEdges"
fill="#e5484d"
points="372.677419 40.1612903 372.677419 0.806451613 356.935484 0.806451613 356.935484 40.1612903"
/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

+22
View File
@@ -0,0 +1,22 @@
---
layout: page
outline: 2
outlineTitle: Showcase
---
<script setup>
import PageContainer from '.vitepress/theme/components/PageContainer.vue'
import ShowcaseList from '.vitepress/theme/components/showcase/ShowcaseList.vue'
</script>
<div class="VPDoc content">
<PageContainer>
<ShowcaseList />
</PageContainer>
</div>
<style scoped>
.container {
margin: 0 auto;
max-width: 1200px;
}
</style>
+15 -2
View File
@@ -12,13 +12,17 @@
},
"title": "Lucide Icons icon schema",
"type": "object",
"additionalProperties": false,
"required": ["$schema", "categories", "tags"],
"properties": {
"tags": {
"$schema": {
"const": "../icon.schema.json"
},
"aliases": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"uniqueItems": true
},
"categories": {
@@ -33,6 +37,15 @@
"items": {
"type": "string"
},
"minItems": 1,
"uniqueItems": true
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"uniqueItems": true
}
},
+1 -1
View File
@@ -10,7 +10,7 @@
stroke-linejoin="round"
>
<path d="M19 9V6a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v3" />
<path d="M3 11v5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v2H7v-2a2 2 0 0 0-4 0Z" />
<path d="M3 16a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v2H7v-2a2 2 0 0 0-4 0Z" />
<path d="M5 18v2" />
<path d="M19 18v2" />
</svg>

Before

Width:  |  Height:  |  Size: 403 B

After

Width:  |  Height:  |  Size: 401 B

+1 -1
View File
@@ -9,7 +9,7 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M4 20V10a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2Z" />
<path d="M4 10a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2Z" />
<path d="M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2" />
<path d="M8 21v-5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v5" />
<path d="M8 10h8" />

Before

Width:  |  Height:  |  Size: 452 B

After

Width:  |  Height:  |  Size: 449 B

+22
View File
@@ -0,0 +1,22 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley"
],
"tags": [
"scan",
"checkout",
"till",
"cart",
"transaction",
"purchase",
"buy",
"product",
"packaging",
"retail",
"consumer"
],
"categories": [
"shopping"
]
}
+17
View File
@@ -0,0 +1,17 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M3 5v14" />
<path d="M8 5v14" />
<path d="M12 5v14" />
<path d="M17 5v14" />
<path d="M21 5v14" />
</svg>

After

Width:  |  Height:  |  Size: 326 B

+1 -1
View File
@@ -10,6 +10,6 @@
stroke-linejoin="round"
>
<circle cx="11" cy="13" r="9" />
<path d="m19.5 9.5 1.8-1.8a2.4 2.4 0 0 0 0-3.4l-1.6-1.6a2.4 2.4 0 0 0-3.4 0l-1.8 1.8" />
<path d="M14.35 4.65 16.3 2.7a2.41 2.41 0 0 1 3.4 0l1.6 1.6a2.4 2.4 0 0 1 0 3.4l-1.95 1.95" />
<path d="m22 2-1.5 1.5" />
</svg>

Before

Width:  |  Height:  |  Size: 363 B

After

Width:  |  Height:  |  Size: 369 B

+51
View File
@@ -0,0 +1,51 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley"
],
"tags": [
"dictionary",
"define",
"definition",
"thesaurus",
"encyclopedia",
"encyclopaedia",
"reading",
"booklet",
"magazine",
"leaflet",
"pamphlet",
"tome",
"library",
"writing",
"written",
"writer",
"author",
"story",
"script",
"fiction",
"novel",
"information",
"knowledge",
"education",
"high school",
"university",
"college",
"academy",
"student",
"study",
"learning",
"homework",
"research",
"language",
"translate",
"alphabetical",
"a-z",
"ordered"
],
"categories": [
"text",
"maps",
"gaming"
]
}
+15
View File
@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20" />
<path d="m8 13 4-7 4 7" />
<path d="M9.1 11h5.7" />
</svg>

After

Width:  |  Height:  |  Size: 342 B

+26
View File
@@ -0,0 +1,26 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley"
],
"tags": [
"audiobook",
"reading",
"listening",
"sound",
"story",
"fiction",
"novel",
"information",
"knowledge",
"education",
"student",
"study",
"learning",
"research"
],
"categories": [
"multimedia",
"text"
]
}
+16
View File
@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20" />
<path d="M8 8v3" />
<path d="M12 6v7" />
<path d="M16 8v3" />
</svg>

After

Width:  |  Height:  |  Size: 354 B

+50
View File
@@ -0,0 +1,50 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley"
],
"tags": [
"read",
"booklet",
"magazine",
"leaflet",
"pamphlet",
"library",
"written",
"authored",
"published",
"informed",
"knowledgeable",
"educated",
"schooled",
"homework",
"examined",
"tested",
"marked",
"passed",
"graduated",
"studied",
"learned",
"lesson",
"researched",
"documented",
"revealed",
"blank",
"plain language",
"true",
"truth",
"verified",
"corrected",
"task",
"todo",
"done",
"completed",
"finished",
"ticked"
],
"categories": [
"text",
"development",
"gaming"
]
}

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