Compare commits

..
Author SHA1 Message Date
Eric f8dfcec367 Merge branch 'main' of https://github.com/lucide-icons/lucide into icon-usage-context 2026-10-19 15:01:32 +02:00
carl-lambertgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Eric Fennis
0ab9c70d88 feat(icons): added graph-hub icon (#4974)
* feat(icons): added split-circles icon

* chore(icons): added cluster tag to `split-circles`

* refactor(icons): renamed `split-circles` to `hub-circles`

* refactor(icons): renamed `hub-circles` to `graph-hub`

* Apply batched suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Fix duplicate 'tags' key in graph-hub.json

Removed duplicate 'tags' key in graph-hub.json.

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-10-19 14:37:34 +02:00
26daed2537 feat(icons): added brain-off icon (#3535)
* Added icons/brain-off.svg

* Added icons/brain-off.json

* Update icons/brain-off.svg

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

* Update icons/brain-off.json

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

* Add use-cases for brain-off icon

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Update brain-circuit.svg

* Update brain-cog.svg

* Update brain-off.svg

* Update brain.svg

---------

Co-authored-by: Jakob Guddas <github@jguddas.de>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
2026-10-19 14:28:50 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> fa238cf278 chore(deps): bump the react-deps group across 1 directory with 2 updates (#5026)
Bumps the react-deps group with 2 updates in the / directory: [react](https://github.com/react/react/tree/HEAD/packages/react) and [react-dom](https://github.com/react/react/tree/HEAD/packages/react-dom).


Updates `react` from 19.3.0 to 19.3.1
- [Release notes](https://github.com/react/react/releases)
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/react/react/commits/v19.3.1/packages/react)

Updates `react-dom` from 19.3.0 to 19.3.1
- [Release notes](https://github.com/react/react/releases)
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/react/react/commits/v19.3.1/packages/react-dom)

---
updated-dependencies:
- dependency-name: react
  dependency-version: 19.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: react-deps
- dependency-name: react-dom
  dependency-version: 19.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: react-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-19 12:08:22 +02:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Eric Fennis
27f08704a1 chore(deps-dev): bump the svelte-deps group across 1 directory with 2 updates (#5028)
Bumps the svelte-deps group with 2 updates in the / directory: [@sveltejs/package](https://github.com/sveltejs/kit/tree/HEAD/packages/package) and [@sveltejs/kit](https://github.com/sveltejs/kit/tree/HEAD/packages/kit).


Updates `@sveltejs/package` from 3.0.0 to 3.0.1
- [Release notes](https://github.com/sveltejs/kit/releases)
- [Changelog](https://github.com/sveltejs/kit/blob/main/packages/package/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/kit/commits/@sveltejs/package@3.0.1/packages/package)

Updates `@sveltejs/kit` from 3.0.1 to 3.1.0
- [Release notes](https://github.com/sveltejs/kit/releases)
- [Changelog](https://github.com/sveltejs/kit/blob/main/packages/kit/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/kit/commits/@sveltejs/kit@3.1.0/packages/kit)

---
updated-dependencies:
- dependency-name: "@sveltejs/kit"
  dependency-version: 3.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: svelte-deps
- dependency-name: "@sveltejs/package"
  dependency-version: 3.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: svelte-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-19 12:07:56 +02:00
Ozgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Eric FennisKarsa
7c165eb5df feat(icons): added line-height icon (#3039)
* Added icons/line-height.svg

* Added icons/line-height.json

* Update line-height.svg

* Update line-height.json

* Apply batched suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update line-height.json

* Update line-height.json

* Update line-height.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Karsa <contact@karsa.org>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-10-19 12:04:54 +02:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Eric Fennis
296ab246a8 chore(deps-dev): bump react-native (#5030)
Bumps the react-native-deps group with 1 update: [react-native](https://github.com/react/react-native/tree/HEAD/packages/react-native).


Updates `react-native` from 0.87.1 to 0.88.0
- [Release notes](https://github.com/react/react-native/releases)
- [Changelog](https://github.com/react/react-native/blob/main/CHANGELOG.md)
- [Commits](https://github.com/react/react-native/commits/v0.88.0/packages/react-native)

---
updated-dependencies:
- dependency-name: react-native
  dependency-version: 0.88.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: react-native-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-19 11:54:20 +02:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Eric Fennis
8300f598a0 chore(deps): bump the vue-deps group with 2 updates (#5027)
Bumps the vue-deps group with 2 updates: [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/HEAD/packages/plugin-vue) and [vue](https://github.com/vuejs/core).


Updates `@vitejs/plugin-vue` from 6.0.9 to 6.0.10
- [Release notes](https://github.com/vitejs/vite-plugin-vue/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-vue/blob/main/packages/plugin-vue/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-vue/commits/plugin-vue@6.0.10/packages/plugin-vue)

Updates `vue` from 3.5.43 to 3.5.44
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/compare/v3.5.43...v3.5.44)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-vue"
  dependency-version: 6.0.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: vue-deps
- dependency-name: vue
  dependency-version: 3.5.44
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: vue-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-19 11:46:20 +02:00
Ozgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Eric FennisKarsa
51be2dac03 feat(icons): added letter-spacing icon (#3038)
* Added icons/letter-spacing.svg

* Added icons/letter-spacing.json

* Update icons/letter-spacing.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update letter-spacing.svg

* Update letter-spacing.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
2026-10-19 11:39:10 +02:00
Noah Weidig 2333afad1f Update icon count comparison with Feather Icons (#5022) 2026-10-19 11:20:13 +02:00
Eric Fennis 6e1308ce19 fix(site): Fix build (#5033)
* Fix name

* Fix import
2026-10-19 11:16:40 +02:00
9a25bb6315 feat(icons): added bacon icon (#4694)
* feat(icons): add icons/avocado.svg

* feat(icons): add icons/avocado.json

* feat(icons): add icons/bacon.svg

* feat(icons): add icons/bacon.json

* chore: remove lab/avocado.svg after promoting to core

* chore: remove lab/avocado.json after promoting to core

* chore: remove lab/bacon.svg after promoting to core

* chore: remove lab/bacon.json after promoting to core

* docs(icons): apply metadata suggestions for avocado

* docs(icons): apply metadata suggestions for bacon

* Apply design from karsa

* Remove categories

* Update use-case descriptions for avocado and bacon icons

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Update avocado.json

* Update bacon.json

* Update avocado.json

* Update bacon.json

* Update avocado.json

* Update avocado.svg

* Update bacon.json

* Update avocado.json

* Update bacon.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
2026-10-19 10:54:56 +02:00
Hitanshu Machhigithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>KarsaCopilot Autofix powered by AIHitanshu MachhiHitanshu MachhiEric Fennis
d123605682 feat(icons): added smartphone-user-round icon (#4586)
* add smartphone-user icon

* Update icons/smartphone-user.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/smartphone-user.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/smartphone-user.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/smartphone-user.json

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

* Update icons/smartphone-user.svg

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

* update contribuers

* fix(icons): update smartphone-user icon

* rename: smartphone-user to smartphone-user-round

* Potential fix for pull request finding 'Add missing csandman attribution'

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Refactor use-cases and tags in smartphone-user-round.json

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Update keywords and categories in smartphone icon JSON

* update requested changes in icon design

* add mittalyashu contributer of smartphone to contributors list

---------

Co-authored-by: Hitanshu Machhi <hitanshu.machhi-ext@mavenclinic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
Co-authored-by: Hitanshu Machhi <hitanshu.machhi@mindstix.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-19 10:36:42 +02:00
Ricardo Gonzalezgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Eric Fennis
2ae6a3d489 feat(icons): added tombstone icon (#4929)
* feat(icons): added tombstone icon

* Update icons/tombstone.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/tombstone.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-19 10:33:16 +02:00
KarsaandEric Fennis 1ef60af944 fix(icons): changed chess-queen icon (#4613)
* Updated icons/chess-queen.svg

* Updated icons/chess-queen.json

* Update chess-queen.json

* Update chess-queen.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-16 15:31:29 +02:00
Eric Fennis cfea992598 feat(docs): Adds search field to docs pages (#5012)
* Add docs search to the sidebar

* Fix types
2026-10-16 15:22:57 +02:00
Jamie LawandEric Fennis 7b0196e249 fix(icons): update music icons (#4072)
* Rename music icons

* Make music icons more rounded

* Add more tags to music icons

* Add self-sttribution

* Update metadata

* Adding usecase

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-15 18:01:02 +02:00
Rodrigo RodriguesCopilot Autofix powered by AIgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Eric FennisKarsa
f771243961 feat(icons): added certificate icon (#4327)
* Added icons/certificate.svg

* Added icons/certificate.json

* Add use-cases for certificate JSON

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Apply suggestion from @github-actions[bot]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update certificate.svg

apply changes as discussed with @ericfennis

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
2026-10-15 17:54:18 +02:00
Copilotericfenniscopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
26edd98bf1 ci(dev): fix "Generate PR Title" job by using REST API for changed files (#5017)
* Initial plan

* Apply remaining changes

Co-authored-by: ericfennis <11825403+ericfennis@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ericfennis <11825403+ericfennis@users.noreply.github.com>
2026-10-15 17:40:32 +02:00
KarsaandEric Fennis d98861db31 fix(icons): changed barrel icon (#4639)
* Updated icons/barrel.svg

* Updated icons/barrel.json

* Update barrel.json

* Updated icons/barrel.svg

* Updated icons/barrel.json

* Update barrel.json

* Update barrel.svg

* Update barrel.svg

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-15 17:30:00 +02:00
Copilotericfenniscopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>Eric Fennis
55e223a3a1 feat(ci): auto-generate PR titles from added file paths (#4790)
* feat(ci): auto-generate PR titles from added file paths

* refactor(ci): single source of truth for conventional commit types

* ci: skip PR title generation when "Keep PR title" label is present

Co-authored-by: ericfennis <11825403+ericfennis@users.noreply.github.com>

* refactor(ci): align package path scopes with package.json names

* Apply changes to generated pr titles

* Add .github/conventional-commit-types.json to gitignore

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ericfennis <11825403+ericfennis@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-15 17:17:01 +02:00
Eric Fennis 20fa6adf52 Fix homepage animation (#5015) 2026-10-15 17:04:20 +02:00
dependabot[bot]Claude Opus 5.5dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Eric Fennis
d672fc43db chore(deps-dev): bump the angular-deps group across 1 directory with 10 updates (#5004)
* chore(deps-dev): bump the angular-deps group across 1 directory with 10 updates

Bumps the angular-deps group with 10 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@angular/build](https://github.com/angular/angular-cli) | `22.2.1` | `22.2.2` |
| [@angular/cli](https://github.com/angular/angular-cli) | `22.2.1` | `22.2.2` |
| [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common) | `22.2.1` | `22.2.2` |
| [@angular/compiler](https://github.com/angular/angular/tree/HEAD/packages/compiler) | `22.2.1` | `22.2.2` |
| [@angular/compiler-cli](https://github.com/angular/angular/tree/HEAD/packages/compiler-cli) | `22.2.1` | `22.2.2` |
| [@angular/core](https://github.com/angular/angular/tree/HEAD/packages/core) | `22.2.1` | `22.2.2` |
| [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms) | `22.2.1` | `22.2.2` |
| [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser) | `22.2.1` | `22.2.2` |
| [@angular/platform-server](https://github.com/angular/angular/tree/HEAD/packages/platform-server) | `22.2.1` | `22.2.2` |
| [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router) | `22.2.1` | `22.2.2` |



Updates `@angular/build` from 22.2.1 to 22.2.2
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/v22.2.1...v22.2.2)

Updates `@angular/cli` from 22.2.1 to 22.2.2
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/v22.2.1...v22.2.2)

Updates `@angular/common` from 22.2.1 to 22.2.2
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.2/packages/common)

Updates `@angular/compiler` from 22.2.1 to 22.2.2
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.2/packages/compiler)

Updates `@angular/compiler-cli` from 22.2.1 to 22.2.2
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.2/packages/compiler-cli)

Updates `@angular/core` from 22.2.1 to 22.2.2
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.2/packages/core)

Updates `@angular/forms` from 22.2.1 to 22.2.2
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.2/packages/forms)

Updates `@angular/platform-browser` from 22.2.1 to 22.2.2
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.2/packages/platform-browser)

Updates `@angular/platform-server` from 22.2.1 to 22.2.2
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.2/packages/platform-server)

Updates `@angular/router` from 22.2.1 to 22.2.2
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.2/packages/router)

---
updated-dependencies:
- dependency-name: "@angular/build"
  dependency-version: 22.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/cli"
  dependency-version: 22.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/common"
  dependency-version: 22.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/compiler"
  dependency-version: 22.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/compiler-cli"
  dependency-version: 22.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/core"
  dependency-version: 22.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/forms"
  dependency-version: 22.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/platform-browser"
  dependency-version: 22.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/platform-server"
  dependency-version: 22.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/router"
  dependency-version: 22.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
...

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

* fix(deps): regenerate lockfile to avoid duplicate vite/vitest instances

Dependabot's lockfile update pulled in vite@8.3.4 alongside vite@8.3.2,
creating extra vitest peer variants. Packages then loaded two vitest
instances, breaking jest-dom matcher types and snapshot state.
Regenerated from main's lockfile so only the Angular packages change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ND8yFLJKhXV6FMeZyvHzgS

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-14 13:47:24 +02:00
Eric FennisandClaude Opus 5.5 9904bc4649 chore(integration-tests): Add Svelte integration tests for @ucide/svelte (#5005)
* test(svelte): add Vite and SvelteKit integration fixtures

Scaffold a plain Svelte + Vite app (create-vite svelte-ts) and a SvelteKit
app (sv create --template minimal) that consume the built @lucide/svelte
package. Each fixture runs a production build, svelte-check and a Vitest
Browser Mode test, wired up via test:integrations:svelte and CI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0198HmSjcE6LwPPScwLdMtjt

* test(svelte): label Pen as canonical and Edit2 as alias in fixtures

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0198HmSjcE6LwPPScwLdMtjt

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-14 13:46:40 +02:00
Stefan GründelandCopilot Autofix powered by AI 6bc1373b3f feat(docs): add third-party package lucide-jte (#5000)
* feat(docs): add third-party package lucide-jte

* Update Maven Central badge URL in packageData

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-14 08:58:38 +02:00
dab294f313 feat(icons): added perfume icon (#4426)
* Added icons/perfume.svg

* Added icons/perfume.json

* Updated icons/perfume.json

* Update perfume.json

Add use cases

* renamed and removed from lab

* removed from lab

* removed old renamed

* Update categories and use-cases in perfume-bottle.json

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Remove 'parfum' tag from icon

Removed 'parfum' tag from perfume bottle icon.

* Update perfume-bottle.json

refine tags

* Update perfume-bottle.json

* Update custom-words.txt

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
2026-10-13 12:35:27 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 3f1255ecfa chore(deps-dev): bump @vitejs/plugin-react (#4995)
Bumps the react-deps group with 1 update: [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react).


Updates `@vitejs/plugin-react` from 6.1.1 to 6.1.2
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.2/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 6.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: react-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-13 09:40:00 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> e68f4c8a52 chore(deps-dev): bump preact (#4999)
Bumps the preact-deps group with 1 update: [preact](https://github.com/preactjs/preact).


Updates `preact` from 11.0.0 to 11.0.1
- [Release notes](https://github.com/preactjs/preact/releases)
- [Commits](https://github.com/preactjs/preact/compare/11.0.0...11.0.1)

---
updated-dependencies:
- dependency-name: preact
  dependency-version: 11.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: preact-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-13 09:39:35 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> af485d5f51 chore(deps-dev): bump the svelte-deps group with 2 updates (#4996)
Bumps the svelte-deps group with 2 updates: [@sveltejs/package](https://github.com/sveltejs/kit/tree/HEAD/packages/package) and [svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte).


Updates `@sveltejs/package` from 2.5.8 to 3.0.0
- [Release notes](https://github.com/sveltejs/kit/releases)
- [Changelog](https://github.com/sveltejs/kit/blob/main/packages/package/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/kit/commits/@sveltejs/package@3.0.0/packages/package)

Updates `svelte` from 5.57.1 to 5.57.2
- [Release notes](https://github.com/sveltejs/svelte/releases)
- [Changelog](https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/svelte/commits/svelte@5.57.2/packages/svelte)

---
updated-dependencies:
- dependency-name: "@sveltejs/package"
  dependency-version: 3.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: svelte-deps
- dependency-name: svelte
  dependency-version: 5.57.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: svelte-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-13 09:39:01 +02:00
Nitogithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Eric Fennis
a51b2b5def feat(icons): added graph-star icon (#4983)
* feat(icons): added `molecule` icon

* Update icons/molecule.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* rename `molecule` to `graph-star`

* Update graph-star.json

* Fix lint errors

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-13 09:37:37 +02:00
Rodrigo RodriguesandEric Fennis da43cb6bd2 feat(icons): added guitar-electric icon (#4917)
* Added icons/guitar-electric.svg

* Added icons/guitar-electric.json

* Refactor guitar-electric SVG paths

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-13 09:33:31 +02:00
Signalgridgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Eric Fennis
93e2665164 feat(icons): add cpu-ai icon (#4992)
* Add AI icon

* Refine AI icon SVG

* Update icons/ai.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/ai.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/ai.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix: address review feedback for cpu-ai icon

* chore: add mlops to custom dictionary

* Fix category list in cpu-ai.json

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-13 09:31:43 +02:00
da2f29d9fa feat(icons): added circle-fading-play icon (#4990)
* feat(icons): added `circle-fading-play` icon

Adds a play button in a fading circle, completing the circle-fading-*
family (circle-fading-plus, circle-fading-arrow-up). Useful for short
clips, highlights, stories/reels and video previews.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(icons): add use-cases and tags to `circle-fading-play`

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(icons): credit contributors of base icons for `circle-fading-play`

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Update circle-fading-play.json

---------

Co-authored-by: tatianatsiguleva <324940161+tatianatsiguleva@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Karsa <contact@karsa.org>
2026-10-13 09:26:37 +02:00
js-bestandgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> 2c5e1f1266 feat(icons): added Belarusian ruble icon (#4984)
* feat(icons): added Belarusian ruble icon

* Update icons/belarusian-ruble.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/belarusian-ruble.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/belarusian-ruble.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(github/actions):fix trailing spaces in belarusian ruble icon

* fix(icons): Fixes in accordance with the code review.

* fix(icons): update cap height and corner rounding to match bold icon reference

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-10-13 09:25:33 +02:00
Rodrigo Rodriguesgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Eric Fennis
689376075d feat(icons): added users-collaboration icon (#4922)
* Added icons/users-collaboration.svg

* Added icons/users-collaboration.json

* Apply suggestion from @github-actions[bot]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Apply batched suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* renamed round, added users-collaboration

* added contributor, formatted use-cases

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-13 09:24:32 +02:00
Karsa b573316c0b feat(icons): added calendar-chevrons-left icon (#5001) 2026-10-13 09:19:39 +02:00
Rodrigo Rodriguesgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>KarsaCopilot Autofix powered by AIEric Fennis
d9412f90bb feat(icons): added folder-user and folder-user icons (#4603)
* add folder-user and folder-user icons

* Update icons/folder-users.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/folder-user.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Add contributors to folder-user.json

* Add contributors to folder-users.json

* Apply batched suggestions from code review

updated use cases text as per suggestion

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

* Add users to folder-user.json

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Add contributors to folder-users

* Fix missing comma in folder-user.json

* Update folder-user.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-13 09:07:50 +02:00
Eric Fennis 440a1e1dfb feat(icons): add message-circle-text icon (#4898)
* feat(icons): add message-circle-text icon with metadata

* Add more usecases

* Adds more tags
2026-10-12 17:35:46 +02:00
Rachit ThakurandKarsa 5b44cea30b fix(icons,categories): fix notifications category name and refine circle-x tags (#4994)
* fix(docs): rename notification category title to notifications

* feat(icons): add cross and x tags to circle-x

* Update icons/circle-x.json

---------

Co-authored-by: Karsa <contact@karsa.org>
2026-10-12 13:51:34 +02:00
Benjamin Haubegithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Eric FennisKarsa
d166e774d6 feat(icons): added server-nas icon (#4537)
* Add icons/server-nas

* Modify server-nas icon

* Add use-cases to server-nas.json

* Update icons/server-nas.json

* Update icons/server-nas.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/server-nas.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update server-nas.json

* fix(icons): changed 'server-nas' icon

* feat(icons): added updated `server-nas` icon

* Format code

* Update server-nas.json

rewrite use cases and tags to be compliant

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
2026-10-12 13:49:43 +02:00
Benjamin Haubegithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Copilot Autofix powered by AIEric Fennis
70562c1ee1 feat(icons): added shield-house icon (#4602)
* add icons/shield-house.svg

* add icons/shield-house.json

* fix(icons): changed 'shield-house' icon

* Apply suggestion from @github-actions[bot]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Refine use cases and update 'house' to 'property'

Updated use cases to use consistent phrasing and replaced 'house' with 'property' for clarity.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Fix missing newline in shield-house.svg

Add missing newline at the end of the SVG file.

* Fix missing newline at end of shield-house.json

Add newline at the end of shield-house.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-09 16:29:24 +02:00
Karsagithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Copilot Autofix powered by AIEric Fennis
9563092c52 feat(icons): added user-round-star icon (#3469)
* Updated icons/user-star.svg

* Updated icons/user-star.json

* Update user-star.json

* Updated icons/user-star.svg

* Added icons/user-round-star.svg

* Added icons/user-round-star.json

* Update user-round-star.svg

* Update user-star.svg

* Apply batched suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Add empty use-cases user-round-star.json

* Add use cases for user round star icon

Added use cases for user round star icon.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Correct spelling of 'Favoriting' to 'Favouriting'

* Update user-round-star.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-09 15:56:22 +02:00
Edoardo Dottorigithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>KarsaEric Fennis
6d01fea3d3 feat(icons): added screw icon (#4932)
* Fix missing newline in screw.svg

Add missing newline at the end of the screw.svg file.

* Add screw.json icon configuration file

* Update icons/screw.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/screw.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update screw.svg

* Update screw.json

* Update screw.json

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-09 15:12:39 +02:00
949bc6d61f test(lucide-react): add tests for DynamicIcon fallback and ref forwarding (#4966)
* test(lucide-react): add tests for DynamicIcon fallback and ref forwarding

* style(lucide-react): format DynamicIcon test with Prettier

---------

Co-authored-by: grzdev <grzdev@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-09 15:06:46 +02:00
edaf5070d7 feat(icons): Add handle-bottom-right icon (#1793)
* Add `handle-down-right` icon

* Rename handle-down-right.svg to handle-bottom-right.svg

* Rename handle-down-right.json to handle-bottom-right.json

* Add use-case for bottom-right resize handle

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Karsa <contact@karsa.org>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-09 14:40:54 +02:00
Benjamin Haubegithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>KarsaEric Fennis
e5b0a9c4aa feat(icons): added wifi-lock icon (#4913)
* feat(icons): added `wifi-lock` icon

* chore(metadata): added `wifi-lock` metadata

* chore(metadata): update `wifi-lock` use-cases metadata

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Apply batched suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(icons): fixed `wifi-lock` icon

* Update icons/wifi-lock.svg

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

* chore(metadata): format `wifi-lock` metadata

* Add EOF

* Fix missing newline in wifi-lock.svg

Add missing newline at the end of the SVG file.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Karsa <contact@karsa.org>
2026-10-09 14:33:24 +02:00
Eric FennisandCopilot Autofix powered by AI b49e37f906 chore(copilot-instruction): Adjust instruction text to allow more then 4 use-cases (#4989)
* Adjust instruction text

* Revise use-case writing instructions for icons

Updated guidelines for writing use-cases for icons.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-09 14:25:16 +02:00
Levi Bensleygithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Copilot Autofix powered by AIEric Fennis
da3a6102d1 feat(icons): added phone-log icon (#3598)
* Added icons/phone-log.svg

* Added icons/phone-log.json

* Update phone-log.svg paths for improved design

* Apply suggestion from @github-actions[bot]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update phone-log.json

* Update phone-log.json categories and use-cases

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-09 13:35:49 +02:00
c0c8de1db2 test(lucide): add tests for empty icons error and DocumentFragment root in createIcons (#4967)
Co-authored-by: grzdev <grzdev@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-09 13:18:12 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 8857d7a636 chore(deps): bump next from 16.3.6 to 16.3.8 (#4988)
Bumps [next](https://github.com/vercel/next.js) from 16.3.6 to 16.3.8.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/compare/v16.3.6...v16.3.8)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.3.8
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-09 13:14:18 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> bd4984a414 chore(deps-dev): bump sharp from 0.35.4 to 0.35.5 (#4987)
Bumps [sharp](https://github.com/lovell/sharp) from 0.35.4 to 0.35.5.
- [Release notes](https://github.com/lovell/sharp/releases)
- [Commits](https://github.com/lovell/sharp/compare/v0.35.4...v0.35.5)

---
updated-dependencies:
- dependency-name: sharp
  dependency-version: 0.35.5
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-09 13:14:05 +02:00
Eric 1ef648145b adjust model 2026-10-09 12:05:24 +02:00
Claude 6983a6a175 feat(scripts): follow metadata instructions for described use-cases
Load the Use Cases section of .github/instructions/metadata.instructions.md
into the --describe prompt so generated use-cases match the repository
style, and make useCase an array of phrases per usage group.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q2D9GYbnSV56MAVVhHPRhH
2026-10-09 09:46:01 +00:00
Claude fba5e3f3cc feat(scripts): retry timeouts and save icon usage progress
Retry 408 responses (and other transient errors) with backoff, only waiting
for the rate-limit reset on 403/429. Requests that still fail are skipped
with a warning instead of aborting the run, and the OpenAI client retries
too. Each icon is now described as soon as its searches finish and
--output is rewritten after every icon, so an interrupted run keeps its
results.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q2D9GYbnSV56MAVVhHPRhH
2026-10-09 09:38:14 +00:00
55b9969b82 ci(lint): split lint jobs and annotate Prettier and JSON schema errors in PRs (#4982)
* ci: split lint-code into ESLint, Prettier and JSON Schema jobs with PR annotations

- ESLint: annotations via setup-node's built-in eslint-stylish problem matcher.
- Prettier: new scripts/lintFormat.mts formats unformatted files in memory, diffs
  them and emits line-level `::error` annotations with the expected code.
- JSON Schema: replace ajv-cli with a local ESLint rule (Ajv draft 2020-12) that
  validates icons/categories JSON against their `$schema` and reports at the
  offending property. eslint-plugin-json-schema-validator was not used because it
  runs Ajv in draft-07 mode and ignores `dependentRequired`.

All annotations use workflow commands, so they work on fork PRs with a read-only token.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVxEtqNswEDq1N23taZYh8

* Improve root value check and property error handling

Enhance error reporting for JSON schema validation.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* style(lint): format jsonSchemaPlugin with Prettier

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVxEtqNswEDq1N23taZYh8

* test commit

* fix(lint): annotate syntax errors from Prettier and ESLint in PRs

- ESLint/JSON Schema jobs use a small GitHub formatter that prints `::error`
  workflow commands. setup-node's eslint-stylish matcher skipped parsing errors
  because they have no rule id.
- lintFormat.mts annotates Prettier syntax errors (exit code 2) at their line and
  column instead of only printing stderr, and still checks the other files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVxEtqNswEDq1N23taZYh8

* ci(lint): spell check icon and category metadata with cspell annotations

- New "Spelling" job runs scripts/lintSpelling.mts, which turns cspell findings
  into `::error` annotations (with cspell's suggested fix when it has one).
- cspell accepts both US and British English, ignores contributor usernames and
  deprecated `alias.typo` aliases.
- Add existing search tags and domain terms to .cspell/custom-words.txt so the
  current metadata passes.
- Add `lint:spelling` to `pnpm lint` and lint-staged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVxEtqNswEDq1N23taZYh8

* fix(lint): pin JSON schemas per file set and drop typo tags

- json-schema/no-invalid now takes the schema from config (icon.schema.json for
  icons, category.schema.json for categories) and reports a `$schema` that
  points elsewhere, so metadata can't opt out of validation.
- Remove the misspelled `frigerator` and `sterisk` tags and their allowlist entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVxEtqNswEDq1N23taZYh8

* fix(icons): split joined-word tags into separate words

Tags like `groupchat` and `timemachine` become `group chat` and `time machine`
so they read naturally and pass the spell check without allowlisting. Where the
spaced tag already existed (`smart home`) the joined one is dropped.

cspell now skips all alias names, since they are icon names that can't change
(e.g. the deprecated `palmtree` alias).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVxEtqNswEDq1N23taZYh8

* Revert

* Try another error

* Revert error

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-09 11:30:00 +02:00
Elena Kovelskikhgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Copilot Autofix powered by AIEric Fennis
62c584a5f2 feat(icons): added mail-dot icon (#3230)
* Added icons/mail-dot.svg

* Added icons/mail-dot.json

* Update mail-dot.svg

* Update mail-dot.svg

* Apply suggestion from @github-actions[bot]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Add use cases for mail-dot icon

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-09 10:54:45 +02:00
Claude 58db0a0b0b Merge remote-tracking branch 'origin/icon-usage-context' into icon-usage-context 2026-10-09 07:00:29 +00:00
Claude 77ac5c4685 feat(scripts): add --output to write icon usage as JSON
Writes { [icon]: [...usage] } to a file: grouped use cases with --describe,
otherwise every individual usage context. Implies --context.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q2D9GYbnSV56MAVVhHPRhH
2026-10-09 07:00:21 +00:00
Eric 15c128336f Merge branch 'main' of https://github.com/lucide-icons/lucide into icon-usage-context 2026-10-09 08:50:01 +02:00
Claude 924b5fda27 feat(scripts): describe icon usage in context
Add --context and --describe to the icon usage script. --context extracts
how each matched icon is used (parent elements, labels, handlers, links,
snippet) and summarizes it per icon. --describe groups those usages into
use-case descriptions with an OpenAI model. Also adds --max-contexts and
--icons-file, accepts export names like Trash2, and allows a single icon.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q2D9GYbnSV56MAVVhHPRhH
2026-10-09 06:41:45 +00:00
Rodrigo Rodriguesgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Eric Fennis
a04f228cd0 feat(icons): added lens icon (#4923)
* Added icons/lens.svg

* Added icons/lens.json

* Update lens.json with additional use cases and tags

* Update icons/lens.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-10-08 09:16:31 +02:00
Karsa b56741cf30 fix(icons): changed soup and salad icons (#4971)
* Update soup.svg

* Update salad.svg
2026-10-07 14:44:29 +02:00
Jamie Schwantnergithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>KarsaEric Fennis
e33a859603 feat(icons): added scratch-blocks icon (#4969)
* Feat(add icon scratch-blocks)

* Add scratch-blocks.json configuration file

* Update icons/scratch-blocks.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/scratch-blocks.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/scratch-blocks.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Add files via upload

* Add contributor 'karsa-mistmere' to scratch-blocks.json

* Update scratch-blocks.svg

* Remove 'tools' category from scratch-blocks.json

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-07 14:34:57 +02:00
kamilagithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Karsa
bd137e4743 feat(icons): added new hiking-stick icon (#4711)
* added new hiking-stick icon

* Update icons/hiking-stick.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/hiking-stick.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/hiking-stick.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Add new contributor to hiking-stick.json

* Modify hiking stick SVG paths for design update

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
2026-10-07 14:24:25 +02:00
Karsa ff0f79b06e fix(icons): changed pen-tool icon (#4972)
Improved pixel perfection, density and centre of gravity
2026-10-07 14:22:47 +02:00
Rodrigo RodriguesandKarsa c31f22723f feat(icons): added groceries icon (#4907)
* Added icons/groceries.svg

* Added icons/groceries.json

* Update groceries.svg

* Update icons/groceries.json

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

* Update tool-case.svg

---------

Co-authored-by: Karsa <contact@karsa.org>
2026-10-07 14:08:19 +02:00
Eric FennisericfennisCopilot Autofix powered by AIcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
7aa8ba65a3 chore(categories): Add description field to categories (#4909)
* Add category descriptions

Co-authored-by: ericfennis <11825403+ericfennis@users.noreply.github.com>

* Fix sports category icon

* Fix notifications category title

* Improve categories

* Update descriptions to include periods

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ericfennis <11825403+ericfennis@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-07 14:06:24 +02:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Eric Fennis
1fae58d0a9 chore(deps-dev): bump the angular-deps group across 1 directory with 11 updates (#4960)
Bumps the angular-deps group with 11 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@angular/build](https://github.com/angular/angular-cli) | `22.2.0` | `22.2.1` |
| [@angular/cli](https://github.com/angular/angular-cli) | `22.2.0` | `22.2.1` |
| [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common) | `22.2.0` | `22.2.1` |
| [@angular/compiler](https://github.com/angular/angular/tree/HEAD/packages/compiler) | `22.2.0` | `22.2.1` |
| [@angular/compiler-cli](https://github.com/angular/angular/tree/HEAD/packages/compiler-cli) | `22.2.0` | `22.2.1` |
| [@angular/core](https://github.com/angular/angular/tree/HEAD/packages/core) | `22.2.0` | `22.2.1` |
| [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms) | `22.2.0` | `22.2.1` |
| [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser) | `22.2.0` | `22.2.1` |
| [@angular/platform-server](https://github.com/angular/angular/tree/HEAD/packages/platform-server) | `22.2.0` | `22.2.1` |
| [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router) | `22.2.0` | `22.2.1` |
| [ng-packagr](https://github.com/ng-packagr/ng-packagr) | `22.2.2` | `22.2.4` |



Updates `@angular/build` from 22.2.0 to 22.2.1
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/v22.2.0...v22.2.1)

Updates `@angular/cli` from 22.2.0 to 22.2.1
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/v22.2.0...v22.2.1)

Updates `@angular/common` from 22.2.0 to 22.2.1
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.1/packages/common)

Updates `@angular/compiler` from 22.2.0 to 22.2.1
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.1/packages/compiler)

Updates `@angular/compiler-cli` from 22.2.0 to 22.2.1
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.1/packages/compiler-cli)

Updates `@angular/core` from 22.2.0 to 22.2.1
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.1/packages/core)

Updates `@angular/forms` from 22.2.0 to 22.2.1
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.1/packages/forms)

Updates `@angular/platform-browser` from 22.2.0 to 22.2.1
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.1/packages/platform-browser)

Updates `@angular/platform-server` from 22.2.0 to 22.2.1
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.1/packages/platform-server)

Updates `@angular/router` from 22.2.0 to 22.2.1
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.1/packages/router)

Updates `ng-packagr` from 22.2.2 to 22.2.4
- [Release notes](https://github.com/ng-packagr/ng-packagr/releases)
- [Changelog](https://github.com/ng-packagr/ng-packagr/blob/22.2.4/CHANGELOG.md)
- [Commits](https://github.com/ng-packagr/ng-packagr/compare/22.2.2...22.2.4)

---
updated-dependencies:
- dependency-name: "@angular/build"
  dependency-version: 22.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/cli"
  dependency-version: 22.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/common"
  dependency-version: 22.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/compiler"
  dependency-version: 22.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/compiler-cli"
  dependency-version: 22.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/core"
  dependency-version: 22.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/forms"
  dependency-version: 22.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/platform-browser"
  dependency-version: 22.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/platform-server"
  dependency-version: 22.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: "@angular/router"
  dependency-version: 22.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
- dependency-name: ng-packagr
  dependency-version: 22.2.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-06 10:15:22 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> c536c4eff7 chore(deps-dev): bump simple-git from 3.36.0 to 4.0.1 (#4968)
Bumps [simple-git](https://github.com/steveukx/git-js/tree/HEAD/simple-git) from 3.36.0 to 4.0.1.
- [Release notes](https://github.com/steveukx/git-js/releases)
- [Changelog](https://github.com/steveukx/git-js/blob/main/simple-git/CHANGELOG.md)
- [Commits](https://github.com/steveukx/git-js/commits/simple-git@4.0.1/simple-git)

---
updated-dependencies:
- dependency-name: simple-git
  dependency-version: 4.0.1
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-06 09:58:47 +02:00
Eric FennisandCopilot Autofix powered by AI ccb4b193d2 fix(site): Fix reset button and rename absolute stroke width to non-scaling stroke (#4956)
* Fix reset button and rename absolute stroke width

* Adjust props

* Adjust icon preview

* Rename switch ID for non-scaling stroke

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-06 09:48:14 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 851bc6deed chore(deps): bump vue from 3.5.42 to 3.5.43 in the vue-deps group (#4958)
Bumps the vue-deps group with 1 update: [vue](https://github.com/vuejs/core).


Updates `vue` from 3.5.42 to 3.5.43
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/compare/v3.5.42...v3.5.43)

---
updated-dependencies:
- dependency-name: vue
  dependency-version: 3.5.43
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: vue-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-06 09:47:24 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 22ac2a97a4 chore(deps-dev): bump preact (#4961)
Bumps the preact-deps group with 1 update: [preact](https://github.com/preactjs/preact).


Updates `preact` from 10.29.8 to 11.0.0
- [Release notes](https://github.com/preactjs/preact/releases)
- [Commits](https://github.com/preactjs/preact/compare/10.29.8...11.0.0)

---
updated-dependencies:
- dependency-name: preact
  dependency-version: 11.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: preact-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-06 09:46:47 +02:00
Karsa 500620a2e8 Update wifi-cog.svg (#4952)
Make wifi outline consistent with other wifi icons
2026-10-03 10:45:28 +02:00
Hakan Kayra DoğanCopilot Autofix powered by AIgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Eric
45b0e148db feat(icons): add kazakh-tenge icon (#4925)
* feat(icon): add kazakh tenge

Signed-off-by: Hakan Kayra Doğan <hkayrad@gmail.com>

* fix: add one more use case to kazakh-tenge.json

Signed-off-by: Hakan Kayra Doğan <hkayrad@gmail.com>

* Fix formatting of Kazakh Tenge use-cases

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: kazakh-tenge icon format

Signed-off-by: Hakan Kayra Doğan <hkayrad@gmail.com>

* fix: updated the icon to use same size as other typographic icons

Signed-off-by: Hakan Kayra Doğan <hkayrad@gmail.com>

* fix: inconsistent indentation in kazakh-tenge.json

Signed-off-by: Hakan Kayra Doğan <hkayrad@gmail.com>

* Apply suggestion from @github-actions[bot]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Format svg

* Remove 'tenge' from kazakh-tenge.json

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Signed-off-by: Hakan Kayra Doğan <hkayrad@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Eric <eric.fennis@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-10-03 00:05:20 +02:00
Gevorg Hakobyangithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Karsa
ee187700a6 feat(icons): added armenian-dram icon (#4456)
* Added icons/armenian-dram.svg

* Added icons/armenian-dram.json

* Update icons/armenian-dram.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat: add use-cases to armenian-dram metadata

* fix(icons/armenian-dram): adjust cap height to match Unicode standard

- Move top horizontal stroke from y=12 to y=6 to align with standard Unicode cap-height
- Adjust second stroke from y=16 to y=10 for consistent spacing
- Adjust vertical stroke endpoint to match new cap height
- Maintains the icon's visual design while following Lucide's Unicode glyph conventions

* fix(icons): restore original Armenian dram icon before making the review-driven cap-height adjustment

* fix(icons): adjust Armenian dram cap height to match Unicode-style proportions

* restore original Armenian dram icon from base commit

* fix(icons): adjust armenian-dram cap height to match Lucide typographic conventions

Align the dram symbol's top and bottom to match the 16px cap height used by other uppercase-letter and currency icons (H, B, I, euro, etc.). The symbol maintains its original design; only the vertical positioning is adjusted.

Resolves the review feedback on PR #4456.

* Apply suggestion from @karsa-mistmere

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
2026-10-03 00:03:56 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 2b9bbdf444 chore(deps): bump nuxt from 4.4.8 to 4.5.1 (#4949)
Bumps [nuxt](https://github.com/nuxt/nuxt/tree/HEAD/packages/nuxt) from 4.4.8 to 4.5.1.
- [Release notes](https://github.com/nuxt/nuxt/releases)
- [Commits](https://github.com/nuxt/nuxt/commits/v4.5.1/packages/nuxt)

---
updated-dependencies:
- dependency-name: nuxt
  dependency-version: 4.5.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-02 20:46:58 +02:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Eric
8a26c9eaa5 chore(deps-dev): bump the angular-deps group across 1 directory with 10 updates (#4954)
Bumps the angular-deps group with 10 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@angular/build](https://github.com/angular/angular-cli) | `22.1.8` | `22.2.0` |
| [@angular/cli](https://github.com/angular/angular-cli) | `22.1.8` | `22.2.0` |
| [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common) | `22.1.7` | `22.2.0` |
| [@angular/compiler](https://github.com/angular/angular/tree/HEAD/packages/compiler) | `22.1.7` | `22.2.0` |
| [@angular/compiler-cli](https://github.com/angular/angular/tree/HEAD/packages/compiler-cli) | `22.1.7` | `22.2.0` |
| [@angular/core](https://github.com/angular/angular/tree/HEAD/packages/core) | `22.1.7` | `22.2.0` |
| [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms) | `22.1.7` | `22.2.0` |
| [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser) | `22.1.7` | `22.2.0` |
| [@angular/platform-server](https://github.com/angular/angular/tree/HEAD/packages/platform-server) | `22.1.7` | `22.2.0` |
| [ng-packagr](https://github.com/ng-packagr/ng-packagr) | `22.1.1` | `22.2.2` |



Updates `@angular/build` from 22.1.8 to 22.2.0
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/v22.1.8...v22.2.0)

Updates `@angular/cli` from 22.1.8 to 22.2.0
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/v22.1.8...v22.2.0)

Updates `@angular/common` from 22.1.7 to 22.2.0
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.0/packages/common)

Updates `@angular/compiler` from 22.1.7 to 22.2.0
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.0/packages/compiler)

Updates `@angular/compiler-cli` from 22.1.7 to 22.2.0
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.0/packages/compiler-cli)

Updates `@angular/core` from 22.1.7 to 22.2.0
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.0/packages/core)

Updates `@angular/forms` from 22.1.7 to 22.2.0
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.0/packages/forms)

Updates `@angular/platform-browser` from 22.1.7 to 22.2.0
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.0/packages/platform-browser)

Updates `@angular/platform-server` from 22.1.7 to 22.2.0
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.0/packages/platform-server)

Updates `ng-packagr` from 22.1.1 to 22.2.2
- [Release notes](https://github.com/ng-packagr/ng-packagr/releases)
- [Changelog](https://github.com/ng-packagr/ng-packagr/blob/22.2.2/CHANGELOG.md)
- [Commits](https://github.com/ng-packagr/ng-packagr/compare/22.1.1...22.2.2)

---
updated-dependencies:
- dependency-name: "@angular/build"
  dependency-version: 22.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: angular-deps
- dependency-name: "@angular/cli"
  dependency-version: 22.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: angular-deps
- dependency-name: "@angular/common"
  dependency-version: 22.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: angular-deps
- dependency-name: "@angular/compiler"
  dependency-version: 22.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: angular-deps
- dependency-name: "@angular/compiler-cli"
  dependency-version: 22.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: angular-deps
- dependency-name: "@angular/core"
  dependency-version: 22.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: angular-deps
- dependency-name: "@angular/forms"
  dependency-version: 22.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: angular-deps
- dependency-name: "@angular/platform-browser"
  dependency-version: 22.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: angular-deps
- dependency-name: "@angular/platform-server"
  dependency-version: 22.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: angular-deps
- dependency-name: ng-packagr
  dependency-version: 22.2.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: angular-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Eric <eric.fennis@gmail.com>
2026-10-02 19:19:13 +02:00
4b3f93d9d0 feat(@lucide/solid): Support for Solid 2.0 RC (#4751)
* Updates needed to support Solid 2

* Switch to the next tag

* feat(packages): add `@lucide/solid` package for Solid 2

Solid 2's API is a breaking change from Solid 1 and is still an RC, so
`lucide-solid` stays on Solid 1 (`solid-js: ^1.4.7`) untouched and Solid 2
support ships as a new `packages/solid` package named `@lucide/solid` —
the same scheme already used by `@lucide/svelte` and `@lucide/angular`.

The package is a copy of `lucide-solid` on the `@lucide/shared` build
architecture, ported to Solid 2:

- `splitProps` -> `omit`, `solid-js/web` -> `@solidjs/web`,
  `JSXElement` -> `Element`, `Context.Provider` -> `<Context value>`
- `jsxImportSource` is `@solidjs/web` in tsconfig, the esbuild step and
  `ts.createProgram`; rollup externals drop the removed `solid-js/store`
- `vite-plugin-solid` -> `@solidjs/vite-plugin`
- tests keep upstream's coverage with two Solid 2 adaptations: boolean
  attribute literals must be strings (`aria-hidden="false"`), and writes
  are batched so the reactivity tests need a `flush()` before asserting

Rendered output is unchanged — the snapshots are byte-identical to
`lucide-solid`'s.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* docs(solid): fix React leftovers in the Solid guide

The Solid guide was derived from the React guide and three things were
not carried across:

- `advanced/typescript.md` still told readers the types are for "a
  TypeScript React project"
- its `LucideIcon` example kept React's destructured-props signature.
  The `: ButtonProps` annotation had also been dropped in the copy, so
  `ButtonProps` was declared but unused and the parameters were
  implicitly `any`. Destructuring props breaks reactivity in Solid —
  verified: with `({ icon: Icon, label })` a changing `label` never
  reaches the DOM, while `props.label` updates correctly.
- `advanced/aliased-names.md` had an orphaned `###` heading; its parent
  `## Choosing import name style` was dropped during the conversion
  because it documents React-only subpath exports.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* docs: type the shared Sandpack wrapper with `SandpackProps`

The base Sandpack wrapper declared its props as
`FunctionalComponent<LucideProps>` with `LucideProps` imported from
`@lucide/vue`, which has nothing to do with a Sandpack embed. None of
the props the markdown plugin actually passes (`template`, `files`,
`options`, `customSetup`, `theme`) were declared, so they only reached
the inner `<Sandpack />` via Vue's fallthrough attributes.

Declare `SandpackProps` from `sandpack-vue3` instead and forward them
explicitly. This also removes the `@lucide/vue` import that made every
framework guide — including the Solid one, which uses this wrapper
directly — appear to reference the Vue package.

Verified with a full `vitepress build`: each framework guide's chunk
still carries its own template (react/vue/vite-svelte/vanilla/
vite-solid) and all five props reach the component.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* docs(solid): document the Solid 2 flavour in the getting started guide

The Solid guide teaches `lucide-solid` throughout (64 references), so
the one-line note about `@lucide/solid` left Solid 2 readers on a page
whose every install command and live example is Solid 1 — and the
packages list points `@lucide/solid` at this same page.

Replace that note with a "Using Solid 2?" callout holding its own
tabbed install group, the import-specifier swap, and a table of the
Solid 2 changes that affect code written around Lucide (`@solidjs/web`,
`jsxImportSource`, `splitProps` -> `omit`, `<Ctx value>`), linking out
to Solid's own migration guide for the rest.

The claim that both packages expose the same components and props is
checked, not assumed: `dist/types/lucide-solid.d.ts` is identical
between the two packages, and the only differences anywhere in the
public type surface are Solid's own renames (the `JSX` namespace source
and `JSXElement` -> `Element`).

Keeps one guide section for both packages, matching how upstream
handles the two Svelte packages.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* feat(solid): port lucide-solid to Solid 2

- Icon/context/types use Solid 2 APIs: omit() instead of splitProps(),
  Dynamic and JSX types from @solidjs/web.
- solid-js / @solidjs/web 2.0 (rc) as peer and dev dependencies,
  babel-preset-solid 2; rollup and tsconfig updated to match.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Add integration test

* Update rollup file

* Fix tests

* Revert lucide-solid changes

* update lockfile

* Fix docs

* Format code

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Eric <eric.fennis@gmail.com>
2026-10-02 19:02:20 +02:00
KarsaandEric Fennis 0c0e3ab3ae fix(github/actions): move to daily release flow (#4911)
* fix(github/actions): move to daily release flow with gated releases on other changes

* Update .github/workflows/ci.yml

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

* Apply suggestion from @karsa-mistmere

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-02 17:42:50 +02:00
James Pearcegithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Copilot Autofix powered by AIEric Fennis
b8671171b5 feat(icons): added wind-arrow-up icon (#4501)
* Added icons/wind-arrow-up.svg

* Added icons/wind-arrow-up.json

* Update icons/wind-arrow-up.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update icons/wind-arrow-up.json

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Modify contributors and enhance use cases in JSON

Updated contributors and added use cases for wind arrow icon.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Fix JSON formatting in wind-arrow-up.json

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-02 17:25:29 +02:00
Eric Fennis 3efde520fc Upgrade vitest (#4953) 2026-10-02 16:28:41 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 805a5e8d32 chore(deps): bump pnpm/action-setup (#4939)
Bumps the github-actions group with 1 update in the / directory: [pnpm/action-setup](https://github.com/pnpm/action-setup).


Updates `pnpm/action-setup` from 6.0.10 to 6.1.0
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](https://github.com/pnpm/action-setup/compare/0977fd99725f1db4007ccb2928dbb4e90d06cc86...ea17c68df8912ef543352723c149a84f56e3d413)

---
updated-dependencies:
- dependency-name: pnpm/action-setup
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-02 15:52:25 +02:00
Hector Zarate dcc57e4748 feat(icons): add text-align-justify-* icons (#4942) 2026-10-02 15:42:34 +02:00
Jiacheng Jiang b32203c2f0 feat(icons): add door-closed-cog icon (#4905)
* feat(icons): add door-open-cog icon

* docs(icons): focus door-open-cog use cases

* feat(icons): replace door-open-cog with door-closed-cog

* docs(icons): focus door-closed-cog use cases
2026-10-02 15:41:42 +02:00
Eric FennisClaude Opus 5Copilot Autofix powered by AIcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
5e87c4b846 test(lucide-solid): add Vite and SolidStart integration fixtures (#4884)
* test(lucide-solid): add Vite and SolidStart integration fixtures

Mirror the `lucide-react` integration suite for `lucide-solid`. Both
fixtures are scaffolded by `pnpm create solid` and consume the built
package through its public entry points only:

- `integrations/lucide-solid/vite` (vanilla/basic template)
- `integrations/lucide-solid/solid-start` (solid-start-v2/basic template)

Each runs a production build, `tsc --noEmit`, and a Vitest Browser Mode
test in Chromium under a `check` script, wired into the new root
`test:integrations:solid` script and an `integration` job on the
`lucide-solid` workflow.

The showcase exercises the bare export, per-icon props, `LucideProvider`,
an alias against its canonical icon, and the `lucide-solid/icons/circle`
deep import. `lucide-solid` has no `DynamicIcon`, so the deep import
takes the place of the React fixtures' dynamic-icon block. The SolidStart
spec additionally navigates between two routes.

Both fixtures resolve the package through its `solid` export condition
and compile the raw JSX in `dist/source`; the SolidStart build bundles it
into the SSR server chunk.

Each fixture carries a second TypeScript project,
`tsconfig.declarations.json`, that compiles the showcase with
`skipLibCheck: false` so the declarations shipped in `dist/types` are
actually read. That catches a `.d.ts` pointing at a file the build never
emitted, which the app typecheck silently degrades to `any`.

`@solidjs/start@2` requires Vite 8 while the repository pins Vite 7, so
the SolidStart fixture is released from that pin by a parent-scoped
`'@lucide/integration-solid-solid-start>vite'` override. Only that
importer resolves to Vite 8; every other package stays on 7.3.6.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAmVJZqdypLNwEFhCmfsPN

* fix(solid): align SolidStart fixture with Vite 7

* Upgrade vite dependency from 7.3.6 to 8.3.2

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Update README.md to clarify Vite overrides

Removed duplicate note about bug #4846 and added a section on Vite overrides.

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-02 15:24:45 +02:00
Cipher Professor 12691c4568 fix(react-native): stop forwarding arbitrary rest props to child shape elements (#4903)
* test(react-native): add failing regression test for #3877 (rest props leaking onto child shapes)

* fix(react-native): stop forwarding arbitrary rest props to child shape elements

Fixes #3877. customAttrs (merged onto every child Path/Circle/etc.)
was spreading ...rest in addition to stroke/strokeWidth, which
duplicates event handlers like onPress onto every child shape, not
just the parent Svg. This breaks touch handling in react-native-svg,
since child shapes' own responder handling competes with the parent's.

fill is now pulled explicitly from the already-resolved svgAttributes
(same pattern already used for stroke/strokeWidth) instead of relying
on the blanket ...rest spread, since it's the one presentational
attribute that genuinely needs to reach every child and was otherwise
only reaching them incidentally via that spread.

Mirrors the same fix pattern already applied to this file for the
identical bug class: PR #3892 (className leaking onto children) and
commit 5d9cc158 / #4881 (testID not reaching the right element).

* fix(react-native): close strokeLinecap/strokeLinejoin regression from prior fix-wave (#3877)

Final review on this branch found that the prior fix (stopping
customAttrs from spreading ...rest onto child shapes) introduced a
real regression: childDefaultAttributes hardcodes
strokeLinecap/strokeLinejoin to 'round', and since customAttrs no
longer carried ...rest, a caller's override of either prop never
reached the child merge — the hardcoded default silently won every
time.

Extend customAttrs to also pull strokeLinecap/strokeLinejoin from the
already-resolved svgAttributes, the same pattern already used for
fill/stroke/strokeWidth. Verified childDefaultAttributes has exactly
these 5 keys (defaultAttributes.ts) and that svgAttributes correctly
resolves caller overrides for both (traced through
buildLucideIconForReact in @lucide/shared), so this closes the gap
completely.

Added a regression test that is RED against the unfixed code
(asserts strokeLinecap='butt'/strokeLinejoin='miter' survive to
every child) and GREEN after the fix.

Also, per the same review:
- Strengthened the existing "should not forward arbitrary rest props"
  test to assert the parent Svg DOES receive onPress (same reference),
  proving where the prop went, not just where it didn't.
- Added afterEach(() => vi.restoreAllMocks()) as defense-in-depth
  against future test reordering (vitest.config.mts already sets
  mockReset: true, so nothing was previously broken by this).

Skipped the local quality-gate hook for this commit: its repo-root
tsc check fails identically (same ~700 pre-existing errors, e.g.
missing generated icon/alias files and missing --jsx flags in
packages outside lucide-react-native) against the clean base commit
with zero changes applied (verified via git stash + npx tsc --noEmit
-p . before restoring this diff) - a pre-existing, repo-structural
gate false positive, not something this diff caused. The actual
in-scope test suite (tests/Icon.spec.tsx, tests/lucide-react-native.spec.tsx,
tests/context.spec.tsx) runs clean: 20/20 passing, no warnings.

Signed-off-by: Mohsin Manzoor Bhat <mohsinmanzoor1913@gmail.com>

---------

Signed-off-by: Mohsin Manzoor Bhat <mohsinmanzoor1913@gmail.com>
2026-10-02 15:20:42 +02:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Eric
98331e2870 chore(deps): bump the react-deps group across 1 directory with 3 updates (#4951)
* chore(deps): bump the react-deps group across 1 directory with 3 updates

Bumps the react-deps group with 3 updates in the / directory: [react](https://github.com/react/react/tree/HEAD/packages/react), [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) and [react-dom](https://github.com/react/react/tree/HEAD/packages/react-dom).


Updates `react` from 18.3.1 to 19.3.0
- [Release notes](https://github.com/react/react/releases)
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/react/react/commits/v19.3.0/packages/react)

Updates `@types/react` from 18.3.31 to 19.3.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

Updates `react-dom` from 18.3.1 to 19.3.0
- [Release notes](https://github.com/react/react/releases)
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/react/react/commits/v19.3.0/packages/react-dom)

---
updated-dependencies:
- dependency-name: react
  dependency-version: 19.3.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: react-deps
- dependency-name: "@types/react"
  dependency-version: 19.3.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: react-deps
- dependency-name: react-dom
  dependency-version: 19.3.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: react-deps
...

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

* Fix types

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Eric <eric.fennis@gmail.com>
2026-10-02 15:18:28 +02:00
c3f2266801 feat(icons): added rugby-ball icon (#3496)
* Added icons/rugby-ball.svg

* Added icons/rugby-ball.json

* Add use-cases field to rugby-ball.json

* Apply batched suggestions from code review

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Apply design from @karsa-mistmere

* Add contributor 'karsa-mistmere' to rugby-ball.json

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Jakob Guddas <github@jguddas.de>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Karsa <contact@karsa.org>
2026-10-02 14:49:25 +02:00
Eric Fennis 09aa9c5c62 chore(deps): Upgrade to vite 8 (#4950)
* Upgrade to vite 8

* Fix types
2026-10-02 13:54:37 +02:00
Karsaandepifaniofrancisco 00300d31bd fix(site): persist icon customizer (#4944)
* fix(docs): persist icon customizer settings

Persist icon color, size, stroke width, and absolute stroke width between page navigations and reloads.

Keep a shared icon style state across the homepage and icons page, clamp the homepage preview size to its supported range, and apply persisted absolute stroke settings after mount.

* fix(docs): avoid icon customizer hydration flicker

Initialize persisted icon settings synchronously and apply absolute stroke width before the first rendered state.

* fix(docs): restore icon styles before first paint

Apply stored icon styles from a head script before hydration, defer customizer visibility until mount, and render persisted switches on the client to avoid stale SSR classes. Keep absolute stroke state synchronized globally and cover prepaint initialization with regression tests.

* fix(site): persist icon customizer

* fix(packages/react): update vulnerable @tanstack packages

* fix(docs): persist icon customizer settings

Persist icon color, size, stroke width, and absolute stroke width between page navigations and reloads.

Keep a shared icon style state across the homepage and icons page, clamp the homepage preview size to its supported range, and apply persisted absolute stroke settings after mount.

* fix(docs): avoid icon customizer hydration flicker

Initialize persisted icon settings synchronously and apply absolute stroke width before the first rendered state.

* fix(docs): restore icon styles before first paint

Apply stored icon styles from a head script before hydration, defer customizer visibility until mount, and render persisted switches on the client to avoid stale SSR classes. Keep absolute stroke state synchronized globally and cover prepaint initialization with regression tests.

* fix(site): persist icon customizer

* fix(packages/react): update vulnerable @tanstack packages

* fix(site): generalize usePersistedIconStyle to reduce code duplication in icon customizers

* fix(site): home size slider now uses max="256", matching the sidebar

* fix(site): fix linting issues in iconStyleHead.js

* fix(site): make Switch.vue hydration safe

* fix(site): fix home icon customizer color input width

* fix(site): make home icon customizer not persistent

* fix(site): fix duplicate ids in sidebar icon customizer as well

* fix(site): various minor fixes to the customizer bl

* fix(site): revert "[default]" placeholder

---------

Co-authored-by: epifaniofrancisco <epifaniofrancisco03@gmail.com>
2026-10-02 13:46:27 +02:00
Karsagithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Eric Fennis
9d9418a25d feat(icons): added layout-grid-circles icon (#4567)
* Added icons/layout-grid-circles.svg

* Added icons/layout-grid-circles.json

* Update layout-grid-circles.json

* Update layout-grid-circles.json

* Update layout-grid-circles.json

* Apply suggestion from @github-actions[bot]

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-10-02 13:17:37 +02:00
Jovi De Croock 309f440724 fix(lucide-preact): add Preact v11 compatibility (#4924)
* fix(lucide-preact): import `SVGAttributes` and `SignalLike` from `preact`

`LucideProps` extended `JSX.SVGAttributes` and `createLucideIcon` used
`JSX.SignalLike`. Preact 10 marks both JSX aliases as deprecated in favour
of the top-level exports, and Preact 11 removes them: its `JSX` namespace
only keeps what TypeScript needs for JSX checking.

Against Preact 11 the package fails `tsc` (TS2694), and the published
`.d.ts` resolves `LucideProps` to an error type. Consumers with
`skipLibCheck: true` see no error, but every icon then accepts unknown
props and event handler parameters become implicit `any`.

The top-level `SVGAttributes` and `SignalLike` exports already exist in
Preact 10.27.2, the current peer floor, and are identical to the JSX
aliases there, so the props type does not change for Preact 10 users.

* fix(lucide-preact): add Preact v11 compatibility

Widen the `preact` peer range to `^10.27.2 || ^11.0.0-0`. The `-0` lets
the 11.0.0 release candidates install without peer warnings and still
covers every 11.x release.

The dev dependency stays on Preact 10. The lockfile does not record
workspace peer ranges, so it is unchanged.
2026-10-02 13:15:43 +02:00
Vugar BakhishovandVugar Bakhishov 05eacffce6 feat(svelte): export context subpath (#4927)
Co-authored-by: Vugar Bakhishov <vugarbbakhishov-hub@users.noreply.github.com>
2026-10-02 13:11:05 +02:00
Eric FennisandClaude 41991a82aa test(integrations): add Vue integration fixtures for Vite, Nuxt and Vike (#4882)
Mirror the lucide-react integration tests for `@lucide/vue`. Each fixture is
scaffolded with the framework's official generator (`pnpm create vue@latest`,
`pnpm create nuxt@latest`, `pnpm create vike@latest --vue`), trimmed of demo
boilerplate, and runs a production build, `vue-tsc`, and a Vitest Browser Mode
test in Chromium that renders the public `@lucide/vue` APIs (static icon,
per-instance props, `setLucideProps` context, alias vs canonical icon).

Nuxt is pinned to 4.4.8: 4.5.x requires Vite 8, which the workspace-wide
`vite: ^7.3.6` override does not allow.

Wire it up with a `test:integrations:vue` root script and an `integration`
job in the Lucide Vue workflow.


Claude-Session: https://claude.ai/code/session_01KmQsnSECZoNxh1GJ15BmdH

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-02 13:01:30 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 3cb1625e46 chore(deps-dev): bump the svelte-deps group with 2 updates (#4918)
Bumps the svelte-deps group with 2 updates: [@sveltejs/vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte/tree/HEAD/packages/vite-plugin-svelte) and [svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte).


Updates `@sveltejs/vite-plugin-svelte` from 7.3.0 to 7.3.1
- [Release notes](https://github.com/sveltejs/vite-plugin-svelte/releases)
- [Changelog](https://github.com/sveltejs/vite-plugin-svelte/blob/main/packages/vite-plugin-svelte/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/vite-plugin-svelte/commits/@sveltejs/vite-plugin-svelte@7.3.1/packages/vite-plugin-svelte)

Updates `svelte` from 5.57.0 to 5.57.1
- [Release notes](https://github.com/sveltejs/svelte/releases)
- [Changelog](https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/svelte/commits/svelte@5.57.1/packages/svelte)

---
updated-dependencies:
- dependency-name: "@sveltejs/vite-plugin-svelte"
  dependency-version: 7.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: svelte-deps
- dependency-name: svelte
  dependency-version: 5.57.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: svelte-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-02 12:57:24 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ec6d30d82b chore(deps): bump next from 16.3.4 to 16.3.6 (#4946)
Bumps [next](https://github.com/vercel/next.js) from 16.3.4 to 16.3.6.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Commits](https://github.com/vercel/next.js/compare/v16.3.4...v16.3.6)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.3.6
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-02 12:43:01 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> b25472d265 chore(deps-dev): bump @angular/router from 22.1.7 to 22.2.0 (#4945)
Bumps [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router) from 22.1.7 to 22.2.0.
- [Release notes](https://github.com/angular/angular/releases)
- [Commits](https://github.com/angular/angular/commits/v22.2.0/packages/router)

---
updated-dependencies:
- dependency-name: "@angular/router"
  dependency-version: 22.2.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-02 12:41:51 +02:00
KarsaandEric Fennis b8718e70f6 fix(icons): replace nut & nut-off with compliant designs (#4840)
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
2026-10-02 12:18:05 +02:00
Karsa aace268b9b fix(github/actions): use canonical metadata instructions for PR suggestions (#4910) 2026-10-02 10:51:33 +02:00
Saadanjum0andKarsa e8a2c60b75 fix(shared): escape attribute values in buildLucideSvg (#4940)
* fix(shared): escape attribute values in buildLucideSvg

Attribute values were interpolated into the SVG string as-is, so a value
containing a double quote, ampersand or angle bracket (for example in a
custom attribute or class name) produced malformed markup.

* Use replace(/x/g) instead of replaceAll for broader TS lib compat

lucide-react-native's tsconfig doesn't include the ES2021 lib that
replaceAll requires, failing typecheck. A global regex replace is
functionally identical here and works under any target.

* Escape the full set of relevant HTML entities in attribute values

Also escape > and ' per review feedback, not just & " <.

* Apply suggestion from @karsa-mistmere

---------

Co-authored-by: Karsa <contact@karsa.org>
2026-10-02 09:41:22 +02:00
Karsa ec3c3906f7 feat(scripts): added icon usage script 2026-08-31 17:54:23 +02:00
412 changed files with 16662 additions and 3572 deletions
+41
View File
@@ -11,3 +11,44 @@ ungroup
toc
sunlounger
monstera
# Search tags and terms used in icon and category metadata
ageusia
artboard
barbeque
choy
ecommerce
enby
flexbox
futbol
gddr
glassmorphism
gltf
interpoint
interpunct
middot
mistwarp
mlops
moleskine
nonbinary
pantone
parfum
phonendoscope
quadcopter
reapproval
rubygems
showreel
solera
timesheets
turbowarp
unbook
unguard
unkeys
unlabel
unprevented
unqueue
unsalvageable
unshield
unstar
vitamizer
wayfinding
+12
View File
@@ -0,0 +1,12 @@
[
"fix",
"feat",
"perf",
"refactor",
"test",
"style",
"docs",
"ci",
"build",
"chore"
]
@@ -13,7 +13,7 @@ The `contributors` property is a required array of GitHub usernames for the peop
The `tags` property is an array of strings that describe the icon and can be used for searching.
Validate the tags against the `icon.schema.json` to ensure they are correctly formatted and adhere to the defined structure.
Provide tag suggestions based on the name of the icon and the use cases provided in the PR description. Use the existing tags in the repository as a reference for consistency and to avoid duplicates. Don't suggest words like: 'icon' and preferably use single words. Tags should always be in lowercase, and may also contain spaces (e.g. `magnifying glass`). The name of icon should not be included in the tags, as it is already specified.
Provide tag suggestions based on the name of the icon and the use cases provided in the PR description. Use the existing tags in the repository as a reference for consistency and to avoid duplicates. Don't suggest words like: 'icon' and preferably use single words. Tags should always be in lowercase, and may also contain spaces (e.g. `magnifying glass`). Don't include the full icon name, its space-separated form, or any individual part of its kebab-case name because those terms are already searchable. For example, don't suggest `mail-search`, `mail search`, `mail`, or `search` for the `mail-search` icon.
## Categories
@@ -32,7 +32,7 @@ A use-case tells a reader **where and why an icon would be used in a real interf
- Write each use-case as a short phrase, not a sentence. Start with a present participle verb: *Representing…*, *Indicating…*, *Marking…*, *Showing…*, *Confirming…*, *Toggling…*, *Categorizing…*, *Searching…*.
- Keep it to roughly 4–12 words. One clear idea per entry.
- No trailing period. No leading bullet, number, or dash (the surrounding format supplies that).
- Give each icon 1–4 use-cases, ordered most-common first. Prefer fewer strong entries over many weak or repetitive ones.
- Give each icon 1 or more use-cases, ordered most-common first. More than 4 use-cases are allowed when they are distinct and useful. Prefer fewer strong entries over many weak or repetitive ones.
### Voice
+1
View File
@@ -82,6 +82,7 @@
- changed-files:
- any-glob-to-any-file:
- 'packages/lucide-solid/*'
- 'packages/solid/*'
# For changes in the Lucide astro package
🚀 astro package:
+2 -2
View File
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -31,7 +31,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+58 -42
View File
@@ -5,7 +5,10 @@ on:
branches:
- main
paths:
- icons/**/*.svg
- icons/*.svg
schedule:
- cron: '0 6 * * *'
workflow_dispatch:
inputs:
@@ -26,39 +29,63 @@ on:
permissions: {}
jobs:
check-dispatch-gate:
if: github.repository == 'lucide-icons/lucide' &&
startsWith(github.event.head_commit.message, 'feat(icons)') &&
github.event_name != 'workflow_dispatch'
release-gate:
concurrency:
group: ci-${{ github.event_name == 'schedule' && github.ref || 'release-gated' }}
cancel-in-progress: true
if: github.repository == 'lucide-icons/lucide' && github.event_name != 'workflow_dispatch'
environment: ${{ github.event_name == 'schedule' && 'Icon Release' || 'Icon Release Gated' }}
runs-on: ubuntu-latest
steps:
- name: Approve release
run: echo 'Release approved'
prepare-release:
needs: release-gate
runs-on: ubuntu-latest
permissions:
contents: read
contents: read # Required to check if a new release is needed
outputs:
RELEASE_ENVIRONMENT: ${{ steps.environment.outputs.RELEASE_ENVIRONMENT }}
SHOULD_RELEASE: ${{ steps.changes.outputs.SHOULD_RELEASE }}
LATEST_TAG: ${{ steps.latest-tag.outputs.LATEST_TAG }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
- name: Fetch tags
run: git fetch --all --tags
- name: Get latest tag
id: latest-tag
run: echo "LATEST_TAG=$(git tag --sort=-v:refname | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)" >> "$GITHUB_OUTPUT"
- name: Check if latest tag was created today
id: environment
- name: Log latest tag
run: echo '${{ steps.latest-tag.outputs.LATEST_TAG }}'
- name: Check for releasable changes
id: changes
env:
LATEST_TAG: ${{ steps.latest-tag.outputs.LATEST_TAG }}
run: |
LATEST_TAG=$(git tag --sort=-v:refname | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)
TAG_DATE=$(git log -1 --format=%cs "$LATEST_TAG")
TODAY=$(date +%Y-%m-%d)
if [ "$TAG_DATE" == "$TODAY" ]; then
echo "::warning::A release tag already exists for today ($TODAY): $LATEST_TAG. Manual approval will be required to proceed."
echo "RELEASE_ENVIRONMENT=Icon Release Gated" >> $GITHUB_OUTPUT
else
echo "RELEASE_ENVIRONMENT=Icon Release" >> $GITHUB_OUTPUT
if [ -z "$LATEST_TAG" ]; then
echo "::error::No version tag found to release from."
exit 1
fi
echo "Latest version tag: $LATEST_TAG"
CHANGES=$(git diff --name-only "$LATEST_TAG" HEAD -- ':(glob)icons/*.svg')
if [ -z "$CHANGES" ]; then
echo "::notice::No icon SVGs changed since $LATEST_TAG. Skipping release."
echo "SHOULD_RELEASE=false" >> "$GITHUB_OUTPUT"
exit 0
fi
echo "$CHANGES"
echo "SHOULD_RELEASE=true" >> "$GITHUB_OUTPUT"
create-release:
if: github.repository == 'lucide-icons/lucide'
needs: check-dispatch-gate
environment: ${{ needs.check-dispatch-gate.outputs.RELEASE_ENVIRONMENT }}
if: github.repository == 'lucide-icons/lucide' && needs.prepare-release.outputs.SHOULD_RELEASE == 'true'
needs: prepare-release
runs-on: ubuntu-latest
permissions:
contents: write # Required to create the release and tag
@@ -67,7 +94,7 @@ jobs:
RELEASE_URL: ${{ steps.create-release.outputs.url }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -76,37 +103,26 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Fetch tags
run: git fetch --all --tags
- name: Get latest tag
id: latest-tag
run: echo "LATEST_TAG=$(git tag --sort=-v:refname | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)" >> $GITHUB_OUTPUT
- name: Log latest tag
run: echo '${{ steps.latest-tag.outputs.LATEST_TAG }}'
- name: Check if we can patch
run: pnpm semver $LATEST_TAG -i minor
run: pnpm semver "$LATEST_TAG" -i minor
env:
LATEST_TAG: ${{ steps.latest-tag.outputs.LATEST_TAG }}
LATEST_TAG: ${{ needs.prepare-release.outputs.LATEST_TAG }}
- name: Create new version
id: new-version
run: echo "NEW_VERSION=$(pnpm semver $LATEST_TAG -i minor)" >> $GITHUB_OUTPUT
run: echo "NEW_VERSION=$(pnpm semver "$LATEST_TAG" -i minor)" >> "$GITHUB_OUTPUT"
env:
LATEST_TAG: ${{ steps.latest-tag.outputs.LATEST_TAG }}
LATEST_TAG: ${{ needs.prepare-release.outputs.LATEST_TAG }}
- name: Check output
run: |
echo '${{ steps.new-version.outputs.NEW_VERSION }}'
echo '${{ steps.change-log.outputs.CHANGE_LOG }}'
run: echo '${{ steps.new-version.outputs.NEW_VERSION }}'
- name: Create Release
id: create-release
uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3
with:
tag_name: ${{ steps.new-version.outputs.NEW_VERSION }}
target_commitish: ${{ github.sha }}
name: Version ${{ steps.new-version.outputs.NEW_VERSION }}
generate_release_notes: true
@@ -135,7 +151,7 @@ jobs:
post-release:
name: Trigger post-release automation
if: >-
always() &&
!cancelled() &&
github.repository == 'lucide-icons/lucide' &&
(needs.start-release.result == 'success' || needs.dispatch-release.result == 'success')
needs: [create-release, start-release, dispatch-release]
+2 -2
View File
@@ -20,7 +20,7 @@ jobs:
with:
# Release metadata is generated by diffing every release tag
fetch-depth: 0
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -39,7 +39,7 @@ jobs:
with:
# Release metadata is generated by diffing every release tag
fetch-depth: 0
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+103
View File
@@ -0,0 +1,103 @@
name: PR title
on:
pull_request_target:
types:
- opened
- reopened
- synchronize
- edited
permissions: {}
concurrency:
group: pr-title-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
generate-pr-title:
name: Generate PR Title
# Skip when a maintainer has opted out by adding the "Keep PR title" label,
# and on manual edits so they are not reverted straight away.
if: github.repository == 'lucide-icons/lucide' &&
github.event.action != 'edited' &&
!contains(github.event.pull_request.labels.*.name, 'Keep PR title')
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write # Required to edit the PR title
steps:
# We check out the main branch of the main repository for security reasons.
# The script only reads its input from the environment, so it never runs
# any code from the (untrusted) pull request.
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: lucide-icons/lucide
fetch-depth: 0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: 'package.json'
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6
with:
# The checkout is the base branch, so the PR head commit isn't available locally.
use_rest_api: true
- name: Generate PR title
id: generate
run: |
NEW_TITLE="$(node ./scripts/generatePullRequestTitle.mts)"
{
echo "new_title<<PR_TITLE_EOF"
echo "$NEW_TITLE"
echo "PR_TITLE_EOF"
} >> "$GITHUB_OUTPUT"
env:
ADDED_FILES: ${{ steps.changed-files.outputs.added_files }}
CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_and_modified_files }}
CURRENT_TITLE: ${{ github.event.pull_request.title }}
- name: Update PR title
if: steps.generate.outputs.new_title != ''
run: gh pr edit "$PR_NUMBER" --title "$NEW_TITLE"
env:
GH_TOKEN: ${{ github.token }}
PR_NUMBER: ${{ github.event.pull_request.number }}
NEW_TITLE: ${{ steps.generate.outputs.new_title }}
# Runs after the title is generated: an edit made with `GITHUB_TOKEN` does not
# trigger new workflow runs, so a separate workflow would lint the old title.
# The lint action fetches the current title through the API.
lint-pr-title:
name: PR Title Lint
needs: generate-pr-title
if: ${{ !cancelled() }}
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read # Required to read the PR title
steps:
# Checks out the base branch, so the allowed types can't be changed by the PR.
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Read conventional commit types
id: commit-types
run: |
{
echo "types<<TYPES_EOF"
jq -r '.[]' .github/conventional-commit-types.json
echo "TYPES_EOF"
} >> "$GITHUB_OUTPUT"
- uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
types: ${{ steps.commit-types.outputs.types }}
requireScope: true
ignoreLabels: |
bot
+2 -2
View File
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -33,7 +33,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+57 -4
View File
@@ -7,11 +7,12 @@ permissions:
contents: read
jobs:
lint-code:
eslint:
name: ESLint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -20,5 +21,57 @@ jobs:
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Run Linter
run: pnpm lint
# The formatter prints workflow commands, which GitHub shows as inline annotations.
- name: Run ESLint
run: pnpm lint:es --format ./scripts/eslint/githubFormatter.mjs
prettier:
name: Prettier
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
node-version-file: 'package.json'
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Check formatting
run: pnpm lint:format:ci
json-schema:
name: JSON Schema
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
node-version-file: 'package.json'
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Validate icon and category JSON
run: pnpm lint:json --format ./scripts/eslint/githubFormatter.mjs
spelling:
name: Spelling
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
node-version-file: 'package.json'
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Spell check icon and category metadata
run: pnpm lint:spelling:ci
-36
View File
@@ -1,36 +0,0 @@
name: Linting PR title
on:
pull_request:
types:
- opened
- edited
- reopened
permissions:
contents: read
pull-requests: read # Required to read the PR title
jobs:
lint-pr-title:
name: PR Title Lint
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
types: |
fix
feat
perf
refactor
test
style
docs
ci
build
chore
requireScope: true
ignoreLabels: |
bot
+2 -2
View File
@@ -20,7 +20,7 @@ jobs:
contents: read
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -49,7 +49,7 @@ jobs:
contents: read
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+3 -3
View File
@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: 'package.json'
@@ -35,7 +35,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: 'package.json'
@@ -51,7 +51,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: 'package.json'
+2 -2
View File
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -42,7 +42,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+2 -2
View File
@@ -18,7 +18,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -34,7 +34,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+2 -2
View File
@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -36,7 +36,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+3 -3
View File
@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -36,7 +36,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -52,7 +52,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+4 -4
View File
@@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -40,7 +40,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -56,7 +56,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -75,7 +75,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+2 -2
View File
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -33,7 +33,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+25 -3
View File
@@ -7,9 +7,12 @@ on:
pull_request:
paths:
- packages/lucide-solid/**
- integrations/lucide-solid/**
- packages/shared/**
- tools/build-icons/**
- tools/rollup-plugins/**
- package.json
- pnpm-workspace.yaml
- pnpm-lock.yaml
permissions:
@@ -20,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -36,7 +39,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -52,7 +55,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -63,3 +66,22 @@ jobs:
- name: Typecheck
run: pnpm --filter lucide-solid typecheck
integration:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
node-version-file: 'package.json'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Install Chromium
run: pnpm --filter @lucide/integration-solid-vite exec playwright install --with-deps chromium
- name: Run integration checks
run: pnpm test:integrations:solid
+2 -2
View File
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -31,7 +31,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+25 -3
View File
@@ -10,6 +10,9 @@ on:
- packages/shared/**
- tools/build-icons/**
- tools/rollup-plugins/**
- integrations/lucide-svelte/**
- package.json
- pnpm-workspace.yaml
- pnpm-lock.yaml
permissions:
@@ -20,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -36,7 +39,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -52,7 +55,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -63,3 +66,22 @@ jobs:
- name: Typecheck
run: pnpm --filter @lucide/svelte typecheck
integration:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
node-version-file: 'package.json'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Install Chromium
run: pnpm --filter @lucide/integration-svelte-vite exec playwright install --with-deps chromium
- name: Run integration checks
run: pnpm test:integrations:svelte
+25 -3
View File
@@ -10,6 +10,9 @@ on:
- packages/shared/**
- tools/build-icons/**
- tools/rollup-plugins/**
- integrations/lucide-vue/**
- package.json
- pnpm-workspace.yaml
- pnpm-lock.yaml
permissions:
@@ -20,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -36,7 +39,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -52,7 +55,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -63,3 +66,22 @@ jobs:
- name: Test
run: pnpm --filter @lucide/vue typecheck
integration:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
node-version-file: 'package.json'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Install Chromium
run: pnpm --filter @lucide/integration-vue-vite exec playwright install --with-deps chromium
- name: Run integration checks
run: pnpm test:integrations:vue
+3 -3
View File
@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -35,7 +35,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -51,7 +51,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -22,7 +22,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: lucide-icons/lucide
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+2 -2
View File
@@ -35,7 +35,7 @@ jobs:
with:
fetch-depth: 0 # Required to diff the lab icons against the previous tag
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -125,7 +125,7 @@ jobs:
contents: read
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+4 -3
View File
@@ -53,12 +53,13 @@ jobs:
'@lucide/angular',
'@lucide/astro',
'@lucide/icons',
'@lucide/solid',
'@lucide/svelte',
'@lucide/vue',
]
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -96,7 +97,7 @@ jobs:
name: lucide-font
path: lucide-font
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
@@ -127,7 +128,7 @@ jobs:
contents: read
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
+71
View File
@@ -0,0 +1,71 @@
name: Lucide Solid 2 Checks
on:
push:
branches:
- next
pull_request:
paths:
- packages/solid/**
- packages/shared/**
- tools/build-icons/**
- tools/rollup-plugins/**
- integrations/lucide-solid-2/**
- package.json
- pnpm-workspace.yaml
- pnpm-lock.yaml
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
node-version-file: 'package.json'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm --filter @lucide/solid build
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
node-version-file: 'package.json'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Test
run: pnpm --filter @lucide/solid test
integration:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
cache: 'pnpm'
node-version-file: 'package.json'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Install Chromium
run: pnpm --filter @lucide/integration-solid-2-vite exec playwright install --with-deps chromium
- name: Run integration checks
run: pnpm test:integrations:solid-2
+4
View File
@@ -19,6 +19,10 @@ stats
integrations/**/.react-router
integrations/**/.vitest-attachments
integrations/**/__screenshots__
integrations/**/.output
integrations/**/.nitro
integrations/**/.nuxt
integrations/**/.svelte-kit
outlined
lucide-font
packages/**/src/icons/*.js
+6
View File
@@ -1,4 +1,5 @@
pnpm-lock.yaml
.github/conventional-commit-types.json
# docs examples
docs/**/examples/
@@ -23,8 +24,13 @@ packages/svelte/.svelte-kit
integrations/**/.react-router
integrations/**/next-env.d.ts
integrations/**/routeTree.gen.ts
integrations/**/file-routes.d.ts
integrations/**/.vitest-attachments
integrations/**/__screenshots__
integrations/**/.output
integrations/**/.nitro
integrations/**/.nuxt
integrations/**/.svelte-kit
# lucide-svelte
packages/svelte/src/icons/*.svelte
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Accessibility",
"description": "Icons for accessibility, visibility, hearing, speech, and inclusive UI affordances.",
"icon": "accessibility"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Accounts & access",
"description": "Icons for user profiles, identity, settings, memberships, and personal account actions.",
"icon": "user"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Animals",
"description": "Icons for animals, wildlife, pets, insects, and other living creatures.",
"icon": "dog"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Arrows",
"description": "Icons for directional arrows, movement, sorting, transfer, and navigation flows.",
"icon": "arrow-left-right"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Buildings",
"description": "Icons for buildings, landmarks, houses, infrastructure, and built environments.",
"icon": "building"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Charts",
"description": "Icons for charts, graphs, trends, analytics, and data visualization.",
"icon": "chart-pie"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Communication",
"description": "Icons for speaking, listening, calling, messaging, broadcasting, and communication devices.",
"icon": "message-circle"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Connectivity",
"description": "Icons for wireless signals, wired connections, networks, device pairing, and data transfer.",
"icon": "wifi"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Cursors",
"description": "Icons for cursors, pointers, selection tools, and loading states.",
"icon": "mouse-pointer-2"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Design",
"description": "Icons for design tools, layout controls, creative editing, and visual composition.",
"icon": "palette"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Coding & development",
"description": "Icons for code, logic, data structures, automation, and software development workflows.",
"icon": "code-xml"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Devices",
"description": "Icons for hardware, electronics, computers, peripherals, and connected devices.",
"icon": "smartphone"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Emoji",
"description": "Icons for expressive symbols, faces, gestures, hearts, stars, and zodiac signs.",
"icon": "face-slightly-smiling"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "File icons",
"description": "Icons for files, folders, storage, import and export, and document-related actions.",
"icon": "panels-top-left"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Finance",
"description": "Icons for money, pricing, payments, currencies, banking, and financial trends.",
"icon": "piggy-bank"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Food & beverage",
"description": "Icons for food, drinks, cooking, ingredients, dining, and kitchen items.",
"icon": "coffee"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Gaming",
"description": "Icons for games, fantasy items, strategy pieces, achievements, and play-related objects.",
"icon": "gamepad-2"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Home",
"description": "Icons for household spaces, furniture, appliances, utilities, cleaning, and home safety.",
"icon": "house"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Layout",
"description": "Icons for alignment, spacing, resizing, grouping, and interface layout structure.",
"icon": "panels-top-left"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Mail",
"description": "Icons for mailboxes, inboxes, sending, replies, attachments, and email management.",
"icon": "mail"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Mathematics",
"description": "Icons for math symbols, geometry, measurement, arithmetic, and calculation.",
"icon": "divide"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Medical",
"description": "Icons for healthcare, anatomy, treatment, diagnostics, wellness, and medical facilities.",
"icon": "heart"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Multimedia",
"description": "Icons for audio, video, playback, recording, broadcasting, and media libraries.",
"icon": "circle-play"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Nature",
"description": "Icons for plants, trees, landscapes, camping, and the natural world.",
"icon": "sprout"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Navigation & Places",
"description": "Icons for maps, locations, landmarks, routes, travel directions, and wayfinding.",
"icon": "compass"
}
+2 -1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Notification",
"title": "Notifications",
"description": "Icons for alerts, status updates, reminders, approvals, and attention states.",
"icon": "triangle-alert"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "People",
"description": "Icons for people, groups, identities, roles, and person-centered actions.",
"icon": "person-standing"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Photography",
"description": "Icons for cameras, images, framing, viewing, editing, and photo workflows.",
"icon": "camera"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Science",
"description": "Icons for science, research, experiments, instruments, formulas, and discovery.",
"icon": "flask-conical"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Seasons",
"description": "Icons for seasonal weather, blooming plants, sunlight, and changing times of year.",
"icon": "leaf"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Security",
"description": "Icons for locks, keys, identity checks, surveillance, protection, and secure access.",
"icon": "shield"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Shapes",
"description": "Icons for basic geometric shapes and symbols.",
"icon": "triangle"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Shopping",
"description": "Icons for retail, carts, bags, checkout, barcodes, and purchasing.",
"icon": "shopping-bag"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Social",
"description": "Icons for social interaction, reactions, sharing, community, and relationship signals.",
"icon": "thumbs-up"
}
+2 -1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Sports",
"icon": "type"
"description": "Icons for sports, fitness, competition, equipment, and athletic achievement.",
"icon": "trophy"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Sustainability",
"description": "Icons for sustainability, clean energy, recycling, nature, and environmental stewardship.",
"icon": "recycle"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Text formatting",
"description": "Icons for letters, typography, formatting, reading, writing, and text structure.",
"icon": "type"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Time & calendar",
"description": "Icons for clocks, calendars, schedules, history, timers, and time tracking.",
"icon": "calendar"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Tools",
"description": "Icons for hand tools, equipment, maintenance, repair, and making things.",
"icon": "hammer"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Transportation",
"description": "Icons for vehicles, transit, cargo, parking, fuel, and moving people or goods.",
"icon": "train-front"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Travel",
"description": "Icons for travel, lodging, luggage, destinations, trip planning, and tourism.",
"icon": "backpack"
}
+1
View File
@@ -1,5 +1,6 @@
{
"$schema": "../category.schema.json",
"title": "Weather",
"description": "Icons for clouds, sun, rain, wind, temperature, and weather conditions.",
"icon": "cloud-sun"
}
+1 -1
View File
@@ -13,7 +13,7 @@
"title": "Lucide Icons category schema",
"type": "object",
"additionalProperties": false,
"required": ["$schema", "icon", "title"],
"required": ["$schema", "description", "icon", "title"],
"properties": {
"$schema": {
"type": "string"
+5
View File
@@ -1,4 +1,5 @@
{
"language": "en,en-GB",
"dictionaries": ["en-us", "custom-words"],
"dictionaryDefinitions": [
{
@@ -6,5 +7,9 @@
"path": "./.cspell/custom-words.txt",
"addWords": true
}
],
"ignoreRegExpList": [
"/\"contributors\"\\s*:\\s*\\[[^\\]]*\\]/g",
"/\"name\"\\s*:\\s*\"[^\"]*\"/g"
]
}
@@ -41,7 +41,6 @@ export default eventHandler((event) => {
<Diff
oldSrc={oldSrc}
newSrc={newSrc}
showGrid
height={height}
width={width}
>
@@ -48,7 +48,6 @@ export default eventHandler((event) => {
<Diff
oldSrc={oldSrc}
newSrc={newSrc}
showGrid
height={height}
width={width}
>
+6 -5
View File
@@ -18,11 +18,12 @@ export default eventHandler((event) => {
return sendError(event, error);
}
const width = getQuery(event).width || undefined;
const height = getQuery(event).height || undefined;
const color = getQuery(event).color || undefined;
const strokeWidth = getQuery(event).strokeWidth || undefined;
const background = getQuery(event).background || undefined;
const query = getQuery<Record<string, string | undefined>>(event);
const width = query.width || undefined;
const height = query.height || undefined;
const color = query.color || undefined;
const strokeWidth = query.strokeWidth || undefined;
const background = query.background || undefined;
const LucideIcon = createLucideIcon(params.iconName, iconNode);
+22 -1
View File
@@ -15,6 +15,10 @@ const defaultSandpackCSS = await readFile(
fileURLToPath(new URL('./theme/sandpack-default.css', import.meta.url)),
'utf-8',
);
const iconStyleHeadScript = await readFile(
fileURLToPath(new URL('./theme/iconStyleHead.js', import.meta.url)),
'utf-8',
);
const title = 'Lucide';
const socialTitle = 'Lucide Icons';
@@ -64,6 +68,12 @@ export default defineConfig({
new URL('./theme/components/overrides/VPCarbonAds.vue', import.meta.url),
),
},
{
find: /^.*\/VPNavBarSearch\.vue$/,
replacement: fileURLToPath(
new URL('./theme/components/overrides/VPNavBarSearch.vue', import.meta.url),
),
},
{
find: '~/.vitepress',
replacement: fileURLToPath(new URL('./', import.meta.url)),
@@ -84,7 +94,10 @@ export default defineConfig({
}) as unknown as UserConfig['vite']['plugins'][0],
],
},
head: getHeadConfig({ title, description, socialTitle }),
head: [
...getHeadConfig({ title, description, socialTitle }),
['script', {}, iconStyleHeadScript],
],
transformPageData,
themeConfig: {
logo: {
@@ -118,6 +131,14 @@ export default defineConfig({
editLink: {
pattern: 'https://github.com/lucide-icons/lucide/edit/main/docs/:path',
},
search: {
provider: 'algolia',
options: {
appId: 'R7KKMCPXOB',
apiKey: 'dd3101054267d35fb28f49c42715f1aa',
indexName: 'lucide',
},
},
carbonAds: {
code: 'CWYIC53U',
placement: 'lucidedev',
+1 -1
View File
@@ -101,7 +101,7 @@
},
{
"name": "notifications",
"title": "Notification"
"title": "Notifications"
},
{
"name": "people",
+20 -2
View File
@@ -85,8 +85,26 @@
}
]
},
"lucide-react-native": {
"@lucide/solid": {
"order": 5,
"icon": "solid",
"docsAlias": "solid",
"packageDirname": "solid",
"shields": [
{
"alt": "npm",
"src": "https://img.shields.io/npm/v/@lucide/solid",
"href": "https://www.npmjs.com/package/@lucide/solid"
},
{
"alt": "npm",
"src": "https://img.shields.io/npm/dw/@lucide/solid",
"href": "https://www.npmjs.com/package/@lucide/solid"
}
]
},
"lucide-react-native": {
"order": 6,
"icon": "react-native",
"docsAlias": "react-native",
"shields": [
@@ -103,7 +121,7 @@
]
},
"@lucide/angular": {
"order": 6,
"order": 7,
"icon": "angular",
"docsAlias": "angular",
"packageDirname": "angular",
@@ -228,5 +228,24 @@
],
"source": "https://github.com/GyeongHoKim/lucide-lit",
"documentation": "https://github.com/GyeongHoKim/lucide-lit/blob/main/README.md"
},
{
"name": "lucide-jte",
"description": "Implementation of Lucide icons for jte (Java Template Engine).",
"icon": "/framework-logos/java.svg",
"shields": [
{
"alt": "Latest Stable Version",
"src": "https://img.shields.io/github/v/release/sgruendel/lucide-jte",
"href": "https://github.com/sgruendel/lucide-jte/releases"
},
{
"alt": "Maven Central",
"src": "https://img.shields.io/maven-central/v/io.github.sgruendel/lucide-jte.svg",
"href": "https://central.sonatype.com/artifact/io.github.sgruendel/lucide-jte"
}
],
"source": "https://github.com/sgruendel/lucide-jte",
"documentation": "https://github.com/sgruendel/lucide-jte/blob/main/README.md"
}
]
+41 -6
View File
@@ -1,7 +1,19 @@
import { PageData } from 'vitepress';
/**
* Mirrors the notices in the repo's LICENSE file, which is bumped by hand — keep the
* year here in step with it.
*/
const LUCIDE_COPYRIGHT = 'Copyright (c) 2026 Lucide Icons and Contributors';
const FEATHER_COPYRIGHT = 'Copyright (c) 2013-present Cole Bemis';
const LICENSE_URL = 'https://lucide.dev/license';
export default async function getStructuredData(iconName: string, pageData: PageData) {
const url = `https://lucide.dev/icons/${iconName}`;
const params = pageData.params ?? {};
const isLab = params.externalLibrary === 'lab';
const url = `https://lucide.dev/icons/${isLab ? 'lab/' : ''}${iconName}`;
const awaitingRelease = Boolean(params.awaitingRelease);
return {
'@context': 'https://schema.org',
@@ -29,18 +41,41 @@ export default async function getStructuredData(iconName: string, pageData: Page
name: iconName,
// TODO: Add support for description extraction from icon metadata
// description: 'An ...SVG icon from the Lucide icon set.',
contentUrl: `https://lucide.dev/api/icons/${iconName}}?width=24&height=24&background=white`,
thumbnailUrl: `https://lucide.dev/api/icons/${iconName}}?width=256&height=256&background=white`,
// `/api/icons/<name>` only renders core icons, a lab name would 404 there.
...(isLab
? {}
: {
contentUrl: `https://lucide.dev/api/icons/${iconName}?width=24&height=24&background=white`,
thumbnailUrl: `https://lucide.dev/api/icons/${iconName}?width=256&height=256&background=white`,
}),
encodingFormat: 'image/svg+xml',
keywords: pageData.params?.tags,
keywords: params.tags,
width: 24,
height: 24,
creator: {
'@type': 'Organization',
name: 'Lucide Icons',
},
datePublished: pageData?.params?.createdRelease?.date,
dateModified: pageData?.params?.changedRelease?.date,
license: LICENSE_URL,
acquireLicensePage: LICENSE_URL,
// The Feather-derived icons are MIT © Cole Bemis; everything else is ISC. Lab
// icons carry no release metadata, so they fall to the ISC-only notice.
copyrightNotice: params.fromFork
? `${LUCIDE_COPYRIGHT}; ${FEATHER_COPYRIGHT}`
: LUCIDE_COPYRIGHT,
creditText: 'Lucide Icons',
// Both dates fall back to the date of the fork for unreleased icons, so neither
...(awaitingRelease
? {}
: {
...(params.createdRelease?.date ? { datePublished: params.createdRelease.date } : {}),
...(params.changedRelease?.date ? { dateModified: params.changedRelease.date } : {}),
}),
// Custom attributes, picked up by the Algolia crawler to rank and sort the icon
// index. Not schema.org vocabulary, consumers that don't know them ignore them.
popularity: params.popularity ?? 0,
awaitingRelease,
},
};
}
+1 -1
View File
@@ -1,4 +1,4 @@
import React from 'react';
import React, { type JSX } from 'react';
interface BackdropProps {
src: string;
+8 -5
View File
@@ -397,10 +397,14 @@ interface SvgPreviewProps extends React.SVGProps<SVGSVGElement> {
children?: React.ReactNode;
}
const SvgPreview = (
{ src, children, height = 24, width = 24, showGrid = false, ...props }: SvgPreviewProps,
ref,
) => {
const SvgPreview = ({
src,
children,
height = 24,
width = 24,
showGrid = false,
...props
}: SvgPreviewProps) => {
const subGridSize =
Math.max(height, width) % 3 === 0
? Math.max(height, width) > 24
@@ -413,7 +417,6 @@ const SvgPreview = (
return (
<svg
ref={ref}
xmlns="http://www.w3.org/2000/svg"
width={width}
height={height}
+1
View File
@@ -16,6 +16,7 @@ export function getAllCategoryFiles(): Omit<Category, 'iconCount'>[] {
return {
name,
title: parsedFileContent.title,
description: parsedFileContent.description,
};
});
}
@@ -73,7 +73,7 @@ function hidePopup() {
:iconNode="x"
name="x"
:size="20"
absoluteStrokeWidth
nonScalingStroke
/>
</Button>
@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useData } from 'vitepress';
import { computed } from 'vue';
const props = defineProps<{
@@ -7,8 +6,6 @@ const props = defineProps<{
id: string;
}>();
const { isDark } = useData();
const emit = defineEmits(['update:modelValue']);
function limitHexInput(val: string) {
@@ -22,7 +19,7 @@ function limitHexInput(val: string) {
const value = computed({
get: () => {
if (props.modelValue == null || props.modelValue === 'currentColor') {
return isDark.value ? '#ffffff' : '#000000';
return null;
}
return props.modelValue;
@@ -27,7 +27,7 @@ defineProps({
<style scoped>
.fake-input {
background: var(--vp-c-bg-soft);
background: var(--vp-c-bg-alt);
border-radius: 8px;
color: var(--vp-c-text-2);
padding: 11px 16px;
@@ -5,7 +5,7 @@ import Button from './Button.vue';
</script>
<template>
<Button class="reset-button">
<Button class="reset-button" aria-label="Reset style">
<Icon
:size="20"
:iconNode="rotateCw"
@@ -16,6 +16,7 @@ import Button from './Button.vue';
<style scoped>
.reset-button {
transition: ease-in-out 0.1s opacity;
background: none;
padding: 0;
}
@@ -29,6 +30,12 @@ import Button from './Button.vue';
border-color: transparent;
}
.reset-button:disabled {
cursor: default;
pointer-events: none;
opacity: 0.5;
}
/* a rotate css animation keyframes */
@keyframes rotate {
0% {
@@ -1,22 +1,33 @@
<script setup>
import { Switch } from '@headlessui/vue'
import { onMounted, ref } from 'vue'
defineProps({
modelValue: {
type: Boolean,
default: false
},
id: {
type: String,
default: ''
}
})
const emit = defineEmits(['update:modelValue'])
const isHydrated = ref(false)
onMounted(() => {
isHydrated.value = true
})
</script>
<template>
<Switch
:model-value="modelValue"
:model-value="isHydrated ? modelValue : false"
@update:model-value="emit('update:modelValue', $event)"
class="switch"
:class="{ enabled: modelValue }"
:class="{ enabled: isHydrated && modelValue }"
:id="id"
>
<span class="thumb" />
</Switch>
@@ -1,13 +1,11 @@
<script lang="ts" setup>
import { type FunctionalComponent } from 'vue';
import { type LucideProps } from '@lucide/vue/src/types';
import { Sandpack } from 'sandpack-vue3';
import { Sandpack, type SandpackProps } from 'sandpack-vue3';
defineProps<FunctionalComponent<LucideProps>>();
const props = defineProps<SandpackProps>();
</script>
<template>
<Sandpack />
<Sandpack v-bind="props" />
</template>
<style>
@@ -1,10 +1,9 @@
<script setup lang="tsx">
import VPSidebarGroup from 'vitepress/dist/client/theme-default/components/VPSidebarGroup.vue';
import sidebar, { guideSidebarTop } from '../../../sidebar';
import sidebar from '../../../sidebar';
import { useData, useRouter } from 'vitepress';
import Select from '../base/Select.vue';
import { computed, ref, watch, watchEffect } from 'vue';
import { link, route } from '~/.vitepress/data/iconNodes';
import { computed } from 'vue';
import { useLocalStorage } from '@vueuse/core';
const { page } = useData();
@@ -75,14 +74,7 @@ function onSelectFramework(item: Framework) {
</script>
<template>
<VPSidebarGroup
:items="guideSidebarTop"
v-if="page?.relativePath?.startsWith?.('guide')"
/>
<div
class="framework-select"
v-if="page?.relativePath?.startsWith?.('guide')"
>
<div class="framework-select">
<label for="framework-select">Framework</label>
<Select
id="framework-select"
@@ -93,10 +85,7 @@ function onSelectFramework(item: Framework) {
</div>
<VPSidebarGroup
:key="selected.value"
v-if="
page?.relativePath?.startsWith?.('guide') &&
!page?.relativePath?.startsWith?.(selected.value.substring(1))
"
v-if="!page?.relativePath?.startsWith?.(selected.value.substring(1))"
:items="sidebar[selected.value]"
/>
</template>
@@ -56,7 +56,6 @@ const scaleDownVariants: Variants = {
riseUp: {
x: 0.5,
y: -0.5,
animationName: 'riseUp',
scale: 1,
transition: {
delay: 0.5,
@@ -68,7 +67,6 @@ const scaleDownVariants: Variants = {
x: -10.5,
y: -10.5,
scale: 0.1,
animationName: 'small',
transition: {
delay: 1,
duration: 1,
@@ -84,7 +82,6 @@ const drawAnimation = ref('visible');
const draw: Variants = {
hidden: { pathLength: 0, opacity: 0 },
visible: {
animationName: 'visible',
pathLength: 1.02,
opacity: 1,
transition: {
@@ -93,7 +90,6 @@ const draw: Variants = {
},
},
exit: (path) => ({
animationName: 'exit',
stroke: path ? 'var(--vp-c-text-1)' : 'var(--vp-c-brand)',
pathLength: 1.02,
opacity: 1,
@@ -103,25 +99,26 @@ const draw: Variants = {
}),
};
const onAnimationComplete = (item) => {
if (item.animationName === 'visible') {
// motion-v passes the variant label that finished, not the resolved variant
const onAnimationComplete = (variant: unknown) => {
if (variant === 'visible') {
drawAnimation.value = 'exit';
return;
}
if (item.animationName === 'exit') {
if (variant === 'exit') {
showHandles.value = false;
scaleDownAnimation.value = 'small';
}
if (item.animationName === 'small') {
if (variant === 'small') {
iconGridAnimation.value = 'showIcons';
}
if (item.animationName === 'riseUp') {
if (variant === 'riseUp') {
scaleDownAnimation.value = 'small';
}
if (item.animationName === 'showIcons') {
if (variant === 'showIcons') {
shrinkIconAnimation.value = 'shrinkIcons';
}
if (item.animationName === 'shrinkIcons') {
if (variant === 'shrinkIcons') {
iconGridAnimation.value = 'initial';
setTimeout(() => {
@@ -134,14 +131,12 @@ const randomIndex = ref(Math.floor(Math.random() * 64));
const iconAnimationVariants: Variants = {
initial: {
animationName: 'end',
opacity: 0,
x: 0,
y: 0,
transition: { duration: 1, delay: 1, ease: 'easeInOut' },
},
showIcons: (index) => ({
animationName: 'showIcons',
opacity: [0, 1, 1],
x: [0.5, 0, 0],
y: [-0.5, 0, 0],
@@ -155,7 +150,6 @@ const shrinkIconAnimation = ref('initial');
const shrinkIconVariants: Variants = {
initial: { strokeWidth: 2 },
shrinkIcons: (index) => ({
animationName: 'shrinkIcons',
opacity: 1,
strokeWidth: 0,
transition: { delay: 1.8, duration: 1.5, ease: 'easeInOut' },
@@ -257,7 +251,7 @@ const shrinkIconVariants: Variants = {
</motion.g>
<motion.g
class="svg-preview-control-path-marker-group"
stroke="#fff"
:style="{ stroke: 'var(--vp-c-text-1)' }"
stroke-width="0.125"
:initial="{ opacity: 1 }"
:animate="showHandles ? { opacity: 1 } : { opacity: 0 }"
@@ -38,7 +38,7 @@ const pickIcons = [
'map-pinned',
'megaphone',
'moon',
'music',
'sixteenth-notes',
'phone',
'power-off',
'radio',
@@ -11,18 +11,6 @@ import RocketDuotoneIcon from './RocketDuotoneIcon.ts';
<Badge :href="`https://github.com/lucide-icons/lucide/releases/tag/${data.version}`">
v{{ data.version }}
</Badge>
<Badge
class="badge-special confetti-button animate"
href="/guide/version-1"
>
<Icon :iconNode="RocketDuotoneIcon" name="rocket-duotone" />
Version 1
<Icon
:iconNode="moveRight"
name="move-right"
class=""
/>
</Badge>
</div>
</template>
@@ -45,22 +33,6 @@ import RocketDuotoneIcon from './RocketDuotoneIcon.ts';
gap: 8px;
padding: 4px 8px;
}
.badge-special {
font-weight: 500;
color: var(--vp-c-brand-1);
text-underline-offset: 2px;
align-items: center;
}
.badge-special::before,
.badge-special::after {
animation-delay: 0.5s !important;
animation-duration: 5s !important;
animation-iteration-count: infinite !important;
animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1) !important;
transform: translateX(32px);
}
</style>
<style>
@@ -1,59 +1,21 @@
<script setup lang="ts">
import { ref, watch } from 'vue'
import { syncRef, useCssVar } from '@vueuse/core'
import HomeContainer from './HomeContainer.vue'
import RangeSlider from '../base/RangeSlider.vue'
import InputField from '../base/InputField.vue'
import ColorPicker from '../base/ColorPicker.vue'
import ResetButton from '../base/ResetButton.vue'
import HomeIconCustomizerIcons from './HomeIconCustomizerIcons.vue'
import Switch from '../base/Switch.vue'
import { computed } from 'vue';
import { useIconStyle } from '../../composables/useIconStyle';
import HomeContainer from './HomeContainer.vue';
import RangeSlider from '../base/RangeSlider.vue';
import InputField from '../base/InputField.vue';
import ColorPicker from '../base/ColorPicker.vue';
import ResetButton from '../base/ResetButton.vue';
import HomeIconCustomizerIcons from './HomeIconCustomizerIcons.vue';
import Switch from '../base/Switch.vue';
const { color, strokeWidth, size, nonScalingStroke, isCustomized, resetStyle } = useIconStyle();
const iconContainer = ref<HTMLElement | null>()
const color = ref('currentColor')
const strokeWidth = ref(2)
const size = ref(24)
const absoluteStrokeWidth = ref(false)
const colorCssVar = useCssVar(
'--customize-color',
iconContainer,
{
initialValue: 'default'
}
)
const strokeWidthCssVar = useCssVar(
'--customize-strokeWidth',
iconContainer,
{
initialValue: '2'
}
)
const sizeCssVar = useCssVar(
'--customize-size',
iconContainer,
{
initialValue: '24'
}
)
syncRef(color, colorCssVar)
syncRef(strokeWidth, strokeWidthCssVar, { transform: { ltr: String, rtl: Number } })
syncRef(size, sizeCssVar, { transform: { ltr: String, rtl: Number } })
function resetStyle () {
color.value = 'currentColor'
strokeWidth.value = 2
size.value = 24
absoluteStrokeWidth.value = false
}
watch(absoluteStrokeWidth, (enabled) => {
iconContainer.value?.classList.toggle('absolute-stroke-width', enabled)
})
const iconStyle = computed(() => ({
'--home-icon-color': color.value,
'--home-icon-stroke-width': String(strokeWidth.value),
'--home-icon-size': String(size.value),
}));
</script>
<template>
@@ -62,7 +24,10 @@ watch(absoluteStrokeWidth, (enabled) => {
<div class="card-column">
<h2 class="title">
Style as you please
<ResetButton @click="resetStyle"></ResetButton>
<ResetButton
:disabled="!isCustomized"
@click="resetStyle"
/>
</h2>
<p class="copy">
Lucide has a lot of customization options to match the icons with your UI.
@@ -78,7 +43,10 @@ watch(absoluteStrokeWidth, (enabled) => {
class="color-picker-field"
>
<template #display>
<ColorPicker v-model="color" id="icon-color" />
<ColorPicker
v-model="color"
id="icon-color-picker"
/>
</template>
</InputField>
@@ -90,7 +58,7 @@ watch(absoluteStrokeWidth, (enabled) => {
<span class="customize-label">{{ strokeWidth }}px</span>
</template>
<RangeSlider
id="stroke-width"
id="stroke-width-slider"
name="stroke-width"
v-model="strokeWidth"
:min="1"
@@ -107,7 +75,7 @@ watch(absoluteStrokeWidth, (enabled) => {
<span class="customize-label">{{ size }}px</span>
</template>
<RangeSlider
id="size"
id="size-slider"
name="size"
v-model="size"
:min="16"
@@ -117,22 +85,25 @@ watch(absoluteStrokeWidth, (enabled) => {
</InputField>
<InputField
id="absolute-stroke-width"
label="Absolute Stroke width"
id="non-scaling-stroke"
label="Non-scaling stroke"
>
<template #display>
<Switch
id="absolute-stroke-width"
name="absolute-stroke-width"
v-model="absoluteStrokeWidth"
id="non-scaling-stroke-switch"
name="non-scaling-stroke"
v-model="nonScalingStroke"
/>
</template>
</InputField>
</div>
</div>
<div class="icons-container card-column" ref="iconContainer">
<HomeIconCustomizerIcons />
<div class="icons-container card-column">
<HomeIconCustomizerIcons
:class="{ 'non-scaling-stroke': nonScalingStroke }"
:style="iconStyle"
/>
</div>
</div>
</HomeContainer>
@@ -179,10 +150,6 @@ watch(absoluteStrokeWidth, (enabled) => {
display: grid;
grid-template-columns: 8fr 10fr;
}
/*
.card-column {
flex: 1;
} */
}
@media (min-width: 960px) {
@@ -191,7 +158,7 @@ watch(absoluteStrokeWidth, (enabled) => {
}
}
.color-picker-field:deep(.display-value) {
width: 138px;
.color-picker-field:deep(.icon-color-picker-input) {
width: 116px;
}
</style>
@@ -1,29 +1,35 @@
<script setup lang="ts">
import { ref } from 'vue';
import { data } from './HomeHeroIconsCard.data'
import LucideIcon from '../base/LucideIcon.vue'
import { vIntersectionObserver } from '@vueuse/components'
import { data } from './HomeHeroIconsCard.data';
import LucideIcon from '../base/LucideIcon.vue';
import { vIntersectionObserver } from '@vueuse/components';
const getInitialItems = () => data.icons.slice(0, 64)
const items = ref(getInitialItems())
const showIcons = ref(false)
const getInitialItems = () => data.icons.slice(0, 64);
const items = ref(getInitialItems());
const showIcons = ref(false);
// Added intersection observer to improve performance
const onIntersectionObserver: IntersectionObserverCallback = ([{ isIntersecting }]) => {
if (isIntersecting) {
showIcons.value = true
showIcons.value = true;
}
}
};
</script>
<template>
<div class="icon-grid" v-intersection-observer="onIntersectionObserver">
<div
class="icon-grid"
v-intersection-observer="onIntersectionObserver"
>
<template v-if="showIcons">
<div
v-for="icon in items"
class="icon-grid-item"
>
<LucideIcon v-bind="icon" class="lucide-icon"/>
>
<LucideIcon
v-bind="icon"
class="lucide-icon"
/>
</div>
</template>
</div>
@@ -36,7 +42,7 @@ const onIntersectionObserver: IntersectionObserverCallback = ([{ isIntersecting
grid-template-columns: repeat(auto-fill, minmax(68px, 1fr));
grid-template-rows: repeat(auto-fill, minmax(68px, 1fr));
width: 100%;
height:100%;
height: 100%;
max-height: 360px;
gap: 1px;
overflow: hidden;
@@ -65,13 +71,15 @@ const onIntersectionObserver: IntersectionObserverCallback = ([{ isIntersecting
.lucide-icon {
will-change: width, height, stroke-width, stroke;
color: var(--customize-color, currentColor);
stroke-width: var(--customize-strokeWidth, 2);
width: calc(var(--customize-size, 24) * 1px);
height: calc(var(--customize-size, 24) * 1px);
color: var(--home-icon-color, currentColor);
stroke-width: var(--home-icon-stroke-width, 2);
width: calc(var(--home-icon-size, 24) * 1px);
height: calc(var(--home-icon-size, 24) * 1px);
max-width: 3rem;
max-height: 3rem;
}
.icons-container.absolute-stroke-width .lucide-icon {
stroke-width: calc(var(--customize-strokeWidth, 2) * 24 / var(--customize-size, 24));
.icon-grid.non-scaling-stroke .lucide-icon {
stroke-width: calc(var(--home-icon-stroke-width, 2) * 24 / var(--home-icon-size, 24));
}
</style>
@@ -48,7 +48,7 @@ onMounted(() => {
:iconNode="x"
name="x"
:size="20"
absoluteStrokeWidth
nonScalingStroke
/>
</Button>
<VPDocAsideCarbonAds :carbon-ads="theme.carbonAds" overlay />
@@ -9,7 +9,7 @@ const props = defineProps<{
name: string;
popoverPosition?: 'top' | 'bottom';
}>();
const { size, color, strokeWidth, absoluteStrokeWidth } = useIconStyleContext();
const { size, color, strokeWidth, nonScalingStroke } = useIconStyleContext();
const { animate, confetti } = useConfetti();
const componentName = computed(() => {
return (toPascalCase(props.name) as string).replace(/\s/g, '');
@@ -30,8 +30,8 @@ function copyJSX() {
attrs.push(`strokeWidth={${strokeWidth.value}}`);
}
if (absoluteStrokeWidth.value) {
attrs.push(`absoluteStrokeWidth`);
if (nonScalingStroke.value) {
attrs.push(`nonScalingStroke`);
}
const code = `<${componentName.value}${attrs.join(' ')} />`;
@@ -60,8 +60,8 @@ function copyVue() {
attrs.push(`:stroke-width="${strokeWidth.value}"`);
}
if (absoluteStrokeWidth.value) {
attrs.push(`absoluteStrokeWidth`);
if (nonScalingStroke.value) {
attrs.push(`nonScalingStroke`);
}
const code = `<${componentName.value}${attrs.join(' ')} />`;
@@ -86,8 +86,8 @@ function copyAngular() {
attrs.push(`[strokeWidth]="${strokeWidth.value}"`);
}
if (absoluteStrokeWidth.value) {
attrs.push(`[absoluteStrokeWidth]="true"`);
if (nonScalingStroke.value) {
attrs.push(`[nonScalingStroke]="true"`);
}
const code = `<lucide-icon${attrs.join(' ')}></lucide-icon>`;
@@ -204,7 +204,7 @@ const DiamondIcon = createLucideIcon('Diamond', diamond);
max-height: 3rem;
}
html.absolute-stroke-width .lucide-icon.customizable {
html.non-scaling-stroke .lucide-icon.customizable {
stroke-width: calc(var(--customize-strokeWidth, 2) * 24 / var(--customize-size, 24));
}
</style>

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