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 ec3c3906f7 feat(scripts): added icon usage script 2026-08-31 17:54:23 +02:00
187 changed files with 7184 additions and 1773 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"
]
@@ -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
+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
+56 -3
View File
@@ -7,7 +7,8 @@ permissions:
contents: read
jobs:
lint-code:
eslint:
name: ESLint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -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
+22
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:
@@ -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
+1
View File
@@ -22,6 +22,7 @@ integrations/**/__screenshots__
integrations/**/.output
integrations/**/.nitro
integrations/**/.nuxt
integrations/**/.svelte-kit
outlined
lucide-font
packages/**/src/icons/*.js
+2
View File
@@ -1,4 +1,5 @@
pnpm-lock.yaml
.github/conventional-commit-types.json
# docs examples
docs/**/examples/
@@ -29,6 +30,7 @@ integrations/**/__screenshots__
integrations/**/.output
integrations/**/.nitro
integrations/**/.nuxt
integrations/**/.svelte-kit
# lucide-svelte
packages/svelte/src/icons/*.svelte
+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"
]
}
+14
View File
@@ -68,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)),
@@ -125,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",
@@ -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,
},
};
}
@@ -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;
@@ -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>
@@ -10,7 +10,7 @@ import {
sun,
moon,
camera,
music,
sixteenthNotes,
video,
globe,
layers,
@@ -44,7 +44,7 @@ import createElement from 'lucide/src/createElement';
import { IconNode } from 'lucide/src/types';
const icons: Component[] = [
heart, star, zap, code, feather, cloud, sun, moon, camera, music,
heart, star, zap, code, feather, cloud, sun, moon, camera, sixteenthNotes,
video, globe, layers, packageIcon, compass, command, terminal, database,
server, cpu, lock, key, shield, wifi, download, upload, search,
settings, users, mail, bell, calendar, clock, gitBranch, funnel,
@@ -0,0 +1,206 @@
<script lang="ts">
import { ref } from 'vue'
// This component can be rendered more than once on a page (e.g. a hidden
// copy inside `.content-body`). DocSearch mounts into the first `#docsearch`
// in the document, so only a single instance may ever render the search box.
const loaded = ref(false)
</script>
<script lang="ts" setup>
import '@docsearch/css/dist/style.css'
import {
computed,
defineAsyncComponent,
onMounted,
onUnmounted,
} from 'vue'
import type { DefaultTheme } from 'vitepress/theme'
import { useData } from 'vitepress'
import FakeInput from '../base/FakeInput.vue'
const VPAlgoliaSearchBox = defineAsyncComponent(() => import('vitepress/dist/client/theme-default/components/VPAlgoliaSearchBox.vue'));
const { theme } = useData<DefaultTheme.Config>()
const algolia = computed(
() =>
(theme.value.search?.options ?? theme.value.algolia) as DefaultTheme.AlgoliaSearchOptions,
)
// whether this instance is the one rendering the (hidden) search box
const isOwner = ref(false)
const shortcutText = ref('')
// to avoid loading the docsearch js upfront (which is more than 1/3 of the
// payload), we delay initializing it until the user has actually clicked or
// hit the hotkey to invoke it.
const preconnect = () => {
const id = 'VPAlgoliaPreconnect'
if (document.getElementById(id)) return
const rIC = window.requestIdleCallback || setTimeout
rIC(() => {
const preconnect = document.createElement('link')
preconnect.id = id
preconnect.rel = 'preconnect'
preconnect.href = `https://${algolia.value.appId}-dsn.algolia.net`
preconnect.crossOrigin = ''
document.head.appendChild(preconnect)
})
}
onMounted(() => {
preconnect()
shortcutText.value = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform) ? '⌘K' : 'Ctrl+K'
// once docsearch is initialized it handles the hotkey itself
const handleSearchHotKey = (event: KeyboardEvent) => {
if (loaded.value) return remove()
if (
(event.key.toLowerCase() === 'k' && (event.metaKey || event.ctrlKey)) ||
(!isEditingContent(event) && event.key === '/')
) {
event.preventDefault()
open()
remove()
}
}
const remove = () => {
window.removeEventListener('keydown', handleSearchHotKey)
}
window.addEventListener('keydown', handleSearchHotKey)
onUnmounted(remove)
})
function open() {
if (!loaded.value) {
loaded.value = true
isOwner.value = true
}
setTimeout(poll, 16)
}
function poll() {
// programmatically open the search box after initialize
const e = new Event('keydown') as any
e.key = 'k'
e.metaKey = true
window.dispatchEvent(e)
setTimeout(() => {
if (!document.querySelector('.DocSearch-Modal')) {
poll()
}
}, 16)
}
function isEditingContent(event: KeyboardEvent): boolean {
const element = event.target as HTMLElement
const tagName = element.tagName
return (
element.isContentEditable ||
tagName === 'INPUT' ||
tagName === 'SELECT' ||
tagName === 'TEXTAREA'
)
}
</script>
<template>
<div class="VPNavBarSearch">
<FakeInput
class="nav-search-input"
:shortcut="shortcutText"
aria-label="Search"
@click="open"
>
Search
</FakeInput>
<!-- docsearch renders its own button here; we only need its modal -->
<div v-if="isOwner" class="docsearch-host">
<VPAlgoliaSearchBox :algolia="algolia" />
</div>
</div>
</template>
<style>
@media (min-width: 768px) {
.VPNavBarSearch {
flex-grow: 1;
padding-left: 0px;
}
}
@media (min-width: 960px) {
.VPNavBarSearch {
padding-left: 0px;
}
}
.VPNavBarSearch {
padding-top: 24px;
}
.VPNavBarSearch .nav-search-input {
padding: 8px 12px;
align-items: center;
width: 100%;
}
.VPNavBarSearch .docsearch-host {
display: none;
}
[class*='DocSearch'] {
--docsearch-primary-color: var(--vp-c-brand-1);
--docsearch-highlight-color: var(--docsearch-primary-color);
--docsearch-text-color: var(--vp-c-text-1);
--docsearch-muted-color: var(--vp-c-text-2);
--docsearch-searchbox-shadow: none;
--docsearch-searchbox-background: transparent;
--docsearch-searchbox-focus-background: transparent;
--docsearch-key-gradient: transparent;
--docsearch-key-shadow: none;
--docsearch-modal-background: var(--vp-c-bg-soft);
--docsearch-footer-background: var(--vp-c-bg);
}
.dark [class*='DocSearch'] {
--docsearch-modal-shadow: none;
--docsearch-footer-shadow: none;
--docsearch-logo-color: var(--vp-c-text-2);
--docsearch-hit-background: var(--vp-c-gray-3);;
--docsearch-container-background: rgba(0, 0, 0, 0.4);
--docsearch-hit-color: var(--vp-c-text-2);
--docsearch-hit-shadow: none;
}
.dark .DocSearch-Footer {
border-top: 1px solid var(--vp-c-divider);
}
.DocSearch-Form {
border: 1px solid var(--vp-c-brand-1);
background-color: var(--vp-c-white);
}
.dark .DocSearch-Form {
background-color: var(--vp-c-default-soft);
}
.DocSearch-Screen-Icon > svg {
margin: auto;
}
</style>
+2 -2
View File
@@ -10,14 +10,14 @@ import HomeHeroInfoBefore from './components/home/HomeHeroInfoBefore.vue';
import { ICON_STYLE_CONTEXT, iconStyleContext } from './composables/useIconStyle';
import { CATEGORY_VIEW_CONTEXT, categoryViewContext } from './composables/useCategoryView';
import { EXTERNAL_LIBS_CONTEXT, externalLibContext } from './composables/useExternalLibs';
import FrameworkSelect from './components/guide/FrameworkSelect.vue';
import SideBarNavBefore from './layouts/SideBarNavBefore.vue';
import SnackPlayer from './components/editors/SnackPlayer.vue';
const theme: Partial<Theme> = {
extends: DefaultTheme,
Layout() {
return h(DefaultTheme.Layout, null, {
'sidebar-nav-before': () => h(FrameworkSelect),
'sidebar-nav-before': () => h(SideBarNavBefore),
'home-hero-info-before': () => h(HomeHeroInfoBefore),
'sidebar-nav-after': () => h(IconsSidebarNavAfter),
'home-hero-image': () => h(HomeHeroIconsCard),
@@ -0,0 +1,20 @@
<script setup lang="ts">
import { computed } from 'vue';
import { useData } from 'vitepress';
import VPSidebarGroup from 'vitepress/dist/client/theme-default/components/VPSidebarGroup.vue';
import VPNavBarSearch from '../components/overrides/VPNavBarSearch.vue';
import FrameworkSelect from '../components/guide/FrameworkSelect.vue';
import { guideSidebarTop } from '../../sidebar';
const { page } = useData();
const isGuide = computed(() => page.value?.relativePath?.startsWith?.('guide'));
</script>
<template>
<template v-if="isGuide">
<VPNavBarSearch />
<VPSidebarGroup :items="guideSidebarTop" />
<FrameworkSelect />
</template>
</template>
+4
View File
@@ -129,6 +129,10 @@ html {
flex-direction: column-reverse;
}
.content-body .search {
display: none;
}
@media (min-width: 960px) {
.VPHomeHero .container .image {
order: 1;
+24 -24
View File
@@ -4,11 +4,8 @@ import { createGeneralOGImage, createIconOGImage } from './createOGImage';
export async function transformPageData(pageData: PageData) {
pageData.frontmatter.head ??= [];
if (
pageData.relativePath.startsWith('icons/') &&
!pageData.relativePath.startsWith('icons/lab/') &&
pageData.params?.name
) {
if (pageData.relativePath.startsWith('icons/') && pageData.params?.name) {
const isLab = pageData.relativePath.startsWith('icons/lab/');
const iconName = pageData.params.name;
pageData.title = `${iconName} icon details`;
@@ -24,26 +21,29 @@ export async function transformPageData(pageData: PageData) {
const structuredData = await getStructuredData(iconName, pageData);
const ogPath = await createIconOGImage(iconName, pageData.params?.tags || []);
// `createIconOGImage` reads the SVG from `icons/`, where lab icons don't live.
if (!isLab) {
const ogPath = await createIconOGImage(iconName, pageData.params?.tags || []);
if (ogPath) {
const content = `https://lucide.dev${ogPath}`;
pageData.frontmatter.head.push(
[
'meta',
{
property: 'og:image',
content,
},
],
[
'meta',
{
property: 'twitter:image',
content,
},
],
);
if (ogPath) {
const content = `https://lucide.dev${ogPath}`;
pageData.frontmatter.head.push(
[
'meta',
{
property: 'og:image',
content,
},
],
[
'meta',
{
property: 'twitter:image',
content,
},
],
);
}
}
pageData.frontmatter.head.push([
+1 -1
View File
@@ -15,7 +15,7 @@ In an effort to expand the icon set while remaining true to the original minimal
### Why should I choose Lucide over Feather Icons?
- Lucide has expanded its icon set by 500+ in the last few years. Lucide now has over 1000 icons, while Feather has around 287 icons.
- Lucide has expanded its icon set by 1600+ in the last few years. Lucide now has over 1800 icons, while Feather has around 287 icons.
- Well maintained code base.
- Active community.
+8 -1
View File
@@ -3,11 +3,18 @@ import iconNodes from '../.vitepress/data/iconNodes';
import * as iconDetails from '../.vitepress/data/iconDetails';
import { IconEntity } from '../.vitepress/theme/types';
/**
* The generated `iconDetails` modules import `iconPopularity/<name>.json` as-is,
* so popularity arrives as the raw `{ count }` object instead of a number.
*/
type IconDetail = Omit<IconEntity, 'popularity'> & { popularity?: { count: number } };
export default {
paths: async () => {
return (Object.values(iconDetails) as unknown as IconEntity[]).map((iconEntity) => {
return (Object.values(iconDetails) as unknown as IconDetail[]).map((iconEntity) => {
const params = {
...iconEntity,
popularity: iconEntity.popularity?.count ?? 0,
relatedIcons: relatedIcons[iconEntity.name].map((name: string) => ({
name,
iconNode: iconNodes[name],
+6 -4
View File
@@ -30,6 +30,7 @@
"author": "Eric Fennis",
"license": "ISC",
"devDependencies": {
"@docsearch/js": "3.8.2",
"@lucide/build-icons": "workspace:*",
"@lucide/helpers": "workspace:*",
"@lucide/shared": "workspace:*",
@@ -43,7 +44,7 @@
"nitropack": "^2.13.4",
"rollup-plugin-copy": "^3.5.0",
"semver": "^7.8.5",
"sharp": "^0.35.4",
"sharp": "^0.35.5",
"shiki": "^4.4.3",
"simple-git": "^4.0.1",
"sitemap": "^9.0.1",
@@ -57,6 +58,7 @@
"vue-tsc": "^3.3.11"
},
"dependencies": {
"@docsearch/css": "3.8.2",
"@floating-ui/vue": "^2.0.1",
"@headlessui/vue": "^1.7.23",
"@lucide/vue": "workspace:*",
@@ -70,9 +72,9 @@
"lucide": "workspace:*",
"lucide-react": "workspace:*",
"motion-v": "2.4.0",
"react": "19.3.0",
"react-dom": "19.3.0",
"react": "19.3.1",
"react-dom": "19.3.1",
"sandpack-vue3": "3.1.12",
"vue": "^3.5.43"
"vue": "^3.5.44"
}
}
+4
View File
@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 32 32">
<path d="M11.622 24.74s-1.23.748.855.962c2.51.32 3.847.267 6.625-.267a10.02 10.02 0 0 0 1.763.855c-6.25 2.672-14.16-.16-9.244-1.55zm-.8-3.473s-1.336 1.015.748 1.23c2.725.267 4.862.32 8.55-.427a3.26 3.26 0 0 0 1.282.801c-7.534 2.244-15.976.214-10.58-1.603zm14.747 6.09s.908.748-1.015 1.336c-3.58 1.07-15.014 1.39-18.22 0-1.122-.48 1.015-1.175 1.7-1.282.695-.16 1.07-.16 1.07-.16-1.23-.855-8.175 1.763-3.526 2.51 12.77 2.084 23.296-.908 19.983-2.404zM12.2 17.633s-5.824 1.39-2.084 1.87c1.603.214 4.755.16 7.694-.053 2.404-.214 4.81-.64 4.81-.64s-.855.374-1.443.748c-5.93 1.55-17.312.855-14.052-.748 2.778-1.336 5.076-1.175 5.076-1.175zm10.42 5.824c5.984-3.1 3.206-6.09 1.282-5.717-.48.107-.695.214-.695.214s.16-.32.534-.427c3.794-1.336 6.786 4.007-1.23 6.09 0 0 .053-.053.107-.16zm-9.83 8.442c5.77.374 14.587-.214 14.8-2.94 0 0-.427 1.07-4.755 1.87-4.916.908-11.007.8-14.587.214 0 0 .748.64 4.542.855z" fill="#4e7896"/>
<path d="M18.996.001s3.313 3.366-3.152 8.442c-5.183 4.114-1.175 6.465 0 9.137-3.046-2.725-5.236-5.13-3.74-7.373C14.294 6.893 20.332 5.3 18.996.001zm-1.7 15.335c1.55 1.763-.427 3.366-.427 3.366s3.954-2.03 2.137-4.542c-1.656-2.404-2.94-3.58 4.007-7.587 0 0-10.953 2.725-5.717 8.763z" fill="#f58219"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

+23
View File
@@ -8,6 +8,8 @@ import htmlEslint from '@html-eslint/eslint-plugin';
import htmlParser from '@html-eslint/parser';
import defaultAttrs from './tools/build-icons/render/default-attrs.json' with { type: 'json' };
import tseslint from 'typescript-eslint';
import jsonSchema from './scripts/eslint/jsonSchemaPlugin.mjs';
import * as jsoncParser from 'jsonc-eslint-parser';
const gitignorePath = path.join(import.meta.dirname, '.gitignore');
@@ -152,4 +154,25 @@ export default defineConfig([
'@html-eslint/quotes': 'error',
},
},
{
files: ['icons/*.json', 'categories/*.json'],
languageOptions: {
parser: jsoncParser,
},
plugins: {
'json-schema': jsonSchema,
},
},
{
files: ['icons/*.json'],
rules: {
'json-schema/no-invalid': ['error', { schema: 'icon.schema.json' }],
},
},
{
files: ['categories/*.json'],
rules: {
'json-schema/no-invalid': ['error', { schema: 'category.schema.json' }],
},
},
]);
-1
View File
@@ -8,7 +8,6 @@
"use-cases": [],
"tags": [
"symbol",
"sterisk",
"mark",
"pointer",
"pencil",
+50
View File
@@ -0,0 +1,50 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley",
"devkamani9313",
"karsa-mistmere"
],
"use-cases": [
"Representing fruit, guacamole, or healthy food in nutrition apps",
"Indicating salad, breakfast, or brunch ingredients",
"Showing vegetarian or vegan food options",
"Marking avocado toast as a menu item in restaurant or delivery apps",
"Denoting fresh produce or fruit section in grocery and supermarket apps",
"Signifying healthy fats or superfood in nutrition and wellness trackers",
"Labeling plant-based or vegetarian recipes in cooking websites and apps"
],
"tags": [
"fruit",
"snack",
"meal",
"lunch",
"ingredient",
"cooking",
"cookery",
"kitchen",
"cuisine",
"eating",
"healthy",
"nutrition",
"diet",
"guacamole",
"mexican",
"green",
"pit",
"seed",
"half",
"produce",
"vegetarian",
"vegan",
"grocery",
"supermarket",
"toast",
"superfood",
"plant based",
"ripe"
],
"categories": [
"food-beverage"
]
}
+14
View File
@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M13.465 3.464a5 5 0 017.07 0 5 5 0 010 7.072c-1.204 1.203-2.38 2.89-2.614 4.577A8 8 0 118.886 6.08c1.687-.235 3.375-1.41 4.579-2.615" />
<circle cx="10" cy="14" r="3" />
</svg>

After

Width:  |  Height:  |  Size: 391 B

+51
View File
@@ -0,0 +1,51 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley",
"devkamani9313",
"karsa-mistmere"
],
"use-cases": [
"Representing breakfast items, rashers, or pork products",
"Indicating diner, brunch, or fast food menu items",
"Showing savory cooked meats or barbecue items",
"Labeling grocery or deli items in food apps",
"Marking breakfast sandwich or brunch special add-ons",
"Tagging cured or smoked meat ingredients in recipes"
],
"tags": [
"rashers",
"smoked",
"streaky",
"crispy",
"meat",
"fast food",
"junk food",
"snack",
"dish",
"restaurant",
"brunch",
"lunch",
"meal",
"savory",
"savoury",
"cookery",
"cooking",
"grilled",
"barbecue",
"barbeque",
"bbq",
"pig",
"pork",
"breakfast",
"cured",
"butcher",
"sandwich",
"protein",
"grocery",
"kitchen"
],
"categories": [
"food-beverage"
]
}
+14
View File
@@ -0,0 +1,14 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M2.795 16.804c-.789-.79-1.09-2.018-.442-2.928 1.933-2.713 4.414-1.05 6.145-5.378 1.868-4.67 4.608-2.366 6.592-6.107.218-.412.78-.53 1.11-.2l5.005 5.005c.789.79 1.09 2.018.442 2.928-1.933 2.713-4.414 1.05-6.145 5.378-1.868 4.67-4.608 2.366-6.591 6.107-.22.412-.78.53-1.11.2z" />
<path d="M4.5 18.5c2-5 5-2 7-7s5-2 7-7" />
</svg>

After

Width:  |  Height:  |  Size: 542 B

+1 -1
View File
@@ -16,7 +16,7 @@
"payment",
"bdt",
"৳",
"currencysymbol",
"currency symbol",
"cash",
"banknote",
"price",
+5 -5
View File
@@ -9,9 +9,9 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10 3a41 41 0 000 18" />
<path d="M14 3a41 41 0 010 18" />
<path d="M16.997 21a2 2 0 001.68-.92 15.25 15.25 0 000-16.16 2 2 0 00-1.68-.92h-10a2 2 0 00-1.681.92 15.25 15.25 0 000 16.16 2 2 0 001.681.92z" />
<path d="M3.54 16h16.914" />
<path d="M3.54 8h16.914" />
<path d="M10.5 2a34.5 34.5 0 000 20" />
<path d="M13.5 2a34.5 34.5 0 010 20" />
<path d="M4.67 17h14.67" />
<path d="M4.67 7h14.67" />
<path d="M6.23 3.06a19 19 0 000 17.88A2 2 0 008 22h8a2 2 0 001.77-1.06 19 19 0 000-17.88A2 2 0 0016 2H8a2 2 0 00-1.77 1.06" />
</svg>

Before

Width:  |  Height:  |  Size: 490 B

After

Width:  |  Height:  |  Size: 480 B

+31
View File
@@ -0,0 +1,31 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"js-best"
],
"use-cases": [
"Displaying prices and amounts in BYN in e-commerce apps",
"Selecting BYN in multi-currency pickers",
"Labeling account balances and transactions in BYN",
"Showing BYN exchange rates in currency converters"
],
"tags": [
"currency",
"money",
"payment",
"byn",
"iso4217",
"fiat",
"prices",
"localization",
"banking",
"checkout",
"wallet",
"exchange-rate"
],
"categories": [
"finance",
"shopping",
"account"
]
}
@@ -9,7 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M9 18V5l12-2v13" />
<circle cx="6" cy="18" r="3" />
<circle cx="18" cy="16" r="3" />
<path d="M3 16 L13 16" />
<path d="M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7" />
</svg>

Before

Width:  |  Height:  |  Size: 308 B

After

Width:  |  Height:  |  Size: 307 B

+10 -11
View File
@@ -9,17 +9,16 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z" />
<path d="M9 13a4.5 4.5 0 0 0 3-4" />
<path d="M6.003 5.125A3 3 0 0 0 6.401 6.5" />
<path d="M3.477 10.896a4 4 0 0 1 .585-.396" />
<path d="M6 18a4 4 0 0 1-1.967-.516" />
<path d="M12 13h4" />
<path d="M12 18h6a2 2 0 0 1 2 2v1" />
<path d="M12 18h6a2 2 0 012 2v1" />
<path d="M12 8h8" />
<path d="M16 8V5a2 2 0 0 1 2-2" />
<circle cx="16" cy="13" r=".5" />
<circle cx="18" cy="3" r=".5" />
<circle cx="20" cy="21" r=".5" />
<circle cx="20" cy="8" r=".5" />
<path d="M12 9a4.17 4.17 0 01-3 4" />
<path d="M16 8V5a2 2 0 012-2" />
<path d="M6 18a4 4 0 01-2-7.465" />
<path d="M6.004 5.125a4 4 0 00-2.526 5.77" />
<path d="M6.294 6.294A3 3 0 1112 5v13a4 4 0 11-7.967-.518" />
<circle cx="16" cy="13" r="0.5" fill="currentColor" />
<circle cx="18" cy="3" r="0.5" fill="currentColor" />
<circle cx="20" cy="21" r="0.5" fill="currentColor" />
<circle cx="20" cy="8" r="0.5" fill="currentColor" />
</svg>

Before

Width:  |  Height:  |  Size: 752 B

After

Width:  |  Height:  |  Size: 744 B

+7 -7
View File
@@ -12,15 +12,15 @@
<path d="m10.852 14.772-.383.923" />
<path d="m10.852 9.228-.383-.923" />
<path d="m13.148 14.772.382.924" />
<path d="m13.531 8.305-.383.923" />
<path d="m13.53 8.305-.382.923" />
<path d="m14.772 10.852.923-.383" />
<path d="m14.772 13.148.923.383" />
<path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 0 0-5.63-1.446 3 3 0 0 0-.368 1.571 4 4 0 0 0-2.525 5.771" />
<path d="M17.998 5.125a4 4 0 0 1 2.525 5.771" />
<path d="M19.505 10.294a4 4 0 0 1-1.5 7.706" />
<path d="M4.032 17.483A4 4 0 0 0 11.464 20c.18-.311.892-.311 1.072 0a4 4 0 0 0 7.432-2.516" />
<path d="M4.5 10.291A4 4 0 0 0 6 18" />
<path d="M6.002 5.125a3 3 0 0 0 .4 1.375" />
<path d="M17.997 5.125a4 4 0 012.526 5.77" />
<path d="M18 18a4 4 0 002-7.464" />
<path d="M4.033 17.483A4 4 0 0011.46 20c.184-.31.896-.31 1.076 0a4 4 0 007.43-2.517" />
<path d="M6 18a4 4 0 01-2-7.464" />
<path d="M6.002 5.125a4 4 0 00-2.525 5.77" />
<path d="M6.293 6.294a3 3 0 01-.287-1.098l-.004-.07a3 3 0 015.968-.543c.05.02.057.01.059 0a3 3 0 015.968.542l-.004.071a3 3 0 01-.287 1.098" />
<path d="m9.228 10.852-.923-.383" />
<path d="m9.228 13.148-.923.383" />
<circle cx="12" cy="12" r="3" />

Before

Width:  |  Height:  |  Size: 944 B

After

Width:  |  Height:  |  Size: 957 B

+33
View File
@@ -0,0 +1,33 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"karsa-mistmere",
"jguddas",
"it-is-not",
"jamiemlaw",
"ej52"
],
"use-cases": [
"Indicating disabled reasoning in an AI chat interface"
],
"tags": [
"medical",
"mind",
"mental",
"intellect",
"cerebral",
"consciousness",
"genius",
"artificial intelligence",
"ai",
"think",
"deep learning",
"machine learning",
"computing"
],
"categories": [
"medical",
"science",
"development"
]
}
+22
View File
@@ -0,0 +1,22 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 18v-6" />
<path d="M12 5v1.344" />
<path d="M17.707 6.293A3 3 0 1012 5a3 3 0 00-4.124-2.781" />
<path d="M17.997 5.125a4 4 0 012.526 5.77" />
<path d="M19.644 19.644A4 4 0 0112 18a4 4 0 11-7.967-.517" />
<path d="m2 2 20 20" />
<path d="M20 10.536a4 4 0 011.533 5.34" />
<path d="M3.477 10.895a4 4 0 011.876-5.542" />
<path d="M6 18a4 4 0 01-2-7.464" />
<path d="M9 13a4.17 4.17 0 002.166-1.5 4 4 0 00.138-.196" />
</svg>

