* fix(docs): persist icon customizer settings
Persist icon color, size, stroke width, and absolute stroke width between page navigations and reloads.
Keep a shared icon style state across the homepage and icons page, clamp the homepage preview size to its supported range, and apply persisted absolute stroke settings after mount.
* fix(docs): avoid icon customizer hydration flicker
Initialize persisted icon settings synchronously and apply absolute stroke width before the first rendered state.
* fix(docs): restore icon styles before first paint
Apply stored icon styles from a head script before hydration, defer customizer visibility until mount, and render persisted switches on the client to avoid stale SSR classes. Keep absolute stroke state synchronized globally and cover prepaint initialization with regression tests.
* fix(site): persist icon customizer
* fix(packages/react): update vulnerable @tanstack packages
* fix(docs): persist icon customizer settings
Persist icon color, size, stroke width, and absolute stroke width between page navigations and reloads.
Keep a shared icon style state across the homepage and icons page, clamp the homepage preview size to its supported range, and apply persisted absolute stroke settings after mount.
* fix(docs): avoid icon customizer hydration flicker
Initialize persisted icon settings synchronously and apply absolute stroke width before the first rendered state.
* fix(docs): restore icon styles before first paint
Apply stored icon styles from a head script before hydration, defer customizer visibility until mount, and render persisted switches on the client to avoid stale SSR classes. Keep absolute stroke state synchronized globally and cover prepaint initialization with regression tests.
* fix(site): persist icon customizer
* fix(packages/react): update vulnerable @tanstack packages
* fix(site): generalize usePersistedIconStyle to reduce code duplication in icon customizers
* fix(site): home size slider now uses max="256", matching the sidebar
* fix(site): fix linting issues in iconStyleHead.js
* fix(site): make Switch.vue hydration safe
* fix(site): fix home icon customizer color input width
* fix(site): make home icon customizer not persistent
* fix(site): fix duplicate ids in sidebar icon customizer as well
* fix(site): various minor fixes to the customizer bl
* fix(site): revert "[default]" placeholder
---------
Co-authored-by: epifaniofrancisco <epifaniofrancisco03@gmail.com>
* fix(lucide-preact): import `SVGAttributes` and `SignalLike` from `preact`
`LucideProps` extended `JSX.SVGAttributes` and `createLucideIcon` used
`JSX.SignalLike`. Preact 10 marks both JSX aliases as deprecated in favour
of the top-level exports, and Preact 11 removes them: its `JSX` namespace
only keeps what TypeScript needs for JSX checking.
Against Preact 11 the package fails `tsc` (TS2694), and the published
`.d.ts` resolves `LucideProps` to an error type. Consumers with
`skipLibCheck: true` see no error, but every icon then accepts unknown
props and event handler parameters become implicit `any`.
The top-level `SVGAttributes` and `SignalLike` exports already exist in
Preact 10.27.2, the current peer floor, and are identical to the JSX
aliases there, so the props type does not change for Preact 10 users.
* fix(lucide-preact): add Preact v11 compatibility
Widen the `preact` peer range to `^10.27.2 || ^11.0.0-0`. The `-0` lets
the 11.0.0 release candidates install without peer warnings and still
covers every 11.x release.
The dev dependency stays on Preact 10. The lockfile does not record
workspace peer ranges, so it is unchanged.
Mirror the lucide-react integration tests for `@lucide/vue`. Each fixture is
scaffolded with the framework's official generator (`pnpm create vue@latest`,
`pnpm create nuxt@latest`, `pnpm create vike@latest --vue`), trimmed of demo
boilerplate, and runs a production build, `vue-tsc`, and a Vitest Browser Mode
test in Chromium that renders the public `@lucide/vue` APIs (static icon,
per-instance props, `setLucideProps` context, alias vs canonical icon).
Nuxt is pinned to 4.4.8: 4.5.x requires Vite 8, which the workspace-wide
`vite: ^7.3.6` override does not allow.
Wire it up with a `test:integrations:vue` root script and an `integration`
job in the Lucide Vue workflow.
Claude-Session: https://claude.ai/code/session_01KmQsnSECZoNxh1GJ15BmdH
Co-authored-by: Claude <noreply@anthropic.com>
* fix(shared): escape attribute values in buildLucideSvg
Attribute values were interpolated into the SVG string as-is, so a value
containing a double quote, ampersand or angle bracket (for example in a
custom attribute or class name) produced malformed markup.
* Use replace(/x/g) instead of replaceAll for broader TS lib compat
lucide-react-native's tsconfig doesn't include the ES2021 lib that
replaceAll requires, failing typecheck. A global regex replace is
functionally identical here and works under any target.
* Escape the full set of relevant HTML entities in attribute values
Also escape > and ' per review feedback, not just & " <.
* Apply suggestion from @karsa-mistmere
---------
Co-authored-by: Karsa <contact@karsa.org>
`lucide-react` and `lucide-react-native` both ship `.d.ts` files that
import React types (`ForwardRefExoticComponent`, `SVGProps`,
`RefAttributes`, `ReactNode`), but neither package declares
`@types/react`. Under a hoisted `node_modules` this resolves by
accident, so the gap is invisible in normal testing.
It does not resolve under a strict layout — most notably pnpm's global
virtual store (`enableGlobalVirtualStore`), where each package is linked
from a store path outside the consuming repo. TypeScript resolves a
package's imports relative to where that package physically lives and
ignores `NODE_PATH`, so `react` resolves to the untyped
`react/index.js`. Every icon's props silently degrade to `any`, and
consumers hit implicit-any errors on their own callbacks under
`noImplicitAny`. `skipLibCheck: true` hides the errors inside the
`.d.ts` itself, which is why this survives most typechecks.
Declaring the typings package as a peer dependency (rather than a hard
dependency) lets it dedupe against whatever `@types/react` the consumer
already has. `peerDependenciesMeta` marks it optional so JS-only
consumers get no unmet-peer warning.
Verified by packing each package and installing the tarball into a
scratch consumer with `pnpm --virtual-store-dir` pointing outside the
consumer, then typechecking with `skipLibCheck: false` and a
`@ts-expect-error` probe on a nonexistent icon prop — a positive type
assertion keeps passing when types widen to `any`, so it would not
catch a regression. Before the change the probe reports
`TS2578: Unused '@ts-expect-error' directive` plus `TS7016` inside the
shipped `.d.ts`; after it, `tsc` is clean and `--traceResolution`
shows `react` resolving to `@types/react/index.d.ts` instead of
`react/index.js`. Existing peer ranges are unchanged and the lockfile
is unaffected.
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
buildLucideIconForReact is the entry point both lucide-react and
lucide-react-native use to build an icon, and its whole job is renaming
the hyphenated SVG attributes to the spellings React expects. Nothing
tested that rename directly: the other build helpers have specs in
packages/icons/tests, and this one had none anywhere in the repo.
The spec pins the five renames it applies, checks that attributes React
already accepts are left alone, that aria-hidden stays hyphenated, that
vector-effect is renamed on child nodes for a non-scaling stroke, and
that a caller's own attributeNames are merged without displacing the
React spellings.
Verified that the spec is not vacuous: removing the class -> className
entry from the rename map fails two of the five tests.
Co-authored-by: Vugar Bakhishov <vugarbbakhishov-hub@users.noreply.github.com>
Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
The Icon component destructured `testID` out of its props and re-emitted it as
`data-testid`, which is a web attribute. react-native-svg only forwards `testID`
to the native view (see extractProps) and drops `data-testid`, so
`<Icon testID="my-icon" />` rendered an element that no React Native test query
or UI automation tool can find. `LucideProps` extends `SvgProps`, so the prop
type checks and the failure is silent.
v0 spread `testID` straight onto `Svg`, so this is a regression for React Native
consumers. An explicitly passed `data-testid` still reaches the element through
the remaining props, so nothing is lost for react-native-web users.
The react-native-svg test mock now maps `testID` onto `data-testid`, so the
DOM based test suite identifies elements the way React Native does. Every
existing `testID` test fails against the previous behaviour.
* Added icons/square-sparkles.svg
* Added icons/square-sparkles.json
* apply design from @karsa-mistmere
* Add use-cases field to square-sparkles.json
* Add use cases for square sparkles 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: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* feat(icons): added square-dashed-plus
* Update icons/square-dashed-plus.json
Suggested via PR AI
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Update icons/square-dashed-plus.json
Suggested by PR AI
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Update icons/square-dashed-plus.json
Suggestion made by PR AI
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Revise use cases for square dashed plus icon
AI PR Suggestion
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Peter Jamrozinski <peter.jamrozinski@johnsonfit.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>
* Add Nepali Rupee icon
* Apply suggestions from code review
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* refactor: center nepali rupee icon and use perfect circular arc
* Updated with horizontally centered
* Update use cases for Nepali rupee
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>