No description
The guard on `dynamicUtilities` restricted root-swapping to named values, so arbitrary values like `px-[1.2rem] py-[1.2rem]` were never collapsed into `p-[1.2rem]`. This is what caused #19835 — in `--stream` mode, the collapse only happened if an earlier line caused the shorthand to be registered in `STATIC_UTILITIES_KEY` as a side effect, making the output non-deterministic. The underlying issue is that arbitrary value collapse wasn't supported at all. The fix relaxes the guard from `parsedCandidate.value?.kind !== 'named'` to `parsedCandidate.value === null`. `cloneCandidate` and `printCandidate` already handle arbitrary values, so the root-swapping machinery works without other changes. The iteration in `dynamicUtilities` is over `designSystem.utilities.keys('functional')` — a fixed set of roots, not input-proportional — so the performance cost of including arbitrary values should be negligible. Fixes #19835. --------- Co-authored-by: Robin Malfait <malfait.robin@gmail.com> |
||
|---|---|---|
| .github | ||
| crates | ||
| integrations | ||
| packages | ||
| patches | ||
| playgrounds | ||
| scripts | ||
| .gitignore | ||
| .prettierignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| rust-toolchain.toml | ||
| turbo.json | ||
| vitest.config.ts | ||
A utility-first CSS framework for rapidly building custom user interfaces.
Documentation
For full documentation, visit tailwindcss.com.
Community
For help, discussion about best practices, or feature ideas:
Discuss Tailwind CSS on GitHub
Contributing
If you're interested in contributing to Tailwind CSS, please read our contributing docs before submitting a pull request.