After

Width:  |  Height:  |  Size: 656 B

+7 -7
View File
@@ -10,11 +10,11 @@
stroke-linejoin="round"
>
<path d="M12 18V5" />
<path d="M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4" />
<path d="M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5" />
<path d="M17.997 5.125a4 4 0 0 1 2.526 5.77" />
<path d="M18 18a4 4 0 0 0 2-7.464" />
<path d="M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517" />
<path d="M6 18a4 4 0 0 1-2-7.464" />
<path d="M6.003 5.125a4 4 0 0 0-2.526 5.77" />
<path d="M15 13a4.17 4.17 0 01-3-4 4.17 4.17 0 01-3 4" />
<path d="M17.707 6.294A3 3 0 1012 5a3 3 0 10-5.707 1.294" />
<path d="M17.996 5.125a4 4 0 012.526 5.77" />
<path d="M18 18a4 4 0 002-7.465" />
<path d="M19.967 17.482a4 4 0 11-7.967.517 4 4 0 11-7.967-.517" />
<path d="M6 18a4 4 0 01-2-7.465" />
<path d="M6.004 5.125a4 4 0 00-2.526 5.77" />
</svg>

Before

Width:  |  Height:  |  Size: 601 B

After

Width:  |  Height:  |  Size: 596 B

+1 -1
View File
@@ -30,7 +30,7 @@
"startup",
"registration",
"onboarding",
"realestate",
"real estate",
"property"
],
"categories": [
+34
View File
@@ -0,0 +1,34 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"karsa-mistmere",
"ericfennis",
"jguddas",
"colebemis",
"AlexandrePhilibert"
],
"use-cases": [
"Indicating past events in calendars",
"Rewinding through calendar views"
],
"tags": [
"navigation",
"arrow",
"direction",
"symbol",
"pointer",
"indicator",
"next",
"menu",
"date",
"day",
"month",
"year",
"events"
],
"categories": [
"time",
"arrows",
"navigation"
]
}
+18
View File
@@ -0,0 +1,18 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m11 21-3-3 3-3" />
<path d="M16 2v3" />
<path d="M21 9H3" />
<path d="M3 11.5V5a2 2 0 012-2h14a2 2 0 012 2v14a2 2 0 01-2 2h-4" />
<path d="m5 21-3-3 3-3" />
<path d="M8 2v3" />
</svg>

