diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b4eb9504083..1a25a4a4753b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Don’t index into strings with the `theme(…)` function ([#19111](https://github.com/tailwindlabs/tailwindcss/pull/19111)) - Fix parsing issue when `\t` is used in at-rules ([#19130](https://github.com/tailwindlabs/tailwindcss/pull/19130)) - Upgrade: Canonicalize utilities containing `0` values ([#19095](https://github.com/tailwindlabs/tailwindcss/pull/19095)) +- Upgrade: Migrate deprecated `break-words` to `wrap-break-word` ([#19157](https://github.com/tailwindlabs/tailwindcss/pull/19157)) ## [4.1.14] - 2025-10-01 diff --git a/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap b/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap index 86f96852ca07..c2c6c6bc25f4 100644 --- a/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap +++ b/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap @@ -3606,7 +3606,6 @@ exports[`getClassList 1`] = ` "break-inside-avoid-page", "break-keep", "break-normal", - "break-words", "brightness-0", "brightness-50", "brightness-75", diff --git a/packages/tailwindcss/src/canonicalize-candidates.test.ts b/packages/tailwindcss/src/canonicalize-candidates.test.ts index 75c0d45d182e..0581e9734faa 100644 --- a/packages/tailwindcss/src/canonicalize-candidates.test.ts +++ b/packages/tailwindcss/src/canonicalize-candidates.test.ts @@ -531,6 +531,32 @@ describe.each([['default'], ['with-variant'], ['important'], ['prefix']])('%s', await expectCanonicalization(input, candidate, expected) }) + + test('`break-words` → `wrap-break-word`', async () => { + let candidate = 'break-words' + let expected = 'wrap-break-word' + + let input = css` + @import 'tailwindcss'; + ` + + await expectCanonicalization(input, candidate, expected) + }) + + test('`break-words` → `break-words` with custom implementation', async () => { + let candidate = 'break-words' + let expected = 'break-words' + + let input = css` + @import 'tailwindcss'; + + @utility break-words { + break: words; /* imagine this exists */ + } + ` + + await expectCanonicalization(input, candidate, expected) + }) }) describe('arbitrary variants', () => { diff --git a/packages/tailwindcss/src/canonicalize-candidates.ts b/packages/tailwindcss/src/canonicalize-candidates.ts index eae3e3b2cd04..727f3ca25a57 100644 --- a/packages/tailwindcss/src/canonicalize-candidates.ts +++ b/packages/tailwindcss/src/canonicalize-candidates.ts @@ -878,7 +878,10 @@ function bareValueUtilities(candidate: Candidate, options: SignatureOptions): Ca // ---- -const DEPRECATION_MAP = new Map([['order-none', 'order-0']]) +const DEPRECATION_MAP = new Map([ + ['order-none', 'order-0'], + ['break-words', 'wrap-break-word'], +]) function deprecatedUtilities(candidate: Candidate, options: SignatureOptions): Candidate { let designSystem = options.designSystem diff --git a/packages/tailwindcss/src/compat/legacy-utilities.ts b/packages/tailwindcss/src/compat/legacy-utilities.ts index 8667816a1fc6..54ae346e6005 100644 --- a/packages/tailwindcss/src/compat/legacy-utilities.ts +++ b/packages/tailwindcss/src/compat/legacy-utilities.ts @@ -92,4 +92,5 @@ export function registerLegacyUtilities(designSystem: DesignSystem) { }) designSystem.utilities.static('order-none', () => [decl('order', '0')]) + designSystem.utilities.static('break-words', () => [decl('overflow-wrap', 'break-word')]) } diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index f4a7a28d2b55..8c3768160918 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -2156,7 +2156,6 @@ export function createUtilities(theme: Theme) { ['overflow-wrap', 'normal'], ['word-break', 'normal'], ]) - staticUtility('break-words', [['overflow-wrap', 'break-word']]) staticUtility('break-all', [['word-break', 'break-all']]) staticUtility('break-keep', [['word-break', 'keep-all']])