mirror of
https://github.com/hanzoai/tailwindcss.git
synced 2026-09-24 17:03:14 +00:00
v4.2.0
273
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b56832751b |
4.2.0 (#19695)
Co-authored-by: Adam Wathan <[email protected]> |
||
|
|
ee63f38af5 |
Update enhanced-resolve 5.18.4 → 5.19.0 (minor) (#19658)
Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ enhanced-resolve (5.18.4 → 5.19.0) · [Repo](https://github.com/webpack/enhanced-resolve) <details> <summary>Release Notes</summary> <h4><a href="https://github.com/webpack/enhanced-resolve/releases/tag/v5.19.0">5.19.0</a></h4> <blockquote><h3 dir="auto">Features</h3> <ul dir="auto"> <li>Added TsconfigPathsPlugin (replacement for <code class="notranslate">tsconfig-paths-webpack-plugin</code>) .</li> </ul></blockquote> <p><em>Does any of this look wrong? <a href="https://depfu.com/packages/npm/enhanced-resolve/feedback">Please let us know.</a></em></p> </details> <details> <summary>Commits</summary> <p><a href="https://github.com/webpack/enhanced-resolve/compare/e8a6ac9fdd88d579e20f4c487d6081d8e7b3093f...24ba2335540a77c9b019d66d28f995324866a718">See the full diff on Github</a>. The new version differs by 4 commits:</p> <ul> <li><a href="https://github.com/webpack/enhanced-resolve/commit/24ba2335540a77c9b019d66d28f995324866a718"><code>chore(release): 5.19.0</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/10dc3bc8b8734ab644d91abd979bc8ee4ad64532"><code>chore: update eslint config webpack (#471)</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/0d6c6c0fd9a156843d5d8e0cafa71450c1ee9e0a"><code>feat: added TsconfigPathsPlugin (replacement for tsconfig-paths-webpack-plugin) (#463)</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/958aa8921909f2a2662ae09f239a0f96b9b32c2d"><code>chore: migrate to npm from yarn (#469)</code></a></li> </ul> </details> ---  [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`. <details><summary>All Depfu comment commands</summary> <blockquote><dl> <dt>@depfu rebase</dt><dd>Rebases against your default branch and redoes this update</dd> <dt>@depfu recreate</dt><dd>Recreates this PR, overwriting any edits that you've made to it</dd> <dt>@depfu merge</dt><dd>Merges this PR once your tests are passing and conflicts are resolved</dd> <dt>@depfu cancel merge</dt><dd>Cancels automatic merging of this PR</dd> <dt>@depfu close</dt><dd>Closes this PR and deletes the branch</dd> <dt>@depfu reopen</dt><dd>Restores the branch and reopens this PR (if it's closed)</dd> <dt>@depfu pause</dt><dd>Ignores all future updates for this dependency and closes this PR</dd> <dt>@depfu pause [minor|major]</dt><dd>Ignores all future minor/major updates for this dependency and closes this PR</dd> <dt>@depfu resume</dt><dd>Future versions of this dependency will create PRs again (leaves this PR as is)</dd> </dl></blockquote> </details> Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> |
||
|
|
476e8f961a |
Update semver 7.7.3 → 7.7.4 (patch) (#19667)
Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ semver (7.7.3 → 7.7.4) · [Repo](https://github.com/npm/node-semver) · [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md) <details> <summary>Release Notes</summary> <h4><a href="https://github.com/npm/node-semver/releases/tag/v7.7.4">7.7.4</a></h4> <blockquote><h2 dir="auto"> <a href="https://bounce.depfu.com/github.com/npm/node-semver/compare/v7.7.3...v7.7.4">7.7.4</a> (2026-01-16)</h2> <h3 dir="auto">Bug Fixes</h3> <ul dir="auto"> <li> <a href="https://bounce.depfu.com/github.com/npm/node-semver/commit/a29faa5f3309a01c8e5aeb965fb5c02c4c4e80e2"><code class="notranslate">a29faa5</code></a> <a href="https://bounce.depfu.com/github.com/npm/node-semver/pull/835">#835</a> cli: pass options to semver.valid() for loose version validation (<a href="https://bounce.depfu.com/github.com/npm/node-semver/pull/835">#835</a>) (<a href="https://bounce.depfu.com/github.com/mldangelo">@mldangelo</a>)</li> </ul> <h3 dir="auto">Documentation</h3> <ul dir="auto"> <li> <a href="https://bounce.depfu.com/github.com/npm/node-semver/commit/1d28d5e82de16163daf721a7c76fff93e0d333ab"><code class="notranslate">1d28d5e</code></a> <a href="https://bounce.depfu.com/github.com/npm/node-semver/pull/836">#836</a> fix typos and update -n CLI option documentation (<a href="https://bounce.depfu.com/github.com/npm/node-semver/pull/836">#836</a>) (<a href="https://bounce.depfu.com/github.com/mldangelo">@mldangelo</a>)</li> </ul> <h3 dir="auto">Dependencies</h3> <ul dir="auto"> <li> <a href="https://bounce.depfu.com/github.com/npm/node-semver/commit/120968b76760cb0db85a72bde2adedd0e9628793"><code class="notranslate">120968b</code></a> <a href="https://bounce.depfu.com/github.com/npm/node-semver/pull/840">#840</a> <code class="notranslate">@npmcli/[email protected].0</code> (<a href="https://bounce.depfu.com/github.com/npm/node-semver/pull/840">#840</a>)</li> </ul> <h3 dir="auto">Chores</h3> <ul dir="auto"> <li> <a href="https://bounce.depfu.com/github.com/npm/node-semver/commit/44d7130c60cedd3703048aa671bb1d659b79ab07"><code class="notranslate">44d7130</code></a> <a href="https://bounce.depfu.com/github.com/npm/node-semver/pull/824">#824</a> bump @npmcli/eslint-config from 5.1.0 to 6.0.0 (<a href="https://bounce.depfu.com/github.com/npm/node-semver/pull/824">#824</a>) (<a href="https://bounce.depfu.com/github.com/dependabot">@dependabot</a>[bot])</li> <li> <a href="https://bounce.depfu.com/github.com/npm/node-semver/commit/70735767b68a1775eb67ac816b183b4a422101f4"><code class="notranslate">7073576</code></a> <a href="https://bounce.depfu.com/github.com/npm/node-semver/pull/820">#820</a> reorder parameters in invalid-versions.js test (<a href="https://bounce.depfu.com/github.com/npm/node-semver/pull/820">#820</a>) (<a href="https://bounce.depfu.com/github.com/reggi">@reggi</a>)</li> <li> <a href="https://bounce.depfu.com/github.com/npm/node-semver/commit/5816d4cfd6d85169527a2bc22fbd5bf4c64f34e3"><code class="notranslate">5816d4c</code></a> <a href="https://bounce.depfu.com/github.com/npm/node-semver/pull/829">#829</a> bump @npmcli/template-oss from 4.28.0 to 4.28.1 (<a href="https://bounce.depfu.com/github.com/npm/node-semver/pull/829">#829</a>) (<a href="https://bounce.depfu.com/github.com/dependabot">@dependabot</a>[bot], <a href="https://bounce.depfu.com/github.com/npm-cli-bot">@npm-cli-bot</a>)</li> </ul></blockquote> <p><em>Does any of this look wrong? <a href="https://depfu.com/packages/npm/semver/feedback">Please let us know.</a></em></p> </details> <details> <summary>Commits</summary> <p><a href="https://github.com/npm/node-semver/compare/a25789b09b1192fa8414c35f2cd679ae2e1d5192...5993c2e42bdf17c5f03e6360da51bc707fcee460">See the full diff on Github</a>. The new version differs by 10 commits:</p> <ul> <li><a href="https://github.com/npm/node-semver/commit/5993c2e42bdf17c5f03e6360da51bc707fcee460"><code>chore: release 7.7.4 (#839)</code></a></li> <li><a href="https://github.com/npm/node-semver/commit/120968b76760cb0db85a72bde2adedd0e9628793"><code>deps: @npmcli/[email protected].0 (#840)</code></a></li> <li><a href="https://github.com/npm/node-semver/commit/a29faa5f3309a01c8e5aeb965fb5c02c4c4e80e2"><code>fix(cli): pass options to semver.valid() for loose version validation (#835)</code></a></li> <li><a href="https://github.com/npm/node-semver/commit/1d28d5e82de16163daf721a7c76fff93e0d333ab"><code>docs: fix typos and update -n CLI option documentation (#836)</code></a></li> <li><a href="https://github.com/npm/node-semver/commit/5816d4cfd6d85169527a2bc22fbd5bf4c64f34e3"><code>chore: bump @npmcli/template-oss from 4.28.0 to 4.28.1 (#829)</code></a></li> <li><a href="https://github.com/npm/node-semver/commit/ab9e28a582f524e8d40157f3d2b75fcc764d0765"><code>chore: bump @npmcli/template-oss from 4.27.1 to 4.28.0 (#827)</code></a></li> <li><a href="https://github.com/npm/node-semver/commit/44d7130c60cedd3703048aa671bb1d659b79ab07"><code>chore: bump @npmcli/eslint-config from 5.1.0 to 6.0.0 (#824)</code></a></li> <li><a href="https://github.com/npm/node-semver/commit/70735767b68a1775eb67ac816b183b4a422101f4"><code>chore: reorder parameters in invalid-versions.js test (#820)</code></a></li> <li><a href="https://github.com/npm/node-semver/commit/16a35f5df4bb142d781229a09158c4e9970c1f5a"><code>chore: bump @npmcli/template-oss from 4.26.0 to 4.27.1 (#823)</code></a></li> <li><a href="https://github.com/npm/node-semver/commit/3a3459da45389bd024ac907cbc21ca5a24beaa05"><code>chore: bump @npmcli/template-oss from 4.25.1 to 4.26.0 (#818)</code></a></li> </ul> </details> ---  [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`. <details><summary>All Depfu comment commands</summary> <blockquote><dl> <dt>@depfu rebase</dt><dd>Rebases against your default branch and redoes this update</dd> <dt>@depfu recreate</dt><dd>Recreates this PR, overwriting any edits that you've made to it</dd> <dt>@depfu merge</dt><dd>Merges this PR once your tests are passing and conflicts are resolved</dd> <dt>@depfu cancel merge</dt><dd>Cancels automatic merging of this PR</dd> <dt>@depfu close</dt><dd>Closes this PR and deletes the branch</dd> <dt>@depfu reopen</dt><dd>Restores the branch and reopens this PR (if it's closed)</dd> <dt>@depfu pause</dt><dd>Ignores all future updates for this dependency and closes this PR</dd> <dt>@depfu pause [minor|major]</dt><dd>Ignores all future minor/major updates for this dependency and closes this PR</dd> <dt>@depfu resume</dt><dd>Future versions of this dependency will create PRs again (leaves this PR as is)</dd> </dl></blockquote> </details> Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> |
||
|
|
32b424ab3c |
docs: update package README CI badge to main (#19692)
## Summary Update the GitHub Actions CI status badge URLs in `packages/*/README.md` to track `branch=main` instead of `branch=next`. This matches the root README, keeps the badges consistent across the repo, and ensures the displayed CI status reflects the default branch. ## Test plan Docs-only change. Verified the updated badge URLs in the modified `packages/*/README.md` files use `ci.yml?branch=main`. |
||
|
|
f596734cfc |
Fix Tailwind CSS package README GitHub links (#19644)
<!-- 👋 Hey, thanks for your interest in contributing to Tailwind! **Please ask first before starting work on any significant new features.** It's never a fun experience to have your pull request declined after investing a lot of time and effort into a new feature. To avoid this from happening, we request that contributors create a discussion to first discuss any significant new features. For more info, check out the contributing guide: https://github.com/tailwindcss/tailwindcss/blob/main/.github/CONTRIBUTING.md --> ## Summary These package READMEs referenced the wrong GitHub org (tailwindcss/tailwindcss) and outdated branches (master/next) for common project links. Update them to point at tailwindlabs/tailwindcss on main for releases, license, discussions, and contributing docs. <!-- Provide a summary of the issue and the changes you're making. How does your change solve the problem? --> ## Test plan Docs-only change: No test required. <!-- Explain how you tested your changes. Include the exact commands that you used to verify the change works and include screenshots/screen recordings of the update behavior in the browser if applicable. --> |
||
|
|
c9ad92a0a6 |
Bump dependencies (#19608)
This PR bumps a bunch of dependencies. This also moves a few dependencies that we use in multiple packages to the pnpm catalog. Closes: #19603, #19604, #19576, #19575, #19573, #19565, #19547, #19546, #19545, #19609, #19581, #19620, #19619 - #19603 - #19604 - #19576 - #19575 - #19573 - #19565 - #19547 - #19546 - #19545 - #19609 - #19581 - https://github.com/tailwindlabs/tailwindcss/pull/19620 - #19620 - #19619 ## Test Plan All tests in CI should still pass. [ci-all] |
||
|
|
f5f15845fd | Fix typo in comment (#19493) | ||
|
|
665dfabe1f |
Update dedent 1.7.0 → 1.7.1 (patch) (#19484)
Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ dedent (1.7.0 → 1.7.1) · [Repo](https://github.com/dmnd/dedent) · [Changelog](https://github.com/dmnd/dedent/blob/main/CHANGELOG.md) ---  [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`. <details><summary>All Depfu comment commands</summary> <blockquote><dl> <dt>@depfu rebase</dt><dd>Rebases against your default branch and redoes this update</dd> <dt>@depfu recreate</dt><dd>Recreates this PR, overwriting any edits that you've made to it</dd> <dt>@depfu merge</dt><dd>Merges this PR once your tests are passing and conflicts are resolved</dd> <dt>@depfu cancel merge</dt><dd>Cancels automatic merging of this PR</dd> <dt>@depfu close</dt><dd>Closes this PR and deletes the branch</dd> <dt>@depfu reopen</dt><dd>Restores the branch and reopens this PR (if it's closed)</dd> <dt>@depfu pause</dt><dd>Ignores all future updates for this dependency and closes this PR</dd> <dt>@depfu pause [minor|major]</dt><dd>Ignores all future minor/major updates for this dependency and closes this PR</dd> <dt>@depfu resume</dt><dd>Future versions of this dependency will create PRs again (leaves this PR as is)</dd> </dl></blockquote> </details> Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> |
||
|
|
46bd8f1a8f |
Update enhanced-resolve 5.18.3 → 5.18.4 (patch) (#19462)
Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ enhanced-resolve (5.18.3 → 5.18.4) · [Repo](https://github.com/webpack/enhanced-resolve) <details> <summary>Release Notes</summary> <h4><a href="https://github.com/webpack/enhanced-resolve/releases/tag/v5.18.4">5.18.4</a></h4> <blockquote><h3 dir="auto">Fixes</h3> <ul dir="auto"> <li>Allow subpath imports that start with <code class="notranslate">#/</code> </li> <li>Handle <code class="notranslate">file:</code> schema</li> </ul></blockquote> <p><em>Does any of this look wrong? <a href="https://depfu.com/packages/npm/enhanced-resolve/feedback">Please let us know.</a></em></p> </details> <details> <summary>Commits</summary> <p><a href="https://github.com/webpack/enhanced-resolve/compare/52b61d0f0318318a6e5b3e8c905c887824f9303a...e8a6ac9fdd88d579e20f4c487d6081d8e7b3093f">See the full diff on Github</a>. The new version differs by 6 commits:</p> <ul> <li><a href="https://github.com/webpack/enhanced-resolve/commit/e8a6ac9fdd88d579e20f4c487d6081d8e7b3093f"><code>chore(release): 5.18.4</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/b953768580163f410c3893870f34c3e88c11ada6"><code>fix: support `file:` schema (#467)</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/6ff935b23610868febd0bba7082607ee9085dbe2"><code>fix: allow subpath imports that start with `#/` (#468)</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/79e2961c600527dee81c8ad0fb804529b1d36757"><code>fix(AliasPlugin): correct wildcard replacement in multi-target aliases (#465)</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/b8af8130f0c0a4284861893e18dc12c8af319ca2"><code>fix: fix always-false condition (#464)</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/f1bc1c2b0b9d72df7b1eddc099266a65368332f6"><code>fix: note the conditions under which the request couldn't be found (#460)</code></a></li> </ul> </details> ---  [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`. <details><summary>All Depfu comment commands</summary> <blockquote><dl> <dt>@depfu rebase</dt><dd>Rebases against your default branch and redoes this update</dd> <dt>@depfu recreate</dt><dd>Recreates this PR, overwriting any edits that you've made to it</dd> <dt>@depfu merge</dt><dd>Merges this PR once your tests are passing and conflicts are resolved</dd> <dt>@depfu cancel merge</dt><dd>Cancels automatic merging of this PR</dd> <dt>@depfu close</dt><dd>Closes this PR and deletes the branch</dd> <dt>@depfu reopen</dt><dd>Restores the branch and reopens this PR (if it's closed)</dd> <dt>@depfu pause</dt><dd>Ignores all future updates for this dependency and closes this PR</dd> <dt>@depfu pause [minor|major]</dt><dd>Ignores all future minor/major updates for this dependency and closes this PR</dd> <dt>@depfu resume</dt><dd>Future versions of this dependency will create PRs again (leaves this PR as is)</dd> </dl></blockquote> </details> Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> |
||
|
|
4055eeacb5 | Release v4.1.18 (#19431) | ||
|
|
fc650645fe |
Update postcss-selector-parser 7.1.0 → 7.1.1 (patch) (#19408)
Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ postcss-selector-parser (7.1.0 → 7.1.1) · [Repo](https://github.com/postcss/postcss-selector-parser) · [Changelog](https://github.com/postcss/postcss-selector-parser/blob/master/CHANGELOG.md) <details> <summary>Release Notes</summary> <h4><a href="https://github.com/postcss/postcss-selector-parser/releases/tag/v7.1.1">7.1.1</a></h4> <blockquote><h1 dir="auto">7.1.1</h1> <ul dir="auto"> <li>perf: replace startsWith with strict equality (<a href="https://bounce.depfu.com/github.com/postcss/postcss-selector-parser/pull/308">#308</a>)</li> <li>fix(types): add walkUniversal declaration (<a href="https://bounce.depfu.com/github.com/postcss/postcss-selector-parser/pull/311">#311</a>)</li> </ul></blockquote> <p><em>Does any of this look wrong? <a href="https://depfu.com/packages/npm/postcss-selector-parser/feedback">Please let us know.</a></em></p> </details> <details> <summary>Commits</summary> <p><a href="https://github.com/postcss/postcss-selector-parser/compare/ea6cd9324b4be90a4c529c3602deefbc4a2d7a82...cf6637ed6a2dbc9d24bc3a1d04ec7ac4629dd856">See the full diff on Github</a>. The new version differs by 6 commits:</p> <ul> <li><a href="https://github.com/postcss/postcss-selector-parser/commit/cf6637ed6a2dbc9d24bc3a1d04ec7ac4629dd856"><code>chore(release): 7.1.1</code></a></li> <li><a href="https://github.com/postcss/postcss-selector-parser/commit/54cef58801b32f9c4101cea5b8c7bc0432238466"><code>fix(types): add `walkUniversal` declaration (#311)</code></a></li> <li><a href="https://github.com/postcss/postcss-selector-parser/commit/3da25fecba8110ccda23b69de3b00dde5bd1cd5b"><code>perf: replace startsWith with strict equality (#308)</code></a></li> <li><a href="https://github.com/postcss/postcss-selector-parser/commit/b647f7c70fefa3bdf118229705002b5a886bda34"><code>ci: test on Node.js 24 (#307)</code></a></li> <li><a href="https://github.com/postcss/postcss-selector-parser/commit/337129d1e3174d131717113c2ad131325b72d24e"><code>chore: replace abandoned pkg coveralls with coveralls-next</code></a></li> <li><a href="https://github.com/postcss/postcss-selector-parser/commit/6343f29e08c6fa9c1d2610fb72bf851b1aeffe69"><code>ci: test on Node.js 22 (#301)</code></a></li> </ul> </details> ---  [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`. <details><summary>All Depfu comment commands</summary> <blockquote><dl> <dt>@depfu rebase</dt><dd>Rebases against your default branch and redoes this update</dd> <dt>@depfu recreate</dt><dd>Recreates this PR, overwriting any edits that you've made to it</dd> <dt>@depfu merge</dt><dd>Merges this PR once your tests are passing and conflicts are resolved</dd> <dt>@depfu cancel merge</dt><dd>Cancels automatic merging of this PR</dd> <dt>@depfu close</dt><dd>Closes this PR and deletes the branch</dd> <dt>@depfu reopen</dt><dd>Restores the branch and reopens this PR (if it's closed)</dd> <dt>@depfu pause</dt><dd>Ignores all future updates for this dependency and closes this PR</dd> <dt>@depfu pause [minor|major]</dt><dd>Ignores all future minor/major updates for this dependency and closes this PR</dd> <dt>@depfu resume</dt><dd>Future versions of this dependency will create PRs again (leaves this PR as is)</dd> </dl></blockquote> </details> Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> |
||
|
|
17f211005f |
Improve compatibility with special default values in JS configs (#19348)
Fixes #19345 In v3 the `ringColor.DEFAULT` option was used as the default color for ring utilities (when it was defined). This currently gets translated as `--ring-color` but that doesn't work this way in v4. Instead it should translate to `--default-ring-color` and *not* `--ring-color`. I've also tweaked the upgrade tool to handle this properly as well. |
||
|
|
7659bc90c5 |
Revert "Update globby 15.0.0 → 16.0.0 (major) (#19357)"
This reverts commit
|
||
|
|
7de57584f9 |
Update globby 15.0.0 → 16.0.0 (major) (#19357)
Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ globby (15.0.0 → 16.0.0) · [Repo](https://github.com/sindresorhus/globby) <details> <summary>Release Notes</summary> <h4><a href="https://github.com/sindresorhus/globby/releases/tag/v16.0.0">16.0.0</a></h4> <blockquote><h3 dir="auto">Breaking</h3> <ul dir="auto"> <li>Respect parent .gitignore files when <code class="notranslate">gitignore</code> option is enabled <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/b9a9a84c76064378b5a9fca3769efb890ab42bc4"><tt>b9a9a84</tt></a> <ul dir="auto"> <li>When <code class="notranslate">{gitignore: true}</code>, Globby now searches for .gitignore files up to the Git repo root (if detected). This matches Git's actual behavior where parent .gitignore patterns apply to subdirectories. Previously, only .gitignore files within the glob search path were considered. This change could break existing code that relied on the previous, more limited behavior.</li> </ul> </li> </ul> <h3 dir="auto">Improvements</h3> <ul dir="auto"> <li>Support negation-only patterns <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/1273541cca2824bdeff1afc3d1e7995e7f5d04e6"><tt>1273541</tt></a> </li> <li>Respect custom fs implementation from options <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/c2eb2725204be092fe013d6a3f2920b30ac1cc3c"><tt>c2eb272</tt></a> </li> <li>Add some more options to <code class="notranslate">isGitIgnored</code> functions <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/e794ff905affec6dd20b25ede00fd7e3264edbb3"><tt>e794ff9</tt></a> </li> <li>Improve error message for invalid <code class="notranslate">cwd</code> option <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/7535e6d74c9170c188c819bbd55834750c0b9f1d"><tt>7535e6d</tt></a> </li> </ul> <h3 dir="auto">Fixes</h3> <ul dir="auto"> <li>Fix <code class="notranslate">{gitignore: true}</code> performance issue <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/fcb07c390733ec90d939e73ce9d869c696730a02"><tt>fcb07c3</tt></a> </li> <li>Fix bundler compatibility <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/e6c72c9ff8ad41d095032e6cc6e72c29d2339bde"><tt>e6c72c9</tt></a> </li> <li>Fix parent directory patterns with <code class="notranslate">gitignore</code> option <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/11dd2dfae37aaa966a568e10837d973d461b9ead"><tt>11dd2df</tt></a> </li> <li>Fix ignore patterns with parent directory references <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/a58d117b0e37a740096112f1dc133e400e18d835"><tt>a58d117</tt></a> </li> <li>Fix types for <code class="notranslate">stats</code> option <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/c10f600c61941becda43f959eca64d4417e0ed31"><tt>c10f600</tt></a> </li> </ul> <hr> <p dir="auto"><a href="https://bounce.depfu.com/github.com/sindresorhus/globby/compare/v15.0.0...v16.0.0"><tt>v15.0.0...v16.0.0</tt></a></p></blockquote> <p><em>Does any of this look wrong? <a href="https://depfu.com/packages/npm/globby/feedback">Please let us know.</a></em></p> </details> <details> <summary>Commits</summary> <p><a href="https://github.com/sindresorhus/globby/compare/b65747ec179b2541b0f2269ee5ac539ccc124504...cdbb6a2e661cb6137fdf959700a755393f8ac23f">See the full diff on Github</a>. The new version differs by 22 commits:</p> <ul> <li><a href="https://github.com/sindresorhus/globby/commit/cdbb6a2e661cb6137fdf959700a755393f8ac23f"><code>16.0.0</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/e6c72c9ff8ad41d095032e6cc6e72c29d2339bde"><code>Fix bundler compatibility</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/b9a9a84c76064378b5a9fca3769efb890ab42bc4"><code>Respect parent .gitignore files when `gitignore` option is enabled</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/db9cb722a04cd52edde4725851426c4d1e7d3f53"><code>Add test for `suppressErrors` option with file patterns</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/69e0ee7bbe75cd9b7174607ee6ef0582ce2c49a8"><code>Add test for ignore option with trailing slashes</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/11dd2dfae37aaa966a568e10837d973d461b9ead"><code>Fix parent directory patterns with `gitignore` option</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/e4d09180fb5b856575c7addbcbfdda93823bc34a"><code>Add tests for special characters in directory names</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/f92613260e99e6a61376b79354a3dd3a65ee2ab1"><code>Improve path check in gitignore logic</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/7535e6d74c9170c188c819bbd55834750c0b9f1d"><code>Improve error message for invalid `cwd` option</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/c10f600c61941becda43f959eca64d4417e0ed31"><code>Fix types for `stats` option</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/a58d117b0e37a740096112f1dc133e400e18d835"><code>Fix ignore patterns with parent directory references</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/40022f39278ae7748800090af377d3036164fb42"><code>Improve Windows path documentation</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/1273541cca2824bdeff1afc3d1e7995e7f5d04e6"><code>Support negation-only patterns</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/c2eb2725204be092fe013d6a3f2920b30ac1cc3c"><code>Respect custom fs implementation from options</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/aa694e08474a581ea84df70e06a45aa7c0f4bc6e"><code>Improve docs for `convertPathToPattern`</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/306a82ddc7b0c68ee32d9105b6550d414b5a51dc"><code>Add test for .npmignore in subdirectories</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/9370b3574ec0866361b8418fc37162a7a0a181f1"><code>Clarify `gitignore` priority in documentation</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/c743dad53b1607701c61681c0e5445f4144b90df"><code>Add test for nested gitignore with negation</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/e794ff905affec6dd20b25ede00fd7e3264edbb3"><code>Add some more options to isGitIgnored functions</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/fcb07c390733ec90d939e73ce9d869c696730a02"><code>Fix `{gitignore: true}` performance issue</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/2dee4320b602b05ee03f891b156de40cc4039d62"><code>Add tests for some fast-glob limitations</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/6da24d3e2be13dd4bf77d1d37489af442a0aa221"><code>Add test for gitignore patterns starting with `./` or `../`</code></a></li> </ul> </details> ---  [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`. <details><summary>All Depfu comment commands</summary> <blockquote><dl> <dt>@depfu rebase</dt><dd>Rebases against your default branch and redoes this update</dd> <dt>@depfu recreate</dt><dd>Recreates this PR, overwriting any edits that you've made to it</dd> <dt>@depfu merge</dt><dd>Merges this PR once your tests are passing and conflicts are resolved</dd> <dt>@depfu cancel merge</dt><dd>Cancels automatic merging of this PR</dd> <dt>@depfu close</dt><dd>Closes this PR and deletes the branch</dd> <dt>@depfu reopen</dt><dd>Restores the branch and reopens this PR (if it's closed)</dd> <dt>@depfu pause</dt><dd>Ignores all future updates for this dependency and closes this PR</dd> <dt>@depfu pause [minor|major]</dt><dd>Ignores all future minor/major updates for this dependency and closes this PR</dd> <dt>@depfu resume</dt><dd>Future versions of this dependency will create PRs again (leaves this PR as is)</dd> </dl></blockquote> </details> Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> |
||
|
|
92eabdef9a |
Bump Vitest to v4 (#19216)
This PR bumps Vitest from v2 to v4. As far as I know we don't use any Vitest specific features in our tests, but had to upgrade the `vitest.workspace.ts` file to a `vitest.config.ts` file instead. The only features we use are the typical `describe`, `it`, `test`, and `expect` functions. The only other part we use is `vi.spyOn` and `vi.fn` but those didn't change in API either. The test shards were removed to prevent errors. Not all suites have enough files / tests to be broken up into 3 parts so Vitest now errors when that happens. ### Test plan 1. All tests should pass in CI. 2. All integration tests should pass in CI. --------- Co-authored-by: Jordan Pittman <[email protected]> |
||
|
|
4ccd9379c4 |
Handle future and experimental config keys during upgrade (#19344)
Fixes #19342 |
||
|
|
df82141adb |
bump turbo (#19179)
The Bun build issue was caused by Turborepo passing through `USERPROFILE` from the env. Probably need to file a bug with Bun: ``` Works: env: USERPROFILE: undefined CWD: `D:\a\tailwindcss\tailwindcss\packages\@tailwindcss-standalone` Fails: env: USERPROFILE: "C:\Users\runneradmin" CWD: `D:\a\tailwindcss\tailwindcss\packages\@tailwindcss-standalone` ``` |
||
|
|
d204802ae6 | Release v4.1.17 (#19272) | ||
|
|
07b0c21c3e | Release 4.1.16 (#19185) | ||
|
|
4c04075629 |
Improve memory usage during canonicalization (#19171)
This PR drastically improves the memory usage when performing canonicalization if you swap out the underlying DesignSystem often. This will be most noticeable in Intellisense. The big issue we had is that we used module scoped Map objects where we cache data based on the DesignSystem. If you then create new design systems (often), then the cache would just keep growing and growing. This PR solves that by essentially storing all the caches on the Design System itself. This way, when you throw away a Design System, all the caches go with it. Another approach would've been to use a WeakMap, but then we would have to make sure that no strong references to the DesignSystem exist anywhere else, otherwise we would still have the same memory issues. Note: make sure to go commit by commit and use `?w=1` to ignore whitespace changes. ## Test plan 1. All existing tests pass Not super sure how to test this as part of the test suite without making it slow But I also don't think that's super necessary either. Here is an experiment I did where I introduce 5 design systems: <img width="1326" height="274" alt="image" src="https://github.com/user-attachments/assets/817025e3-0f5b-44be-949b-54ed08f5b3fb" /> On the current `main` branch, this looks like: <img width="619" height="69" alt="image" src="https://github.com/user-attachments/assets/588ae99b-c978-4c01-bfd1-5cc0725723a8" /> In this PR, the memory usage looks like: <img width="512" height="56" alt="image" src="https://github.com/user-attachments/assets/0052ad21-7b99-4edf-8a14-8ccef52362db" /> The memory usage is stable, but to actually prove that we can still track multiple design systems, let's track them all in a `Set` so garbage collection cannot get rid of the unused design system objects: <img width="847" height="230" alt="image" src="https://github.com/user-attachments/assets/5f044927-3d53-4c15-8145-78eb2b4d6d54" /> Now we're sort of back to the current situation on `main`: <img width="507" height="53" alt="image" src="https://github.com/user-attachments/assets/868c0238-8646-41ce-8151-e0ef6dd17d64" /> |
||
|
|
b6034d42fa | Release 4.1.15 (#19159) | ||
|
|
3d4fdf691b |
Generalize the walk implementation (#19126)
This PR generalizes the `walk` implementations we have. What's important
here is that we currently have multiple `walk` implementations, one for
the AST, one for the `SelectorParser`, one for the `ValueParser`.
Sometimes, we also need to go up the tree in a depth-first manner. For
that, we have `walkDepth` implementations.
The funny thing is, all these implementations are very very similar,
even the kinds of trees are very similar. They are just objects with
`nodes: []` as children.
So this PR introduces a generic `walk` function that can work on all of
these trees.
There are also some situations where you need to go down and back up the
tree. For this reason, we added an `enter` and `exit` phase:
```ts
walk(ast, {
enter(node, ctx) {},
exit(node, ctx) {},
})
```
This means that you don't need to `walk(ast)` and later `walkDepth(ast)`
in case you wanted to do something _after_ visiting all nodes.
The API of these walk functions also slightly changed to fix some
problems we've had before. One is the `replaceWith` function. You could
technically call it multiple times, but that doesn't make sense so
instead you always have to return an explicit `WalkAction`. The
possibilities are:
```ts
// The ones we already had
WalkAction.Continue // Continue walking as normal, the default behavior
WalkAction.Skip // Skip walking the `nodes` of the current node
WalkAction.Stop // Stop the entire walk
// The new ones
WalkAction.Replace(newNode) // Replace the current node, and continue walking the new node(s)
WalkAction.ReplaceSkip(newNode) // Replace the current node, but don't walk the new node(s)
WalkAction.ReplaceStop(newNode) // Replace the current node, but stop the entire walk
```
To make sure that we can walk in both directions, and to make sure we
have proper control over when to walk which nodes, the `walk` function
is implemented in an iterative manner using a stack instead of
recursion.
This also means that a `WalkAction.Stop` or `WalkAction.ReplaceStop`
will immediately stop the walk, without unwinding the entire call stack.
Some notes:
- The CSS AST does have `context` nodes, for this we can build up the
context lazily when we need it. I added a `cssContext(ctx)` that gives
you an enhanced context including the `context` object that you can read
information from.
- The second argument of the `walk` function can still be a normal
function, which is equivalent to `{ enter: fn }`.
Let's also take a look at some numbers. With this new implementation,
each `walk` is roughly ~1.3-1.5x faster than before. If you look at the
memory usage (especially in Bun) we go from `~2.2GB` peak memory usage,
to `~300mb` peak memory usage.
Some benchmarks on small and big trees (M1 Max):
<img width="2062" height="1438" alt="image"
src="https://github.com/user-attachments/assets/5ec8c22a-9de8-4e08-869a-18c0d30eb7e8"
/>
<img width="2062" height="1246" alt="image"
src="https://github.com/user-attachments/assets/e89d4b8e-29ca-4aee-8fd2-b7c043d3bbf4"
/>
We also ran some benchmarks on @thecrypticace's M3 Max:
<img width="1598" height="1452" alt="image"
src="https://github.com/user-attachments/assets/3b06b6fe-2497-4f24-a428-1a0e2af3896a"
/>
In node the memory difference isn't that big, but the performance itself
is still better:
<img width="2034" height="1586" alt="image"
src="https://github.com/user-attachments/assets/ef28ae14-b53e-4912-9621-531f3b02898f"
/>
In summary:
1. Single `walk` implementation for multiple use cases
2. Support for `enter` and `exit` phases
3. New `WalkAction` possibilities for better control
4. Overall better performance
5. ... and lower memory usage
## Test plan
1. All tests still pass (but had to adjust some of the APIs if `walk`
was used inside tests).
2. Added new tests for the `walk` implementation
3. Ran local benchmarks to verify the performance improvements
|
||
|
|
3a2eece281 | Update semver to version 7.7.3 | ||
|
|
4e47ce4880 | Canonicalize dimensions (#19101) | ||
|
|
2367e6494b |
Canonicalization constant folding and handling zeros (#19095)
The main goal of this PR was to support canonicalization of zero like values. We essentially want to canonicalize `-mt-0` as `mt-0`, but also `mt-[0px]`, `mt-[0rem]`, and other length-like units to just `mt-0`. To do this, we had to handle 2 things: 1. We introduced some more constant folding, including making `0px` and `0rem` fold to `0`. We only do this for length units. We also normalize `-0`, `+0`, `-0.0` and so on to `0`. 2. While pre-computing utilities in our lookup table, we make sure that we prefer `mt-0` over `-mt-0` if both result in the same signature. Moved some of the constant folding logic into its own function and added a bunch of separate tests for it. ## Test plan Added more unit tests where we normalize different zero-like values to `0`. Running the canonicalization logic: ```js designSystem.canonicalizeCandidates([ '-m-0', '-m-[-0px]', '-m-[-0rem]', '-m-[0px]', '-m-[0rem]', 'm-0', 'm-[-0px]', 'm-[-0rem]', 'm-[0px]', 'm-[0rem]', 'm-[calc(var(--spacing)*0)]', 'm-[--spacing(0)]', 'm-[--spacing(0.0)]', 'm-[+0]', 'm-[-0]', '-m-[-0]', '-m-[+0]', ]) // → ['m-0'] ``` --------- Co-authored-by: Jordan Pittman <[email protected]> |
||
|
|
4137348b5e |
Fix resolving colors via theme(…) in compat mode with nested objects (#19097)
This PR fixes an issue when loading (nested) colors from a config file
and later referencing it via the `theme(…)` function in CSS.
Given a config like this:
```js
module.exports = {
theme: {
colors: {
foo: 'var(--foo-foo)',
'foo-bar': 'var(--foo-foo-bar)',
},
},
}
```
We internally map this into the design system. The issue here is that
the `foo` and `foo-bar` are overlapping and it behaves more like this:
```js
{
foo: {
DEFAULT: 'var(--foo-foo)',
bar: 'var(--foo-foo-bar)'
},
}
```
So while we can easily resolve `colors.foo-bar`, the `colors.foo` would
result in the object with a `DEFAULT` key. This PR solves that by using
the `DEFAULT` key if we end up with an object that has it.
If you end up resolving an object (`theme(colors)`) then the behavior is
unchanged.
## Test plan
1. Added a test based on the config in the issue (which failed before
this fix).
2. Also simplified the test case after identifying the problem (with the
`DEFAULT` key).
Fixes: #19091
|
||
|
|
6ae141c9d1 |
Improve performance of cloning AST nodes (#19067)
This PR improves the performance of when we need to clone some AST
nodes. We have a few places where we clone `Candidate`, `Variant` and
CSS `AST` nodes.
Right now we use `structuredClone`, which works, but it is a generic
solution. However, we do know the exact structure of these AST nodes, so
we can write specialized clone functions that are much faster.
## Test plan
1. All the tests still pass with this change
2. The performance is better:
```
cloneCandidate - src/candidate.bench.ts > Candidate cloning
1.72x faster than cloneCandidate (spread)
74.03x faster than structuredClone
cloneAstNode() - src/ast.bench.ts > Cloning AST nodes
1.15x faster than cloneAstNode (with spread)
33.54x faster than structuredClone()
```
Ready for review, but should be merged after #19059
|
||
|
|
51d09f6176 |
Introduce canonicalizeCandidates on the internal Design System (#19059)
This PR introduces a new `canonicalizeCandidates` function on the internal Design System. The big motivation to moving this to the core `tailwindcss` package is that we can use this in various places: - The Raycast extension - The VS Code extension / language server - 3rd party tools that use the Tailwind CSS design system APIs > This PR looks very big, but **I think it's best to go over the changes commit by commit**. Basically all of these steps already existed in the upgrade tool, but are now moved to our core `tailwindcss` package. Here is a list of all the changes: - Added a new `canonicalizeCandidates` function to the design system - Moved various migration steps to the core package. I inlined them in the same file and because of that I noticed a specific pattern (more on this later). - Moved `printCandidate` tests to the `tailwindcss` package - Setup tests for `canonicalizeCandidates` based on the existing tests in the upgrade tool. I noticed that all the migrations followed a specific pattern: 1. Parse the raw candidate into a `Candidate[]` AST 2. In a loop, try to migrate the `Candidate` to a new `Candidate` (this often handled both the `Candidate` and its `Variant[]`) 3. If something changed, print the new `Candidate` back to a string, and pass it to the next migration step. While this makes sense in isolation, we are doing a lot of repeated work by parsing, modifying, and printing the candidate multiple times. This let me to introduce the `big refactor` commit. This changes the steps to: 1. Up front, parse the raw candidate into a `Candidate[]` _once_. 2. Strip the variants and the important marker from the candidate. This means that each migration step only has to deal with the base `utility` and not care about the variants or the important marker. We can re-attach these afterwards. 3. Instead of a `rawCandidate: string`, each migration step receives an actual `Candidate` object (or a `Variant` object). 4. I also split up the migration steps for the `Candidate` and the `Variant[]`. All of this means that there is a lot less work that needs to be done. We can also cache results between migrations. So `[@media_print]:flex` and `[@media_print]:block` will result in `print:flex` and `print:block` respectively, but the `[@media_print]` part is only migrated once across both candidates. One migration step relied on the `postcss-selector-parser` package to parse selectors and attribute selectors. I didn't want to introduce a package just for this, so instead used our own `SelectorParser` in the migration and wrote a small `AttributeSelectorParser` that can parse the attribute selector into a little data structure we can work with instead. If we want, we can split this PR up into smaller pieces, but since the biggest chunk is moving existing code around, I think it's fairly doable to review as long as you go commit by commit. --- With this new API, we can turn: ``` [ 'bg-red-500', 'hover:bg-red-500', '[@media_print]:bg-red-500', 'hover:[@media_print]:bg-red-500', 'bg-red-500/100', 'hover:bg-red-500/100', '[@media_print]:bg-red-500/100', 'hover:[@media_print]:bg-red-500/100', 'bg-[var(--color-red-500)]', 'hover:bg-[var(--color-red-500)]', '[@media_print]:bg-[var(--color-red-500)]', 'hover:[@media_print]:bg-[var(--color-red-500)]', 'bg-[var(--color-red-500)]/100', 'hover:bg-[var(--color-red-500)]/100', '[@media_print]:bg-[var(--color-red-500)]/100', 'hover:[@media_print]:bg-[var(--color-red-500)]/100', 'bg-(--color-red-500)', 'hover:bg-(--color-red-500)', '[@media_print]:bg-(--color-red-500)', 'hover:[@media_print]:bg-(--color-red-500)', 'bg-(--color-red-500)/100', 'hover:bg-(--color-red-500)/100', '[@media_print]:bg-(--color-red-500)/100', 'hover:[@media_print]:bg-(--color-red-500)/100', 'bg-[color:var(--color-red-500)]', 'hover:bg-[color:var(--color-red-500)]', '[@media_print]:bg-[color:var(--color-red-500)]', 'hover:[@media_print]:bg-[color:var(--color-red-500)]', 'bg-[color:var(--color-red-500)]/100', 'hover:bg-[color:var(--color-red-500)]/100', '[@media_print]:bg-[color:var(--color-red-500)]/100', 'hover:[@media_print]:bg-[color:var(--color-red-500)]/100', 'bg-(color:--color-red-500)', 'hover:bg-(color:--color-red-500)', '[@media_print]:bg-(color:--color-red-500)', 'hover:[@media_print]:bg-(color:--color-red-500)', 'bg-(color:--color-red-500)/100', 'hover:bg-(color:--color-red-500)/100', '[@media_print]:bg-(color:--color-red-500)/100', 'hover:[@media_print]:bg-(color:--color-red-500)/100', '[background-color:var(--color-red-500)]', 'hover:[background-color:var(--color-red-500)]', '[@media_print]:[background-color:var(--color-red-500)]', 'hover:[@media_print]:[background-color:var(--color-red-500)]', '[background-color:var(--color-red-500)]/100', 'hover:[background-color:var(--color-red-500)]/100', '[@media_print]:[background-color:var(--color-red-500)]/100', 'hover:[@media_print]:[background-color:var(--color-red-500)]/100' ] ``` Into their canonicalized form: ``` [ 'bg-red-500', 'hover:bg-red-500', 'print:bg-red-500', 'hover:print:bg-red-500' ] ``` The list is also unique, so we won't end up with `bg-red-500 bg-red-500` twice. While the canonicalization itself is fairly fast, we still pay a **~1s** startup cost for some migrations (once, and cached for the entire lifetime of the design system). I would like to keep improving the performance and the kinds of migrations we do, but I think this is a good start. The cost we pay is for: 1. Generating a full list of all possible utilities based on the `getClassList` suggestions API. 2. Generating a full list of all possible variants. The canonicalization step for this list takes **~2.9ms** on my machine. Just for fun, if you use the `getClassList` API for intellisense that generates all the suggestions and their modifiers, you get a list of **263788** classes. If you canonicalize all of these, it takes **~500ms** in total. So roughly **~1.9μs** per candidate. This new API doesn't result in a performance difference for normal Tailwind CSS builds. The other potential concern is file size of the package. The generated `tailwindcss.tgz` file changed like this: ```diff - 684652 bytes (684.65 kB) + 749169 bytes (749.17 kB) ``` So the package increased by ~65 kB which I don't think is the end of the world, but it is important for the `@tailwindcss/browser` build which we don't want to grow unnecessarily. For this reason we remove some of the code for the design system conditionally such that you don't pay this cost in an environment where you will never need this API. The `@tailwindcss/browser` build looks like this: ```shell `dist/index.global.js 255.14 KB` (main) `dist/index.global.js 272.61 KB` (before this change) `dist/index.global.js 252.83 KB` (after this change, even smaller than on `main`) ``` |
||
|
|
61ebaee72b |
Update globby 14.1.0 → 15.0.0 (major) (#19056)
Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ globby (14.1.0 → 15.0.0) · [Repo](https://github.com/sindresorhus/globby) <details> <summary>Release Notes</summary> <h4><a href="https://github.com/sindresorhus/globby/releases/tag/v15.0.0">15.0.0</a></h4> <blockquote><h3 dir="auto">Breaking</h3> <ul dir="auto"> <li>Require Node.js 20 <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/4ae42c8bbd84676f219e37573a986b59c2c3877b"><tt>4ae42c8</tt></a> </li> </ul> <h3 dir="auto">Fixes</h3> <ul dir="auto"> <li>Fix <code class="notranslate">expandDirectories</code> not working with globstar patterns <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/98d691ad73b3b6aca77d4f5706a04799d0e39790"><tt>98d691a</tt></a> </li> <li>Fix relative paths with gitignore option <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/b4d78d80398f6793a0a2d241525f5ed00c74a6b7"><tt>b4d78d8</tt></a> </li> <li>Fix gitignore patterns in subdirectories not applying recursively <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/2cb6088a0a4c45b2687c8c5c181fcd12f7dc2c63"><tt>2cb6088</tt></a> </li> <li>Fix TypeScript types for <code class="notranslate">globbyStream</code> to correctly yield strings <a href="https://bounce.depfu.com/github.com/sindresorhus/globby/commit/1c7f3ed116f8c62b69378cb084a3b9922d507722"><tt>1c7f3ed</tt></a> </li> </ul> <hr> <p dir="auto"><a href="https://bounce.depfu.com/github.com/sindresorhus/globby/compare/v14.1.0...v15.0.0"><tt>v14.1.0...v15.0.0</tt></a></p></blockquote> <p><em>Does any of this look wrong? <a href="https://depfu.com/packages/npm/globby/feedback">Please let us know.</a></em></p> </details> <details> <summary>Commits</summary> <p><a href="https://github.com/sindresorhus/globby/compare/60d7de54476f9ba9734c1b6923fba39d6589de5f...b65747ec179b2541b0f2269ee5ac539ccc124504">See the full diff on Github</a>. The new version differs by 7 commits:</p> <ul> <li><a href="https://github.com/sindresorhus/globby/commit/b65747ec179b2541b0f2269ee5ac539ccc124504"><code>15.0.0</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/4ae42c8bbd84676f219e37573a986b59c2c3877b"><code>Require Node.js 20</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/98d691ad73b3b6aca77d4f5706a04799d0e39790"><code>Fix `expandDirectories` not working with globstar patterns</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/b4d78d80398f6793a0a2d241525f5ed00c74a6b7"><code>Fix relative paths with gitignore option</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/2cb6088a0a4c45b2687c8c5c181fcd12f7dc2c63"><code>Fix gitignore patterns in subdirectories not applying recursively</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/0a4df0eeeded8cdbfaae0db2612cfd446e26ed53"><code>Document performance implications of `gitignore` option</code></a></li> <li><a href="https://github.com/sindresorhus/globby/commit/1c7f3ed116f8c62b69378cb084a3b9922d507722"><code>Fix TypeScript types for `globbyStream` to correctly yield strings</code></a></li> </ul> </details> ---  [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`. <details><summary>All Depfu comment commands</summary> <blockquote><dl> <dt>@depfu rebase</dt><dd>Rebases against your default branch and redoes this update</dd> <dt>@depfu recreate</dt><dd>Recreates this PR, overwriting any edits that you've made to it</dd> <dt>@depfu merge</dt><dd>Merges this PR once your tests are passing and conflicts are resolved</dd> <dt>@depfu cancel merge</dt><dd>Cancels automatic merging of this PR</dd> <dt>@depfu close</dt><dd>Closes this PR and deletes the branch</dd> <dt>@depfu reopen</dt><dd>Restores the branch and reopens this PR (if it's closed)</dd> <dt>@depfu pause</dt><dd>Ignores all future updates for this dependency and closes this PR</dd> <dt>@depfu pause [minor|major]</dt><dd>Ignores all future minor/major updates for this dependency and closes this PR</dd> <dt>@depfu resume</dt><dd>Future versions of this dependency will create PRs again (leaves this PR as is)</dd> </dl></blockquote> </details> Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> |
||
|
|
98d96020bc |
Prepare v4.1.14 release (#19037)
Co-authored-by: Robin Malfait <[email protected]> |
||
|
|
b0feff98ec |
Ensure first class inside className in React is migrated (#19031)
### 1. Handling React className migration The PR fixes an issue when migrating React components to tailwind v4 with the migration tool, that the first class after `className="` is ignored. For example, when migrating ```JSX <div className="shadow"></div> ``` `shadow` will not be migrated to `shadow-sm` . This is because in `is-safe-migration.ts`, it tests the line before candidate with regex `/(?<!:?class)=['"]$/`. This basically skips the migration for anything like `foo="shadow"`, with only exception for Vue (eg. `class="shadow"`). The PR changes the regex from ```regex /(?<!:?class)=['"]$/ ```` to ```regex /(?<!:?class|className)=['"]$/ ``` which essentially adds a new exception specifically for React's `className="shadow"` case. ### 2. Removing redundant rules Besides, I found that several other rules in `CONDITIONAL_TEMPLATE_SYNTAX` being redundant since they are already covered by the rule above, so I removed them. If we prefer the previous explicit approach, I can revert it. ## Test plan <!-- Explain how you tested your changes. Include the exact commands that you used to verify the change works and include screenshots/screen recordings of the update behavior in the browser if applicable. --> Tests added for both the Vue and React classes to prevent false negative cases. --------- Co-authored-by: Jordan Pittman <[email protected]> |
||
|
|
354286604b |
Show version mismatch when running upgrade tool (#19028)
This PR fixes an issue where sometimes people try to run the upgrade tool, reset the changes and then try again. If this happens, then the `package.json` and/or your lock file will point to the old Tailwind CSS v3 version, but the actual installed version will be v4. This will also cause the upgrade tool to now upgrade from v4 to v4, which is not what most people want if they were trying to upgrade from v3 to v4. This in turn will cause some issues because now we won't try to migrate the config file, or v3-specific classes that also exist in v4 but are only safe to upgrade from v3 to v4. This PR uses `npm ls tailwindcss` to determine the actual installed version. This command already errors if there is a mismatch between the installed version and the version in `package.json` or the lock file. This also happens to work in pnpm and bun projects (added integration tests for these). If for whatever reason we can't determine the expected version, we fall back to the old behavior of just upgrading. In this scenario, the changes introduced in https://github.com/tailwindlabs/tailwindcss/pull/19026 will at least give you a hint of what version was actually installed. ### Test plan 1. Tested it in a v3 project where I performed the following steps: 1. Run the upgrade tool in full (`npx tailwindcss-upgrade`) 2. Reset the changes (`git reset --hard && git clean -df`) 1. Run the upgrade tool again This resulted in the following output: <img width="1059" height="683" alt="image" src="https://github.com/user-attachments/assets/1d2ea2d1-b602-4631-958f-cc21eb8a633f" /> 2. Added some integration tests to make sure this also works in pnpm, bun and normal npm projects. [ci-all] |
||
|
|
9c0147fea0 |
Add Upgrading from Tailwind CSS v… when running upgrade tool (#19026)
This PR adds a bit more information when running the upgrade tool to know what version of Tailwind CSS you're upgrading from. This will help users and maintainers when things go wrong. Will have another PR up soon that errors when the Tailwind CSS version in package.json and node_modules don't match. ### Test plan Ran this one one of our older projects and saw the version logged correctly. <img width="1055" height="363" alt="image" src="https://github.com/user-attachments/assets/5cbf4c52-ea0f-42c8-bd55-5bae2ed511de" /> |
||
|
|
6b81283810 |
Update dedent 1.6.0 → 1.7.0 (minor) (#19010)
Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ dedent (1.6.0 → 1.7.0) · [Repo](https://github.com/dmnd/dedent) · [Changelog](https://github.com/dmnd/dedent/blob/main/CHANGELOG.md) <details> <summary>Release Notes</summary> <h4><a href="https://github.com/dmnd/dedent/releases/tag/v1.7.0">1.7.0</a></h4> <blockquote><h2 dir="auto">What's Changed</h2> <ul dir="auto"> <li>docs: cleaned up README.md badges by <a href="https://bounce.depfu.com/github.com/JoshuaKGoldberg">@JoshuaKGoldberg</a> in <a href="https://bounce.depfu.com/github.com/dmnd/dedent/pull/100">#100</a> </li> <li>feat: add alignValues option by <a href="https://bounce.depfu.com/github.com/PaperStrike">@PaperStrike</a> in <a href="https://bounce.depfu.com/github.com/dmnd/dedent/pull/102">#102</a> </li> <li>1.7.0 by <a href="https://bounce.depfu.com/github.com/JoshuaKGoldberg">@JoshuaKGoldberg</a> in <a href="https://bounce.depfu.com/github.com/dmnd/dedent/pull/103">#103</a> </li> </ul> <h2 dir="auto">New Contributors</h2> <ul dir="auto"> <li> <a href="https://bounce.depfu.com/github.com/PaperStrike">@PaperStrike</a> made their first contribution in <a href="https://bounce.depfu.com/github.com/dmnd/dedent/pull/102">#102</a> </li> </ul> <p dir="auto"><strong>Full Changelog</strong>: <a href="https://bounce.depfu.com/github.com/dmnd/dedent/compare/v1.6.0...v1.7.0"><tt>v1.6.0...v1.7.0</tt></a></p></blockquote> <p><em>Does any of this look wrong? <a href="https://depfu.com/packages/npm/dedent/feedback">Please let us know.</a></em></p> </details> <details> <summary>Commits</summary> <p><a href="https://github.com/dmnd/dedent/compare/ab2ce25762a6ad0c26c563075f87c74427092d02...dd15cf58368b9842a256425a0f24cd7f8fd3df68">See the full diff on Github</a>. The new version differs by 3 commits:</p> <ul> <li><a href="https://github.com/dmnd/dedent/commit/dd15cf58368b9842a256425a0f24cd7f8fd3df68"><code>1.7.0 (#103)</code></a></li> <li><a href="https://github.com/dmnd/dedent/commit/304d0fc79567ef62da296b213525589ade7a711e"><code>feat: add alignValues option (#102)</code></a></li> <li><a href="https://github.com/dmnd/dedent/commit/aab442c691ba3608a5401df57b5e817533c9eed0"><code>docs: cleaned up README.md badges (#100)</code></a></li> </ul> </details> ---  [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`. <details><summary>All Depfu comment commands</summary> <blockquote><dl> <dt>@depfu rebase</dt><dd>Rebases against your default branch and redoes this update</dd> <dt>@depfu recreate</dt><dd>Recreates this PR, overwriting any edits that you've made to it</dd> <dt>@depfu merge</dt><dd>Merges this PR once your tests are passing and conflicts are resolved</dd> <dt>@depfu cancel merge</dt><dd>Cancels automatic merging of this PR</dd> <dt>@depfu close</dt><dd>Closes this PR and deletes the branch</dd> <dt>@depfu reopen</dt><dd>Restores the branch and reopens this PR (if it's closed)</dd> <dt>@depfu pause</dt><dd>Ignores all future updates for this dependency and closes this PR</dd> <dt>@depfu pause [minor|major]</dt><dd>Ignores all future minor/major updates for this dependency and closes this PR</dd> <dt>@depfu resume</dt><dd>Future versions of this dependency will create PRs again (leaves this PR as is)</dd> </dl></blockquote> </details> Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> |
||
|
|
867a86ccd5 |
Update @types/semver 7.7.0 → 7.7.1 (patch) (#19005)
Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ @types/semver (7.7.0 → 7.7.1) · [Repo](https://github.com/DefinitelyTyped/DefinitelyTyped) Sorry, we couldn't find anything useful about this release. ---  [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`. <details><summary>All Depfu comment commands</summary> <blockquote><dl> <dt>@depfu rebase</dt><dd>Rebases against your default branch and redoes this update</dd> <dt>@depfu recreate</dt><dd>Recreates this PR, overwriting any edits that you've made to it</dd> <dt>@depfu merge</dt><dd>Merges this PR once your tests are passing and conflicts are resolved</dd> <dt>@depfu cancel merge</dt><dd>Cancels automatic merging of this PR</dd> <dt>@depfu close</dt><dd>Closes this PR and deletes the branch</dd> <dt>@depfu reopen</dt><dd>Restores the branch and reopens this PR (if it's closed)</dd> <dt>@depfu pause</dt><dd>Ignores all future updates for this dependency and closes this PR</dd> <dt>@depfu pause [minor|major]</dt><dd>Ignores all future minor/major updates for this dependency and closes this PR</dd> <dt>@depfu resume</dt><dd>Future versions of this dependency will create PRs again (leaves this PR as is)</dd> </dl></blockquote> </details> Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> |
||
|
|
ebb21ed91f |
Revert "Update all pnpm dependencies (2025-09-20) (#18971)"
This reverts commit
|
||
|
|
a7dbf7db6e |
Update all pnpm dependencies (2025-09-20) (#18971)
This is your weekly update of **all** pnpm dependencies. Please take a good look at what changed and the test results before merging this pull request. ### What changed? ✳️ eslint (9.33.0 → 9.35.0, minor) · [Repo](https://github.com/eslint/eslint) · [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) · [Release](https://github.com/eslint/eslint/releases/tag/v9.35.0) · [Diff](https://github.com/eslint/eslint/compare/a90d7c4fe5ef83054e29d21d7ffb442103429d03...8401101d1e3e3e4e1edc2a9e59cafc9956bf2610) ✳️ eslint-config-next (15.4.7 → 15.5.2, minor) ✳️ magic-string (0.30.18 → 0.30.19, minor) · [Repo](https://github.com/rich-harris/magic-string) · [Changelog](https://github.com/Rich-Harris/magic-string/blob/master/CHANGELOG.md) · [Diff](https://github.com/rich-harris/magic-string/compare/0005025c1849f294b3978547e4cb46f2869c9864...bdef7d5ab5087f279d999a9c148f0c5c3a64259e) ✳️ @types/bun (1.2.20 → 1.2.21, patch) · [Repo](https://github.com/DefinitelyTyped/DefinitelyTyped) ✳️ @types/react (19.1.9 → 19.1.13, patch) · [Repo](https://github.com/DefinitelyTyped/DefinitelyTyped) ✳️ @types/react-dom (19.1.7 → 19.1.9, patch) · [Repo](https://github.com/DefinitelyTyped/DefinitelyTyped) ✳️ @types/semver (7.7.0 → 7.7.1, patch) · [Repo](https://github.com/DefinitelyTyped/DefinitelyTyped) ✳️ @vitejs/plugin-react (5.0.0 → 5.0.2, patch) · [Repo](https://github.com/vitejs/vite-plugin-react) · [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) ✳️ bun (1.2.20 → 1.2.21, patch) · [Repo](https://github.com/oven-sh/bun) ✳️ turbo (2.5.4 → 2.5.6, patch) · [Repo](https://github.com/turborepo/turbo) ---  [Depfu](https://depfu.com) will only send you the next scheduled PR once you merge or close this one. <details><summary>All Depfu comment commands</summary> <blockquote><dl> <dt>@depfu refresh</dt><dd>Rebases against your default branch and redoes this update</dd> <dt>@depfu recreate</dt><dd>Recreates this PR, overwriting any edits that you've made to it</dd> <dt>@depfu merge</dt><dd>Merges this PR once your tests are passing and conflicts are resolved</dd> <dt>@depfu cancel merge</dt><dd>Cancels automatic merging of this PR</dd> <dt>@depfu close</dt><dd>Closes this PR and deletes the branch</dd> <dt>@depfu reopen</dt><dd>Restores the branch and reopens this PR (if it's closed)</dd> </dl></blockquote> </details> Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> |
||
|
|
e19236e6ea |
Do not migrate variant = 'outline' during upgrades (#18922)
This PR improves the upgrade tool for shadcn/ui projects where the
`variant = "outline"` is incorrectly migrated to `variant =
"outline-solid"`.
This PR also handles a few more cases:
```ts
// As default argument
function Button({ variant = "outline", ...props }: ButtonProps) { }
// With different kinds of quotes (single, double, backticks)
function Button({ variant = 'outline', ...props }: ButtonProps) { }
// Regardless of whitespace
function Button({ variant="outline", ...props }: ButtonProps) { }
// In JSX
<Button variant="outline" />
// With different quotes and using JavaScript expressions
<Button variant={'outline'} />
// As an object property
buttonVariants({ variant: "outline" })
```
|
||
|
|
906ca1aa38 | Prepare v4.1.13 release (#18868) | ||
|
|
9e96e654e1 |
Fix missing code block delimiters in comment blocks (#18837)
## Summary I fixed some code blocks inside comment blocks that were missing delimiters. |
||
|
|
023624485e |
Migrate supports theme keys (#18817)
This PR is a follow up of #18815 and #18816, but this time let's migrate the `supports` theme keys. Let's imagine you have the following Tailwind CSS v3 configuration: ```ts export default { content: ['./src/**/*.html'], theme: { extend: { supports: { // Automatically handled by bare values (using CSS variable as the value) foo: 'foo: var(--foo)', // parentheses are optional bar: '(bar: var(--bar))', // Not automatically handled because names differ baz: 'qux: var(--foo)', // ^^^ ^^^ ← different names // Custom grid: 'display: grid', }, }, }, } ``` Then we would generate the following Tailwind CSS v4 CSS: ```css @custom-variant supports-baz { @supports (qux: var(--foo)) { @slot; } } @custom-variant supports-grid { @supports (display: grid) { @slot; } } ``` Notice how we didn't generate a custom variant for `data-foo` or `data-bar` because those are automatically handled by bare values. I also went with the longer form of `@custom-variant`, we could use the single selector approach, but that felt less clear to me. ```css @custom-variant supports-baz (@supports (qux: var(--foo))); @custom-variant supports-grid (@supports (display: grid)); ``` --------- Co-authored-by: Jordan Pittman <[email protected]> |
||
|
|
952012b35a |
Migrate data theme keys (#18816)
This PR is similar to and a follow up of #18815, but this time to migrate the `data` theme keys. Let's imagine you have the following Tailwind CSS v3 configuration: ```ts export default { content: ['./src/**/*.html'], theme: { extend: { data: { // Automatically handled by bare values foo: 'foo', // ^^^ ^^^ ← same names // Not automatically handled by bare values bar: 'baz', // ^^^ ^^^ ← different names // Completely custom checked: 'ui~="checked"', }, }, }, } ``` Then we would generate the following Tailwind CSS v4 CSS: ```css @custom-variant data-bar (&[data-baz]); @custom-variant data-checked (&[data-ui~="checked"]); ``` Notice how we didn't generate a custom variant for `data-foo` because those are automatically handled by bare values. |
||
|
|
7ee86a9983 |
Migrate aria theme keys (#18815)
This PR migrates `aria` theme keys when migrating from Tailwind CSS v3 to v4. While working on improving some of the error messages to get more insights into why migrating the JS file changed (https://github.com/tailwindlabs/tailwindcss/pull/18808), I ran into an issue where I couldn't think of a good comment to why `aria` theme keys were not being migrated. (Internally we have `aria` "blocked"). So instead of figuring out a good error message..., I just went ahead and added the migration for `aria` theme keys. Let's imagine you have the following Tailwind CSS v3 configuration: ```ts export default { content: ['./src/**/*.html'], theme: { extend: { aria: { // Built-in (not really, but visible because of intellisense) busy: 'busy="true"', // Automatically handled by bare values foo: 'foo="true"', // ^^^ ^^^ ← same names // Not automatically handled by bare values because names differ bar: 'baz="true"', // ^^^ ^^^ ← different names // Completely custom asc: 'sort="ascending"', desc: 'sort="descending"', }, }, }, } ``` Then we would generate the following Tailwind CSS v4 CSS: ```css @custom-variant aria-bar (&[aria-baz="true"]); @custom-variant aria-asc (&[aria-sort="ascending"]); @custom-variant aria-desc (&[aria-sort="descending"]); ``` Notice how we didn't generate a custom variant for `aria-busy` or `aria-foo` because those are automatically handled by bare values. We could also emit a comment near the CSS to warn about the fact that `@custom-variant` will always be sorted _after_ any other built-in variants. This could result in slightly different behavior, or different order of classes when using `prettier-plugin-tailwindcss`. I don't know how important this is, because before this PR we would just use `@config './tailwind.config.js';`. Edit: when using the `@config` we override `aria` and extend it, which means that it would be in the expected order 🤔 --------- Co-authored-by: Jordan Pittman <[email protected]> |
||
|
|
da6cb85df1 |
Prepare v4.1.12 release (#18728)
Co-authored-by: Jordan Pittman <[email protected]> Co-authored-by: Adam Wathan <[email protected]> |
||
|
|
c7810b3066 |
Update enhanced-resolve 5.18.2 → 5.18.3 (patch) (#18726)
Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ enhanced-resolve (5.18.2 → 5.18.3) · [Repo](https://github.com/webpack/enhanced-resolve) <details> <summary>Release Notes</summary> <h4><a href="https://github.com/webpack/enhanced-resolve/releases/tag/v5.18.3">5.18.3</a></h4> <blockquote><h3 dir="auto">Fixes</h3> <ul dir="auto"> <li>Fixed nonsensible intersection in types</li> </ul> <h3 dir="auto">Performance</h3> <ul dir="auto"> <li>Decreased initial loading time</li> </ul></blockquote> <p><em>Does any of this look wrong? <a href="https://depfu.com/packages/npm/enhanced-resolve/feedback">Please let us know.</a></em></p> </details> <details> <summary>Commits</summary> <p><a href="https://github.com/webpack/enhanced-resolve/compare/0bf45033f4cb12e034819c4e420ca12965619fc8...52b61d0f0318318a6e5b3e8c905c887824f9303a">See the full diff on Github</a>. The new version differs by 5 commits:</p> <ul> <li><a href="https://github.com/webpack/enhanced-resolve/commit/52b61d0f0318318a6e5b3e8c905c887824f9303a"><code>chore(release): 5.18.3</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/ec38ca98517a1eaac259a67e2d31ebd8695f4c65"><code>perf: decrease initial loading time (#458)</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/5f74295eacf02b2c5296cff577c6a8fbd5bcb2c2"><code>refactor: update eslint config (#457)</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/86ff2125e929a28e95b08e9b902f9da0ce941a7b"><code>fix(types): fix nonsensible intersection</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/367d0f65e6f76df763c9d04ff0fe38fcc168ddc0"><code>chore(deps): bump form-data from 3.0.3 to 3.0.4 (#455)</code></a></li> </ul> </details> ---  [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`. <details><summary>All Depfu comment commands</summary> <blockquote><dl> <dt>@depfu rebase</dt><dd>Rebases against your default branch and redoes this update</dd> <dt>@depfu recreate</dt><dd>Recreates this PR, overwriting any edits that you've made to it</dd> <dt>@depfu merge</dt><dd>Merges this PR once your tests are passing and conflicts are resolved</dd> <dt>@depfu cancel merge</dt><dd>Cancels automatic merging of this PR</dd> <dt>@depfu close</dt><dd>Closes this PR and deletes the branch</dd> <dt>@depfu reopen</dt><dd>Restores the branch and reopens this PR (if it's closed)</dd> <dt>@depfu pause</dt><dd>Ignores all future updates for this dependency and closes this PR</dd> <dt>@depfu pause [minor|major]</dt><dd>Ignores all future minor/major updates for this dependency and closes this PR</dd> <dt>@depfu resume</dt><dd>Future versions of this dependency will create PRs again (leaves this PR as is)</dd> </dl></blockquote> </details> Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> |
||
|
|
9cd48d3782 |
Fix false-positive migrations in addEventListener and JavaScript variable names (#18718)
This PR fixes 2 false-positives when running the upgrade tool on a
Tailwind CSS v3 project converting it to a Tailwind CSS v4 project.
The issue occurs around migrations with short simple names that have a
meaning outside if Tailwind CSS, e.g. `blur` and `outline`.
This PR fixes 2 such cases:
1. The `addEventListener` case:
```js
document.addEventListener('blur', handleBlur)
```
We do this by special casing the `addEventListener(` case and making
sure the first argument to `addEventListener` is never migrated.
2. A JavaScript variable with default value:
```js
function foo({ foo = "bar", outline = true, baz = "qux" }) {
// ...
}
```
The bug is relatively subtle here, but it has actually nothing to do
with `outline` itself, but rather the fact that some quote character
came before and after it on the same line...
One of our heuristics for determining if a migration on these small
words is safe, is to ensure that the candidate is inside of a string.
Since we didn't do any kind of quote balancing, we would consider the
`outline` to be inside of a string, even though it is not.
So to actually solve this, we do some form of quote balancing to ensure
that it's _not_ inside of a string in this case.
Additionally, this PR also introduces a small refactor to the
`is-safe-migration.test.ts` file where we now use a `test.each` to
ensure that failing tests in the middle don't prevent the rest of the
tests from running.
### Test plan
1. Added dedicated tests for the cases mentioned in the issue (#18675).
2. Added a few more tests with various forms of whitespace.
Fixes: #18675
|
||
|
|
cd53891c1b |
update READMEs
Co-Authored-By: Adam Wathan <[email protected]> Co-Authored-By: Jonathan Reinink <[email protected]> |
||
|
|
e839d08469 |
Update enhanced-resolve 5.18.1 → 5.18.2 (patch) (#18423)
Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ enhanced-resolve (5.18.1 → 5.18.2) · [Repo](https://github.com/webpack/enhanced-resolve) <details> <summary>Release Notes</summary> <h4><a href="https://github.com/webpack/enhanced-resolve/releases/tag/v5.18.2">5.18.2</a></h4> <blockquote><h3 dir="auto">Fixes</h3> <ul dir="auto"> <li>[Types] FileSystem type</li> </ul></blockquote> <p><em>Does any of this look wrong? <a href="https://depfu.com/packages/npm/enhanced-resolve/feedback">Please let us know.</a></em></p> </details> <details> <summary>Commits</summary> <p><a href="https://github.com/webpack/enhanced-resolve/compare/9436f4d6d930f98b7dbdc7f142ddc5a323512cb6...0bf45033f4cb12e034819c4e420ca12965619fc8">See the full diff on Github</a>. The new version differs by 14 commits:</p> <ul> <li><a href="https://github.com/webpack/enhanced-resolve/commit/0bf45033f4cb12e034819c4e420ca12965619fc8"><code>chore(release): 5.18.2</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/b2441769bd0dbc0c28bb794ba0f0306776acb28b"><code>fix: types</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/775f2fb8edc31c076920a43d41f9ade05777f16c"><code>chore: migrate to eslint-config-webpack (#453)</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/6df312e9a637b24eca83f36fa69a68db61b57ce9"><code>chore: fix tsconfig (#452)</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/b059bff8ce787252a4d087c8246ed7015682e782"><code>ci: show report</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/c974464f46408d271ab0830628309cd223044c7d"><code>chore: fix</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/29f9405129d41431a226ff1dfd994970674fe48e"><code>chore: fix small stuff</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/01a04fd898c10e91022cb6927f5c063234cc69fe"><code>chore: refactor dev env</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/66a745681a4459ccf0bcb0e47e6b447168dd0646"><code>ci: show report</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/3bf44c7a6ec42de6e0a52642321b71792b4a9e99"><code>ci: node v24</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/bbbf6ab5b06a4b4f74fd40daefc6b312dfacf369"><code>ci: node v24</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/38e9fd9acb79643a70e7bcd0d85dabc600ea321f"><code>feat: export `SyncFileSystem` and `BaseFileSystem` types</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/3c9d4b6d511c9aa684755657aebe63a2bd7c6a08"><code>chore: fix generation</code></a></li> <li><a href="https://github.com/webpack/enhanced-resolve/commit/4918c5b3a4b36d461b7dd34b86da0c63cc714228"><code>feat: export type SyncFileSystem and type BaseFileSystem</code></a></li> </ul> </details> ---  [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`. <details><summary>All Depfu comment commands</summary> <blockquote><dl> <dt>@depfu rebase</dt><dd>Rebases against your default branch and redoes this update</dd> <dt>@depfu recreate</dt><dd>Recreates this PR, overwriting any edits that you've made to it</dd> <dt>@depfu merge</dt><dd>Merges this PR once your tests are passing and conflicts are resolved</dd> <dt>@depfu cancel merge</dt><dd>Cancels automatic merging of this PR</dd> <dt>@depfu close</dt><dd>Closes this PR and deletes the branch</dd> <dt>@depfu reopen</dt><dd>Restores the branch and reopens this PR (if it's closed)</dd> <dt>@depfu pause</dt><dd>Ignores all future updates for this dependency and closes this PR</dd> <dt>@depfu pause [minor|major]</dt><dd>Ignores all future minor/major updates for this dependency and closes this PR</dd> <dt>@depfu resume</dt><dd>Future versions of this dependency will create PRs again (leaves this PR as is)</dd> </dl></blockquote> </details> Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> |
||
|
|
77ecabd42d |
Don't consider the global important state in @apply (#18404)
Fixes #18400 In v3 when you used `important: true` it did not affect `@apply`. However, in v4 it does and there's no way to make it *not*. This is definitely a bug and would be unexpected for users coming from v3 who use `@apply` and `important` together. Basically, the following code, along with the detected utility `flex` in source files… ```css @import 'tailwindcss/utilities' important; .flex-explicitly-important { @apply flex!; } .flex-not-important { @apply flex; } ``` … would output this: ```css .flex { display: flex !important; } .flex-explicitly-important { display: flex !important; } .flex-not-important { display: flex !important; } ``` But it's expected that `@apply` doesn't consider the "global" important state. This PR addresss this problem and now the output is this: ```css .flex { display: flex !important; } .flex-explicitly-important { display: flex !important; } .flex-not-important { display: flex; /* this line changed */ } ``` If you want to mark a utility as important in `@apply` you can still use `!` after the utility to do so as shown above. --------- Co-authored-by: Robin Malfait <[email protected]> |
||
|
|
d3b5ae8696 | Prepare 4.1.11 (#18397) |