After

Width:  |  Height:  |  Size: 406 B

+2 -5
View File
@@ -14,20 +14,17 @@
"tags": [
"navigation",
"arrow",
"right",
"chevron",
"direction",
"symbol",
"pointer",
"indicator",
"next",
"previous",
"menu",
"date",
"day",
"month",
"year",
"events",
"chevrons"
"events"
],
"categories": [
"time",
+1 -1
View File
@@ -11,7 +11,7 @@
"tags": [
"battery",
"automobile",
"powercell",
"power cell",
"electric",
"power",
"electricity",
+44
View File
@@ -0,0 +1,44 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"rrod497"
],
"use-cases": [
"Representing SSL/TLS security certificates",
"Representing educational or professional certifications"
],
"tags": [
"award",
"ribbon",
"medal",
"achievement",
"pinned",
"badge",
"recognition",
"laurel",
"commendation",
"diploma",
"official",
"proof",
"fact",
"verified",
"license",
"warrant",
"authorization",
"legal",
"ownership",
"credential",
"ssl",
"tls",
"security",
"trust",
"cybersecurity",
"authority",
"graduation",
"study"
],
"categories": [
"connectivity",
"security"
]
}
+17
View File
@@ -0,0 +1,17 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 10H6" />
<path d="m20.69 15.479 1.29 4.88a.5.5 0 01-.698.591l-1.843-.849a1 1 0 00-.879.001l-1.846.85a.5.5 0 01-.692-.593l1.29-4.88" />
<path d="M22 6.675V6a2 2 0 00-2-2H4a2 2 0 00-2 2v12a2 2 0 002 2h8" />
<path d="M6 14h4" />
<circle cx="19" cy="13" r="3" />
</svg>

