diff --git a/packages/react/tests/components/number-field/number-field.test.tsx b/packages/react/tests/components/number-field/number-field.test.tsx index 98a05625b..5e4f8226d 100644 --- a/packages/react/tests/components/number-field/number-field.test.tsx +++ b/packages/react/tests/components/number-field/number-field.test.tsx @@ -6,6 +6,13 @@ import {FieldError} from "@/components/field-error"; import {Label} from "@/components/label"; import {NumberField} from "@/components/number-field"; +const stepperCompositions = [ + ["no stepper buttons", false, false], + ["only a decrement button", true, false], + ["only an increment button", false, true], + ["both stepper buttons", true, true], +] as const; + describe("NumberField", () => { let user: ReturnType; @@ -47,6 +54,27 @@ describe("NumberField", () => { expect(document.querySelector('[data-slot="number-field-decrement-button"]')).not.toBeNull(); }); + it.each(stepperCompositions)( + "supports composition with %s", + (_description, hasDecrement, hasIncrement) => { + render( + + + + {hasDecrement ? : null} + + {hasIncrement ? : null} + + , + ); + + const group = screen.getByTestId("number-field-group"); + + expect(group.querySelector('[slot="decrement"]') !== null).toBe(hasDecrement); + expect(group.querySelector('[slot="increment"]') !== null).toBe(hasIncrement); + }, + ); + it("exposes variant BEM modifier", () => { renderNumber({variant: "secondary"}); diff --git a/packages/styles/components/number-field.css b/packages/styles/components/number-field.css index 4139cf620..07cf4c224 100644 --- a/packages/styles/components/number-field.css +++ b/packages/styles/components/number-field.css @@ -18,7 +18,19 @@ @apply grid h-9 items-center overflow-hidden rounded-field border bg-field text-sm text-field-foreground shadow-field outline-none; border-width: var(--border-width-field); border-color: var(--field-border); - grid-template-columns: 40px 1fr 40px; + grid-template-columns: 1fr; + + &:has([slot="decrement"]) { + grid-template-columns: 40px 1fr; + } + + &:has([slot="increment"]) { + grid-template-columns: 1fr 40px; + } + + &:has([slot="decrement"]):has([slot="increment"]) { + grid-template-columns: 40px 1fr 40px; + } /** * Transitions