* fix(icons): align Unicode currency icon cap heights with other typographic icons
Also deprecates badge-, receipt- currency variants
* fix(icons): update riyal to be more in line with specifications
Rightmost lines evenly spaced, leftmost path somewhat lower than the currently matching line
* feat(icons): added letter icons for each uppercase letter of the English alphabet
* feat(icons): extend letter icons with specific use cases instead of generic ones
* feat(icons): replaced letter-z with more grid-aliged version
* feat(icons): add contributors from strikethrough to letter-s
* feat(icons): added square-letter-* & circle-letter-* icons
* feat(icons): manually optimized some icons
* fix(icons): deprecated circle-parking
* Rename import
* fix(icons): fix use case syntax for (circle|square)-letter icons
* fix(icons): added new Letters & digits category
* fix(icons): added numbers to new Letters & digits category
---------
Co-authored-by: Eric <eric.fennis@gmail.com>
* feat(icons): added letter icons for each uppercase letter of the English alphabet
* feat(icons): extend letter icons with specific use cases instead of generic ones
* feat(icons): replaced letter-z with more grid-aliged version
* feat(icons): add contributors from strikethrough to letter-s
* fix(icons): fix use case syntax for letter icons
* feat(icons): added `square-kanban-plus` icon
Adds square-kanban-plus for issue #4416.
Also updates emoji category icon reference after smile rename.
* chore(icons): expand square-kanban-plus metadata from PR suggestions
Apply curated tags, categories, and use-cases from automated
metadata review suggestions.
* Apply design from @jguddas
* Update contributors and use cases in square-kanban-plus.json
Added new contributors and updated use cases to improve clarity.
---------
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
* feat(docs): track homepage, icons page and icon drawer interactions with OpenPanel
Adds track/trackDebounced helpers around the shared OpenPanel instance and
sends events for hero actions, home search, packages, the style customizers,
homepage scroll depth, icon search (start, queries, no results), sort,
Lab library toggle, and the drawer's See in action, copy and studio buttons.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011GcWdCmSmcDiiAazR5mNUD
* feat(docs): send homepage scroll depth once on page leave
Instead of one event per milestone, record the deepest scroll position and
send a single home_scroll_depth event (percent + milestone) when the visitor
navigates away, closes the tab, or hides it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011GcWdCmSmcDiiAazR5mNUD
* feat(docs): simplify scroll depth tracking to the position on page leave
Drop the max-depth composable and send a single scroll_depth event with the
current scroll percentage before a route change and on visibilitychange,
pagehide and beforeunload, for every page.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011GcWdCmSmcDiiAazR5mNUD
* refactor(docs): move scroll depth tracking into the OpenPanel utils
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011GcWdCmSmcDiiAazR5mNUD
* refactor(docs): move router and browser tracking setup into the OpenPanel utils
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011GcWdCmSmcDiiAazR5mNUD
* Add privacy-policy
* adjust text
* Remove plausible
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Added icons/earbuds.svg
* Added icons/earbuds.json
* Create earbuds-off.json icon schema
Added a JSON schema for earbuds-off icon with use cases, tags, and categories.
* Add earbuds-off.svg icon file
* Update use-cases and fix typo in earbuds-off.json
* Refine use-cases and correct tag spelling
Updated use-cases and tags for clarity and added communication category.
* Update use cases and categories in earbuds-off.json
* Update categories
---------
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Rewrite non-empty use-cases in icon metadata to follow
.github/instructions/metadata.instructions.md: start with a capitalized
present participle, no trailing periods, roughly 4-12 words, no first
person, and variant-specific wording instead of copied lines.
Claude-Session: https://claude.ai/code/session_011ftUgp98e8VLgymjSb9qbQ
Co-authored-by: Claude <noreply@anthropic.com>
2026-10-27 14:55:29 +01:00
Eric Fennisgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>Karsa
* feat(icons): add laser icon with metadata
* Update icons/laser.json
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Add more use cases and tags
* Update laser icon design
The laser design is according to @karsa-mistmere suggestion.
* Update laser icon design and its metadata
* Remove 'cursors' and 'devices' from categories
---------
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>
When the name prop changes while the previous icon is still loading, the earlier import could resolve last and overwrite the newer icon, leaving DynamicIcon showing the wrong icon. The effect now ignores results from a superseded name.
* feat(icons): added dirham icon
* feat(icons): use letter-d geometry from karsa-mistmere for dirham
* Apply suggestion from @github-actions[bot]
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* feat(metadata): add full names to dirham tags as requested by maintainer
* fix(metadata): add required use-cases field to dirham.json
* Apply suggestion from @github-actions[bot]
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Update and rename dirham.json to emirati-dirham.json
* Rename dirham.svg to emirati-dirham.svg
---------
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>
* feat(lucide-react): add package exports for per-icon imports without changing how Node resolves the package
Makes `lucide-react/icons/<name>` and `lucide-react/types` public so a
single icon can be imported with a small shared declaration instead of
the 2.2 MB `dist/lucide-react.d.ts`, and without loading the CJS barrel
on the server.
The root entry only lists `module` and `default`, so bundlers keep the
ESM barrel and Node keeps resolving to `dist/cjs/lucide-react.js` as it
does today through `main`. The map reverted in #2814 sent Node to the
ESM barrel, which is what #2743 hit. `./dist/*` keeps existing deep
imports working.
* Modify getting started guide for icon imports
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* fix(lucide-react): add node, import and require conditions after module and keep the extension-specific and src subpaths exported
Resolvers that are called with a custom condition list drop `module` and fell through to `default`, the CJS bundle; esbuild with `conditions: ['workerd', 'worker']` bundled 1.3 MB instead of the 58 KB tree-shaken output it gets on main. The root and `./icons` entries now list `node`, `import` and `require` after `module`, with `node` ahead of `import` so Node keeps resolving to `dist/cjs/lucide-react.js` for both `import` and `require`.
`lucide-react/dynamic.mjs`, `lucide-react/dynamic.js` and `lucide-react/dynamicIconImports.mjs` are imported by consumers and threw ERR_PACKAGE_PATH_NOT_EXPORTED; they have explicit entries again. The docs API routes import `lucide-react/src/createLucideIcon` and `lucide-react/src/Icon`, which Nitro left as external imports without a `./src/*` entry, so the entry from the 0.470.0 map is back.
* test(lucide-react): resolve the package entry points with Node itself in the React Router fixture
The browser suite resolves lucide-react through Vite, so nothing checked the `exports` map the way a server runtime does. `tests/exports.node.test.ts` runs under `node --test` from the fixture's `check` script and asserts where `import.meta.resolve` and `require.resolve` land for the root, `./icons`, a single icon, the dynamic entries with and without an extension, the `dist/*` passthrough and `package.json`, that `./types` is declaration-only, and that the resolved modules load. Vitest is told to leave that file to Node.
* docs(lucide-react): note that per-icon imports are ESM only
`require()` of `lucide-react/icons/<name>` needs Node.js 20.19 or 22.12; 20.18 throws ERR_REQUIRE_ESM.
---------
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
* refactor(ci): move icon preview markup into a composite action
Move generateChangedIconsCommentMarkup.mts into .github/actions/icon-preview
as its own pnpm workspace package, following the suggest-metadata action.
svgson and @lucide/helpers are now real dependencies installed with a
filtered pnpm install, replacing the ad-hoc `npm install svgson --force`.
Paths are resolved from the repo root relative to the script, so it also
works through `pnpm --filter @lucide/icon-preview-action start`.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* fix(ci): skip icon preview comment when no icons changed
When a pull request only deletes icons, CHANGED_FILES has no SVGs and the
script printed "No changed icons found" to stdout, which was then posted as
the preview comment.
The script now logs that to stderr. The action writes no markup file and
sets `has-changes=false`, the workflow skips the artifact upload, and the
comment workflow skips its steps when no artifact exists instead of failing
on the missing artifact.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* ci(icon-preview): post the preview comment from a pull_request_target workflow
Like the PR title workflow, the icon preview now runs on pull_request_target
and posts its comment directly, so comment-icon-preview.yml and the
workflow_run artifact hand-off are removed.
The job checks out the base branch and runs the action from there. The
changed SVGs are read from the pull request head with `git fetch` + `git show`
into a temp directory, so no code from the pull request is checked out or run.
File names are checked against `icons/<kebab-case>.svg` before use.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* fix(ci): store metadata suggestions in the review instead of actions/cache
pull_request_target runs can't write to the Actions cache ("cache write
denied: token has no writable scopes"), so the cache was never saved and
the model was asked again on every push. That produced new suggestions
anchored on the same lines as earlier ones.
Store the model's suggestions per icon name as hidden JSON in the review
body and read them back from the bot's earlier reviews, so the API is only
called for icons without stored suggestions. This drops the gh api and
actions/cache steps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSdUq9uFpjuQsoobCBqz4j
* fix(ci): handle earlier metadata suggestion comments on older PRs
- Read values from the oldest comment format too, which doesn't start with
"Suggested `field`" and was posted without a closing fence; the field
is taken from the suggestion's `"field": [` line.
- Skip a field while an earlier suggestion for it is still applicable (not
outdated), so two suggestions never replace overlapping lines.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSdUq9uFpjuQsoobCBqz4j
* fix(ci): read icon metadata at the reviewed commit
The review comments are anchored to the commit that triggered the run,
but the icon JSON was read through the PR files' raw_url, which always
points at the latest head. When a commit was pushed while the action
was running, suggestions were anchored to the wrong lines, e.g. a
use-cases block replacing the "tags": [ line, producing invalid JSON.
Read each file at the reviewed commit instead, default that commit to the
PR's head SHA, and skip files that don't exist at it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSdUq9uFpjuQsoobCBqz4j
---------
Co-authored-by: Claude <noreply@anthropic.com>
* feat(ci): run metadata suggestions on every PR update with cached results
- Run on opened/reopened/synchronize and queue runs per PR.
- Cache the model's suggestions per icon name with actions/cache, so the
OpenAI API is only called again for icons that are added or renamed.
- Skip suggestions that were already posted instead of skipping the whole
PR once it has a review.
- Suggest only the values to append after the last array item instead of
the whole array; empty and inline arrays still get the full block.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSdUq9uFpjuQsoobCBqz4j
* refactor(ci): key the suggestions cache on the PR's icon names
Replace the separate restore/save steps and the `cache-updated` output
with a single actions/cache step keyed on a hash of the changed icon
files, so the API is only called again when icon names change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSdUq9uFpjuQsoobCBqz4j
* style(ci): drop trailing blank line in suggest-metadata action
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSdUq9uFpjuQsoobCBqz4j
* fix(ci): dedupe metadata suggestions by value instead of comment body
The append-style suggestion includes the array's current last item, so
comparing whole comment bodies reposted the same values after a
contributor added a tag or applied part of a suggestion. Read the values
back from the bot's earlier suggestion blocks per file and field, and
exclude them like the current values.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSdUq9uFpjuQsoobCBqz4j
---------
Co-authored-by: Claude <noreply@anthropic.com>
Track page views (initial load + client-side navigations) with the
@openpanel/web SDK, sending to the self-hosted instance at
insights.lucide.dev. This mirrors what the current Plausible script
tracks; Plausible stays in place for the icon popularity script.
Page views are sent from VitePress' onAfterRouteChange hook (after
nextTick) so the page title is already updated. Tracking only runs in
the browser and only when VITE_OPENPANEL_CLIENT_ID is set at build time.
The SDK is bundled from npm instead of loading op1.js, which EasyPrivacy
blocks; insights.lucide.dev/api/track matches no rule in the current
EasyList/EasyPrivacy, uBlock Origin or Brave lists.
Claude-Session: https://claude.ai/code/session_01AZuxmXLjrs29erwQcePCnX
Co-authored-by: Claude <noreply@anthropic.com>
* fix(scripts): keep contributors out of metadata suggestions
The shared metadata instructions include a Contributors section asking to
add the PR author, but the suggestion schema has no contributors field, so
the model leaked it into use-cases. Strip that section from the prompt and
explicitly restrict suggestions to tags, categories and use-cases.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MThCx7cVXV3XWfo5C327Ci
* refactor(ci): move metadata suggestions into a dedicated composite action
Move scripts/suggestMetaData.mts to .github/actions/suggest-metadata and
wrap it in a composite action with explicit inputs. The workflow now uses
the local action; package.json scripts point to the new location.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MThCx7cVXV3XWfo5C327Ci
* chore(ci): add .env.example for testing the suggest-metadata action locally
Document the env vars the script reads, point the debug/watch scripts at
an action-local .env, and fix the USE_FILE_SYSYEM typo.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MThCx7cVXV3XWfo5C327Ci
* chore(ci): make .github/actions a pnpm workspace
Add .github/actions/* to the pnpm workspace and give the suggest-metadata
action its own package.json with its dependencies (openai, zod, dotenv,
@octokit/rest). openai, zod and dotenv move out of the root package.json;
@octokit/rest stays there for updateContributors. The workflow now only
installs the action's dependencies, and the root suggest:metadata scripts
delegate to the action package.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MThCx7cVXV3XWfo5C327Ci
* Upgrade to gpt-6-luna
---------
Co-authored-by: Claude <noreply@anthropic.com>
* feat(scripts): generate README sponsor tiers from Open Collective
updateSponsors.mts now fetches active recurring contributions from the
Open Collective GraphQL API, groups them by tier and rewrites the tier
sections in README.md between new markers, then propagates the block to
the package READMEs as before. Use --skip-fetch to only propagate.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VRsauu8mwJpB9y88vMMQ7n
* Add sponsors
* Remove digital ocean
* Fix capitalization and emoji in TIER_TITLES
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* feat(svelte): export __iconData and __iconNode across per-icon modules (#4936)
* Refactor imports in lucide-svelte.spec.ts
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* fix(build-icons): scope per-icon data re-exports behind exportIconData flag
- Problem: generateAliasesFiles unconditionally re-exported __iconData and __iconNode for all packages using separateAliasesFile. Packages like @lucide/solid and @lucide/icons do not export these names from their templates, causing missing export errors in downstream bundlers (e.g. solid vite integration).
- Solution: Add exportIconData flag (default false) to CLI, generateIconFiles, and generateAliasesFiles so named re-exports are opt-in and only emitted for packages that define them (@lucide/svelte).
* refactor(svelte): remove tools/build-icons changes per maintainer review
---------
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* 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>
* 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>
* 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>
* 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>
* 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>
* 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>
* 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>
@@ -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.
<a href="https://zephyr-cloud.io/"><img src="docs/public/sponsors/zephyr-cloud.svg" width="180" alt="Zephyr Cloud – From idea to prod: fast micro-frontend delivery!" /></a>
### Hero Backer 🦸
<a href="https://about.sourcegraph.com"><img src="https://images.opencollective.com/sourcegraph/f67b621/logo.png" height="64" alt="Sourcegraph – Understand, fix, and automate across your codebase with Sourcegraph's code intelligence platform" /></a>
<a href="https://github.com/pdfme/pdfme"><img src="docs/public/sponsors/pdfme.svg" width="180" alt="pdfme – Open-source PDF generation library built with TypeScript and React." /></a>
<a href="https://www.paxhistoria.co/"><img src="docs/public/sponsors/paxhistoria.svg?" width="180" alt="Pax Historia – An alternate history sandbox game" /></a>
<a href="https://pdfme.com"><img src="https://images.opencollective.com/pdfmeorg/9e0174d/logo.png" height="64" alt="pdfme – Free and Open source PDF generation library!" /></a>
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.