From 7d73e51359f3e660059be2a192f799f7d67f5f4d Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 9 Aug 2024 16:09:25 +0200 Subject: [PATCH] Ensure `@apply` works inside `@utility` (#14144) This PR fixes an issue where `@apply` was not handled if it was used inside of `@utility`. You should now be able to do something like this: ```css @utility btn { @apply flex flex-col bg-white p-4 rounded-lg shadow-md; } ``` If you then use `btn` as a class, the following CSS will be generated: ```css .btn { border-radius: var(--radius-lg, .5rem); background-color: var(--color-white, #fff); padding: var(--spacing-4, 1rem); --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a; --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); flex-direction: column; display: flex; } ``` This PR also makes sure that you can use custom `@utility` inside other `@utility` via `@apply`. E.g.: ```css @utility foo { color: red; } @utility bar { color: red; @apply hover:foo; } ``` If we detect a circular dependency, then we will throw an error since circular dependencies are not allowed. E.g.: ```css @utility foo { @apply hover:bar; } @utility bar { @apply focus:baz; } @utility baz { @apply dark:foo; } ``` Regardless of which utility you use, eventually it will apply itself. Fixes: #14143 --- CHANGELOG.md | 4 + packages/tailwindcss/src/index.test.ts | 33 ++++++ packages/tailwindcss/src/index.ts | 121 +++++++++++++------ packages/tailwindcss/src/utilities.test.ts | 128 ++++++++++++++++++++- 4 files changed, 248 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 775dd3341..b03576281 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add support for explicitly registering content paths using new `@source` at-rule ([#14078](https://github.com/tailwindlabs/tailwindcss/pull/14078)) - Add support for scanning `