diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ee2c7dd43..6bcb279a4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: persist-credentials: false - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 + - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 - name: Use Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index cfdb1e311..457c38424 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -58,7 +58,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: persist-credentials: false - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 + - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 - run: | git config --global user.name "github-actions[bot]" diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 3f047b5b9..24e829afd 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -15,7 +15,7 @@ on: env: APP_NAME: tailwindcss-oxide NODE_VERSION: 24 - PNPM_VERSION: '9.6.0' + PNPM_VERSION: '11.9.0' OXIDE_LOCATION: ./crates/node permissions: @@ -79,7 +79,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: persist-credentials: false - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 + - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: version: ${{ env.PNPM_VERSION }} @@ -220,7 +220,7 @@ jobs: run: | echo "TAG_NAME=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 + - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: version: ${{ env.PNPM_VERSION }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 19d7a9f46..2c957d3af 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,7 +22,7 @@ permissions: env: APP_NAME: tailwindcss-oxide NODE_VERSION: 24 - PNPM_VERSION: '9.6.0' + PNPM_VERSION: '11.9.0' OXIDE_LOCATION: ./crates/node concurrency: @@ -83,7 +83,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: persist-credentials: false - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 + - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: version: ${{ env.PNPM_VERSION }} @@ -219,7 +219,7 @@ jobs: fetch-depth: 20 persist-credentials: false - - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6 + - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: version: ${{ env.PNPM_VERSION }} @@ -308,7 +308,7 @@ jobs: run: | pnpm --recursive --filter="!@tailwindcss/oxide-wasm32-wasi" publish --tag ${RELEASE_CHANNEL} --no-git-checks # The wasm package needs a special npm config that isn't read when pnpm --recursive is used - pushd crates/node/npm/wasm32-wasi; pnpm publish --tag ${RELEASE_CHANNEL} --no-git-checks; popd; + pushd crates/node/npm/wasm32-wasi; pnpm publish --tag ${RELEASE_CHANNEL} --no-git-checks --config.node-linker=hoisted; popd; - name: Trigger Tailwind Play update uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 @@ -321,3 +321,38 @@ jobs: ref: 'main', workflow_id: 'upgrade-tailwindcss.yml' }) + + notify: + if: ${{ always() && (needs.build.result == 'failure' || needs.build-freebsd.result == 'failure' || needs.release.result == 'failure') }} + needs: + - build + - build-freebsd + - release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + with: + persist-credentials: false + + - name: Resolve release label + id: release + env: + INPUT_CHANNEL: ${{ github.event.inputs.channel || '' }} + RELEASE_TAG: ${{ github.event.release.tag_name || '' }} + run: | + if [[ "${{ github.event_name }}" == "release" ]]; then + tag_name="${RELEASE_TAG:-${GITHUB_REF_NAME}}" + echo "label=release ${tag_name}" >> $GITHUB_OUTPUT + elif [[ "$INPUT_CHANNEL" == "release" ]]; then + version=$(node -p "require('./packages/tailwindcss/package.json').version") + echo "label=release v${version}" >> $GITHUB_OUTPUT + else + sha_short=$(git rev-parse --short HEAD) + echo "label=insiders release 0.0.0-insiders.${sha_short}" >> $GITHUB_OUTPUT + fi + + - name: Notify Discord + uses: discord-actions/message@5c7149c81a83146e5d01f142be1bf87a61831c4d # v2 + with: + webhookUrl: ${{ secrets.DISCORD_WEBHOOK_URL }} + message: 'The [most recent ${{ github.workflow }} workflow](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) for `${{ steps.release.outputs.label }}` has failed.' diff --git a/CHANGELOG.md b/CHANGELOG.md index 2db870f8b..1fe55aa6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,21 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -### Added +- Nothing yet! -- Support bare spacing values for `auto-rows-*` and `auto-cols-*` utilities (e.g. `auto-rows-12` and `auto-cols-16`) ([#20229](https://github.com/tailwindlabs/tailwindcss/pull/20229)) +## [4.3.2] - 2026-06-26 ### Fixed -- Ensure `@tailwindcss/cli` in `--watch` mode doesn't crash on Windows when `@source` points to a directory that doesn't exist ([#20242](https://github.com/tailwindlabs/tailwindcss/pull/20242)) -- Ensure `@tailwindcss/vite` doesn't crash in Deno v2.8.x when `context.parentURL` is not a valid URL ([#20245](https://github.com/tailwindlabs/tailwindcss/pull/20245)) +- Support bare spacing values for `auto-rows-*` and `auto-cols-*` utilities (e.g. `auto-rows-12` and `auto-cols-16`) ([#20229](https://github.com/tailwindlabs/tailwindcss/pull/20229)) +- Prevent `@tailwindcss/cli` in `--watch` mode from crashing on Windows when `@source` points to a directory that doesn't exist ([#20242](https://github.com/tailwindlabs/tailwindcss/pull/20242)) +- Prevent `@tailwindcss/vite` from crashing in Deno v2.8.x when `context.parentURL` is not a valid URL ([#20245](https://github.com/tailwindlabs/tailwindcss/pull/20245)) - Ensure `@tailwindcss/cli` in `--watch` mode rebuilds when the input CSS file changes in an ignored directory ([#20246](https://github.com/tailwindlabs/tailwindcss/pull/20246)) -- Ensure `@variant` rules generated by `addBase` can use custom variants defined later ([#20247](https://github.com/tailwindlabs/tailwindcss/pull/20247)) -- Ensure `@tailwindcss/vite` doesn't crash during HMR when scanned files or directories are deleted ([#20259](https://github.com/tailwindlabs/tailwindcss/pull/20259)) -- Ensure `text-[--spacing(…)]` generates `font-size` instead of `color` ([#20260](https://github.com/tailwindlabs/tailwindcss/pull/20260)) +- Allow `@variant` rules used in `addBase(…)` to use custom variants defined later ([#20247](https://github.com/tailwindlabs/tailwindcss/pull/20247)) +- Prevent `@tailwindcss/vite` from crashing during HMR when scanned files or directories are deleted ([#20259](https://github.com/tailwindlabs/tailwindcss/pull/20259)) +- Generate `font-size` instead of `color` declarations for `text-[--spacing(…)]` ([#20260](https://github.com/tailwindlabs/tailwindcss/pull/20260)) - Prevent `@source` patterns from scanning unrelated sibling files and folders ([#20263](https://github.com/tailwindlabs/tailwindcss/pull/20263)) - Extract class candidates adjacent to Template Toolkit delimiters like `%]…[%` in `.tt`, `.tt2`, and `.tx` files ([#20269](https://github.com/tailwindlabs/tailwindcss/pull/20269)) - Extract class candidates from conditional Maud syntax like `p.text-black[condition]` ([#20269](https://github.com/tailwindlabs/tailwindcss/pull/20269)) +- Prevent `@position-try` rules from triggering unknown at-rule warnings when optimizing CSS ([#20277](https://github.com/tailwindlabs/tailwindcss/pull/20277)) +- Support class suggestions for named opacity modifiers from `--opacity` theme values ([#20287](https://github.com/tailwindlabs/tailwindcss/pull/20287)) +- Prevent type errors in `@tailwindcss/postcss` when used with newer PostCSS patch releases ([#20289](https://github.com/tailwindlabs/tailwindcss/pull/20289)) ## [4.3.1] - 2026-06-12 @@ -4071,7 +4075,8 @@ No release notes - Everything! -[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v4.3.1...HEAD +[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v4.3.2...HEAD +[4.3.2]: https://github.com/tailwindlabs/tailwindcss/compare/v4.3.1...v4.3.2 [4.3.1]: https://github.com/tailwindlabs/tailwindcss/compare/v4.3.0...v4.3.1 [4.3.0]: https://github.com/tailwindlabs/tailwindcss/compare/v4.2.4...v4.3.0 [4.2.4]: https://github.com/tailwindlabs/tailwindcss/compare/v4.2.3...v4.2.4 diff --git a/crates/node/npm/android-arm-eabi/package.json b/crates/node/npm/android-arm-eabi/package.json index f1d56caef..6e2b40ee5 100644 --- a/crates/node/npm/android-arm-eabi/package.json +++ b/crates/node/npm/android-arm-eabi/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-android-arm-eabi", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/android-arm64/package.json b/crates/node/npm/android-arm64/package.json index 40b96e9c7..95d84f4fe 100644 --- a/crates/node/npm/android-arm64/package.json +++ b/crates/node/npm/android-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-android-arm64", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/darwin-arm64/package.json b/crates/node/npm/darwin-arm64/package.json index 1020c239f..382d9e6ba 100644 --- a/crates/node/npm/darwin-arm64/package.json +++ b/crates/node/npm/darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-darwin-arm64", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/darwin-x64/package.json b/crates/node/npm/darwin-x64/package.json index a5675be67..15851163e 100644 --- a/crates/node/npm/darwin-x64/package.json +++ b/crates/node/npm/darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-darwin-x64", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/freebsd-x64/package.json b/crates/node/npm/freebsd-x64/package.json index 4238a6ca5..fb890a730 100644 --- a/crates/node/npm/freebsd-x64/package.json +++ b/crates/node/npm/freebsd-x64/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-freebsd-x64", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/linux-arm-gnueabihf/package.json b/crates/node/npm/linux-arm-gnueabihf/package.json index 945fb4508..21bbaee93 100644 --- a/crates/node/npm/linux-arm-gnueabihf/package.json +++ b/crates/node/npm/linux-arm-gnueabihf/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-linux-arm-gnueabihf", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/linux-arm64-gnu/package.json b/crates/node/npm/linux-arm64-gnu/package.json index 57e13542a..5fd91c422 100644 --- a/crates/node/npm/linux-arm64-gnu/package.json +++ b/crates/node/npm/linux-arm64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-linux-arm64-gnu", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/linux-arm64-musl/package.json b/crates/node/npm/linux-arm64-musl/package.json index 159cc4e77..18ca072c4 100644 --- a/crates/node/npm/linux-arm64-musl/package.json +++ b/crates/node/npm/linux-arm64-musl/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-linux-arm64-musl", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/linux-x64-gnu/package.json b/crates/node/npm/linux-x64-gnu/package.json index 9731c11ba..8cfc4d852 100644 --- a/crates/node/npm/linux-x64-gnu/package.json +++ b/crates/node/npm/linux-x64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-linux-x64-gnu", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/linux-x64-musl/package.json b/crates/node/npm/linux-x64-musl/package.json index b119f0d97..fcf648f3f 100644 --- a/crates/node/npm/linux-x64-musl/package.json +++ b/crates/node/npm/linux-x64-musl/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-linux-x64-musl", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/wasm32-wasi/.npmrc b/crates/node/npm/wasm32-wasi/.npmrc deleted file mode 100644 index d67f37488..000000000 --- a/crates/node/npm/wasm32-wasi/.npmrc +++ /dev/null @@ -1 +0,0 @@ -node-linker=hoisted diff --git a/crates/node/npm/wasm32-wasi/package.json b/crates/node/npm/wasm32-wasi/package.json index 1d329a4dd..c38562783 100644 --- a/crates/node/npm/wasm32-wasi/package.json +++ b/crates/node/npm/wasm32-wasi/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-wasm32-wasi", - "version": "4.3.1", + "version": "4.3.2", "cpu": [ "wasm32" ], diff --git a/crates/node/npm/win32-arm64-msvc/package.json b/crates/node/npm/win32-arm64-msvc/package.json index 2339aa4c4..a994d8d9d 100644 --- a/crates/node/npm/win32-arm64-msvc/package.json +++ b/crates/node/npm/win32-arm64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-win32-arm64-msvc", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/win32-x64-msvc/package.json b/crates/node/npm/win32-x64-msvc/package.json index 6b7fcf9bc..2c6bfedb0 100644 --- a/crates/node/npm/win32-x64-msvc/package.json +++ b/crates/node/npm/win32-x64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide-win32-x64-msvc", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/package.json b/crates/node/package.json index d84826e51..40ab70649 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide", - "version": "4.3.1", + "version": "4.3.2", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/integrations/cli/index.test.ts b/integrations/cli/index.test.ts index 1a24c9ac7..ba11d546a 100644 --- a/integrations/cli/index.test.ts +++ b/integrations/cli/index.test.ts @@ -639,6 +639,15 @@ describe.each([ 'git ignore files outside of a repo are not considered', { fs: { + // Make the test root a pnpm workspace that includes `home/project` so + // the install below resolves the transitive dependency overrides that + // the test harness injects into this `pnpm-workspace.yaml`. + 'pnpm-workspace.yaml': yaml` + # + packages: + - home/project + `, + // Ignore everything in the "home" directory 'home/.gitignore': '*', @@ -676,7 +685,7 @@ describe.each([ installDependencies: false, }, async ({ fs, root, exec }) => { - await exec(`pnpm install --ignore-workspace`, { + await exec(`pnpm install`, { cwd: path.join(root, 'home/project'), }) diff --git a/integrations/package.json b/integrations/package.json index 3dc661ee2..ae337b5e4 100644 --- a/integrations/package.json +++ b/integrations/package.json @@ -5,6 +5,7 @@ "devDependencies": { "dedent": "catalog:", "fast-glob": "^3.3.3", - "source-map-js": "^1.2.1" + "source-map-js": "^1.2.1", + "yaml": "^2.9.0" } } diff --git a/integrations/upgrade/index.test.ts b/integrations/upgrade/index.test.ts index cf58f5912..9e236e8fd 100644 --- a/integrations/upgrade/index.test.ts +++ b/integrations/upgrade/index.test.ts @@ -28,7 +28,7 @@ test( }, }, async ({ fs, exec, expect }) => { - let output = await exec('npx @tailwindcss/upgrade') + let output = await exec('pnpm exec upgrade') expect(output).toContain('Cannot find any CSS files that reference Tailwind CSS.') // Files should not be modified @@ -100,7 +100,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -158,7 +158,7 @@ test( }) // Ensure the v4 project compiles correctly - await exec('npx tailwindcss --input src/input.css --output dist/out.css') + await exec('pnpm exec tailwindcss --input src/input.css --output dist/out.css') await fs.expectFileToContain('dist/out.css', [ candidate`flex!`, @@ -202,9 +202,10 @@ test( `, 'notes/unrelated.txt': `order-[0] bg-[--my-red]`, }, + retry: 0, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./**/*.{html,php,txt}')).toMatchInlineSnapshot(` " @@ -262,7 +263,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -334,7 +335,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -406,7 +407,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -483,7 +484,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -586,7 +587,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -694,7 +695,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') await fs.expectFileToContain( 'postcss.config.js', @@ -765,7 +766,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') let packageJsonContent = await fs.read('package.json') let packageJson = JSON.parse(packageJsonContent) @@ -812,7 +813,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') let packageJsonContent = await fs.read('package.json') let packageJson = JSON.parse(packageJsonContent) @@ -864,7 +865,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') await fs.expectFileToContain('src/index.css', css`@import 'tailwindcss';`) await fs.expectFileToContain( @@ -940,7 +941,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') await fs.expectFileToContain('src/index.css', css`@import 'tailwindcss';`) await fs.expectFileToContain( @@ -1007,7 +1008,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.html')).toMatchInlineSnapshot(` " @@ -1054,7 +1055,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.html')).toMatchInlineSnapshot(` " @@ -1098,7 +1099,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -1168,9 +1169,10 @@ test( } `, }, + retry: 0, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -1279,9 +1281,10 @@ test( } `, }, + retry: 0, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -1414,7 +1417,7 @@ test( }, }, async ({ exec, fs, expect }) => { - let output = await exec('npx @tailwindcss/upgrade --force') + let output = await exec('pnpm exec upgrade --force') expect(output).toMatch( /You have one or more stylesheets that are imported into a utility layer and non-utility layer./, @@ -1538,7 +1541,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.{html,css}')).toMatchInlineSnapshot(` " @@ -1763,8 +1766,8 @@ test( }, }, async ({ exec, expect }) => { - let output = await exec('npx @tailwindcss/upgrade --force', {}, { ignoreStdErr: true }).catch( - (e) => e.toString(), + let output = await exec('pnpm exec upgrade --force', {}, { ignoreStdErr: true }).catch((e) => + e.toString(), ) expect(output).toMatch('Could not determine configuration file for:') @@ -1835,7 +1838,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.{html,css}')).toMatchInlineSnapshot(` " @@ -1971,7 +1974,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.{html,css}')).toMatchInlineSnapshot(` " @@ -2091,7 +2094,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.{html,css}')).toMatchInlineSnapshot(` " @@ -2171,7 +2174,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -2253,9 +2256,10 @@ test( } `, }, + retry: 0, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -2309,7 +2313,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') let pkg = JSON.parse(await fs.read('package.json')) @@ -2388,7 +2392,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') // Files should not be modified expect(await fs.dumpFiles('./*.{js,css,html}')).toMatchInlineSnapshot(` @@ -2486,7 +2490,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') // Files should not be modified expect(await fs.dumpFiles('./*.{js,css,html,tsx}')).toMatchInlineSnapshot(` @@ -2593,7 +2597,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade ./src/index.css') + await exec('pnpm exec upgrade ./src/index.css') expect(await fs.dumpFiles('./src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -2719,7 +2723,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -2732,8 +2736,8 @@ test( text-red-500/10 text-red-500/semitransparent text-red-500/transparent - text-red-500/50 - text-red-500/50.5 + text-red-500/semitransparent + text-red-500/50.50 text-red-500/50.50 text-red-500/50% text-red-500/100%" @@ -2805,7 +2809,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -2873,7 +2877,7 @@ test( }, }, async ({ exec, root, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') let before = await fs.dumpFiles('./src/**/*.{css,html}') expect(before).toMatchInlineSnapshot(` @@ -2915,7 +2919,7 @@ test( } // Run the upgrade again - let output = await exec('npx @tailwindcss/upgrade') + let output = await exec('pnpm exec upgrade') expect(output).toContain('No changes were made to your repository') let after = await fs.dumpFiles('./src/**/*.{css,html}') @@ -2994,7 +2998,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -3043,7 +3047,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/{*,.env,.env.*}')).toMatchInlineSnapshot(` " @@ -3114,7 +3118,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./{src,templates}/**/*')).toMatchInlineSnapshot(` " @@ -3190,6 +3194,10 @@ test( let originalKeepFile = await fs.read('src/keep.php') let originalTemplate = await fs.read('src/templates/template-0.php') + // NOTE: This test intentionally keeps `npx` instead of `pnpm exec`. It uses + // a `NODE_OPTIONS` hook that overrides `fs.writeFile` to simulate a bad + // write, and `pnpm exec` may write a bin shim on startup which would trip + // that hook before template migration begins. let process = await spawn('npx @tailwindcss/upgrade --force', { env: { NODE_OPTIONS: '--require=./hook.cjs', @@ -3257,7 +3265,7 @@ test( }, }, async ({ root, exec, fs, expect }) => { - let stdout = await exec('npx @tailwindcss/upgrade', { + let stdout = await exec('pnpm exec upgrade', { cwd: path.join(root, 'project-a'), }) @@ -3331,7 +3339,7 @@ test( }, }, async ({ exec, fs, expect }) => { - let stdout = await exec('npx @tailwindcss/upgrade') + let stdout = await exec('pnpm exec upgrade') expect(stdout).not.toContain( 'Running this command will add the dependency to the workspace root', @@ -3407,7 +3415,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.{css,vue}')).toMatchInlineSnapshot(` " diff --git a/integrations/upgrade/js-config.test.ts b/integrations/upgrade/js-config.test.ts index 1167eba27..1a037b764 100644 --- a/integrations/upgrade/js-config.test.ts +++ b/integrations/upgrade/js-config.test.ts @@ -164,7 +164,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.{css,js,html}')).toMatchInlineSnapshot(` " @@ -370,7 +370,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect( await fs.dumpFiles( @@ -484,7 +484,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.css')).toMatchInlineSnapshot(` " @@ -586,7 +586,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.{css,ts}')).toMatchInlineSnapshot(` " @@ -672,7 +672,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.css')).toMatchInlineSnapshot(` " @@ -750,7 +750,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.css')).toMatchInlineSnapshot(` " @@ -824,7 +824,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.css')).toMatchInlineSnapshot(` " @@ -934,7 +934,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('project-{a,b}/**/*.{css,ts}')).toMatchInlineSnapshot(` " @@ -1032,7 +1032,7 @@ test( }, }, async ({ root, exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade', { + await exec('pnpm exec upgrade', { cwd: path.join(root, 'frontend'), }) @@ -1119,7 +1119,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/*.css')).toMatchInlineSnapshot(` " @@ -1194,7 +1194,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/*.css')).toMatchInlineSnapshot(` " @@ -1270,7 +1270,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/*.css')).toMatchInlineSnapshot(` " @@ -1346,7 +1346,7 @@ describe('border compatibility', () => { }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.css')).toMatchInlineSnapshot(` " @@ -1408,7 +1408,7 @@ describe('border compatibility', () => { }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.css')).toMatchInlineSnapshot(` " @@ -1470,7 +1470,7 @@ describe('border compatibility', () => { }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.css')).toMatchInlineSnapshot(` " @@ -1509,7 +1509,7 @@ describe('border compatibility', () => { }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.css')).toMatchInlineSnapshot(` " @@ -1580,7 +1580,7 @@ describe('border compatibility', () => { }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.css')).toMatchInlineSnapshot(` " @@ -1683,7 +1683,7 @@ describe('border compatibility', () => { }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -1793,7 +1793,7 @@ describe('border compatibility', () => { }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -1895,7 +1895,7 @@ describe('border compatibility', () => { }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -1993,7 +1993,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.css')).toMatchInlineSnapshot(` " @@ -2064,7 +2064,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.css')).toMatchInlineSnapshot(` " @@ -2141,7 +2141,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('src/**/*.css')).toMatchInlineSnapshot(` " diff --git a/integrations/upgrade/upgrade-errors.test.ts b/integrations/upgrade/upgrade-errors.test.ts index 6733801e0..fdc60828e 100644 --- a/integrations/upgrade/upgrade-errors.test.ts +++ b/integrations/upgrade/upgrade-errors.test.ts @@ -31,6 +31,7 @@ test( @tailwind utilities; `, }, + retry: 0, }, async ({ exec, expect }) => { // Ensure we are in a git repo @@ -39,7 +40,7 @@ test( await exec('git commit -m "before migration"') // Fully upgrade to v4 - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') // Undo all changes to the current repo. This will bring the repo back to a // v3 state, but the `node_modules` will now have v4 installed. @@ -47,7 +48,7 @@ test( // Re-running the upgrade should result in an error return expect(() => { - return exec('npx @tailwindcss/upgrade', {}, { ignoreStdErr: true }).catch((e) => { + return exec('pnpm exec upgrade', {}, { ignoreStdErr: true }).catch((e) => { // Replacing the current version with a hardcoded `v4` to make it stable // when we release new minor/patch versions. return Promise.reject( @@ -55,7 +56,7 @@ test( ) }) }).rejects.toThrowErrorMatchingInlineSnapshot(` - "Command failed: npx @tailwindcss/upgrade + "Command failed: pnpm exec upgrade ≈ tailwindcss v4.0.0 │ ↳ Upgrading from Tailwind CSS \`v4.0.0\` @@ -105,6 +106,7 @@ test( @tailwind utilities; `, }, + retry: 0, }, async ({ exec, expect }) => { // Use `bun` to install dependencies @@ -192,6 +194,7 @@ test( @tailwind utilities; `, }, + retry: 0, }, async ({ exec, expect }) => { // Use `npm` to install dependencies diff --git a/integrations/utils.ts b/integrations/utils.ts index 5fe29d3f0..fc073d201 100644 --- a/integrations/utils.ts +++ b/integrations/utils.ts @@ -8,10 +8,14 @@ import path from 'node:path' import { promisify, stripVTControlCharacters } from 'node:util' import { RawSourceMap, SourceMapConsumer } from 'source-map-js' import { test as defaultTest, type ExpectStatic } from 'vitest' +import * as Yaml from 'yaml' import { createLineTable } from '../packages/tailwindcss/src/source-maps/line-table' import { escape } from '../packages/tailwindcss/src/utils/escape' const REPO_ROOT = path.join(__dirname, '..') +const ROOT_PNPM_WORKSPACE = Yaml.parse( + await fs.readFile(path.join(REPO_ROOT, 'pnpm-workspace.yaml'), 'utf8'), +) const PUBLIC_PACKAGES = (await fs.readdir(path.join(REPO_ROOT, 'dist'))).map((name) => name.replace('tailwindcss-', '@tailwindcss/').replace('.tgz', ''), ) @@ -40,6 +44,7 @@ interface TestConfig { timeout?: number installDependencies?: boolean + retry?: number } interface TestContext { root: string @@ -94,7 +99,7 @@ export function test( name, { timeout: config.timeout ?? TEST_TIMEOUT, - retry: process.env.CI ? 2 : 0, + retry: config.retry ?? (process.env.CI ? 2 : 0), only: only || (!process.env.CI && debug), skip, concurrent, @@ -121,6 +126,39 @@ export function test( execOptions: ExecOptions = {}, ) { let cwd = childProcessOptions.cwd ?? root + let originalCommand = command + + // Avoid `pnpm exec upgrade` on Windows because the upgrader runs + // `pnpm add`, which rewrites Windows `.cmd` shims while the current + // shim is still executing. + // + // Pretty sure this is a pnpm v11 bug on Windows. + if (IS_WINDOWS && command.includes('pnpm exec upgrade')) { + for (let base = cwd; ; base = path.dirname(base)) { + let upgradeBin = path.join( + base, + 'node_modules', + '@tailwindcss', + 'upgrade', + 'dist', + 'index.mjs', + ) + + try { + await fs.access(upgradeBin) + command = command.replace('pnpm exec upgrade', `node "${upgradeBin}"`) + break + } catch (error: any) { + if (error?.code !== 'ENOENT') throw error + } + + let parent = path.dirname(base) + if (parent === base) { + throw new Error(`Unable to resolve @tailwindcss/upgrade from ${cwd}`) + } + } + } + if (debug && cwd !== root) { let relative = path.relative(root, cwd) if (relative[0] !== '.') relative = `./${relative}` @@ -140,6 +178,11 @@ export function test( }, (error, stdout, stderr) => { if (error) { + if (command !== originalCommand) { + error.message = error.message.replace(command, originalCommand) + let mappedError = error as any + mappedError.cmd = originalCommand + } if (execOptions.ignoreStdErr !== true) console.error(stderr) if (only || debug) { console.error(stdout) @@ -306,6 +349,8 @@ export function test( if (filename.endsWith('package.json')) { content = await overwriteVersionsInPackageJson(content) + } else if (filename.endsWith('pnpm-workspace.yaml')) { + content = overwriteVersionsInPnpmWorkspace(content) } // Ensure that files written on Windows use \r\n line ending @@ -424,6 +469,21 @@ export function test( node_modules/ ` + // Disable Git's automatic line ending conversion in these throwaway test + // repositories. Tools like pnpm write files (e.g. `pnpm-lock.yaml`) with + // LF endings, which on Windows (where `core.autocrlf=true` is common) + // makes Git emit noisy "LF will be replaced by CRLF" warnings when it + // touches those files. + config.fs['.gitattributes'] ??= txt` + * -text + ` + + // Ensure there is always a root `pnpm-workspace.yaml` so that transitive + // dependency overrides (and the build allow list) are injected into it. + // As of pnpm v10, these can no longer live in the `pnpm.overrides` field + // of `package.json`. + config.fs['pnpm-workspace.yaml'] ??= '' + for (let [filename, content] of Object.entries(config.fs)) { if (content.toString().startsWith('symlink:')) { // The symlink path is relative to the target destination's path @@ -441,14 +501,12 @@ export function test( let shouldInstallDependencies = config.installDependencies ?? true try { - // In debug mode, the directory is going to be inside the pnpm workspace - // of the tailwindcss package. This means that `pnpm install` will run - // pnpm install on the workspace instead (expect if the root dir defines - // a separate workspace). We work around this by using the - // `--ignore-workspace` flag. + // Every test project gets its own root `pnpm-workspace.yaml` (see + // above). This makes the test directory its own workspace root, so even + // in debug mode — where the directory lives inside this repository's + // pnpm workspace — `pnpm install` won't attach to the parent workspace. if (shouldInstallDependencies) { - let ignoreWorkspace = debug && !config.fs['pnpm-workspace.yaml'] - await context.exec(`pnpm install${ignoreWorkspace ? ' --ignore-workspace' : ''}`) + await context.exec(`pnpm install`) } } catch (error: any) { console.error(error) @@ -526,28 +584,42 @@ async function overwriteVersionsInPackageJson(content: string): Promise } } + return JSON.stringify(json, null, 2) +} + +function overwriteVersionsInPnpmWorkspace(content: string): string { + let workspace = content.trim() === '' ? {} : Yaml.parse(content) + + // Inherit information from the root workspace + workspace.allowBuilds = { + ...ROOT_PNPM_WORKSPACE.allowBuilds, + ...workspace.allowBuilds, + } + // Inject transitive dependency overwrite. This is necessary because // @tailwindcss/vite internally depends on a specific version of // @tailwindcss/oxide and we instead want to resolve it to the locally built // version. - json.pnpm ||= {} - json.pnpm.overrides ||= {} + // + // As of pnpm v10, the `pnpm.overrides` field in `package.json` is no longer + // read. Overrides have to be defined in `pnpm-workspace.yaml` instead. + workspace.overrides ||= {} for (let pkg of PUBLIC_PACKAGES) { if (pkg === 'tailwindcss') { // We want to be explicit about the `tailwindcss` package so our tests can // also import v3 without conflicting v4 tarballs. - json.pnpm.overrides['@tailwindcss/node>tailwindcss'] = resolveVersion(pkg) - json.pnpm.overrides['@tailwindcss/upgrade>tailwindcss'] = resolveVersion(pkg) - json.pnpm.overrides['@tailwindcss/cli>tailwindcss'] = resolveVersion(pkg) - json.pnpm.overrides['@tailwindcss/postcss>tailwindcss'] = resolveVersion(pkg) - json.pnpm.overrides['@tailwindcss/vite>tailwindcss'] = resolveVersion(pkg) - json.pnpm.overrides['@tailwindcss/webpack>tailwindcss'] = resolveVersion(pkg) + workspace.overrides['@tailwindcss/node>tailwindcss'] = resolveVersion(pkg) + workspace.overrides['@tailwindcss/upgrade>tailwindcss'] = resolveVersion(pkg) + workspace.overrides['@tailwindcss/cli>tailwindcss'] = resolveVersion(pkg) + workspace.overrides['@tailwindcss/postcss>tailwindcss'] = resolveVersion(pkg) + workspace.overrides['@tailwindcss/vite>tailwindcss'] = resolveVersion(pkg) + workspace.overrides['@tailwindcss/webpack>tailwindcss'] = resolveVersion(pkg) } else { - json.pnpm.overrides[pkg] = resolveVersion(pkg) + workspace.overrides[pkg] = resolveVersion(pkg) } } - return JSON.stringify(json, null, 2) + return Yaml.stringify(workspace) } function resolveVersion(dependency: string) { diff --git a/integrations/vite/index.test.ts b/integrations/vite/index.test.ts index f6633ff49..bb237e6cd 100644 --- a/integrations/vite/index.test.ts +++ b/integrations/vite/index.test.ts @@ -1090,6 +1090,14 @@ test( `, 'src/index.js': js`import Plotly from 'plotly.js/lib/core'`, + + // `plotly.js` pulls in `es5-ext`, which has a build script. As of pnpm + // v10, build scripts only run when explicitly allowed. + 'pnpm-workspace.yaml': yaml` + # + allowBuilds: + es5-ext: true + `, }, }, async ({ exec, expect, fs }) => { diff --git a/integrations/vite/nuxt.test.ts b/integrations/vite/nuxt.test.ts index 110b1d173..20f367020 100644 --- a/integrations/vite/nuxt.test.ts +++ b/integrations/vite/nuxt.test.ts @@ -8,6 +8,7 @@ import { retryAssertion, test, ts, + yaml, } from '../utils' const SETUP = { @@ -21,14 +22,14 @@ const SETUP = { "nitropack": "2.11.0", "tailwindcss": "workspace:^", "vue": "latest" - }, - "pnpm": { - "overrides": { - "nuxi": "3.28.0" - } } } `, + 'pnpm-workspace.yaml': yaml` + # + overrides: + nuxi: 3.28.0 + `, 'nuxt.config.ts': ts` import tailwindcss from '@tailwindcss/vite' diff --git a/package.json b/package.json index 9fd4f2f05..658743f9f 100644 --- a/package.json +++ b/package.json @@ -60,11 +60,5 @@ "typescript": "^5.9.3", "vitest": "^4.1.7" }, - "packageManager": "pnpm@9.6.0", - "pnpm": { - "patchedDependencies": { - "@parcel/watcher@2.5.1": "patches/@parcel__watcher@2.5.1.patch", - "lightningcss@1.32.0": "patches/lightningcss@1.32.0.patch" - } - } + "packageManager": "pnpm@11.9.0" } diff --git a/packages/@tailwindcss-browser/package.json b/packages/@tailwindcss-browser/package.json index 46767fecc..572aa43da 100644 --- a/packages/@tailwindcss-browser/package.json +++ b/packages/@tailwindcss-browser/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/browser", - "version": "4.3.1", + "version": "4.3.2", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "main": "./dist/index.global.js", diff --git a/packages/@tailwindcss-cli/package.json b/packages/@tailwindcss-cli/package.json index 520cce233..27354b002 100644 --- a/packages/@tailwindcss-cli/package.json +++ b/packages/@tailwindcss-cli/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/cli", - "version": "4.3.1", + "version": "4.3.2", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { diff --git a/packages/@tailwindcss-node/package.json b/packages/@tailwindcss-node/package.json index 5602324b3..5c7cd6188 100644 --- a/packages/@tailwindcss-node/package.json +++ b/packages/@tailwindcss-node/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/node", - "version": "4.3.1", + "version": "4.3.2", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { diff --git a/packages/@tailwindcss-node/src/instrumentation.test.ts b/packages/@tailwindcss-node/src/instrumentation.test.ts index b2068d9d6..102c7ed8e 100644 --- a/packages/@tailwindcss-node/src/instrumentation.test.ts +++ b/packages/@tailwindcss-node/src/instrumentation.test.ts @@ -83,7 +83,7 @@ it('should measure async callbacks via the `span` api', async () => { `) let [, duration] = stripVTControlCharacters(output).match(/\[(.*)\]/)! - expect(parseFloat(duration)).toBeGreaterThanOrEqual(500) + expect(parseFloat(duration)).toBeGreaterThanOrEqual(500 - 2 /* Margin of error */) }) }) diff --git a/packages/@tailwindcss-node/src/optimize.ts b/packages/@tailwindcss-node/src/optimize.ts index 6e60f8b87..5e0234432 100644 --- a/packages/@tailwindcss-node/src/optimize.ts +++ b/packages/@tailwindcss-node/src/optimize.ts @@ -68,6 +68,13 @@ export function optimize( return false } + // Ignore warnings about unknown at-rules. + // + // TODO: drop `@position-try` once https://github.com/parcel-bundler/lightningcss/pull/1238 lands + if (/Unknown at rule: @position-try/.test(warning.message)) { + return false + } + return true }) diff --git a/packages/@tailwindcss-postcss/package.json b/packages/@tailwindcss-postcss/package.json index c087b8f21..563c96ed6 100644 --- a/packages/@tailwindcss-postcss/package.json +++ b/packages/@tailwindcss-postcss/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/postcss", - "version": "4.3.1", + "version": "4.3.2", "description": "PostCSS plugin for Tailwind CSS, a utility-first CSS framework for rapidly building custom user interfaces", "license": "MIT", "repository": { diff --git a/packages/@tailwindcss-standalone/package.json b/packages/@tailwindcss-standalone/package.json index d8897283f..6d71b9701 100644 --- a/packages/@tailwindcss-standalone/package.json +++ b/packages/@tailwindcss-standalone/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/standalone", - "version": "4.3.1", + "version": "4.3.2", "private": true, "description": "Standalone CLI for Tailwind CSS", "license": "MIT", diff --git a/packages/@tailwindcss-upgrade/package.json b/packages/@tailwindcss-upgrade/package.json index 2ac7b44ac..06f162917 100644 --- a/packages/@tailwindcss-upgrade/package.json +++ b/packages/@tailwindcss-upgrade/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/upgrade", - "version": "4.3.1", + "version": "4.3.2", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { diff --git a/packages/@tailwindcss-vite/package.json b/packages/@tailwindcss-vite/package.json index 2d039707d..8c25f382a 100644 --- a/packages/@tailwindcss-vite/package.json +++ b/packages/@tailwindcss-vite/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/vite", - "version": "4.3.1", + "version": "4.3.2", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { diff --git a/packages/@tailwindcss-vite/src/index.ts b/packages/@tailwindcss-vite/src/index.ts index a9c9ad5cf..9796ff0d0 100644 --- a/packages/@tailwindcss-vite/src/index.ts +++ b/packages/@tailwindcss-vite/src/index.ts @@ -45,7 +45,7 @@ function createCustomResolver( // It does matter that this is a file, otherwise we would go up a directory, // which means that we would be resolving files from a parent folder first, // instead of the current folder we are in. - let importer = path.resolve(base, '__placeholder__.css') + let importer = path.resolve(base, '__placeholder__.ts') for (let resolver of resolvers) { let resolved = await resolver(id, importer) diff --git a/packages/@tailwindcss-webpack/package.json b/packages/@tailwindcss-webpack/package.json index fe6828617..a74afb9c0 100644 --- a/packages/@tailwindcss-webpack/package.json +++ b/packages/@tailwindcss-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/webpack", - "version": "4.3.1", + "version": "4.3.2", "description": "A webpack loader for Tailwind CSS v4.", "license": "MIT", "repository": { diff --git a/packages/tailwindcss/package.json b/packages/tailwindcss/package.json index efb551128..75d3ae726 100644 --- a/packages/tailwindcss/package.json +++ b/packages/tailwindcss/package.json @@ -1,6 +1,6 @@ { "name": "tailwindcss", - "version": "4.3.1", + "version": "4.3.2", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { diff --git a/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap b/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap index a58af9445..d595e8c01 100644 --- a/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap +++ b/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap @@ -2222,6 +2222,7 @@ exports[`getClassList 1`] = ` "accent-current/90", "accent-current/95", "accent-current/100", + "accent-current/background", "accent-inherit", "accent-inherit/0", "accent-inherit/5", @@ -2244,6 +2245,7 @@ exports[`getClassList 1`] = ` "accent-inherit/90", "accent-inherit/95", "accent-inherit/100", + "accent-inherit/background", "accent-transparent", "accent-transparent/0", "accent-transparent/5", @@ -2266,6 +2268,7 @@ exports[`getClassList 1`] = ` "accent-transparent/90", "accent-transparent/95", "accent-transparent/100", + "accent-transparent/background", "align-baseline", "align-bottom", "align-middle", @@ -2590,6 +2593,7 @@ exports[`getClassList 1`] = ` "bg-current/90", "bg-current/95", "bg-current/100", + "bg-current/background", "bg-fixed", "bg-inherit", "bg-inherit/0", @@ -2613,6 +2617,7 @@ exports[`getClassList 1`] = ` "bg-inherit/90", "bg-inherit/95", "bg-inherit/100", + "bg-inherit/background", "bg-left", "bg-linear-0", "bg-linear-0/oklab", @@ -2841,6 +2846,7 @@ exports[`getClassList 1`] = ` "bg-transparent/90", "bg-transparent/95", "bg-transparent/100", + "bg-transparent/background", "block", "block-0", "block-0.5", @@ -2936,6 +2942,7 @@ exports[`getClassList 1`] = ` "border/90", "border/95", "border/100", + "border/background", "border-0", "border-2", "border-4", @@ -2962,6 +2969,7 @@ exports[`getClassList 1`] = ` "border-b/90", "border-b/95", "border-b/100", + "border-b/background", "border-b-0", "border-b-2", "border-b-4", @@ -2988,6 +2996,7 @@ exports[`getClassList 1`] = ` "border-b-current/90", "border-b-current/95", "border-b-current/100", + "border-b-current/background", "border-b-inherit", "border-b-inherit/0", "border-b-inherit/5", @@ -3010,6 +3019,7 @@ exports[`getClassList 1`] = ` "border-b-inherit/90", "border-b-inherit/95", "border-b-inherit/100", + "border-b-inherit/background", "border-b-transparent", "border-b-transparent/0", "border-b-transparent/5", @@ -3032,6 +3042,7 @@ exports[`getClassList 1`] = ` "border-b-transparent/90", "border-b-transparent/95", "border-b-transparent/100", + "border-b-transparent/background", "border-be", "border-be/0", "border-be/5", @@ -3054,6 +3065,7 @@ exports[`getClassList 1`] = ` "border-be/90", "border-be/95", "border-be/100", + "border-be/background", "border-be-0", "border-be-2", "border-be-4", @@ -3080,6 +3092,7 @@ exports[`getClassList 1`] = ` "border-be-current/90", "border-be-current/95", "border-be-current/100", + "border-be-current/background", "border-be-inherit", "border-be-inherit/0", "border-be-inherit/5", @@ -3102,6 +3115,7 @@ exports[`getClassList 1`] = ` "border-be-inherit/90", "border-be-inherit/95", "border-be-inherit/100", + "border-be-inherit/background", "border-be-transparent", "border-be-transparent/0", "border-be-transparent/5", @@ -3124,6 +3138,7 @@ exports[`getClassList 1`] = ` "border-be-transparent/90", "border-be-transparent/95", "border-be-transparent/100", + "border-be-transparent/background", "border-bs", "border-bs/0", "border-bs/5", @@ -3146,6 +3161,7 @@ exports[`getClassList 1`] = ` "border-bs/90", "border-bs/95", "border-bs/100", + "border-bs/background", "border-bs-0", "border-bs-2", "border-bs-4", @@ -3172,6 +3188,7 @@ exports[`getClassList 1`] = ` "border-bs-current/90", "border-bs-current/95", "border-bs-current/100", + "border-bs-current/background", "border-bs-inherit", "border-bs-inherit/0", "border-bs-inherit/5", @@ -3194,6 +3211,7 @@ exports[`getClassList 1`] = ` "border-bs-inherit/90", "border-bs-inherit/95", "border-bs-inherit/100", + "border-bs-inherit/background", "border-bs-transparent", "border-bs-transparent/0", "border-bs-transparent/5", @@ -3216,6 +3234,7 @@ exports[`getClassList 1`] = ` "border-bs-transparent/90", "border-bs-transparent/95", "border-bs-transparent/100", + "border-bs-transparent/background", "border-collapse", "border-current", "border-current/0", @@ -3239,6 +3258,7 @@ exports[`getClassList 1`] = ` "border-current/90", "border-current/95", "border-current/100", + "border-current/background", "border-dashed", "border-dotted", "border-double", @@ -3264,6 +3284,7 @@ exports[`getClassList 1`] = ` "border-e/90", "border-e/95", "border-e/100", + "border-e/background", "border-e-0", "border-e-2", "border-e-4", @@ -3290,6 +3311,7 @@ exports[`getClassList 1`] = ` "border-e-current/90", "border-e-current/95", "border-e-current/100", + "border-e-current/background", "border-e-inherit", "border-e-inherit/0", "border-e-inherit/5", @@ -3312,6 +3334,7 @@ exports[`getClassList 1`] = ` "border-e-inherit/90", "border-e-inherit/95", "border-e-inherit/100", + "border-e-inherit/background", "border-e-transparent", "border-e-transparent/0", "border-e-transparent/5", @@ -3334,6 +3357,7 @@ exports[`getClassList 1`] = ` "border-e-transparent/90", "border-e-transparent/95", "border-e-transparent/100", + "border-e-transparent/background", "border-hidden", "border-inherit", "border-inherit/0", @@ -3357,6 +3381,7 @@ exports[`getClassList 1`] = ` "border-inherit/90", "border-inherit/95", "border-inherit/100", + "border-inherit/background", "border-l", "border-l/0", "border-l/5", @@ -3379,6 +3404,7 @@ exports[`getClassList 1`] = ` "border-l/90", "border-l/95", "border-l/100", + "border-l/background", "border-l-0", "border-l-2", "border-l-4", @@ -3405,6 +3431,7 @@ exports[`getClassList 1`] = ` "border-l-current/90", "border-l-current/95", "border-l-current/100", + "border-l-current/background", "border-l-inherit", "border-l-inherit/0", "border-l-inherit/5", @@ -3427,6 +3454,7 @@ exports[`getClassList 1`] = ` "border-l-inherit/90", "border-l-inherit/95", "border-l-inherit/100", + "border-l-inherit/background", "border-l-transparent", "border-l-transparent/0", "border-l-transparent/5", @@ -3449,6 +3477,7 @@ exports[`getClassList 1`] = ` "border-l-transparent/90", "border-l-transparent/95", "border-l-transparent/100", + "border-l-transparent/background", "border-none", "border-r", "border-r/0", @@ -3472,6 +3501,7 @@ exports[`getClassList 1`] = ` "border-r/90", "border-r/95", "border-r/100", + "border-r/background", "border-r-0", "border-r-2", "border-r-4", @@ -3498,6 +3528,7 @@ exports[`getClassList 1`] = ` "border-r-current/90", "border-r-current/95", "border-r-current/100", + "border-r-current/background", "border-r-inherit", "border-r-inherit/0", "border-r-inherit/5", @@ -3520,6 +3551,7 @@ exports[`getClassList 1`] = ` "border-r-inherit/90", "border-r-inherit/95", "border-r-inherit/100", + "border-r-inherit/background", "border-r-transparent", "border-r-transparent/0", "border-r-transparent/5", @@ -3542,6 +3574,7 @@ exports[`getClassList 1`] = ` "border-r-transparent/90", "border-r-transparent/95", "border-r-transparent/100", + "border-r-transparent/background", "border-s", "border-s/0", "border-s/5", @@ -3564,6 +3597,7 @@ exports[`getClassList 1`] = ` "border-s/90", "border-s/95", "border-s/100", + "border-s/background", "border-s-0", "border-s-2", "border-s-4", @@ -3590,6 +3624,7 @@ exports[`getClassList 1`] = ` "border-s-current/90", "border-s-current/95", "border-s-current/100", + "border-s-current/background", "border-s-inherit", "border-s-inherit/0", "border-s-inherit/5", @@ -3612,6 +3647,7 @@ exports[`getClassList 1`] = ` "border-s-inherit/90", "border-s-inherit/95", "border-s-inherit/100", + "border-s-inherit/background", "border-s-transparent", "border-s-transparent/0", "border-s-transparent/5", @@ -3634,6 +3670,7 @@ exports[`getClassList 1`] = ` "border-s-transparent/90", "border-s-transparent/95", "border-s-transparent/100", + "border-s-transparent/background", "border-separate", "border-solid", "border-spacing-0", @@ -3763,6 +3800,7 @@ exports[`getClassList 1`] = ` "border-t/90", "border-t/95", "border-t/100", + "border-t/background", "border-t-0", "border-t-2", "border-t-4", @@ -3789,6 +3827,7 @@ exports[`getClassList 1`] = ` "border-t-current/90", "border-t-current/95", "border-t-current/100", + "border-t-current/background", "border-t-inherit", "border-t-inherit/0", "border-t-inherit/5", @@ -3811,6 +3850,7 @@ exports[`getClassList 1`] = ` "border-t-inherit/90", "border-t-inherit/95", "border-t-inherit/100", + "border-t-inherit/background", "border-t-transparent", "border-t-transparent/0", "border-t-transparent/5", @@ -3833,6 +3873,7 @@ exports[`getClassList 1`] = ` "border-t-transparent/90", "border-t-transparent/95", "border-t-transparent/100", + "border-t-transparent/background", "border-transparent", "border-transparent/0", "border-transparent/5", @@ -3855,6 +3896,7 @@ exports[`getClassList 1`] = ` "border-transparent/90", "border-transparent/95", "border-transparent/100", + "border-transparent/background", "border-x", "border-x/0", "border-x/5", @@ -3877,6 +3919,7 @@ exports[`getClassList 1`] = ` "border-x/90", "border-x/95", "border-x/100", + "border-x/background", "border-x-0", "border-x-2", "border-x-4", @@ -3903,6 +3946,7 @@ exports[`getClassList 1`] = ` "border-x-current/90", "border-x-current/95", "border-x-current/100", + "border-x-current/background", "border-x-inherit", "border-x-inherit/0", "border-x-inherit/5", @@ -3925,6 +3969,7 @@ exports[`getClassList 1`] = ` "border-x-inherit/90", "border-x-inherit/95", "border-x-inherit/100", + "border-x-inherit/background", "border-x-transparent", "border-x-transparent/0", "border-x-transparent/5", @@ -3947,6 +3992,7 @@ exports[`getClassList 1`] = ` "border-x-transparent/90", "border-x-transparent/95", "border-x-transparent/100", + "border-x-transparent/background", "border-y", "border-y/0", "border-y/5", @@ -3969,6 +4015,7 @@ exports[`getClassList 1`] = ` "border-y/90", "border-y/95", "border-y/100", + "border-y/background", "border-y-0", "border-y-2", "border-y-4", @@ -3995,6 +4042,7 @@ exports[`getClassList 1`] = ` "border-y-current/90", "border-y-current/95", "border-y-current/100", + "border-y-current/background", "border-y-inherit", "border-y-inherit/0", "border-y-inherit/5", @@ -4017,6 +4065,7 @@ exports[`getClassList 1`] = ` "border-y-inherit/90", "border-y-inherit/95", "border-y-inherit/100", + "border-y-inherit/background", "border-y-transparent", "border-y-transparent/0", "border-y-transparent/5", @@ -4039,6 +4088,7 @@ exports[`getClassList 1`] = ` "border-y-transparent/90", "border-y-transparent/95", "border-y-transparent/100", + "border-y-transparent/background", "bottom-0", "bottom-0.5", "bottom-1", @@ -4165,6 +4215,7 @@ exports[`getClassList 1`] = ` "caret-current/90", "caret-current/95", "caret-current/100", + "caret-current/background", "caret-inherit", "caret-inherit/0", "caret-inherit/5", @@ -4187,6 +4238,7 @@ exports[`getClassList 1`] = ` "caret-inherit/90", "caret-inherit/95", "caret-inherit/100", + "caret-inherit/background", "caret-transparent", "caret-transparent/0", "caret-transparent/5", @@ -4209,6 +4261,7 @@ exports[`getClassList 1`] = ` "caret-transparent/90", "caret-transparent/95", "caret-transparent/100", + "caret-transparent/background", "clear-both", "clear-end", "clear-left", @@ -4364,6 +4417,7 @@ exports[`getClassList 1`] = ` "decoration-current/90", "decoration-current/95", "decoration-current/100", + "decoration-current/background", "decoration-dashed", "decoration-dotted", "decoration-double", @@ -4390,6 +4444,7 @@ exports[`getClassList 1`] = ` "decoration-inherit/90", "decoration-inherit/95", "decoration-inherit/100", + "decoration-inherit/background", "decoration-solid", "decoration-transparent", "decoration-transparent/0", @@ -4413,6 +4468,7 @@ exports[`getClassList 1`] = ` "decoration-transparent/90", "decoration-transparent/95", "decoration-transparent/100", + "decoration-transparent/background", "decoration-wavy", "delay-75", "delay-100", @@ -4445,6 +4501,7 @@ exports[`getClassList 1`] = ` "divide-current/90", "divide-current/95", "divide-current/100", + "divide-current/background", "divide-dashed", "divide-dotted", "divide-double", @@ -4470,6 +4527,7 @@ exports[`getClassList 1`] = ` "divide-inherit/90", "divide-inherit/95", "divide-inherit/100", + "divide-inherit/background", "divide-none", "divide-solid", "divide-transparent", @@ -4494,6 +4552,7 @@ exports[`getClassList 1`] = ` "divide-transparent/90", "divide-transparent/95", "divide-transparent/100", + "divide-transparent/background", "divide-x", "divide-x-0", "divide-x-2", @@ -4528,6 +4587,7 @@ exports[`getClassList 1`] = ` "drop-shadow-current/90", "drop-shadow-current/95", "drop-shadow-current/100", + "drop-shadow-current/background", "drop-shadow-inherit", "drop-shadow-inherit/0", "drop-shadow-inherit/5", @@ -4550,6 +4610,7 @@ exports[`getClassList 1`] = ` "drop-shadow-inherit/90", "drop-shadow-inherit/95", "drop-shadow-inherit/100", + "drop-shadow-inherit/background", "drop-shadow-none", "drop-shadow-sm", "drop-shadow-transparent", @@ -4574,6 +4635,7 @@ exports[`getClassList 1`] = ` "drop-shadow-transparent/90", "drop-shadow-transparent/95", "drop-shadow-transparent/100", + "drop-shadow-transparent/background", "duration-75", "duration-100", "duration-150", @@ -4612,6 +4674,7 @@ exports[`getClassList 1`] = ` "fill-current/90", "fill-current/95", "fill-current/100", + "fill-current/background", "fill-inherit", "fill-inherit/0", "fill-inherit/5", @@ -4634,6 +4697,7 @@ exports[`getClassList 1`] = ` "fill-inherit/90", "fill-inherit/95", "fill-inherit/100", + "fill-inherit/background", "fill-none", "fill-transparent", "fill-transparent/0", @@ -4657,6 +4721,7 @@ exports[`getClassList 1`] = ` "fill-transparent/90", "fill-transparent/95", "fill-transparent/100", + "fill-transparent/background", "fixed", "flex", "flex-1", @@ -4780,6 +4845,7 @@ exports[`getClassList 1`] = ` "from-current/90", "from-current/95", "from-current/100", + "from-current/background", "from-inherit", "from-inherit/0", "from-inherit/5", @@ -4802,6 +4868,7 @@ exports[`getClassList 1`] = ` "from-inherit/90", "from-inherit/95", "from-inherit/100", + "from-inherit/background", "from-transparent", "from-transparent/0", "from-transparent/5", @@ -4824,6 +4891,7 @@ exports[`getClassList 1`] = ` "from-transparent/90", "from-transparent/95", "from-transparent/100", + "from-transparent/background", "gap-0", "gap-0.5", "gap-1", @@ -5447,6 +5515,7 @@ exports[`getClassList 1`] = ` "inset-ring-current/90", "inset-ring-current/95", "inset-ring-current/100", + "inset-ring-current/background", "inset-ring-inherit", "inset-ring-inherit/0", "inset-ring-inherit/5", @@ -5469,6 +5538,7 @@ exports[`getClassList 1`] = ` "inset-ring-inherit/90", "inset-ring-inherit/95", "inset-ring-inherit/100", + "inset-ring-inherit/background", "inset-ring-transparent", "inset-ring-transparent/0", "inset-ring-transparent/5", @@ -5491,6 +5561,7 @@ exports[`getClassList 1`] = ` "inset-ring-transparent/90", "inset-ring-transparent/95", "inset-ring-transparent/100", + "inset-ring-transparent/background", "inset-s-0", "inset-s-0.5", "inset-s-1", @@ -5576,6 +5647,7 @@ exports[`getClassList 1`] = ` "inset-shadow-current/90", "inset-shadow-current/95", "inset-shadow-current/100", + "inset-shadow-current/background", "inset-shadow-inherit", "inset-shadow-inherit/0", "inset-shadow-inherit/5", @@ -5598,6 +5670,7 @@ exports[`getClassList 1`] = ` "inset-shadow-inherit/90", "inset-shadow-inherit/95", "inset-shadow-inherit/100", + "inset-shadow-inherit/background", "inset-shadow-initial", "inset-shadow-none", "inset-shadow-sm", @@ -5644,6 +5717,7 @@ exports[`getClassList 1`] = ` "inset-shadow-transparent/90", "inset-shadow-transparent/95", "inset-shadow-transparent/100", + "inset-shadow-transparent/background", "inset-x-0", "inset-x-0.5", "inset-x-1", @@ -6045,6 +6119,7 @@ exports[`getClassList 1`] = ` "mask-b-from-current/90", "mask-b-from-current/95", "mask-b-from-current/100", + "mask-b-from-current/background", "mask-b-from-inherit", "mask-b-from-inherit/0", "mask-b-from-inherit/5", @@ -6067,6 +6142,7 @@ exports[`getClassList 1`] = ` "mask-b-from-inherit/90", "mask-b-from-inherit/95", "mask-b-from-inherit/100", + "mask-b-from-inherit/background", "mask-b-from-transparent", "mask-b-from-transparent/0", "mask-b-from-transparent/5", @@ -6089,6 +6165,7 @@ exports[`getClassList 1`] = ` "mask-b-from-transparent/90", "mask-b-from-transparent/95", "mask-b-from-transparent/100", + "mask-b-from-transparent/background", "mask-b-to-0", "mask-b-to-0%", "mask-b-to-0.5", @@ -6166,6 +6243,7 @@ exports[`getClassList 1`] = ` "mask-b-to-current/90", "mask-b-to-current/95", "mask-b-to-current/100", + "mask-b-to-current/background", "mask-b-to-inherit", "mask-b-to-inherit/0", "mask-b-to-inherit/5", @@ -6188,6 +6266,7 @@ exports[`getClassList 1`] = ` "mask-b-to-inherit/90", "mask-b-to-inherit/95", "mask-b-to-inherit/100", + "mask-b-to-inherit/background", "mask-b-to-transparent", "mask-b-to-transparent/0", "mask-b-to-transparent/5", @@ -6210,6 +6289,7 @@ exports[`getClassList 1`] = ` "mask-b-to-transparent/90", "mask-b-to-transparent/95", "mask-b-to-transparent/100", + "mask-b-to-transparent/background", "mask-bottom", "mask-bottom-left", "mask-bottom-right", @@ -6307,6 +6387,7 @@ exports[`getClassList 1`] = ` "mask-conic-from-current/90", "mask-conic-from-current/95", "mask-conic-from-current/100", + "mask-conic-from-current/background", "mask-conic-from-inherit", "mask-conic-from-inherit/0", "mask-conic-from-inherit/5", @@ -6329,6 +6410,7 @@ exports[`getClassList 1`] = ` "mask-conic-from-inherit/90", "mask-conic-from-inherit/95", "mask-conic-from-inherit/100", + "mask-conic-from-inherit/background", "mask-conic-from-transparent", "mask-conic-from-transparent/0", "mask-conic-from-transparent/5", @@ -6351,6 +6433,7 @@ exports[`getClassList 1`] = ` "mask-conic-from-transparent/90", "mask-conic-from-transparent/95", "mask-conic-from-transparent/100", + "mask-conic-from-transparent/background", "mask-conic-to-0", "mask-conic-to-0%", "mask-conic-to-0.5", @@ -6428,6 +6511,7 @@ exports[`getClassList 1`] = ` "mask-conic-to-current/90", "mask-conic-to-current/95", "mask-conic-to-current/100", + "mask-conic-to-current/background", "mask-conic-to-inherit", "mask-conic-to-inherit/0", "mask-conic-to-inherit/5", @@ -6450,6 +6534,7 @@ exports[`getClassList 1`] = ` "mask-conic-to-inherit/90", "mask-conic-to-inherit/95", "mask-conic-to-inherit/100", + "mask-conic-to-inherit/background", "mask-conic-to-transparent", "mask-conic-to-transparent/0", "mask-conic-to-transparent/5", @@ -6472,6 +6557,7 @@ exports[`getClassList 1`] = ` "mask-conic-to-transparent/90", "mask-conic-to-transparent/95", "mask-conic-to-transparent/100", + "mask-conic-to-transparent/background", "mask-contain", "mask-cover", "mask-ellipse", @@ -6554,6 +6640,7 @@ exports[`getClassList 1`] = ` "mask-l-from-current/90", "mask-l-from-current/95", "mask-l-from-current/100", + "mask-l-from-current/background", "mask-l-from-inherit", "mask-l-from-inherit/0", "mask-l-from-inherit/5", @@ -6576,6 +6663,7 @@ exports[`getClassList 1`] = ` "mask-l-from-inherit/90", "mask-l-from-inherit/95", "mask-l-from-inherit/100", + "mask-l-from-inherit/background", "mask-l-from-transparent", "mask-l-from-transparent/0", "mask-l-from-transparent/5", @@ -6598,6 +6686,7 @@ exports[`getClassList 1`] = ` "mask-l-from-transparent/90", "mask-l-from-transparent/95", "mask-l-from-transparent/100", + "mask-l-from-transparent/background", "mask-l-to-0", "mask-l-to-0%", "mask-l-to-0.5", @@ -6675,6 +6764,7 @@ exports[`getClassList 1`] = ` "mask-l-to-current/90", "mask-l-to-current/95", "mask-l-to-current/100", + "mask-l-to-current/background", "mask-l-to-inherit", "mask-l-to-inherit/0", "mask-l-to-inherit/5", @@ -6697,6 +6787,7 @@ exports[`getClassList 1`] = ` "mask-l-to-inherit/90", "mask-l-to-inherit/95", "mask-l-to-inherit/100", + "mask-l-to-inherit/background", "mask-l-to-transparent", "mask-l-to-transparent/0", "mask-l-to-transparent/5", @@ -6719,6 +6810,7 @@ exports[`getClassList 1`] = ` "mask-l-to-transparent/90", "mask-l-to-transparent/95", "mask-l-to-transparent/100", + "mask-l-to-transparent/background", "mask-left", "mask-linear-0", "mask-linear-1", @@ -6806,6 +6898,7 @@ exports[`getClassList 1`] = ` "mask-linear-from-current/90", "mask-linear-from-current/95", "mask-linear-from-current/100", + "mask-linear-from-current/background", "mask-linear-from-inherit", "mask-linear-from-inherit/0", "mask-linear-from-inherit/5", @@ -6828,6 +6921,7 @@ exports[`getClassList 1`] = ` "mask-linear-from-inherit/90", "mask-linear-from-inherit/95", "mask-linear-from-inherit/100", + "mask-linear-from-inherit/background", "mask-linear-from-transparent", "mask-linear-from-transparent/0", "mask-linear-from-transparent/5", @@ -6850,6 +6944,7 @@ exports[`getClassList 1`] = ` "mask-linear-from-transparent/90", "mask-linear-from-transparent/95", "mask-linear-from-transparent/100", + "mask-linear-from-transparent/background", "mask-linear-to-0", "mask-linear-to-0%", "mask-linear-to-0.5", @@ -6927,6 +7022,7 @@ exports[`getClassList 1`] = ` "mask-linear-to-current/90", "mask-linear-to-current/95", "mask-linear-to-current/100", + "mask-linear-to-current/background", "mask-linear-to-inherit", "mask-linear-to-inherit/0", "mask-linear-to-inherit/5", @@ -6949,6 +7045,7 @@ exports[`getClassList 1`] = ` "mask-linear-to-inherit/90", "mask-linear-to-inherit/95", "mask-linear-to-inherit/100", + "mask-linear-to-inherit/background", "mask-linear-to-transparent", "mask-linear-to-transparent/0", "mask-linear-to-transparent/5", @@ -6971,6 +7068,7 @@ exports[`getClassList 1`] = ` "mask-linear-to-transparent/90", "mask-linear-to-transparent/95", "mask-linear-to-transparent/100", + "mask-linear-to-transparent/background", "mask-luminance", "mask-match", "mask-no-clip", @@ -7059,6 +7157,7 @@ exports[`getClassList 1`] = ` "mask-r-from-current/90", "mask-r-from-current/95", "mask-r-from-current/100", + "mask-r-from-current/background", "mask-r-from-inherit", "mask-r-from-inherit/0", "mask-r-from-inherit/5", @@ -7081,6 +7180,7 @@ exports[`getClassList 1`] = ` "mask-r-from-inherit/90", "mask-r-from-inherit/95", "mask-r-from-inherit/100", + "mask-r-from-inherit/background", "mask-r-from-transparent", "mask-r-from-transparent/0", "mask-r-from-transparent/5", @@ -7103,6 +7203,7 @@ exports[`getClassList 1`] = ` "mask-r-from-transparent/90", "mask-r-from-transparent/95", "mask-r-from-transparent/100", + "mask-r-from-transparent/background", "mask-r-to-0", "mask-r-to-0%", "mask-r-to-0.5", @@ -7180,6 +7281,7 @@ exports[`getClassList 1`] = ` "mask-r-to-current/90", "mask-r-to-current/95", "mask-r-to-current/100", + "mask-r-to-current/background", "mask-r-to-inherit", "mask-r-to-inherit/0", "mask-r-to-inherit/5", @@ -7202,6 +7304,7 @@ exports[`getClassList 1`] = ` "mask-r-to-inherit/90", "mask-r-to-inherit/95", "mask-r-to-inherit/100", + "mask-r-to-inherit/background", "mask-r-to-transparent", "mask-r-to-transparent/0", "mask-r-to-transparent/5", @@ -7224,6 +7327,7 @@ exports[`getClassList 1`] = ` "mask-r-to-transparent/90", "mask-r-to-transparent/95", "mask-r-to-transparent/100", + "mask-r-to-transparent/background", "mask-radial-at-bottom", "mask-radial-at-bottom-left", "mask-radial-at-bottom-right", @@ -7314,6 +7418,7 @@ exports[`getClassList 1`] = ` "mask-radial-from-current/90", "mask-radial-from-current/95", "mask-radial-from-current/100", + "mask-radial-from-current/background", "mask-radial-from-inherit", "mask-radial-from-inherit/0", "mask-radial-from-inherit/5", @@ -7336,6 +7441,7 @@ exports[`getClassList 1`] = ` "mask-radial-from-inherit/90", "mask-radial-from-inherit/95", "mask-radial-from-inherit/100", + "mask-radial-from-inherit/background", "mask-radial-from-transparent", "mask-radial-from-transparent/0", "mask-radial-from-transparent/5", @@ -7358,6 +7464,7 @@ exports[`getClassList 1`] = ` "mask-radial-from-transparent/90", "mask-radial-from-transparent/95", "mask-radial-from-transparent/100", + "mask-radial-from-transparent/background", "mask-radial-to-0", "mask-radial-to-0%", "mask-radial-to-0.5", @@ -7435,6 +7542,7 @@ exports[`getClassList 1`] = ` "mask-radial-to-current/90", "mask-radial-to-current/95", "mask-radial-to-current/100", + "mask-radial-to-current/background", "mask-radial-to-inherit", "mask-radial-to-inherit/0", "mask-radial-to-inherit/5", @@ -7457,6 +7565,7 @@ exports[`getClassList 1`] = ` "mask-radial-to-inherit/90", "mask-radial-to-inherit/95", "mask-radial-to-inherit/100", + "mask-radial-to-inherit/background", "mask-radial-to-transparent", "mask-radial-to-transparent/0", "mask-radial-to-transparent/5", @@ -7479,6 +7588,7 @@ exports[`getClassList 1`] = ` "mask-radial-to-transparent/90", "mask-radial-to-transparent/95", "mask-radial-to-transparent/100", + "mask-radial-to-transparent/background", "mask-repeat", "mask-repeat-round", "mask-repeat-space", @@ -7563,6 +7673,7 @@ exports[`getClassList 1`] = ` "mask-t-from-current/90", "mask-t-from-current/95", "mask-t-from-current/100", + "mask-t-from-current/background", "mask-t-from-inherit", "mask-t-from-inherit/0", "mask-t-from-inherit/5", @@ -7585,6 +7696,7 @@ exports[`getClassList 1`] = ` "mask-t-from-inherit/90", "mask-t-from-inherit/95", "mask-t-from-inherit/100", + "mask-t-from-inherit/background", "mask-t-from-transparent", "mask-t-from-transparent/0", "mask-t-from-transparent/5", @@ -7607,6 +7719,7 @@ exports[`getClassList 1`] = ` "mask-t-from-transparent/90", "mask-t-from-transparent/95", "mask-t-from-transparent/100", + "mask-t-from-transparent/background", "mask-t-to-0", "mask-t-to-0%", "mask-t-to-0.5", @@ -7684,6 +7797,7 @@ exports[`getClassList 1`] = ` "mask-t-to-current/90", "mask-t-to-current/95", "mask-t-to-current/100", + "mask-t-to-current/background", "mask-t-to-inherit", "mask-t-to-inherit/0", "mask-t-to-inherit/5", @@ -7706,6 +7820,7 @@ exports[`getClassList 1`] = ` "mask-t-to-inherit/90", "mask-t-to-inherit/95", "mask-t-to-inherit/100", + "mask-t-to-inherit/background", "mask-t-to-transparent", "mask-t-to-transparent/0", "mask-t-to-transparent/5", @@ -7728,6 +7843,7 @@ exports[`getClassList 1`] = ` "mask-t-to-transparent/90", "mask-t-to-transparent/95", "mask-t-to-transparent/100", + "mask-t-to-transparent/background", "mask-top", "mask-top-left", "mask-top-right", @@ -7810,6 +7926,7 @@ exports[`getClassList 1`] = ` "mask-x-from-current/90", "mask-x-from-current/95", "mask-x-from-current/100", + "mask-x-from-current/background", "mask-x-from-inherit", "mask-x-from-inherit/0", "mask-x-from-inherit/5", @@ -7832,6 +7949,7 @@ exports[`getClassList 1`] = ` "mask-x-from-inherit/90", "mask-x-from-inherit/95", "mask-x-from-inherit/100", + "mask-x-from-inherit/background", "mask-x-from-transparent", "mask-x-from-transparent/0", "mask-x-from-transparent/5", @@ -7854,6 +7972,7 @@ exports[`getClassList 1`] = ` "mask-x-from-transparent/90", "mask-x-from-transparent/95", "mask-x-from-transparent/100", + "mask-x-from-transparent/background", "mask-x-to-0", "mask-x-to-0%", "mask-x-to-0.5", @@ -7931,6 +8050,7 @@ exports[`getClassList 1`] = ` "mask-x-to-current/90", "mask-x-to-current/95", "mask-x-to-current/100", + "mask-x-to-current/background", "mask-x-to-inherit", "mask-x-to-inherit/0", "mask-x-to-inherit/5", @@ -7953,6 +8073,7 @@ exports[`getClassList 1`] = ` "mask-x-to-inherit/90", "mask-x-to-inherit/95", "mask-x-to-inherit/100", + "mask-x-to-inherit/background", "mask-x-to-transparent", "mask-x-to-transparent/0", "mask-x-to-transparent/5", @@ -7975,6 +8096,7 @@ exports[`getClassList 1`] = ` "mask-x-to-transparent/90", "mask-x-to-transparent/95", "mask-x-to-transparent/100", + "mask-x-to-transparent/background", "mask-y-from-0", "mask-y-from-0%", "mask-y-from-0.5", @@ -8052,6 +8174,7 @@ exports[`getClassList 1`] = ` "mask-y-from-current/90", "mask-y-from-current/95", "mask-y-from-current/100", + "mask-y-from-current/background", "mask-y-from-inherit", "mask-y-from-inherit/0", "mask-y-from-inherit/5", @@ -8074,6 +8197,7 @@ exports[`getClassList 1`] = ` "mask-y-from-inherit/90", "mask-y-from-inherit/95", "mask-y-from-inherit/100", + "mask-y-from-inherit/background", "mask-y-from-transparent", "mask-y-from-transparent/0", "mask-y-from-transparent/5", @@ -8096,6 +8220,7 @@ exports[`getClassList 1`] = ` "mask-y-from-transparent/90", "mask-y-from-transparent/95", "mask-y-from-transparent/100", + "mask-y-from-transparent/background", "mask-y-to-0", "mask-y-to-0%", "mask-y-to-0.5", @@ -8173,6 +8298,7 @@ exports[`getClassList 1`] = ` "mask-y-to-current/90", "mask-y-to-current/95", "mask-y-to-current/100", + "mask-y-to-current/background", "mask-y-to-inherit", "mask-y-to-inherit/0", "mask-y-to-inherit/5", @@ -8195,6 +8321,7 @@ exports[`getClassList 1`] = ` "mask-y-to-inherit/90", "mask-y-to-inherit/95", "mask-y-to-inherit/100", + "mask-y-to-inherit/background", "mask-y-to-transparent", "mask-y-to-transparent/0", "mask-y-to-transparent/5", @@ -8217,6 +8344,7 @@ exports[`getClassList 1`] = ` "mask-y-to-transparent/90", "mask-y-to-transparent/95", "mask-y-to-transparent/100", + "mask-y-to-transparent/background", "max-block-0", "max-block-0.5", "max-block-1", @@ -9266,6 +9394,7 @@ exports[`getClassList 1`] = ` "outline/90", "outline/95", "outline/100", + "outline/background", "outline-0", "outline-1", "outline-2", @@ -9293,6 +9422,7 @@ exports[`getClassList 1`] = ` "outline-current/90", "outline-current/95", "outline-current/100", + "outline-current/background", "outline-dashed", "outline-dotted", "outline-double", @@ -9319,6 +9449,7 @@ exports[`getClassList 1`] = ` "outline-inherit/90", "outline-inherit/95", "outline-inherit/100", + "outline-inherit/background", "outline-none", "outline-offset-0", "outline-offset-1", @@ -9348,6 +9479,7 @@ exports[`getClassList 1`] = ` "outline-transparent/90", "outline-transparent/95", "outline-transparent/100", + "outline-transparent/background", "overflow-auto", "overflow-clip", "overflow-hidden", @@ -9641,6 +9773,7 @@ exports[`getClassList 1`] = ` "placeholder-current/90", "placeholder-current/95", "placeholder-current/100", + "placeholder-current/background", "placeholder-inherit", "placeholder-inherit/0", "placeholder-inherit/5", @@ -9663,6 +9796,7 @@ exports[`getClassList 1`] = ` "placeholder-inherit/90", "placeholder-inherit/95", "placeholder-inherit/100", + "placeholder-inherit/background", "placeholder-transparent", "placeholder-transparent/0", "placeholder-transparent/5", @@ -9685,6 +9819,7 @@ exports[`getClassList 1`] = ` "placeholder-transparent/90", "placeholder-transparent/95", "placeholder-transparent/100", + "placeholder-transparent/background", "pointer-events-auto", "pointer-events-none", "pr-0", @@ -9959,6 +10094,7 @@ exports[`getClassList 1`] = ` "ring-current/90", "ring-current/95", "ring-current/100", + "ring-current/background", "ring-inherit", "ring-inherit/0", "ring-inherit/5", @@ -9981,6 +10117,7 @@ exports[`getClassList 1`] = ` "ring-inherit/90", "ring-inherit/95", "ring-inherit/100", + "ring-inherit/background", "ring-inset", "ring-offset-0", "ring-offset-1", @@ -10009,6 +10146,7 @@ exports[`getClassList 1`] = ` "ring-offset-current/90", "ring-offset-current/95", "ring-offset-current/100", + "ring-offset-current/background", "ring-offset-inherit", "ring-offset-inherit/0", "ring-offset-inherit/5", @@ -10031,6 +10169,7 @@ exports[`getClassList 1`] = ` "ring-offset-inherit/90", "ring-offset-inherit/95", "ring-offset-inherit/100", + "ring-offset-inherit/background", "ring-offset-transparent", "ring-offset-transparent/0", "ring-offset-transparent/5", @@ -10053,6 +10192,7 @@ exports[`getClassList 1`] = ` "ring-offset-transparent/90", "ring-offset-transparent/95", "ring-offset-transparent/100", + "ring-offset-transparent/background", "ring-transparent", "ring-transparent/0", "ring-transparent/5", @@ -10075,6 +10215,7 @@ exports[`getClassList 1`] = ` "ring-transparent/90", "ring-transparent/95", "ring-transparent/100", + "ring-transparent/background", "rotate-0", "rotate-1", "rotate-2", @@ -11041,6 +11182,7 @@ exports[`getClassList 1`] = ` "scrollbar-thumb-current/90", "scrollbar-thumb-current/95", "scrollbar-thumb-current/100", + "scrollbar-thumb-current/background", "scrollbar-thumb-inherit", "scrollbar-thumb-inherit/0", "scrollbar-thumb-inherit/5", @@ -11063,6 +11205,7 @@ exports[`getClassList 1`] = ` "scrollbar-thumb-inherit/90", "scrollbar-thumb-inherit/95", "scrollbar-thumb-inherit/100", + "scrollbar-thumb-inherit/background", "scrollbar-thumb-transparent", "scrollbar-thumb-transparent/0", "scrollbar-thumb-transparent/5", @@ -11085,6 +11228,7 @@ exports[`getClassList 1`] = ` "scrollbar-thumb-transparent/90", "scrollbar-thumb-transparent/95", "scrollbar-thumb-transparent/100", + "scrollbar-thumb-transparent/background", "scrollbar-track-current", "scrollbar-track-current/0", "scrollbar-track-current/5", @@ -11107,6 +11251,7 @@ exports[`getClassList 1`] = ` "scrollbar-track-current/90", "scrollbar-track-current/95", "scrollbar-track-current/100", + "scrollbar-track-current/background", "scrollbar-track-inherit", "scrollbar-track-inherit/0", "scrollbar-track-inherit/5", @@ -11129,6 +11274,7 @@ exports[`getClassList 1`] = ` "scrollbar-track-inherit/90", "scrollbar-track-inherit/95", "scrollbar-track-inherit/100", + "scrollbar-track-inherit/background", "scrollbar-track-transparent", "scrollbar-track-transparent/0", "scrollbar-track-transparent/5", @@ -11151,6 +11297,7 @@ exports[`getClassList 1`] = ` "scrollbar-track-transparent/90", "scrollbar-track-transparent/95", "scrollbar-track-transparent/100", + "scrollbar-track-transparent/background", "select-all", "select-auto", "select-none", @@ -11190,6 +11337,7 @@ exports[`getClassList 1`] = ` "shadow-current/90", "shadow-current/95", "shadow-current/100", + "shadow-current/background", "shadow-inherit", "shadow-inherit/0", "shadow-inherit/5", @@ -11212,6 +11360,7 @@ exports[`getClassList 1`] = ` "shadow-inherit/90", "shadow-inherit/95", "shadow-inherit/100", + "shadow-inherit/background", "shadow-initial", "shadow-none", "shadow-transparent", @@ -11236,6 +11385,7 @@ exports[`getClassList 1`] = ` "shadow-transparent/90", "shadow-transparent/95", "shadow-transparent/100", + "shadow-transparent/background", "shrink", "shrink-0", "size-0", @@ -11446,6 +11596,7 @@ exports[`getClassList 1`] = ` "stroke-current/90", "stroke-current/95", "stroke-current/100", + "stroke-current/background", "stroke-inherit", "stroke-inherit/0", "stroke-inherit/5", @@ -11468,6 +11619,7 @@ exports[`getClassList 1`] = ` "stroke-inherit/90", "stroke-inherit/95", "stroke-inherit/100", + "stroke-inherit/background", "stroke-none", "stroke-transparent", "stroke-transparent/0", @@ -11491,6 +11643,7 @@ exports[`getClassList 1`] = ` "stroke-transparent/90", "stroke-transparent/95", "stroke-transparent/100", + "stroke-transparent/background", "subpixel-antialiased", "tab-2", "tab-4", @@ -11532,6 +11685,7 @@ exports[`getClassList 1`] = ` "text-current/90", "text-current/95", "text-current/100", + "text-current/background", "text-ellipsis", "text-end", "text-inherit", @@ -11556,6 +11710,7 @@ exports[`getClassList 1`] = ` "text-inherit/90", "text-inherit/95", "text-inherit/100", + "text-inherit/background", "text-justify", "text-left", "text-nowrap", @@ -11583,6 +11738,7 @@ exports[`getClassList 1`] = ` "text-shadow-current/90", "text-shadow-current/95", "text-shadow-current/100", + "text-shadow-current/background", "text-shadow-inherit", "text-shadow-inherit/0", "text-shadow-inherit/5", @@ -11605,6 +11761,7 @@ exports[`getClassList 1`] = ` "text-shadow-inherit/90", "text-shadow-inherit/95", "text-shadow-inherit/100", + "text-shadow-inherit/background", "text-shadow-initial", "text-shadow-none", "text-shadow-transparent", @@ -11629,6 +11786,7 @@ exports[`getClassList 1`] = ` "text-shadow-transparent/90", "text-shadow-transparent/95", "text-shadow-transparent/100", + "text-shadow-transparent/background", "text-start", "text-transparent", "text-transparent/0", @@ -11652,6 +11810,7 @@ exports[`getClassList 1`] = ` "text-transparent/90", "text-transparent/95", "text-transparent/100", + "text-transparent/background", "text-wrap", "text-xs", "to-0%", @@ -11697,6 +11856,7 @@ exports[`getClassList 1`] = ` "to-current/90", "to-current/95", "to-current/100", + "to-current/background", "to-inherit", "to-inherit/0", "to-inherit/5", @@ -11719,6 +11879,7 @@ exports[`getClassList 1`] = ` "to-inherit/90", "to-inherit/95", "to-inherit/100", + "to-inherit/background", "to-transparent", "to-transparent/0", "to-transparent/5", @@ -11741,6 +11902,7 @@ exports[`getClassList 1`] = ` "to-transparent/90", "to-transparent/95", "to-transparent/100", + "to-transparent/background", "top-0", "top-0.5", "top-1", @@ -12109,6 +12271,7 @@ exports[`getClassList 1`] = ` "via-current/90", "via-current/95", "via-current/100", + "via-current/background", "via-inherit", "via-inherit/0", "via-inherit/5", @@ -12131,6 +12294,7 @@ exports[`getClassList 1`] = ` "via-inherit/90", "via-inherit/95", "via-inherit/100", + "via-inherit/background", "via-none", "via-transparent", "via-transparent/0", @@ -12154,6 +12318,7 @@ exports[`getClassList 1`] = ` "via-transparent/90", "via-transparent/95", "via-transparent/100", + "via-transparent/background", "visible", "w-0", "w-0.5", diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index ae52159d3..c9fb0cc43 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -519,6 +519,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: desc.themeKeys, + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, ]) @@ -2490,6 +2491,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--border-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), hasDefaultValue: true, }, @@ -2960,6 +2962,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--background-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { @@ -3039,6 +3042,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--background-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { @@ -3306,6 +3310,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--background-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { @@ -3329,6 +3334,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--background-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, ]) @@ -3843,6 +3849,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--fill', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, ]) @@ -3894,6 +3901,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--stroke', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { @@ -4151,6 +4159,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--text-decoration-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { @@ -4739,6 +4748,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--drop-shadow-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { @@ -5196,6 +5206,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--outline-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), hasDefaultValue: true, }, @@ -5386,6 +5397,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--text-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { @@ -5508,6 +5520,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--text-shadow-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { @@ -5661,6 +5674,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--box-shadow-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { @@ -5788,6 +5802,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--box-shadow-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { @@ -5868,6 +5883,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--ring-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { @@ -5941,6 +5957,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--ring-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { @@ -6008,6 +6025,7 @@ export function createUtilities(theme: Theme) { { values: ['current', 'inherit', 'transparent'], valueThemeKeys: ['--ring-offset-color', '--color'], + modifierThemeKeys: ['--opacity'], modifiers: Array.from({ length: 21 }, (_, index) => `${index * 5}`), }, { diff --git a/playgrounds/nextjs/package.json b/playgrounds/nextjs/package.json index 949dc626e..5487af5a5 100644 --- a/playgrounds/nextjs/package.json +++ b/playgrounds/nextjs/package.json @@ -20,11 +20,5 @@ "@types/react": "19.2.15", "@types/react-dom": "19.2.3", "typescript": "^6.0.3" - }, - "pnpm": { - "overrides": { - "@types/react": "19.2.15", - "@types/react-dom": "19.2.3" - } } } diff --git a/playgrounds/v3/package.json b/playgrounds/v3/package.json index 1886da202..8c08310db 100644 --- a/playgrounds/v3/package.json +++ b/playgrounds/v3/package.json @@ -20,11 +20,5 @@ "@types/react-dom": "19.2.3", "autoprefixer": "^10.5.0", "typescript": "^6.0.3" - }, - "pnpm": { - "overrides": { - "@types/react": "19.2.15", - "@types/react-dom": "19.2.3" - } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cafb7a4fd..3059bf744 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,7 +40,7 @@ catalogs: specifier: 1.32.0 version: 1.32.0 postcss: - specifier: 8.5.15 + specifier: ^8.5.15 version: 8.5.15 prettier: specifier: 3.8.3 @@ -53,12 +53,8 @@ catalogs: version: 5.107.0 patchedDependencies: - '@parcel/watcher@2.5.1': - hash: p6xahr7zs4c5qsorj3exeppxhm - path: patches/@parcel__watcher@2.5.1.patch - lightningcss@1.32.0: - hash: mz3chiqe2jbihxa25xumd4ogum - path: patches/lightningcss@1.32.0.patch + '@parcel/watcher@2.5.1': c22241764997c5af4980d3be22550ae47858f14849dca486726653fa127eb69c + lightningcss@1.32.0: 1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930 importers: @@ -87,7 +83,7 @@ importers: version: 4.3.0(prettier@3.8.3)(typescript@5.9.3) tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.15)(typescript@5.9.3) + version: 8.5.1(jiti@2.7.0)(postcss@8.5.15)(typescript@5.9.3)(yaml@2.9.0) turbo: specifier: ^2.9.18 version: 2.9.18 @@ -96,9 +92,19 @@ importers: version: 5.9.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@22.19.19)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)) + version: 4.1.7(@types/node@22.19.19)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) crates/node: + devDependencies: + '@napi-rs/cli': + specifier: 3.7.0 + version: 3.7.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.9.1)(node-addon-api@8.7.0) + '@napi-rs/wasm-runtime': + specifier: ^1.1.5 + version: 1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + emnapi: + specifier: 1.11.1 + version: 1.11.1(node-addon-api@8.7.0) optionalDependencies: '@tailwindcss/oxide-android-arm64': specifier: workspace:* @@ -136,16 +142,6 @@ importers: '@tailwindcss/oxide-win32-x64-msvc': specifier: workspace:* version: link:npm/win32-x64-msvc - devDependencies: - '@napi-rs/cli': - specifier: 3.7.0 - version: 3.7.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@types/node@25.9.1)(node-addon-api@8.7.0) - '@napi-rs/wasm-runtime': - specifier: ^1.1.5 - version: 1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) - emnapi: - specifier: 1.11.1 - version: 1.11.1(node-addon-api@8.7.0) crates/node/npm/android-arm-eabi: {} @@ -203,6 +199,9 @@ importers: source-map-js: specifier: ^1.2.1 version: 1.2.1 + yaml: + specifier: ^2.9.0 + version: 2.9.0 packages/@tailwindcss-browser: devDependencies: @@ -220,7 +219,7 @@ importers: dependencies: '@parcel/watcher': specifier: 2.5.1 - version: 2.5.1(patch_hash=p6xahr7zs4c5qsorj3exeppxhm) + version: 2.5.1(patch_hash=c22241764997c5af4980d3be22550ae47858f14849dca486726653fa127eb69c) '@tailwindcss/node': specifier: workspace:* version: link:../@tailwindcss-node @@ -253,7 +252,7 @@ importers: version: 2.7.0 lightningcss: specifier: 'catalog:' - version: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) + version: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) magic-string: specifier: ^0.30.21 version: 0.30.21 @@ -449,7 +448,7 @@ importers: version: 22.19.19 vite: specifier: 'catalog:' - version: 8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0) + version: 8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0) packages/@tailwindcss-webpack: dependencies: @@ -494,7 +493,7 @@ importers: version: 1.7.2 lightningcss: specifier: 'catalog:' - version: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) + version: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) magic-string: specifier: ^0.30.21 version: 0.30.21 @@ -549,7 +548,7 @@ importers: version: 19.2.7(react@19.2.7) tailwindcss: specifier: ^3 - version: 3.4.19 + version: 3.4.19(yaml@2.9.0) devDependencies: '@types/node': specifier: 'catalog:' @@ -574,7 +573,7 @@ importers: version: link:../../packages/@tailwindcss-vite '@vitejs/plugin-react': specifier: ^6.0.2 - version: 6.0.2(vite@8.0.14(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)) + version: 6.0.2(vite@8.0.14(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) react: specifier: ^19.2.6 version: 19.2.6 @@ -596,7 +595,7 @@ importers: version: 1.3.14 vite: specifier: 'catalog:' - version: 8.0.14(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0) + version: 8.0.14(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0) packages: @@ -808,89 +807,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1154,42 +1169,49 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-arm64-musl@1.4.5': resolution: {integrity: sha512-yWjcPDgJ2nIL3KNvi4536dlT/CcCWO0DUyEOlBs/SacG7BeD6IjGh6yYzd3/X1Y3JItCbZoDoLUH8iB1lTXo3w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/lzma-linux-ppc64-gnu@1.4.5': resolution: {integrity: sha512-0XRhKuIU/9ZjT4WDIG/qnX7Xz7mSQHYZo9Gb3MP2gcvBgr6BA4zywQ9k3gmQaPn9ECE+CZg2V7DV7kT+x2pUMQ==} engines: {node: '>= 10'} cpu: [ppc64] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-riscv64-gnu@1.4.5': resolution: {integrity: sha512-QrqDIPEUUB23GCpyQj/QFyMlr8SGxxyExeZz9OWFnHfb70kXdTLWrHS/hEI1Ru+lSbQ/6xRqeoGyQ4Aqdg+/RA==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-s390x-gnu@1.4.5': resolution: {integrity: sha512-k8RVM5aMhW86E9H0QXdquwojew4H3SwPxbRVbl49/COJQWCUjGi79X6mYruMnMPEznZinUiT1jgKbFo2A00NdA==} engines: {node: '>= 10'} cpu: [s390x] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-x64-gnu@1.4.5': resolution: {integrity: sha512-6rMtBgnIq2Wcl1rQdZsnM+rtCcVCbws1nF8S2NzaUsVaZv8bjrPiAa0lwg4Eqnn1d9lgwqT+cZgm5m+//K08Kw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-x64-musl@1.4.5': resolution: {integrity: sha512-eiadGBKi7Vd0bCArBUOO/qqRYPHt/VQVvGyYvDFt6C2ZSIjlD+HuOl+2oS1sjf4CFjK4eDIog6EdXnL0NE6iyQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/lzma-wasm32-wasi@1.4.5': resolution: {integrity: sha512-+VyHHlr68dvey6fXc2hehw9gHVFIW3TtGF1XkcbAu65qVXsA9D/T+uuoRVqhE+JCyFHFrO0ixRbZDRK1XJt1sA==} @@ -1259,36 +1281,42 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/tar-linux-arm64-musl@1.1.0': resolution: {integrity: sha512-L/y1/26q9L/uBqiW/JdOb/Dc94egFvNALUZV2WCGKQXc6UByPBMgdiEyW2dtoYxYYYYc+AKD+jr+wQPcvX2vrQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/tar-linux-ppc64-gnu@1.1.0': resolution: {integrity: sha512-EPE1K/80RQvPbLRJDJs1QmCIcH+7WRi0F73+oTe1582y9RtfGRuzAkzeBuAGRXAQEjRQw/RjtNqr6UTJ+8UuWQ==} engines: {node: '>= 10'} cpu: [ppc64] os: [linux] + libc: [glibc] '@napi-rs/tar-linux-s390x-gnu@1.1.0': resolution: {integrity: sha512-B2jhWiB1ffw1nQBqLUP1h4+J1ovAxBOoe5N2IqDMOc63fsPZKNqF1PvO/dIem8z7LL4U4bsfmhy3gBfu547oNQ==} engines: {node: '>= 10'} cpu: [s390x] os: [linux] + libc: [glibc] '@napi-rs/tar-linux-x64-gnu@1.1.0': resolution: {integrity: sha512-tbZDHnb9617lTnsDMGo/eAMZxnsQFnaRe+MszRqHguKfMwkisc9CCJnks/r1o84u5fECI+J/HOrKXgczq/3Oww==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/tar-linux-x64-musl@1.1.0': resolution: {integrity: sha512-dV6cODlzbO8u6Anmv2N/ilQHq/AWz0xyltuXoLU3yUyXbZcnWYZuB2rL8OBGPmqNcD+x9NdScBNXh7vWN0naSQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/tar-wasm32-wasi@1.1.0': resolution: {integrity: sha512-jIa9nb2HzOrfH0F8QQ9g3WE4aMH5vSI5/1NYVNm9ysCmNjCCtMXCAhlI3WKCdm/DwHf0zLqdrrtDFXODcNaqMw==} @@ -1364,24 +1392,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/wasm-tools-linux-arm64-musl@1.0.1': resolution: {integrity: sha512-jAasbIvjZXCgX0TCuEFQr+4D6Lla/3AAVx2LmDuMjgG4xoIXzjKWl7c4chuaD+TI+prWT0X6LJcdzFT+ROKGHQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/wasm-tools-linux-x64-gnu@1.0.1': resolution: {integrity: sha512-Plgk5rPqqK2nocBGajkMVbGm010Z7dnUgq0wtnYRZbzWWxwWcXfZMPa8EYxrK4eE8SzpI7VlZP1tdVsdjgGwMw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/wasm-tools-linux-x64-musl@1.0.1': resolution: {integrity: sha512-GW7AzGuWxtQkyHknHWYFdR0CHmW6is8rG2Rf4V6GNmMpmwtXt/ItWYWtBe4zqJWycMNazpfZKSw/BpT7/MVCXQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/wasm-tools-wasm32-wasi@1.0.1': resolution: {integrity: sha512-/nQVSTrqSsn7YdAc2R7Ips/tnw5SPUcl3D7QrXCNGPqjbatIspnaexvaOYNyKMU6xPu+pc0BTnKVmqhlJJCPLA==} @@ -1430,24 +1462,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@next/swc-linux-arm64-musl@16.2.7': resolution: {integrity: sha512-qyogG9QtBzWxgJfeGBvOEHI3851gTfCF3wLZ5RDLTBJGAmE9p1qDwKCOdrBrvBzRvYDT+gUDp72pzlSEfAXgNA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@next/swc-linux-x64-gnu@16.2.7': resolution: {integrity: sha512-Vhe4ZDuBpmMogrGi5D4R2Kq4JAQlj6+wvgaFYy31zfES0zPmt6TLA+cuYpM/OLrPZjo2MYQTHVqNUSCR6+fDZQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@next/swc-linux-x64-musl@16.2.7': resolution: {integrity: sha512-srvian89JahFLw1YLBEuhvPJ0DO5lpUeJQMXy4xYo7g628ZlNgXdNkqoxSAv9OYrBfByh6vxISMwW/mRbzCY+g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@next/swc-win32-arm64-msvc@16.2.7': resolution: {integrity: sha512-GX3wvLpULFuRFJzwHaKfm7QZJ18F4ZSuxlPJ96BoBglCzBmdSjyeBKF+ZhWhvL/ckxNfLnNa7bsObO2ipYpszw==} @@ -1661,30 +1697,35 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-glibc@2.5.6': resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.1': resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm-musl@2.5.6': resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.1': resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-glibc@2.5.6': resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} @@ -1697,6 +1738,7 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-musl@2.5.6': resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} @@ -1709,6 +1751,7 @@ packages: engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-glibc@2.5.6': resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} @@ -1721,6 +1764,7 @@ packages: engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-musl@2.5.6': resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} @@ -1818,36 +1862,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.2': resolution: {integrity: sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.0.2': resolution: {integrity: sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.0.2': resolution: {integrity: sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.0.2': resolution: {integrity: sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.2': resolution: {integrity: sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-openharmony-arm64@1.0.2': resolution: {integrity: sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w==} @@ -1909,66 +1959,79 @@ packages: resolution: {integrity: sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.60.4': resolution: {integrity: sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.60.4': resolution: {integrity: sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.60.4': resolution: {integrity: sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.60.4': resolution: {integrity: sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.60.4': resolution: {integrity: sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.60.4': resolution: {integrity: sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.60.4': resolution: {integrity: sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.60.4': resolution: {integrity: sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.60.4': resolution: {integrity: sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.60.4': resolution: {integrity: sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.60.4': resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.60.4': resolution: {integrity: sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.60.4': resolution: {integrity: sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==} @@ -2014,21 +2077,25 @@ packages: resolution: {integrity: sha512-1ZD4YFhG1rmgqj+W8hfwHyKV8xDxGsc/3KgU0FwmiVEX7JfzhCkgBO/xlCG79kRKSrzuVzt4icO/G3cCKn0pag==} cpu: [arm64] os: [linux] + libc: [glibc] '@rspack/binding-linux-arm64-musl@2.0.2': resolution: {integrity: sha512-/PtTkM/DsDLjeuXTmeJeRfbjCDbcL9jvoVgZrgxYFZ28y2cdLvbChbW9uigOzs5dQEs1CIBQXMTTj7KhdBTuQg==} cpu: [arm64] os: [linux] + libc: [musl] '@rspack/binding-linux-x64-gnu@2.0.2': resolution: {integrity: sha512-bBjsZxMHRaPo6X9SokApm6ucs+UhXtAJFyJJyuk2BH4XJsLeCU9Dz1vMwioeohFbJUUeTASVPm6/BL+RhSaunw==} cpu: [x64] os: [linux] + libc: [glibc] '@rspack/binding-linux-x64-musl@2.0.2': resolution: {integrity: sha512-HjlpInqzabDNkhVsUJpsHPqa9QYVWBViJoyWNjzXCAW0vKMDvwaphyUvokSinX8FGTlZi/sr5UEaHJo6XtQ35g==} cpu: [x64] os: [linux] + libc: [musl] '@rspack/binding-wasm32-wasi@2.0.2': resolution: {integrity: sha512-YaRYNFLJRpkGfYjSWR7n9f+nQKtrlmrrffpAn/blc2geHcRvXoBc5SCs1idPtsLhj7H9qWWhs7ucjyHy4csWFg==} @@ -3485,6 +3552,11 @@ packages: engines: {node: '>=8'} hasBin: true + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + snapshots: '@alloc/quick-lru@5.2.0': {} @@ -4349,7 +4421,7 @@ snapshots: '@parcel/watcher-win32-x64@2.5.6': {} - '@parcel/watcher@2.5.1(patch_hash=p6xahr7zs4c5qsorj3exeppxhm)': + '@parcel/watcher@2.5.1(patch_hash=c22241764997c5af4980d3be22550ae47858f14849dca486726653fa127eb69c)': dependencies: detect-libc: 1.0.3 is-glob: 4.0.3 @@ -4657,10 +4729,10 @@ snapshots: '@types/semver@7.7.1': {} - '@vitejs/plugin-react@6.0.2(vite@8.0.14(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0))': + '@vitejs/plugin-react@6.0.2(vite@8.0.14(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.0.14(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0) + vite: 8.0.14(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0) '@vitest/expect@4.1.7': dependencies: @@ -4671,13 +4743,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.7(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0))': + '@vitest/mocker@4.1.7(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0) + vite: 8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0) '@vitest/pretty-format@4.1.7': dependencies: @@ -5208,7 +5280,7 @@ snapshots: lightningcss-win32-x64-msvc@1.32.0: {} - lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum): + lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930): dependencies: detect-libc: 2.1.2 optionalDependencies: @@ -5398,19 +5470,21 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.5.15 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.15): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.15)(yaml@2.9.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 postcss: 8.5.15 + yaml: 2.9.0 - postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.15): + postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.15)(yaml@2.9.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.7.0 postcss: 8.5.15 + yaml: 2.9.0 postcss-nested@6.2.0(postcss@8.5.15): dependencies: @@ -5652,7 +5726,7 @@ snapshots: tagged-tag@1.0.0: {} - tailwindcss@3.4.19: + tailwindcss@3.4.19(yaml@2.9.0): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -5671,7 +5745,7 @@ snapshots: postcss: 8.5.15 postcss-import: 15.1.0(postcss@8.5.15) postcss-js: 4.1.0(postcss@8.5.15) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.15) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.15)(yaml@2.9.0) postcss-nested: 6.2.0(postcss@8.5.15) postcss-selector-parser: 6.1.2 resolve: 1.22.12 @@ -5755,7 +5829,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(jiti@2.7.0)(postcss@8.5.15)(typescript@5.9.3): + tsup@8.5.1(jiti@2.7.0)(postcss@8.5.15)(typescript@5.9.3)(yaml@2.9.0): dependencies: bundle-require: 5.1.0(esbuild@0.27.7) cac: 6.7.14 @@ -5766,7 +5840,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.15) + postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.15)(yaml@2.9.0) resolve-from: 5.0.0 rollup: 4.60.4 source-map: 0.7.6 @@ -5830,9 +5904,9 @@ snapshots: util-deprecate@1.0.2: {} - vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0): + vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0): dependencies: - lightningcss: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) + lightningcss: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) picomatch: 4.0.4 postcss: 8.5.15 rolldown: 1.0.2 @@ -5843,10 +5917,11 @@ snapshots: fsevents: 2.3.3 jiti: 2.7.0 terser: 5.48.0 + yaml: 2.9.0 - vite@8.0.14(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0): + vite@8.0.14(@types/node@25.9.1)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0): dependencies: - lightningcss: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) + lightningcss: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) picomatch: 4.0.4 postcss: 8.5.15 rolldown: 1.0.2 @@ -5857,11 +5932,12 @@ snapshots: fsevents: 2.3.3 jiti: 2.7.0 terser: 5.48.0 + yaml: 2.9.0 - vitest@4.1.7(@types/node@22.19.19)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)): + vitest@4.1.7(@types/node@22.19.19)(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)) + '@vitest/mocker': 4.1.7(vite@8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.7 '@vitest/runner': 4.1.7 '@vitest/snapshot': 4.1.7 @@ -5878,7 +5954,7 @@ snapshots: tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0) + vite: 8.0.14(@types/node@22.19.19)(esbuild@0.27.7)(jiti@2.7.0)(terser@5.48.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.19.19 @@ -5935,3 +6011,5 @@ snapshots: dependencies: siginfo: 2.0.0 stackback: 0.0.2 + + yaml@2.9.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ddc1c2bb0..a537b6aba 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,6 +5,10 @@ packages: - 'playgrounds/*' - 'integrations' +patchedDependencies: + '@parcel/watcher@2.5.1': patches/@parcel__watcher@2.5.1.patch + lightningcss@1.32.0: patches/lightningcss@1.32.0.patch + catalog: '@types/node': 22.19.19 dedent: 1.7.2 @@ -17,7 +21,25 @@ catalog: lightningcss-linux-x64-musl: 1.32.0 lightningcss-win32-x64-msvc: 1.32.0 lightningcss: 1.32.0 - postcss: 8.5.15 + postcss: ^8.5.15 prettier: 3.8.3 vite: 8.0.14 webpack: 5.107.0 + +onlyBuiltDependencies: + - '@parcel/watcher' + - bun + - esbuild + - sharp + - tree-sitter + - tree-sitter-javascript + - tree-sitter-typescript + +allowBuilds: + '@parcel/watcher': true + bun: true + esbuild: true + sharp: true + tree-sitter: true + tree-sitter-javascript: true + tree-sitter-typescript: true diff --git a/scripts/pack-packages.mjs b/scripts/pack-packages.mjs index a3d34da6f..2b0b9f15d 100644 --- a/scripts/pack-packages.mjs +++ b/scripts/pack-packages.mjs @@ -21,18 +21,25 @@ let workspaces = new Map() for (let path of paths) { let pkg = await fs.readFile(path, 'utf8').then(JSON.parse) if (pkg.private) continue - workspaces.set(pkg.name, { version: pkg.version ?? '', dir: dirname(path) }) + workspaces.set(pkg.name, { + version: pkg.version ?? '', + dir: dirname(path), + hasBundledDependencies: pkg.bundledDependencies?.length > 0 ?? false, + }) } // Clean dist folder await fs.rm(path.join(root, 'dist'), { recursive: true, force: true }) Promise.all( - [...workspaces.entries()].map(async ([name, { dir }]) => { + [...workspaces.entries()].map(async ([name, { dir, hasBundledDependencies }]) => { function pack() { return new Promise((resolve) => { + // `bundledDependencies` can only be packed with the hoisted node linker + // since pnpm v10. We opt into it for those packages only, instead of + // changing the node linker for the entire workspace. exec( - `pnpm pack --pack-gzip-level=0 --pack-destination="${path.join(root, 'dist').replace(/\\/g, '\\\\')}"`, + `pnpm pack --pack-gzip-level=0 --pack-destination="${path.join(root, 'dist').replace(/\\/g, '\\\\')}"${hasBundledDependencies ? ' --config.node-linker=hoisted' : ''}`, { cwd: dir }, (err, stdout, stderr) => { if (err) {