After

Width:  |  Height:  |  Size: 490 B

+5 -5
View File
@@ -9,11 +9,11 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M4 20a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v1a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1z" />
<path d="m12.474 5.943 1.567 5.34a1 1 0 0 0 1.75.328l2.616-3.402" />
<path d="m20 9-3 9" />
<path d="m5.594 8.209 2.615 3.403a1 1 0 0 0 1.75-.329l1.567-5.34" />
<path d="M7 18 4 9" />
<path d="m10.68 5.499-.996 4.982a.65.65 0 01-1.131.295L5.885 7.663" />
<path d="m13.32 5.5.995 4.98a.65.65 0 001.131.296l2.668-3.113" />
<path d="M20.428 8.952 17.5 18" />
<path d="M4 20a2 2 0 012-2h12a2 2 0 012 2v1a1 1 0 01-1 1H5a1 1 0 01-1-1z" />
<path d="M6.5 18 3.571 8.952" />
<circle cx="12" cy="4" r="2" />
<circle cx="20" cy="7" r="2" />
<circle cx="4" cy="7" r="2" />

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 601 B

+35
View File
@@ -0,0 +1,35 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"tatianatsiguleva",
"jordan808",
"jguddas",
"colebemis",
"karsa-mistmere"
],
"use-cases": [
"Indicating short-form video clips in media browsing interfaces",
"Representing preview or teaser playback for video thumbnails",
"Providing an entry point for stories, reels, or shorts in social apps",
"Marking auto-generated clips from live streams or long recordings"
],
"tags": [
"short clips",
"shorts",
"reels",
"stories",
"video",
"highlights",
"social media",
"content",
"preview",
"teaser",
"clip",
"short form",
"vertical video"
],
"categories": [
"multimedia",
"social"
]
}
+18
View File
@@ -0,0 +1,18 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 2a10 10 0 0 1 7.38 16.75" />
<path d="M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z" />
<path d="M2.5 8.875a10 10 0 0 0-.5 3" />
<path d="M2.83 16a10 10 0 0 0 2.43 3.4" />
<path d="M4.636 5.235a10 10 0 0 1 .891-.857" />
<path d="M8.644 21.42a10 10 0 0 0 7.631-.38" />
</svg>

