From ad951d4250e994e838808c8492a14c9e5e705bb7 Mon Sep 17 00:00:00 2001 From: Taksh Date: Sat, 5 Sep 2026 10:09:05 +0530 Subject: [PATCH] Accept 8-digit hex colors with alpha in blueprint validation Templates already use #RRGGBBAA, but IsHexColor rejected anything longer than #RRGGBB, so alpha imports failed. Signed-off-by: Taksh --- internal/color/validate.go | 7 +++++-- internal/color/validate_test.go | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 internal/color/validate_test.go diff --git a/internal/color/validate.go b/internal/color/validate.go index eef46c8..f443e61 100644 --- a/internal/color/validate.go +++ b/internal/color/validate.go @@ -1,8 +1,11 @@ package color -// IsHexColor reports whether value is a safe three- or six-digit hex color. +// IsHexColor reports whether value is a safe 3-, 4-, 6-, or 8-digit hex color. +// Eight-digit form is #RRGGBBAA (used by templates such as aether.zed.json). func IsHexColor(value string) bool { - if len(value) != 4 && len(value) != 7 { + switch len(value) { + case 4, 5, 7, 9: + default: return false } if value[0] != '#' { diff --git a/internal/color/validate_test.go b/internal/color/validate_test.go new file mode 100644 index 0000000..b862488 --- /dev/null +++ b/internal/color/validate_test.go @@ -0,0 +1,21 @@ +package color + +import "testing" + +func TestIsHexColor(t *testing.T) { + cases := map[string]bool{ + "#fff": true, + "#ffffff": true, + "#ffffffff": true, + "#FFFF": true, + "#ggg": false, + "#fffffff": false, + "ffffff": false, + "": false, + } + for in, want := range cases { + if got := IsHexColor(in); got != want { + t.Fatalf("IsHexColor(%q)=%v want %v", in, got, want) + } + } +}