Compare commits
125 Commits
0.288.0
...
lucide-vue
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d1d57d3c85 | ||
|
|
701c2fb6b2 | ||
|
|
294ec9c727 | ||
|
|
99c883e60a | ||
|
|
9e68779d22 | ||
|
|
06372db723 | ||
|
|
114fb08556 | ||
|
|
3bad7f6ced | ||
|
|
e450afe408 | ||
|
|
6fcfc820ca | ||
|
|
55f264bea6 | ||
|
|
675158df16 | ||
|
|
042393a931 | ||
|
|
551635003c | ||
|
|
5c7119f6d1 | ||
|
|
7bfdb2f54a | ||
|
|
e3abcdbcc6 | ||
|
|
62d350140e | ||
|
|
ad90ee7582 | ||
|
|
b0e825cb57 | ||
|
|
d4cbe899fb | ||
|
|
be3ccc8ece | ||
|
|
e56b09d400 | ||
|
|
7e936c8803 | ||
|
|
c9ffa4033f | ||
|
|
32a6187d69 | ||
|
|
2bf20db4bf | ||
|
|
4473df5ad5 | ||
|
|
bc5efd7f0d | ||
|
|
05f209cb04 | ||
|
|
ef89510a47 | ||
|
|
b72cea6399 | ||
|
|
d2152b3cdd | ||
|
|
ea43df6431 | ||
|
|
4042a366e8 | ||
|
|
5e0ba7e897 | ||
|
|
6b4f575992 | ||
|
|
92784de9c5 | ||
|
|
314ee3b255 | ||
|
|
ee7add11bf | ||
|
|
001d0a51fb | ||
|
|
fd4308e755 | ||
|
|
59893119b5 | ||
|
|
faff6a8269 | ||
|
|
3fe74beeb0 | ||
|
|
f8aafd63b9 | ||
|
|
f0422f415c | ||
|
|
14a196d89c | ||
|
|
87a89b30da | ||
|
|
3180910b23 | ||
|
|
46a4041cc7 | ||
|
|
e3166c65df | ||
|
|
d9d7e245a3 | ||
|
|
e19a9cc43a | ||
|
|
5ecfd61397 | ||
|
|
5366782da0 | ||
|
|
262f9e8865 | ||
|
|
7af26002a0 | ||
|
|
e71a776acc | ||
|
|
0a69fb9e52 | ||
|
|
3648e02992 | ||
|
|
64504da1cd | ||
|
|
e166ba4e80 | ||
|
|
1123214b13 | ||
|
|
4140ba5612 | ||
|
|
019f38281c | ||
|
|
633595d1c1 | ||
|
|
df58c3ff2f | ||
|
|
e7abba5273 | ||
|
|
2693da38d3 | ||
|
|
ab59a1ec36 | ||
|
|
315c020279 | ||
|
|
494f7953c8 | ||
|
|
a5ea3a5368 | ||
|
|
6486f76c55 | ||
|
|
e32db96f1f | ||
|
|
73f70c885a | ||
|
|
14c7ea8e13 | ||
|
|
9fc7653dc1 | ||
|
|
2b007e7962 | ||
|
|
bb1e470f3a | ||
|
|
4a1e6bbfa5 | ||
|
|
e5ee997566 | ||
|
|
27c0a136cd | ||
|
|
84b3c46b65 | ||
|
|
1a09e7fb39 | ||
|
|
75e9724072 | ||
|
|
fbaccc7d9f | ||
|
|
c24bc4d7ef | ||
|
|
5c8c8f4362 | ||
|
|
ffd2a62941 | ||
|
|
e77959e1a6 | ||
|
|
149ee36e61 | ||
|
|
88bf60b5d7 | ||
|
|
1e5df716a4 | ||
|
|
fc0ea760e5 | ||
|
|
c85275899a | ||
|
|
288edde1ea | ||
|
|
207ff6c487 | ||
|
|
a1a9a4d839 | ||
|
|
c5804ad9a5 | ||
|
|
c72fb4a28b | ||
|
|
da5ad547b5 | ||
|
|
66cfe527b3 | ||
|
|
d1866225ba | ||
|
|
372735999f | ||
|
|
f3a33346dd | ||
|
|
3373acf596 | ||
|
|
73d5bfc318 | ||
|
|
ddbc074aa3 | ||
|
|
8f4d6b1651 | ||
|
|
d8b08f8fda | ||
|
|
fddacb6260 | ||
|
|
3d0c8691c9 | ||
|
|
47998b05aa | ||
|
|
9a9e051343 | ||
|
|
6c6c8448fa | ||
|
|
49445aad3a | ||
|
|
70656eb4f0 | ||
|
|
930f862547 | ||
|
|
931b7f5376 | ||
|
|
81e44bdc40 | ||
|
|
e6e90944b9 | ||
|
|
f6fd369bfe | ||
|
|
bbf183fe48 |
@@ -4,3 +4,8 @@ coverage
|
|||||||
lib
|
lib
|
||||||
tests
|
tests
|
||||||
node_modules
|
node_modules
|
||||||
|
.eslintrc.js
|
||||||
|
docs/images
|
||||||
|
docs/guide/basics/examples
|
||||||
|
docs/guide/advanced/examples
|
||||||
|
packages/lucide-react/dynamicIconImports.js
|
||||||
|
|||||||
48
.eslintrc.js
@@ -1,22 +1,18 @@
|
|||||||
|
const DEFAULT_ATTRS = require('./scripts/render/default-attrs.json');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
root: true,
|
||||||
env: {
|
env: {
|
||||||
browser: true,
|
browser: true,
|
||||||
node: true,
|
node: true,
|
||||||
},
|
},
|
||||||
extends: ['airbnb-base', 'prettier'],
|
extends: ['airbnb-base', 'prettier'],
|
||||||
plugins: ['import', 'prettier'],
|
plugins: ['import', '@html-eslint'],
|
||||||
rules: {
|
rules: {
|
||||||
'no-console': 'off',
|
'no-console': 'off',
|
||||||
'no-param-reassign': 'off',
|
'no-param-reassign': 'off',
|
||||||
'no-shadow': 'off',
|
'no-shadow': 'off',
|
||||||
'no-use-before-define': 'off',
|
'no-use-before-define': 'off',
|
||||||
'prettier/prettier': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
singleQuote: true,
|
|
||||||
trailingComma: 'all',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'import/no-extraneous-dependencies': [
|
'import/no-extraneous-dependencies': [
|
||||||
'error',
|
'error',
|
||||||
{ devDependencies: ['**/*.test.js', '**/*.spec.js', './scripts/**'] },
|
{ devDependencies: ['**/*.test.js', '**/*.spec.js', './scripts/**'] },
|
||||||
@@ -33,8 +29,42 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
tsconfigRootDir: __dirname,
|
tsconfigRootDir: __dirname,
|
||||||
project: ['./site/tsconfig.json', './packages/*/tsconfig.json'],
|
project: ['./docs/tsconfig.json', './packages/*/tsconfig.json'],
|
||||||
ecmaVersion: 'latest',
|
ecmaVersion: 'latest',
|
||||||
sourceType: 'module',
|
sourceType: 'module',
|
||||||
},
|
},
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
files: ['./icons/*.svg'],
|
||||||
|
parser: '@html-eslint/parser',
|
||||||
|
rules: {
|
||||||
|
'@html-eslint/require-doctype': 'off',
|
||||||
|
'@html-eslint/no-duplicate-attrs': 'error',
|
||||||
|
'@html-eslint/no-inline-styles': 'error',
|
||||||
|
'@html-eslint/require-attrs': [
|
||||||
|
'error',
|
||||||
|
...Object.entries(DEFAULT_ATTRS)
|
||||||
|
.map(([attr, value]) => ({ tag: 'svg', attr, value: String(value) }))
|
||||||
|
],
|
||||||
|
'@html-eslint/indent': ['error', 2],
|
||||||
|
"@html-eslint/no-multiple-empty-lines": ["error", { "max": 0 }],
|
||||||
|
'@html-eslint/no-extra-spacing-attrs': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
enforceBeforeSelfClose: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'@html-eslint/require-closing-tags': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
selfClosing: 'always',
|
||||||
|
allowSelfClosingCustom: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'@html-eslint/element-newline': 'error',
|
||||||
|
'@html-eslint/no-trailing-spaces': 'error',
|
||||||
|
'@html-eslint/quotes': 'error',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
};
|
};
|
||||||
|
|||||||
8
.github/actions/build-and-test.yml
vendored
@@ -9,16 +9,16 @@ inputs:
|
|||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 16
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
- uses: pnpm/action-setup@v2
|
||||||
name: Install pnpm
|
name: Install pnpm
|
||||||
id: pnpm-install
|
id: pnpm-install
|
||||||
with:
|
with:
|
||||||
version: 7
|
version: 8
|
||||||
run_install: false
|
run_install: false
|
||||||
|
|
||||||
- name: Get pnpm store directory
|
- name: Get pnpm store directory
|
||||||
|
|||||||
8
.github/actions/check-icons.yml
vendored
@@ -9,16 +9,16 @@ inputs:
|
|||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 16
|
||||||
|
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
- uses: pnpm/action-setup@v2
|
||||||
name: Install pnpm
|
name: Install pnpm
|
||||||
id: pnpm-install
|
id: pnpm-install
|
||||||
with:
|
with:
|
||||||
version: 7
|
version: 8
|
||||||
run_install: false
|
run_install: false
|
||||||
|
|
||||||
- name: Get pnpm store directory
|
- name: Get pnpm store directory
|
||||||
|
|||||||
66
.github/labeler.yml
vendored
@@ -1,62 +1,92 @@
|
|||||||
# For changed dependencies
|
# For changed dependencies
|
||||||
📦 dependencies:
|
📦 dependencies:
|
||||||
- pnpm-lock.yaml
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- pnpm-lock.yaml
|
||||||
|
|
||||||
# For changes in documentation
|
# For changes in documentation
|
||||||
📖 documentation:
|
📖 documentation:
|
||||||
- docs/*.md
|
- changed-files:
|
||||||
- docs/**/*.md
|
- any-glob-to-any-file:
|
||||||
|
- docs/*.md
|
||||||
|
- docs/**/*.md
|
||||||
|
|
||||||
# For changes in the site, but not markdown files
|
# For changes in the site, but not markdown files
|
||||||
🌍 site:
|
🌍 site:
|
||||||
- 'docs/**'
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- 'docs/**'
|
||||||
|
|
||||||
# For changes in the metadata
|
# For changes in the metadata
|
||||||
🫧 metadata:
|
🫧 metadata:
|
||||||
- 'icons/*.json'
|
- changed-files:
|
||||||
- categories/*
|
- any-glob-to-any-file:
|
||||||
|
- 'icons/*.json'
|
||||||
|
- categories/*
|
||||||
|
|
||||||
# For changes or added icons
|
# For changes or added icons
|
||||||
🎨 icon:
|
🎨 icon:
|
||||||
- 'icons/*.svg'
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- 'icons/*.svg'
|
||||||
|
|
||||||
# For changes in the lucide package
|
# For changes in the lucide package
|
||||||
🧳 lucide package:
|
🧳 lucide package:
|
||||||
- 'packages/lucide/*'
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- 'packages/lucide/*'
|
||||||
|
|
||||||
# For changes in the lucide React package
|
# For changes in the lucide React package
|
||||||
⚛️ react package:
|
⚛️ react package:
|
||||||
- 'packages/lucide-react/*'
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- 'packages/lucide-react/*'
|
||||||
|
|
||||||
# For changes in the lucide React Native package
|
# For changes in the lucide React Native package
|
||||||
⚛️ react native package:
|
⚛️ react native package:
|
||||||
- 'packages/lucide-react-native/*'
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- 'packages/lucide-react-native/*'
|
||||||
|
|
||||||
# For changes in the lucide vue packages
|
# For changes in the lucide vue packages
|
||||||
💎 vue package:
|
💎 vue package:
|
||||||
- 'packages/lucide-vue/*'
|
- changed-files:
|
||||||
- 'packages/lucide-vue-next/*'
|
- any-glob-to-any-file:
|
||||||
|
- 'packages/lucide-vue/*'
|
||||||
|
- 'packages/lucide-vue-next/*'
|
||||||
|
|
||||||
# For changes in the lucide angular package
|
# For changes in the lucide angular package
|
||||||
🅰️ angular package:
|
🅰️ angular package:
|
||||||
- 'packages/lucide-angular/*'
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- 'packages/lucide-angular/*'
|
||||||
|
|
||||||
# For changes in the lucide preact package
|
# For changes in the lucide preact package
|
||||||
⚛️ preact package:
|
⚛️ preact package:
|
||||||
- 'packages/lucide-preact/*'
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- 'packages/lucide-preact/*'
|
||||||
|
|
||||||
# For changes in the lucide svelte package
|
# For changes in the lucide svelte package
|
||||||
🧣 svelte package:
|
🧣 svelte package:
|
||||||
- 'packages/lucide-svelte/*'
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- 'packages/lucide-svelte/*'
|
||||||
|
|
||||||
# For changes in the lucide solid package
|
# For changes in the lucide solid package
|
||||||
🪝 solid package:
|
🪝 solid package:
|
||||||
- 'packages/lucide-solid/*'
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- 'packages/lucide-solid/*'
|
||||||
|
|
||||||
# For changes in the lucide static package
|
# For changes in the lucide static package
|
||||||
🪨 static package:
|
🪨 static package:
|
||||||
- 'packages/lucide-static/*'
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- 'packages/lucide-static/*'
|
||||||
|
|
||||||
# For changes in the lucide flutter package
|
# For changes in the lucide flutter package
|
||||||
🏹 flutter package:
|
🏹 flutter package:
|
||||||
- 'packages/lucide-flutter/*'
|
- changed-files:
|
||||||
|
- any-glob-to-any-file:
|
||||||
|
- 'packages/lucide-flutter/*'
|
||||||
|
|||||||
33
.github/workflows/ci.yml
vendored
@@ -15,33 +15,17 @@ jobs:
|
|||||||
VERSION: ${{ steps.new-version.outputs.NEW_VERSION }}
|
VERSION: ${{ steps.new-version.outputs.NEW_VERSION }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Fetch tags
|
- name: Fetch tags
|
||||||
run: git fetch --all --tags
|
run: git fetch --all --tags
|
||||||
@@ -50,9 +34,6 @@ jobs:
|
|||||||
id: latest-tag
|
id: latest-tag
|
||||||
run: echo "LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`)" >> $GITHUB_OUTPUT
|
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
|
- name: Check if we can patch
|
||||||
run: .github/workflows/version-up.sh --minor
|
run: .github/workflows/version-up.sh --minor
|
||||||
|
|
||||||
|
|||||||
5
.github/workflows/close-stale-prs.yml
vendored
@@ -7,12 +7,11 @@ jobs:
|
|||||||
stale:
|
stale:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v3
|
- uses: actions/stale@v9
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
stale-pr-message: This PR is stale because it has been open 45 days with no activity. Remove stale label or comment or this will be closed in 5 days.
|
stale-pr-message: This PR is stale because it has been open 45 days with no activity. Remove stale label or comment or this will be closed in 5 days.
|
||||||
close-pr-message: This PR was closed because it has been stalled for 5 days with no activity.
|
close-pr-message: This PR was closed because it has been stalled for 5 days with no activity.
|
||||||
close-pr-label: 🧶 stale
|
close-pr-label: 🧶 stale
|
||||||
days-before-stale: 30
|
days-before-stale: 30
|
||||||
days-before-close: 5
|
days-before-close: -1
|
||||||
days-before-pr-close: -1
|
|
||||||
|
|||||||
2
.github/workflows/labeler.yml
vendored
@@ -9,4 +9,4 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/labeler@v4
|
- uses: actions/labeler@v5
|
||||||
|
|||||||
25
.github/workflows/linting.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
name: Linting
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- '**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linting:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: pnpm/action-setup@v2
|
||||||
|
with:
|
||||||
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 18
|
||||||
|
cache: 'pnpm'
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Run Linter
|
||||||
|
run: pnpm lint
|
||||||
30
.github/workflows/lucide-angular.yml
vendored
@@ -11,33 +11,17 @@ jobs:
|
|||||||
lucide-angular:
|
lucide-angular:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: pnpm --filter lucide-angular build
|
run: pnpm --filter lucide-angular build
|
||||||
|
|||||||
35
.github/workflows/lucide-font.yml
vendored
@@ -11,45 +11,26 @@ jobs:
|
|||||||
lucide-font:
|
lucide-font:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3.4.1
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --filter outline-svg
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Outline svg Icons
|
- name: Outline svg Icons
|
||||||
run: pnpm build:outline-icons
|
run: pnpm build:outline-icons
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: pnpm install --filter build-font
|
|
||||||
|
|
||||||
- name: Create font in ./lucide-font
|
- name: Create font in ./lucide-font
|
||||||
run: pnpm build:font
|
run: pnpm build:font
|
||||||
|
|
||||||
- name: "Upload to Artifacts"
|
- name: "Upload to Artifacts"
|
||||||
uses: actions/upload-artifact@v1
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: lucide-font
|
name: lucide-font
|
||||||
path: lucide-font
|
path: lucide-font
|
||||||
|
|||||||
31
.github/workflows/lucide-preact.yml
vendored
@@ -5,39 +5,24 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- packages/lucide-preact/**
|
- packages/lucide-preact/**
|
||||||
- tools/build-icons/**
|
- tools/build-icons/**
|
||||||
|
- tools/rollup-plugins/**
|
||||||
- pnpm-lock.yaml
|
- pnpm-lock.yaml
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lucide-preact:
|
lucide-preact:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: pnpm --filter lucide-preact build
|
run: pnpm --filter lucide-preact build
|
||||||
|
|||||||
31
.github/workflows/lucide-react-native.yml
vendored
@@ -5,39 +5,24 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- packages/lucide-react-native/**
|
- packages/lucide-react-native/**
|
||||||
- tools/build-icons/**
|
- tools/build-icons/**
|
||||||
|
- tools/rollup-plugins/**
|
||||||
- pnpm-lock.yaml
|
- pnpm-lock.yaml
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lucide-react-native:
|
lucide-react-native:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: pnpm --filter lucide-react-native build
|
run: pnpm --filter lucide-react-native build
|
||||||
|
|||||||
31
.github/workflows/lucide-react.yml
vendored
@@ -5,6 +5,7 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- packages/lucide-react/**
|
- packages/lucide-react/**
|
||||||
- tools/build-icons/**
|
- tools/build-icons/**
|
||||||
|
- tools/rollup-plugins/**
|
||||||
- scripts/generateNextJSAliases.mjs
|
- scripts/generateNextJSAliases.mjs
|
||||||
- pnpm-lock.yaml
|
- pnpm-lock.yaml
|
||||||
|
|
||||||
@@ -12,33 +13,17 @@ jobs:
|
|||||||
lucide-react:
|
lucide-react:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: pnpm --filter lucide-react build
|
run: pnpm --filter lucide-react build
|
||||||
|
|||||||
31
.github/workflows/lucide-solid.yml
vendored
@@ -5,39 +5,24 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- packages/lucide-solid/**
|
- packages/lucide-solid/**
|
||||||
- tools/build-icons/**
|
- tools/build-icons/**
|
||||||
|
- tools/rollup-plugins/**
|
||||||
- pnpm-lock.yaml
|
- pnpm-lock.yaml
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lucide-solid:
|
lucide-solid:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: pnpm --filter lucide-solid build
|
run: pnpm --filter lucide-solid build
|
||||||
|
|||||||
30
.github/workflows/lucide-static.yml
vendored
@@ -11,33 +11,17 @@ jobs:
|
|||||||
lucide-static:
|
lucide-static:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: pnpm --filter lucide-static build
|
run: pnpm --filter lucide-static build
|
||||||
|
|||||||
31
.github/workflows/lucide-svelte.yml
vendored
@@ -5,39 +5,24 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- packages/lucide-svelte/**
|
- packages/lucide-svelte/**
|
||||||
- tools/build-icons/**
|
- tools/build-icons/**
|
||||||
|
- tools/rollup-plugins/**
|
||||||
- pnpm-lock.yaml
|
- pnpm-lock.yaml
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lucide-svelte:
|
lucide-svelte:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: pnpm --filter lucide-svelte build
|
run: pnpm --filter lucide-svelte build
|
||||||
|
|||||||
31
.github/workflows/lucide-vue-next.yml
vendored
@@ -5,39 +5,24 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- packages/lucide-vue-next/**
|
- packages/lucide-vue-next/**
|
||||||
- tools/build-icons/**
|
- tools/build-icons/**
|
||||||
|
- tools/rollup-plugins/**
|
||||||
- pnpm-lock.yaml
|
- pnpm-lock.yaml
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lucide-vue-next:
|
lucide-vue-next:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: pnpm --filter lucide-vue-next build
|
run: pnpm --filter lucide-vue-next build
|
||||||
|
|||||||
31
.github/workflows/lucide-vue.yml
vendored
@@ -5,39 +5,24 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- packages/lucide-vue/**
|
- packages/lucide-vue/**
|
||||||
- tools/build-icons/**
|
- tools/build-icons/**
|
||||||
|
- tools/rollup-plugins/**
|
||||||
- pnpm-lock.yaml
|
- pnpm-lock.yaml
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lucide-vue:
|
lucide-vue:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: pnpm --filter lucide-vue build
|
run: pnpm --filter lucide-vue build
|
||||||
|
|||||||
31
.github/workflows/lucide.yml
vendored
@@ -5,39 +5,24 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- packages/lucide/**
|
- packages/lucide/**
|
||||||
- tools/build-icons/**
|
- tools/build-icons/**
|
||||||
|
- tools/rollup-plugins/**
|
||||||
- pnpm-lock.yaml
|
- pnpm-lock.yaml
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lucide:
|
lucide:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: pnpm --filter lucide build
|
run: pnpm --filter lucide build
|
||||||
|
|||||||
213
.github/workflows/pull-request.yml
vendored
@@ -4,155 +4,106 @@ on:
|
|||||||
pull_request_target:
|
pull_request_target:
|
||||||
paths:
|
paths:
|
||||||
- 'icons/*.svg'
|
- 'icons/*.svg'
|
||||||
|
branches:
|
||||||
permissions:
|
- main
|
||||||
pull-requests: write
|
- fix-icon-preview
|
||||||
contents: write
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
add-changed-icons-comment:
|
lint-filenames:
|
||||||
|
if: github.repository == 'lucide-icons/lucide'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
ref: refs/pull/${{ github.event.pull_request.number }}/merge
|
ref: refs/pull/${{ github.event.pull_request.number }}/merge
|
||||||
- name: Get changed files
|
- name: Get changed files
|
||||||
id: changed-files
|
id: changed-files
|
||||||
uses: tj-actions/changed-files@v35
|
uses: tj-actions/changed-files@v41
|
||||||
|
with:
|
||||||
|
files: icons/*
|
||||||
|
- name: Generate annotations
|
||||||
|
run: node ./scripts/lintFilenames.mjs
|
||||||
|
env:
|
||||||
|
CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
|
||||||
|
|
||||||
|
lint-contributors:
|
||||||
|
if: github.repository == 'lucide-icons/lucide'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
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@v41
|
||||||
|
with:
|
||||||
|
files: icons/*
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
- name: Install simple-git (safer and faster than installing all deps)
|
||||||
|
run: npm install simple-git
|
||||||
|
- name: Generate annotations
|
||||||
|
run: node ./scripts/updateContributors.mjs
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
FETCH_DEPTH: ${{ github.event.pull_request.commits }}
|
||||||
|
CHANGED_FILES: ${{ 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
|
||||||
|
|
||||||
|
generate-changed-icons-comment:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
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@v41
|
||||||
with:
|
with:
|
||||||
files: icons/*.svg
|
files: icons/*.svg
|
||||||
- name: Generate 24px dpi preview
|
|
||||||
id: generate-24px-dpi-preview
|
|
||||||
run: |
|
|
||||||
delimiter="$(openssl rand -hex 8)"
|
|
||||||
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
|
||||||
cat "$file" | # get file content
|
|
||||||
tr '\n' ' ' | # remove line breaks
|
|
||||||
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
||||||
base64 -w 0 | # encode svg
|
|
||||||
sed "s|.*|<img title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/dpi/24/&.svg\"/> |"
|
|
||||||
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
||||||
echo >> $GITHUB_OUTPUT
|
|
||||||
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
- name: Generate cohesion check random
|
|
||||||
id: generate-cohesion-check-random
|
|
||||||
run: |
|
|
||||||
delimiter="$(openssl rand -hex 8)"
|
|
||||||
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
for file in $(printf "%s\\n" icons/*.svg | shuf | head -n$(awk -F' ' '{print NF}' <<< '${{ steps.changed-files.outputs.all_changed_files }}')); do
|
|
||||||
cat "$file" | # get file content
|
|
||||||
tr '\n' ' ' | # remove line breaks
|
|
||||||
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
||||||
base64 -w 0 | # encode svg
|
|
||||||
sed "s|.*|<img title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/stroke-width/2/&.svg\"/> |"
|
|
||||||
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
||||||
echo >> $GITHUB_OUTPUT
|
|
||||||
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
- name: Generate cohesion check squares
|
|
||||||
id: generate-cohesion-check-squares
|
|
||||||
run: |
|
|
||||||
delimiter="$(openssl rand -hex 8)"
|
|
||||||
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
for file in $(printf "%s\\n" icons/*square*.svg | shuf | head -n$(awk -F' ' '{print NF}' <<< '${{ steps.changed-files.outputs.all_changed_files }}')); do
|
|
||||||
cat "$file" | # get file content
|
|
||||||
tr '\n' ' ' | # remove line breaks
|
|
||||||
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
||||||
base64 -w 0 | # encode svg
|
|
||||||
sed "s|.*|<img title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/stroke-width/2/&.svg\"/> |"
|
|
||||||
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
||||||
echo >> $GITHUB_OUTPUT
|
|
||||||
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
- name: Generate 1px stroke-width
|
|
||||||
id: generate-1px-stroke-width
|
|
||||||
run: |
|
|
||||||
delimiter="$(openssl rand -hex 8)"
|
|
||||||
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
|
||||||
cat "$file" | # get file content
|
|
||||||
tr '\n' ' ' | # remove line breaks
|
|
||||||
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
||||||
base64 -w 0 | # encode svg
|
|
||||||
sed "s|.*|<img title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/stroke-width/1/&.svg\"/> |"
|
|
||||||
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
||||||
echo >> $GITHUB_OUTPUT
|
|
||||||
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
- name: Generate 2px stroke-width
|
|
||||||
id: generate-2px-stroke-width
|
|
||||||
run: |
|
|
||||||
delimiter="$(openssl rand -hex 8)"
|
|
||||||
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
|
||||||
cat "$file" | # get file content
|
|
||||||
tr '\n' ' ' | # remove line breaks
|
|
||||||
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
||||||
base64 -w 0 | # encode svg
|
|
||||||
sed "s|.*|<img title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/stroke-width/2/&.svg\"/> |"
|
|
||||||
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
||||||
echo >> $GITHUB_OUTPUT
|
|
||||||
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
- name: Generate 3px stroke-width
|
|
||||||
id: generate-3px-stroke-width
|
|
||||||
run: |
|
|
||||||
delimiter="$(openssl rand -hex 8)"
|
|
||||||
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
|
||||||
cat "$file" | # get file content
|
|
||||||
tr '\n' ' ' | # remove line breaks
|
|
||||||
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
||||||
base64 -w 0 | # encode svg
|
|
||||||
sed "s|.*|<img title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/stroke-width/3/&.svg\"/> |"
|
|
||||||
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
||||||
echo >> $GITHUB_OUTPUT
|
|
||||||
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
- name: Generate X-rays
|
|
||||||
id: generate-x-rays
|
|
||||||
run: |
|
|
||||||
delimiter="$(openssl rand -hex 8)"
|
|
||||||
echo "body<<$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
|
||||||
cat "$file" | # get file content
|
|
||||||
tr '\n' ' ' | # remove line breaks
|
|
||||||
sed -e 's/<svg[^>]*>/<svg>/g' | # remove attributes from svg element
|
|
||||||
base64 -w 0 | # encode svg
|
|
||||||
sed "s|.*|<img width=\"400\" title=\"$file\" alt=\"$file\" src=\"https://lucide.dev/api/gh-icon/$(basename ${file//\.svg/})/&.svg\"/> |"
|
|
||||||
done | tr '\n' ' ' >> $GITHUB_OUTPUT
|
|
||||||
echo >> $GITHUB_OUTPUT
|
|
||||||
echo "$delimiter" >> $GITHUB_OUTPUT
|
|
||||||
- name: Find Comment
|
- name: Find Comment
|
||||||
uses: peter-evans/find-comment@v2
|
uses: peter-evans/find-comment@v2
|
||||||
id: fc
|
id: pr-comment
|
||||||
with:
|
with:
|
||||||
issue-number: ${{ github.event.pull_request.number }}
|
issue-number: ${{ github.event.pull_request.number }}
|
||||||
comment-author: 'github-actions[bot]'
|
comment-author: 'github-actions[bot]'
|
||||||
body-includes: Added or changed icons
|
body-includes: Added or changed icons
|
||||||
|
|
||||||
|
- name: Generate comment markup
|
||||||
|
run: node ./scripts/generateChangedIconsCommentMarkup.mjs >> comment-markup.md
|
||||||
|
id: comment-markup
|
||||||
|
env:
|
||||||
|
CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
|
||||||
|
|
||||||
- name: Create or update comment
|
- name: Create or update comment
|
||||||
uses: peter-evans/create-or-update-comment@v2
|
uses: peter-evans/create-or-update-comment@v3
|
||||||
with:
|
with:
|
||||||
comment-id: ${{ steps.fc.outputs.comment-id }}
|
comment-id: ${{ steps.pr-comment.outputs.comment-id }}
|
||||||
issue-number: ${{ github.event.pull_request.number }}
|
issue-number: ${{ github.event.pull_request.number }}
|
||||||
body: |
|
body-path: ./comment-markup.md
|
||||||
### Added or changed icons
|
|
||||||
${{ steps.generate-2px-stroke-width.outputs.body }}<br/>
|
|
||||||
<details>
|
|
||||||
<summary>Preview cohesion</summary>
|
|
||||||
${{ steps.generate-cohesion-check-squares.outputs.body }}<br/>
|
|
||||||
${{ steps.generate-2px-stroke-width.outputs.body }}<br/>
|
|
||||||
${{ steps.generate-cohesion-check-random.outputs.body }}<br/>
|
|
||||||
</details>
|
|
||||||
<details>
|
|
||||||
<summary>Preview stroke widths</summary>
|
|
||||||
${{ steps.generate-1px-stroke-width.outputs.body }}<br/>
|
|
||||||
${{ steps.generate-2px-stroke-width.outputs.body }}<br/>
|
|
||||||
${{ steps.generate-3px-stroke-width.outputs.body }}<br/>
|
|
||||||
</details>
|
|
||||||
<details>
|
|
||||||
<summary>DPI Preview (24px)</summary>
|
|
||||||
${{ steps.generate-24px-dpi-preview.outputs.body }}<br/>
|
|
||||||
</details>
|
|
||||||
<details>
|
|
||||||
<summary>Icon X-rays</summary>
|
|
||||||
${{ steps.generate-x-rays.outputs.body }}
|
|
||||||
</details>
|
|
||||||
edit-mode: replace
|
edit-mode: replace
|
||||||
|
|||||||
99
.github/workflows/release.yml
vendored
@@ -39,6 +39,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: pre-release
|
needs: pre-release
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
package: [
|
package: [
|
||||||
'lucide',
|
'lucide',
|
||||||
@@ -52,30 +53,14 @@ jobs:
|
|||||||
'lucide-svelte',
|
'lucide-svelte',
|
||||||
]
|
]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: pnpm/action-setup@v2
|
||||||
|
with:
|
||||||
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 18
|
||||||
|
cache: 'pnpm'
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
@@ -100,32 +85,15 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [pre-release, lucide-font]
|
needs: [pre-release, lucide-font]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/download-artifact@v2
|
- uses: actions/download-artifact@v3
|
||||||
|
- uses: pnpm/action-setup@v2
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
@@ -150,45 +118,26 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: pre-release
|
needs: pre-release
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3.4.1
|
- uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
version: 8
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
- uses: pnpm/action-setup@v2.0.1
|
|
||||||
name: Install pnpm
|
|
||||||
id: pnpm-install
|
|
||||||
with:
|
with:
|
||||||
version: 7
|
node-version: 18
|
||||||
run_install: false
|
cache: 'pnpm'
|
||||||
|
|
||||||
- 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-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --filter outline-svg
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
- name: Outline svg Icons
|
- name: Outline svg Icons
|
||||||
run: pnpm build:outline-icons
|
run: pnpm build:outline-icons
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: pnpm install --filter build-font
|
|
||||||
|
|
||||||
- name: Create font in ./lucide-font
|
- name: Create font in ./lucide-font
|
||||||
run: pnpm build:font
|
run: pnpm build:font
|
||||||
|
|
||||||
- name: "Upload to Artifacts"
|
- name: "Upload to Artifacts"
|
||||||
uses: actions/upload-artifact@v1
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: lucide-font
|
name: lucide-font
|
||||||
path: lucide-font
|
path: lucide-font
|
||||||
@@ -202,8 +151,8 @@ jobs:
|
|||||||
]
|
]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/download-artifact@v2
|
- uses: actions/download-artifact@v3
|
||||||
- name: Zip font and icons
|
- name: Zip font and icons
|
||||||
run: |
|
run: |
|
||||||
zip -r lucide-font-${{ needs.pre-release.outputs.VERSION }}.zip lucide-font
|
zip -r lucide-font-${{ needs.pre-release.outputs.VERSION }}.zip lucide-font
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ stats
|
|||||||
node_modules
|
node_modules
|
||||||
tests
|
tests
|
||||||
scripts
|
scripts
|
||||||
site
|
|
||||||
src
|
src
|
||||||
build
|
build
|
||||||
babel.config.js
|
babel.config.js
|
||||||
|
|||||||
16
.prettierignore
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
pnpm-lock.yaml
|
||||||
|
|
||||||
|
# lucide-angular
|
||||||
|
packages/lucide-angular/.angular/cache
|
||||||
|
|
||||||
|
# lucide-static
|
||||||
|
packages/lucide-static/icons
|
||||||
|
packages/lucide-static/lib
|
||||||
|
packages/lucide-static/sprite.svg
|
||||||
|
packages/lucide-static/tags.json
|
||||||
|
packages/lucide-static/icon-nodes.json
|
||||||
|
packages/lucide-static/font
|
||||||
|
|
||||||
|
# lucide-svelte
|
||||||
|
packages/lucide-svelte/src/icons/*.svelte
|
||||||
|
packages/lucide-svelte/.svelte-kit
|
||||||
8
.vscode/settings.json
vendored
@@ -3,5 +3,11 @@
|
|||||||
"devs",
|
"devs",
|
||||||
"preact",
|
"preact",
|
||||||
"Preact"
|
"Preact"
|
||||||
]
|
],
|
||||||
|
"eslint.enable": true,
|
||||||
|
"eslint.validate": [
|
||||||
|
"javascript",
|
||||||
|
"svg"
|
||||||
|
],
|
||||||
|
"svg.preview.background": "transparent"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ Here you can find instructions on how to implement the guidelines with different
|
|||||||
|
|
||||||
#### [Adobe Illustrator Guide](https://lucide.dev/docs/illustrator-guide)
|
#### [Adobe Illustrator Guide](https://lucide.dev/docs/illustrator-guide)
|
||||||
|
|
||||||
You can also [download an Adobe Illustrator template](https://lucide.dev/templates/illustrator-template.ai).
|
You can also [download an Adobe Illustrator template](https://github.com/lucide-icons/lucide/blob/main/docs/public/templates/illustrator_template.ai).
|
||||||
|
|
||||||
#### [Inkscape Guide](https://lucide.dev/docs/inkscape-guide)
|
#### [Inkscape Guide](https://lucide.dev/docs/inkscape-guide)
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ Seperate them by two PRs; 'pr-01' `arrow`, `arrow-down` and 'pr-02' `bicycle`.
|
|||||||
|
|
||||||
Before creating an icon request, please search to see if someone has requested the icon already. If there is an open request, please add a :+1:.
|
Before creating an icon request, please search to see if someone has requested the icon already. If there is an open request, please add a :+1:.
|
||||||
|
|
||||||
If the icon has not already been requested, [create an issue](https://github.com/lucide-icons/lucide/issues/new?title=Icon%20Request:) with a title of `Icon request: <icon name>` and add as much information as possible.
|
If the icon has not already been requested, [create an icon request issue](https://github.com/lucide-icons/lucide/issues/new?assignees=&labels=%F0%9F%99%8C+icon+request&projects=&template=01_icon_request.yml) and add as much information as possible.
|
||||||
|
|
||||||
### Icon Requests from Feather
|
### Icon Requests from Feather
|
||||||
|
|
||||||
@@ -72,8 +72,8 @@ pnpm install # Install dependencies, including the workspace packages
|
|||||||
|
|
||||||
To distribute different packages we use PNPM workspaces. Before you start make sure you are familiar with this concept. The concept of working in workspaces is created by Yarn, they have a well written introduction: [yarn workspaces](https://classic.yarnpkg.com/lang/enhttps://lucide.dev/docs/workspaces).
|
To distribute different packages we use PNPM workspaces. Before you start make sure you are familiar with this concept. The concept of working in workspaces is created by Yarn, they have a well written introduction: [yarn workspaces](https://classic.yarnpkg.com/lang/enhttps://lucide.dev/docs/workspaces).
|
||||||
|
|
||||||
The configured directory for workspaces is the [packages](./packages) directory, located in the root directory. There you will find all the current packages from lucide.
|
The configured directory for workspaces is the [packages](https://github.com/lucide-icons/lucide/tree/main/packages) directory, located in the root directory. There you will find all the current packages from lucide.
|
||||||
There are more workspaces defined, see [`pnpm-workspace.yaml`](./pnpm-workspace.yaml).
|
There are more workspaces defined, see [`pnpm-workspace.yaml`](https://github.com/lucide-icons/lucide/blob/main/pnpm-workspace.yaml).
|
||||||
|
|
||||||
> Note: One package is not managed by pnpm: **lucide-flutter**, this package is written in Dart and used pub for publishing.
|
> Note: One package is not managed by pnpm: **lucide-flutter**, this package is written in Dart and used pub for publishing.
|
||||||
|
|
||||||
@@ -144,16 +144,19 @@ Root directories
|
|||||||
|
|
||||||
```sh
|
```sh
|
||||||
lucide
|
lucide
|
||||||
|
|
|
||||||
├── docs
|
├── docs
|
||||||
|
│ ├── guide
|
||||||
├── icons
|
├── icons
|
||||||
├── packages
|
├── packages
|
||||||
├── scripts
|
└── scripts
|
||||||
└── site
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Docs
|
### Docs
|
||||||
|
|
||||||
|
The lucide.dev website is using [vitepress](https://vitepress.dev/) to generate the static website. The markdown files are located in the docs directory.
|
||||||
|
|
||||||
|
### Guides
|
||||||
|
|
||||||
Detailed documentation about: installation, guides, packages, design guides etc.
|
Detailed documentation about: installation, guides, packages, design guides etc.
|
||||||
|
|
||||||
### Icons
|
### Icons
|
||||||
@@ -170,10 +173,6 @@ Includes all the (npm) packages of lucide.
|
|||||||
|
|
||||||
Includes usefully scripts to automate certain jobs. Big part of the scripts is the template generation, for example it generates icon components for all the packages. These scripts are usually executed from the "scripts" section in the package.json.
|
Includes usefully scripts to automate certain jobs. Big part of the scripts is the template generation, for example it generates icon components for all the packages. These scripts are usually executed from the "scripts" section in the package.json.
|
||||||
|
|
||||||
### site
|
|
||||||
|
|
||||||
The lucide.dev website is using [vitepress](https://vitepress.dev/) to generate the static website. The markdown files are located in the docs directory.
|
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
The documentation files are located in the [docs](https://github.com/lucide-icons/lucide/tree/main/docs) directory. All these markdown files will be loaded in the build of the lucide.dev website.
|
The documentation files are located in the [docs](https://github.com/lucide-icons/lucide/tree/main/docs) directory. All these markdown files will be loaded in the build of the lucide.dev website.
|
||||||
|
|||||||
@@ -11,14 +11,14 @@
|
|||||||
|
|
||||||
Community-run fork of [Feather Icons](https://github.com/feathericons/feather), open for anyone to contribute icons.
|
Community-run fork of [Feather Icons](https://github.com/feathericons/feather), open for anyone to contribute icons.
|
||||||
|
|
||||||
It began after growing disaffection with the [Feather Icons](https://github.com/feathericons/feather) project moderation. With over 300+ open issues and over 100+ open PRs, the Feather Icons project has been abandoned. This unfortunately means that hundreds of developers and designers wasted their time contributing to Feather Icons with no chance of PRs being accepted.
|
It began after growing dissatisfaction with the [Feather Icons](https://github.com/feathericons/feather) project moderation. With over 300+ open issues and over 100+ open PRs, the Feather Icons project has been abandoned. This unfortunately means that hundreds of developers and designers wasted their time contributing to Feather Icons with no chance of PRs being accepted.
|
||||||
|
|
||||||
Lucide is trying to expand the icon set as much as possible while staying faithful to the original simplistic design language. We do this as a community of devs and designers and hope that you'll join us!
|
Lucide is trying to expand the icon set as much as possible while staying faithful to the original simplistic design language. We do this as a community of devs and designers and hope that you'll join us!
|
||||||
|
|
||||||
### Why choose Lucide over Feather Icons
|
### Why choose Lucide over Feather Icons
|
||||||
|
|
||||||
- More icons to work with: Lucide already has hundreds of icons more than Feather does.
|
- 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.
|
- Well maintained code base.
|
||||||
- Active community, regularly growing and improving the set.
|
- Active community, regularly growing and improving the set.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"$schema": "../category.schema.json",
|
"$schema": "../category.schema.json",
|
||||||
"title": "File icons",
|
"title": "File icons",
|
||||||
"icon": "layout"
|
"icon": "panels-top-left"
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"$schema": "../category.schema.json",
|
"$schema": "../category.schema.json",
|
||||||
"title": "Layout",
|
"title": "Layout",
|
||||||
"icon": "layout"
|
"icon": "panels-top-left"
|
||||||
}
|
}
|
||||||
@@ -12,8 +12,10 @@
|
|||||||
},
|
},
|
||||||
"title": "Lucide Icons category schema",
|
"title": "Lucide Icons category schema",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"required": ["$schema", "icon", "title"],
|
||||||
"properties": {
|
"properties": {
|
||||||
"title": {
|
"$schema": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
@@ -22,13 +24,12 @@
|
|||||||
"icon": {
|
"icon": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"title": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"weight": {
|
"weight": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": [
|
|
||||||
"title",
|
|
||||||
"icon"
|
|
||||||
],
|
|
||||||
"description": "A JSON Schema for categories defined by Lucide Icons."
|
"description": "A JSON Schema for categories defined by Lucide Icons."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,11 +17,14 @@ export default eventHandler((event) => {
|
|||||||
|
|
||||||
const children = [];
|
const children = [];
|
||||||
|
|
||||||
// If the icon already exists, it uses the existing icon as the backdrop.
|
// Finds the longest matching icon to be use as the backdrop.
|
||||||
// If the icon does not exist but an icon exists that starts with the same group name, that icon
|
// For `square-dashed-bottom-code` it suggests `square-dashed-bottom-code`.
|
||||||
// is used as the backdrop
|
// For `square-dashed-bottom-i-dont-exist` it suggests `square-dashed-bottom`.
|
||||||
const backdropName =
|
const backdropName = name
|
||||||
name in iconNodes ? name : name.split('-')[0] in iconNodes ? name.split('-')[0] : null;
|
.split('-')
|
||||||
|
.map((_, idx, arr) => arr.slice(0, idx + 1).join('-'))
|
||||||
|
.reverse()
|
||||||
|
.find((groupName) => groupName in iconNodes);
|
||||||
if (backdropName) {
|
if (backdropName) {
|
||||||
const iconNode = iconNodes[backdropName];
|
const iconNode = iconNodes[backdropName];
|
||||||
|
|
||||||
@@ -29,7 +32,13 @@ export default eventHandler((event) => {
|
|||||||
const svg = renderToStaticMarkup(createElement(LucideIcon));
|
const svg = renderToStaticMarkup(createElement(LucideIcon));
|
||||||
const backdropString = svg.replace(/<svg[^>]*>|<\/svg>/g, '');
|
const backdropString = svg.replace(/<svg[^>]*>|<\/svg>/g, '');
|
||||||
|
|
||||||
children.push(createElement(Backdrop, { backdropString, src }));
|
children.push(
|
||||||
|
createElement(Backdrop, {
|
||||||
|
backdropString,
|
||||||
|
src,
|
||||||
|
color: name in iconNodes ? 'red' : '#777',
|
||||||
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const svg = Buffer.from(
|
const svg = Buffer.from(
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ export default defineConfig({
|
|||||||
{ text: 'Icons', link: '/icons/' },
|
{ text: 'Icons', link: '/icons/' },
|
||||||
{ text: 'Guide', link: '/guide/' },
|
{ text: 'Guide', link: '/guide/' },
|
||||||
{ text: 'Packages', link: '/packages' },
|
{ text: 'Packages', link: '/packages' },
|
||||||
|
{ text: 'Showcase', link: '/showcase' },
|
||||||
{ text: 'License', link: '/license' },
|
{ text: 'License', link: '/license' },
|
||||||
],
|
],
|
||||||
sidebar,
|
sidebar,
|
||||||
@@ -118,6 +119,10 @@ export default defineConfig({
|
|||||||
editLink: {
|
editLink: {
|
||||||
pattern: 'https://github.com/lucide-icons/lucide/edit/main/docs/:path'
|
pattern: 'https://github.com/lucide-icons/lucide/edit/main/docs/:path'
|
||||||
},
|
},
|
||||||
|
carbonAds: {
|
||||||
|
code: 'CWYIC53U',
|
||||||
|
placement: 'lucidedev'
|
||||||
|
}
|
||||||
},
|
},
|
||||||
sitemap: {
|
sitemap: {
|
||||||
hostname: 'https://lucide.dev/'
|
hostname: 'https://lucide.dev/'
|
||||||
|
|||||||
50
docs/.vitepress/data/companiesData.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
18
docs/.vitepress/data/componentLibrariesData.json
Normal file
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
interface BackdropProps {
|
interface BackdropProps {
|
||||||
src: string
|
src: string;
|
||||||
backdropString: string
|
color?: string;
|
||||||
|
backdropString: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Backdrop = ({ src, backdropString }: BackdropProps): JSX.Element => {
|
const Backdrop = ({ src, color = 'red', backdropString }: BackdropProps): JSX.Element => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<defs xmlns="http://www.w3.org/2000/svg">
|
<defs xmlns="http://www.w3.org/2000/svg">
|
||||||
@@ -16,8 +17,8 @@ const Backdrop = ({ src, backdropString }: BackdropProps): JSX.Element => {
|
|||||||
patternUnits="userSpaceOnUse"
|
patternUnits="userSpaceOnUse"
|
||||||
patternTransform="rotate(45 50 50)"
|
patternTransform="rotate(45 50 50)"
|
||||||
>
|
>
|
||||||
<line stroke="red" strokeWidth={0.1} y2={1} />
|
<line stroke={color} strokeWidth={0.1} y2={1} />
|
||||||
<line stroke="red" strokeWidth={0.1} y2={1} />
|
<line stroke={color} strokeWidth={0.1} y2={1} />
|
||||||
</pattern>
|
</pattern>
|
||||||
</defs>
|
</defs>
|
||||||
<mask id="svg-preview-backdrop-mask-outline" maskUnits="userSpaceOnUse">
|
<mask id="svg-preview-backdrop-mask-outline" maskUnits="userSpaceOnUse">
|
||||||
@@ -29,20 +30,8 @@ const Backdrop = ({ src, backdropString }: BackdropProps): JSX.Element => {
|
|||||||
<g dangerouslySetInnerHTML={{ __html: src }} strokeWidth={2.05} />
|
<g dangerouslySetInnerHTML={{ __html: src }} strokeWidth={2.05} />
|
||||||
<g strokeWidth={1.75} dangerouslySetInnerHTML={{ __html: backdropString }} />
|
<g strokeWidth={1.75} dangerouslySetInnerHTML={{ __html: backdropString }} />
|
||||||
</mask>
|
</mask>
|
||||||
<g
|
<g strokeWidth={2.25} stroke="url(#pattern)" mask={'url(#svg-preview-backdrop-mask-outline)'}>
|
||||||
strokeWidth={2.25}
|
<rect x="0" y="0" width="24" height="24" fill="url(#pattern)" opacity={0.5} stroke="none" />
|
||||||
stroke="url(#pattern)"
|
|
||||||
mask={'url(#svg-preview-backdrop-mask-outline)'}
|
|
||||||
>
|
|
||||||
<rect
|
|
||||||
x="0"
|
|
||||||
y="0"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
fill="url(#pattern)"
|
|
||||||
opacity={0.5}
|
|
||||||
stroke="none"
|
|
||||||
/>
|
|
||||||
</g>
|
</g>
|
||||||
<rect
|
<rect
|
||||||
x="0"
|
x="0"
|
||||||
@@ -58,14 +47,13 @@ const Backdrop = ({ src, backdropString }: BackdropProps): JSX.Element => {
|
|||||||
y="0"
|
y="0"
|
||||||
width="24"
|
width="24"
|
||||||
height="24"
|
height="24"
|
||||||
fill="red"
|
fill={color}
|
||||||
opacity={0.5}
|
opacity={0.5}
|
||||||
stroke="none"
|
stroke="none"
|
||||||
mask={'url(#svg-preview-backdrop-mask-fill)'}
|
mask={'url(#svg-preview-backdrop-mask-fill)'}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
)
|
);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
export default Backdrop;
|
export default Backdrop;
|
||||||
|
|||||||
@@ -183,18 +183,62 @@ const Radii = ({
|
|||||||
>) => {
|
>) => {
|
||||||
return (
|
return (
|
||||||
<g className="svg-preview-radii-group" {...props}>
|
<g className="svg-preview-radii-group" {...props}>
|
||||||
{paths
|
{paths.map(
|
||||||
.filter(({ circle }) => circle)
|
({ c, prev, next, circle }, i) =>
|
||||||
.map(({ c, prev, next, circle: { x, y, r } }) =>
|
circle && (
|
||||||
c.name === 'circle' ? (
|
<React.Fragment key={i}>
|
||||||
<path d={`M${x} ${y}h.01`} />
|
{c.name !== "circle" && (
|
||||||
) : (
|
<path
|
||||||
<>
|
d={`M${prev.x} ${prev.y} ${circle.x} ${circle.y} ${next.x} ${next.y}`}
|
||||||
<path d={`M${prev.x} ${prev.y} ${x} ${y} ${next.x} ${next.y}`} />
|
/>
|
||||||
<circle cy={y} cx={x} r={r} />
|
|
||||||
</>
|
|
||||||
)
|
|
||||||
)}
|
)}
|
||||||
|
<circle
|
||||||
|
cy={circle.y}
|
||||||
|
cx={circle.x}
|
||||||
|
r={0.25}
|
||||||
|
strokeDasharray="0"
|
||||||
|
stroke={
|
||||||
|
(Math.round(circle.x * 100) / 100) % 1 !== 0 ||
|
||||||
|
(Math.round(circle.y * 100) / 100) % 1 !== 0
|
||||||
|
? "red"
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
<circle
|
||||||
|
cy={circle.y}
|
||||||
|
cx={circle.x}
|
||||||
|
r={circle.r}
|
||||||
|
stroke={
|
||||||
|
(Math.round(circle.r * 1000) / 1000) % 1 !== 0
|
||||||
|
? "red"
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</React.Fragment>
|
||||||
|
),
|
||||||
|
)}
|
||||||
|
</g>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const Handles = ({
|
||||||
|
paths,
|
||||||
|
...props
|
||||||
|
}: { paths: Path[] } & PathProps<
|
||||||
|
'strokeWidth' | 'stroke' | 'strokeDasharray' | 'strokeOpacity',
|
||||||
|
any
|
||||||
|
>) => {
|
||||||
|
console.log(paths);
|
||||||
|
return (
|
||||||
|
<g className="svg-preview-handles-group" {...props}>
|
||||||
|
{paths.map(({ c, prev, next, cp1, cp2 }) => (
|
||||||
|
<>
|
||||||
|
{cp1 && <path d={`M${prev.x} ${prev.y} ${cp1.x} ${cp1.y}`} />}
|
||||||
|
{cp1 && <circle cy={cp1.y} cx={cp1.x} r={0.25} />}
|
||||||
|
{cp2 && <path d={`M${next.x} ${next.y} ${cp2.x} ${cp2.y}`} />}
|
||||||
|
{cp2 && <circle cy={cp2.y} cx={cp2.x} r={0.25} />}
|
||||||
|
</>
|
||||||
|
))}
|
||||||
</g>
|
</g>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@@ -238,6 +282,7 @@ const SvgPreview = React.forwardRef<
|
|||||||
<style>{darkModeCss}</style>
|
<style>{darkModeCss}</style>
|
||||||
{showGrid && <Grid strokeWidth={0.1} stroke="#777" strokeOpacity={0.3} radius={1} />}
|
{showGrid && <Grid strokeWidth={0.1} stroke="#777" strokeOpacity={0.3} radius={1} />}
|
||||||
<Shadow paths={paths} strokeWidth={4} stroke="#777" radius={1} strokeOpacity={0.15} />
|
<Shadow paths={paths} strokeWidth={4} stroke="#777" radius={1} strokeOpacity={0.15} />
|
||||||
|
<Handles paths={paths} strokeWidth={0.12} stroke="#777" strokeOpacity={0.6} />
|
||||||
<ColoredPath
|
<ColoredPath
|
||||||
paths={paths}
|
paths={paths}
|
||||||
colors={[
|
colors={[
|
||||||
@@ -263,6 +308,7 @@ const SvgPreview = React.forwardRef<
|
|||||||
strokeOpacity={0.3}
|
strokeOpacity={0.3}
|
||||||
/>
|
/>
|
||||||
<ControlPath radius={1} paths={paths} pointSize={1} stroke="#fff" strokeWidth={0.125} />
|
<ControlPath radius={1} paths={paths} pointSize={1} stroke="#fff" strokeWidth={0.125} />
|
||||||
|
<Handles paths={paths} strokeWidth={0.12} stroke="#FFF" strokeOpacity={0.3} />
|
||||||
{children}
|
{children}
|
||||||
</svg>
|
</svg>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ export type Path = {
|
|||||||
prev: Point;
|
prev: Point;
|
||||||
next: Point;
|
next: Point;
|
||||||
isStart: boolean;
|
isStart: boolean;
|
||||||
circle: { x: number; y: number; r: number };
|
circle?: { x: number; y: number; r: number };
|
||||||
|
cp1?: Point;
|
||||||
|
cp2?: Point;
|
||||||
c: ReturnType<typeof getCommands>[number];
|
c: ReturnType<typeof getCommands>[number];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ export const getPaths = (src: string) => {
|
|||||||
c: typeof commands[number],
|
c: typeof commands[number],
|
||||||
next: Point,
|
next: Point,
|
||||||
d?: string,
|
d?: string,
|
||||||
circle?: Path['circle']
|
extras?: { circle?: Path['circle']; cp1?: Path['cp1']; cp2?: Path['cp2'] }
|
||||||
) => {
|
) => {
|
||||||
assert(prev);
|
assert(prev);
|
||||||
paths.push({
|
paths.push({
|
||||||
@@ -71,7 +71,7 @@ export const getPaths = (src: string) => {
|
|||||||
d: d || `M ${prev.x} ${prev.y} L ${next.x} ${next.y}`,
|
d: d || `M ${prev.x} ${prev.y} L ${next.x} ${next.y}`,
|
||||||
prev,
|
prev,
|
||||||
next,
|
next,
|
||||||
circle,
|
...extras,
|
||||||
isStart: start === prev,
|
isStart: start === prev,
|
||||||
});
|
});
|
||||||
prev = next;
|
prev = next;
|
||||||
@@ -110,7 +110,10 @@ export const getPaths = (src: string) => {
|
|||||||
}
|
}
|
||||||
case SVGPathData.CURVE_TO: {
|
case SVGPathData.CURVE_TO: {
|
||||||
assert(prev);
|
assert(prev);
|
||||||
addPath(c, c, `M ${prev.x} ${prev.y} ${encodeSVGPath(c)}`);
|
addPath(c, c, `M ${prev.x} ${prev.y} ${encodeSVGPath(c)}`, {
|
||||||
|
cp1: { x: c.x1, y: c.y1 },
|
||||||
|
cp2: { x: c.x2, y: c.y2 },
|
||||||
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SVGPathData.SMOOTH_CURVE_TO: {
|
case SVGPathData.SMOOTH_CURVE_TO: {
|
||||||
@@ -146,13 +149,20 @@ export const getPaths = (src: string) => {
|
|||||||
y1: prev.y - reflectedCp1.y,
|
y1: prev.y - reflectedCp1.y,
|
||||||
x2: c.x2,
|
x2: c.x2,
|
||||||
y2: c.y2,
|
y2: c.y2,
|
||||||
})}`
|
})}`,
|
||||||
|
{
|
||||||
|
cp1: { x: prev.x - reflectedCp1.x, y: prev.y - reflectedCp1.y },
|
||||||
|
cp2: { x: c.x2, y: c.y2 },
|
||||||
|
}
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SVGPathData.QUAD_TO: {
|
case SVGPathData.QUAD_TO: {
|
||||||
assert(prev);
|
assert(prev);
|
||||||
addPath(c, c, `M ${prev.x} ${prev.y} ${encodeSVGPath(c)}`);
|
addPath(c, c, `M ${prev.x} ${prev.y} ${encodeSVGPath(c)}`, {
|
||||||
|
cp1: { x: c.x1, y: c.y1 },
|
||||||
|
cp2: { x: c.x1, y: c.y1 },
|
||||||
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SVGPathData.SMOOTH_QUAD_TO: {
|
case SVGPathData.SMOOTH_QUAD_TO: {
|
||||||
@@ -197,7 +207,11 @@ export const getPaths = (src: string) => {
|
|||||||
y: c.y,
|
y: c.y,
|
||||||
x1: prevCP.x,
|
x1: prevCP.x,
|
||||||
y1: prevCP.y,
|
y1: prevCP.y,
|
||||||
})}`
|
})}`,
|
||||||
|
{
|
||||||
|
cp1: { x: prevCP.x, y: prevCP.y },
|
||||||
|
cp2: { x: prevCP.x, y: prevCP.y },
|
||||||
|
}
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -218,7 +232,7 @@ export const getPaths = (src: string) => {
|
|||||||
c,
|
c,
|
||||||
c,
|
c,
|
||||||
`M ${prev.x} ${prev.y} A${c.rX} ${c.rY} ${c.xRot} ${c.lArcFlag} ${c.sweepFlag} ${c.x} ${c.y}`,
|
`M ${prev.x} ${prev.y} A${c.rX} ${c.rY} ${c.xRot} ${c.lArcFlag} ${c.sweepFlag} ${c.x} ${c.y}`,
|
||||||
c.rX === c.rY ? { ...center, r: c.rX } : undefined
|
{ circle: c.rX === c.rY ? { ...center, r: c.rX } : undefined }
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,40 +1,28 @@
|
|||||||
import {
|
import {
|
||||||
BUNDLED_LANGUAGES,
|
bundledLanguages,
|
||||||
type IThemeRegistration
|
type ThemeRegistration
|
||||||
} from 'shiki'
|
} from 'shikiji'
|
||||||
import {
|
import {
|
||||||
getHighlighter,
|
getHighlighter,
|
||||||
} from 'shiki-processor'
|
} from 'shikiji'
|
||||||
|
|
||||||
|
|
||||||
type CodeExampleType = {
|
type CodeExampleType = {
|
||||||
title: string,
|
title: string,
|
||||||
lang: string,
|
language: string,
|
||||||
codes: {
|
|
||||||
language?: string,
|
|
||||||
code: string,
|
code: string,
|
||||||
metastring?: string,
|
|
||||||
}[],
|
|
||||||
}[]
|
}[]
|
||||||
|
|
||||||
const getIconCodes = (): CodeExampleType => {
|
const getIconCodes = (): CodeExampleType => {
|
||||||
return [
|
return [
|
||||||
{
|
|
||||||
lang: 'html',
|
|
||||||
title: 'HTML',
|
|
||||||
codes: [
|
|
||||||
{
|
{
|
||||||
language: 'html',
|
language: 'html',
|
||||||
code: `<i data-lucide="Name"></i>
|
title: 'HTML',
|
||||||
`,
|
code: `<i data-lucide="Name"></i>`
|
||||||
},
|
},
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
lang: 'tsx',
|
|
||||||
title: 'React',
|
|
||||||
codes: [
|
|
||||||
{
|
{
|
||||||
language: 'tsx',
|
language: 'tsx',
|
||||||
|
title: 'React',
|
||||||
code: `import { PascalCase } from 'lucide-react';
|
code: `import { PascalCase } from 'lucide-react';
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
@@ -45,16 +33,10 @@ const App = () => {
|
|||||||
|
|
||||||
export default App;
|
export default App;
|
||||||
`,
|
`,
|
||||||
|
|
||||||
},
|
},
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
lang: 'vue',
|
|
||||||
title: 'Vue 3',
|
|
||||||
codes: [
|
|
||||||
{
|
{
|
||||||
language: 'vue',
|
language: 'vue',
|
||||||
|
title: 'Vue',
|
||||||
code: `<script setup>
|
code: `<script setup>
|
||||||
import { PascalCase } from 'lucide-vue-next';
|
import { PascalCase } from 'lucide-vue-next';
|
||||||
</script>
|
</script>
|
||||||
@@ -63,32 +45,20 @@ export default App;
|
|||||||
<PascalCase />
|
<PascalCase />
|
||||||
</template>
|
</template>
|
||||||
`,
|
`,
|
||||||
|
|
||||||
},
|
},
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
lang: 'svelte',
|
|
||||||
title: 'Svelte',
|
|
||||||
codes: [
|
|
||||||
{
|
{
|
||||||
language: 'svelte',
|
language: 'svelte',
|
||||||
|
title: 'Svelte',
|
||||||
code: `<script>
|
code: `<script>
|
||||||
import { PascalCase } from 'lucide-svelte';
|
import { PascalCase } from 'lucide-svelte';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<PascalCase />
|
<PascalCase />
|
||||||
`,
|
`,
|
||||||
|
|
||||||
},
|
},
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
lang: 'preact',
|
|
||||||
title: 'Preact',
|
|
||||||
codes: [
|
|
||||||
{
|
{
|
||||||
language: 'tsx',
|
language: 'tsx',
|
||||||
|
title: 'Preact',
|
||||||
code: `import { PascalCase } from 'lucide-preact';
|
code: `import { PascalCase } from 'lucide-preact';
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
@@ -99,16 +69,10 @@ const App = () => {
|
|||||||
|
|
||||||
export default App;
|
export default App;
|
||||||
`,
|
`,
|
||||||
|
|
||||||
},
|
},
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
lang: 'solid',
|
|
||||||
title: 'Solid',
|
|
||||||
codes: [
|
|
||||||
{
|
{
|
||||||
language: 'tsx',
|
language: 'tsx',
|
||||||
|
title: 'Solid',
|
||||||
code: `import { PascalCase } from 'lucide-solid';
|
code: `import { PascalCase } from 'lucide-solid';
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
@@ -119,16 +83,10 @@ const App = () => {
|
|||||||
|
|
||||||
export default App;
|
export default App;
|
||||||
`,
|
`,
|
||||||
|
|
||||||
},
|
},
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
lang: 'angular',
|
|
||||||
title: 'Angular',
|
|
||||||
codes: [
|
|
||||||
{
|
{
|
||||||
language: 'tsx',
|
language: 'tsx',
|
||||||
|
title: 'Angular',
|
||||||
code: `// app.module.ts
|
code: `// app.module.ts
|
||||||
import { LucideAngularModule, PascalCase } from 'lucide-angular';
|
import { LucideAngularModule, PascalCase } from 'lucide-angular';
|
||||||
|
|
||||||
@@ -142,53 +100,37 @@ import { LucideAngularModule, PascalCase } from 'lucide-angular';
|
|||||||
<lucide-icon name="Name"></lucide-icon>
|
<lucide-icon name="Name"></lucide-icon>
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
lang: 'html',
|
|
||||||
title: 'Icon Font',
|
|
||||||
codes: [
|
|
||||||
{
|
{
|
||||||
language: 'html',
|
language: 'html',
|
||||||
|
title: 'Icon Font',
|
||||||
code: `<style>
|
code: `<style>
|
||||||
@import ('~lucide-static/font/Lucide.css');
|
@import ('~lucide-static/font/Lucide.css');
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="icon-Name"></div>
|
<div class="icon-Name"></div>
|
||||||
`,
|
`,
|
||||||
},
|
}
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
lang: 'dart',
|
|
||||||
title: 'Flutter',
|
|
||||||
codes: [
|
|
||||||
{
|
|
||||||
language: 'dart',
|
|
||||||
code: `Icon(LucideIcons.Name);
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ThemeOptions =
|
export type ThemeOptions =
|
||||||
| IThemeRegistration
|
| ThemeRegistration
|
||||||
| { light: IThemeRegistration; dark: IThemeRegistration }
|
| { light: ThemeRegistration; dark: ThemeRegistration }
|
||||||
|
|
||||||
const highLightCode = async (code: string, lang: string, active?: boolean) => {
|
const highLightCode = async (code: string, lang: string, active?: boolean) => {
|
||||||
const highlighter = await getHighlighter({
|
const highlighter = await getHighlighter({
|
||||||
themes: ['material-theme-palenight'],
|
themes: ['github-light', 'github-dark'],
|
||||||
langs: [...BUNDLED_LANGUAGES],
|
langs: Object.keys(bundledLanguages)
|
||||||
processors: []
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const highlightedCode = highlighter.codeToHtml(code, {
|
const highlightedCode = highlighter.codeToHtml(code, {
|
||||||
lang,
|
lang,
|
||||||
// lineOptions,
|
themes: {
|
||||||
theme: 'material-theme-palenight'
|
light: 'github-light',
|
||||||
}).replace('background-color: #292D3E', '')
|
dark: 'github-dark'
|
||||||
|
},
|
||||||
|
defaultColor: false
|
||||||
|
}).replace('shiki-themes', 'shiki-themes vp-code')
|
||||||
|
|
||||||
return `<div class="language-${lang} ${active ? 'active' : ''}">
|
return `<div class="language-${lang} ${active ? 'active' : ''}">
|
||||||
<button title="Copy Code" class="copy"></button>
|
<button title="Copy Code" class="copy"></button>
|
||||||
@@ -201,16 +143,15 @@ const highLightCode = async (code: string, lang: string, active?: boolean) => {
|
|||||||
export default async function createCodeExamples() {
|
export default async function createCodeExamples() {
|
||||||
const codes = getIconCodes();
|
const codes = getIconCodes();
|
||||||
|
|
||||||
const codeExamplePromises = codes.map(async (codeTemplate, index) => {
|
const codeExamplePromises = codes.map(async ({ title, language, code }, index) => {
|
||||||
const { title, lang, codes } = codeTemplate;
|
|
||||||
const isFirst = index === 0;
|
const isFirst = index === 0;
|
||||||
|
|
||||||
const code = await highLightCode(codes[0].code, codes[0].language || lang, isFirst);
|
const codeString = await highLightCode(code, language, isFirst);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
title,
|
title,
|
||||||
language: codes[0].language || lang,
|
language: language,
|
||||||
code,
|
code: codeString,
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -28,33 +28,35 @@ const sidebar: UserConfig<DefaultTheme.Config>['themeConfig']['sidebar'] = {
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
// TODO: Add this section
|
// TODO: Add this section
|
||||||
// {
|
{
|
||||||
// text: 'Advanced',
|
text: 'Advanced',
|
||||||
// items: [
|
items: [
|
||||||
// {
|
// {
|
||||||
// text: 'Accessibility',
|
// text: 'Accessibility',
|
||||||
// link: '/guide/advanced/accessibility'
|
// link: '/guide/advanced/accessibility'
|
||||||
// },
|
// },
|
||||||
// {
|
{
|
||||||
// text: 'Global styling',
|
text: 'Global styling',
|
||||||
// },
|
link: '/guide/advanced/global-styling'
|
||||||
|
},
|
||||||
// {
|
// {
|
||||||
// text: 'Animations',
|
// text: 'Animations',
|
||||||
// },
|
// },
|
||||||
// {
|
{
|
||||||
// text: 'Filled icons',
|
text: 'Filled icons',
|
||||||
// },
|
link: '/guide/advanced/filled-icons'
|
||||||
|
},
|
||||||
// {
|
// {
|
||||||
// text: 'Combining icons',
|
// text: 'Combining icons',
|
||||||
// },
|
// },
|
||||||
// {
|
// {
|
||||||
// text: 'Dynamic imports'
|
// text: 'Dynamic imports'
|
||||||
// },
|
// },
|
||||||
// // {
|
// {
|
||||||
// // text: 'Auto importing'
|
// text: 'Auto importing'
|
||||||
// // },
|
|
||||||
// ]
|
|
||||||
// },
|
// },
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
text: 'Packages',
|
text: 'Packages',
|
||||||
items: [
|
items: [
|
||||||
@@ -72,10 +74,6 @@ const sidebar: UserConfig<DefaultTheme.Config>['themeConfig']['sidebar'] = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'Lucide Vue',
|
text: 'Lucide Vue',
|
||||||
link: '/guide/packages/lucide-vue'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'Lucide Vue Next (Vue 3)',
|
|
||||||
link: '/guide/packages/lucide-vue-next'
|
link: '/guide/packages/lucide-vue-next'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -98,10 +96,6 @@ const sidebar: UserConfig<DefaultTheme.Config>['themeConfig']['sidebar'] = {
|
|||||||
text: 'Lucide Static',
|
text: 'Lucide Static',
|
||||||
link: '/guide/packages/lucide-static'
|
link: '/guide/packages/lucide-static'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
text: 'Lucide Flutter',
|
|
||||||
link: '/guide/packages/lucide-flutter'
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,5 +7,6 @@
|
|||||||
<style scoped>
|
<style scoped>
|
||||||
.container {
|
.container {
|
||||||
padding: 32px;
|
padding: 32px;
|
||||||
|
padding-top: 33px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -9,8 +9,6 @@ const props = defineProps<{
|
|||||||
}>()
|
}>()
|
||||||
|
|
||||||
const component = computed(() => props.href ? 'a' : 'div')
|
const component = computed(() => props.href ? 'a' : 'div')
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -25,7 +23,7 @@ const component = computed(() => props.href ? 'a' : 'div')
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.badge, a.badge {
|
.badge, a.badge, .vp-doc a.badge {
|
||||||
display: block;
|
display: block;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -36,6 +34,7 @@ const component = computed(() => props.href ? 'a' : 'div')
|
|||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
background-color: var(--vp-c-bg-alt);
|
background-color: var(--vp-c-bg-alt);
|
||||||
color: var(--vp-c-text-1);
|
color: var(--vp-c-text-1);
|
||||||
|
text-decoration: none;
|
||||||
/* width: 56px;
|
/* width: 56px;
|
||||||
height: 56px; */
|
height: 56px; */
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
@@ -59,4 +58,6 @@ const component = computed(() => props.href ? 'a' : 'div')
|
|||||||
/* color: var(--vp-button-alt-active-text);
|
/* color: var(--vp-button-alt-active-text);
|
||||||
background-color: var(--vp-button-alt-active-bg); */
|
background-color: var(--vp-button-alt-active-bg); */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -94,8 +94,7 @@ const ChevronUp = createLucideIcon('ChevronUp', chevronUp)
|
|||||||
.menu {
|
.menu {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
.menu-items {
|
ul.menu-items {
|
||||||
--menu-offset: 44px;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -103,7 +102,7 @@ const ChevronUp = createLucideIcon('ChevronUp', chevronUp)
|
|||||||
padding: 12px;
|
padding: 12px;
|
||||||
min-width: 128px;
|
min-width: 128px;
|
||||||
border: 1px solid var(--vp-c-divider);
|
border: 1px solid var(--vp-c-divider);
|
||||||
background-color: var(--vp-c-bg);
|
background-color: var(--vp-c-bg-elv);
|
||||||
box-shadow: var(--vp-shadow-3);
|
box-shadow: var(--vp-shadow-3);
|
||||||
transition: background-color 0.5s;
|
transition: background-color 0.5s;
|
||||||
max-height: calc(100vh - var(--vp-nav-height));
|
max-height: calc(100vh - var(--vp-nav-height));
|
||||||
@@ -124,11 +123,12 @@ const ChevronUp = createLucideIcon('ChevronUp', chevronUp)
|
|||||||
color: var(--vp-c-text-1);
|
color: var(--vp-c-text-1);
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
transition: background-color .25s,color .25s;
|
transition: background-color .25s,color .25s;
|
||||||
|
list-style: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-item:hover {
|
.menu-item:hover {
|
||||||
color: var(--vp-c-brand);
|
color: var(--vp-c-brand);
|
||||||
background-color: var(--vp-c-bg-elv-mute);
|
background-color: var(--vp-c-default-soft);
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-item:active {
|
.menu-item:active {
|
||||||
@@ -170,11 +170,11 @@ const ChevronUp = createLucideIcon('ChevronUp', chevronUp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
.menu-items.bottom {
|
.menu-items.bottom {
|
||||||
top: var(--menu-offset);
|
top: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-items.top {
|
.menu-items.top {
|
||||||
bottom: var(--menu-offset);
|
bottom: 48px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.arrow-up-button.top::before {
|
.arrow-up-button.top::before {
|
||||||
|
|||||||
56
docs/.vitepress/theme/components/base/Card.vue
Normal file
@@ -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>
|
||||||
36
docs/.vitepress/theme/components/base/CardGrid.vue
Normal file
@@ -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>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, defineProps, onMounted } from 'vue'
|
import { computed, onMounted } from 'vue'
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
groups: string[] | undefined,
|
groups: string[] | undefined,
|
||||||
groupName: string,
|
groupName: string,
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ const value = computed({
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
.color-picker {
|
.color-picker {
|
||||||
background: var(--color-picker-bg, var(--vp-c-bg-soft));
|
background: var(--color-picker-bg, var(--vp-c-bg-alt));
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
color: var(--vp-c-text-2);
|
color: var(--vp-c-text-2);
|
||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
@@ -71,10 +71,10 @@ const value = computed({
|
|||||||
.color-input-text {
|
.color-input-text {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding: 0 8px;
|
padding: 0 0 0 8px;
|
||||||
border: none;
|
border: none;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
color: var(--vp-c-text-2);
|
color: var(--vp-c-text-1);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ const SearchIcon = createLucideIcon('search', search)
|
|||||||
background: var(--vp-c-bg-soft);
|
background: var(--vp-c-bg-soft);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
color: var(--vp-c-text-2);
|
color: var(--vp-c-text-2);
|
||||||
padding: 12px 16px;
|
padding: 11px 16px;
|
||||||
height: auto;
|
height: auto;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
/* box-shadow: var(--vp-shadow-4), var(--vp-shadow-2); */
|
/* box-shadow: var(--vp-shadow-4), var(--vp-shadow-2); */
|
||||||
|
|||||||
63
docs/.vitepress/theme/components/base/GridSection.vue
Normal file
@@ -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>
|
||||||
@@ -49,7 +49,7 @@ const percentage = computed<string>(() => `${((Number(props.modelValue) - props.
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
line-height: 10px;
|
line-height: 10px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
--bar-color: var(--slider-bar-color, var(--vp-c-bg-soft));
|
--bar-color: var(--slider-bar-color, var(--vp-input-switch-bg-color));
|
||||||
}
|
}
|
||||||
|
|
||||||
.slider:hover input{
|
.slider:hover input{
|
||||||
|
|||||||
@@ -67,7 +67,10 @@ watch(absoluteStrokeWidth, (enabled) => {
|
|||||||
Lucide has a lot of customization options to match the icons with your UI.
|
Lucide has a lot of customization options to match the icons with your UI.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="customizer">
|
<div
|
||||||
|
class="customizer"
|
||||||
|
style="--color-picker-bg: var(--vp-input-switch-bg-color)"
|
||||||
|
>
|
||||||
<InputField
|
<InputField
|
||||||
id="icon-color"
|
id="icon-color"
|
||||||
label="Color"
|
label="Color"
|
||||||
|
|||||||
@@ -1,48 +1,49 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted } from 'vue'
|
import { useCategoryView } from '../../composables/useCategoryView';
|
||||||
import { useCategoryView } from '../../composables/useCategoryView'
|
|
||||||
|
|
||||||
interface Header {
|
interface Header {
|
||||||
level: number
|
level: number;
|
||||||
title: string
|
title: string;
|
||||||
slug: string
|
slug: string;
|
||||||
iconCount: number
|
iconCount: number;
|
||||||
link: string
|
link: string;
|
||||||
children: Header[]
|
children: Header[];
|
||||||
}
|
}
|
||||||
|
|
||||||
type MenuItem = Omit<Header, 'slug' | 'children'> & {
|
type MenuItem = Omit<Header, 'slug' | 'children'> & {
|
||||||
children?: MenuItem[]
|
children?: MenuItem[];
|
||||||
}
|
};
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
headers: MenuItem[]
|
headers: MenuItem[];
|
||||||
root?: boolean
|
root?: boolean;
|
||||||
}>()
|
}>();
|
||||||
|
|
||||||
const { selectedCategory } = useCategoryView()
|
const { selectedCategory } = useCategoryView();
|
||||||
|
|
||||||
function onClick(event: Event) {
|
function onClick(event: Event) {
|
||||||
const target = (event.target as HTMLElement).nodeName === 'span' ? (event.target as HTMLElement).parentNode : event.target as HTMLElement
|
const target =
|
||||||
const id = '#' + (target as HTMLAnchorElement).href!.split('#')[1]
|
(event.target as HTMLElement).nodeName === 'span'
|
||||||
const decodedId = decodeURIComponent(id)
|
? (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)
|
selectedCategory.value = decodedId.replace('#', '');
|
||||||
heading?.focus()
|
|
||||||
|
const heading = document.querySelector<HTMLAnchorElement>(decodedId);
|
||||||
|
heading?.focus();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ul :class="root ? 'root' : 'nested'">
|
<ul :class="root ? 'root' : 'nested'">
|
||||||
<li v-for="{ children, link, title, iconCount } in headers">
|
<li v-for="{ children, link, title, iconCount } in headers">
|
||||||
<a
|
<a class="outline-link" :href="link" @click="onClick" :title="title">
|
||||||
class="outline-link"
|
|
||||||
:href="link"
|
|
||||||
@click="onClick"
|
|
||||||
:title="title"
|
|
||||||
>
|
|
||||||
<span>
|
<span>
|
||||||
{{ title }}
|
{{ title }}
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, ref } from 'vue';
|
import { computed } from 'vue';
|
||||||
import { startCase, camelCase } from 'lodash-es'
|
import { startCase, camelCase } from 'lodash-es'
|
||||||
import ButtonMenu from '../base/ButtonMenu.vue'
|
import ButtonMenu from '../base/ButtonMenu.vue'
|
||||||
import { useIconStyleContext } from '../../composables/useIconStyle';
|
import { useIconStyleContext } from '../../composables/useIconStyle';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { IconEntity } from '../../types'
|
import type { IconEntity } from '../../types'
|
||||||
import { computed, ref, watch } from 'vue'
|
import { computed } from 'vue'
|
||||||
import createLucideIcon from 'lucide-vue-next/src/createLucideIcon';
|
import createLucideIcon from 'lucide-vue-next/src/createLucideIcon';
|
||||||
import IconButton from '../base/IconButton.vue';
|
import IconButton from '../base/IconButton.vue';
|
||||||
import IconContributors from './IconContributors.vue';
|
import IconContributors from './IconContributors.vue';
|
||||||
|
|||||||
@@ -19,7 +19,11 @@ function setActiveIcon(name: string) {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="icons">
|
<div class="icons">
|
||||||
<div class="icon" v-for="icon in icons" :key="icon.name">
|
<div
|
||||||
|
class="icon"
|
||||||
|
v-for="icon in icons"
|
||||||
|
:key="icon.name"
|
||||||
|
>
|
||||||
<IconItem
|
<IconItem
|
||||||
v-bind="icon"
|
v-bind="icon"
|
||||||
@setActiveIcon="setActiveIcon(icon.name)"
|
@setActiveIcon="setActiveIcon(icon.name)"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { computed } from 'vue';
|
||||||
import createLucideIcon from 'lucide-vue-next/src/createLucideIcon';
|
import createLucideIcon from 'lucide-vue-next/src/createLucideIcon';
|
||||||
import { useMediaQuery } from '@vueuse/core';
|
import { useMediaQuery } from '@vueuse/core';
|
||||||
import { useRouter } from 'vitepress';
|
import { useRouter } from 'vitepress';
|
||||||
@@ -27,7 +28,10 @@ const showOverlay = useMediaQuery('(min-width: 860px)');
|
|||||||
const { animate, confetti, confettiText } = useConfetti()
|
const { animate, confetti, confettiText } = useConfetti()
|
||||||
|
|
||||||
|
|
||||||
const icon = createLucideIcon(props.name, props.iconNode)
|
const icon = computed(() => {
|
||||||
|
if (!props.name || !props.iconNode) return null
|
||||||
|
return createLucideIcon(props.name, props.iconNode)
|
||||||
|
})
|
||||||
|
|
||||||
async function navigateToIcon(event) {
|
async function navigateToIcon(event) {
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import InputSearch from '../base/InputSearch.vue';
|
|||||||
import useSearchInput from '../../composables/useSearchInput';
|
import useSearchInput from '../../composables/useSearchInput';
|
||||||
import StickyBar from './StickyBar.vue';
|
import StickyBar from './StickyBar.vue';
|
||||||
import IconsCategory from './IconsCategory.vue';
|
import IconsCategory from './IconsCategory.vue';
|
||||||
import { useFetch } from '@vueuse/core';
|
|
||||||
import useFetchTags from '../../composables/useFetchTags';
|
import useFetchTags from '../../composables/useFetchTags';
|
||||||
import useFetchCategories from '../../composables/useFetchCategories';
|
import useFetchCategories from '../../composables/useFetchCategories';
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,30 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {data} from './PackageList.data'
|
import {data} from './PackageList.data'
|
||||||
|
import GridSection from '../base/GridSection.vue'
|
||||||
import PackageListItem from "./PackageListItem.vue";</script>
|
import PackageListItem from "./PackageListItem.vue";</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<section class="package-group">
|
<GridSection
|
||||||
<h1 class="name">Packages</h1>
|
title="Packages"
|
||||||
<div class="grid package-list" ref="container">
|
:headingLevel="1"
|
||||||
<div v-for="packageData in data.packages" class="item">
|
class="package-group"
|
||||||
<PackageListItem :packageData="packageData"/>
|
>
|
||||||
</div>
|
<PackageListItem
|
||||||
</div>
|
v-for="packageData in data.packages"
|
||||||
</section>
|
:packageData="packageData"
|
||||||
<section class="package-group">
|
/>
|
||||||
<h2 class="name">Third-party packages</h2>
|
</GridSection>
|
||||||
<div class="grid package-list" ref="container">
|
|
||||||
<div v-for="packageData in data.thirdPartyPackages" class="item">
|
<GridSection
|
||||||
<PackageListItem :packageData="packageData"/>
|
title="Third-party packages"
|
||||||
</div>
|
:headingLevel="2"
|
||||||
</div>
|
class="package-group"
|
||||||
</section>
|
>
|
||||||
|
<PackageListItem
|
||||||
|
v-for="packageData in data.thirdPartyPackages"
|
||||||
|
:packageData="packageData"
|
||||||
|
/>
|
||||||
|
</GridSection>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
@@ -26,7 +32,7 @@ import PackageListItem from "./PackageListItem.vue";</script>
|
|||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 24px;
|
margin-bottom: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.package-group {
|
.package-group {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { useRouter } from 'vitepress';
|
import { useRouter } from 'vitepress';
|
||||||
import {PackageItem} from "../../types";
|
import {PackageItem} from "../../types";
|
||||||
import VPButton from 'vitepress/dist/client/theme-default/components/VPButton.vue';
|
import VPButton from 'vitepress/dist/client/theme-default/components/VPButton.vue';
|
||||||
|
import Card from '../base/Card.vue'
|
||||||
|
|
||||||
const { go } = useRouter()
|
const { go } = useRouter()
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
@@ -10,7 +11,8 @@ const props = defineProps<{
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<article class="package">
|
<div>
|
||||||
|
<Card class="package">
|
||||||
<header class="package-header">
|
<header class="package-header">
|
||||||
<div class="package-icon-well">
|
<div class="package-icon-well">
|
||||||
<img :src="packageData.icon" alt="" class="package-icon" :class="{[packageData.iconClass]: true, light: packageData.iconDark}" />
|
<img :src="packageData.icon" alt="" class="package-icon" :class="{[packageData.iconClass]: true, light: packageData.iconDark}" />
|
||||||
@@ -31,27 +33,18 @@ const props = defineProps<{
|
|||||||
:href="packageData.documentation"
|
:href="packageData.documentation"
|
||||||
text="Guide"
|
text="Guide"
|
||||||
theme="brand"
|
theme="brand"
|
||||||
@click="go(packageData.documentation)"
|
|
||||||
/>
|
/>
|
||||||
<VPButton
|
<VPButton
|
||||||
:href="packageData.source"
|
:href="packageData.source"
|
||||||
text="Source"
|
text="Source"
|
||||||
theme="alt"
|
theme="alt"
|
||||||
@click="go(packageData.source)"
|
|
||||||
/>
|
/>
|
||||||
</footer>
|
</footer>
|
||||||
</article>
|
</Card>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<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 {
|
.package {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|||||||
72
docs/.vitepress/theme/components/showcase/ShowcaseList.vue
Normal file
@@ -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>
|
||||||
@@ -3,12 +3,8 @@ import { nextTick, onMounted, ref, watch } from 'vue';
|
|||||||
|
|
||||||
const useSearchInput = () => {
|
const useSearchInput = () => {
|
||||||
const searchInput = ref();
|
const searchInput = ref();
|
||||||
const searchQuery = ref(
|
const searchQuery = ref<string>('');
|
||||||
typeof window === 'undefined'
|
const searchQueryDebounced = useDebounce<string>(searchQuery, 200);
|
||||||
? ''
|
|
||||||
: new URLSearchParams(window.location.search).get('search') || ''
|
|
||||||
);
|
|
||||||
const searchQueryDebounced = useDebounce(searchQuery, 250);
|
|
||||||
|
|
||||||
watch(searchQueryDebounced, (searchString) => {
|
watch(searchQueryDebounced, (searchString) => {
|
||||||
const newUrl = new URL(window.location.href);
|
const newUrl = new URL(window.location.href);
|
||||||
@@ -26,6 +22,11 @@ const useSearchInput = () => {
|
|||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
const searchParams = new URLSearchParams(window.location.search);
|
const searchParams = new URLSearchParams(window.location.search);
|
||||||
|
|
||||||
|
if (searchParams.has('search')) {
|
||||||
|
searchQuery.value = searchParams.get('search');
|
||||||
|
}
|
||||||
|
|
||||||
if (searchParams.has('focus')) {
|
if (searchParams.has('focus')) {
|
||||||
searchInput.value.focus();
|
searchInput.value.focus();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,6 +153,10 @@ html:has(* .outline-link:target) {
|
|||||||
scroll-behavior: smooth;
|
scroll-behavior: smooth;
|
||||||
} */
|
} */
|
||||||
|
|
||||||
|
.sp-wrapper + * {
|
||||||
|
margin-top: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
.sp-wrapper .sp-layout {
|
.sp-wrapper .sp-layout {
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,3 +44,14 @@ export interface Release {
|
|||||||
version: string
|
version: string
|
||||||
date: string
|
date: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ShowcaseItemImage {
|
||||||
|
light: string
|
||||||
|
dark: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ShowcaseItem {
|
||||||
|
name: string
|
||||||
|
url: string
|
||||||
|
image: ShowcaseItemImage
|
||||||
|
}
|
||||||
|
|||||||
23
docs/guide/advanced/examples/filled-icon-example/App.js
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import { Star, StarHalf } from "lucide-react";
|
||||||
|
import "./icon.css";
|
||||||
|
|
||||||
|
function App() {
|
||||||
|
return (
|
||||||
|
<div className="app">
|
||||||
|
<div className="star-rating">
|
||||||
|
<div className="stars">
|
||||||
|
{ Array.from({ length: 5 }, () => (
|
||||||
|
<Star fill="#111" strokeWidth={0} />
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
<div className="stars rating">
|
||||||
|
<Star fill="yellow" strokeWidth={0} />
|
||||||
|
<Star fill="yellow" strokeWidth={0} />
|
||||||
|
<StarHalf fill="yellow" strokeWidth={0} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default App;
|
||||||
20
docs/guide/advanced/examples/filled-icon-example/files.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import App from './App.js?raw'
|
||||||
|
import styles from '../../../basics/examples/styles.css?raw'
|
||||||
|
import IconCss from './icon.css?raw'
|
||||||
|
|
||||||
|
const files = {
|
||||||
|
'App.js': {
|
||||||
|
code: App,
|
||||||
|
active: true,
|
||||||
|
},
|
||||||
|
'icon.css': {
|
||||||
|
code: IconCss,
|
||||||
|
readOnly: false,
|
||||||
|
},
|
||||||
|
'styles.css': {
|
||||||
|
code: styles,
|
||||||
|
hidden: true
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
export default files
|
||||||
14
docs/guide/advanced/examples/filled-icon-example/icon.css
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
.star-rating {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stars {
|
||||||
|
display: flex;
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rating {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import {
|
||||||
|
TentTree,
|
||||||
|
Caravan,
|
||||||
|
FlameKindling,
|
||||||
|
MountainSnow,
|
||||||
|
Trees,
|
||||||
|
Axe,
|
||||||
|
Map,
|
||||||
|
CloudMoon,
|
||||||
|
Sparkles,
|
||||||
|
} from "lucide-react";
|
||||||
|
import "./icon.css";
|
||||||
|
|
||||||
|
function App() {
|
||||||
|
return (
|
||||||
|
<div className="app">
|
||||||
|
<TentTree />
|
||||||
|
<Caravan />
|
||||||
|
<FlameKindling />
|
||||||
|
<MountainSnow />
|
||||||
|
<Trees />
|
||||||
|
<Axe />
|
||||||
|
<Map />
|
||||||
|
<CloudMoon />
|
||||||
|
<Sparkles />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default App;
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import App from './App.js?raw'
|
||||||
|
import styles from '../../../basics/examples/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,16 @@
|
|||||||
|
.lucide {
|
||||||
|
width: 48px;
|
||||||
|
height: 48px;
|
||||||
|
stroke-width: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lucide * {
|
||||||
|
vector-effect: non-scaling-stroke;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr;
|
||||||
|
grid-template-rows: 1fr 1fr 1fr;
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import {
|
||||||
|
CakeSlice,
|
||||||
|
Candy,
|
||||||
|
Apple,
|
||||||
|
Cookie,
|
||||||
|
Martini,
|
||||||
|
IceCream2,
|
||||||
|
Sandwich,
|
||||||
|
Wine,
|
||||||
|
Dessert,
|
||||||
|
} from "lucide-react";
|
||||||
|
import "./icon.css";
|
||||||
|
|
||||||
|
function App() {
|
||||||
|
return (
|
||||||
|
<div className="app">
|
||||||
|
<CakeSlice />
|
||||||
|
<Candy />
|
||||||
|
<Apple />
|
||||||
|
<Cookie />
|
||||||
|
<Martini />
|
||||||
|
<IceCream2 />
|
||||||
|
<Sandwich />
|
||||||
|
<Wine />
|
||||||
|
<Dessert />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default App;
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import App from './App.js?raw'
|
||||||
|
import styles from '../../../basics/examples/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,14 @@
|
|||||||
|
.lucide {
|
||||||
|
/* Change this! */
|
||||||
|
color: #ffadff;
|
||||||
|
width: 56px;
|
||||||
|
height: 56px;
|
||||||
|
stroke-width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr;
|
||||||
|
grid-template-rows: 1fr 1fr 1fr;
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
<script setup>
|
||||||
|
import { Sandpack } from 'sandpack-vue3'
|
||||||
|
import sandpackTheme from '../../.vitepress/theme/sandpackTheme.json'
|
||||||
|
import sizeIconExample from './examples/filled-icon-example/files.ts'
|
||||||
|
</script>
|
||||||
|
|
||||||
# Filled Icons
|
# Filled Icons
|
||||||
|
|
||||||
Fills are officially not supported.
|
Fills are officially not supported.
|
||||||
@@ -5,9 +11,21 @@ However, all SVG properties are available on all icons.
|
|||||||
Fill can still be used and will work fine on certain icons.
|
Fill can still be used and will work fine on certain icons.
|
||||||
|
|
||||||
Example with stars:
|
Example with stars:
|
||||||
|
<Sandpack
|
||||||
<!-- Code Example with stars -->
|
template="react"
|
||||||
|
:theme="sandpackTheme"
|
||||||
|
:files="sizeIconExample"
|
||||||
|
:customSetup='{
|
||||||
|
dependencies: {
|
||||||
|
"lucide-react": "latest"
|
||||||
|
}
|
||||||
|
}'
|
||||||
|
:options="{
|
||||||
|
editorHeight: 480,
|
||||||
|
editorWidthPercentage: 60,
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
|
||||||
## Will Lucide have fills in the future?
|
## 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).
|
This feature has been requested several times and discussion is happening at [#458](https://github.com/lucide-icons/lucide/discussions/458).
|
||||||
|
|||||||
55
docs/guide/advanced/global-styling.md
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<script setup>
|
||||||
|
import { Sandpack } from 'sandpack-vue3'
|
||||||
|
import sandpackTheme from '../../.vitepress/theme/sandpackTheme.json'
|
||||||
|
import globalIconCssExample from './examples/global-styling-css-example/files.ts'
|
||||||
|
import globalAbsoluteStrokewidthExample from './examples/global-styling-absolute-strokewidth-example/files.ts'
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
# Global Styling
|
||||||
|
|
||||||
|
Adjusting icons can be done by [color](../basics/color.md), [size](../basics/sizing.md) and [stroke width](../basics/stroke-width.md).
|
||||||
|
|
||||||
|
By default, all icons have a **color** value of `currentColor`, a **size** value of `24px`, and a **stroke width** of `2`. Styling icons individually can be done by passing props to the icon component.
|
||||||
|
|
||||||
|
## Style by using CSS
|
||||||
|
Styling icons is easy to accomplish using CSS.
|
||||||
|
|
||||||
|
Every icon has a class attribute applied called `lucide`. This class name can be used in the CSS file to target all icons that are being used within the app.
|
||||||
|
|
||||||
|
- The **color** of the icons can be changed using the [`color`](https://developer.mozilla.org/en-US/docs/Web/CSS/color) CSS property.
|
||||||
|
- The **size** of the icons can be changed using [`width`](https://developer.mozilla.org/en-US/docs/Web/CSS/width) and [`height`](https://developer.mozilla.org/en-US/docs/Web/CSS/height) CSS properties.
|
||||||
|
- The **stroke width** of the icons can be changed using the [`stroke-width`](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width) CSS property.
|
||||||
|
|
||||||
|
<Sandpack
|
||||||
|
template="react"
|
||||||
|
:theme="sandpackTheme"
|
||||||
|
:files="globalIconCssExample"
|
||||||
|
:customSetup='{
|
||||||
|
dependencies: {
|
||||||
|
"lucide-react": "latest"
|
||||||
|
}
|
||||||
|
}'
|
||||||
|
:options="{
|
||||||
|
editorHeight: 300,
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
|
||||||
|
### Absolute stroke width
|
||||||
|
|
||||||
|
For global absolute stroke width styling the `vector-effect: non-scaling-stroke` CSS property can be applied to the children. This will keep the stroke-width the same size no matter the size of the icon. See [absolute-stroke-width](../basics/stroke-width.md#absolute-stroke-width) for more info.
|
||||||
|
|
||||||
|
<Sandpack
|
||||||
|
template="react"
|
||||||
|
:theme="sandpackTheme"
|
||||||
|
:files="globalAbsoluteStrokewidthExample"
|
||||||
|
:customSetup='{
|
||||||
|
dependencies: {
|
||||||
|
"lucide-react": "latest"
|
||||||
|
}
|
||||||
|
}'
|
||||||
|
:options="{
|
||||||
|
editorHeight: 300,
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
|
||||||
@@ -11,5 +11,5 @@
|
|||||||
/* layout stuff */
|
/* layout stuff */
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 0.25em;
|
gap: 0.25em;
|
||||||
items-align: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
@@ -14,15 +14,15 @@ The Illustrator template is created following guidelines from the [Icon Design G
|
|||||||
|
|
||||||
**Workflow:**
|
**Workflow:**
|
||||||
|
|
||||||
1. Download and open the [Illustrator template](https://github.com/lucide-icons/lucide/blob/main/docs/templates/illustrator_template.ai).
|
1. Download and open the [Illustrator template](https://github.com/lucide-icons/lucide/blob/main/docs/public/templates/illustrator_template.ai).
|
||||||
|
|
||||||
2. You can now remove the content from the example logo layer ("Draw") and start creating.
|
2. You can now remove the content from the example logo layer ("Draw") and start creating.
|
||||||
|
|
||||||
3. Verify that you follow the [Icon Design Guidelines](icon-design-guide.md).
|
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:
|
5. Export the file with the export menu under: `Export > Export As..` then save the file as SVG. Select the following options in the SVG Options dialog:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Implementation of the lucide icon library for React Native applications
|
|||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
First, ensure that you have `react-native-svg@^12.0.0` installed. Then, install the package:
|
First, ensure that you have `react-native-svg` (version between 12 and 14) installed. Then, install the package:
|
||||||
|
|
||||||
::: code-group
|
::: code-group
|
||||||
|
|
||||||
@@ -72,7 +72,7 @@ The example below imports all ES Modules, so exercise caution when using it. Imp
|
|||||||
### Icon Component Example
|
### Icon Component Example
|
||||||
|
|
||||||
```jsx
|
```jsx
|
||||||
import { icons } from 'lucide-react';
|
import { icons } from 'lucide-react-native';
|
||||||
|
|
||||||
const Icon = ({ name, color, size }) => {
|
const Icon = ({ name, color, size }) => {
|
||||||
const LucideIcon = icons[name];
|
const LucideIcon = icons[name];
|
||||||
|
|||||||
@@ -109,7 +109,8 @@ Example with React suspense:
|
|||||||
|
|
||||||
```tsx
|
```tsx
|
||||||
import React, { lazy, Suspense } from 'react';
|
import React, { lazy, Suspense } from 'react';
|
||||||
import { dynamicIconImports, LucideProps } from 'lucide-react';
|
import { LucideProps } from 'lucide-react';
|
||||||
|
import dynamicIconImports from 'lucide-react/dynamicIconImports';
|
||||||
|
|
||||||
const fallback = <div style={{ background: '#ddd', width: 24, height: 24 }}/>
|
const fallback = <div style={{ background: '#ddd', width: 24, height: 24 }}/>
|
||||||
|
|
||||||
|
|||||||
@@ -48,14 +48,24 @@ Additional props can be passed to adjust the icon:
|
|||||||
<Camera color="#ff3e98" />
|
<Camera color="#ff3e98" />
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For faster builds and load times, you can import icons directly from the `lucide-svelte/icons` directory:
|
||||||
|
|
||||||
|
```svelte
|
||||||
|
<script>
|
||||||
|
import AlertCircle from 'lucide-svelte/icons/alert-circle';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<AlertCircle color="#ff3e98" />
|
||||||
|
```
|
||||||
|
|
||||||
## Props
|
## Props
|
||||||
|
|
||||||
| name | type | default |
|
| name | type | default |
|
||||||
| --------------------- | --------- | ------------ |
|
| --------------------- | --------- | ------------ |
|
||||||
| `size` | *number* | 24 |
|
| `size` | _number_ | 24 |
|
||||||
| `color` | *string* | currentColor |
|
| `color` | _string_ | currentColor |
|
||||||
| `strokeWidth` | *number* | 2 |
|
| `strokeWidth` | _number_ | 2 |
|
||||||
| `absoluteStrokeWidth` | *boolean* | false |
|
| `absoluteStrokeWidth` | _boolean_ | false |
|
||||||
|
|
||||||
### Applying props
|
### Applying props
|
||||||
|
|
||||||
@@ -71,6 +81,91 @@ To customize the appearance of an icon, you can pass custom properties as props
|
|||||||
|
|
||||||
This results a filled phone icon.
|
This results a filled phone icon.
|
||||||
|
|
||||||
|
## Types
|
||||||
|
|
||||||
|
The package includes type definitions for all icons. This is useful if you want to dynamically load icons with the `svelte:component` directive whether you are using TypeScript or JSDoc.
|
||||||
|
|
||||||
|
### TypeScript Example
|
||||||
|
|
||||||
|
```svelte
|
||||||
|
<script lang="ts">
|
||||||
|
import Home from 'lucide-svelte/icons/home';
|
||||||
|
import Library from 'lucide-svelte/icons/library';
|
||||||
|
import Cog from 'lucide-svelte/icons/cog';
|
||||||
|
import type { ComponentType } from 'svelte';
|
||||||
|
import type { Icon } from 'lucide-svelte';
|
||||||
|
|
||||||
|
type MenuItem = {
|
||||||
|
name: string;
|
||||||
|
href: string;
|
||||||
|
icon: ComponentType<Icon>;
|
||||||
|
}
|
||||||
|
|
||||||
|
const menuItems: MenuItem[] = [
|
||||||
|
{
|
||||||
|
name: 'Home',
|
||||||
|
href: '/',
|
||||||
|
icon: Home,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Blog',
|
||||||
|
href: '/blog',
|
||||||
|
icon: Library,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Projects',
|
||||||
|
href: '/projects',
|
||||||
|
icon: Cog,
|
||||||
|
}
|
||||||
|
];
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#each menuItems as item}
|
||||||
|
<a href={item.href}>
|
||||||
|
<svelte:component this={item.icon} />
|
||||||
|
<span>{item.name}</span>
|
||||||
|
</a>
|
||||||
|
{/each}
|
||||||
|
```
|
||||||
|
|
||||||
|
### JSDoc Example
|
||||||
|
|
||||||
|
```svelte
|
||||||
|
<script>
|
||||||
|
import Home from 'lucide-svelte/icons/home';
|
||||||
|
import Library from 'lucide-svelte/icons/library';
|
||||||
|
import Cog from 'lucide-svelte/icons/cog';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} MenuItem
|
||||||
|
* @property {string} name
|
||||||
|
* @property {string} href
|
||||||
|
* @property {import('svelte').ComponentType<import('lucide-svelte').Icon>} icon
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @type {MenuItem[]} */
|
||||||
|
const menuItems = [
|
||||||
|
{
|
||||||
|
name: 'Home',
|
||||||
|
href: '/',
|
||||||
|
icon: Home,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Blog',
|
||||||
|
href: '/blog',
|
||||||
|
icon: Library,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Projects',
|
||||||
|
href: '/projects',
|
||||||
|
icon: Cog,
|
||||||
|
}
|
||||||
|
];
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
For more details about typing the `svelte:component` directive, see the [Svelte documentation](https://svelte.dev/docs/typescript#types-componenttype).
|
||||||
|
|
||||||
## One generic icon component
|
## One generic icon component
|
||||||
|
|
||||||
It is possible to create one generic icon component to load icons, but it is not recommended.
|
It is possible to create one generic icon component to load icons, but it is not recommended.
|
||||||
@@ -99,4 +194,3 @@ The example below imports all ES Modules, so exercise caution when using it. Imp
|
|||||||
|
|
||||||
<LucideIcon name="Menu" />
|
<LucideIcon name="Menu" />
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
Implementation of the lucide icon library for Vue applications.
|
Implementation of the lucide icon library for Vue applications.
|
||||||
|
|
||||||
|
::: warning
|
||||||
|
This package will be deprecated end of 2023. Vue v2 will be EOF at the end of 2023 See [Announcement](https://v2.vuejs.org/lts/). We recommend to migrate to Vue 3.
|
||||||
|
The Lucide Vue package will be only maintained for Vue 3 after the deprecation.
|
||||||
|
:::
|
||||||
|
|
||||||
## Vue 2 or Vue 3
|
## Vue 2 or Vue 3
|
||||||
|
|
||||||
::: tip
|
::: tip
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 57 KiB |
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
aside: false
|
aside: false
|
||||||
|
editLink: false
|
||||||
---
|
---
|
||||||
|
|
||||||
# Lucide License
|
# Lucide License
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import copy from 'rollup-plugin-copy';
|
|||||||
import replace from '@rollup/plugin-replace';
|
import replace from '@rollup/plugin-replace';
|
||||||
|
|
||||||
export default defineNitroConfig({
|
export default defineNitroConfig({
|
||||||
preset: 'vercel-edge',
|
preset: 'vercel_edge',
|
||||||
srcDir: '.vitepress',
|
srcDir: '.vitepress',
|
||||||
routeRules: {
|
routeRules: {
|
||||||
'/api/**': { cors: false },
|
'/api/**': { cors: false },
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1",
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
"docs:dev": "pnpm prebuild && vitepress dev",
|
"docs:dev": "pnpm run /^prebuild:.*/ && vitepress dev",
|
||||||
"docs:build": "vitepress build",
|
"docs:build": "pnpm run /^prebuild:.*/ && vitepress build",
|
||||||
"docs:preview": "vitepress preview",
|
"docs:preview": "vitepress preview",
|
||||||
"build:docs": "vitepress build",
|
"build:docs": "vitepress build",
|
||||||
"prebuild:iconNodes": "node ../scripts/writeIconNodes.mjs",
|
"prebuild:iconNodes": "node ../scripts/writeIconNodes.mjs",
|
||||||
@@ -16,9 +16,9 @@
|
|||||||
"prebuild:iconDetails": "node ../scripts/writeIconDetails.mjs",
|
"prebuild:iconDetails": "node ../scripts/writeIconDetails.mjs",
|
||||||
"postbuild:vercelJson": "node ../scripts/writeVercelOutput.mjs",
|
"postbuild:vercelJson": "node ../scripts/writeVercelOutput.mjs",
|
||||||
"dev": "npx nitropack dev",
|
"dev": "npx nitropack dev",
|
||||||
|
"prebuild:api": "npx nitropack prepare",
|
||||||
"build:api": "npx nitropack build",
|
"build:api": "npx nitropack build",
|
||||||
"prebuild": "pnpm prebuild:iconNodes && pnpm prebuild:metaJson && pnpm prebuild:releaseJson && pnpm prebuild:relatedIcons && pnpm prebuild:iconDetails",
|
"build": "pnpm run /^prebuild:.*/ && pnpm run /^build:.*/ && pnpm postbuild:vercelJson",
|
||||||
"build": "pnpm prebuild && pnpm build:api && pnpm build:docs && pnpm postbuild:vercelJson",
|
|
||||||
"preview": "node .output/server/index.mjs"
|
"preview": "node .output/server/index.mjs"
|
||||||
},
|
},
|
||||||
"author": "Eric Fennis",
|
"author": "Eric Fennis",
|
||||||
@@ -27,17 +27,17 @@
|
|||||||
"@rollup/plugin-replace": "^5.0.2",
|
"@rollup/plugin-replace": "^5.0.2",
|
||||||
"@types/semver": "^7.5.3",
|
"@types/semver": "^7.5.3",
|
||||||
"h3": "^1.8.0",
|
"h3": "^1.8.0",
|
||||||
"nitropack": "npm:nitropack-edge@latest",
|
"nitropack": "2.8.1",
|
||||||
"node-fetch": "2",
|
"node-fetch": "2",
|
||||||
"rollup-plugin-copy": "^3.4.0",
|
"rollup-plugin-copy": "^3.4.0",
|
||||||
"vitepress": "1.0.0-rc.10"
|
"vitepress": "1.0.0-rc.36"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@floating-ui/vue": "^1.0.1",
|
"@floating-ui/vue": "^1.0.3",
|
||||||
"@headlessui/vue": "^1.7.13",
|
"@headlessui/vue": "^1.7.17",
|
||||||
"@resvg/resvg-wasm": "^2.4.1",
|
"@resvg/resvg-wasm": "^2.4.1",
|
||||||
"@vueuse/components": "^10.1.0",
|
"@vueuse/components": "^10.7.2",
|
||||||
"@vueuse/core": "^10.1.0",
|
"@vueuse/core": "^10.7.2",
|
||||||
"element-to-path": "^1.2.1",
|
"element-to-path": "^1.2.1",
|
||||||
"fuse.js": "^6.5.3",
|
"fuse.js": "^6.5.3",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
@@ -48,14 +48,13 @@
|
|||||||
"lucide-vue-next": "workspace:*",
|
"lucide-vue-next": "workspace:*",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"sandpack-vue3": "^3.1.6",
|
"sandpack-vue3": "3.1.8",
|
||||||
"semver": "^7.5.2",
|
"semver": "^7.5.2",
|
||||||
"shiki": "^0.14.2",
|
"shikiji": "^0.7.4",
|
||||||
"shiki-processor": "^0.1.3",
|
|
||||||
"simple-git": "^3.18.0",
|
"simple-git": "^3.18.0",
|
||||||
"sitemap": "^7.1.1",
|
"sitemap": "^7.1.1",
|
||||||
"svg-pathdata": "^6.0.3",
|
"svg-pathdata": "^6.0.3",
|
||||||
"svgson": "^5.2.1",
|
"svgson": "^5.2.1",
|
||||||
"vue": "^3.2.47"
|
"vue": "^3.4.13"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
layout: page
|
layout: page
|
||||||
outline: 2
|
outline: 2
|
||||||
outlineTitle: Packages
|
outlineTitle: Packages
|
||||||
sidebar: true
|
|
||||||
---
|
---
|
||||||
<script setup>
|
<script setup>
|
||||||
import PageContainer from '.vitepress/theme/components/PageContainer.vue'
|
import PageContainer from '.vitepress/theme/components/PageContainer.vue'
|
||||||
|
|||||||
28
docs/public/company-logos/noodle-dark.svg
Normal 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 |
28
docs/public/company-logos/noodle-light.svg
Normal 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="#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 |
14
docs/public/company-logos/obsidian-dark.svg
Normal file
@@ -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 |
14
docs/public/company-logos/obsidian-light.svg
Normal file
@@ -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 |
5
docs/public/company-logos/open-collective-dark.svg
Normal file
@@ -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 |
5
docs/public/company-logos/open-collective-light.svg
Normal file
@@ -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 |
23
docs/public/company-logos/supabase-dark.svg
Normal file
@@ -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 |
23
docs/public/company-logos/supabase-light.svg
Normal file
@@ -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
docs/public/company-logos/super-dark.svg
Normal 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 |
9
docs/public/company-logos/super-light.svg
Normal file
@@ -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 |
1
docs/public/company-logos/vercel-dark.svg
Normal file
@@ -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 |
1
docs/public/company-logos/vercel-light.svg
Normal file
@@ -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 |
@@ -1,5 +1,18 @@
|
|||||||
<svg width="30" height="33" viewBox="0 0 20 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 223 236" width="32">
|
||||||
<path d="M10 0 0 3.57l1.53 13.22 8.47 4.7 8.47-4.7L20 3.57 10 0Z" fill="#DD0031"/>
|
<path fill="url(#b)" d="m222.08 39.2-8.02 125.91L137.39 0l84.69 39.2Zm-53.1 162.82-57.94 33.05-57.93-33.05 11.78-28.56h92.3l11.78 28.56ZM111.03 62.68l30.36 73.8H80.68l30.36-73.8ZM7.94 165.12 0 39.19 84.69 0 7.94 165.12Z"/>
|
||||||
<path d="M10 0v21.48l8.47-4.7L20 3.58 10 0Z" fill="#C3002F"/>
|
<path fill="url(#c)" d="m222.08 39.2-8.02 125.91L137.39 0l84.69 39.2Zm-53.1 162.82-57.94 33.05-57.93-33.05 11.78-28.56h92.3l11.78 28.56ZM111.03 62.68l30.36 73.8H80.68l30.36-73.8ZM7.94 165.12 0 39.19 84.69 0 7.94 165.12Z"/>
|
||||||
<path d="M10 2.37 3.75 16.4h2.33l1.26-3.14h5.3l1.26 3.14h2.33L10 2.37Zm1.83 8.95H8.17L10 6.92l1.83 4.4Z" fill="#fff"/>
|
<defs>
|
||||||
|
<linearGradient id="b" x1="49.01" x2="225.83" y1="213.75" y2="129.72" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#E40035"/>
|
||||||
|
<stop offset=".24" stop-color="#F60A48"/>
|
||||||
|
<stop offset=".35" stop-color="#F20755"/>
|
||||||
|
<stop offset=".49" stop-color="#DC087D"/>
|
||||||
|
<stop offset=".74" stop-color="#9717E7"/>
|
||||||
|
<stop offset="1" stop-color="#6C00F5"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="c" x1="41.02" x2="156.74" y1="28.34" y2="160.34" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#FF31D9"/>
|
||||||
|
<stop offset="1" stop-color="#FF5BE1" stop-opacity="0"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 373 B After Width: | Height: | Size: 1.2 KiB |
5
docs/public/library-logos/shadcn-ui-dark.svg
Normal file
@@ -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 |