After

Width:  |  Height:  |  Size: 548 B

+1
View File
@@ -8,6 +8,7 @@
"tags": [
"cancel",
"close",
"cross",
"delete",
"remove",
"times",
+1 -1
View File
@@ -13,7 +13,7 @@
"bytes",
"servers",
"backup",
"timemachine",
"time machine",
"rotate",
"synchronize",
"synchronise",
+46
View File
@@ -0,0 +1,46 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"colebemis",
"karsa-mistmere",
"ericfennis",
"jguddas",
"signalgridco"
],
"use-cases": [
"Indicating AI-powered features in applications and dashboards",
"Representing AI assistants, chatbots, and conversational UIs",
"Identifying machine learning models, training, or inference jobs",
"Labeling generative AI content, tools, or outputs",
"Signifying integrations with AI services, APIs, or platforms"
],
"tags": [
"ai",
"artificial intelligence",
"machine learning",
"neural network",
"automation",
"intelligence",
"generative",
"assistant",
"chatbot",
"llm",
"deep learning",
"inference",
"training",
"mlops",
"model",
"predictive",
"on-device",
"edge",
"api",
"service",
"cognitive",
"processor",
"chip"
],
"categories": [
"devices",
"development"
]
}
+28
View File
@@ -0,0 +1,28 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12 20v2" />
<path d="M12 2v2" />
<path d="M16 9v6" />
<path d="M17 20v2" />
<path d="M17 2v2" />
<path d="M2 12h2" />
<path d="M2 17h2" />
<path d="M2 7h2" />
<path d="M20 12h2" />
<path d="M20 17h2" />
<path d="M20 7h2" />
<path d="M7 20v2" />
<path d="M7 2v2" />
<path d="M8 13h4" />
<path d="M8 15v-4a2 2 0 014 0v4" />
<rect x="4" y="4" width="16" height="16" rx="2" />
</svg>

