From 711255bb323bbebbbfb578219078e0a39fb195de Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 22 Sep 2026 08:36:21 +0000 Subject: [PATCH] fix: preserve builder color prop types --- packages/lucide-react-native/src/Icon.ts | 2 +- packages/shared/src/build/buildLucideIconForReact.ts | 8 ++++---- packages/shared/src/build/buildLucideIconNode.ts | 5 ++++- packages/shared/src/build/types.ts | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/lucide-react-native/src/Icon.ts b/packages/lucide-react-native/src/Icon.ts index 270b67ae1..184a8e48e 100644 --- a/packages/lucide-react-native/src/Icon.ts +++ b/packages/lucide-react-native/src/Icon.ts @@ -85,7 +85,7 @@ const Icon = forwardRef( const hasAccessibleProp = Boolean(children) || hasA11yProp(rest); const [, svgAttributes, builtIconNode = []] = buildLucideIconForReact(icon, { - color: (color ?? contextColor) as string, + color: color ?? contextColor, width: width ?? size ?? contextSize, height: height ?? size ?? contextSize, strokeWidth: strokeWidth ?? contextStrokeWidth, diff --git a/packages/shared/src/build/buildLucideIconForReact.ts b/packages/shared/src/build/buildLucideIconForReact.ts index 66b56f291..eccda9be9 100644 --- a/packages/shared/src/build/buildLucideIconForReact.ts +++ b/packages/shared/src/build/buildLucideIconForReact.ts @@ -1,5 +1,5 @@ import buildLucideIconNode from './buildLucideIconNode'; -import type { LucideBuildParams, LucideIconData, LucideIconNode } from './types'; +import type { LucideBuildParams, LucideIconData, LucideIconNode, SVGProps } from './types'; /** * Creates a React-compatible Lucide icon node (an svgson-like format) from a Lucide icon object. @@ -7,9 +7,9 @@ import type { LucideBuildParams, LucideIconData, LucideIconNode } from './types' * @param icon The icon to build. * @param params Additional build parameters. */ -function buildLucideIconForReact( - icon: LucideIconData, - params: LucideBuildParams = {}, +function buildLucideIconForReact = SVGProps>( + icon: LucideIconData, + params: LucideBuildParams = {} as LucideBuildParams, ): LucideIconNode { return buildLucideIconNode(icon, { ...params, diff --git a/packages/shared/src/build/buildLucideIconNode.ts b/packages/shared/src/build/buildLucideIconNode.ts index a88f323e7..fd8b284bd 100644 --- a/packages/shared/src/build/buildLucideIconNode.ts +++ b/packages/shared/src/build/buildLucideIconNode.ts @@ -12,7 +12,10 @@ function isDefined(value: T | null | undefined): value is T { * @param icon The icon to build. * @param params Additional build parameters. */ -function buildLucideIconNode(icon: LucideIconData, params: LucideBuildParams = {}): LucideIconNode { +function buildLucideIconNode = SVGProps>( + icon: LucideIconData, + params: LucideBuildParams = {} as LucideBuildParams, +): LucideIconNode { const attributeNames = params.attributeNames ?? {}; const getAttributeName = (attributeName: string) => attributeNames[attributeName] ?? attributeName; diff --git a/packages/shared/src/build/types.ts b/packages/shared/src/build/types.ts index 39a99662f..338974eea 100644 --- a/packages/shared/src/build/types.ts +++ b/packages/shared/src/build/types.ts @@ -33,7 +33,7 @@ export type LucideBuildParams = SVGProps> /** * The color of the icon. */ - color?: string; + color?: TProps extends { color?: infer TColor } ? TColor : string; /** * The stroke width. */