From 18fe39c40a79f9a27e4715bce81bd3158c631717 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 29 Jan 2025 20:44:43 +0100 Subject: [PATCH 1/4] add failing test --- packages/tailwindcss/src/utilities.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/tailwindcss/src/utilities.test.ts b/packages/tailwindcss/src/utilities.test.ts index 8e40d3816317..d57bffeaabee 100644 --- a/packages/tailwindcss/src/utilities.test.ts +++ b/packages/tailwindcss/src/utilities.test.ts @@ -6995,6 +6995,7 @@ test('grid-cols', async () => { expect( await run([ 'grid-cols', + 'grid-cols-0', '-grid-cols-none', '-grid-cols-subgrid', 'grid-cols--12', @@ -7043,6 +7044,7 @@ test('grid-rows', async () => { expect( await run([ 'grid-rows', + 'grid-rows-0', '-grid-rows-none', '-grid-rows-subgrid', 'grid-rows--12', From 78c26b3c4a7f275a56abe637fed26af7b98ec758 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 29 Jan 2025 20:44:48 +0100 Subject: [PATCH 2/4] do not produce `grid-cols-0` or `grid-rows-0` --- packages/tailwindcss/src/utilities.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index 2fb717fae418..b9b65aa2d33d 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -1752,6 +1752,7 @@ export function createUtilities(theme: Theme) { functionalUtility('grid-cols', { themeKeys: ['--grid-template-columns'], handleBareValue: ({ value }) => { + if (value === '0') return null if (!isPositiveInteger(value)) return null return `repeat(${value}, minmax(0, 1fr))` }, @@ -1763,6 +1764,7 @@ export function createUtilities(theme: Theme) { functionalUtility('grid-rows', { themeKeys: ['--grid-template-rows'], handleBareValue: ({ value }) => { + if (value === '0') return null if (!isPositiveInteger(value)) return null return `repeat(${value}, minmax(0, 1fr))` }, From ace3e44ad11abaa937b14a9ee26566826ae5da62 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 29 Jan 2025 20:47:17 +0100 Subject: [PATCH 3/4] update changelog --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c60d4490700e..e3481c52a7ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -- Nothing yet! +### Fixed + +- Only generate positive `grid-cols-*` and `grid-rows-*` utilities ([#16020](https://github.com/tailwindlabs/tailwindcss/pull/16020)) ## [4.0.1] - 2025-01-29 From 04bd0fc3809b8e8d7d708c5654fcc02890320e97 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 29 Jan 2025 20:52:57 +0100 Subject: [PATCH 4/4] use `isStrictPositiveInteger` --- packages/tailwindcss/src/utilities.ts | 7 +++---- packages/tailwindcss/src/utils/infer-data-type.ts | 5 +++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index b9b65aa2d33d..57f39e021358 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -17,6 +17,7 @@ import { DefaultMap } from './utils/default-map' import { inferDataType, isPositiveInteger, + isStrictPositiveInteger, isValidOpacityValue, isValidSpacingMultiplier, } from './utils/infer-data-type' @@ -1752,8 +1753,7 @@ export function createUtilities(theme: Theme) { functionalUtility('grid-cols', { themeKeys: ['--grid-template-columns'], handleBareValue: ({ value }) => { - if (value === '0') return null - if (!isPositiveInteger(value)) return null + if (!isStrictPositiveInteger(value)) return null return `repeat(${value}, minmax(0, 1fr))` }, handle: (value) => [decl('grid-template-columns', value)], @@ -1764,8 +1764,7 @@ export function createUtilities(theme: Theme) { functionalUtility('grid-rows', { themeKeys: ['--grid-template-rows'], handleBareValue: ({ value }) => { - if (value === '0') return null - if (!isPositiveInteger(value)) return null + if (!isStrictPositiveInteger(value)) return null return `repeat(${value}, minmax(0, 1fr))` }, handle: (value) => [decl('grid-template-rows', value)], diff --git a/packages/tailwindcss/src/utils/infer-data-type.ts b/packages/tailwindcss/src/utils/infer-data-type.ts index 56ab9c60cdde..9496986557e5 100644 --- a/packages/tailwindcss/src/utils/infer-data-type.ts +++ b/packages/tailwindcss/src/utils/infer-data-type.ts @@ -341,6 +341,11 @@ export function isPositiveInteger(value: any) { return Number.isInteger(num) && num >= 0 && String(num) === String(value) } +export function isStrictPositiveInteger(value: any) { + let num = Number(value) + return Number.isInteger(num) && num > 0 && String(num) === String(value) +} + export function isValidSpacingMultiplier(value: any) { return isMultipleOf(value, 0.25) }