After

Width:  |  Height:  |  Size: 623 B

+1 -1
View File
@@ -13,7 +13,7 @@
"bytes",
"servers",
"backup",
"timemachine",
"time machine",
"rotate",
"arrow",
"left"
+31
View File
@@ -0,0 +1,31 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"it-is-not",
"danielbayley",
"karsa-mistmere",
"jamiemlaw"
],
"use-cases": [
"Representing music or an audio track",
"Representing a single eighth note in music notation"
],
"tags": [
"audio",
"music",
"sound",
"note",
"quaver"
],
"categories": [
"multimedia",
"files"
],
"aliases": [
{
"name": "music-2",
"deprecationReason": "alias.name",
"deprecated": true
}
]
}
+2 -2
View File
@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M22 8c-2 5-5 2-7 7s-5 2-7 7l-6-6c2-5 5-2 7-7s5-2 7-7Z" />
<path d="M5 19c2-5 5-2 7-7s5-2 7-7" />
<path d="m19 6-5.2-3.9a.5.5 0 0 0-.8.4V18" />
<circle cx="9" cy="18" r="4" />
</svg>

Before

Width:  |  Height:  |  Size: 318 B

After

Width:  |  Height:  |  Size: 290 B

+32
View File
@@ -0,0 +1,32 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"colebemis",
"csandman",
"mittalyashu",
"ericfennis",
"jamiemlaw"
],
"use-cases": [
"Representing music or an audio track",
"Representing paired eighth notes in music notation"
],
"tags": [
"audio",
"music",
"sound",
"notes",
"quavers"
],
"categories": [
"multimedia",
"files"
],
"aliases": [
{
"name": "music",
"deprecationReason": "alias.name",
"deprecated": true
}
]
}
+2 -3
View File
@@ -9,8 +9,7 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M9 18V5l12-2v13" />
<path d="m9 9 12-2" />
<circle cx="6" cy="18" r="3" />
<path d="M21 16V3a1 1 0 0 0-1.28-.96l-10 2.917a1 1 0 0 0-.72.96V19" />
<circle cx="18" cy="16" r="3" />
<circle cx="6" cy="19" r="3" />
</svg>

Before

Width:  |  Height:  |  Size: 333 B

After

Width:  |  Height:  |  Size: 350 B

+39
View File
@@ -0,0 +1,39 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"rrod497",
"colebemis",
"csandman",
"ericfennis",
"karsa-mistmere",
"danielbayley",
"jguddas"
],
"use-cases": [
"Representing home folders or private directories in local and cloud storage",
"Storing private HR, tax, or backup records",
"Showing user-owned directories in multi-user systems",
"Organizing personal contacts or address book entries"
],
"tags": [
"directory",
"profile",
"person",
"personal",
"contact",
"document",
"account",
"individual",
"home folder",
"shared",
"access",
"owner"
],
"categories": [
"files",
"account",
"social",
"people",
"security"
]
}
+15
View File
@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M10.254 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2V9.255" />
<path d="M22 22a4 4 0 0 0-8 0" />
<circle cx="18" cy="15" r="3" />
</svg>

After

Width:  |  Height:  |  Size: 406 B

+39
View File
@@ -0,0 +1,39 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"rrod497",
"colebemis",
"csandman",
"ericfennis",
"karsa-mistmere",
"danielbayley",
"jguddas"
],
"use-cases": [
"Representing shared network directories in operating systems",
"Showing shared drives in cloud storage apps",
"Organizing team or project collaboration workspaces",
"Organizing group contacts or address book entries"
],
"tags": [
"directory",
"profile",
"shared",
"people",
"document",
"accounts",
"group",
"team",
"permission",
"access",
"collaboration",
"organization"
],
"categories": [
"files",
"account",
"social",
"people",
"security"
]
}
+16
View File
@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M5.254 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2V9.255" />
<circle cx="13" cy="15" r="3" />
<path d="M17 22a4 4 0 0 0-8 0" />
<path d="M22 22A4 4 0 0 0 20.24 18.686 1 1 0 0 1 20.1 17.143 3 3 0 0 0 19.5 12.402" />
</svg>

After

Width:  |  Height:  |  Size: 494 B

+36
View File
@@ -0,0 +1,36 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"Carlito-la-banane"
],
"use-cases": [
"Representing a load balancer in cloud infrastructure",
"Showing traffic distributed across multiple servers",
"Indicating a task split into parallel processes",
"Representing a load balancer in cloud service consoles",
"Showing incoming traffic distributed across multiple backends",
"Indicating a task split into parallel worker threads or processes",
"Marking fan-out patterns in system architecture or topology diagrams"
],
"tags": [
"load balancer",
"distribute",
"traffic",
"network",
"nodes",
"parallel",
"branch",
"hierarchy",
"routing",
"dispatcher",
"cluster",
"backend",
"fan-out",
"topology",
"orchestration"
],
"categories": [
"connectivity",
"development"
]
}
+19
View File
@@ -0,0 +1,19 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="12" cy="7" r="4" />
<circle cx="4" cy="19" r="2" />
<circle cx="12" cy="19" r="2" />
<circle cx="20" cy="19" r="2" />
<path d="M8 7a4 4 0 0 0-4 4v6" />
<path d="M12 11v6" />
<path d="M16 7a4 4 0 0 1 4 4v6" />
</svg>

