https://github.com/tailwindlabs/tailwindcss
テスト実行時に漏れ出ていた `console.warn` を `vi.spyOn` で抑制し、`@tailwindcss/node` の参照先を `dist/` から `src/` ファイルへ切り替えることでテスト出力をクリーンアップしました。`publishConfig` を使った exports の分離により、開発時はビルド不要でソース変更が即座に反映され、npm publish 時は従来通りビルド済みファイルが配布される二重構造が実現されています。
Vitestのインラインスナップショットでは、CSSがダブルクォートと結合した形式で記録されるためマージコンフリクトの解消が煩雑でした。今回導入された `pretty` ヘルパー関数が出力を `\n` で前後に挟むことで、CSSとスナップショットの区切り文字が明確に分離されます。また、空出力テストを `.toEqual('')` に変更することで意図しない出力を見逃しにくくなっています。
Tailwind CSSの負値正規化処理(canonicalization)で、`calc()` 式内の演算子周辺の空白が失われ無効なCSSが生成されるバグが修正されました。`calc()` ラッピング時に `addWhitespaceAroundMathOperators` を適用することで、`-left-[(var(--my-var1)+var(--my-var2))]` のような正規化後クラスからも有効なCSSが出力されるようになります。
scrollbar-width と scrollbar-color CSS プロパティに対応するユーティリティクラスが実験的機能として追加されました。scrollbar-auto / thin / none の静的ユーティリティと、CSS 変数ペアを経由してサムとトラックを独立して設定できる scrollbar-thumb-* / scrollbar-track-* カラーユーティリティが利用できるようになります。
`--value(…)` および `--modifier(…)` の内部で `--default(…)` を指定できるようになり、値なしで呼び出せる functional utility をCSSだけで定義できるようになりました。これにより `shadow/50` や `tab` のような引数省略パターンをJSベースAPIに頼らず実現でき、CSSファーストなユーティリティ定義の表現力が向上しています。
関数ユーティリティ(`@utility foo-*`)の定義において `--value(…)` の記述を必須とするバリデーションが追加されました。`utilities.ts` の条件式を `usedValueFn && !resolvedValueFn` から `!usedValueFn || !resolvedValueFn` に変更する最小限の修正で、ワイルドカード値が何にも使われないまま無限のクラスが生成されるバグを防ぎます。
Tailwind CSS のレガシーユーティリティ移管時に混入した、`start` および `end` が値なしでCSSを生成するバグが修正されました。`handleInset` 関数から不要なフォールバックロジックを削除し、`candidate.value === null` の厳密判定による早期リターンに置き換えることで、意図しないCSSの出力が抑制されます。
Vitestモックへの `using` 宣言(Explicit Resource Management)適用によるモック自動クリーンアップ、非推奨の `.toThrowError()` から `.toThrow()` への移行、誤ったバリアント名・テスト名・`@import`/`@reference` の誤用修正など、複数のテストコード品質改善をまとめて実施した。機能変更は含まないが、`using` 宣言によるモック後処理の自動化はテスト間の副作用を構造的に排除する実質的な改善である。
ソースマップのテスト検証を、座標の文字列比較からビジュアルなサイドバイサイド表示に刷新するため、新モジュール `visualize-source-map.ts` が追加されました。各マッピングポイントをA・B・C...の記号でハイライトし、Vitestのスナップショットテストと組み合わせることで、ソースマップの正確性をdiffとして直感的に確認できるようになります。プロダクションコードへの変更はなく、テスト基盤のみの改善です。
`@variant`ディレクティブがコンマ区切り(コンパウンド)とコロン区切り(スタック)による複数バリアント指定をサポートしました。これまで必要だったルールの重複記述やネストが不要になり、Tailwind CSSのクラス記法と統一されたシンタックスで簡潔に記述できます。完全な後方互換性を維持しつつ、`variants.ts`のAST処理ロジックを拡張することで実現されています。
Tailwind CSS v4で`Config`型を利用するTypeScriptプロジェクトでビルド時に発生していたTS2742エラーを修正。`export type Config = UserConfig`というtype aliasをdeclaration emit時に内部ハッシュファイルへ解決されてしまう問題に対し、`export interface Config extends UserConfig {}`への変更で解消しています。後方互換性を保ちつつ、公開APIとしての型の境界を明確にする最小限の修正です。
CSS の `@utility` に同じ名前で異なる値型のハンドラーを複数定義した場合、最初のハンドラーが `null` を返すと後続が試されずコンパイルが停止していたバグが修正されました。`compile.ts` の `null` 処理に `utility.options?.types?.length` の判定を追加し、型オプションなしの CSS `@utility` は `continue`、型オプションありの `matchUtilities` は従来通り即時終了と動作を分離。これにより `foo-red-500`(カラー)と `foo-123`(数値)のような同名・異型のユーティリティクラスを共存させることができます。
`@tailwindcss/upgrade` のアップグレードツールが、インライン `style` 属性内の `flex-grow` などのCSSプロパティ名をTailwindユーティリティクラスと誤認識して書き換えてしまうバグを修正。`inlineStyleAttributeValueRanges` を用いた範囲チェックを `isSafeMigration` 関数に追加し、`style` 属性値の内部に位置する候補を変換対象から除外するようになりました。
Tailwind CSS v4 のキャノニカライゼーション機能が拡張され、任意バリアント形式 `[&:has(…)]` が組み込みの `has-[…]` バリアントへ自動変換されるようになりました。変換は `has-[…]` への置換にとどまらず、内側のセレクターが `data-*` や `aria-*` に対応する場合はさらに適切な組み込みバリアントへと連鎖的に正規化されます。
Tailwind CSS のキャノニカライゼーション処理において、任意値内の単位が基本単位(px など)へ不要に変換されていたバグを修正。`constantFoldDeclarationAst` に `normalizeUnit` フラグを追加し、任意値処理では定数畳み込みのみを行い単位変換を行わないよう制御することで、`-mt-[20in]` が `mt-[-1920px]` ではなく `mt-[-20in]` へ正しく正規化されるようになった。
Tailwind CSSのCanonicalization処理で任意値内の `_`(空白)が不適切に除去される不具合を修正。セレクタ記号(`~`、`>`)を数学演算子と同じ `symbols` セットで管理し、前後にスペースを持つ記号を有意と判断するロジックへ刷新しました。あわせて、CSS関数の可読性が低下するケースに限り括弧を挿入する改善も導入されています。
`@tailwindcss/postcss` が PostCSS の `from` オプションなしで呼び出された際、`path.resolve('')` の挙動によりインポート解決のベースパスがプロジェクトルートの親ディレクトリになるバグを修正。`inputFile` が空の場合に既存の `base`(`opts.base ?? process.cwd()`)へフォールバックする1行の変更で、Turbopack など一部のバンドラーで発生していた `Can't resolve 'tailwindcss'` エラーが解消されます。
依存関係の一括更新に加え、`@tailwindcss-upgrade`においてコンパイラキャッシュの導入、マイグレーション前のキャッシュウォームアップ、および無限ループの修正という実質的なバグ修正が含まれています。`Stylesheet`クラスの`compiler()`と`designSystem()`はPromiseをそのままメモ化する設計を採用し、非同期処理の重複実行を防いでいます。
`@tailwindcss/vite`のフィーチャー検出ビットマスクに`Features.Variants`が欠落していたバグを修正。`@variant`のみを使用するCSSファイルがTailwindに処理されずブラウザへ素通りしていた問題が、1行の追加で解消されます。
`@tailwindcss/vite`において、ネストしたディレクトリ構造で同名のCSSファイルが存在する場合に`@import`が誤ったファイルを参照するバグが修正されました。ViteのリゾルバAPIに`base`ディレクトリではなく`importer`ファイルパスを渡すべきところ、誤ってディレクトリを渡していたことが原因で、`__placeholder__.css`を付加してファイルパスとして渡すことで根本解決しています。