diff --git a/.changeset/fuzzy-badges-focus.md b/.changeset/fuzzy-badges-focus.md
new file mode 100644
index 0000000000..c2e0601a9b
--- /dev/null
+++ b/.changeset/fuzzy-badges-focus.md
@@ -0,0 +1,5 @@
+---
+"@cloudflare/kumo": patch
+---
+
+Match a linkable Badge's focus outline to its pill shape.
diff --git a/packages/kumo/src/components/badge/badge.test.tsx b/packages/kumo/src/components/badge/badge.test.tsx
index d9fb4b640e..d4597d00fd 100644
--- a/packages/kumo/src/components/badge/badge.test.tsx
+++ b/packages/kumo/src/components/badge/badge.test.tsx
@@ -13,6 +13,7 @@ describe("Badge", () => {
render(Status);
const el = screen.getByText("Status");
expect(el.tagName).toBe("SPAN");
+ expect(el.getAttribute("data-kumo-component")).toBe("Badge");
});
it("merges custom className", () => {
diff --git a/packages/kumo/src/components/badge/badge.tsx b/packages/kumo/src/components/badge/badge.tsx
index f9b6355097..188cd56d71 100644
--- a/packages/kumo/src/components/badge/badge.tsx
+++ b/packages/kumo/src/components/badge/badge.tsx
@@ -276,6 +276,7 @@ export function Badge({
: "";
return (
{
@@ -78,6 +79,18 @@ describe("Link", () => {
expect(() => createElement(Link, props)).not.toThrow();
});
+ it("matches the pill shape of a direct Badge child", () => {
+ render(
+
+ View changelog
+ ,
+ );
+
+ expect(screen.getByRole("link").classList).toContain(
+ "has-[>[data-kumo-component=Badge]]:rounded-full",
+ );
+ });
+
it("should generate variant classes via linkVariants helper", () => {
expect(linkVariants({ variant: "inline" })).toContain("text-kumo-link");
expect(linkVariants({ variant: "current" })).toContain("text-current");
diff --git a/packages/kumo/src/components/link/link.tsx b/packages/kumo/src/components/link/link.tsx
index 9d4012b9fd..cd08867d9e 100644
--- a/packages/kumo/src/components/link/link.tsx
+++ b/packages/kumo/src/components/link/link.tsx
@@ -185,7 +185,7 @@ const LinkBase = forwardRef(function Link(
"data-kumo-component": "Link",
className: cn(
linkVariants({ variant }),
- "group/link inline-flex items-center gap-[0.1875em]",
+ "group/link inline-flex items-center gap-[0.1875em] has-[>[data-kumo-component=Badge]]:rounded-full",
),
} as useRender.ElementProps<"a">;