After

Width:  |  Height:  |  Size: 443 B

+36
View File
@@ -0,0 +1,36 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"karsa-mistmere"
],
"use-cases": [
"Visualizing relationships between nodes in a graph",
"Representing mind maps, ideas, and concept associations",
"Showing devices connected to a central server or hub",
"Representing interconnected systems and networks",
"Showing dependencies and relationships between components",
"Representing molecules and chemical structures in scientific applications"
],
"tags": [
"mind map",
"network",
"hub",
"nodes",
"links",
"connections",
"relationships",
"dependencies",
"bonds",
"structure",
"topology",
"cluster",
"thoughts",
"ideas",
"concepts",
"molecule"
],
"categories": [
"development",
"charts"
]
}
+23
View File
@@ -0,0 +1,23 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m12.342 9.316 1.764-3.527" />
<path d="m12.59 14.545 2.35 3.759" />
<path d="m13.982 12.332 4.03.447" />
<path d="M5.414 17.586 8.88 14.12" />
<path d="M9.025 9.742 5.317 5.505" />
<circle cx="11" cy="12" r="3" />
<circle cx="15" cy="4" r="2" />
<circle cx="16" cy="20" r="2" />
<circle cx="20" cy="13" r="2" />
<circle cx="4" cy="19" r="2" />
<circle cx="4" cy="4" r="2" />
</svg>

After

Width:  |  Height:  |  Size: 614 B

+36
View File
@@ -0,0 +1,36 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"danielbayley",
"jguddas",
"rrod497"
],
"use-cases": [
"Digital Audio Workstations (DAWs) or music production software to represent MIDI track routing, virtual instrument tracks, or guitar controller settings.",
"Music streaming apps to represent rock playlists, genre categories, or live radio stations.",
"Event ticketing websites to highlight upcoming rock concerts and music festivals.",
"Online music store platforms to categorize instruments, gear, or digital audio tracks.",
"Music education blogs to tag articles, video tutorials, or guitar lesson courses."
],
"tags": [
"acoustic",
"instrument",
"strings",
"riff",
"rock",
"band",
"country",
"concert",
"performance",
"play",
"lead",
"loud",
"music",
"audio",
"sound",
"noise"
],
"categories": [
"multimedia"
]
}
+16
View File
@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m12.172 11.828 4.242-4.242" />
<path d="M16.414 7.586A2 2 0 0017 6.172V5a2 2 0 011.177-1.823L20.59 2.09a1 1 0 011.32 1.32l-1.088 2.412A2 2 0 0119 7h-1a2 2 0 00-1.586.586" />
<path d="m6 16 2 2" />
<path d="M8.23 9.85a3 3 0 011.28-1.454 1 1 0 011.496.815 4 4 0 003.783 3.783 1 1 0 01.815 1.496 3 3 0 01-1.454 1.28l-.92.38A2 2 0 0012 18a4 4 0 01-4 4 6 6 0 01-6-6 4 4 0 014-4 2 2 0 001.85-1.23z" />
</svg>

After

Width:  |  Height:  |  Size: 621 B

+32
View File
@@ -0,0 +1,32 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"it-is-not",
"danielbayley",
"karsa-mistmere"
],
"use-cases": [
"Representing music or an audio track",
"Representing a half note in music notation"
],
"tags": [
"audio",
"music",
"sound",
"note",
"crotchet",
"minim",
"quarter note"
],
"categories": [
"multimedia",
"files"
],
"aliases": [
{
"name": "music-3",
"deprecationReason": "alias.name",
"deprecated": true
}
]
}

Before

Width:  |  Height:  |  Size: 267 B

After

Width:  |  Height:  |  Size: 267 B

+21
View File
@@ -0,0 +1,21 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"ocavue"
],
"tags": [
"mouse",
"grab",
"handle",
"move",
"drag",
"resize",
"corner"
],
"use-cases": [
"Indicating the bottom-right resize handle of a resizable object"
],
"categories": [
"design"
]
}
@@ -9,6 +9,6 @@
stroke-linecap="round"
stroke-linejoin="round"
>
<circle cx="8" cy="18" r="4" />
<path d="M12 18V2l7 4" />
<path d="M21 8 8 21" />
<path d="m21 15-6 6" />
</svg>

Before

Width:  |  Height:  |  Size: 270 B

After

Width:  |  Height:  |  Size: 260 B

+42
View File
@@ -0,0 +1,42 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"rrod497"
],
"use-cases": [
"representing camera settings or photography mode",
"optical shops, eyeglasses or contact lens product categories",
"indicating visual effects like glassmorphism or lens reflections",
"generically representing shaders and visual effects, or scenic post-processing effects",
"educational apps (physics, optics, biology), scientific illustrations and documentation",
"indicating a specialized zoom / magnification tool for photography or camera apps",
"indicating aperture or depth-of-field controls in camera settings",
"toggling bokeh or portrait mode effects in photo editors",
"representing macro or close-up shooting modes",
"representing ar filters, virtual try-on or camera-lens selection features"
],
"tags": [
"optics",
"reflection",
"camera",
"photography",
"focus",
"effect",
"shader",
"post-process",
"visual",
"contact lens",
"glass",
"magnify",
"translucent",
"transparent",
"orb",
"bubble",
"zoom"
],
"categories": [
"photography",
"science",
"tools"
]
}
+15
View File
@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M15.725 7.296h.01" />
<path d="M6 12a6 6 0 016-6" />
<circle cx="12" cy="12" r="10" />
</svg>

After

Width:  |  Height:  |  Size: 310 B

+24
View File
@@ -0,0 +1,24 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"madebyoz"
],
"use-cases": [
"Adjusting spacing between characters in text editors and design tools"
],
"tags": [
"tracking",
"kerning",
"design",
"lettering",
"text",
"letters",
"characters",
"font",
"typography",
"formatting"
],
"categories": [
"text"
]
}
+16
View File
@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M15 14H9" />
<path d="M21 3v18" />
<path d="M3 3v18" />
<path d="m8 16 3.453-7.648a.6.6 0 011.094.001L16 16" />
</svg>

After

Width:  |  Height:  |  Size: 337 B

