Skip to content

Commit 6e9b524

Browse files
fix: top-align checkbox and radio indicators with multi-line labels (#539)
1 parent 6d5d9f0 commit 6e9b524

3 files changed

Lines changed: 14 additions & 6 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@cloudflare/kumo": patch
3+
---
4+
5+
Fixed vertical alignment of checkbox and radio indicators with multi-line labels.
6+
7+
When label text wrapped to multiple lines, the indicators were vertically centered against the entire text block. They now align to the top, sitting next to the first line of text.

packages/kumo/src/components/checkbox/checkbox.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,8 @@ const CheckboxBase = forwardRef<HTMLButtonElement, CheckboxProps>(
261261
disabled={disabled}
262262
onCheckedChange={onCheckedChange}
263263
className={cn(
264-
"relative flex h-4 w-4 items-center justify-center rounded-sm border-0 bg-kumo-base ring focus:outline-none after:absolute after:-inset-x-3 after:-inset-y-2",
264+
"relative flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border-0 bg-kumo-base ring focus:outline-none after:absolute after:-inset-x-3 after:-inset-y-2",
265+
label && "mt-0.5",
265266
variant === "error" ? "ring-kumo-danger" : "ring-kumo-hairline",
266267
!disabled &&
267268
"hover:ring-kumo-hairline focus:ring-kumo-focus focus:ring-2 focus-visible:ring-2 focus-visible:ring-kumo-brand",
@@ -298,7 +299,7 @@ const CheckboxBase = forwardRef<HTMLButtonElement, CheckboxProps>(
298299
<FieldBase.Root className="inline-flex">
299300
<FieldBase.Label
300301
className={cn(
301-
"!m-0 !min-h-0 !text-base inline-flex items-center gap-2",
302+
"!m-0 !min-h-0 !text-base inline-flex items-start gap-2",
302303
controlFirst ? "flex-row" : "flex-row-reverse justify-end",
303304
disabled ? "cursor-not-allowed" : "cursor-pointer",
304305
)}
@@ -340,7 +341,7 @@ const CheckboxItem = forwardRef<HTMLButtonElement, CheckboxItemProps>(
340341
return (
341342
<label
342343
className={cn(
343-
"m-0 relative inline-flex items-center gap-2",
344+
"m-0 relative inline-flex items-start gap-2",
344345
// Control first (default): checkbox before label
345346
// Label first: label before checkbox using flex-row-reverse
346347
!controlFirst && "flex-row-reverse justify-end",
@@ -357,7 +358,7 @@ const CheckboxItem = forwardRef<HTMLButtonElement, CheckboxItemProps>(
357358
disabled={disabled}
358359
onCheckedChange={onCheckedChange}
359360
className={cn(
360-
"peer relative flex h-4 w-4 items-center justify-center rounded-sm border-0 bg-kumo-base ring after:absolute after:-inset-x-3 after:-inset-y-2",
361+
"peer relative mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border-0 bg-kumo-base ring after:absolute after:-inset-x-3 after:-inset-y-2",
361362
variant === "error" ? "ring-kumo-danger" : "ring-kumo-hairline",
362363
!disabled &&
363364
"group-hover:ring-kumo-hairline hover:ring-kumo-hairline focus:ring-kumo-focus focus:ring-2 focus-visible:ring-2 focus-visible:ring-kumo-brand",

packages/kumo/src/components/radio/radio.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ const RadioItem = forwardRef<HTMLButtonElement, RadioItemProps>(
319319
return (
320320
<label
321321
className={cn(
322-
"m-0 group relative inline-flex items-center gap-2",
322+
"m-0 group relative inline-flex items-start gap-2",
323323
// "start" (default): radio before label
324324
// "end": label before radio using flex-row-reverse
325325
effectiveControlPosition === "end" && "flex-row-reverse justify-end",
@@ -332,7 +332,7 @@ const RadioItem = forwardRef<HTMLButtonElement, RadioItemProps>(
332332
value={value}
333333
disabled={disabled}
334334
className={cn(
335-
"relative flex h-4 w-4 shrink-0 items-center justify-center rounded-full border-0 bg-kumo-base ring focus:outline-none after:absolute after:-inset-x-3 after:-inset-y-2",
335+
"relative mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full border-0 bg-kumo-base ring focus:outline-none after:absolute after:-inset-x-3 after:-inset-y-2",
336336
variant === "error" ? "ring-kumo-danger" : "ring-kumo-line",
337337
!disabled &&
338338
variant !== "error" &&

0 commit comments

Comments
 (0)