diff --git a/.cspell/custom-words.txt b/.cspell/custom-words.txt
new file mode 100644
index 0000000000..056ab5a511
--- /dev/null
+++ b/.cspell/custom-words.txt
@@ -0,0 +1,17 @@
+# Custom words
+fullscreen
+gamepad
+gantt
+kanban
+pilcrow
+squircle
+strikethrough
+touchpad
+ungroup
+pilcrow
+toc
+
+# Brands
+codepen
+codesandbox
+dribbble
diff --git a/.eslintignore b/.eslintignore
index 925b234bd2..ffae92223d 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -6,6 +6,5 @@ tests
node_modules
.eslintrc.js
docs/images
-docs/guide/basics/examples
-docs/guide/advanced/examples
+docs/**/examples/
packages/lucide-react/dynamicIconImports.js
diff --git a/.eslintrc.js b/.eslintrc.js
index ff086ba210..ae2e17576a 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,4 +1,4 @@
-const DEFAULT_ATTRS = require('./scripts/render/default-attrs.json');
+const DEFAULT_ATTRS = require('./tools/build-icons/render/default-attrs.json');
module.exports = {
root: true,
@@ -15,7 +15,9 @@ module.exports = {
'no-use-before-define': 'off',
'import/no-extraneous-dependencies': [
'error',
- { devDependencies: ['**/*.test.js', '**/*.spec.js', './scripts/**'] },
+ {
+ devDependencies: ['**/*.test.js', '**/*.spec.js', '**/scripts/**'],
+ },
],
'import/extensions': [
'error',
@@ -42,12 +44,15 @@ module.exports = {
'@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) }))
+ '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-multiple-empty-lines': ['error', { max: 0 }],
'@html-eslint/no-extra-spacing-attrs': [
'error',
{
@@ -64,7 +69,7 @@ module.exports = {
'@html-eslint/element-newline': 'error',
'@html-eslint/no-trailing-spaces': 'error',
'@html-eslint/quotes': 'error',
- }
+ },
},
],
};
diff --git a/.github/ISSUE_TEMPLATE/02_bug_report.yml b/.github/ISSUE_TEMPLATE/02_bug_report.yml
index 4d830cd558..21dd4e1f2c 100644
--- a/.github/ISSUE_TEMPLATE/02_bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/02_bug_report.yml
@@ -35,6 +35,16 @@ body:
placeholder: e.g. 0.289.1
validations:
required: true
+ - type: checkboxes
+ id: can-reproduce-in-latest-version
+ attributes:
+ label: Can you reproduce this in the latest version?
+ description: i.e. after running `npm install lucide-react@latest`
+ options:
+ - label: 'Yes'
+ - label: 'No'
+ validations:
+ required: false
- type: checkboxes
id: browsers
attributes:
@@ -59,6 +69,9 @@ body:
- label: Windows
- label: Linux
- label: macOS
+ - label: ChromeOS
+ - label: iOS
+ - label: Android
- label: Other/not relevant
- type: textarea
id: description
diff --git a/.github/ISSUE_TEMPLATE/03_bug_report_site.yml b/.github/ISSUE_TEMPLATE/03_bug_report_site.yml
index 36438cf439..8b1cda4afc 100644
--- a/.github/ISSUE_TEMPLATE/03_bug_report_site.yml
+++ b/.github/ISSUE_TEMPLATE/03_bug_report_site.yml
@@ -30,6 +30,9 @@ body:
- label: Windows
- label: Linux
- label: macOS
+ - label: ChromeOS
+ - label: iOS
+ - label: Android
- label: Other/not relevant
- type: textarea
id: description
diff --git a/.github/actions/build-and-test.yml b/.github/actions/build-and-test.yml
index 2a0b9fa8d8..5b5a4675f9 100644
--- a/.github/actions/build-and-test.yml
+++ b/.github/actions/build-and-test.yml
@@ -1,5 +1,5 @@
-name: "Build and Test"
-description: "Builds and test a package"
+name: 'Build and Test'
+description: 'Builds and test a package'
inputs:
name:
@@ -7,7 +7,7 @@ inputs:
required: true
runs:
- using: "composite"
+ using: 'composite'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
diff --git a/.github/actions/check-icons.yml b/.github/actions/check-icons.yml
index ad9af1f9ef..0850a17ac9 100644
--- a/.github/actions/check-icons.yml
+++ b/.github/actions/check-icons.yml
@@ -1,5 +1,5 @@
-name: "Check icons"
-description: "Cross-checks icon and category references in JSON descriptors"
+name: 'Check icons'
+description: 'Cross-checks icon and category references in JSON descriptors'
inputs:
name:
@@ -7,7 +7,7 @@ inputs:
required: true
runs:
- using: "composite"
+ using: 'composite'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
diff --git a/.github/labeler.yml b/.github/labeler.yml
index 696122eff8..2023caf3d1 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -1,92 +1,92 @@
# For changed dependencies
๐ฆ dependencies:
-- changed-files:
- - any-glob-to-any-file:
- - pnpm-lock.yaml
+ - changed-files:
+ - any-glob-to-any-file:
+ - pnpm-lock.yaml
# For changes in documentation
๐ documentation:
-- changed-files:
- - any-glob-to-any-file:
- - docs/*.md
- - docs/**/*.md
+ - changed-files:
+ - any-glob-to-any-file:
+ - docs/*.md
+ - docs/**/*.md
# For changes in the site, but not markdown files
๐ site:
-- changed-files:
- - any-glob-to-any-file:
- - 'docs/**'
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'docs/**'
# For changes in the metadata
๐ซง metadata:
-- changed-files:
- - any-glob-to-any-file:
- - 'icons/*.json'
- - categories/*
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'icons/*.json'
+ - categories/*
# For changes or added icons
๐จ icon:
-- changed-files:
- - any-glob-to-any-file:
- - 'icons/*.svg'
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'icons/*.svg'
# For changes in the lucide package
๐งณ lucide package:
-- changed-files:
- - any-glob-to-any-file:
- - 'packages/lucide/*'
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'packages/lucide/*'
# For changes in the lucide React package
โ๏ธ react package:
-- changed-files:
- - any-glob-to-any-file:
- - 'packages/lucide-react/*'
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'packages/lucide-react/*'
# For changes in the lucide React Native package
โ๏ธ react native package:
-- changed-files:
- - any-glob-to-any-file:
- - 'packages/lucide-react-native/*'
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'packages/lucide-react-native/*'
# For changes in the lucide vue packages
๐ vue package:
-- changed-files:
- - any-glob-to-any-file:
- - 'packages/lucide-vue/*'
- - 'packages/lucide-vue-next/*'
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'packages/lucide-vue/*'
+ - 'packages/lucide-vue-next/*'
# For changes in the lucide angular package
๐
ฐ๏ธ angular package:
-- changed-files:
- - any-glob-to-any-file:
- - 'packages/lucide-angular/*'
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'packages/lucide-angular/*'
# For changes in the lucide preact package
โ๏ธ preact package:
-- changed-files:
- - any-glob-to-any-file:
- - 'packages/lucide-preact/*'
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'packages/lucide-preact/*'
# For changes in the lucide svelte package
๐งฃ svelte package:
-- changed-files:
- - any-glob-to-any-file:
- - 'packages/lucide-svelte/*'
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'packages/lucide-svelte/*'
# For changes in the lucide solid package
๐ช solid package:
-- changed-files:
- - any-glob-to-any-file:
- - 'packages/lucide-solid/*'
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'packages/lucide-solid/*'
# For changes in the lucide static package
๐ชจ static package:
-- changed-files:
- - any-glob-to-any-file:
- - 'packages/lucide-static/*'
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'packages/lucide-static/*'
# For changes in the lucide flutter package
๐น flutter package:
-- changed-files:
- - any-glob-to-any-file:
- - 'packages/lucide-flutter/*'
+ - changed-files:
+ - any-glob-to-any-file:
+ - 'packages/lucide-flutter/*'
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 1bda809420..2403cee42c 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -47,7 +47,7 @@
- [ ] I've made sure that the icons look sharp on low DPI displays.
- [ ] I've made sure that the icons look consistent with the icon set in size, optical volume and density.
- [ ] I've made sure that the icons are visually centered.
-- [ ] I've correctly optimized all icons to two points of precision.
+- [ ] I've correctly optimized all icons to three points of precision.
## Before Submitting
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7b6f6fed5d..b4a8048af2 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -17,8 +17,6 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
- with:
- version: 8
- uses: actions/setup-node@v4
with:
node-version: 18
diff --git a/.github/workflows/close-issue-with-banned-phrases.yml b/.github/workflows/close-issue-with-banned-phrases.yml
new file mode 100644
index 0000000000..135b5c6c28
--- /dev/null
+++ b/.github/workflows/close-issue-with-banned-phrases.yml
@@ -0,0 +1,35 @@
+name: Close Issue with Banned Phrases
+
+on:
+ issues:
+ types: [opened]
+
+jobs:
+ block_phrases:
+ runs-on: ubuntu-latest
+ permissions:
+ issues: write
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Check for blocked phrases in issue title
+ run: |
+ ISSUE_TITLE=$(jq -r '.issue.title' "$GITHUB_EVENT_PATH")
+ BLOCKED_PHRASES=("twitter" "whatsapp" "logo" "google" "tiktok" "facebook" "slack" "discord")
+
+ # Check title and body for blocked phrases
+ for PHRASE in "${BLOCKED_PHRASES[@]}"
+ do
+ if echo "$ISSUE_TITLE" | grep -i "$PHRASE"; then
+ gh issue close ${{ github.event.issue.number }} --reason "not planned" --comment "This looks like a duplicate, use the [search](https://github.com/lucide-icons/lucide/issues?q=is%3Aissue+$PHRASE) to find similar issues.
+
+ Read more about brand guideline rules at [We're not accepting new Brand icons #670](https://github.com/lucide-icons/lucide/issues/670).
+
+ Always happy to help on [Discord](https://discord.gg/EH6nSts)."
+ gh issue lock ${{ github.event.issue.number }} --reason spam
+ exit 1
+ fi
+ done
+ env:
+ GH_TOKEN: ${{ github.token }}
diff --git a/.github/workflows/close-stale-prs.yml b/.github/workflows/close-stale-prs.yml
index b074a60554..0b47315f47 100644
--- a/.github/workflows/close-stale-prs.yml
+++ b/.github/workflows/close-stale-prs.yml
@@ -1,11 +1,13 @@
name: Close stale issues and PR
on:
schedule:
- - cron: "45 1 * * *"
+ - cron: '45 1 * * *'
jobs:
stale:
runs-on: ubuntu-latest
+ permissions:
+ pull-requests: write
steps:
- uses: actions/stale@v9
with:
@@ -14,4 +16,5 @@ jobs:
close-pr-message: This PR was closed because it has been stalled for 5 days with no activity.
close-pr-label: ๐งถ stale
days-before-stale: 30
+ days-before-issue-stale: -1
days-before-close: -1
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
index 2a340279ef..bf474c4787 100644
--- a/.github/workflows/labeler.yml
+++ b/.github/workflows/labeler.yml
@@ -1,6 +1,6 @@
-name: "Pull Request Labeler"
+name: 'Pull Request Labeler'
on:
-- pull_request_target
+ - pull_request_target
jobs:
triage:
@@ -9,4 +9,4 @@ jobs:
pull-requests: write
runs-on: ubuntu-latest
steps:
- - uses: actions/labeler@v5
+ - uses: actions/labeler@v5
diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml
index cdc76ea5a4..b31306b454 100644
--- a/.github/workflows/linting.yml
+++ b/.github/workflows/linting.yml
@@ -11,8 +11,6 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
- with:
- version: 8
- uses: actions/setup-node@v4
with:
node-version: 18
diff --git a/.github/workflows/lucide-angular.yml b/.github/workflows/lucide-angular.yml
index d31c0859b8..143847741a 100644
--- a/.github/workflows/lucide-angular.yml
+++ b/.github/workflows/lucide-angular.yml
@@ -8,13 +8,11 @@ on:
- pnpm-lock.yaml
jobs:
- lucide-angular:
+ build:
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
@@ -26,5 +24,18 @@ jobs:
- name: Build
run: pnpm --filter lucide-angular build
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: pnpm/action-setup@v2
+ - uses: actions/setup-node@v3.8.1
+ with:
+ node-version: 18
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
- name: Test
run: pnpm --filter lucide-angular test
diff --git a/.github/workflows/lucide-font.yml b/.github/workflows/lucide-font.yml
index c12be90b6f..d9a771a7b1 100644
--- a/.github/workflows/lucide-font.yml
+++ b/.github/workflows/lucide-font.yml
@@ -13,8 +13,6 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
- with:
- version: 8
- uses: actions/setup-node@v4
with:
node-version: 18
@@ -29,7 +27,7 @@ jobs:
- name: Create font in ./lucide-font
run: pnpm build:font
- - name: "Upload to Artifacts"
+ - name: 'Upload to Artifacts'
uses: actions/upload-artifact@v3
with:
name: lucide-font
diff --git a/.github/workflows/lucide-preact.yml b/.github/workflows/lucide-preact.yml
index 0c071d1b6b..95da247577 100644
--- a/.github/workflows/lucide-preact.yml
+++ b/.github/workflows/lucide-preact.yml
@@ -4,6 +4,7 @@ on:
pull_request:
paths:
- packages/lucide-preact/**
+ - packages/shared/**
- tools/build-icons/**
- tools/rollup-plugins/**
- pnpm-lock.yaml
@@ -14,8 +15,6 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
- with:
- version: 8
- uses: actions/setup-node@v4
with:
node-version: 18
@@ -24,8 +23,5 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile
- - name: Build
- run: pnpm --filter lucide-preact build
-
- name: Test
run: pnpm --filter lucide-preact test
diff --git a/.github/workflows/lucide-react-native.yml b/.github/workflows/lucide-react-native.yml
index f8be337e10..72806b7305 100644
--- a/.github/workflows/lucide-react-native.yml
+++ b/.github/workflows/lucide-react-native.yml
@@ -4,6 +4,7 @@ on:
pull_request:
paths:
- packages/lucide-react-native/**
+ - packages/shared/**
- tools/build-icons/**
- tools/rollup-plugins/**
- pnpm-lock.yaml
@@ -14,8 +15,6 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
- with:
- version: 8
- uses: actions/setup-node@v4
with:
node-version: 18
@@ -24,8 +23,5 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile
- - name: Build
- run: pnpm --filter lucide-react-native build
-
- name: Test
run: pnpm --filter lucide-react-native test
diff --git a/.github/workflows/lucide-react.yml b/.github/workflows/lucide-react.yml
index ff11e530a3..cd25adc0d2 100644
--- a/.github/workflows/lucide-react.yml
+++ b/.github/workflows/lucide-react.yml
@@ -4,19 +4,18 @@ on:
pull_request:
paths:
- packages/lucide-react/**
+ - packages/shared/**
- tools/build-icons/**
- tools/rollup-plugins/**
- scripts/generateNextJSAliases.mjs
- pnpm-lock.yaml
jobs:
- lucide-react:
+ build:
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
@@ -28,5 +27,18 @@ jobs:
- name: Build
run: pnpm --filter lucide-react build
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: pnpm/action-setup@v2
+ - uses: actions/setup-node@v3.8.1
+ with:
+ node-version: 18
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
- name: Test
run: pnpm --filter lucide-react test
diff --git a/.github/workflows/lucide-shared.yml b/.github/workflows/lucide-shared.yml
new file mode 100644
index 0000000000..248ee86138
--- /dev/null
+++ b/.github/workflows/lucide-shared.yml
@@ -0,0 +1,24 @@
+name: Lucide Shared Checks
+
+on:
+ pull_request:
+ paths:
+ - packages/shared/**
+ - pnpm-lock.yaml
+
+jobs:
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: pnpm/action-setup@v2
+ - uses: actions/setup-node@v3.8.1
+ with:
+ node-version: 18
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
+ - name: Test
+ run: pnpm --filter lucide-react test
diff --git a/.github/workflows/lucide-solid.yml b/.github/workflows/lucide-solid.yml
index d32f98a1b5..8abeb75dfe 100644
--- a/.github/workflows/lucide-solid.yml
+++ b/.github/workflows/lucide-solid.yml
@@ -4,18 +4,17 @@ on:
pull_request:
paths:
- packages/lucide-solid/**
+ - packages/shared/**
- tools/build-icons/**
- tools/rollup-plugins/**
- pnpm-lock.yaml
jobs:
- lucide-solid:
+ build:
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
@@ -27,5 +26,18 @@ jobs:
- name: Build
run: pnpm --filter lucide-solid build
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: pnpm/action-setup@v2
+ - uses: actions/setup-node@v3.8.1
+ with:
+ node-version: 18
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
- name: Test
run: pnpm --filter lucide-solid test
diff --git a/.github/workflows/lucide-static.yml b/.github/workflows/lucide-static.yml
index fc0fc4b99a..02eace8bf5 100644
--- a/.github/workflows/lucide-static.yml
+++ b/.github/workflows/lucide-static.yml
@@ -13,8 +13,6 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
- with:
- version: 8
- uses: actions/setup-node@v4
with:
node-version: 18
diff --git a/.github/workflows/lucide-svelte.yml b/.github/workflows/lucide-svelte.yml
index 07088c6fb9..7603ce9122 100644
--- a/.github/workflows/lucide-svelte.yml
+++ b/.github/workflows/lucide-svelte.yml
@@ -4,18 +4,17 @@ on:
pull_request:
paths:
- packages/lucide-svelte/**
+ - packages/shared/**
- tools/build-icons/**
- tools/rollup-plugins/**
- pnpm-lock.yaml
jobs:
- lucide-svelte:
+ build:
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
@@ -27,5 +26,18 @@ jobs:
- name: Build
run: pnpm --filter lucide-svelte build
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: pnpm/action-setup@v2
+ - uses: actions/setup-node@v3.8.1
+ with:
+ node-version: 18
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
- name: Test
run: pnpm --filter lucide-svelte test
diff --git a/.github/workflows/lucide-vue-next.yml b/.github/workflows/lucide-vue-next.yml
index 68fd57a84b..12c39f1a99 100644
--- a/.github/workflows/lucide-vue-next.yml
+++ b/.github/workflows/lucide-vue-next.yml
@@ -4,18 +4,17 @@ on:
pull_request:
paths:
- packages/lucide-vue-next/**
+ - packages/shared/**
- tools/build-icons/**
- tools/rollup-plugins/**
- pnpm-lock.yaml
jobs:
- lucide-vue-next:
+ build:
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
@@ -27,5 +26,18 @@ jobs:
- name: Build
run: pnpm --filter lucide-vue-next build
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: pnpm/action-setup@v2
+ - uses: actions/setup-node@v3.8.1
+ with:
+ node-version: 18
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
- name: Test
run: pnpm --filter lucide-vue-next test
diff --git a/.github/workflows/lucide-vue.yml b/.github/workflows/lucide-vue.yml
index 94f2052ee9..37b67537ff 100644
--- a/.github/workflows/lucide-vue.yml
+++ b/.github/workflows/lucide-vue.yml
@@ -4,18 +4,17 @@ on:
pull_request:
paths:
- packages/lucide-vue/**
+ - packages/shared/**
- tools/build-icons/**
- tools/rollup-plugins/**
- pnpm-lock.yaml
jobs:
- lucide-vue:
+ build:
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
@@ -27,5 +26,18 @@ jobs:
- name: Build
run: pnpm --filter lucide-vue build
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: pnpm/action-setup@v2
+ - uses: actions/setup-node@v3.8.1
+ with:
+ node-version: 18
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
- name: Test
run: pnpm --filter lucide-vue test
diff --git a/.github/workflows/lucide.yml b/.github/workflows/lucide.yml
index 369d0a9e1a..1cc8d6f429 100644
--- a/.github/workflows/lucide.yml
+++ b/.github/workflows/lucide.yml
@@ -9,13 +9,11 @@ on:
- pnpm-lock.yaml
jobs:
- lucide:
+ build:
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
@@ -27,5 +25,18 @@ jobs:
- name: Build
run: pnpm --filter lucide build
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: pnpm/action-setup@v2
+ - uses: actions/setup-node@v3.8.1
+ with:
+ node-version: 18
+ cache: 'pnpm'
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
- name: Test
run: pnpm --filter lucide test
diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml
index 9c9ba21637..a204412783 100644
--- a/.github/workflows/pull-request.yml
+++ b/.github/workflows/pull-request.yml
@@ -3,7 +3,7 @@ name: Add Changed Icons comment
on:
pull_request_target:
paths:
- - 'icons/*.svg'
+ - 'icons/*'
branches:
- main
- fix-icon-preview
@@ -68,6 +68,16 @@ jobs:
# 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
+ lint-aliases:
+ name: Check Uniqueness of Aliases
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ steps:
+ - uses: actions/checkout@v4
+ - name: Check Uniqueness of Aliases
+ run: "! cat <(printf \"%s\\n\" icons/*.json | while read -r name; do basename \"$name\" .json; done) <(jq -cr 'select(.aliases) | .aliases[] | if type==\"string\" then . else .name end' icons/*.json) | sort | uniq -c | grep -ve '^\\s*1 '"
+
generate-changed-icons-comment:
runs-on: ubuntu-latest
permissions:
@@ -94,6 +104,10 @@ jobs:
comment-author: 'github-actions[bot]'
body-includes: Added or changed icons
+ - uses: actions/setup-node@v4
+ - name: Install svgson for code preview (safer and faster than installing all deps)
+ run: npm install svgson
+
- name: Generate comment markup
run: node ./scripts/generateChangedIconsCommentMarkup.mjs >> comment-markup.md
id: comment-markup
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index f740193058..ceb84ea605 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -41,22 +41,21 @@ jobs:
strategy:
fail-fast: false
matrix:
- package: [
- 'lucide',
- 'lucide-react',
- 'lucide-react-native',
- 'lucide-vue',
- 'lucide-vue-next',
- 'lucide-angular',
- 'lucide-preact',
- 'lucide-solid',
- 'lucide-svelte',
- ]
+ package:
+ [
+ 'lucide',
+ 'lucide-react',
+ 'lucide-react-native',
+ 'lucide-vue',
+ 'lucide-vue-next',
+ 'lucide-angular',
+ 'lucide-preact',
+ 'lucide-solid',
+ 'lucide-svelte',
+ ]
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
- with:
- version: 8
- uses: actions/setup-node@v4
with:
node-version: 18
@@ -88,8 +87,6 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v3
- uses: pnpm/action-setup@v2
- with:
- version: 8
- uses: actions/setup-node@v4
with:
node-version: 18
@@ -120,8 +117,6 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v2
- with:
- version: 8
- uses: actions/setup-node@v4
with:
node-version: 18
@@ -136,7 +131,7 @@ jobs:
- name: Create font in ./lucide-font
run: pnpm build:font
- - name: "Upload to Artifacts"
+ - name: 'Upload to Artifacts'
uses: actions/upload-artifact@v3
with:
name: lucide-font
@@ -145,10 +140,7 @@ jobs:
post-release:
if: github.repository == 'lucide-icons/lucide'
runs-on: ubuntu-latest
- needs: [
- pre-release,
- lucide-font,
- ]
+ needs: [pre-release, lucide-font]
steps:
- uses: actions/checkout@v4
diff --git a/.gitignore b/.gitignore
index 7820353255..733b45c18c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,7 +16,9 @@ outlined
packages/**/src/icons/*.js
packages/**/src/icons/*.ts
packages/**/src/icons/*.tsx
+packages/**/src/aliases/*.ts
packages/**/src/aliases.ts
+!packages/**/src/aliases/index.ts
packages/**/src/dynamicIconImports.ts
packages/**/dynamicIconImports.js
packages/**/dynamicIconImports.d.ts
@@ -34,6 +36,7 @@ docs/.vitepress/data/iconNodes
docs/.vitepress/data/iconMetaData.ts
docs/.vitepress/data/releaseMetaData.json
docs/.vitepress/data/releaseMetaData
+docs/.vitepress/data/categoriesData.json
docs/.vitepress/data/iconDetails
docs/.vitepress/data/relatedIcons.json
docs/.vercel
diff --git a/.prettierignore b/.prettierignore
index 943334f5ec..c150f271bb 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,5 +1,12 @@
pnpm-lock.yaml
+# docs examples
+docs/**/examples/
+docs/.vitepress/.temp
+docs/.vitepress/cache
+docs/.vitepress/data
+docs/.nitro
+
# lucide-angular
packages/lucide-angular/.angular/cache
diff --git a/.vscode/launch.json b/.vscode/launch.json
index b23d58751f..177bc7dfad 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -12,4 +12,4 @@
"webRoot": "${workspaceFolder}"
}
]
-}
\ No newline at end of file
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 59e014f602..f179cbc079 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,13 +1,6 @@
{
- "cSpell.words": [
- "devs",
- "preact",
- "Preact"
- ],
+ "cSpell.words": ["devs", "preact", "Preact"],
"eslint.enable": true,
- "eslint.validate": [
- "javascript",
- "svg"
- ],
+ "eslint.validate": ["javascript", "svg"],
"svg.preview.background": "transparent"
}
diff --git a/.vscode/svg.code-snippets b/.vscode/svg.code-snippets
index 3c491c3b87..52cbb23c1a 100644
--- a/.vscode/svg.code-snippets
+++ b/.vscode/svg.code-snippets
@@ -49,7 +49,7 @@
"circle",
""
+ "body": ""
},
"Ellipse": {
"scope": "xml",
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 90d5a685d5..ebce76e413 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -39,6 +39,8 @@ You can also [download an Adobe Illustrator template](https://github.com/lucide-
#### [Figma Guide](https://lucide.dev/docs/figma-guide)
+#### [Affinity Designer Guide](https://lucide.dev/guide/design/affinity-designer-guide)
+
### Submitting Multiple Icons
If you want submit multiple icons, please separate the icons and group them. That makes reviewing the icons easier and keep the thread clean and scoped.
@@ -70,7 +72,7 @@ pnpm install # Install dependencies, including the workspace packages
### Packages -> PNPM 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).
+To distribute different packages we use [PNPM workspaces](https://pnpm.io/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/en/docs/workspaces).
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`](https://github.com/lucide-icons/lucide/blob/main/pnpm-workspace.yaml).
diff --git a/README.md b/README.md
index 81235994f3..6076562c33 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,11 @@
-
+
+
+
+
+
+
+
+
@@ -274,9 +281,12 @@ Thank you to all the people who contributed to Lucide!
## Sponsors
-
+
+### Awesome backer ๐บ
+
+
diff --git a/categories/accessibility.json b/categories/accessibility.json
index 95da8cf053..a668d3ee35 100644
--- a/categories/accessibility.json
+++ b/categories/accessibility.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Accessibility",
"icon": "accessibility"
-}
\ No newline at end of file
+}
diff --git a/categories/account.json b/categories/account.json
index 284b764cba..95a80ad403 100644
--- a/categories/account.json
+++ b/categories/account.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Accounts & access",
"icon": "user"
-}
\ No newline at end of file
+}
diff --git a/categories/animals.json b/categories/animals.json
index 251c93a813..85fafda5f9 100644
--- a/categories/animals.json
+++ b/categories/animals.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Animals",
"icon": "dog"
-}
\ No newline at end of file
+}
diff --git a/categories/arrows.json b/categories/arrows.json
index 5b84413b68..3258378f94 100644
--- a/categories/arrows.json
+++ b/categories/arrows.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Arrows",
"icon": "arrow-left-right"
-}
\ No newline at end of file
+}
diff --git a/categories/brands.json b/categories/brands.json
index 5ff30efca6..c48c4b3b0c 100644
--- a/categories/brands.json
+++ b/categories/brands.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Brands",
"icon": "facebook"
-}
\ No newline at end of file
+}
diff --git a/categories/buildings.json b/categories/buildings.json
index 71df7f6eac..13f24b08f7 100644
--- a/categories/buildings.json
+++ b/categories/buildings.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Buildings",
"icon": "building"
-}
\ No newline at end of file
+}
diff --git a/categories/charts.json b/categories/charts.json
index 6f94a14bd7..e9bdc18825 100644
--- a/categories/charts.json
+++ b/categories/charts.json
@@ -1,5 +1,5 @@
{
"$schema": "../category.schema.json",
"title": "Charts",
- "icon": "pie-chart"
-}
\ No newline at end of file
+ "icon": "chart-pie"
+}
diff --git a/categories/communication.json b/categories/communication.json
index 7fd8bb175f..3b9a899d74 100644
--- a/categories/communication.json
+++ b/categories/communication.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Communication",
"icon": "message-circle"
-}
\ No newline at end of file
+}
diff --git a/categories/connectivity.json b/categories/connectivity.json
index 17b4c7bee3..b566a84ec9 100644
--- a/categories/connectivity.json
+++ b/categories/connectivity.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Connectivity",
"icon": "wifi"
-}
\ No newline at end of file
+}
diff --git a/categories/currency.json b/categories/currency.json
index 31e2846fbe..0879774d1c 100644
--- a/categories/currency.json
+++ b/categories/currency.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Currency",
"icon": "dollar-sign"
-}
\ No newline at end of file
+}
diff --git a/categories/cursors.json b/categories/cursors.json
index 16dddb96a3..9522faa164 100644
--- a/categories/cursors.json
+++ b/categories/cursors.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Cursors",
"icon": "mouse-pointer-2"
-}
\ No newline at end of file
+}
diff --git a/categories/design.json b/categories/design.json
index 312c2048d6..e32592560a 100644
--- a/categories/design.json
+++ b/categories/design.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Design",
"icon": "palette"
-}
\ No newline at end of file
+}
diff --git a/categories/development.json b/categories/development.json
index cfbe175917..113fd1cc21 100644
--- a/categories/development.json
+++ b/categories/development.json
@@ -1,5 +1,5 @@
{
"$schema": "../category.schema.json",
"title": "Coding & development",
- "icon": "code-2"
+ "icon": "code-xml"
}
diff --git a/categories/devices.json b/categories/devices.json
index cb2639fc30..3bb54f1807 100644
--- a/categories/devices.json
+++ b/categories/devices.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Devices",
"icon": "smartphone"
-}
\ No newline at end of file
+}
diff --git a/categories/emoji.json b/categories/emoji.json
index 14afb25abb..78442db1da 100644
--- a/categories/emoji.json
+++ b/categories/emoji.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Emoji",
"icon": "smile"
-}
\ No newline at end of file
+}
diff --git a/categories/files.json b/categories/files.json
index 4d1fa3ad94..073a09beb3 100644
--- a/categories/files.json
+++ b/categories/files.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "File icons",
"icon": "panels-top-left"
-}
\ No newline at end of file
+}
diff --git a/categories/food-beverage.json b/categories/food-beverage.json
index 2b67eaeeab..7456558b62 100644
--- a/categories/food-beverage.json
+++ b/categories/food-beverage.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Food & beverage",
"icon": "coffee"
-}
\ No newline at end of file
+}
diff --git a/categories/furniture.json b/categories/furniture.json
index 27a03034aa..56cf3fa300 100644
--- a/categories/furniture.json
+++ b/categories/furniture.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Furniture",
"icon": "rocking-chair"
-}
\ No newline at end of file
+}
diff --git a/categories/gaming.json b/categories/gaming.json
index 9bf0a6daa9..2c90f4c9d4 100644
--- a/categories/gaming.json
+++ b/categories/gaming.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Gaming",
"icon": "gamepad-2"
-}
\ No newline at end of file
+}
diff --git a/categories/home.json b/categories/home.json
index e11aae4121..20a89330d1 100644
--- a/categories/home.json
+++ b/categories/home.json
@@ -1,5 +1,5 @@
{
"$schema": "../category.schema.json",
"title": "Home",
- "icon": "home"
-}
\ No newline at end of file
+ "icon": "house"
+}
diff --git a/categories/layout.json b/categories/layout.json
index 034ea4be91..22a163f95e 100644
--- a/categories/layout.json
+++ b/categories/layout.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Layout",
"icon": "panels-top-left"
-}
\ No newline at end of file
+}
diff --git a/categories/mail.json b/categories/mail.json
index 4ebda7c34b..3dd1d30267 100644
--- a/categories/mail.json
+++ b/categories/mail.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Mail",
"icon": "mail"
-}
\ No newline at end of file
+}
diff --git a/categories/maps.json b/categories/maps.json
index 4832c5f971..1a948f1196 100644
--- a/categories/maps.json
+++ b/categories/maps.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Maps",
"icon": "map"
-}
\ No newline at end of file
+}
diff --git a/categories/maths.json b/categories/maths.json
index f32aed6dc2..f80691908f 100644
--- a/categories/maths.json
+++ b/categories/maths.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Maths",
"icon": "divide"
-}
\ No newline at end of file
+}
diff --git a/categories/medical.json b/categories/medical.json
index 05ee123246..e745df6978 100644
--- a/categories/medical.json
+++ b/categories/medical.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Medical",
"icon": "heart"
-}
\ No newline at end of file
+}
diff --git a/categories/money.json b/categories/money.json
index 2d9eadc558..fd706dee54 100644
--- a/categories/money.json
+++ b/categories/money.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Money",
"icon": "piggy-bank"
-}
\ No newline at end of file
+}
diff --git a/categories/multimedia.json b/categories/multimedia.json
index 2c523a7126..00897c3e4d 100644
--- a/categories/multimedia.json
+++ b/categories/multimedia.json
@@ -1,5 +1,5 @@
{
"$schema": "../category.schema.json",
"title": "Multimedia",
- "icon": "play-circle"
-}
\ No newline at end of file
+ "icon": "circle-play"
+}
diff --git a/categories/nature.json b/categories/nature.json
index 836f45f081..aa41fd8dde 100644
--- a/categories/nature.json
+++ b/categories/nature.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Nature",
"icon": "sprout"
-}
\ No newline at end of file
+}
diff --git a/categories/navigation.json b/categories/navigation.json
index 78f0cc7f29..0cb9e209dc 100644
--- a/categories/navigation.json
+++ b/categories/navigation.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Navigation",
"icon": "compass"
-}
\ No newline at end of file
+}
diff --git a/categories/notifications.json b/categories/notifications.json
index be39626c77..8ef569fd08 100644
--- a/categories/notifications.json
+++ b/categories/notifications.json
@@ -1,5 +1,5 @@
{
"$schema": "../category.schema.json",
"title": "Notifications",
- "icon": "alert-triangle"
-}
\ No newline at end of file
+ "icon": "triangle-alert"
+}
diff --git a/categories/people.json b/categories/people.json
index 15dc4c8ae0..be028e4b5b 100644
--- a/categories/people.json
+++ b/categories/people.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "People",
"icon": "person-standing"
-}
\ No newline at end of file
+}
diff --git a/categories/photography.json b/categories/photography.json
index 4d3ffe3b37..a4ad5bff19 100644
--- a/categories/photography.json
+++ b/categories/photography.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Photography",
"icon": "camera"
-}
\ No newline at end of file
+}
diff --git a/categories/science.json b/categories/science.json
index 889b7c2069..720983fb3e 100644
--- a/categories/science.json
+++ b/categories/science.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Science",
"icon": "flask-conical"
-}
\ No newline at end of file
+}
diff --git a/categories/seasons.json b/categories/seasons.json
index 3a2a7a1e0c..0c4fff3ccc 100644
--- a/categories/seasons.json
+++ b/categories/seasons.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Seasons",
"icon": "leaf"
-}
\ No newline at end of file
+}
diff --git a/categories/security.json b/categories/security.json
index 00371462b6..8372554fec 100644
--- a/categories/security.json
+++ b/categories/security.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Security",
"icon": "shield"
-}
\ No newline at end of file
+}
diff --git a/categories/shapes.json b/categories/shapes.json
index ed4434f8eb..c968b222be 100644
--- a/categories/shapes.json
+++ b/categories/shapes.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Shapes",
"icon": "triangle"
-}
\ No newline at end of file
+}
diff --git a/categories/shopping.json b/categories/shopping.json
index b224f2312c..5e6b05ff5f 100644
--- a/categories/shopping.json
+++ b/categories/shopping.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Shopping",
"icon": "shopping-bag"
-}
\ No newline at end of file
+}
diff --git a/categories/social.json b/categories/social.json
index 4c8fee7f88..ee87f85746 100644
--- a/categories/social.json
+++ b/categories/social.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Social",
"icon": "thumbs-up"
-}
\ No newline at end of file
+}
diff --git a/categories/sports.json b/categories/sports.json
index 7c3cb01350..25440ad6f2 100644
--- a/categories/sports.json
+++ b/categories/sports.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Sports",
"icon": "type"
-}
\ No newline at end of file
+}
diff --git a/categories/sustainability.json b/categories/sustainability.json
index 1c22a5e85b..a0730f6fac 100644
--- a/categories/sustainability.json
+++ b/categories/sustainability.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Sustainability",
"icon": "recycle"
-}
\ No newline at end of file
+}
diff --git a/categories/time.json b/categories/time.json
index 75f119816d..2b85210dee 100644
--- a/categories/time.json
+++ b/categories/time.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Time & calendar",
"icon": "calendar"
-}
\ No newline at end of file
+}
diff --git a/categories/tools.json b/categories/tools.json
index 456213ad57..48cf0a96a7 100644
--- a/categories/tools.json
+++ b/categories/tools.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Tools",
"icon": "hammer"
-}
\ No newline at end of file
+}
diff --git a/categories/transportation.json b/categories/transportation.json
index 0515475d32..984da071c5 100644
--- a/categories/transportation.json
+++ b/categories/transportation.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Transportation",
"icon": "train-front"
-}
\ No newline at end of file
+}
diff --git a/categories/travel.json b/categories/travel.json
index a85cd27c49..3d78c06e33 100644
--- a/categories/travel.json
+++ b/categories/travel.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Travel",
"icon": "backpack"
-}
\ No newline at end of file
+}
diff --git a/categories/weather.json b/categories/weather.json
index faa9562392..a08cc5d661 100644
--- a/categories/weather.json
+++ b/categories/weather.json
@@ -2,4 +2,4 @@
"$schema": "../category.schema.json",
"title": "Weather",
"icon": "cloud-sun"
-}
\ No newline at end of file
+}
diff --git a/packages/lucide-figma/src/components/EditBar/index.ts b/comment-markup.md
similarity index 100%
rename from packages/lucide-figma/src/components/EditBar/index.ts
rename to comment-markup.md
diff --git a/cspell.json b/cspell.json
new file mode 100644
index 0000000000..b98d751c09
--- /dev/null
+++ b/cspell.json
@@ -0,0 +1,10 @@
+{
+ "dictionaries": ["en-us", "custom-words"],
+ "dictionaryDefinitions": [
+ {
+ "name": "custom-words",
+ "path": "./.cspell/custom-words.txt",
+ "addWords": true
+ }
+ ]
+}
diff --git a/docs/.vitepress/api/categories/index.get.ts b/docs/.vitepress/api/categories/index.get.ts
index a1fb097cae..76e1f95def 100644
--- a/docs/.vitepress/api/categories/index.get.ts
+++ b/docs/.vitepress/api/categories/index.get.ts
@@ -1,11 +1,10 @@
-import { eventHandler, setResponseHeader } from 'h3'
-import iconMetaData from '../../data/iconMetaData'
+import iconMetaData from '../../data/iconMetaData';
export default eventHandler((event) => {
- setResponseHeader(event, 'Cache-Control', 'public, max-age=86400')
- setResponseHeader(event, 'Access-Control-Allow-Origin', '*')
+ setResponseHeader(event, 'Cache-Control', 'public, max-age=86400');
+ setResponseHeader(event, 'Access-Control-Allow-Origin', '*');
return Object.fromEntries(
- Object.entries(iconMetaData).map(([name, { categories }]) => [ name, categories ])
- )
-})
+ Object.entries(iconMetaData).map(([name, { categories }]) => [name, categories]),
+ );
+});
diff --git a/docs/.vitepress/api/figma/data.ts b/docs/.vitepress/api/figma/data.ts
new file mode 100644
index 0000000000..1c938c998a
--- /dev/null
+++ b/docs/.vitepress/api/figma/data.ts
@@ -0,0 +1,40 @@
+import iconNodes from '../../data/iconNodes/index.ts';
+import { IconNodeWithKeys } from '../../theme/types';
+import iconMetaData from '../../data/iconMetaData';
+import releaseMeta from '../../data/releaseMetaData.json';
+import categories from '../../data/categoriesData.json';
+
+const dataResponse = {
+ icons: Object.entries(iconNodes).reduce((acc, [name, iconNode]) => {
+ const newIconNode = (iconNode as IconNodeWithKeys).map(([name, { key, ...attrs }]) => {
+ return [name, attrs];
+ });
+
+ acc[name] = {
+ iconNode: newIconNode,
+ aliases: (iconMetaData[name]?.aliases ?? []).map((alias) =>
+ typeof alias === 'string' ? alias : alias.name,
+ ),
+ tags: iconMetaData[name].tags ?? [],
+ categories: iconMetaData[name].categories ?? [],
+ ...releaseMeta[name],
+ };
+
+ return acc;
+ }, {}),
+ aliases: Object.entries(iconNodes).reduce((acc, [name]) => {
+ for (const alias of iconMetaData[name]?.aliases ?? []) {
+ acc[typeof alias === 'string' ? alias : alias.name] = name;
+ }
+
+ return acc;
+ }, {}),
+ categories,
+};
+
+export default eventHandler((event) => {
+ setResponseHeader(event, 'Cache-Control', 'public, max-age=86400');
+ setResponseHeader(event, 'Access-Control-Allow-Origin', '*');
+
+ return dataResponse;
+});
diff --git a/docs/.vitepress/api/gh-icon/[...data].get.ts b/docs/.vitepress/api/gh-icon/[...data].get.ts
index eacfb498f8..def248303a 100644
--- a/docs/.vitepress/api/gh-icon/[...data].get.ts
+++ b/docs/.vitepress/api/gh-icon/[...data].get.ts
@@ -13,7 +13,10 @@ export default eventHandler((event) => {
const data = pathData.at(-1).slice(0, -4);
const [name] = pathData;
- const src = Buffer.from(data, 'base64').toString('utf8');
+ const src = Buffer.from(data, 'base64')
+ .toString('utf8')
+ .replaceAll('\n', '')
+ .replace(/