+1 -1
View File
@@ -30,7 +30,7 @@
"nautical",
"harbor",
"shore",
"lightbeam",
"light beam",
"wayfinding",
"guidance",
"onboarding",
+26
View File
@@ -0,0 +1,26 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"madebyoz"
],
"use-cases": [
"Adjusting spacing between lines in text editors and design tools"
],
"tags": [
"leading",
"text",
"letters",
"characters",
"font",
"typography",
"spacing",
"paragraph",
"formatting",
"editor",
"readability",
"typesetting"
],
"categories": [
"text"
]
}
+16
View File
@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M15 14H9" />
<path d="M21 21H3" />
<path d="M21 3H3" />
<path d="m8 16 3.453-7.648a.6.6 0 011.094.001L16 16" />
</svg>

After

Width:  |  Height:  |  Size: 337 B

+1 -1
View File
@@ -18,7 +18,7 @@
"unread",
"scheduled",
"delayed",
"sendlater",
"send later",
"delivery",
"reminder",
"pending",
+33
View File
@@ -0,0 +1,33 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"colebemis",
"karsa-mistmere",
"ericfennis",
"jguddas",
"elenakovelskikh"
],
"use-cases": [
"Indicating new or unread messages in messaging systems",
"Drawing attention to recent activity in inboxes and notification areas"
],
"tags": [
"mail",
"envelope",
"communication",
"post",
"send",
"address",
"notification",
"email",
"message",
"letter",
"unread",
"dot"
],
"categories": [
"text",
"account",
"mail"
]
}
+15
View File
@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M12.674 4H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4.675" />
<path d="m2 7 9 5.701a2 2 0 0 0 2 0l1.084-.686" />
<circle cx="19" cy="7" r="3" />
</svg>

After

Width:  |  Height:  |  Size: 377 B

+44
View File
@@ -0,0 +1,44 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"colebemis",
"csandman",
"ericfennis",
"jguddas",
"karsa-mistmere"
],
"use-cases": [
"Representing a text message or comment",
"Opening a chat or messaging inbox",
"Marking a comment thread or discussion on a post",
"Indicating a live chat or customer support conversation",
"Representing a chatbot or AI assistant conversation",
"Showing a message transcript or chat history",
"Representing SMS or instant messaging in a contact list",
"Indicating written feedback, reviews, or remarks"
],
"tags": [
"comment",
"chat",
"conversation",
"dialog",
"feedback",
"speech",
"bubble",
"sms",
"texting",
"messaging",
"dm",
"discussion",
"thread",
"transcript",
"written",
"writing",
"lines",
"support",
"chatbot"
],
"categories": [
"social"
]
}
+16
View File
@@ -0,0 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M3.086 17.509a2 2 0 00-.094-1.167 10 10 0 114.777 4.719 2 2 0 00-1.099-.092l-3.413.998a1 1 0 01-1.236-1.168z" />
<path d="M8 12h9" />
<path d="M8 16h5" />
<path d="M8 8h7" />
</svg>

After

Width:  |  Height:  |  Size: 400 B

+1 -1
View File
@@ -26,7 +26,7 @@
"interview",
"debate",
"group",
"groupchat",
"group chat",
"threads",
"unread",
"bubble",
-18
View File
@@ -1,18 +0,0 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"it-is-not",
"danielbayley",
"karsa-mistmere"
],
"use-cases": [],
"tags": [
"quaver",
"eighth note",
"note"
],
"categories": [
"multimedia",
"files"
]
}
-20
View File
@@ -1,20 +0,0 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"it-is-not",
"danielbayley",
"karsa-mistmere"
],
"use-cases": [],
"tags": [
"crotchet",
"minim",
"quarter note",
"half note",
"note"
],
"categories": [
"multimedia",
"files"
]
}
-17
View File
@@ -1,17 +0,0 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"it-is-not",
"karsa-mistmere"
],
"use-cases": [],
"tags": [
"semiquaver",
"sixteenth note",
"note"
],
"categories": [
"multimedia",
"files"
]
}
-19
View File
@@ -1,19 +0,0 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"colebemis",
"csandman",
"mittalyashu",
"ericfennis"
],
"use-cases": [],
"tags": [
"note",
"quaver",
"eighth note"
],
"categories": [
"multimedia",
"files"
]
}
+1 -1
View File
@@ -20,7 +20,7 @@
"eco-friendly",
"kraft",
"retail",
"doggybag"
"doggy bag"
],
"categories": [
"food-beverage",
+36
View File
@@ -0,0 +1,36 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"rrod497"
],
"use-cases": [
"Representing fragrance and cosmetic products in retail catalogs",
"Indicating duty-free and boutique fragrance stores",
"Distinguishing scented and unscented skincare products"
],
"tags": [
"eau de parfum",
"eau de toilette",
"essence",
"aftershave",
"cologne",
"aroma",
"fragrance",
"smell",
"scent",
"bouquet",
"gift",
"duty free",
"spray",
"puff",
"atomizer",
"mist",
"beauty",
"skincare",
"cosmetics"
],
"categories": [
"shopping",
"travel"
]
}
+21
View File
@@ -0,0 +1,21 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M 5 22 H 11.072" />
<path d="M15 5 C 23 4 23.328 12.676 20 14.536" />
<path d="M15.802 10.308 C 14.776 9.465 14 8.496 14 7" />
<path d="M2 2h.01" />
<path d="M2 7h.01" />
<path d="M5 4.5h.01" />
<path d="M8.127 22 A 8 8 0 0 1 4 15 3 3 0 0 1 4.879 12.879C 6.879 10.879 10 10 10 7" />
<circle cx="18" cy="18" r="4" />
<rect x="9" y="2" width="6" height="5" rx="1" />
</svg>

After

Width:  |  Height:  |  Size: 600 B

+29
View File
@@ -0,0 +1,29 @@
{
"$schema": "../icon.schema.json",
"contributors": [
"colebemis",
"csandman",
"ericfennis",
"karsa-mistmere",
"jamiemlaw",
"Levi-Bensley"
],
"tags": [
"telephone",
"communication",
"mobile",
"device",
"contact",
"history",
"data",
"information",
"call"
],
"categories": [
"communication"
],
"use-cases": [
"Reviewing recent incoming and outgoing calls",
"Displaying call history in communication apps"
]
}
+15
View File
@@ -0,0 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M13.832 16.568a1 1 0 001.213-.303l.355-.465A2 2 0 0117 15h3a2 2 0 012 2v3a2 2 0 01-2 2A18 18 0 012 4a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-.8 1.6l-.468.351a1 1 0 00-.292 1.233 14 14 0 006.392 6.384" />
<path d="M14.396 4.171h7.171" />
<path d="M17.343 8.17h4.224" />
</svg>

After

Width:  |  Height:  |  Size: 489 B

-1
View File
@@ -5,7 +5,6 @@
],
"use-cases": [],
"tags": [
"frigerator",
"fridge",
"freezer",
"cooler",

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