From 273e17c0d34c825f36d56181efa1d3eb7eb61e0e Mon Sep 17 00:00:00 2001 From: Amruth Pillai Date: Tue, 26 May 2026 09:59:23 +0200 Subject: [PATCH] fix: issue with color format handling, resolves #3104 --- packages/utils/src/color.test.ts | 5 +++++ packages/utils/src/color.ts | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/packages/utils/src/color.test.ts b/packages/utils/src/color.test.ts index 35427288a..113ddd7f6 100644 --- a/packages/utils/src/color.test.ts +++ b/packages/utils/src/color.test.ts @@ -21,6 +21,11 @@ describe("rgbaStringToHex", () => { it("converts arbitrary mid-range color", () => { expect(rgbaStringToHex("rgb(128, 64, 200)")).toBe("#8040c8"); }); + + it("preserves 6-digit hex colors", () => { + expect(rgbaStringToHex("#F1F5F9")).toBe("#f1f5f9"); + expect(rgbaStringToHex("#0F172A")).toBe("#0f172a"); + }); }); describe("parseColorString", () => { diff --git a/packages/utils/src/color.ts b/packages/utils/src/color.ts index b86313cbc..57a7ab911 100644 --- a/packages/utils/src/color.ts +++ b/packages/utils/src/color.ts @@ -2,10 +2,17 @@ import type { ColorResult } from "@uiw/color-convert"; import { hsvaToHex, rgbaStringToHsva } from "@uiw/color-convert"; export function rgbaStringToHex(rgba: string): string { + const color = parseColorString(rgba); + if (color) return `#${toHexComponent(color.r)}${toHexComponent(color.g)}${toHexComponent(color.b)}`; + const hsva = rgbaStringToHsva(rgba); return hsvaToHex(hsva); } +function toHexComponent(value: number): string { + return Math.max(0, Math.min(255, value)).toString(16).padStart(2, "0"); +} + export function parseColorString(value: string): ColorResult["rgba"] | null { const trimmed = value.trim();