From 90abc940524b18f9a7ab48763b555f9ac1157364 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Tue, 9 Dec 2025 05:36:53 -0500 Subject: [PATCH 001/100] =?UTF-8?q?Update=20@napi-rs/wasm-runtime=201.0.7?= =?UTF-8?q?=20=E2=86=92=201.1.0=20(minor)=20(#19424)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ @​napi-rs/wasm-runtime (1.0.7 → 1.1.0) · [Repo](https://github.com/napi-rs/napi-rs) Sorry, we couldn't find anything useful about this release. --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- crates/node/npm/wasm32-wasi/package.json | 2 +- crates/node/package.json | 2 +- pnpm-lock.yaml | 41 ++++++++---------------- 3 files changed, 15 insertions(+), 30 deletions(-) diff --git a/crates/node/npm/wasm32-wasi/package.json b/crates/node/npm/wasm32-wasi/package.json index e7c1184f348b..c962d630e69f 100644 --- a/crates/node/npm/wasm32-wasi/package.json +++ b/crates/node/npm/wasm32-wasi/package.json @@ -27,7 +27,7 @@ }, "browser": "tailwindcss-oxide.wasi-browser.js", "dependencies": { - "@napi-rs/wasm-runtime": "^1.0.7", + "@napi-rs/wasm-runtime": "^1.1.0", "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1", diff --git a/crates/node/package.json b/crates/node/package.json index 037d0c354dd0..b03359479613 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -34,7 +34,7 @@ "license": "MIT", "devDependencies": { "@napi-rs/cli": "^3.4.1", - "@napi-rs/wasm-runtime": "^1.0.7", + "@napi-rs/wasm-runtime": "^1.1.0", "emnapi": "1.7.1" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 25b979bbdcd3..b5770be1c448 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -129,8 +129,8 @@ importers: specifier: ^3.4.1 version: 3.4.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0) '@napi-rs/wasm-runtime': - specifier: ^1.0.7 - version: 1.0.7 + specifier: ^1.1.0 + version: 1.1.0 emnapi: specifier: 1.7.1 version: 1.7.1(node-addon-api@8.3.0) @@ -167,8 +167,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 '@napi-rs/wasm-runtime': - specifier: ^1.0.7 - version: 1.0.7 + specifier: ^1.1.0 + version: 1.1.0 '@tybys/wasm-util': specifier: ^0.10.1 version: 0.10.1 @@ -672,15 +672,9 @@ packages: resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} - '@emnapi/core@1.5.0': - resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - '@emnapi/core@1.7.1': resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} @@ -1752,8 +1746,8 @@ packages: resolution: {integrity: sha512-7cmzIu+Vbupriudo7UudoMRH2OA3cTw67vva8MxeoAe5S7vPFI7z0vp0pMXiA25S8IUJefImQ90FeJjl8fjEaQ==} engines: {node: '>= 10'} - '@napi-rs/wasm-runtime@1.0.7': - resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} + '@napi-rs/wasm-runtime@1.1.0': + resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==} '@napi-rs/wasm-tools-android-arm-eabi@1.0.1': resolution: {integrity: sha512-lr07E/l571Gft5v4aA1dI8koJEmF1F0UigBbsqg9OWNzg80H3lDPO+auv85y3T/NHE3GirDk7x/D3sLO57vayw==} @@ -3696,7 +3690,7 @@ packages: engines: {node: '>=20.9.0'} hasBin: true peerDependencies: - '@opentelemetry/api': ^1.1.0 + '@opentelemetry/api': 1.4.1 '@playwright/test': ^1.51.1 babel-plugin-react-compiler: '*' react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 @@ -4755,20 +4749,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@emnapi/core@1.5.0': - dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 - '@emnapi/core@1.7.1': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 - '@emnapi/runtime@1.5.0': - dependencies: - tslib: 2.8.1 - '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 @@ -5412,7 +5397,7 @@ snapshots: '@napi-rs/lzma-wasm32-wasi@1.4.5': dependencies: - '@napi-rs/wasm-runtime': 1.0.7 + '@napi-rs/wasm-runtime': 1.1.0 optional: true '@napi-rs/lzma-win32-arm64-msvc@1.4.5': @@ -5482,7 +5467,7 @@ snapshots: '@napi-rs/tar-wasm32-wasi@1.1.0': dependencies: - '@napi-rs/wasm-runtime': 1.0.7 + '@napi-rs/wasm-runtime': 1.1.0 optional: true '@napi-rs/tar-win32-arm64-msvc@1.1.0': @@ -5513,10 +5498,10 @@ snapshots: '@napi-rs/tar-win32-ia32-msvc': 1.1.0 '@napi-rs/tar-win32-x64-msvc': 1.1.0 - '@napi-rs/wasm-runtime@1.0.7': + '@napi-rs/wasm-runtime@1.1.0': dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 + '@emnapi/core': 1.7.1 + '@emnapi/runtime': 1.7.1 '@tybys/wasm-util': 0.10.1 '@napi-rs/wasm-tools-android-arm-eabi@1.0.1': @@ -5548,7 +5533,7 @@ snapshots: '@napi-rs/wasm-tools-wasm32-wasi@1.0.1': dependencies: - '@napi-rs/wasm-runtime': 1.0.7 + '@napi-rs/wasm-runtime': 1.1.0 optional: true '@napi-rs/wasm-tools-win32-arm64-msvc@1.0.1': From 3a1df5a283308ca3079aa204a818c4de57e2b78d Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Tue, 9 Dec 2025 10:40:36 +0000 Subject: [PATCH 002/100] Update @napi-rs/cli to version 3.5.0 --- crates/node/package.json | 2 +- pnpm-lock.yaml | 430 ++++++++++++++++++++------------------- 2 files changed, 217 insertions(+), 215 deletions(-) diff --git a/crates/node/package.json b/crates/node/package.json index b03359479613..e35d336683a4 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -33,7 +33,7 @@ }, "license": "MIT", "devDependencies": { - "@napi-rs/cli": "^3.4.1", + "@napi-rs/cli": "^3.5.0", "@napi-rs/wasm-runtime": "^1.1.0", "emnapi": "1.7.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5770be1c448..18eabb08e3a3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -126,8 +126,8 @@ importers: version: link:npm/win32-x64-msvc devDependencies: '@napi-rs/cli': - specifier: ^3.4.1 - version: 3.4.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0) + specifier: ^3.5.0 + version: 3.5.0(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0) '@napi-rs/wasm-runtime': specifier: ^1.1.0 version: 1.1.0 @@ -1326,134 +1326,134 @@ packages: cpu: [x64] os: [win32] - '@inquirer/ansi@1.0.0': - resolution: {integrity: sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==} - engines: {node: '>=18'} + '@inquirer/ansi@2.0.2': + resolution: {integrity: sha512-SYLX05PwJVnW+WVegZt1T4Ip1qba1ik+pNJPDiqvk6zS5Y/i8PhRzLpGEtVd7sW0G8cMtkD8t4AZYhQwm8vnww==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/checkbox@4.2.4': - resolution: {integrity: sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==} - engines: {node: '>=18'} + '@inquirer/checkbox@5.0.2': + resolution: {integrity: sha512-iTPV4tMMct7iOpwer5qmTP7gjnk1VQJjsNfAaC2b8Q3qiuHM3K2yjjDr5u1MKfkrvp2JD4Flf8sIPpF21pmZmw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/confirm@5.1.18': - resolution: {integrity: sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==} - engines: {node: '>=18'} + '@inquirer/confirm@6.0.2': + resolution: {integrity: sha512-A0/13Wyi+8iFeNDX6D4zZYKPoBLIEbE4K/219qHcnpXMer2weWvaTo63+2c7mQPPA206DEMSYVOPnEw3meOlCw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/core@10.2.2': - resolution: {integrity: sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==} - engines: {node: '>=18'} + '@inquirer/core@11.0.2': + resolution: {integrity: sha512-lgMRx/n02ciiNELBvFLHtmcjbV5tf5D/I0UYfCg2YbTZWmBZ10/niLd3IjWBxz8LtM27xP+4oLEa06Slmb7p7A==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/editor@4.2.20': - resolution: {integrity: sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==} - engines: {node: '>=18'} + '@inquirer/editor@5.0.2': + resolution: {integrity: sha512-pXQ4Nf0qmFcJuYB6NlcIIxH6l6zKOwNg1Jh/ZRdKd2dTqBB4OXKUFbFwR2K4LVXVtq15ZFFatBVT+rerYR8hWQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/expand@4.0.20': - resolution: {integrity: sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==} - engines: {node: '>=18'} + '@inquirer/expand@5.0.2': + resolution: {integrity: sha512-siFG1swxfjFIOxIcehtZkh+KUNB/YCpyfHNEGu+nC/SBXIbgUWibvThLn/WesSxLRGOeSKdNKoTm+GQCKFm6Ww==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/external-editor@1.0.2': - resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} - engines: {node: '>=18'} + '@inquirer/external-editor@2.0.2': + resolution: {integrity: sha512-X/fMXK7vXomRWEex1j8mnj7s1mpnTeP4CO/h2gysJhHLT2WjBnLv4ZQEGpm/kcYI8QfLZ2fgW+9kTKD+jeopLg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/figures@1.0.13': - resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} - engines: {node: '>=18'} + '@inquirer/figures@2.0.2': + resolution: {integrity: sha512-qXm6EVvQx/FmnSrCWCIGtMHwqeLgxABP8XgcaAoywsL0NFga9gD5kfG0gXiv80GjK9Hsoz4pgGwF/+CjygyV9A==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/input@4.2.4': - resolution: {integrity: sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==} - engines: {node: '>=18'} + '@inquirer/input@5.0.2': + resolution: {integrity: sha512-hN2YRo1QiEc9lD3mK+CPnTS4TK2RhCMmMmP4nCWwTkmQL2vx9jPJWYk+rbUZpwR1D583ZJk1FI3i9JZXIpi/qg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/number@3.0.20': - resolution: {integrity: sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==} - engines: {node: '>=18'} + '@inquirer/number@4.0.2': + resolution: {integrity: sha512-4McnjTSYrlthNW1ojkkmP75WLRYhQs7GXm6pDDoIrHqJuV5uUYwfdbB0geHdaKMarAqJQgoOVjzIT0jdWCsKew==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/password@4.0.20': - resolution: {integrity: sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==} - engines: {node: '>=18'} + '@inquirer/password@5.0.2': + resolution: {integrity: sha512-oSDziMKiw4G2e4zS+0JRfxuPFFGh6N/9yUaluMgEHp2/Yyj2JGwfDO7XbwtOrxVrz+XsP/iaGyWXdQb9d8A0+g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/prompts@7.8.6': - resolution: {integrity: sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==} - engines: {node: '>=18'} + '@inquirer/prompts@8.0.2': + resolution: {integrity: sha512-2zK5zY48fZcl6+gG4eqOC/UzZsJckHCRvjXoLuW4D8LKOCVGdcJiSKkLnumSZjR/6PXPINDGOrGHqNxb+sxJDg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/rawlist@4.1.8': - resolution: {integrity: sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==} - engines: {node: '>=18'} + '@inquirer/rawlist@5.0.2': + resolution: {integrity: sha512-AcNALEdQKUQDeJcpC1a3YC53m1MLv+sMUS+vRZ8Qigs1Yg3Dcdtmi82rscJplogKOY8CXkKW4wvVwHS2ZjCIBQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/search@3.1.3': - resolution: {integrity: sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==} - engines: {node: '>=18'} + '@inquirer/search@4.0.2': + resolution: {integrity: sha512-hg63w5toohdzE65S3LiGhdfIL0kT+yisbZARf7zw65PvyMUTutTN3eMAvD/B6y/25z88vTrB7kSB45Vz5CbrXg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/select@4.3.4': - resolution: {integrity: sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==} - engines: {node: '>=18'} + '@inquirer/select@5.0.2': + resolution: {integrity: sha512-JygTohvQxSNnvt7IKANVlg/eds+yN5sLRilYeGc4ri/9Aqi/2QPoXBMV5Cz/L1VtQv63SnTbPXJZeCK2pSwsOA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/type@3.0.8': - resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} - engines: {node: '>=18'} + '@inquirer/type@4.0.2': + resolution: {integrity: sha512-cae7mzluplsjSdgFA6ACLygb5jC8alO0UUnFPyu0E7tNRPrL+q/f8VcSXp+cjZQ7l5CMpDpi2G1+IQvkOiL1Lw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1497,12 +1497,12 @@ packages: '@jridgewell/trace-mapping@0.3.29': resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - '@napi-rs/cli@3.4.1': - resolution: {integrity: sha512-ayhm+NfrP5Hmh7vy5pfyYm/ktYtLh2PrgdLuqHTAubO7RoO2JkUE4F991AtgYxNewwXI8+guZLxU8itV7QnDrQ==} + '@napi-rs/cli@3.5.0': + resolution: {integrity: sha512-bJsDvAa9qK9VMkFhr780XWfQlK+GDlAX8qpK20buSmA0ld6nxCtiZ5a0J45zbd0FWT+VTZE1/u8VPH2vLfnVvw==} engines: {node: '>= 16'} hasBin: true peerDependencies: - '@emnapi/runtime': ^1.5.0 + '@emnapi/runtime': ^1.7.1 peerDependenciesMeta: '@emnapi/runtime': optional: true @@ -1904,26 +1904,23 @@ packages: resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} engines: {node: '>= 20'} - '@octokit/core@7.0.4': - resolution: {integrity: sha512-jOT8V1Ba5BdC79sKrRWDdMT5l1R+XNHTPR6CPWzUP2EcfAcvIHZWF0eAbmRcpOOP5gVIwnqNg0C4nvh6Abc3OA==} + '@octokit/core@7.0.6': + resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==} engines: {node: '>= 20'} - '@octokit/endpoint@11.0.0': - resolution: {integrity: sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ==} + '@octokit/endpoint@11.0.2': + resolution: {integrity: sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==} engines: {node: '>= 20'} - '@octokit/graphql@9.0.1': - resolution: {integrity: sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg==} + '@octokit/graphql@9.0.3': + resolution: {integrity: sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==} engines: {node: '>= 20'} - '@octokit/openapi-types@25.1.0': - resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} + '@octokit/openapi-types@27.0.0': + resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} - '@octokit/openapi-types@26.0.0': - resolution: {integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==} - - '@octokit/plugin-paginate-rest@13.1.1': - resolution: {integrity: sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw==} + '@octokit/plugin-paginate-rest@14.0.0': + resolution: {integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' @@ -1934,29 +1931,26 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-rest-endpoint-methods@16.1.0': - resolution: {integrity: sha512-nCsyiKoGRnhH5LkH8hJEZb9swpqOcsW+VXv1QoyUNQXJeVODG4+xM6UICEqyqe9XFr6LkL8BIiFCPev8zMDXPw==} + '@octokit/plugin-rest-endpoint-methods@17.0.0': + resolution: {integrity: sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' - '@octokit/request-error@7.0.0': - resolution: {integrity: sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg==} + '@octokit/request-error@7.1.0': + resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} engines: {node: '>= 20'} - '@octokit/request@10.0.3': - resolution: {integrity: sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA==} + '@octokit/request@10.0.7': + resolution: {integrity: sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==} engines: {node: '>= 20'} - '@octokit/rest@22.0.0': - resolution: {integrity: sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==} + '@octokit/rest@22.0.1': + resolution: {integrity: sha512-Jzbhzl3CEexhnivb1iQ0KJ7s5vvjMWcmRtq5aUsKmKDrRW6z3r84ngmiFKFvpZjpiU/9/S6ITPFRpn5s/3uQJw==} engines: {node: '>= 20'} - '@octokit/types@14.1.0': - resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} - - '@octokit/types@15.0.0': - resolution: {integrity: sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==} + '@octokit/types@16.0.0': + resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} '@oven/bun-darwin-aarch64@1.3.3': resolution: {integrity: sha512-eJopQrUk0WR7jViYDC29+Rp50xGvs4GtWOXBeqCoFMzutkkO3CZvHehA4JqnjfWMTSS8toqvRhCSOpOz62Wf9w==} @@ -2670,8 +2664,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chardet@2.1.0: - resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} @@ -2856,6 +2850,9 @@ packages: node-addon-api: optional: true + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2901,8 +2898,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es-toolkit@1.39.10: - resolution: {integrity: sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==} + es-toolkit@1.42.0: + resolution: {integrity: sha512-SLHIyY7VfDJBM8clz4+T2oquwTQxEzu263AyhVK4jREOAwJ+8eebaa4wM3nlvnAqhDrMm2EsA6hWHaQsMPQ1nA==} esbuild@0.23.1: resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} @@ -3155,6 +3152,10 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -3665,9 +3666,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -3783,6 +3784,9 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -4183,6 +4187,10 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + string.prototype.includes@2.0.1: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} @@ -4594,10 +4602,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -4606,6 +4610,10 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -4618,10 +4626,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} - engines: {node: '>=18'} - zod-validation-error@4.0.2: resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} engines: {node: '>=18.0.0'} @@ -5143,128 +5147,122 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@inquirer/ansi@1.0.0': {} + '@inquirer/ansi@2.0.2': {} - '@inquirer/checkbox@4.2.4(@types/node@20.19.1)': + '@inquirer/checkbox@5.0.2(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@20.19.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/ansi': 2.0.2 + '@inquirer/core': 11.0.2(@types/node@20.19.1) + '@inquirer/figures': 2.0.2 + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/confirm@5.1.18(@types/node@20.19.1)': + '@inquirer/confirm@6.0.2(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) + '@inquirer/core': 11.0.2(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/core@10.2.2(@types/node@20.19.1)': + '@inquirer/core@11.0.2(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@20.19.1) + '@inquirer/ansi': 2.0.2 + '@inquirer/figures': 2.0.2 + '@inquirer/type': 4.0.2(@types/node@20.19.1) cli-width: 4.1.0 - mute-stream: 2.0.0 + mute-stream: 3.0.0 signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 + wrap-ansi: 9.0.2 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/editor@4.2.20(@types/node@20.19.1)': + '@inquirer/editor@5.0.2(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/external-editor': 1.0.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) + '@inquirer/core': 11.0.2(@types/node@20.19.1) + '@inquirer/external-editor': 2.0.2(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/expand@4.0.20(@types/node@20.19.1)': + '@inquirer/expand@5.0.2(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 11.0.2(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/external-editor@1.0.2(@types/node@20.19.1)': + '@inquirer/external-editor@2.0.2(@types/node@20.19.1)': dependencies: - chardet: 2.1.0 + chardet: 2.1.1 iconv-lite: 0.7.0 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/figures@1.0.13': {} + '@inquirer/figures@2.0.2': {} - '@inquirer/input@4.2.4(@types/node@20.19.1)': + '@inquirer/input@5.0.2(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) + '@inquirer/core': 11.0.2(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/number@3.0.20(@types/node@20.19.1)': + '@inquirer/number@4.0.2(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) + '@inquirer/core': 11.0.2(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/password@4.0.20(@types/node@20.19.1)': + '@inquirer/password@5.0.2(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) + '@inquirer/ansi': 2.0.2 + '@inquirer/core': 11.0.2(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/prompts@7.8.6(@types/node@20.19.1)': - dependencies: - '@inquirer/checkbox': 4.2.4(@types/node@20.19.1) - '@inquirer/confirm': 5.1.18(@types/node@20.19.1) - '@inquirer/editor': 4.2.20(@types/node@20.19.1) - '@inquirer/expand': 4.0.20(@types/node@20.19.1) - '@inquirer/input': 4.2.4(@types/node@20.19.1) - '@inquirer/number': 3.0.20(@types/node@20.19.1) - '@inquirer/password': 4.0.20(@types/node@20.19.1) - '@inquirer/rawlist': 4.1.8(@types/node@20.19.1) - '@inquirer/search': 3.1.3(@types/node@20.19.1) - '@inquirer/select': 4.3.4(@types/node@20.19.1) + '@inquirer/prompts@8.0.2(@types/node@20.19.1)': + dependencies: + '@inquirer/checkbox': 5.0.2(@types/node@20.19.1) + '@inquirer/confirm': 6.0.2(@types/node@20.19.1) + '@inquirer/editor': 5.0.2(@types/node@20.19.1) + '@inquirer/expand': 5.0.2(@types/node@20.19.1) + '@inquirer/input': 5.0.2(@types/node@20.19.1) + '@inquirer/number': 4.0.2(@types/node@20.19.1) + '@inquirer/password': 5.0.2(@types/node@20.19.1) + '@inquirer/rawlist': 5.0.2(@types/node@20.19.1) + '@inquirer/search': 4.0.2(@types/node@20.19.1) + '@inquirer/select': 5.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/rawlist@4.1.8(@types/node@20.19.1)': + '@inquirer/rawlist@5.0.2(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 11.0.2(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/search@3.1.3(@types/node@20.19.1)': + '@inquirer/search@4.0.2(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@20.19.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 11.0.2(@types/node@20.19.1) + '@inquirer/figures': 2.0.2 + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/select@4.3.4(@types/node@20.19.1)': + '@inquirer/select@5.0.2(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@20.19.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/ansi': 2.0.2 + '@inquirer/core': 11.0.2(@types/node@20.19.1) + '@inquirer/figures': 2.0.2 + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/type@3.0.8(@types/node@20.19.1)': + '@inquirer/type@4.0.2(@types/node@20.19.1)': optionalDependencies: '@types/node': 20.19.1 @@ -5317,18 +5315,18 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@napi-rs/cli@3.4.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0)': + '@napi-rs/cli@3.5.0(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0)': dependencies: - '@inquirer/prompts': 7.8.6(@types/node@20.19.1) + '@inquirer/prompts': 8.0.2(@types/node@20.19.1) '@napi-rs/cross-toolchain': 1.0.3 '@napi-rs/wasm-tools': 1.0.1 - '@octokit/rest': 22.0.0 + '@octokit/rest': 22.0.1 clipanion: 4.0.0-rc.4(typanion@3.14.0) colorette: 2.0.20 - debug: 4.4.3 emnapi: 1.7.1(node-addon-api@8.3.0) - es-toolkit: 1.39.10 + es-toolkit: 1.42.0 js-yaml: 4.1.0 + obug: 2.1.1 semver: 7.7.3 typanion: 3.14.0 optionalDependencies: @@ -5607,71 +5605,65 @@ snapshots: '@octokit/auth-token@6.0.0': {} - '@octokit/core@7.0.4': + '@octokit/core@7.0.6': dependencies: '@octokit/auth-token': 6.0.0 - '@octokit/graphql': 9.0.1 - '@octokit/request': 10.0.3 - '@octokit/request-error': 7.0.0 - '@octokit/types': 15.0.0 + '@octokit/graphql': 9.0.3 + '@octokit/request': 10.0.7 + '@octokit/request-error': 7.1.0 + '@octokit/types': 16.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.2 - '@octokit/endpoint@11.0.0': + '@octokit/endpoint@11.0.2': dependencies: - '@octokit/types': 14.1.0 + '@octokit/types': 16.0.0 universal-user-agent: 7.0.2 - '@octokit/graphql@9.0.1': + '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.3 - '@octokit/types': 14.1.0 + '@octokit/request': 10.0.7 + '@octokit/types': 16.0.0 universal-user-agent: 7.0.2 - '@octokit/openapi-types@25.1.0': {} - - '@octokit/openapi-types@26.0.0': {} + '@octokit/openapi-types@27.0.0': {} - '@octokit/plugin-paginate-rest@13.1.1(@octokit/core@7.0.4)': + '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.4 - '@octokit/types': 14.1.0 + '@octokit/core': 7.0.6 + '@octokit/types': 16.0.0 - '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.4)': + '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.4 + '@octokit/core': 7.0.6 - '@octokit/plugin-rest-endpoint-methods@16.1.0(@octokit/core@7.0.4)': + '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.4 - '@octokit/types': 15.0.0 + '@octokit/core': 7.0.6 + '@octokit/types': 16.0.0 - '@octokit/request-error@7.0.0': + '@octokit/request-error@7.1.0': dependencies: - '@octokit/types': 14.1.0 + '@octokit/types': 16.0.0 - '@octokit/request@10.0.3': + '@octokit/request@10.0.7': dependencies: - '@octokit/endpoint': 11.0.0 - '@octokit/request-error': 7.0.0 - '@octokit/types': 14.1.0 + '@octokit/endpoint': 11.0.2 + '@octokit/request-error': 7.1.0 + '@octokit/types': 16.0.0 fast-content-type-parse: 3.0.0 universal-user-agent: 7.0.2 - '@octokit/rest@22.0.0': + '@octokit/rest@22.0.1': dependencies: - '@octokit/core': 7.0.4 - '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.4) - '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.4) - '@octokit/plugin-rest-endpoint-methods': 16.1.0(@octokit/core@7.0.4) + '@octokit/core': 7.0.6 + '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) + '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.6) + '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6) - '@octokit/types@14.1.0': + '@octokit/types@16.0.0': dependencies: - '@octokit/openapi-types': 25.1.0 - - '@octokit/types@15.0.0': - dependencies: - '@octokit/openapi-types': 26.0.0 + '@octokit/openapi-types': 27.0.0 '@oven/bun-darwin-aarch64@1.3.3': optional: true @@ -6432,7 +6424,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chardet@2.1.0: {} + chardet@2.1.1: {} chokidar@3.6.0: dependencies: @@ -6590,6 +6582,8 @@ snapshots: optionalDependencies: node-addon-api: 8.3.0 + emoji-regex@10.6.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -6700,7 +6694,7 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es-toolkit@1.39.10: {} + es-toolkit@1.42.0: {} esbuild@0.23.1: optionalDependencies: @@ -7189,6 +7183,8 @@ snapshots: gensync@1.0.0-beta.2: {} + get-east-asian-width@1.4.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7670,7 +7666,7 @@ snapshots: ms@2.1.3: {} - mute-stream@2.0.0: {} + mute-stream@3.0.0: {} mz@2.7.0: dependencies: @@ -7775,6 +7771,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + obug@2.1.1: {} + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -8227,6 +8225,12 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.0 + string.prototype.includes@2.0.1: dependencies: call-bind: 1.0.8 @@ -8699,12 +8703,6 @@ snapshots: word-wrap@1.2.5: {} - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -8717,14 +8715,18 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + yallist@3.1.1: {} yaml@2.6.0: {} yocto-queue@0.1.0: {} - yoctocolors-cjs@2.1.2: {} - zod-validation-error@4.0.2(zod@4.1.12): dependencies: zod: 4.1.12 From 0a4084927069f3fc2eaf540302c4ee4c9a103ea8 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Wed, 10 Dec 2025 15:41:00 +0000 Subject: [PATCH 003/100] Update all of react to version 19.2.1 --- playgrounds/nextjs/package.json | 4 +-- playgrounds/v3/package.json | 4 +-- playgrounds/vite/package.json | 4 +-- pnpm-lock.yaml | 58 ++++++++++++++++----------------- 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/playgrounds/nextjs/package.json b/playgrounds/nextjs/package.json index fc1ddebe4a93..7c5d0eec86c6 100644 --- a/playgrounds/nextjs/package.json +++ b/playgrounds/nextjs/package.json @@ -12,8 +12,8 @@ "@tailwindcss/postcss": "workspace:^", "fast-glob": "^3.3.3", "next": "^16.0.7", - "react": "^19.2.0", - "react-dom": "^19.2.0", + "react": "^19.2.1", + "react-dom": "^19.2.1", "tailwindcss": "workspace:^" }, "devDependencies": { diff --git a/playgrounds/v3/package.json b/playgrounds/v3/package.json index 495fd7becd5a..d769b38e1489 100644 --- a/playgrounds/v3/package.json +++ b/playgrounds/v3/package.json @@ -10,8 +10,8 @@ }, "dependencies": { "next": "^16.0.7", - "react": "^19.2.0", - "react-dom": "^19.2.0", + "react": "^19.2.1", + "react-dom": "^19.2.1", "tailwindcss": "^3" }, "devDependencies": { diff --git a/playgrounds/vite/package.json b/playgrounds/vite/package.json index e4cc4ce7cf3e..3bd94b7ba2f6 100644 --- a/playgrounds/vite/package.json +++ b/playgrounds/vite/package.json @@ -11,8 +11,8 @@ "dependencies": { "@tailwindcss/vite": "workspace:^", "@vitejs/plugin-react": "^5.1.1", - "react": "^19.2.0", - "react-dom": "^19.2.0", + "react": "^19.2.1", + "react-dom": "^19.2.1", "tailwindcss": "workspace:^" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 18eabb08e3a3..7985009716d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -481,13 +481,13 @@ importers: version: 3.3.3 next: specifier: ^16.0.7 - version: 16.0.7(@playwright/test@1.57.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 16.0.7(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react: - specifier: ^19.2.0 - version: 19.2.0 + specifier: ^19.2.1 + version: 19.2.1 react-dom: - specifier: ^19.2.0 - version: 19.2.0(react@19.2.0) + specifier: ^19.2.1 + version: 19.2.1(react@19.2.1) tailwindcss: specifier: workspace:^ version: link:../../packages/tailwindcss @@ -515,13 +515,13 @@ importers: dependencies: next: specifier: ^16.0.7 - version: 16.0.7(@playwright/test@1.57.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 16.0.7(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react: - specifier: ^19.2.0 - version: 19.2.0 + specifier: ^19.2.1 + version: 19.2.1 react-dom: - specifier: ^19.2.0 - version: 19.2.0(react@19.2.0) + specifier: ^19.2.1 + version: 19.2.1(react@19.2.1) tailwindcss: specifier: ^3 version: 3.4.14 @@ -557,11 +557,11 @@ importers: specifier: ^5.1.1 version: 5.1.1(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) react: - specifier: ^19.2.0 - version: 19.2.0 + specifier: ^19.2.1 + version: 19.2.1 react-dom: - specifier: ^19.2.0 - version: 19.2.0(react@19.2.0) + specifier: ^19.2.1 + version: 19.2.1(react@19.2.1) tailwindcss: specifier: workspace:^ version: link:../../packages/tailwindcss @@ -3691,7 +3691,7 @@ packages: engines: {node: '>=20.9.0'} hasBin: true peerDependencies: - '@opentelemetry/api': 1.4.1 + '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.51.1 babel-plugin-react-compiler: '*' react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 @@ -4007,10 +4007,10 @@ packages: radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} - react-dom@19.2.0: - resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} + react-dom@19.2.1: + resolution: {integrity: sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==} peerDependencies: - react: ^19.2.0 + react: ^19.2.1 react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -4019,8 +4019,8 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} - react@19.2.0: - resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + react@19.2.1: + resolution: {integrity: sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -7680,15 +7680,15 @@ snapshots: natural-compare@1.4.0: {} - next@16.0.7(@playwright/test@1.57.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + next@16.0.7(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: '@next/env': 16.0.7 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001755 postcss: 8.4.31 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - styled-jsx: 5.1.6(react@19.2.0) + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) + styled-jsx: 5.1.6(react@19.2.1) optionalDependencies: '@next/swc-darwin-arm64': 16.0.7 '@next/swc-darwin-x64': 16.0.7 @@ -7977,16 +7977,16 @@ snapshots: radix3@1.1.2: {} - react-dom@19.2.0(react@19.2.0): + react-dom@19.2.1(react@19.2.1): dependencies: - react: 19.2.0 + react: 19.2.1 scheduler: 0.27.0 react-is@16.13.1: {} react-refresh@0.18.0: {} - react@19.2.0: {} + react@19.2.1: {} read-cache@1.0.0: dependencies: @@ -8294,10 +8294,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(react@19.2.0): + styled-jsx@5.1.6(react@19.2.1): dependencies: client-only: 0.0.1 - react: 19.2.0 + react: 19.2.1 sucrase@3.35.0: dependencies: From 5065de4f9e0012bd99756a5317623885d2ae6cd6 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Wed, 10 Dec 2025 11:26:51 -0500 Subject: [PATCH 004/100] Revert "Update @napi-rs/cli to version 3.5.0" This reverts commit 3a1df5a283308ca3079aa204a818c4de57e2b78d. --- crates/node/package.json | 2 +- pnpm-lock.yaml | 430 +++++++++++++++++++-------------------- 2 files changed, 215 insertions(+), 217 deletions(-) diff --git a/crates/node/package.json b/crates/node/package.json index e35d336683a4..b03359479613 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -33,7 +33,7 @@ }, "license": "MIT", "devDependencies": { - "@napi-rs/cli": "^3.5.0", + "@napi-rs/cli": "^3.4.1", "@napi-rs/wasm-runtime": "^1.1.0", "emnapi": "1.7.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7985009716d8..4f93c21545f8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -126,8 +126,8 @@ importers: version: link:npm/win32-x64-msvc devDependencies: '@napi-rs/cli': - specifier: ^3.5.0 - version: 3.5.0(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0) + specifier: ^3.4.1 + version: 3.4.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0) '@napi-rs/wasm-runtime': specifier: ^1.1.0 version: 1.1.0 @@ -1326,134 +1326,134 @@ packages: cpu: [x64] os: [win32] - '@inquirer/ansi@2.0.2': - resolution: {integrity: sha512-SYLX05PwJVnW+WVegZt1T4Ip1qba1ik+pNJPDiqvk6zS5Y/i8PhRzLpGEtVd7sW0G8cMtkD8t4AZYhQwm8vnww==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/ansi@1.0.0': + resolution: {integrity: sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==} + engines: {node: '>=18'} - '@inquirer/checkbox@5.0.2': - resolution: {integrity: sha512-iTPV4tMMct7iOpwer5qmTP7gjnk1VQJjsNfAaC2b8Q3qiuHM3K2yjjDr5u1MKfkrvp2JD4Flf8sIPpF21pmZmw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/checkbox@4.2.4': + resolution: {integrity: sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/confirm@6.0.2': - resolution: {integrity: sha512-A0/13Wyi+8iFeNDX6D4zZYKPoBLIEbE4K/219qHcnpXMer2weWvaTo63+2c7mQPPA206DEMSYVOPnEw3meOlCw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/confirm@5.1.18': + resolution: {integrity: sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/core@11.0.2': - resolution: {integrity: sha512-lgMRx/n02ciiNELBvFLHtmcjbV5tf5D/I0UYfCg2YbTZWmBZ10/niLd3IjWBxz8LtM27xP+4oLEa06Slmb7p7A==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/core@10.2.2': + resolution: {integrity: sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/editor@5.0.2': - resolution: {integrity: sha512-pXQ4Nf0qmFcJuYB6NlcIIxH6l6zKOwNg1Jh/ZRdKd2dTqBB4OXKUFbFwR2K4LVXVtq15ZFFatBVT+rerYR8hWQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/editor@4.2.20': + resolution: {integrity: sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/expand@5.0.2': - resolution: {integrity: sha512-siFG1swxfjFIOxIcehtZkh+KUNB/YCpyfHNEGu+nC/SBXIbgUWibvThLn/WesSxLRGOeSKdNKoTm+GQCKFm6Ww==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/expand@4.0.20': + resolution: {integrity: sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/external-editor@2.0.2': - resolution: {integrity: sha512-X/fMXK7vXomRWEex1j8mnj7s1mpnTeP4CO/h2gysJhHLT2WjBnLv4ZQEGpm/kcYI8QfLZ2fgW+9kTKD+jeopLg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/external-editor@1.0.2': + resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/figures@2.0.2': - resolution: {integrity: sha512-qXm6EVvQx/FmnSrCWCIGtMHwqeLgxABP8XgcaAoywsL0NFga9gD5kfG0gXiv80GjK9Hsoz4pgGwF/+CjygyV9A==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/figures@1.0.13': + resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} + engines: {node: '>=18'} - '@inquirer/input@5.0.2': - resolution: {integrity: sha512-hN2YRo1QiEc9lD3mK+CPnTS4TK2RhCMmMmP4nCWwTkmQL2vx9jPJWYk+rbUZpwR1D583ZJk1FI3i9JZXIpi/qg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/input@4.2.4': + resolution: {integrity: sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/number@4.0.2': - resolution: {integrity: sha512-4McnjTSYrlthNW1ojkkmP75WLRYhQs7GXm6pDDoIrHqJuV5uUYwfdbB0geHdaKMarAqJQgoOVjzIT0jdWCsKew==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/number@3.0.20': + resolution: {integrity: sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/password@5.0.2': - resolution: {integrity: sha512-oSDziMKiw4G2e4zS+0JRfxuPFFGh6N/9yUaluMgEHp2/Yyj2JGwfDO7XbwtOrxVrz+XsP/iaGyWXdQb9d8A0+g==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/password@4.0.20': + resolution: {integrity: sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/prompts@8.0.2': - resolution: {integrity: sha512-2zK5zY48fZcl6+gG4eqOC/UzZsJckHCRvjXoLuW4D8LKOCVGdcJiSKkLnumSZjR/6PXPINDGOrGHqNxb+sxJDg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/prompts@7.8.6': + resolution: {integrity: sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/rawlist@5.0.2': - resolution: {integrity: sha512-AcNALEdQKUQDeJcpC1a3YC53m1MLv+sMUS+vRZ8Qigs1Yg3Dcdtmi82rscJplogKOY8CXkKW4wvVwHS2ZjCIBQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/rawlist@4.1.8': + resolution: {integrity: sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/search@4.0.2': - resolution: {integrity: sha512-hg63w5toohdzE65S3LiGhdfIL0kT+yisbZARf7zw65PvyMUTutTN3eMAvD/B6y/25z88vTrB7kSB45Vz5CbrXg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/search@3.1.3': + resolution: {integrity: sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/select@5.0.2': - resolution: {integrity: sha512-JygTohvQxSNnvt7IKANVlg/eds+yN5sLRilYeGc4ri/9Aqi/2QPoXBMV5Cz/L1VtQv63SnTbPXJZeCK2pSwsOA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/select@4.3.4': + resolution: {integrity: sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/type@4.0.2': - resolution: {integrity: sha512-cae7mzluplsjSdgFA6ACLygb5jC8alO0UUnFPyu0E7tNRPrL+q/f8VcSXp+cjZQ7l5CMpDpi2G1+IQvkOiL1Lw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/type@3.0.8': + resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1497,12 +1497,12 @@ packages: '@jridgewell/trace-mapping@0.3.29': resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - '@napi-rs/cli@3.5.0': - resolution: {integrity: sha512-bJsDvAa9qK9VMkFhr780XWfQlK+GDlAX8qpK20buSmA0ld6nxCtiZ5a0J45zbd0FWT+VTZE1/u8VPH2vLfnVvw==} + '@napi-rs/cli@3.4.1': + resolution: {integrity: sha512-ayhm+NfrP5Hmh7vy5pfyYm/ktYtLh2PrgdLuqHTAubO7RoO2JkUE4F991AtgYxNewwXI8+guZLxU8itV7QnDrQ==} engines: {node: '>= 16'} hasBin: true peerDependencies: - '@emnapi/runtime': ^1.7.1 + '@emnapi/runtime': ^1.5.0 peerDependenciesMeta: '@emnapi/runtime': optional: true @@ -1904,23 +1904,26 @@ packages: resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} engines: {node: '>= 20'} - '@octokit/core@7.0.6': - resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==} + '@octokit/core@7.0.4': + resolution: {integrity: sha512-jOT8V1Ba5BdC79sKrRWDdMT5l1R+XNHTPR6CPWzUP2EcfAcvIHZWF0eAbmRcpOOP5gVIwnqNg0C4nvh6Abc3OA==} engines: {node: '>= 20'} - '@octokit/endpoint@11.0.2': - resolution: {integrity: sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==} + '@octokit/endpoint@11.0.0': + resolution: {integrity: sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ==} engines: {node: '>= 20'} - '@octokit/graphql@9.0.3': - resolution: {integrity: sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==} + '@octokit/graphql@9.0.1': + resolution: {integrity: sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg==} engines: {node: '>= 20'} - '@octokit/openapi-types@27.0.0': - resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} + '@octokit/openapi-types@25.1.0': + resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} - '@octokit/plugin-paginate-rest@14.0.0': - resolution: {integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==} + '@octokit/openapi-types@26.0.0': + resolution: {integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==} + + '@octokit/plugin-paginate-rest@13.1.1': + resolution: {integrity: sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' @@ -1931,26 +1934,29 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-rest-endpoint-methods@17.0.0': - resolution: {integrity: sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==} + '@octokit/plugin-rest-endpoint-methods@16.1.0': + resolution: {integrity: sha512-nCsyiKoGRnhH5LkH8hJEZb9swpqOcsW+VXv1QoyUNQXJeVODG4+xM6UICEqyqe9XFr6LkL8BIiFCPev8zMDXPw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' - '@octokit/request-error@7.1.0': - resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} + '@octokit/request-error@7.0.0': + resolution: {integrity: sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg==} engines: {node: '>= 20'} - '@octokit/request@10.0.7': - resolution: {integrity: sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==} + '@octokit/request@10.0.3': + resolution: {integrity: sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA==} engines: {node: '>= 20'} - '@octokit/rest@22.0.1': - resolution: {integrity: sha512-Jzbhzl3CEexhnivb1iQ0KJ7s5vvjMWcmRtq5aUsKmKDrRW6z3r84ngmiFKFvpZjpiU/9/S6ITPFRpn5s/3uQJw==} + '@octokit/rest@22.0.0': + resolution: {integrity: sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==} engines: {node: '>= 20'} - '@octokit/types@16.0.0': - resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} + '@octokit/types@14.1.0': + resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} + + '@octokit/types@15.0.0': + resolution: {integrity: sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==} '@oven/bun-darwin-aarch64@1.3.3': resolution: {integrity: sha512-eJopQrUk0WR7jViYDC29+Rp50xGvs4GtWOXBeqCoFMzutkkO3CZvHehA4JqnjfWMTSS8toqvRhCSOpOz62Wf9w==} @@ -2664,8 +2670,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chardet@2.1.1: - resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + chardet@2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} @@ -2850,9 +2856,6 @@ packages: node-addon-api: optional: true - emoji-regex@10.6.0: - resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2898,8 +2901,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es-toolkit@1.42.0: - resolution: {integrity: sha512-SLHIyY7VfDJBM8clz4+T2oquwTQxEzu263AyhVK4jREOAwJ+8eebaa4wM3nlvnAqhDrMm2EsA6hWHaQsMPQ1nA==} + es-toolkit@1.39.10: + resolution: {integrity: sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==} esbuild@0.23.1: resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} @@ -3152,10 +3155,6 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} - engines: {node: '>=18'} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -3666,9 +3665,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@3.0.0: - resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} - engines: {node: ^20.17.0 || >=22.9.0} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -3784,9 +3783,6 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -4187,10 +4183,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} - string.prototype.includes@2.0.1: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} @@ -4602,6 +4594,10 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -4610,10 +4606,6 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrap-ansi@9.0.2: - resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} - engines: {node: '>=18'} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -4626,6 +4618,10 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + zod-validation-error@4.0.2: resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} engines: {node: '>=18.0.0'} @@ -5147,122 +5143,128 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@inquirer/ansi@2.0.2': {} + '@inquirer/ansi@1.0.0': {} - '@inquirer/checkbox@5.0.2(@types/node@20.19.1)': + '@inquirer/checkbox@4.2.4(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 2.0.2 - '@inquirer/core': 11.0.2(@types/node@20.19.1) - '@inquirer/figures': 2.0.2 - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@20.19.1) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@20.19.1) + yoctocolors-cjs: 2.1.2 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/confirm@6.0.2(@types/node@20.19.1)': + '@inquirer/confirm@5.1.18(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.2.2(@types/node@20.19.1) + '@inquirer/type': 3.0.8(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/core@11.0.2(@types/node@20.19.1)': + '@inquirer/core@10.2.2(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 2.0.2 - '@inquirer/figures': 2.0.2 - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/ansi': 1.0.0 + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@20.19.1) cli-width: 4.1.0 - mute-stream: 3.0.0 + mute-stream: 2.0.0 signal-exit: 4.1.0 - wrap-ansi: 9.0.2 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/editor@5.0.2(@types/node@20.19.1)': + '@inquirer/editor@4.2.20(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.1) - '@inquirer/external-editor': 2.0.2(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.2.2(@types/node@20.19.1) + '@inquirer/external-editor': 1.0.2(@types/node@20.19.1) + '@inquirer/type': 3.0.8(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/expand@5.0.2(@types/node@20.19.1)': + '@inquirer/expand@4.0.20(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.2.2(@types/node@20.19.1) + '@inquirer/type': 3.0.8(@types/node@20.19.1) + yoctocolors-cjs: 2.1.2 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/external-editor@2.0.2(@types/node@20.19.1)': + '@inquirer/external-editor@1.0.2(@types/node@20.19.1)': dependencies: - chardet: 2.1.1 + chardet: 2.1.0 iconv-lite: 0.7.0 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/figures@2.0.2': {} + '@inquirer/figures@1.0.13': {} - '@inquirer/input@5.0.2(@types/node@20.19.1)': + '@inquirer/input@4.2.4(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.2.2(@types/node@20.19.1) + '@inquirer/type': 3.0.8(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/number@4.0.2(@types/node@20.19.1)': + '@inquirer/number@3.0.20(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.2.2(@types/node@20.19.1) + '@inquirer/type': 3.0.8(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/password@5.0.2(@types/node@20.19.1)': + '@inquirer/password@4.0.20(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 2.0.2 - '@inquirer/core': 11.0.2(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@20.19.1) + '@inquirer/type': 3.0.8(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/prompts@8.0.2(@types/node@20.19.1)': - dependencies: - '@inquirer/checkbox': 5.0.2(@types/node@20.19.1) - '@inquirer/confirm': 6.0.2(@types/node@20.19.1) - '@inquirer/editor': 5.0.2(@types/node@20.19.1) - '@inquirer/expand': 5.0.2(@types/node@20.19.1) - '@inquirer/input': 5.0.2(@types/node@20.19.1) - '@inquirer/number': 4.0.2(@types/node@20.19.1) - '@inquirer/password': 5.0.2(@types/node@20.19.1) - '@inquirer/rawlist': 5.0.2(@types/node@20.19.1) - '@inquirer/search': 4.0.2(@types/node@20.19.1) - '@inquirer/select': 5.0.2(@types/node@20.19.1) + '@inquirer/prompts@7.8.6(@types/node@20.19.1)': + dependencies: + '@inquirer/checkbox': 4.2.4(@types/node@20.19.1) + '@inquirer/confirm': 5.1.18(@types/node@20.19.1) + '@inquirer/editor': 4.2.20(@types/node@20.19.1) + '@inquirer/expand': 4.0.20(@types/node@20.19.1) + '@inquirer/input': 4.2.4(@types/node@20.19.1) + '@inquirer/number': 3.0.20(@types/node@20.19.1) + '@inquirer/password': 4.0.20(@types/node@20.19.1) + '@inquirer/rawlist': 4.1.8(@types/node@20.19.1) + '@inquirer/search': 3.1.3(@types/node@20.19.1) + '@inquirer/select': 4.3.4(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/rawlist@5.0.2(@types/node@20.19.1)': + '@inquirer/rawlist@4.1.8(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.2.2(@types/node@20.19.1) + '@inquirer/type': 3.0.8(@types/node@20.19.1) + yoctocolors-cjs: 2.1.2 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/search@4.0.2(@types/node@20.19.1)': + '@inquirer/search@3.1.3(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.0.2(@types/node@20.19.1) - '@inquirer/figures': 2.0.2 - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.2.2(@types/node@20.19.1) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@20.19.1) + yoctocolors-cjs: 2.1.2 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/select@5.0.2(@types/node@20.19.1)': + '@inquirer/select@4.3.4(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 2.0.2 - '@inquirer/core': 11.0.2(@types/node@20.19.1) - '@inquirer/figures': 2.0.2 - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@20.19.1) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@20.19.1) + yoctocolors-cjs: 2.1.2 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/type@4.0.2(@types/node@20.19.1)': + '@inquirer/type@3.0.8(@types/node@20.19.1)': optionalDependencies: '@types/node': 20.19.1 @@ -5315,18 +5317,18 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@napi-rs/cli@3.5.0(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0)': + '@napi-rs/cli@3.4.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0)': dependencies: - '@inquirer/prompts': 8.0.2(@types/node@20.19.1) + '@inquirer/prompts': 7.8.6(@types/node@20.19.1) '@napi-rs/cross-toolchain': 1.0.3 '@napi-rs/wasm-tools': 1.0.1 - '@octokit/rest': 22.0.1 + '@octokit/rest': 22.0.0 clipanion: 4.0.0-rc.4(typanion@3.14.0) colorette: 2.0.20 + debug: 4.4.3 emnapi: 1.7.1(node-addon-api@8.3.0) - es-toolkit: 1.42.0 + es-toolkit: 1.39.10 js-yaml: 4.1.0 - obug: 2.1.1 semver: 7.7.3 typanion: 3.14.0 optionalDependencies: @@ -5605,65 +5607,71 @@ snapshots: '@octokit/auth-token@6.0.0': {} - '@octokit/core@7.0.6': + '@octokit/core@7.0.4': dependencies: '@octokit/auth-token': 6.0.0 - '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.7 - '@octokit/request-error': 7.1.0 - '@octokit/types': 16.0.0 + '@octokit/graphql': 9.0.1 + '@octokit/request': 10.0.3 + '@octokit/request-error': 7.0.0 + '@octokit/types': 15.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.2 - '@octokit/endpoint@11.0.2': + '@octokit/endpoint@11.0.0': dependencies: - '@octokit/types': 16.0.0 + '@octokit/types': 14.1.0 universal-user-agent: 7.0.2 - '@octokit/graphql@9.0.3': + '@octokit/graphql@9.0.1': dependencies: - '@octokit/request': 10.0.7 - '@octokit/types': 16.0.0 + '@octokit/request': 10.0.3 + '@octokit/types': 14.1.0 universal-user-agent: 7.0.2 - '@octokit/openapi-types@27.0.0': {} + '@octokit/openapi-types@25.1.0': {} + + '@octokit/openapi-types@26.0.0': {} - '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)': + '@octokit/plugin-paginate-rest@13.1.1(@octokit/core@7.0.4)': dependencies: - '@octokit/core': 7.0.6 - '@octokit/types': 16.0.0 + '@octokit/core': 7.0.4 + '@octokit/types': 14.1.0 - '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.6)': + '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.4)': dependencies: - '@octokit/core': 7.0.6 + '@octokit/core': 7.0.4 - '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)': + '@octokit/plugin-rest-endpoint-methods@16.1.0(@octokit/core@7.0.4)': dependencies: - '@octokit/core': 7.0.6 - '@octokit/types': 16.0.0 + '@octokit/core': 7.0.4 + '@octokit/types': 15.0.0 - '@octokit/request-error@7.1.0': + '@octokit/request-error@7.0.0': dependencies: - '@octokit/types': 16.0.0 + '@octokit/types': 14.1.0 - '@octokit/request@10.0.7': + '@octokit/request@10.0.3': dependencies: - '@octokit/endpoint': 11.0.2 - '@octokit/request-error': 7.1.0 - '@octokit/types': 16.0.0 + '@octokit/endpoint': 11.0.0 + '@octokit/request-error': 7.0.0 + '@octokit/types': 14.1.0 fast-content-type-parse: 3.0.0 universal-user-agent: 7.0.2 - '@octokit/rest@22.0.1': + '@octokit/rest@22.0.0': dependencies: - '@octokit/core': 7.0.6 - '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) - '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.6) - '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6) + '@octokit/core': 7.0.4 + '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.4) + '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.4) + '@octokit/plugin-rest-endpoint-methods': 16.1.0(@octokit/core@7.0.4) - '@octokit/types@16.0.0': + '@octokit/types@14.1.0': dependencies: - '@octokit/openapi-types': 27.0.0 + '@octokit/openapi-types': 25.1.0 + + '@octokit/types@15.0.0': + dependencies: + '@octokit/openapi-types': 26.0.0 '@oven/bun-darwin-aarch64@1.3.3': optional: true @@ -6424,7 +6432,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chardet@2.1.1: {} + chardet@2.1.0: {} chokidar@3.6.0: dependencies: @@ -6582,8 +6590,6 @@ snapshots: optionalDependencies: node-addon-api: 8.3.0 - emoji-regex@10.6.0: {} - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -6694,7 +6700,7 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es-toolkit@1.42.0: {} + es-toolkit@1.39.10: {} esbuild@0.23.1: optionalDependencies: @@ -7183,8 +7189,6 @@ snapshots: gensync@1.0.0-beta.2: {} - get-east-asian-width@1.4.0: {} - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7666,7 +7670,7 @@ snapshots: ms@2.1.3: {} - mute-stream@3.0.0: {} + mute-stream@2.0.0: {} mz@2.7.0: dependencies: @@ -7771,8 +7775,6 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - obug@2.1.1: {} - onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -8225,12 +8227,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string-width@7.2.0: - dependencies: - emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.0 - string.prototype.includes@2.0.1: dependencies: call-bind: 1.0.8 @@ -8703,6 +8699,12 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -8715,18 +8717,14 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - wrap-ansi@9.0.2: - dependencies: - ansi-styles: 6.2.1 - string-width: 7.2.0 - strip-ansi: 7.1.0 - yallist@3.1.1: {} yaml@2.6.0: {} yocto-queue@0.1.0: {} + yoctocolors-cjs@2.1.2: {} + zod-validation-error@4.0.2(zod@4.1.12): dependencies: zod: 4.1.12 From 9b32f7cb2fd341e1f9ddbe40a4d61d2f272ae33f Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Thu, 11 Dec 2025 10:55:25 -0500 Subject: [PATCH 005/100] Release v4.1.18 (#19431) --- CHANGELOG.md | 36 ++++++++++++------- crates/node/npm/android-arm-eabi/package.json | 2 +- crates/node/npm/android-arm64/package.json | 2 +- crates/node/npm/darwin-arm64/package.json | 2 +- crates/node/npm/darwin-x64/package.json | 2 +- crates/node/npm/freebsd-x64/package.json | 2 +- .../node/npm/linux-arm-gnueabihf/package.json | 2 +- crates/node/npm/linux-arm64-gnu/package.json | 2 +- crates/node/npm/linux-arm64-musl/package.json | 2 +- crates/node/npm/linux-x64-gnu/package.json | 2 +- crates/node/npm/linux-x64-musl/package.json | 2 +- crates/node/npm/wasm32-wasi/package.json | 2 +- crates/node/npm/win32-arm64-msvc/package.json | 2 +- crates/node/npm/win32-x64-msvc/package.json | 2 +- crates/node/package.json | 2 +- packages/@tailwindcss-browser/package.json | 2 +- packages/@tailwindcss-cli/package.json | 2 +- packages/@tailwindcss-node/package.json | 2 +- packages/@tailwindcss-postcss/package.json | 2 +- packages/@tailwindcss-standalone/package.json | 2 +- packages/@tailwindcss-upgrade/package.json | 2 +- packages/@tailwindcss-vite/package.json | 2 +- packages/tailwindcss/package.json | 2 +- 23 files changed, 46 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dc2c8629be8..eab0ba035ff6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +- Nothing yet! + +## [4.1.18] - 2025-12-10 + ### Fixed - Ensure validation of `source(…)` happens relative to the file it is in ([#19274](https://github.com/tailwindlabs/tailwindcss/pull/19274)) @@ -30,6 +34,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) +## [3.4.19] - 2025-12-10 + +### Fixed + +- Don’t break `sibling-*()` functions when used inside `calc(…)` ([#19335](https://github.com/tailwindlabs/tailwindcss/pull/19335)) + ## [4.1.17] - 2025-11-06 ### Fixed @@ -86,6 +96,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Upgrade: Ensure first class inside `className` is migrated ([#19031](https://github.com/tailwindlabs/tailwindcss/pull/19031)) - Upgrade: Migrate classes inside `*ClassName` and `*Class` attributes ([#19031](https://github.com/tailwindlabs/tailwindcss/pull/19031)) +## [3.4.18] - 2025-10-01 + +### Fixed + +- Improve support for raw `supports-[…]` queries in arbitrary values ([#13605](https://github.com/tailwindlabs/tailwindcss/pull/13605)) +- Fix `require.cache` error when loaded through a TypeScript file in Node 22.18+ ([#18665](https://github.com/tailwindlabs/tailwindcss/pull/18665)) +- Support `import.meta.resolve(…)` in configs for new enough Node.js versions ([#18938](https://github.com/tailwindlabs/tailwindcss/pull/18938)) +- Allow using newer versions of `postcss-load-config` for better ESM and TypeScript PostCSS config support with the CLI ([#18938](https://github.com/tailwindlabs/tailwindcss/pull/18938)) +- Remove irrelevant utility rules when matching important classes ([#19030](https://github.com/tailwindlabs/tailwindcss/pull/19030)) + ## [4.1.13] - 2025-09-03 ### Changed @@ -1418,16 +1438,6 @@ For a deep-dive into everything that's new, [check out the announcement post](ht - First 4.0.0-alpha.1 release -## [3.4.18] - 2024-10-01 - -### Fixed - -- Improve support for raw `supports-[…]` queries in arbitrary values ([#13605](https://github.com/tailwindlabs/tailwindcss/pull/13605)) -- Fix `require.cache` error when loaded through a TypeScript file in Node 22.18+ ([#18665](https://github.com/tailwindlabs/tailwindcss/pull/18665)) -- Support `import.meta.resolve(…)` in configs for new enough Node.js versions ([#18938](https://github.com/tailwindlabs/tailwindcss/pull/18938)) -- Allow using newer versions of `postcss-load-config` for better ESM and TypeScript PostCSS config support with the CLI ([#18938](https://github.com/tailwindlabs/tailwindcss/pull/18938)) -- Remove irrelevant utility rules when matching important classes ([#19030](https://github.com/tailwindlabs/tailwindcss/pull/19030)) - ## [3.4.17] - 2024-12-17 ### Fixed @@ -3896,11 +3906,14 @@ No release notes - Everything! -[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.17...HEAD +[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.18...HEAD +[4.1.18]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.17...v4.1.18 +[3.4.19]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.18...v3.4.19 [4.1.17]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.16...v4.1.17 [4.1.16]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.15...v4.1.16 [4.1.15]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.14...v4.1.15 [4.1.14]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.13...v4.1.14 +[3.4.18]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.17...v3.4.18 [4.1.13]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.12...v4.1.13 [4.1.12]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.11...v4.1.12 [4.1.11]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.10...v4.1.11 @@ -3958,7 +3971,6 @@ No release notes [4.0.0-alpha.24]: https://github.com/tailwindlabs/tailwindcss/compare/v4.0.0-alpha.23...v4.0.0-alpha.24 [4.0.0-alpha.23]: https://github.com/tailwindlabs/tailwindcss/compare/v4.0.0-alpha.22...v4.0.0-alpha.23 [4.0.0-alpha.22]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.17...v4.0.0-alpha.22 -[3.4.18]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.17...v3.4.18 [3.4.17]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.16...v3.4.17 [3.4.16]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.15...v3.4.16 [3.4.15]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.14...v3.4.15 diff --git a/crates/node/npm/android-arm-eabi/package.json b/crates/node/npm/android-arm-eabi/package.json index f1adb084c4ab..9d4181ce645b 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.1.17", + "version": "4.1.18", "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 53de99c88d67..ff08b5b79617 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.1.17", + "version": "4.1.18", "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 51a49b2052bd..e3e7e96e83dd 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.1.17", + "version": "4.1.18", "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 46ef28397dc3..7b445cf0b54a 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.1.17", + "version": "4.1.18", "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 b52abc69fc53..90064bbe1fe5 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.1.17", + "version": "4.1.18", "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 b64401cd44ca..77f22d89c834 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.1.17", + "version": "4.1.18", "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 b5b464bb0080..f7a4d322375d 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.1.17", + "version": "4.1.18", "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 e59e369523cd..e0793213190f 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.1.17", + "version": "4.1.18", "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 bd2e7638d95b..bd1c36a82770 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.1.17", + "version": "4.1.18", "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 fc69e5035542..b67ce82fea99 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.1.17", + "version": "4.1.18", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/wasm32-wasi/package.json b/crates/node/npm/wasm32-wasi/package.json index c962d630e69f..601ad809e65f 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.1.17", + "version": "4.1.18", "cpu": [ "wasm32" ], diff --git a/crates/node/npm/win32-arm64-msvc/package.json b/crates/node/npm/win32-arm64-msvc/package.json index 13853d380cfc..bbf8200850b8 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.1.17", + "version": "4.1.18", "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 b6f9f768b0b4..ab648ee397f8 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.1.17", + "version": "4.1.18", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/package.json b/crates/node/package.json index b03359479613..9cd9ca0761c6 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide", - "version": "4.1.17", + "version": "4.1.18", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/packages/@tailwindcss-browser/package.json b/packages/@tailwindcss-browser/package.json index fbf1d4f69a5e..6bda85f75c78 100644 --- a/packages/@tailwindcss-browser/package.json +++ b/packages/@tailwindcss-browser/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/browser", - "version": "4.1.17", + "version": "4.1.18", "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 4a4674f2c4c7..feb9d3d44bc9 100644 --- a/packages/@tailwindcss-cli/package.json +++ b/packages/@tailwindcss-cli/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/cli", - "version": "4.1.17", + "version": "4.1.18", "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 d9d3ca67c348..14bf5f9280a2 100644 --- a/packages/@tailwindcss-node/package.json +++ b/packages/@tailwindcss-node/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/node", - "version": "4.1.17", + "version": "4.1.18", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { diff --git a/packages/@tailwindcss-postcss/package.json b/packages/@tailwindcss-postcss/package.json index 5d8da0dd9d1d..f91f577206dd 100644 --- a/packages/@tailwindcss-postcss/package.json +++ b/packages/@tailwindcss-postcss/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/postcss", - "version": "4.1.17", + "version": "4.1.18", "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 38f84a82eb2f..ef88f70a2ba2 100644 --- a/packages/@tailwindcss-standalone/package.json +++ b/packages/@tailwindcss-standalone/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/standalone", - "version": "4.1.17", + "version": "4.1.18", "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 9a1db3ce2710..d7e6ee08a86d 100644 --- a/packages/@tailwindcss-upgrade/package.json +++ b/packages/@tailwindcss-upgrade/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/upgrade", - "version": "4.1.17", + "version": "4.1.18", "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 150e7106b025..bdf5518e289f 100644 --- a/packages/@tailwindcss-vite/package.json +++ b/packages/@tailwindcss-vite/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/vite", - "version": "4.1.17", + "version": "4.1.18", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { diff --git a/packages/tailwindcss/package.json b/packages/tailwindcss/package.json index 45941768a752..2dc93d5a8de5 100644 --- a/packages/tailwindcss/package.json +++ b/packages/tailwindcss/package.json @@ -1,6 +1,6 @@ { "name": "tailwindcss", - "version": "4.1.17", + "version": "4.1.18", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { From 6db2a6d637ed12489f9fd5a64ca394d934eb14f4 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Thu, 11 Dec 2025 11:03:24 -0500 Subject: [PATCH 006/100] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eab0ba035ff6..7e6518841f9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Nothing yet! -## [4.1.18] - 2025-12-10 +## [4.1.18] - 2025-12-11 ### Fixed From 6518ea7f8042c88b53416a170f9d9312feee25ad Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Thu, 11 Dec 2025 11:31:02 -0500 Subject: [PATCH 007/100] Update changelog --- CHANGELOG.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e6518841f9a..2d1c7bc04a76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -- Nothing yet! +### Added + +- _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) ## [4.1.18] - 2025-12-11 @@ -30,10 +32,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Don’t emit color-mix fallback rules inside `@keyframes` ([#19419](https://github.com/tailwindlabs/tailwindcss/pull/19419)) - CLI: Don't hang when output is `/dev/stdout` ([#19421](https://github.com/tailwindlabs/tailwindcss/pull/19421)) -### Added - -- _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) - ## [3.4.19] - 2025-12-10 ### Fixed From 819881994347fc492d3da351f45bb2e4538b8034 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Thu, 11 Dec 2025 13:08:24 -0500 Subject: [PATCH 008/100] =?UTF-8?q?Update=20turbo=202.6.1=20=E2=86=92=202.?= =?UTF-8?q?6.3=20(patch)=20(#19432)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ turbo (2.6.1 → 2.6.3) · [Repo](https://github.com/turborepo/turbo) Sorry, we couldn't find anything useful about this release. --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 58 +++++++++++++++++++++++++------------------------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index 1c62d8d3bdd0..201da7266980 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "prettier-plugin-embed": "^0.5.0", "prettier-plugin-organize-imports": "^4.3.0", "tsup": "^8.5.1", - "turbo": "^2.6.1", + "turbo": "^2.6.3", "typescript": "^5.5.4", "vitest": "^4.0.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f93c21545f8..33ffcaa0097d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,8 +77,8 @@ importers: specifier: ^8.5.1 version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.19.1)(typescript@5.5.4)(yaml@2.6.0) turbo: - specifier: ^2.6.1 - version: 2.6.1 + specifier: ^2.6.3 + version: 2.6.3 typescript: specifier: ^5.5.4 version: 5.5.4 @@ -4364,38 +4364,38 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - turbo-darwin-64@2.6.1: - resolution: {integrity: sha512-Dm0HwhyZF4J0uLqkhUyCVJvKM9Rw7M03v3J9A7drHDQW0qAbIGBrUijQ8g4Q9Cciw/BXRRd8Uzkc3oue+qn+ZQ==} + turbo-darwin-64@2.6.3: + resolution: {integrity: sha512-BlJJDc1CQ7SK5Y5qnl7AzpkvKSnpkfPmnA+HeU/sgny3oHZckPV2776ebO2M33CYDSor7+8HQwaodY++IINhYg==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.6.1: - resolution: {integrity: sha512-U0PIPTPyxdLsrC3jN7jaJUwgzX5sVUBsKLO7+6AL+OASaa1NbT1pPdiZoTkblBAALLP76FM0LlnsVQOnmjYhyw==} + turbo-darwin-arm64@2.6.3: + resolution: {integrity: sha512-MwVt7rBKiOK7zdYerenfCRTypefw4kZCue35IJga9CH1+S50+KTiCkT6LBqo0hHeoH2iKuI0ldTF2a0aB72z3w==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.6.1: - resolution: {integrity: sha512-eM1uLWgzv89bxlK29qwQEr9xYWBhmO/EGiH22UGfq+uXr+QW1OvNKKMogSN65Ry8lElMH4LZh0aX2DEc7eC0Mw==} + turbo-linux-64@2.6.3: + resolution: {integrity: sha512-cqpcw+dXxbnPtNnzeeSyWprjmuFVpHJqKcs7Jym5oXlu/ZcovEASUIUZVN3OGEM6Y/OTyyw0z09tOHNt5yBAVg==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.6.1: - resolution: {integrity: sha512-MFFh7AxAQAycXKuZDrbeutfWM5Ep0CEZ9u7zs4Hn2FvOViTCzIfEhmuJou3/a5+q5VX1zTxQrKGy+4Lf5cdpsA==} + turbo-linux-arm64@2.6.3: + resolution: {integrity: sha512-MterpZQmjXyr4uM7zOgFSFL3oRdNKeflY7nsjxJb2TklsYqiu3Z9pQ4zRVFFH8n0mLGna7MbQMZuKoWqqHb45w==} cpu: [arm64] os: [linux] - turbo-windows-64@2.6.1: - resolution: {integrity: sha512-buq7/VAN7KOjMYi4tSZT5m+jpqyhbRU2EUTTvp6V0Ii8dAkY2tAAjQN1q5q2ByflYWKecbQNTqxmVploE0LVwQ==} + turbo-windows-64@2.6.3: + resolution: {integrity: sha512-biDU70v9dLwnBdLf+daoDlNJVvqOOP8YEjqNipBHzgclbQlXbsi6Gqqelp5er81Qo3BiRgmTNx79oaZQTPb07Q==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.6.1: - resolution: {integrity: sha512-7w+AD5vJp3R+FB0YOj1YJcNcOOvBior7bcHTodqp90S3x3bLgpr7tE6xOea1e8JkP7GK6ciKVUpQvV7psiwU5Q==} + turbo-windows-arm64@2.6.3: + resolution: {integrity: sha512-dDHVKpSeukah3VsI/xMEKeTnV9V9cjlpFSUs4bmsUiLu3Yv2ENlgVEZv65wxbeE0bh0jjpmElDT+P1KaCxArQQ==} cpu: [arm64] os: [win32] - turbo@2.6.1: - resolution: {integrity: sha512-qBwXXuDT3rA53kbNafGbT5r++BrhRgx3sAo0cHoDAeG9g1ItTmUMgltz3Hy7Hazy1ODqNpR+C7QwqL6DYB52yA==} + turbo@2.6.3: + resolution: {integrity: sha512-bf6YKUv11l5Xfcmg76PyWoy/e2vbkkxFNBGJSnfdSXQC33ZiUfutYh6IXidc5MhsnrFkWfdNNLyaRk+kHMLlwA==} hasBin: true typanion@3.14.0: @@ -8457,32 +8457,32 @@ snapshots: fsevents: 2.3.3 optional: true - turbo-darwin-64@2.6.1: + turbo-darwin-64@2.6.3: optional: true - turbo-darwin-arm64@2.6.1: + turbo-darwin-arm64@2.6.3: optional: true - turbo-linux-64@2.6.1: + turbo-linux-64@2.6.3: optional: true - turbo-linux-arm64@2.6.1: + turbo-linux-arm64@2.6.3: optional: true - turbo-windows-64@2.6.1: + turbo-windows-64@2.6.3: optional: true - turbo-windows-arm64@2.6.1: + turbo-windows-arm64@2.6.3: optional: true - turbo@2.6.1: + turbo@2.6.3: optionalDependencies: - turbo-darwin-64: 2.6.1 - turbo-darwin-arm64: 2.6.1 - turbo-linux-64: 2.6.1 - turbo-linux-arm64: 2.6.1 - turbo-windows-64: 2.6.1 - turbo-windows-arm64: 2.6.1 + turbo-darwin-64: 2.6.3 + turbo-darwin-arm64: 2.6.3 + turbo-linux-64: 2.6.3 + turbo-linux-arm64: 2.6.3 + turbo-windows-64: 2.6.3 + turbo-windows-arm64: 2.6.3 typanion@3.14.0: {} From dd9f6562747395c680a4d9a5a4ba55e01d4387b1 Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Fri, 12 Dec 2025 09:38:08 -0500 Subject: [PATCH 009/100] Fix failing `postcss` integration test (#19436) This is what's causing the postcss test in #19434 to fail wanted to test this in isolation without the version bumps --- integrations/postcss/core-as-postcss-plugin.test.ts | 2 +- integrations/postcss/index.test.ts | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/integrations/postcss/core-as-postcss-plugin.test.ts b/integrations/postcss/core-as-postcss-plugin.test.ts index 17545fea32d8..0856210fec98 100644 --- a/integrations/postcss/core-as-postcss-plugin.test.ts +++ b/integrations/postcss/core-as-postcss-plugin.test.ts @@ -48,7 +48,7 @@ describe.each(Object.keys(variantConfig))('%s', (variant) => { }, }, async ({ exec, expect }) => { - expect( + await expect( exec('pnpm postcss src/index.css --output dist/out.css', undefined, { ignoreStdErr: true }), ).rejects.toThrowError( `It looks like you're trying to use \`tailwindcss\` directly as a PostCSS plugin. The PostCSS plugin has moved to a separate package, so to continue using Tailwind CSS with PostCSS you'll need to install \`@tailwindcss/postcss\` and update your PostCSS configuration.`, diff --git a/integrations/postcss/index.test.ts b/integrations/postcss/index.test.ts index 08ea852f950c..80025f945411 100644 --- a/integrations/postcss/index.test.ts +++ b/integrations/postcss/index.test.ts @@ -698,9 +698,7 @@ test(
`) - await process.onStderr((message) => - message.includes('does-not-exist is not exported from package'), - ) + await process.onStderr((message) => message.includes('"./does-not-exist" is not exported')) expect(await fs.dumpFiles('dist/*.css')).toMatchInlineSnapshot(` " @@ -743,9 +741,7 @@ test( `, ) - await process.onStderr((message) => - message.includes('does-not-exist is not exported from package'), - ) + await process.onStderr((message) => message.includes('"./does-not-exist" is not exported')) expect(await fs.dumpFiles('dist/*.css')).toMatchInlineSnapshot(` " From cb3703fc07d2c9f62a61a61a0891dcc4a1076ded Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Fri, 12 Dec 2025 14:39:05 +0000 Subject: [PATCH 010/100] Update all of nextjs to version 16.0.10 --- playgrounds/nextjs/package.json | 4 +- playgrounds/v3/package.json | 4 +- pnpm-lock.yaml | 124 ++++++++++++++++---------------- 3 files changed, 67 insertions(+), 65 deletions(-) diff --git a/playgrounds/nextjs/package.json b/playgrounds/nextjs/package.json index 7c5d0eec86c6..a812ba4b8598 100644 --- a/playgrounds/nextjs/package.json +++ b/playgrounds/nextjs/package.json @@ -11,7 +11,7 @@ "dependencies": { "@tailwindcss/postcss": "workspace:^", "fast-glob": "^3.3.3", - "next": "^16.0.7", + "next": "^16.0.10", "react": "^19.2.1", "react-dom": "^19.2.1", "tailwindcss": "workspace:^" @@ -21,7 +21,7 @@ "@types/react": "^19.2.6", "@types/react-dom": "^19.2.3", "eslint": "^9.39.1", - "eslint-config-next": "^16.0.7", + "eslint-config-next": "^16.0.10", "typescript": "^5.5.4" } } diff --git a/playgrounds/v3/package.json b/playgrounds/v3/package.json index d769b38e1489..d3e42e824862 100644 --- a/playgrounds/v3/package.json +++ b/playgrounds/v3/package.json @@ -9,7 +9,7 @@ "upgrade": "node scripts/upgrade.mjs" }, "dependencies": { - "next": "^16.0.7", + "next": "^16.0.10", "react": "^19.2.1", "react-dom": "^19.2.1", "tailwindcss": "^3" @@ -20,7 +20,7 @@ "@types/react-dom": "^19.2.3", "autoprefixer": "^10.4.22", "eslint": "^9.39.1", - "eslint-config-next": "^16.0.7", + "eslint-config-next": "^16.0.10", "typescript": "^5.5.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 33ffcaa0097d..c36ececb3117 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -480,8 +480,8 @@ importers: specifier: ^3.3.3 version: 3.3.3 next: - specifier: ^16.0.7 - version: 16.0.7(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^16.0.10 + version: 16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react: specifier: ^19.2.1 version: 19.2.1 @@ -505,8 +505,8 @@ importers: specifier: ^9.39.1 version: 9.39.1(jiti@2.6.1) eslint-config-next: - specifier: ^16.0.7 - version: 16.0.7(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) + specifier: ^16.0.10 + version: 16.0.10(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -514,8 +514,8 @@ importers: playgrounds/v3: dependencies: next: - specifier: ^16.0.7 - version: 16.0.7(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + specifier: ^16.0.10 + version: 16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react: specifier: ^19.2.1 version: 19.2.1 @@ -542,8 +542,8 @@ importers: specifier: ^9.39.1 version: 9.39.1(jiti@2.6.1) eslint-config-next: - specifier: ^16.0.7 - version: 16.0.7(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) + specifier: ^16.0.10 + version: 16.0.10(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) typescript: specifier: ^5.5.4 version: 5.6.3 @@ -1830,56 +1830,56 @@ packages: resolution: {integrity: sha512-enkZYyuCdo+9jneCPE/0fjIta4wWnvVN9hBo2HuiMpRF0q3lzv1J6b/cl7i0mxZUKhBrV3aCKDBQnCOhwKbPmQ==} engines: {node: '>= 10'} - '@next/env@16.0.7': - resolution: {integrity: sha512-gpaNgUh5nftFKRkRQGnVi5dpcYSKGcZZkQffZ172OrG/XkrnS7UBTQ648YY+8ME92cC4IojpI2LqTC8sTDhAaw==} + '@next/env@16.0.10': + resolution: {integrity: sha512-8tuaQkyDVgeONQ1MeT9Mkk8pQmZapMKFh5B+OrFUlG3rVmYTXcXlBetBgTurKXGaIZvkoqRT9JL5K3phXcgang==} - '@next/eslint-plugin-next@16.0.7': - resolution: {integrity: sha512-hFrTNZcMEG+k7qxVxZJq3F32Kms130FAhG8lvw2zkKBgAcNOJIxlljNiCjGygvBshvaGBdf88q2CqWtnqezDHA==} + '@next/eslint-plugin-next@16.0.10': + resolution: {integrity: sha512-b2NlWN70bbPLmfyoLvvidPKWENBYYIe017ZGUpElvQjDytCWgxPJx7L9juxHt0xHvNVA08ZHJdOyhGzon/KJuw==} - '@next/swc-darwin-arm64@16.0.7': - resolution: {integrity: sha512-LlDtCYOEj/rfSnEn/Idi+j1QKHxY9BJFmxx7108A6D8K0SB+bNgfYQATPk/4LqOl4C0Wo3LACg2ie6s7xqMpJg==} + '@next/swc-darwin-arm64@16.0.10': + resolution: {integrity: sha512-4XgdKtdVsaflErz+B5XeG0T5PeXKDdruDf3CRpnhN+8UebNa5N2H58+3GDgpn/9GBurrQ1uWW768FfscwYkJRg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.0.7': - resolution: {integrity: sha512-rtZ7BhnVvO1ICf3QzfW9H3aPz7GhBrnSIMZyr4Qy6boXF0b5E3QLs+cvJmg3PsTCG2M1PBoC+DANUi4wCOKXpA==} + '@next/swc-darwin-x64@16.0.10': + resolution: {integrity: sha512-spbEObMvRKkQ3CkYVOME+ocPDFo5UqHb8EMTS78/0mQ+O1nqE8toHJVioZo4TvebATxgA8XMTHHrScPrn68OGw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.0.7': - resolution: {integrity: sha512-mloD5WcPIeIeeZqAIP5c2kdaTa6StwP4/2EGy1mUw8HiexSHGK/jcM7lFuS3u3i2zn+xH9+wXJs6njO7VrAqww==} + '@next/swc-linux-arm64-gnu@16.0.10': + resolution: {integrity: sha512-uQtWE3X0iGB8apTIskOMi2w/MKONrPOUCi5yLO+v3O8Mb5c7K4Q5KD1jvTpTF5gJKa3VH/ijKjKUq9O9UhwOYw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@16.0.7': - resolution: {integrity: sha512-+ksWNrZrthisXuo9gd1XnjHRowCbMtl/YgMpbRvFeDEqEBd523YHPWpBuDjomod88U8Xliw5DHhekBC3EOOd9g==} + '@next/swc-linux-arm64-musl@16.0.10': + resolution: {integrity: sha512-llA+hiDTrYvyWI21Z0L1GiXwjQaanPVQQwru5peOgtooeJ8qx3tlqRV2P7uH2pKQaUfHxI/WVarvI5oYgGxaTw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@16.0.7': - resolution: {integrity: sha512-4WtJU5cRDxpEE44Ana2Xro1284hnyVpBb62lIpU5k85D8xXxatT+rXxBgPkc7C1XwkZMWpK5rXLXTh9PFipWsA==} + '@next/swc-linux-x64-gnu@16.0.10': + resolution: {integrity: sha512-AK2q5H0+a9nsXbeZ3FZdMtbtu9jxW4R/NgzZ6+lrTm3d6Zb7jYrWcgjcpM1k8uuqlSy4xIyPR2YiuUr+wXsavA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@16.0.7': - resolution: {integrity: sha512-HYlhqIP6kBPXalW2dbMTSuB4+8fe+j9juyxwfMwCe9kQPPeiyFn7NMjNfoFOfJ2eXkeQsoUGXg+O2SE3m4Qg2w==} + '@next/swc-linux-x64-musl@16.0.10': + resolution: {integrity: sha512-1TDG9PDKivNw5550S111gsO4RGennLVl9cipPhtkXIFVwo31YZ73nEbLjNC8qG3SgTz/QZyYyaFYMeY4BKZR/g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@16.0.7': - resolution: {integrity: sha512-EviG+43iOoBRZg9deGauXExjRphhuYmIOJ12b9sAPy0eQ6iwcPxfED2asb/s2/yiLYOdm37kPaiZu8uXSYPs0Q==} + '@next/swc-win32-arm64-msvc@16.0.10': + resolution: {integrity: sha512-aEZIS4Hh32xdJQbHz121pyuVZniSNoqDVx1yIr2hy+ZwJGipeqnMZBJHyMxv2tiuAXGx6/xpTcQJ6btIiBjgmg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.0.7': - resolution: {integrity: sha512-gniPjy55zp5Eg0896qSrf3yB1dw4F/3s8VK1ephdsZZ129j2n6e1WqCbE2YgcKhW9hPB9TVZENugquWJD5x0ug==} + '@next/swc-win32-x64-msvc@16.0.10': + resolution: {integrity: sha512-E+njfCoFLb01RAFEnGZn6ERoOqhK1Gl3Lfz1Kjnj0Ulfu7oJbuMyvBKNj/bw8XZnenHDASlygTjZICQW+rYW1Q==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2927,8 +2927,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@16.0.7: - resolution: {integrity: sha512-WubFGLFHfk2KivkdRGfx6cGSFhaQqhERRfyO8BRx+qiGPGp7WLKcPvYC4mdx1z3VhVRcrfFzczjjTrbJZOpnEQ==} + eslint-config-next@16.0.10: + resolution: {integrity: sha512-BxouZUm0I45K4yjOOIzj24nTi0H2cGo0y7xUmk+Po/PYtJXFBYVDS1BguE7t28efXjKdcN0tmiLivxQy//SsZg==} peerDependencies: eslint: '>=9.0.0' typescript: '>=3.3.1' @@ -3685,8 +3685,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - next@16.0.7: - resolution: {integrity: sha512-3mBRJyPxT4LOxAJI6IsXeFtKfiJUbjCLgvXO02fV8Wy/lIhPvP94Fe7dGhUgHXcQy4sSuYwQNcOLhIfOm0rL0A==} + next@16.0.10: + resolution: {integrity: sha512-RtWh5PUgI+vxlV3HdR+IfWA1UUHu0+Ram/JBO4vWB54cVPentCD0e+lxyAYEsDTqGGMg7qpjhKh6dc6aW7W/sA==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -5561,34 +5561,34 @@ snapshots: '@napi-rs/wasm-tools-win32-ia32-msvc': 1.0.1 '@napi-rs/wasm-tools-win32-x64-msvc': 1.0.1 - '@next/env@16.0.7': {} + '@next/env@16.0.10': {} - '@next/eslint-plugin-next@16.0.7': + '@next/eslint-plugin-next@16.0.10': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@16.0.7': + '@next/swc-darwin-arm64@16.0.10': optional: true - '@next/swc-darwin-x64@16.0.7': + '@next/swc-darwin-x64@16.0.10': optional: true - '@next/swc-linux-arm64-gnu@16.0.7': + '@next/swc-linux-arm64-gnu@16.0.10': optional: true - '@next/swc-linux-arm64-musl@16.0.7': + '@next/swc-linux-arm64-musl@16.0.10': optional: true - '@next/swc-linux-x64-gnu@16.0.7': + '@next/swc-linux-x64-gnu@16.0.10': optional: true - '@next/swc-linux-x64-musl@16.0.7': + '@next/swc-linux-x64-musl@16.0.10': optional: true - '@next/swc-win32-arm64-msvc@16.0.7': + '@next/swc-win32-arm64-msvc@16.0.10': optional: true - '@next/swc-win32-x64-msvc@16.0.7': + '@next/swc-win32-x64-msvc@16.0.10': optional: true '@nodelib/fs.scandir@2.1.5': @@ -6791,13 +6791,13 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.0.7(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4): + eslint-config-next@16.0.10(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4): dependencies: - '@next/eslint-plugin-next': 16.0.7 + '@next/eslint-plugin-next': 16.0.10 eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.1(jiti@2.6.1)) @@ -6811,9 +6811,9 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-next@16.0.7(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3): + eslint-config-next@16.0.10(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3): dependencies: - '@next/eslint-plugin-next': 16.0.7 + '@next/eslint-plugin-next': 16.0.10 eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) @@ -6851,7 +6851,7 @@ snapshots: is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6898,7 +6898,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.1(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -7684,24 +7684,24 @@ snapshots: natural-compare@1.4.0: {} - next@16.0.7(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: - '@next/env': 16.0.7 + '@next/env': 16.0.10 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001755 postcss: 8.4.31 react: 19.2.1 react-dom: 19.2.1(react@19.2.1) - styled-jsx: 5.1.6(react@19.2.1) + styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.1) optionalDependencies: - '@next/swc-darwin-arm64': 16.0.7 - '@next/swc-darwin-x64': 16.0.7 - '@next/swc-linux-arm64-gnu': 16.0.7 - '@next/swc-linux-arm64-musl': 16.0.7 - '@next/swc-linux-x64-gnu': 16.0.7 - '@next/swc-linux-x64-musl': 16.0.7 - '@next/swc-win32-arm64-msvc': 16.0.7 - '@next/swc-win32-x64-msvc': 16.0.7 + '@next/swc-darwin-arm64': 16.0.10 + '@next/swc-darwin-x64': 16.0.10 + '@next/swc-linux-arm64-gnu': 16.0.10 + '@next/swc-linux-arm64-musl': 16.0.10 + '@next/swc-linux-x64-gnu': 16.0.10 + '@next/swc-linux-x64-musl': 16.0.10 + '@next/swc-win32-arm64-msvc': 16.0.10 + '@next/swc-win32-x64-msvc': 16.0.10 '@playwright/test': 1.57.0 sharp: 0.34.5 transitivePeerDependencies: @@ -8290,10 +8290,12 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(react@19.2.1): + styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.1): dependencies: client-only: 0.0.1 react: 19.2.1 + optionalDependencies: + '@babel/core': 7.28.5 sucrase@3.35.0: dependencies: From 52e91db52c743493dff6c8c61b3c920119f18dac Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 09:35:08 -0500 Subject: [PATCH 011/100] =?UTF-8?q?Update=20@vitejs/plugin-react=205.1.1?= =?UTF-8?q?=20=E2=86=92=205.1.2=20(patch)=20(#19440)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ @​vitejs/plugin-react (5.1.1 → 5.1.2) · [Repo](https://github.com/vitejs/vite-plugin-react) · [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- playgrounds/vite/package.json | 2 +- pnpm-lock.yaml | 46 +++++++++++++++-------------------- 2 files changed, 20 insertions(+), 28 deletions(-) diff --git a/playgrounds/vite/package.json b/playgrounds/vite/package.json index 3bd94b7ba2f6..b7f19f6e8181 100644 --- a/playgrounds/vite/package.json +++ b/playgrounds/vite/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@tailwindcss/vite": "workspace:^", - "@vitejs/plugin-react": "^5.1.1", + "@vitejs/plugin-react": "^5.1.2", "react": "^19.2.1", "react-dom": "^19.2.1", "tailwindcss": "workspace:^" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c36ececb3117..b10eaf910fd8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -481,7 +481,7 @@ importers: version: 3.3.3 next: specifier: ^16.0.10 - version: 16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 16.0.10(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react: specifier: ^19.2.1 version: 19.2.1 @@ -515,7 +515,7 @@ importers: dependencies: next: specifier: ^16.0.10 - version: 16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 16.0.10(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react: specifier: ^19.2.1 version: 19.2.1 @@ -554,8 +554,8 @@ importers: specifier: workspace:^ version: link:../../packages/@tailwindcss-vite '@vitejs/plugin-react': - specifier: ^5.1.1 - version: 5.1.1(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) + specifier: ^5.1.2 + version: 5.1.2(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) react: specifier: ^19.2.1 version: 19.2.1 @@ -627,10 +627,6 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} @@ -2192,8 +2188,8 @@ packages: engines: {node: '>=18'} hasBin: true - '@rolldown/pluginutils@1.0.0-beta.47': - resolution: {integrity: sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==} + '@rolldown/pluginutils@1.0.0-beta.53': + resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} '@rollup/rollup-android-arm-eabi@4.44.0': resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==} @@ -2444,8 +2440,8 @@ packages: resolution: {integrity: sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitejs/plugin-react@5.1.1': - resolution: {integrity: sha512-WQfkSw0QbQ5aJ2CHYw23ZGkqnRwqKHD/KYsMeTkZzPT4Jcf0DcBxBtwMJxnu6E7oxw5+JC6ZAiePgh28uJ1HBA==} + '@vitejs/plugin-react@5.1.2': + resolution: {integrity: sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -4637,7 +4633,7 @@ snapshots: '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 @@ -4692,7 +4688,7 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -4701,8 +4697,6 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-identifier@7.28.5': {} '@babel/helper-validator-option@7.27.1': {} @@ -5831,7 +5825,7 @@ snapshots: dependencies: playwright: 1.57.0 - '@rolldown/pluginutils@1.0.0-beta.47': {} + '@rolldown/pluginutils@1.0.0-beta.53': {} '@rollup/rollup-android-arm-eabi@4.44.0': optional: true @@ -6167,12 +6161,12 @@ snapshots: '@typescript-eslint/types': 8.47.0 eslint-visitor-keys: 4.2.1 - '@vitejs/plugin-react@5.1.1(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': + '@vitejs/plugin-react@5.1.2(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) - '@rolldown/pluginutils': 1.0.0-beta.47 + '@rolldown/pluginutils': 1.0.0-beta.53 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) @@ -6797,7 +6791,7 @@ snapshots: eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.1(jiti@2.6.1)) @@ -6851,7 +6845,7 @@ snapshots: is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.1(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6898,7 +6892,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.1(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -7684,7 +7678,7 @@ snapshots: natural-compare@1.4.0: {} - next@16.0.10(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + next@16.0.10(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: '@next/env': 16.0.10 '@swc/helpers': 0.5.15 @@ -7692,7 +7686,7 @@ snapshots: postcss: 8.4.31 react: 19.2.1 react-dom: 19.2.1(react@19.2.1) - styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.1) + styled-jsx: 5.1.6(react@19.2.1) optionalDependencies: '@next/swc-darwin-arm64': 16.0.10 '@next/swc-darwin-x64': 16.0.10 @@ -8290,12 +8284,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.1): + styled-jsx@5.1.6(react@19.2.1): dependencies: client-only: 0.0.1 react: 19.2.1 - optionalDependencies: - '@babel/core': 7.28.5 sucrase@3.35.0: dependencies: From 73b5df620c3122c5a825fc30fe8b4a1021aafe1a Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 23:33:16 -0500 Subject: [PATCH 012/100] =?UTF-8?q?Update=20@types/react=2019.2.6=20?= =?UTF-8?q?=E2=86=92=2019.2.7=20(patch)=20(#19448)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ @​types/react (19.2.2 → 19.2.7) · [Repo](https://github.com/DefinitelyTyped/DefinitelyTyped) Sorry, we couldn't find anything useful about this release. --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- playgrounds/nextjs/package.json | 2 +- playgrounds/v3/package.json | 2 +- playgrounds/vite/package.json | 2 +- pnpm-lock.yaml | 44 +++++++++++---------------------- 4 files changed, 17 insertions(+), 33 deletions(-) diff --git a/playgrounds/nextjs/package.json b/playgrounds/nextjs/package.json index a812ba4b8598..aae484532a05 100644 --- a/playgrounds/nextjs/package.json +++ b/playgrounds/nextjs/package.json @@ -18,7 +18,7 @@ }, "devDependencies": { "@types/node": "catalog:", - "@types/react": "^19.2.6", + "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", "eslint": "^9.39.1", "eslint-config-next": "^16.0.10", diff --git a/playgrounds/v3/package.json b/playgrounds/v3/package.json index d3e42e824862..e4df6ad109e3 100644 --- a/playgrounds/v3/package.json +++ b/playgrounds/v3/package.json @@ -16,7 +16,7 @@ }, "devDependencies": { "@types/node": "^20.14.8", - "@types/react": "^19.2.6", + "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", "autoprefixer": "^10.4.22", "eslint": "^9.39.1", diff --git a/playgrounds/vite/package.json b/playgrounds/vite/package.json index b7f19f6e8181..05524e6bf175 100644 --- a/playgrounds/vite/package.json +++ b/playgrounds/vite/package.json @@ -16,7 +16,7 @@ "tailwindcss": "workspace:^" }, "devDependencies": { - "@types/react": "^19.2.2", + "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", "bun": "^1.3.3", "vite": "catalog:" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b10eaf910fd8..d10c01df4338 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -496,11 +496,11 @@ importers: specifier: 'catalog:' version: 20.19.1 '@types/react': - specifier: ^19.2.6 - version: 19.2.6 + specifier: ^19.2.7 + version: 19.2.7 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.6) + version: 19.2.3(@types/react@19.2.7) eslint: specifier: ^9.39.1 version: 9.39.1(jiti@2.6.1) @@ -530,11 +530,11 @@ importers: specifier: ^20.14.8 version: 20.14.13 '@types/react': - specifier: ^19.2.6 - version: 19.2.6 + specifier: ^19.2.7 + version: 19.2.7 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.6) + version: 19.2.3(@types/react@19.2.7) autoprefixer: specifier: ^10.4.22 version: 10.4.22(postcss@8.4.47) @@ -567,11 +567,11 @@ importers: version: link:../../packages/tailwindcss devDependencies: '@types/react': - specifier: ^19.2.2 - version: 19.2.2 + specifier: ^19.2.7 + version: 19.2.7 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.2) + version: 19.2.3(@types/react@19.2.7) bun: specifier: ^1.3.3 version: 1.3.3 @@ -2372,11 +2372,8 @@ packages: peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.2': - resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} - - '@types/react@19.2.6': - resolution: {integrity: sha512-p/jUvulfgU7oKtj6Xpk8cA2Y1xKTtICGpJYeJXz2YVO2UcvjQgeRMLDGfDeqeRW2Ta+0QNFwcc8X3GH8SxZz6w==} + '@types/react@19.2.7': + resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} @@ -2748,9 +2745,6 @@ packages: engines: {node: '>=4'} hasBin: true - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -5969,19 +5963,11 @@ snapshots: dependencies: postcss: 8.4.41 - '@types/react-dom@19.2.3(@types/react@19.2.2)': - dependencies: - '@types/react': 19.2.2 - - '@types/react-dom@19.2.3(@types/react@19.2.6)': + '@types/react-dom@19.2.3(@types/react@19.2.7)': dependencies: - '@types/react': 19.2.6 + '@types/react': 19.2.7 - '@types/react@19.2.2': - dependencies: - csstype: 3.1.3 - - '@types/react@19.2.6': + '@types/react@19.2.7': dependencies: csstype: 3.2.3 @@ -6503,8 +6489,6 @@ snapshots: cssesc@3.0.0: {} - csstype@3.1.3: {} - csstype@3.2.3: {} damerau-levenshtein@1.0.8: {} From dd1ca3c709a9e942634843911b0c5783de20ce13 Mon Sep 17 00:00:00 2001 From: Rasso Hilber Date: Tue, 16 Dec 2025 22:57:36 +0100 Subject: [PATCH 013/100] Do not wrap `color-mix` in a `@supports` rule if one already exists (#19450) Related issue: #19445 ## Summary Fixes an issue where tailwindcss wraps `color-mix` inside a `@supports` block even if the original code already checks for support. Uncompiled Code: ```css @utility foo { @supports (color: color-mix(in lab, red, red)) { background: color-mix(in lab, var(--color-1), var(--color-2)); } } ``` ### Compiled code: Current behavior https://play.tailwindcss.com/KSvR7wefdh?file=css ```css @layer utilities { .foo { @supports (color: color-mix(in lab, red, red)) { background: var(--color-1); @supports (color: color-mix(in lab, red, red)) { background: color-mix(in lab, var(--color-1), var(--color-2)); } } } ``` ### Compiled code: Fixed behavior ```css @layer utilities { @supports (color: color-mix(in lab, red, red)) { .foo { background: color-mix(in lab, var(--color-1), var(--color-2)); } } ``` ## Test plan I have tested this by writing a new test that was at first failing. Now it passes. --------- Co-authored-by: Jordan Pittman --- CHANGELOG.md | 4 ++++ packages/tailwindcss/src/ast.ts | 3 +++ packages/tailwindcss/src/index.test.ts | 22 ++++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d1c7bc04a76..7829df19ce92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- Do not wrap `color-mix` in a `@supports` rule if one already exists ([#19450](https://github.com/tailwindlabs/tailwindcss/pull/19450)) + ### Added - _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) diff --git a/packages/tailwindcss/src/ast.ts b/packages/tailwindcss/src/ast.ts index ab0a4fb4d572..77fa742e90c6 100644 --- a/packages/tailwindcss/src/ast.ts +++ b/packages/tailwindcss/src/ast.ts @@ -285,6 +285,7 @@ export function optimizeAst( if ( polyfills & Polyfills.ColorMix && node.value.includes('color-mix(') && + !context.supportsColorMix && !context.keyframes ) { colorMixDeclarations.get(parent).add(node) @@ -382,6 +383,8 @@ export function optimizeAst( else if (node.kind === 'at-rule') { if (node.name === '@keyframes') { context = { ...context, keyframes: true } + } else if (node.name === '@supports' && node.params.includes('color-mix(')) { + context = { ...context, supportsColorMix: true } } let copy = { ...node, nodes: [] } diff --git a/packages/tailwindcss/src/index.test.ts b/packages/tailwindcss/src/index.test.ts index 5cd5282b00f7..5959504641ca 100644 --- a/packages/tailwindcss/src/index.test.ts +++ b/packages/tailwindcss/src/index.test.ts @@ -5812,6 +5812,28 @@ describe('`color-mix(…)` polyfill', () => { }" `) }) + + it('does not apply optimizations when already inside a @supports (color: color-mix... block', async () => { + await expect( + compileCss( + css` + @tailwind utilities; + @utility mixed { + @supports (color: color-mix(in lab, red, red)) { + background: color-mix(in oklab, var(--color-1), var(--color-2) 0%); + } + } + `, + ['mixed'], + ), + ).resolves.toMatchInlineSnapshot(` + "@supports (color: color-mix(in lab, red, red)) { + .mixed { + background: color-mix(in oklab, var(--color-1), var(--color-2) 0%); + } + }" + `) + }) }) describe('`@property` polyfill', async () => { From 72dea0cfea9833f26c14509e87aba53bba848452 Mon Sep 17 00:00:00 2001 From: Rasso Hilber Date: Thu, 18 Dec 2025 04:15:42 +0100 Subject: [PATCH 014/100] Clarify the `replaceAlpha` function comment (#19457) ## Summary Updated the comment of the `replaceAlpha` function to clarify the function's purpose. ## Test plan n/a --- packages/tailwindcss/src/utilities.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index 5e7877825b81..8ec903af64ec 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -193,7 +193,7 @@ export function withAlpha(value: string, alpha: string): string { } /** - * Apply opacity to a color using `color-mix`. + * Replace the opacity in a color using relative color syntax. */ export function replaceAlpha(value: string, alpha: string): string { // Convert numeric values (like `0.5`) to percentages (like `50%`) so they From 1fbdd51a8d260103288657899ec65905325f375d Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Wed, 17 Dec 2025 22:27:50 -0500 Subject: [PATCH 015/100] Update test --- integrations/cli/plugins.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrations/cli/plugins.test.ts b/integrations/cli/plugins.test.ts index 0597e247be50..c0f7c39c3a41 100644 --- a/integrations/cli/plugins.test.ts +++ b/integrations/cli/plugins.test.ts @@ -117,7 +117,7 @@ test( await fs.expectFileToContain('dist/out.css', [ // `::-webkit-date-and-time-value`, - `[type='checkbox']:indeterminate`, + `input:where([type='checkbox']):indeterminate`, ]) // No classes are included even though they are used in the HTML From 7fcdd84e568380464fbf0086fb64c8a2c146ca2b Mon Sep 17 00:00:00 2001 From: Justin Wong <11310624+wongjn@users.noreply.github.com> Date: Thu, 18 Dec 2025 15:51:00 +0000 Subject: [PATCH 016/100] Allow whitespace around `@source inline()` arg (#19461) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Inspired by #19460, relaxes whitespace syntax around `@source inline(…):` ### Before ```css /* ❌ Error: `@source` paths must be quoted. */ @source inline( "underline" ); @source inline( "underline" ); ``` ### After ```css /* ✅ Generates the class names as normal. */ @source inline( "underline" ); @source inline( "underline" ); ``` ## Test plan Added tests to `packages/tailwindcss/src/index.test.ts`. --- CHANGELOG.md | 1 + packages/tailwindcss/src/index.test.ts | 38 ++++++++++++++++++++++++++ packages/tailwindcss/src/index.ts | 2 +- 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7829df19ce92..be8ec9aef242 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Do not wrap `color-mix` in a `@supports` rule if one already exists ([#19450](https://github.com/tailwindlabs/tailwindcss/pull/19450)) +- Allow whitespace around `@source inline()` argument ([#19461](https://github.com/tailwindlabs/tailwindcss/pull/19461)) ### Added diff --git a/packages/tailwindcss/src/index.test.ts b/packages/tailwindcss/src/index.test.ts index 5959504641ca..2d6ab8daf6f7 100644 --- a/packages/tailwindcss/src/index.test.ts +++ b/packages/tailwindcss/src/index.test.ts @@ -3802,6 +3802,44 @@ describe('@source', () => { expect(build(['bg-red-500', 'bg-red-700'])).toMatchInlineSnapshot(`""`) }) + + test('works with whitespace around the argument', async () => { + let { build } = await compile( + css` + /* prettier-ignore */ + @source inline( "underline" ); + @tailwind utilities; + `, + { base: '/root' }, + ) + + expect(build([])).toMatchInlineSnapshot(` + ".underline { + text-decoration-line: underline; + } + " + `) + }) + + test('works with newlines around the argument', async () => { + let { build } = await compile( + css` + /* prettier-ignore */ + @source inline( + "underline" + ); + @tailwind utilities; + `, + { base: '/root' }, + ) + + expect(build([])).toMatchInlineSnapshot(` + ".underline { + text-decoration-line: underline; + } + " + `) + }) }) }) diff --git a/packages/tailwindcss/src/index.ts b/packages/tailwindcss/src/index.ts index 512c2f831d03..a511b08386f2 100644 --- a/packages/tailwindcss/src/index.ts +++ b/packages/tailwindcss/src/index.ts @@ -274,7 +274,7 @@ async function parseCss( if (path[0] === 'i' && path.startsWith('inline(')) { inline = true - path = path.slice(7, -1) + path = path.slice(7, -1).trim() } if ( From 219e019b2458a5441bf7e3cf54884ed8b888f3cc Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Thu, 18 Dec 2025 15:02:27 -0500 Subject: [PATCH 017/100] CLI: Emit comment when source maps are saved to files (#19447) See https://github.com/tailwindlabs/tailwindcss/issues/19362#issuecomment-3654376948 --- CHANGELOG.md | 1 + integrations/cli/index.test.ts | 10 +++++----- .../@tailwindcss-cli/src/commands/build/index.ts | 12 ++++++++++++ packages/@tailwindcss-node/src/source-maps.ts | 15 ++++++++------- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be8ec9aef242..b776a93e522c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Do not wrap `color-mix` in a `@supports` rule if one already exists ([#19450](https://github.com/tailwindlabs/tailwindcss/pull/19450)) - Allow whitespace around `@source inline()` argument ([#19461](https://github.com/tailwindlabs/tailwindcss/pull/19461)) +- CLI: Emit comment when source maps are saved to files ([#19447](https://github.com/tailwindlabs/tailwindcss/pull/19447)) ### Added diff --git a/integrations/cli/index.test.ts b/integrations/cli/index.test.ts index 870a1baec3a9..409a9de7cd41 100644 --- a/integrations/cli/index.test.ts +++ b/integrations/cli/index.test.ts @@ -752,7 +752,7 @@ describe.each([ expect(map.at(4, 0)).toMatchObject({ source: null, original: '(none)', - generated: '}...', + generated: '}\n\n/*# sou...', }) }, ) @@ -815,7 +815,7 @@ describe.each([ expect(map.at(4, 0)).toMatchObject({ source: null, original: '(none)', - generated: '}...', + generated: '}\n\n/*# sou...', }) }, ) @@ -1118,7 +1118,7 @@ describe.each([ expect(map.at(4, 0)).toMatchObject({ source: null, original: '(none)', - generated: '}...', + generated: '}\n\n/*# sou...', }) // Write to project source files @@ -1190,7 +1190,7 @@ describe.each([ expect(map.at(7, 0)).toMatchObject({ source: null, original: '(none)', - generated: '}...', + generated: '}\n\n/*# sou...', }) // Write to the main CSS file @@ -1290,7 +1290,7 @@ describe.each([ expect(map.at(10, 0)).toMatchObject({ source: null, original: '(none)', - generated: '}...', + generated: '}\n\n/*# sou...', }) }, ) diff --git a/packages/@tailwindcss-cli/src/commands/build/index.ts b/packages/@tailwindcss-cli/src/commands/build/index.ts index f0d441fe2d99..eabd2a1de022 100644 --- a/packages/@tailwindcss-cli/src/commands/build/index.ts +++ b/packages/@tailwindcss-cli/src/commands/build/index.ts @@ -182,6 +182,18 @@ export async function handle(args: Result>) { output += `\n` output += map.inline } else if (typeof args['--map'] === 'string') { + let basePath = + args['--output'] && args['--output'] !== '-' + ? path.dirname(path.resolve(args['--output'])) + : process.cwd() + + let mapPath = path.resolve(args['--map']) + + let relativePath = path.relative(basePath, mapPath) + + output += `\n` + output += map.comment(relativePath) + DEBUG && I.start('Write source map') await outputFile(args['--map'], map.raw) DEBUG && I.end('Write source map') diff --git a/packages/@tailwindcss-node/src/source-maps.ts b/packages/@tailwindcss-node/src/source-maps.ts index 3f02efb24c00..8810b106c5ef 100644 --- a/packages/@tailwindcss-node/src/source-maps.ts +++ b/packages/@tailwindcss-node/src/source-maps.ts @@ -6,6 +6,7 @@ export type { DecodedSource, DecodedSourceMap } export interface SourceMap { readonly raw: string readonly inline: string + comment(url: string): string } function serializeSourceMap(map: DecodedSourceMap): string { @@ -44,16 +45,16 @@ function serializeSourceMap(map: DecodedSourceMap): string { export function toSourceMap(map: DecodedSourceMap | string): SourceMap { let raw = typeof map === 'string' ? map : serializeSourceMap(map) + function comment(url: string) { + return `/*# sourceMappingURL=${url} */\n` + } + return { raw, get inline() { - let tmp = '' - - tmp += '/*# sourceMappingURL=data:application/json;base64,' - tmp += Buffer.from(raw, 'utf-8').toString('base64') - tmp += ' */\n' - - return tmp + let inlined = Buffer.from(raw, 'utf-8').toString('base64') + return comment(`data:application/json;base64,${inlined}`) }, + comment, } } From d6ad8dddcfa774b6b7963fb40ef08bdfffa9f1d9 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Thu, 18 Dec 2025 15:03:51 -0500 Subject: [PATCH 018/100] =?UTF-8?q?Update=20enhanced-resolve=205.18.3=20?= =?UTF-8?q?=E2=86=92=205.18.4=20(patch)=20(#19462)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ enhanced-resolve (5.18.3 → 5.18.4) · [Repo](https://github.com/webpack/enhanced-resolve)
Release Notes

5.18.4

Fixes

  • Allow subpath imports that start with #/
  • Handle file: schema

Does any of this look wrong? Please let us know.

Commits

See the full diff on Github. The new version differs by 6 commits:

--- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- packages/@tailwindcss-cli/package.json | 2 +- packages/@tailwindcss-node/package.json | 2 +- packages/@tailwindcss-standalone/package.json | 2 +- packages/@tailwindcss-upgrade/package.json | 2 +- pnpm-lock.yaml | 26 +++++++++---------- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/@tailwindcss-cli/package.json b/packages/@tailwindcss-cli/package.json index feb9d3d44bc9..346d244ec3bf 100644 --- a/packages/@tailwindcss-cli/package.json +++ b/packages/@tailwindcss-cli/package.json @@ -32,7 +32,7 @@ "@parcel/watcher": "^2.5.1", "@tailwindcss/node": "workspace:*", "@tailwindcss/oxide": "workspace:*", - "enhanced-resolve": "^5.18.3", + "enhanced-resolve": "^5.18.4", "mri": "^1.2.0", "picocolors": "^1.1.1", "tailwindcss": "workspace:*" diff --git a/packages/@tailwindcss-node/package.json b/packages/@tailwindcss-node/package.json index 14bf5f9280a2..257b440aea3a 100644 --- a/packages/@tailwindcss-node/package.json +++ b/packages/@tailwindcss-node/package.json @@ -38,7 +38,7 @@ }, "dependencies": { "@jridgewell/remapping": "^2.3.4", - "enhanced-resolve": "^5.18.3", + "enhanced-resolve": "^5.18.4", "jiti": "^2.6.1", "lightningcss": "catalog:", "magic-string": "^0.30.21", diff --git a/packages/@tailwindcss-standalone/package.json b/packages/@tailwindcss-standalone/package.json index ef88f70a2ba2..e699d229c460 100644 --- a/packages/@tailwindcss-standalone/package.json +++ b/packages/@tailwindcss-standalone/package.json @@ -30,7 +30,7 @@ "@tailwindcss/forms": "^0.5.10", "@tailwindcss/typography": "^0.5.19", "detect-libc": "1.0.3", - "enhanced-resolve": "^5.18.3", + "enhanced-resolve": "^5.18.4", "tailwindcss": "workspace:*" }, "__notes": "These binary packages must be included so Bun can build the CLI for all supported platforms. We also rely on Lightning CSS and Parcel being patched so Bun can statically analyze the executables.", diff --git a/packages/@tailwindcss-upgrade/package.json b/packages/@tailwindcss-upgrade/package.json index d7e6ee08a86d..b11409cf6c4b 100644 --- a/packages/@tailwindcss-upgrade/package.json +++ b/packages/@tailwindcss-upgrade/package.json @@ -31,7 +31,7 @@ "@tailwindcss/oxide": "workspace:*", "braces": "^3.0.3", "dedent": "1.7.0", - "enhanced-resolve": "^5.18.3", + "enhanced-resolve": "^5.18.4", "globby": "^15.0.0", "jiti": "^2.0.0-beta.3", "mri": "^1.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d10c01df4338..2da9f6718b0f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -216,8 +216,8 @@ importers: specifier: workspace:* version: link:../../crates/node enhanced-resolve: - specifier: ^5.18.3 - version: 5.18.3 + specifier: ^5.18.4 + version: 5.18.4 mri: specifier: ^1.2.0 version: 1.2.0 @@ -234,8 +234,8 @@ importers: specifier: ^2.3.4 version: 2.3.5 enhanced-resolve: - specifier: ^5.18.3 - version: 5.18.3 + specifier: ^5.18.4 + version: 5.18.4 jiti: specifier: ^2.6.1 version: 2.6.1 @@ -304,8 +304,8 @@ importers: specifier: 1.0.3 version: 1.0.3 enhanced-resolve: - specifier: ^5.18.3 - version: 5.18.3 + specifier: ^5.18.4 + version: 5.18.4 tailwindcss: specifier: workspace:* version: link:../tailwindcss @@ -374,8 +374,8 @@ importers: specifier: 1.7.0 version: 1.7.0 enhanced-resolve: - specifier: ^5.18.3 - version: 5.18.3 + specifier: ^5.18.4 + version: 5.18.4 globby: specifier: ^15.0.0 version: 15.0.0 @@ -2852,8 +2852,8 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.18.3: - resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + enhanced-resolve@5.18.4: + resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} engines: {node: '>=10.13.0'} es-abstract@1.24.0: @@ -6572,7 +6572,7 @@ snapshots: emoji-regex@9.2.2: {} - enhanced-resolve@5.18.3: + enhanced-resolve@5.18.4: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -6821,7 +6821,7 @@ snapshots: dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 - enhanced-resolve: 5.18.3 + enhanced-resolve: 5.18.4 eslint: 9.39.1(jiti@2.6.1) eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) fast-glob: 3.3.3 @@ -6840,7 +6840,7 @@ snapshots: dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 - enhanced-resolve: 5.18.3 + enhanced-resolve: 5.18.4 eslint: 9.39.1(jiti@2.6.1) eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) fast-glob: 3.3.3 From dbd26b90e73338018a97654cc1bc542f868d24a7 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Thu, 18 Dec 2025 20:28:49 -0500 Subject: [PATCH 019/100] =?UTF-8?q?Update=20all=20of=20react=2019.2.1=20?= =?UTF-8?q?=E2=86=92=2019.2.3=20(patch)=20(#19464)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ react (19.2.1 → 19.2.3) · [Repo](https://github.com/facebook/react) · [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
Release Notes

19.2.3

React Server Components

19.2.2

React Server Components

Does any of this look wrong? Please let us know.

Commits

See the full diff on Github. The new version differs by 6 commits:

#### ✳️ react-dom (19.2.1 → 19.2.3) · [Repo](https://github.com/facebook/react) · [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
Release Notes

19.2.3

React Server Components

19.2.2

React Server Components

Does any of this look wrong? Please let us know.

Commits

See the full diff on Github. The new version differs by 6 commits:

--- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- playgrounds/nextjs/package.json | 4 +-- playgrounds/v3/package.json | 4 +-- playgrounds/vite/package.json | 4 +-- pnpm-lock.yaml | 56 ++++++++++++++++----------------- 4 files changed, 34 insertions(+), 34 deletions(-) diff --git a/playgrounds/nextjs/package.json b/playgrounds/nextjs/package.json index aae484532a05..7abcbfebfcca 100644 --- a/playgrounds/nextjs/package.json +++ b/playgrounds/nextjs/package.json @@ -12,8 +12,8 @@ "@tailwindcss/postcss": "workspace:^", "fast-glob": "^3.3.3", "next": "^16.0.10", - "react": "^19.2.1", - "react-dom": "^19.2.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", "tailwindcss": "workspace:^" }, "devDependencies": { diff --git a/playgrounds/v3/package.json b/playgrounds/v3/package.json index e4df6ad109e3..ec8fcca80af3 100644 --- a/playgrounds/v3/package.json +++ b/playgrounds/v3/package.json @@ -10,8 +10,8 @@ }, "dependencies": { "next": "^16.0.10", - "react": "^19.2.1", - "react-dom": "^19.2.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", "tailwindcss": "^3" }, "devDependencies": { diff --git a/playgrounds/vite/package.json b/playgrounds/vite/package.json index 05524e6bf175..ed591587d461 100644 --- a/playgrounds/vite/package.json +++ b/playgrounds/vite/package.json @@ -11,8 +11,8 @@ "dependencies": { "@tailwindcss/vite": "workspace:^", "@vitejs/plugin-react": "^5.1.2", - "react": "^19.2.1", - "react-dom": "^19.2.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", "tailwindcss": "workspace:^" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2da9f6718b0f..3fcc5101b7d1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -481,13 +481,13 @@ importers: version: 3.3.3 next: specifier: ^16.0.10 - version: 16.0.10(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 16.0.10(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: - specifier: ^19.2.1 - version: 19.2.1 + specifier: ^19.2.3 + version: 19.2.3 react-dom: - specifier: ^19.2.1 - version: 19.2.1(react@19.2.1) + specifier: ^19.2.3 + version: 19.2.3(react@19.2.3) tailwindcss: specifier: workspace:^ version: link:../../packages/tailwindcss @@ -515,13 +515,13 @@ importers: dependencies: next: specifier: ^16.0.10 - version: 16.0.10(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 16.0.10(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: - specifier: ^19.2.1 - version: 19.2.1 + specifier: ^19.2.3 + version: 19.2.3 react-dom: - specifier: ^19.2.1 - version: 19.2.1(react@19.2.1) + specifier: ^19.2.3 + version: 19.2.3(react@19.2.3) tailwindcss: specifier: ^3 version: 3.4.14 @@ -557,11 +557,11 @@ importers: specifier: ^5.1.2 version: 5.1.2(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) react: - specifier: ^19.2.1 - version: 19.2.1 + specifier: ^19.2.3 + version: 19.2.3 react-dom: - specifier: ^19.2.1 - version: 19.2.1(react@19.2.1) + specifier: ^19.2.3 + version: 19.2.3(react@19.2.3) tailwindcss: specifier: workspace:^ version: link:../../packages/tailwindcss @@ -3993,10 +3993,10 @@ packages: radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} - react-dom@19.2.1: - resolution: {integrity: sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==} + react-dom@19.2.3: + resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} peerDependencies: - react: ^19.2.1 + react: ^19.2.3 react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -4005,8 +4005,8 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} - react@19.2.1: - resolution: {integrity: sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==} + react@19.2.3: + resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -7662,15 +7662,15 @@ snapshots: natural-compare@1.4.0: {} - next@16.0.10(@playwright/test@1.57.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + next@16.0.10(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@next/env': 16.0.10 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001755 postcss: 8.4.31 - react: 19.2.1 - react-dom: 19.2.1(react@19.2.1) - styled-jsx: 5.1.6(react@19.2.1) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + styled-jsx: 5.1.6(react@19.2.3) optionalDependencies: '@next/swc-darwin-arm64': 16.0.10 '@next/swc-darwin-x64': 16.0.10 @@ -7957,16 +7957,16 @@ snapshots: radix3@1.1.2: {} - react-dom@19.2.1(react@19.2.1): + react-dom@19.2.3(react@19.2.3): dependencies: - react: 19.2.1 + react: 19.2.3 scheduler: 0.27.0 react-is@16.13.1: {} react-refresh@0.18.0: {} - react@19.2.1: {} + react@19.2.3: {} read-cache@1.0.0: dependencies: @@ -8268,10 +8268,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(react@19.2.1): + styled-jsx@5.1.6(react@19.2.3): dependencies: client-only: 0.0.1 - react: 19.2.1 + react: 19.2.3 sucrase@3.35.0: dependencies: From 543da3f4e576ea23a971b66a0bcd97121a4e779a Mon Sep 17 00:00:00 2001 From: Jordan Pittman Date: Fri, 19 Dec 2025 05:45:15 -0500 Subject: [PATCH 020/100] Detect utilities when containing capital letters followed by numbers (#19465) Fixes #19463 --- CHANGELOG.md | 1 + crates/oxide/src/extractor/named_utility_machine.rs | 3 +++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b776a93e522c..bf75d28e32df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Do not wrap `color-mix` in a `@supports` rule if one already exists ([#19450](https://github.com/tailwindlabs/tailwindcss/pull/19450)) - Allow whitespace around `@source inline()` argument ([#19461](https://github.com/tailwindlabs/tailwindcss/pull/19461)) - CLI: Emit comment when source maps are saved to files ([#19447](https://github.com/tailwindlabs/tailwindcss/pull/19447)) +- Detect utilities when containing capital letters followed by numbers ([#19465](https://github.com/tailwindlabs/tailwindcss/pull/19465)) ### Added diff --git a/crates/oxide/src/extractor/named_utility_machine.rs b/crates/oxide/src/extractor/named_utility_machine.rs index 7c847a2e2915..d218dbeb7a9b 100644 --- a/crates/oxide/src/extractor/named_utility_machine.rs +++ b/crates/oxide/src/extractor/named_utility_machine.rs @@ -284,6 +284,7 @@ impl Machine for NamedUtilityMachine { | Class::Dot | Class::Number | Class::AlphaLower + | Class::AlphaUpper ) { return self.restart(); } @@ -425,6 +426,8 @@ mod tests { // With number followed by dash or underscore ("text-title1-strong", vec!["text-title1-strong"]), ("text-title1_strong", vec!["text-title1_strong"]), + // With capital letter followed by number + ("text-titleV1-strong", vec!["text-titleV1-strong"]), // With trailing % sign ("from-15%", vec!["from-15%"]), // Arbitrary value with bracket notation From c7036383a2ce10091175d5041c3ee05566b4c4b1 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Fri, 19 Dec 2025 16:20:03 -0500 Subject: [PATCH 021/100] =?UTF-8?q?Update=20all=20of=20nextjs=2016.0.10=20?= =?UTF-8?q?=E2=86=92=2016.1.0=20(minor)=20(#19468)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ eslint-config-next (16.0.10 → 16.1.0) Sorry, we couldn't find anything useful about this release. #### ✳️ next (16.0.10 → 16.1.0) · [Repo](https://github.com/vercel/next.js)
Release Notes

16.1.0

More info than we can show here.

Does any of this look wrong? Please let us know.

Commits

See the full diff on Github. The new version differs by more commits than we can show here.

--- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- playgrounds/nextjs/package.json | 4 +- playgrounds/v3/package.json | 4 +- pnpm-lock.yaml | 149 ++++++++++++++++---------------- 3 files changed, 80 insertions(+), 77 deletions(-) diff --git a/playgrounds/nextjs/package.json b/playgrounds/nextjs/package.json index 7abcbfebfcca..2e13dd11bdb8 100644 --- a/playgrounds/nextjs/package.json +++ b/playgrounds/nextjs/package.json @@ -11,7 +11,7 @@ "dependencies": { "@tailwindcss/postcss": "workspace:^", "fast-glob": "^3.3.3", - "next": "^16.0.10", + "next": "^16.1.0", "react": "^19.2.3", "react-dom": "^19.2.3", "tailwindcss": "workspace:^" @@ -21,7 +21,7 @@ "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", "eslint": "^9.39.1", - "eslint-config-next": "^16.0.10", + "eslint-config-next": "^16.1.0", "typescript": "^5.5.4" } } diff --git a/playgrounds/v3/package.json b/playgrounds/v3/package.json index ec8fcca80af3..d05d0f864775 100644 --- a/playgrounds/v3/package.json +++ b/playgrounds/v3/package.json @@ -9,7 +9,7 @@ "upgrade": "node scripts/upgrade.mjs" }, "dependencies": { - "next": "^16.0.10", + "next": "^16.1.0", "react": "^19.2.3", "react-dom": "^19.2.3", "tailwindcss": "^3" @@ -20,7 +20,7 @@ "@types/react-dom": "^19.2.3", "autoprefixer": "^10.4.22", "eslint": "^9.39.1", - "eslint-config-next": "^16.0.10", + "eslint-config-next": "^16.1.0", "typescript": "^5.5.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3fcc5101b7d1..b8acc5f1e6d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -480,8 +480,8 @@ importers: specifier: ^3.3.3 version: 3.3.3 next: - specifier: ^16.0.10 - version: 16.0.10(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^16.1.0 + version: 16.1.0(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: specifier: ^19.2.3 version: 19.2.3 @@ -505,8 +505,8 @@ importers: specifier: ^9.39.1 version: 9.39.1(jiti@2.6.1) eslint-config-next: - specifier: ^16.0.10 - version: 16.0.10(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) + specifier: ^16.1.0 + version: 16.1.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -514,8 +514,8 @@ importers: playgrounds/v3: dependencies: next: - specifier: ^16.0.10 - version: 16.0.10(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^16.1.0 + version: 16.1.0(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: specifier: ^19.2.3 version: 19.2.3 @@ -542,8 +542,8 @@ importers: specifier: ^9.39.1 version: 9.39.1(jiti@2.6.1) eslint-config-next: - specifier: ^16.0.10 - version: 16.0.10(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) + specifier: ^16.1.0 + version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) typescript: specifier: ^5.5.4 version: 5.6.3 @@ -1826,56 +1826,56 @@ packages: resolution: {integrity: sha512-enkZYyuCdo+9jneCPE/0fjIta4wWnvVN9hBo2HuiMpRF0q3lzv1J6b/cl7i0mxZUKhBrV3aCKDBQnCOhwKbPmQ==} engines: {node: '>= 10'} - '@next/env@16.0.10': - resolution: {integrity: sha512-8tuaQkyDVgeONQ1MeT9Mkk8pQmZapMKFh5B+OrFUlG3rVmYTXcXlBetBgTurKXGaIZvkoqRT9JL5K3phXcgang==} + '@next/env@16.1.0': + resolution: {integrity: sha512-Dd23XQeFHmhf3KBW76leYVkejHlCdB7erakC2At2apL1N08Bm+dLYNP+nNHh0tzUXfPQcNcXiQyacw0PG4Fcpw==} - '@next/eslint-plugin-next@16.0.10': - resolution: {integrity: sha512-b2NlWN70bbPLmfyoLvvidPKWENBYYIe017ZGUpElvQjDytCWgxPJx7L9juxHt0xHvNVA08ZHJdOyhGzon/KJuw==} + '@next/eslint-plugin-next@16.1.0': + resolution: {integrity: sha512-sooC/k0LCF4/jLXYHpgfzJot04lZQqsttn8XJpTguP8N3GhqXN3wSkh68no2OcZzS/qeGwKDFTqhZ8WofdXmmQ==} - '@next/swc-darwin-arm64@16.0.10': - resolution: {integrity: sha512-4XgdKtdVsaflErz+B5XeG0T5PeXKDdruDf3CRpnhN+8UebNa5N2H58+3GDgpn/9GBurrQ1uWW768FfscwYkJRg==} + '@next/swc-darwin-arm64@16.1.0': + resolution: {integrity: sha512-onHq8dl8KjDb8taANQdzs3XmIqQWV3fYdslkGENuvVInFQzZnuBYYOG2HGHqqtvgmEU7xWzhgndXXxnhk4Z3fQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.0.10': - resolution: {integrity: sha512-spbEObMvRKkQ3CkYVOME+ocPDFo5UqHb8EMTS78/0mQ+O1nqE8toHJVioZo4TvebATxgA8XMTHHrScPrn68OGw==} + '@next/swc-darwin-x64@16.1.0': + resolution: {integrity: sha512-Am6VJTp8KhLuAH13tPrAoVIXzuComlZlMwGr++o2KDjWiKPe3VwpxYhgV6I4gKls2EnsIMggL4y7GdXyDdJcFA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.0.10': - resolution: {integrity: sha512-uQtWE3X0iGB8apTIskOMi2w/MKONrPOUCi5yLO+v3O8Mb5c7K4Q5KD1jvTpTF5gJKa3VH/ijKjKUq9O9UhwOYw==} + '@next/swc-linux-arm64-gnu@16.1.0': + resolution: {integrity: sha512-fVicfaJT6QfghNyg8JErZ+EMNQ812IS0lmKfbmC01LF1nFBcKfcs4Q75Yy8IqnsCqH/hZwGhqzj3IGVfWV6vpA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@16.0.10': - resolution: {integrity: sha512-llA+hiDTrYvyWI21Z0L1GiXwjQaanPVQQwru5peOgtooeJ8qx3tlqRV2P7uH2pKQaUfHxI/WVarvI5oYgGxaTw==} + '@next/swc-linux-arm64-musl@16.1.0': + resolution: {integrity: sha512-TojQnDRoX7wJWXEEwdfuJtakMDW64Q7NrxQPviUnfYJvAx5/5wcGE+1vZzQ9F17m+SdpFeeXuOr6v3jbyusYMQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@16.0.10': - resolution: {integrity: sha512-AK2q5H0+a9nsXbeZ3FZdMtbtu9jxW4R/NgzZ6+lrTm3d6Zb7jYrWcgjcpM1k8uuqlSy4xIyPR2YiuUr+wXsavA==} + '@next/swc-linux-x64-gnu@16.1.0': + resolution: {integrity: sha512-quhNFVySW4QwXiZkZ34SbfzNBm27vLrxZ2HwTfFFO1BBP0OY1+pI0nbyewKeq1FriqU+LZrob/cm26lwsiAi8Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@16.0.10': - resolution: {integrity: sha512-1TDG9PDKivNw5550S111gsO4RGennLVl9cipPhtkXIFVwo31YZ73nEbLjNC8qG3SgTz/QZyYyaFYMeY4BKZR/g==} + '@next/swc-linux-x64-musl@16.1.0': + resolution: {integrity: sha512-6JW0z2FZUK5iOVhUIWqE4RblAhUj1EwhZ/MwteGb//SpFTOHydnhbp3868gxalwea+mbOLWO6xgxj9wA9wNvNw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@16.0.10': - resolution: {integrity: sha512-aEZIS4Hh32xdJQbHz121pyuVZniSNoqDVx1yIr2hy+ZwJGipeqnMZBJHyMxv2tiuAXGx6/xpTcQJ6btIiBjgmg==} + '@next/swc-win32-arm64-msvc@16.1.0': + resolution: {integrity: sha512-+DK/akkAvvXn5RdYN84IOmLkSy87SCmpofJPdB8vbLmf01BzntPBSYXnMvnEEv/Vcf3HYJwt24QZ/s6sWAwOMQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.0.10': - resolution: {integrity: sha512-E+njfCoFLb01RAFEnGZn6ERoOqhK1Gl3Lfz1Kjnj0Ulfu7oJbuMyvBKNj/bw8XZnenHDASlygTjZICQW+rYW1Q==} + '@next/swc-win32-x64-msvc@16.1.0': + resolution: {integrity: sha512-Tr0j94MphimCCks+1rtYPzQFK+faJuhHWCegU9S9gDlgyOk8Y3kPmO64UcjyzZAlligeBtYZ/2bEyrKq0d2wqQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2917,8 +2917,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@16.0.10: - resolution: {integrity: sha512-BxouZUm0I45K4yjOOIzj24nTi0H2cGo0y7xUmk+Po/PYtJXFBYVDS1BguE7t28efXjKdcN0tmiLivxQy//SsZg==} + eslint-config-next@16.1.0: + resolution: {integrity: sha512-RlPb8E2uO/Ix/w3kizxz6+6ogw99WqtNzTG0ArRZ5NEkIYcsfRb8U0j7aTG7NjRvcrsak5QtUSuxGNN2UcA58g==} peerDependencies: eslint: '>=9.0.0' typescript: '>=3.3.1' @@ -3675,8 +3675,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - next@16.0.10: - resolution: {integrity: sha512-RtWh5PUgI+vxlV3HdR+IfWA1UUHu0+Ram/JBO4vWB54cVPentCD0e+lxyAYEsDTqGGMg7qpjhKh6dc6aW7W/sA==} + next@16.1.0: + resolution: {integrity: sha512-Y+KbmDbefYtHDDQKLNrmzE/YYzG2msqo2VXhzh5yrJ54tx/6TmGdkR5+kP9ma7i7LwZpZMfoY3m/AoPPPKxtVw==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -5549,34 +5549,34 @@ snapshots: '@napi-rs/wasm-tools-win32-ia32-msvc': 1.0.1 '@napi-rs/wasm-tools-win32-x64-msvc': 1.0.1 - '@next/env@16.0.10': {} + '@next/env@16.1.0': {} - '@next/eslint-plugin-next@16.0.10': + '@next/eslint-plugin-next@16.1.0': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@16.0.10': + '@next/swc-darwin-arm64@16.1.0': optional: true - '@next/swc-darwin-x64@16.0.10': + '@next/swc-darwin-x64@16.1.0': optional: true - '@next/swc-linux-arm64-gnu@16.0.10': + '@next/swc-linux-arm64-gnu@16.1.0': optional: true - '@next/swc-linux-arm64-musl@16.0.10': + '@next/swc-linux-arm64-musl@16.1.0': optional: true - '@next/swc-linux-x64-gnu@16.0.10': + '@next/swc-linux-x64-gnu@16.1.0': optional: true - '@next/swc-linux-x64-musl@16.0.10': + '@next/swc-linux-x64-musl@16.1.0': optional: true - '@next/swc-win32-arm64-msvc@16.0.10': + '@next/swc-win32-arm64-msvc@16.1.0': optional: true - '@next/swc-win32-x64-msvc@16.0.10': + '@next/swc-win32-x64-msvc@16.1.0': optional: true '@nodelib/fs.scandir@2.1.5': @@ -6769,29 +6769,29 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.0.10(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4): + eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3): dependencies: - '@next/eslint-plugin-next': 16.0.10 + '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.1(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) + typescript-eslint: 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-next@16.0.10(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3): + eslint-config-next@16.1.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4): dependencies: - '@next/eslint-plugin-next': 16.0.10 + '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) @@ -6800,9 +6800,9 @@ snapshots: eslint-plugin-react: 7.37.2(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.1(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) + typescript-eslint: 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) optionalDependencies: - typescript: 5.6.3 + typescript: 5.5.4 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack @@ -6817,19 +6817,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 enhanced-resolve: 5.18.4 eslint: 9.39.1(jiti@2.6.1) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6855,14 +6855,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -6876,7 +6876,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.1(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6887,7 +6887,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6899,7 +6899,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -7662,24 +7662,25 @@ snapshots: natural-compare@1.4.0: {} - next@16.0.10(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + next@16.1.0(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - '@next/env': 16.0.10 + '@next/env': 16.1.0 '@swc/helpers': 0.5.15 + baseline-browser-mapping: 2.8.29 caniuse-lite: 1.0.30001755 postcss: 8.4.31 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - styled-jsx: 5.1.6(react@19.2.3) + styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.3) optionalDependencies: - '@next/swc-darwin-arm64': 16.0.10 - '@next/swc-darwin-x64': 16.0.10 - '@next/swc-linux-arm64-gnu': 16.0.10 - '@next/swc-linux-arm64-musl': 16.0.10 - '@next/swc-linux-x64-gnu': 16.0.10 - '@next/swc-linux-x64-musl': 16.0.10 - '@next/swc-win32-arm64-msvc': 16.0.10 - '@next/swc-win32-x64-msvc': 16.0.10 + '@next/swc-darwin-arm64': 16.1.0 + '@next/swc-darwin-x64': 16.1.0 + '@next/swc-linux-arm64-gnu': 16.1.0 + '@next/swc-linux-arm64-musl': 16.1.0 + '@next/swc-linux-x64-gnu': 16.1.0 + '@next/swc-linux-x64-musl': 16.1.0 + '@next/swc-win32-arm64-msvc': 16.1.0 + '@next/swc-win32-x64-msvc': 16.1.0 '@playwright/test': 1.57.0 sharp: 0.34.5 transitivePeerDependencies: @@ -8268,10 +8269,12 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(react@19.2.3): + styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.3): dependencies: client-only: 0.0.1 react: 19.2.3 + optionalDependencies: + '@babel/core': 7.28.5 sucrase@3.35.0: dependencies: From 3c06c554500fd114ebf365c29b6468f24d55e0aa Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Sun, 21 Dec 2025 10:02:59 -0500 Subject: [PATCH 022/100] =?UTF-8?q?Update=20eslint=209.39.1=20=E2=86=92=20?= =?UTF-8?q?9.39.2=20(patch)=20(#19469)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ eslint (9.39.1 → 9.39.2) · [Repo](https://github.com/eslint/eslint) · [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
Release Notes

9.39.2

Bug Fixes

  • 5705833 fix: warn when eslint-env configuration comments are found (#20381) (sethamus)

Build Related

  • 506f154 build: add .scss files entry to knip (#20391) (Milos Djermanovic)

Chores

  • 7ca0af7 chore: upgrade to @eslint/js@9.39.2 (#20394) (Francesco Trotta)
  • c43ce24 chore: package.json update for @eslint/js release (Jenkins)
  • 4c9858e ci: add v9.x-dev branch (#20382) (Milos Djermanovic)

Does any of this look wrong? Please let us know.

Commits

See the full diff on Github. The new version differs by 7 commits:

--- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- playgrounds/nextjs/package.json | 2 +- playgrounds/v3/package.json | 2 +- pnpm-lock.yaml | 208 ++++++++++++++++---------------- 3 files changed, 105 insertions(+), 107 deletions(-) diff --git a/playgrounds/nextjs/package.json b/playgrounds/nextjs/package.json index 2e13dd11bdb8..8dc97a047be5 100644 --- a/playgrounds/nextjs/package.json +++ b/playgrounds/nextjs/package.json @@ -20,7 +20,7 @@ "@types/node": "catalog:", "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", - "eslint": "^9.39.1", + "eslint": "^9.39.2", "eslint-config-next": "^16.1.0", "typescript": "^5.5.4" } diff --git a/playgrounds/v3/package.json b/playgrounds/v3/package.json index d05d0f864775..5be6cf8907e0 100644 --- a/playgrounds/v3/package.json +++ b/playgrounds/v3/package.json @@ -19,7 +19,7 @@ "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", "autoprefixer": "^10.4.22", - "eslint": "^9.39.1", + "eslint": "^9.39.2", "eslint-config-next": "^16.1.0", "typescript": "^5.5.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b8acc5f1e6d7..82465e8b665d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -481,7 +481,7 @@ importers: version: 3.3.3 next: specifier: ^16.1.0 - version: 16.1.0(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 16.1.0(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: specifier: ^19.2.3 version: 19.2.3 @@ -502,11 +502,11 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.7) eslint: - specifier: ^9.39.1 - version: 9.39.1(jiti@2.6.1) + specifier: ^9.39.2 + version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) + version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -515,7 +515,7 @@ importers: dependencies: next: specifier: ^16.1.0 - version: 16.1.0(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 16.1.0(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: specifier: ^19.2.3 version: 19.2.3 @@ -539,11 +539,11 @@ importers: specifier: ^10.4.22 version: 10.4.22(postcss@8.4.47) eslint: - specifier: ^9.39.1 - version: 9.39.1(jiti@2.6.1) + specifier: ^9.39.2 + version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) + version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) typescript: specifier: ^5.5.4 version: 5.6.3 @@ -1153,8 +1153,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.1': - resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} + '@eslint/js@9.39.2': + resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.7': @@ -3003,8 +3003,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.39.1: - resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} + eslint@9.39.2: + resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -4975,9 +4975,9 @@ snapshots: '@esbuild/win32-x64@0.27.0': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@2.6.1))': dependencies: - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -5012,7 +5012,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.39.1': {} + '@eslint/js@9.39.2': {} '@eslint/object-schema@2.1.7': {} @@ -5973,15 +5973,15 @@ snapshots: '@types/semver@7.7.1': {} - '@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) '@typescript-eslint/scope-manager': 8.47.0 - '@typescript-eslint/type-utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/type-utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) '@typescript-eslint/visitor-keys': 8.47.0 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -5990,15 +5990,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.47.0 - '@typescript-eslint/type-utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/type-utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.47.0 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6007,26 +6007,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4)': + '@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4)': dependencies: '@typescript-eslint/scope-manager': 8.47.0 '@typescript-eslint/types': 8.47.0 '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 8.47.0 debug: 4.4.3 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3)': + '@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 8.47.0 '@typescript-eslint/types': 8.47.0 '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.47.0 debug: 4.4.3 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -6062,25 +6062,25 @@ snapshots: dependencies: typescript: 5.6.3 - '@typescript-eslint/type-utils@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4)': + '@typescript-eslint/type-utils@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 8.47.0 '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) debug: 4.4.3 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 8.47.0 '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) debug: 4.4.3 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: @@ -6120,24 +6120,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4)': + '@typescript-eslint/utils@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.47.0 '@typescript-eslint/types': 8.47.0 '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.5.4) - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3)': + '@typescript-eslint/utils@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.47.0 '@typescript-eslint/types': 8.47.0 '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.6.3) - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -6769,40 +6769,40 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3): + eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): dependencies: '@next/eslint-plugin-next': 16.1.0 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-react: 7.37.2(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-react-hooks: 7.0.1(eslint@9.39.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) optionalDependencies: - typescript: 5.6.3 + typescript: 5.5.4 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-next@16.1.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4): + eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@next/eslint-plugin-next': 16.1.0 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-react: 7.37.2(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-react-hooks: 7.0.1(eslint@9.39.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack @@ -6817,66 +6817,66 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 enhanced-resolve: 5.18.4 - eslint: 9.39.1(jiti@2.6.1) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint: 9.39.2(jiti@2.6.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-import-resolver-typescript@3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)): + eslint-import-resolver-typescript@3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 enhanced-resolve: 5.18.4 - eslint: 9.39.1(jiti@2.6.1) - eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint: 9.39.2(jiti@2.6.1) + eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) - eslint: 9.39.1(jiti@2.6.1) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): + eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6885,9 +6885,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6899,13 +6899,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.1(jiti@2.6.1)): + eslint-plugin-import@2.32.0(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6914,9 +6914,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6932,7 +6932,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.1(eslint@9.39.1(jiti@2.6.1)): + eslint-plugin-jsx-a11y@6.10.1(eslint@9.39.2(jiti@2.6.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -6943,7 +6943,7 @@ snapshots: damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 es-iterator-helpers: 1.1.0 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -6952,18 +6952,18 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-react-hooks@7.0.1(eslint@9.39.1(jiti@2.6.1)): + eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@2.6.1)): dependencies: '@babel/core': 7.28.5 '@babel/parser': 7.28.5 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) hermes-parser: 0.25.1 zod: 4.1.12 zod-validation-error: 4.0.2(zod@4.1.12) transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.2(eslint@9.39.1(jiti@2.6.1)): + eslint-plugin-react@7.37.2(eslint@9.39.2(jiti@2.6.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -6971,7 +6971,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.1.0 - eslint: 9.39.1(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -6994,15 +6994,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.1(jiti@2.6.1): + eslint@9.39.2(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.39.1 + '@eslint/js': 9.39.2 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -7662,7 +7662,7 @@ snapshots: natural-compare@1.4.0: {} - next@16.1.0(@babel/core@7.28.5)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + next@16.1.0(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@next/env': 16.1.0 '@swc/helpers': 0.5.15 @@ -7671,7 +7671,7 @@ snapshots: postcss: 8.4.31 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) - styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.3) + styled-jsx: 5.1.6(react@19.2.3) optionalDependencies: '@next/swc-darwin-arm64': 16.1.0 '@next/swc-darwin-x64': 16.1.0 @@ -8269,12 +8269,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.3): + styled-jsx@5.1.6(react@19.2.3): dependencies: client-only: 0.0.1 react: 19.2.3 - optionalDependencies: - '@babel/core': 7.28.5 sucrase@3.35.0: dependencies: @@ -8506,24 +8504,24 @@ snapshots: possible-typed-array-names: 1.0.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4): + typescript-eslint@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): dependencies: - '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) - '@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.5.4) - eslint: 9.39.1(jiti@2.6.1) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.5.4 transitivePeerDependencies: - supports-color - typescript-eslint@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3): + typescript-eslint@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) - '@typescript-eslint/parser': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.6.3) - eslint: 9.39.1(jiti@2.6.1) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + eslint: 9.39.2(jiti@2.6.1) typescript: 5.6.3 transitivePeerDependencies: - supports-color From d979daacc67753762bead563fe8a1b8f93d9ad73 Mon Sep 17 00:00:00 2001 From: xibeiyoumian Date: Mon, 22 Dec 2025 21:09:19 +0800 Subject: [PATCH 023/100] chore: fix some typos in comments (#19475) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary fix some typos in comments ## Test plan Signed-off-by: xibeiyoumian --- integrations/oxide/wasm.test.ts | 2 +- integrations/postcss/next.test.ts | 2 +- packages/tailwindcss/src/intellisense.test.ts | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/integrations/oxide/wasm.test.ts b/integrations/oxide/wasm.test.ts index 1cbdfce6e1fb..ac2231672386 100644 --- a/integrations/oxide/wasm.test.ts +++ b/integrations/oxide/wasm.test.ts @@ -1,6 +1,6 @@ import { css, js, json, test } from '../utils' -// This test runs the wasm build using the `node:wasi` runtine. +// This test runs the wasm build using the `node:wasi` runtime. // // There are currently a known problems that the Node WASI preview implementation does not properly // handle FS reads on macOS and it does not implement all APIs on Windows. Because of that, this diff --git a/integrations/postcss/next.test.ts b/integrations/postcss/next.test.ts index 969254a75c8c..7fc0ccdcf14e 100644 --- a/integrations/postcss/next.test.ts +++ b/integrations/postcss/next.test.ts @@ -468,7 +468,7 @@ test( // the CSS await fetchStyles(url) - // At this point, no changes should triger a compile step. If we see any + // At this point, no changes should trigger a compile step. If we see any // changes, there is an infinite loop because we (the user) didn't write any // files to disk. // diff --git a/packages/tailwindcss/src/intellisense.test.ts b/packages/tailwindcss/src/intellisense.test.ts index e37f05b9cb98..2e475f7387f3 100644 --- a/packages/tailwindcss/src/intellisense.test.ts +++ b/packages/tailwindcss/src/intellisense.test.ts @@ -635,13 +635,13 @@ test('Theme keys with underscores are suggested with underscores', async () => { /* Disable the spacing scale */ --spacing: initial; - /* This will get suggeted with a dot because its surrounded by numbers */ + /* This will get suggested with a dot because its surrounded by numbers */ --spacing-1_5: 1.5rem; - /* This will get suggeted with a dot */ + /* This will get suggested with a dot */ --spacing-2\.5: 1.5rem; - /* This will get suggeted with an underscore */ + /* This will get suggested with an underscore */ --spacing-logo_margin: 0.875rem; } From 1628713453e622dfaba4880a0b63495b857a3cc5 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 22:59:07 -0500 Subject: [PATCH 024/100] =?UTF-8?q?Update=20autoprefixer=2010.4.22=20?= =?UTF-8?q?=E2=86=92=2010.4.23=20(patch)=20(#19473)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ autoprefixer (10.4.22 → 10.4.23) · [Repo](https://github.com/postcss/autoprefixer) · [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
Release Notes

10.4.23

Does any of this look wrong? Please let us know.

Commits

See the full diff on Github. The new version differs by 3 commits:

--- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- playgrounds/v3/package.json | 2 +- pnpm-lock.yaml | 102 ++++++++++++++++++++++++------------ 2 files changed, 69 insertions(+), 35 deletions(-) diff --git a/playgrounds/v3/package.json b/playgrounds/v3/package.json index 5be6cf8907e0..c03663b698b8 100644 --- a/playgrounds/v3/package.json +++ b/playgrounds/v3/package.json @@ -18,7 +18,7 @@ "@types/node": "^20.14.8", "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", - "autoprefixer": "^10.4.22", + "autoprefixer": "^10.4.23", "eslint": "^9.39.2", "eslint-config-next": "^16.1.0", "typescript": "^5.5.4" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82465e8b665d..203739c0e648 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -506,7 +506,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -536,14 +536,14 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.7) autoprefixer: - specifier: ^10.4.22 - version: 10.4.22(postcss@8.4.47) + specifier: ^10.4.23 + version: 10.4.23(postcss@8.4.47) eslint: specifier: ^9.39.2 version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) typescript: specifier: ^5.5.4 version: 5.6.3 @@ -2562,8 +2562,8 @@ packages: ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - autoprefixer@10.4.22: - resolution: {integrity: sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==} + autoprefixer@10.4.23: + resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -2588,6 +2588,10 @@ packages: resolution: {integrity: sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==} hasBin: true + baseline-browser-mapping@2.9.11: + resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==} + hasBin: true + before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} @@ -2610,6 +2614,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2655,6 +2664,9 @@ packages: caniuse-lite@1.0.30001755: resolution: {integrity: sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==} + caniuse-lite@1.0.30001761: + resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==} + chai@6.2.1: resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} engines: {node: '>=18'} @@ -2838,6 +2850,9 @@ packages: electron-to-chromium@1.5.255: resolution: {integrity: sha512-Z9oIp4HrFF/cZkDPMpz2XSuVpc1THDpT4dlmATFlJUIBVCy9Vap5/rIXsASP1CscBacBqhabwh8vLctqBwEerQ==} + electron-to-chromium@1.5.267: + resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} + emnapi@1.7.1: resolution: {integrity: sha512-wlLK2xFq+T+rCBlY6+lPlFVDEyE93b7hSn9dMrfWBIcPf4ArwUvymvvMnN9M5WWuiryYQe9M+UJrkqw4trdyRA==} peerDependencies: @@ -3729,10 +3744,6 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -4468,6 +4479,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uqr@0.1.2: resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} @@ -6307,12 +6324,11 @@ snapshots: ast-types-flow@0.0.8: {} - autoprefixer@10.4.22(postcss@8.4.47): + autoprefixer@10.4.23(postcss@8.4.47): dependencies: - browserslist: 4.28.0 - caniuse-lite: 1.0.30001755 + browserslist: 4.28.1 + caniuse-lite: 1.0.30001761 fraction.js: 5.3.4 - normalize-range: 0.1.2 picocolors: 1.1.1 postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -6329,6 +6345,8 @@ snapshots: baseline-browser-mapping@2.8.29: {} + baseline-browser-mapping@2.9.11: {} + before-after-hook@4.0.0: {} binary-extensions@2.3.0: {} @@ -6349,11 +6367,19 @@ snapshots: browserslist@4.28.0: dependencies: baseline-browser-mapping: 2.8.29 - caniuse-lite: 1.0.30001755 + caniuse-lite: 1.0.30001761 electron-to-chromium: 1.5.255 node-releases: 2.0.27 update-browserslist-db: 1.1.4(browserslist@4.28.0) + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.9.11 + caniuse-lite: 1.0.30001761 + electron-to-chromium: 1.5.267 + node-releases: 2.0.27 + update-browserslist-db: 1.2.3(browserslist@4.28.1) + buffer-from@1.1.2: optional: true @@ -6405,6 +6431,8 @@ snapshots: caniuse-lite@1.0.30001755: {} + caniuse-lite@1.0.30001761: {} + chai@6.2.1: {} chalk@4.1.2: @@ -6564,6 +6592,8 @@ snapshots: electron-to-chromium@1.5.255: {} + electron-to-chromium@1.5.267: {} + emnapi@1.7.1(node-addon-api@8.3.0): optionalDependencies: node-addon-api: 8.3.0 @@ -6769,27 +6799,27 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): + eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): + eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) @@ -6800,9 +6830,9 @@ snapshots: eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) optionalDependencies: - typescript: 5.6.3 + typescript: 5.5.4 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack @@ -6817,19 +6847,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 enhanced-resolve: 5.18.4 eslint: 9.39.2(jiti@2.6.1) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6855,14 +6885,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -6876,7 +6906,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6887,7 +6917,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6899,7 +6929,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -7705,8 +7735,6 @@ snapshots: normalize-path@3.0.0: {} - normalize-range@0.1.2: {} - npm-run-path@5.3.0: dependencies: path-key: 4.0.0 @@ -8563,6 +8591,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.2.3(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 + uqr@0.1.2: {} uri-js@4.4.1: From 8d5e955058cbec107df150d4d8aa6d8645bb7bbf Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Wed, 24 Dec 2025 10:31:02 -0500 Subject: [PATCH 025/100] =?UTF-8?q?Update=20dedent=201.7.0=20=E2=86=92=201?= =?UTF-8?q?.7.1=20(patch)=20(#19484)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this upgrade. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ dedent (1.7.0 → 1.7.1) · [Repo](https://github.com/dmnd/dedent) · [Changelog](https://github.com/dmnd/dedent/blob/main/CHANGELOG.md) --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- integrations/package.json | 2 +- packages/@tailwindcss-postcss/package.json | 2 +- packages/@tailwindcss-upgrade/package.json | 2 +- packages/tailwindcss/package.json | 2 +- pnpm-lock.yaml | 62 +++++++++++----------- 5 files changed, 35 insertions(+), 35 deletions(-) diff --git a/integrations/package.json b/integrations/package.json index c6e792fc447f..8c0d83543a30 100644 --- a/integrations/package.json +++ b/integrations/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "devDependencies": { - "dedent": "1.7.0", + "dedent": "1.7.1", "fast-glob": "^3.3.3", "source-map-js": "^1.2.1" } diff --git a/packages/@tailwindcss-postcss/package.json b/packages/@tailwindcss-postcss/package.json index f91f577206dd..22e775d728ae 100644 --- a/packages/@tailwindcss-postcss/package.json +++ b/packages/@tailwindcss-postcss/package.json @@ -39,7 +39,7 @@ "devDependencies": { "@types/node": "catalog:", "@types/postcss-import": "14.0.3", - "dedent": "1.7.0", + "dedent": "1.7.1", "internal-example-plugin": "workspace:*", "postcss-import": "^16.1.1" } diff --git a/packages/@tailwindcss-upgrade/package.json b/packages/@tailwindcss-upgrade/package.json index b11409cf6c4b..e41e40b22fcc 100644 --- a/packages/@tailwindcss-upgrade/package.json +++ b/packages/@tailwindcss-upgrade/package.json @@ -30,7 +30,7 @@ "@tailwindcss/node": "workspace:*", "@tailwindcss/oxide": "workspace:*", "braces": "^3.0.3", - "dedent": "1.7.0", + "dedent": "1.7.1", "enhanced-resolve": "^5.18.4", "globby": "^15.0.0", "jiti": "^2.0.0-beta.3", diff --git a/packages/tailwindcss/package.json b/packages/tailwindcss/package.json index 2dc93d5a8de5..a453c9a1461f 100644 --- a/packages/tailwindcss/package.json +++ b/packages/tailwindcss/package.json @@ -130,7 +130,7 @@ "@jridgewell/remapping": "^2.3.4", "@tailwindcss/oxide": "workspace:^", "@types/node": "catalog:", - "dedent": "1.7.0", + "dedent": "1.7.1", "lightningcss": "catalog:", "magic-string": "^0.30.21", "source-map-js": "^1.2.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 203739c0e648..cc7b5eeea8f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -183,8 +183,8 @@ importers: integrations: devDependencies: dedent: - specifier: 1.7.0 - version: 1.7.0 + specifier: 1.7.1 + version: 1.7.1 fast-glob: specifier: ^3.3.3 version: 3.3.3 @@ -277,8 +277,8 @@ importers: specifier: 14.0.3 version: 14.0.3 dedent: - specifier: 1.7.0 - version: 1.7.0 + specifier: 1.7.1 + version: 1.7.1 internal-example-plugin: specifier: workspace:* version: link:../internal-example-plugin @@ -371,8 +371,8 @@ importers: specifier: ^3.0.3 version: 3.0.3 dedent: - specifier: 1.7.0 - version: 1.7.0 + specifier: 1.7.1 + version: 1.7.1 enhanced-resolve: specifier: ^5.18.4 version: 5.18.4 @@ -459,8 +459,8 @@ importers: specifier: 'catalog:' version: 20.19.1 dedent: - specifier: 1.7.0 - version: 1.7.0 + specifier: 1.7.1 + version: 1.7.1 lightningcss: specifier: 'catalog:' version: 1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm) @@ -506,7 +506,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -543,7 +543,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) typescript: specifier: ^5.5.4 version: 5.6.3 @@ -2792,8 +2792,8 @@ packages: supports-color: optional: true - dedent@1.7.0: - resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} + dedent@1.7.1: + resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -6547,7 +6547,7 @@ snapshots: dependencies: ms: 2.1.3 - dedent@1.7.0: {} + dedent@1.7.1: {} deep-is@0.1.4: {} @@ -6799,27 +6799,27 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): + eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) optionalDependencies: - typescript: 5.6.3 + typescript: 5.5.4 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): + eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) @@ -6830,9 +6830,9 @@ snapshots: eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack @@ -6847,19 +6847,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 enhanced-resolve: 5.18.4 eslint: 9.39.2(jiti@2.6.1) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6885,14 +6885,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -6906,7 +6906,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6917,7 +6917,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6929,7 +6929,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -7959,7 +7959,7 @@ snapshots: prettier-plugin-embed@0.5.0: dependencies: '@types/estree': 1.0.6 - dedent: 1.7.0 + dedent: 1.7.1 micro-memoize: 4.1.3 package-up: 5.0.0 tiny-jsonc: 1.0.2 From c80459271978c3853eb1d9733fb746ca2cde87cb Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Wed, 24 Dec 2025 17:20:02 -0500 Subject: [PATCH 026/100] =?UTF-8?q?Update=20bun=201.3.3=20=E2=86=92=201.3.?= =?UTF-8?q?5=20(patch)=20(#19489)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ bun (1.3.3 → 1.3.5) · [Repo](https://github.com/oven-sh/bun) Sorry, we couldn't find anything useful about this release. --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- packages/@tailwindcss-standalone/package.json | 2 +- playgrounds/vite/package.json | 2 +- pnpm-lock.yaml | 102 +++++++++--------- 3 files changed, 53 insertions(+), 53 deletions(-) diff --git a/packages/@tailwindcss-standalone/package.json b/packages/@tailwindcss-standalone/package.json index e699d229c460..ef6f593cbf8a 100644 --- a/packages/@tailwindcss-standalone/package.json +++ b/packages/@tailwindcss-standalone/package.json @@ -43,7 +43,7 @@ "@parcel/watcher-linux-x64-musl": "^2.5.1", "@parcel/watcher-win32-x64": "^2.5.1", "@types/bun": "^1.3.3", - "bun": "^1.3.3", + "bun": "^1.3.5", "lightningcss-darwin-arm64": "catalog:", "lightningcss-darwin-x64": "catalog:", "lightningcss-linux-arm64-gnu": "catalog:", diff --git a/playgrounds/vite/package.json b/playgrounds/vite/package.json index ed591587d461..e158445cb765 100644 --- a/playgrounds/vite/package.json +++ b/playgrounds/vite/package.json @@ -18,7 +18,7 @@ "devDependencies": { "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", - "bun": "^1.3.3", + "bun": "^1.3.5", "vite": "catalog:" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cc7b5eeea8f5..36b72ff012b8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -335,8 +335,8 @@ importers: specifier: ^1.3.3 version: 1.3.3 bun: - specifier: ^1.3.3 - version: 1.3.3 + specifier: ^1.3.5 + version: 1.3.5 lightningcss-darwin-arm64: specifier: 'catalog:' version: 1.30.2 @@ -573,8 +573,8 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.7) bun: - specifier: ^1.3.3 - version: 1.3.3 + specifier: ^1.3.5 + version: 1.3.5 vite: specifier: 'catalog:' version: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) @@ -1954,58 +1954,58 @@ packages: '@octokit/types@15.0.0': resolution: {integrity: sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==} - '@oven/bun-darwin-aarch64@1.3.3': - resolution: {integrity: sha512-eJopQrUk0WR7jViYDC29+Rp50xGvs4GtWOXBeqCoFMzutkkO3CZvHehA4JqnjfWMTSS8toqvRhCSOpOz62Wf9w==} + '@oven/bun-darwin-aarch64@1.3.5': + resolution: {integrity: sha512-8GvNtMo0NINM7Emk9cNAviCG3teEgr3BUX9be0+GD029zIagx2Sf54jMui1Eu1IpFm7nWHODuLEefGOQNaJ0gQ==} cpu: [arm64] os: [darwin] - '@oven/bun-darwin-x64-baseline@1.3.3': - resolution: {integrity: sha512-1ij4wQ9ECLFf1XFry+IFUN+28if40ozDqq6+QtuyOhIwraKzXOlAUbILhRMGvM3ED3yBex2mTwlKpA4Vja/V2g==} + '@oven/bun-darwin-x64-baseline@1.3.5': + resolution: {integrity: sha512-p5q3rJk48qhLuLBOFehVc+kqCE03YrswTc6NCxbwsxiwfySXwcAvpF2KWKF/ZZObvvR8hCCvqe1F81b2p5r2dg==} cpu: [x64] os: [darwin] - '@oven/bun-darwin-x64@1.3.3': - resolution: {integrity: sha512-xGDePueVFrNgkS+iN0QdEFeRrx2MQ5hQ9ipRFu7N73rgoSSJsFlOKKt2uGZzunczedViIfjYl0ii0K4E9aZ0Ow==} + '@oven/bun-darwin-x64@1.3.5': + resolution: {integrity: sha512-r33eHQOHAwkuiBJIwmkXIyqONQOQMnd1GMTpDzaxx9vf9+svby80LZO9Hcm1ns6KT/TBRFyODC/0loA7FAaffg==} cpu: [x64] os: [darwin] - '@oven/bun-linux-aarch64-musl@1.3.3': - resolution: {integrity: sha512-XWQ3tV/gtZj0wn2AdSUq/tEOKWT4OY+Uww70EbODgrrq00jxuTfq5nnYP6rkLD0M/T5BHJdQRSfQYdIni9vldw==} + '@oven/bun-linux-aarch64-musl@1.3.5': + resolution: {integrity: sha512-HKBeUlJdNduRkzJKZ5DXM+pPqntfC50/Hu2X65jVX0Y7hu/6IC8RaUTqpr8FtCZqqmc9wDK0OTL+Mbi9UQIKYQ==} cpu: [arm64] os: [linux] - '@oven/bun-linux-aarch64@1.3.3': - resolution: {integrity: sha512-DabZ3Mt1XcJneWdEEug8l7bCPVvDBRBpjUIpNnRnMFWFnzr8KBEpMcaWTwYOghjXyJdhB4MPKb19MwqyQ+FHAw==} + '@oven/bun-linux-aarch64@1.3.5': + resolution: {integrity: sha512-zkcHPI23QxJ1TdqafhgkXt1NOEN8o5C460sVeNnrhfJ43LwZgtfcvcQE39x/pBedu67fatY8CU0iY00nOh46ZQ==} cpu: [arm64] os: [linux] - '@oven/bun-linux-x64-baseline@1.3.3': - resolution: {integrity: sha512-IU8pxhIf845psOv55LqJyL+tSUc6HHMfs6FGhuJcAnyi92j+B1HjOhnFQh9MW4vjoo7do5F8AerXlvk59RGH2w==} + '@oven/bun-linux-x64-baseline@1.3.5': + resolution: {integrity: sha512-FeCQyBU62DMuB0nn01vPnf3McXrKOsrK9p7sHaBFYycw0mmoU8kCq/WkBkGMnLuvQljJSyen8QBTx+fXdNupWg==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64-musl-baseline@1.3.3': - resolution: {integrity: sha512-JoRTPdAXRkNYouUlJqEncMWUKn/3DiWP03A7weBbtbsKr787gcdNna2YeyQKCb1lIXE4v1k18RM3gaOpQobGIQ==} + '@oven/bun-linux-x64-musl-baseline@1.3.5': + resolution: {integrity: sha512-TJiYC7KCr0XxFTsxgwQOeE7dncrEL/RSyL0EzSL3xRkrxJMWBCvCSjQn7LV1i6T7hFst0+3KoN3VWvD5BinqHA==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64-musl@1.3.3': - resolution: {integrity: sha512-xNSDRPn1yyObKteS8fyQogwsS4eCECswHHgaKM+/d4wy/omZQrXn8ZyGm/ZF9B73UfQytUfbhE7nEnrFq03f0w==} + '@oven/bun-linux-x64-musl@1.3.5': + resolution: {integrity: sha512-XkCCHkByYn8BIDvoxnny898znju4xnW2kvFE8FT5+0Y62cWdcBGMZ9RdsEUTeRz16k8hHtJpaSfLcEmNTFIwRQ==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64@1.3.3': - resolution: {integrity: sha512-7eIARtKZKZDtah1aCpQUj/1/zT/zHRR063J6oAxZP9AuA547j5B9OM2D/vi/F4En7Gjk9FPjgPGTSYeqpQDzJw==} + '@oven/bun-linux-x64@1.3.5': + resolution: {integrity: sha512-n7zhKTSDZS0yOYg5Rq8easZu5Y/o47sv0c7yGr2ciFdcie9uYV55fZ7QMqhWMGK33ezCSikh5EDkUMCIvfWpjA==} cpu: [x64] os: [linux] - '@oven/bun-windows-x64-baseline@1.3.3': - resolution: {integrity: sha512-u5eZHKq6TPJSE282KyBOicGQ2trkFml0RoUfqkPOJVo7TXGrsGYYzdsugZRnVQY/WEmnxGtBy4T3PAaPqgQViA==} + '@oven/bun-windows-x64-baseline@1.3.5': + resolution: {integrity: sha512-rtVQB9/1XK8FWJgFtsOthbPifRMYypgJwxu+pK3NHx8WvFKmq7HcPDqNr8xLzGULjQEO7eAo2aOZfONOwYz+5g==} cpu: [x64] os: [win32] - '@oven/bun-windows-x64@1.3.3': - resolution: {integrity: sha512-kWqa1LKvDdAIzyfHxo3zGz3HFWbFHDlrNK77hKjUN42ycikvZJ+SHSX76+1OW4G8wmLETX4Jj+4BM1y01DQRIQ==} + '@oven/bun-windows-x64@1.3.5': + resolution: {integrity: sha512-T3xkODItb/0ftQPFsZDc7EAX2D6A4TEazQ2YZyofZToO8Q7y8YT8ooWdhd0BQiTCd66uEvgE1DCZetynwg2IoA==} cpu: [x64] os: [win32] @@ -2625,8 +2625,8 @@ packages: bun-types@1.3.3: resolution: {integrity: sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ==} - bun@1.3.3: - resolution: {integrity: sha512-2hJ4ocTZ634/Ptph4lysvO+LbbRZq8fzRvMwX0/CqaLBxrF2UB5D1LdMB8qGcdtCer4/VR9Bx5ORub0yn+yzmw==} + bun@1.3.5: + resolution: {integrity: sha512-c1YHIGUfgvYPJmLug5QiLzNWlX2Dg7X/67JWu1Va+AmMXNXzC/KQn2lgQ7rD+n1u1UqDpJMowVGGxTNpbPydNw==} cpu: [arm64, x64] os: [darwin, linux, win32] hasBin: true @@ -5678,37 +5678,37 @@ snapshots: dependencies: '@octokit/openapi-types': 26.0.0 - '@oven/bun-darwin-aarch64@1.3.3': + '@oven/bun-darwin-aarch64@1.3.5': optional: true - '@oven/bun-darwin-x64-baseline@1.3.3': + '@oven/bun-darwin-x64-baseline@1.3.5': optional: true - '@oven/bun-darwin-x64@1.3.3': + '@oven/bun-darwin-x64@1.3.5': optional: true - '@oven/bun-linux-aarch64-musl@1.3.3': + '@oven/bun-linux-aarch64-musl@1.3.5': optional: true - '@oven/bun-linux-aarch64@1.3.3': + '@oven/bun-linux-aarch64@1.3.5': optional: true - '@oven/bun-linux-x64-baseline@1.3.3': + '@oven/bun-linux-x64-baseline@1.3.5': optional: true - '@oven/bun-linux-x64-musl-baseline@1.3.3': + '@oven/bun-linux-x64-musl-baseline@1.3.5': optional: true - '@oven/bun-linux-x64-musl@1.3.3': + '@oven/bun-linux-x64-musl@1.3.5': optional: true - '@oven/bun-linux-x64@1.3.3': + '@oven/bun-linux-x64@1.3.5': optional: true - '@oven/bun-windows-x64-baseline@1.3.3': + '@oven/bun-windows-x64-baseline@1.3.5': optional: true - '@oven/bun-windows-x64@1.3.3': + '@oven/bun-windows-x64@1.3.5': optional: true '@parcel/watcher-android-arm64@2.5.0': @@ -6387,19 +6387,19 @@ snapshots: dependencies: '@types/node': 20.19.1 - bun@1.3.3: + bun@1.3.5: optionalDependencies: - '@oven/bun-darwin-aarch64': 1.3.3 - '@oven/bun-darwin-x64': 1.3.3 - '@oven/bun-darwin-x64-baseline': 1.3.3 - '@oven/bun-linux-aarch64': 1.3.3 - '@oven/bun-linux-aarch64-musl': 1.3.3 - '@oven/bun-linux-x64': 1.3.3 - '@oven/bun-linux-x64-baseline': 1.3.3 - '@oven/bun-linux-x64-musl': 1.3.3 - '@oven/bun-linux-x64-musl-baseline': 1.3.3 - '@oven/bun-windows-x64': 1.3.3 - '@oven/bun-windows-x64-baseline': 1.3.3 + '@oven/bun-darwin-aarch64': 1.3.5 + '@oven/bun-darwin-x64': 1.3.5 + '@oven/bun-darwin-x64-baseline': 1.3.5 + '@oven/bun-linux-aarch64': 1.3.5 + '@oven/bun-linux-aarch64-musl': 1.3.5 + '@oven/bun-linux-x64': 1.3.5 + '@oven/bun-linux-x64-baseline': 1.3.5 + '@oven/bun-linux-x64-musl': 1.3.5 + '@oven/bun-linux-x64-musl-baseline': 1.3.5 + '@oven/bun-windows-x64': 1.3.5 + '@oven/bun-windows-x64-baseline': 1.3.5 bundle-require@5.1.0(esbuild@0.27.0): dependencies: From e8a5a7f09244f299873751d224dc574922638540 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Wed, 24 Dec 2025 17:20:21 -0500 Subject: [PATCH 027/100] =?UTF-8?q?Update=20@tailwindcss/forms=200.5.10=20?= =?UTF-8?q?=E2=86=92=200.5.11=20(minor)=20(#19490)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ @​tailwindcss/forms (0.5.10 → 0.5.11) · [Repo](https://github.com/tailwindlabs/tailwindcss-forms) · [Changelog](https://github.com/tailwindlabs/tailwindcss-forms/blob/main/CHANGELOG.md)
Release Notes

0.5.11

Fixed

  • Limit attribute rules to input and select elements (#159)

Does any of this look wrong? Please let us know.

Commits

See the full diff on Github. The new version differs by 3 commits:

--- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- packages/@tailwindcss-standalone/package.json | 2 +- pnpm-lock.yaml | 48 +++++++++---------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/@tailwindcss-standalone/package.json b/packages/@tailwindcss-standalone/package.json index ef6f593cbf8a..6c37b7e10146 100644 --- a/packages/@tailwindcss-standalone/package.json +++ b/packages/@tailwindcss-standalone/package.json @@ -27,7 +27,7 @@ "dependencies": { "@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/cli": "workspace:*", - "@tailwindcss/forms": "^0.5.10", + "@tailwindcss/forms": "^0.5.11", "@tailwindcss/typography": "^0.5.19", "detect-libc": "1.0.3", "enhanced-resolve": "^5.18.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 36b72ff012b8..a50ddae8f472 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -295,8 +295,8 @@ importers: specifier: workspace:* version: link:../@tailwindcss-cli '@tailwindcss/forms': - specifier: ^0.5.10 - version: 0.5.10(tailwindcss@packages+tailwindcss) + specifier: ^0.5.11 + version: 0.5.11(tailwindcss@packages+tailwindcss) '@tailwindcss/typography': specifier: ^0.5.19 version: 0.5.19(tailwindcss@packages+tailwindcss) @@ -506,7 +506,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -543,7 +543,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) typescript: specifier: ^5.5.4 version: 5.6.3 @@ -2309,8 +2309,8 @@ packages: peerDependencies: tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' - '@tailwindcss/forms@0.5.10': - resolution: {integrity: sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==} + '@tailwindcss/forms@0.5.11': + resolution: {integrity: sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==} peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' @@ -5912,7 +5912,7 @@ snapshots: dependencies: tailwindcss: link:packages/tailwindcss - '@tailwindcss/forms@0.5.10(tailwindcss@packages+tailwindcss)': + '@tailwindcss/forms@0.5.11(tailwindcss@packages+tailwindcss)': dependencies: mini-svg-data-uri: 1.4.4 tailwindcss: link:packages/tailwindcss @@ -6799,27 +6799,27 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): + eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): + eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) @@ -6830,9 +6830,9 @@ snapshots: eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) optionalDependencies: - typescript: 5.6.3 + typescript: 5.5.4 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack @@ -6847,19 +6847,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 enhanced-resolve: 5.18.4 eslint: 9.39.2(jiti@2.6.1) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6885,14 +6885,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -6906,7 +6906,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6917,7 +6917,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6929,7 +6929,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack From fba35d01bb10f0ac27a0baa7bb2462782fdeb35d Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Thu, 25 Dec 2025 18:22:13 -0500 Subject: [PATCH 028/100] =?UTF-8?q?Update=20@types/bun=201.3.3=20=E2=86=92?= =?UTF-8?q?=201.3.5=20(patch)=20(#19491)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ @​types/bun (1.3.3 → 1.3.5) · [Repo](https://github.com/DefinitelyTyped/DefinitelyTyped) Sorry, we couldn't find anything useful about this release. --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- packages/@tailwindcss-standalone/package.json | 2 +- pnpm-lock.yaml | 56 +++++++++---------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/@tailwindcss-standalone/package.json b/packages/@tailwindcss-standalone/package.json index 6c37b7e10146..cfe124563789 100644 --- a/packages/@tailwindcss-standalone/package.json +++ b/packages/@tailwindcss-standalone/package.json @@ -42,7 +42,7 @@ "@parcel/watcher-linux-x64-glibc": "^2.5.1", "@parcel/watcher-linux-x64-musl": "^2.5.1", "@parcel/watcher-win32-x64": "^2.5.1", - "@types/bun": "^1.3.3", + "@types/bun": "^1.3.5", "bun": "^1.3.5", "lightningcss-darwin-arm64": "catalog:", "lightningcss-darwin-x64": "catalog:", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a50ddae8f472..e8260cb571a5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -332,8 +332,8 @@ importers: specifier: ^2.5.1 version: 2.5.1 '@types/bun': - specifier: ^1.3.3 - version: 1.3.3 + specifier: ^1.3.5 + version: 1.3.5 bun: specifier: ^1.3.5 version: 1.3.5 @@ -506,7 +506,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -543,7 +543,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) typescript: specifier: ^5.5.4 version: 5.6.3 @@ -2337,8 +2337,8 @@ packages: '@types/braces@3.0.5': resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==} - '@types/bun@1.3.3': - resolution: {integrity: sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g==} + '@types/bun@1.3.5': + resolution: {integrity: sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -2622,8 +2622,8 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - bun-types@1.3.3: - resolution: {integrity: sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ==} + bun-types@1.3.5: + resolution: {integrity: sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw==} bun@1.3.5: resolution: {integrity: sha512-c1YHIGUfgvYPJmLug5QiLzNWlX2Dg7X/67JWu1Va+AmMXNXzC/KQn2lgQ7rD+n1u1UqDpJMowVGGxTNpbPydNw==} @@ -5949,9 +5949,9 @@ snapshots: '@types/braces@3.0.5': {} - '@types/bun@1.3.3': + '@types/bun@1.3.5': dependencies: - bun-types: 1.3.3 + bun-types: 1.3.5 '@types/chai@5.2.3': dependencies: @@ -6383,7 +6383,7 @@ snapshots: buffer-from@1.1.2: optional: true - bun-types@1.3.3: + bun-types@1.3.5: dependencies: '@types/node': 20.19.1 @@ -6799,27 +6799,27 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): + eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) optionalDependencies: - typescript: 5.6.3 + typescript: 5.5.4 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): + eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) @@ -6830,9 +6830,9 @@ snapshots: eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack @@ -6847,19 +6847,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 enhanced-resolve: 5.18.4 eslint: 9.39.2(jiti@2.6.1) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6885,14 +6885,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -6906,7 +6906,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6917,7 +6917,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6929,7 +6929,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack From fbc358cec1034ca4db672f9b51b44769dbb3e46f Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Fri, 26 Dec 2025 12:36:51 -0500 Subject: [PATCH 029/100] =?UTF-8?q?Update=20prettier-plugin-embed=200.5.0?= =?UTF-8?q?=20=E2=86=92=200.5.1=20(minor)=20(#19492)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ prettier-plugin-embed (0.5.0 → 0.5.1) · [Repo](https://github.com/Sec-ant/prettier-plugin-embed) · [Changelog](https://github.com/Sec-ant/prettier-plugin-embed/blob/main/CHANGELOG.md)
Release Notes

0.5.1

Patch Changes

  • 0c1b3c4: Fix indentation issues in sql, css and markdown embedded languages.
  • 0c1b3c4: Fix embedded xml and prisma formatting behavior.

Does any of this look wrong? Please let us know.

Commits

See the full diff on Github. The new version differs by 3 commits:

--- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 57 ++++++++++++++++++++++++++++++++------------------ 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 201da7266980..445a723d06c6 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "postcss": "8.5.6", "postcss-import": "^16.1.1", "prettier": "catalog:", - "prettier-plugin-embed": "^0.5.0", + "prettier-plugin-embed": "^0.5.1", "prettier-plugin-organize-imports": "^4.3.0", "tsup": "^8.5.1", "turbo": "^2.6.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e8260cb571a5..3fd9e29adf0f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -68,8 +68,8 @@ importers: specifier: 'catalog:' version: 3.6.2 prettier-plugin-embed: - specifier: ^0.5.0 - version: 0.5.0 + specifier: ^0.5.1 + version: 0.5.1 prettier-plugin-organize-imports: specifier: ^4.3.0 version: 4.3.0(prettier@3.6.2)(typescript@5.5.4) @@ -2346,9 +2346,6 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -3065,6 +3062,10 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-equals@5.4.0: + resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==} + engines: {node: '>=6.0.0'} + fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} @@ -3079,6 +3080,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-stringify@4.0.0: + resolution: {integrity: sha512-lE2DIivBaLysf6hK5WH/VfMgqRbvBVHcpGVVTmA5Zi8oWIjq9YxIt6lYGdUgP1HNSXxTIat7HEIDnrSvXSeKQw==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -3624,8 +3628,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micro-memoize@4.1.3: - resolution: {integrity: sha512-DzRMi8smUZXT7rCGikRwldEh6eO6qzKiPPopcr1+2EY3AYKpy5fu159PKWwIS9A6IWnrvPKDMcuFtyrroZa8Bw==} + micro-memoize@5.1.1: + resolution: {integrity: sha512-QDwluos8YeMijiKxZGwaV4f4tzj0soS6+xcsJhJ3+4wdEIHMyKbIKVUziebOgWX3e6yiijdoaHo+9tyhbnaWXA==} micromatch@4.0.7: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} @@ -3973,8 +3977,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-embed@0.5.0: - resolution: {integrity: sha512-A5nzX8U9x+FJdpOKrDrH9eq86xHZNiGguWpphS6chTME0OK1bDgH1X+WLtZq7qV3kUEMkL/dHkr6C1NLdUA7RQ==} + prettier-plugin-embed@0.5.1: + resolution: {integrity: sha512-2Ege8gIlLNTvHElUeU5XcFsD7/dbDXkQA6H9TczHSJAGxB58nNjjifk/dlRMS5E29eqQx/z+ToA4ZVMWzjME/A==} prettier-plugin-organize-imports@4.3.0: resolution: {integrity: sha512-FxFz0qFhyBsGdIsb697f/EkvHzi5SZOhWAjxcx2dLt+Q532bAlhswcXGYB1yzjZ69kW8UoadFBw7TyNwlq96Iw==} @@ -4257,6 +4261,10 @@ packages: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} + tagged-tag@1.0.0: + resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} + engines: {node: '>=20'} + tailwindcss@3.4.14: resolution: {integrity: sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==} engines: {node: '>=14.0.0'} @@ -4406,9 +4414,9 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@4.36.0: - resolution: {integrity: sha512-3T/PUdKTCnkUmhQU6FFJEHsLwadsRegktX3TNHk+2JJB9HlA8gp1/VXblXVDI93kSnXF2rdPx0GMbHtJIV2LPg==} - engines: {node: '>=16'} + type-fest@5.3.1: + resolution: {integrity: sha512-VCn+LMHbd4t6sF3wfU/+HKT63C9OoyrSIf4b+vtWHpt2U7/4InZG467YDNMFMR70DdHjAdpPWmw2lzRdg0Xqqg==} + engines: {node: '>=20'} typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} @@ -5960,8 +5968,6 @@ snapshots: '@types/deep-eql@4.0.2': {} - '@types/estree@1.0.6': {} - '@types/estree@1.0.8': {} '@types/json-schema@7.0.15': {} @@ -7105,6 +7111,8 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-equals@5.4.0: {} + fast-glob@3.3.1: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7125,6 +7133,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-stringify@4.0.0: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -7632,7 +7642,10 @@ snapshots: merge2@1.4.1: {} - micro-memoize@4.1.3: {} + micro-memoize@5.1.1: + dependencies: + fast-equals: 5.4.0 + fast-stringify: 4.0.0 micromatch@4.0.7: dependencies: @@ -7956,14 +7969,14 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-embed@0.5.0: + prettier-plugin-embed@0.5.1: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.8 dedent: 1.7.1 - micro-memoize: 4.1.3 + micro-memoize: 5.1.1 package-up: 5.0.0 tiny-jsonc: 1.0.2 - type-fest: 4.36.0 + type-fest: 5.3.1 transitivePeerDependencies: - babel-plugin-macros @@ -8320,6 +8333,8 @@ snapshots: system-architecture@0.1.0: {} + tagged-tag@1.0.0: {} + tailwindcss@3.4.14: dependencies: '@alloc/quick-lru': 5.2.0 @@ -8497,7 +8512,9 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@4.36.0: {} + type-fest@5.3.1: + dependencies: + tagged-tag: 1.0.0 typed-array-buffer@1.0.3: dependencies: From 9720692edac4b8045b3646b26e47ad7b97a37cbf Mon Sep 17 00:00:00 2001 From: Akash Agarwal Date: Sat, 27 Dec 2025 22:26:29 +0530 Subject: [PATCH 030/100] Fix typo in comment (#19493) --- .../src/codemods/template/is-safe-migration.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@tailwindcss-upgrade/src/codemods/template/is-safe-migration.test.ts b/packages/@tailwindcss-upgrade/src/codemods/template/is-safe-migration.test.ts index 7efb7b48db32..ff12fc114c13 100644 --- a/packages/@tailwindcss-upgrade/src/codemods/template/is-safe-migration.test.ts +++ b/packages/@tailwindcss-upgrade/src/codemods/template/is-safe-migration.test.ts @@ -91,7 +91,7 @@ describe('is-safe-migration', async () => { 'outline', ], [ - // As the last argument, but there is techinically another `"` on the same line + // As the last argument, but there is technically another `"` on the same line `function foo({ size = "1.25rem", digit, outline }): { return "foo" }`, 'outline', ], From c07d4a749db3b1c859afd18f0cd5008fbf57ee62 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Mon, 5 Jan 2026 07:46:49 -0500 Subject: [PATCH 031/100] =?UTF-8?q?Update=20turbo=202.6.3=20=E2=86=92=202.?= =?UTF-8?q?7.2=20(minor)=20(#19509)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ turbo (2.6.3 → 2.7.2) · [Repo](https://github.com/turborepo/turbo) Sorry, we couldn't find anything useful about this release. --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 96 +++++++++++++++++++++++++------------------------- 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/package.json b/package.json index 445a723d06c6..1b5a50a82d97 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "prettier-plugin-embed": "^0.5.1", "prettier-plugin-organize-imports": "^4.3.0", "tsup": "^8.5.1", - "turbo": "^2.6.3", + "turbo": "^2.7.2", "typescript": "^5.5.4", "vitest": "^4.0.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3fd9e29adf0f..8eac5b236149 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,8 +77,8 @@ importers: specifier: ^8.5.1 version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.19.1)(typescript@5.5.4)(yaml@2.6.0) turbo: - specifier: ^2.6.3 - version: 2.6.3 + specifier: ^2.7.2 + version: 2.7.2 typescript: specifier: ^5.5.4 version: 5.5.4 @@ -506,7 +506,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -543,7 +543,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) typescript: specifier: ^5.5.4 version: 5.6.3 @@ -4373,38 +4373,38 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - turbo-darwin-64@2.6.3: - resolution: {integrity: sha512-BlJJDc1CQ7SK5Y5qnl7AzpkvKSnpkfPmnA+HeU/sgny3oHZckPV2776ebO2M33CYDSor7+8HQwaodY++IINhYg==} + turbo-darwin-64@2.7.2: + resolution: {integrity: sha512-dxY3X6ezcT5vm3coK6VGixbrhplbQMwgNsCsvZamS/+/6JiebqW9DKt4NwpgYXhDY2HdH00I7FWs3wkVuan4rA==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.6.3: - resolution: {integrity: sha512-MwVt7rBKiOK7zdYerenfCRTypefw4kZCue35IJga9CH1+S50+KTiCkT6LBqo0hHeoH2iKuI0ldTF2a0aB72z3w==} + turbo-darwin-arm64@2.7.2: + resolution: {integrity: sha512-1bXmuwPLqNFt3mzrtYcVx1sdJ8UYb124Bf48nIgcpMCGZy3kDhgxNv1503kmuK/37OGOZbsWSQFU4I08feIuSg==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.6.3: - resolution: {integrity: sha512-cqpcw+dXxbnPtNnzeeSyWprjmuFVpHJqKcs7Jym5oXlu/ZcovEASUIUZVN3OGEM6Y/OTyyw0z09tOHNt5yBAVg==} + turbo-linux-64@2.7.2: + resolution: {integrity: sha512-kP+TiiMaiPugbRlv57VGLfcjFNsFbo8H64wMBCPV2270Or2TpDCBULMzZrvEsvWFjT3pBFvToYbdp8/Kw0jAQg==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.6.3: - resolution: {integrity: sha512-MterpZQmjXyr4uM7zOgFSFL3oRdNKeflY7nsjxJb2TklsYqiu3Z9pQ4zRVFFH8n0mLGna7MbQMZuKoWqqHb45w==} + turbo-linux-arm64@2.7.2: + resolution: {integrity: sha512-VDJwQ0+8zjAfbyY6boNaWfP6RIez4ypKHxwkuB6SrWbOSk+vxTyW5/hEjytTwK8w/TsbKVcMDyvpora8tEsRFw==} cpu: [arm64] os: [linux] - turbo-windows-64@2.6.3: - resolution: {integrity: sha512-biDU70v9dLwnBdLf+daoDlNJVvqOOP8YEjqNipBHzgclbQlXbsi6Gqqelp5er81Qo3BiRgmTNx79oaZQTPb07Q==} + turbo-windows-64@2.7.2: + resolution: {integrity: sha512-rPjqQXVnI6A6oxgzNEE8DNb6Vdj2Wwyhfv3oDc+YM3U9P7CAcBIlKv/868mKl4vsBtz4ouWpTQNXG8vljgJO+w==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.6.3: - resolution: {integrity: sha512-dDHVKpSeukah3VsI/xMEKeTnV9V9cjlpFSUs4bmsUiLu3Yv2ENlgVEZv65wxbeE0bh0jjpmElDT+P1KaCxArQQ==} + turbo-windows-arm64@2.7.2: + resolution: {integrity: sha512-tcnHvBhO515OheIFWdxA+qUvZzNqqcHbLVFc1+n+TJ1rrp8prYicQtbtmsiKgMvr/54jb9jOabU62URAobnB7g==} cpu: [arm64] os: [win32] - turbo@2.6.3: - resolution: {integrity: sha512-bf6YKUv11l5Xfcmg76PyWoy/e2vbkkxFNBGJSnfdSXQC33ZiUfutYh6IXidc5MhsnrFkWfdNNLyaRk+kHMLlwA==} + turbo@2.7.2: + resolution: {integrity: sha512-5JIA5aYBAJSAhrhbyag1ZuMSgUZnHtI+Sq3H8D3an4fL8PeF+L1yYvbEJg47akP1PFfATMf5ehkqFnxfkmuwZQ==} hasBin: true typanion@3.14.0: @@ -6805,27 +6805,27 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): + eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): + eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) @@ -6836,9 +6836,9 @@ snapshots: eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) optionalDependencies: - typescript: 5.6.3 + typescript: 5.5.4 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack @@ -6853,19 +6853,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 enhanced-resolve: 5.18.4 eslint: 9.39.2(jiti@2.6.1) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6891,14 +6891,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -6912,7 +6912,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6923,7 +6923,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6935,7 +6935,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -8479,32 +8479,32 @@ snapshots: fsevents: 2.3.3 optional: true - turbo-darwin-64@2.6.3: + turbo-darwin-64@2.7.2: optional: true - turbo-darwin-arm64@2.6.3: + turbo-darwin-arm64@2.7.2: optional: true - turbo-linux-64@2.6.3: + turbo-linux-64@2.7.2: optional: true - turbo-linux-arm64@2.6.3: + turbo-linux-arm64@2.7.2: optional: true - turbo-windows-64@2.6.3: + turbo-windows-64@2.7.2: optional: true - turbo-windows-arm64@2.6.3: + turbo-windows-arm64@2.7.2: optional: true - turbo@2.6.3: + turbo@2.7.2: optionalDependencies: - turbo-darwin-64: 2.6.3 - turbo-darwin-arm64: 2.6.3 - turbo-linux-64: 2.6.3 - turbo-linux-arm64: 2.6.3 - turbo-windows-64: 2.6.3 - turbo-windows-arm64: 2.6.3 + turbo-darwin-64: 2.7.2 + turbo-darwin-arm64: 2.7.2 + turbo-linux-64: 2.7.2 + turbo-linux-arm64: 2.7.2 + turbo-windows-64: 2.7.2 + turbo-windows-arm64: 2.7.2 typanion@3.14.0: {} From d5beb9534e13889bfbe4d1681af84eb1bc403b18 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 12:44:27 +0100 Subject: [PATCH 032/100] =?UTF-8?q?Update=20@napi-rs/cli=203.4.1=20?= =?UTF-8?q?=E2=86=92=203.5.1=20(minor)=20(#19528)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ @​napi-rs/cli (3.4.1 → 3.5.1) · [Repo](https://github.com/napi-rs/napi-rs) Sorry, we couldn't find anything useful about this release. --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- crates/node/package.json | 2 +- pnpm-lock.yaml | 468 ++++++++++++++++++++------------------- 2 files changed, 236 insertions(+), 234 deletions(-) diff --git a/crates/node/package.json b/crates/node/package.json index 9cd9ca0761c6..1bc5e0711e25 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -33,7 +33,7 @@ }, "license": "MIT", "devDependencies": { - "@napi-rs/cli": "^3.4.1", + "@napi-rs/cli": "^3.5.1", "@napi-rs/wasm-runtime": "^1.1.0", "emnapi": "1.7.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8eac5b236149..f5625835f163 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -126,8 +126,8 @@ importers: version: link:npm/win32-x64-msvc devDependencies: '@napi-rs/cli': - specifier: ^3.4.1 - version: 3.4.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0) + specifier: ^3.5.1 + version: 3.5.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0) '@napi-rs/wasm-runtime': specifier: ^1.1.0 version: 1.1.0 @@ -506,7 +506,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -543,7 +543,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) typescript: specifier: ^5.5.4 version: 5.6.3 @@ -1322,134 +1322,134 @@ packages: cpu: [x64] os: [win32] - '@inquirer/ansi@1.0.0': - resolution: {integrity: sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==} - engines: {node: '>=18'} + '@inquirer/ansi@2.0.2': + resolution: {integrity: sha512-SYLX05PwJVnW+WVegZt1T4Ip1qba1ik+pNJPDiqvk6zS5Y/i8PhRzLpGEtVd7sW0G8cMtkD8t4AZYhQwm8vnww==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/checkbox@4.2.4': - resolution: {integrity: sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==} - engines: {node: '>=18'} + '@inquirer/checkbox@5.0.3': + resolution: {integrity: sha512-xtQP2eXMFlOcAhZ4ReKP2KZvDIBb1AnCfZ81wWXG3DXLVH0f0g4obE0XDPH+ukAEMRcZT0kdX2AS1jrWGXbpxw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/confirm@5.1.18': - resolution: {integrity: sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==} - engines: {node: '>=18'} + '@inquirer/confirm@6.0.3': + resolution: {integrity: sha512-lyEvibDFL+NA5R4xl8FUmNhmu81B+LDL9L/MpKkZlQDJZXzG8InxiqYxiAlQYa9cqLLhYqKLQwZqXmSTqCLjyw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/core@10.2.2': - resolution: {integrity: sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==} - engines: {node: '>=18'} + '@inquirer/core@11.1.0': + resolution: {integrity: sha512-+jD/34T1pK8M5QmZD/ENhOfXdl9Zr+BrQAUc5h2anWgi7gggRq15ZbiBeLoObj0TLbdgW7TAIQRU2boMc9uOKQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/editor@4.2.20': - resolution: {integrity: sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==} - engines: {node: '>=18'} + '@inquirer/editor@5.0.3': + resolution: {integrity: sha512-wYyQo96TsAqIciP/r5D3cFeV8h4WqKQ/YOvTg5yOfP2sqEbVVpbxPpfV3LM5D0EP4zUI3EZVHyIUIllnoIa8OQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/expand@4.0.20': - resolution: {integrity: sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==} - engines: {node: '>=18'} + '@inquirer/expand@5.0.3': + resolution: {integrity: sha512-2oINvuL27ujjxd95f6K2K909uZOU2x1WiAl7Wb1X/xOtL8CgQ1kSxzykIr7u4xTkXkXOAkCuF45T588/YKee7w==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/external-editor@1.0.2': - resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} - engines: {node: '>=18'} + '@inquirer/external-editor@2.0.2': + resolution: {integrity: sha512-X/fMXK7vXomRWEex1j8mnj7s1mpnTeP4CO/h2gysJhHLT2WjBnLv4ZQEGpm/kcYI8QfLZ2fgW+9kTKD+jeopLg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/figures@1.0.13': - resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} - engines: {node: '>=18'} + '@inquirer/figures@2.0.2': + resolution: {integrity: sha512-qXm6EVvQx/FmnSrCWCIGtMHwqeLgxABP8XgcaAoywsL0NFga9gD5kfG0gXiv80GjK9Hsoz4pgGwF/+CjygyV9A==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/input@4.2.4': - resolution: {integrity: sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==} - engines: {node: '>=18'} + '@inquirer/input@5.0.3': + resolution: {integrity: sha512-4R0TdWl53dtp79Vs6Df2OHAtA2FVNqya1hND1f5wjHWxZJxwDMSNB1X5ADZJSsQKYAJ5JHCTO+GpJZ42mK0Otw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/number@3.0.20': - resolution: {integrity: sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==} - engines: {node: '>=18'} + '@inquirer/number@4.0.3': + resolution: {integrity: sha512-TjQLe93GGo5snRlu83JxE38ZPqj5ZVggL+QqqAF2oBA5JOJoxx25GG3EGH/XN/Os5WOmKfO8iLVdCXQxXRZIMQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/password@4.0.20': - resolution: {integrity: sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==} - engines: {node: '>=18'} + '@inquirer/password@5.0.3': + resolution: {integrity: sha512-rCozGbUMAHedTeYWEN8sgZH4lRCdgG/WinFkit6ZPsp8JaNg2T0g3QslPBS5XbpORyKP/I+xyBO81kFEvhBmjA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/prompts@7.8.6': - resolution: {integrity: sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==} - engines: {node: '>=18'} + '@inquirer/prompts@8.1.0': + resolution: {integrity: sha512-LsZMdKcmRNF5LyTRuZE5nWeOjganzmN3zwbtNfcs6GPh3I2TsTtF1UYZlbxVfhxd+EuUqLGs/Lm3Xt4v6Az1wA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/rawlist@4.1.8': - resolution: {integrity: sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==} - engines: {node: '>=18'} + '@inquirer/rawlist@5.1.0': + resolution: {integrity: sha512-yUCuVh0jW026Gr2tZlG3kHignxcrLKDR3KBp+eUgNz+BAdSeZk0e18yt2gyBr+giYhj/WSIHCmPDOgp1mT2niQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/search@3.1.3': - resolution: {integrity: sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==} - engines: {node: '>=18'} + '@inquirer/search@4.0.3': + resolution: {integrity: sha512-lzqVw0YwuKYetk5VwJ81Ba+dyVlhseHPx9YnRKQgwXdFS0kEavCz2gngnNhnMIxg8+j1N/rUl1t5s1npwa7bqg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/select@4.3.4': - resolution: {integrity: sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==} - engines: {node: '>=18'} + '@inquirer/select@5.0.3': + resolution: {integrity: sha512-M+ynbwS0ecQFDYMFrQrybA0qL8DV0snpc4kKevCCNaTpfghsRowRY7SlQBeIYNzHqXtiiz4RG9vTOeb/udew7w==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/type@3.0.8': - resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} - engines: {node: '>=18'} + '@inquirer/type@4.0.2': + resolution: {integrity: sha512-cae7mzluplsjSdgFA6ACLygb5jC8alO0UUnFPyu0E7tNRPrL+q/f8VcSXp+cjZQ7l5CMpDpi2G1+IQvkOiL1Lw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1493,12 +1493,12 @@ packages: '@jridgewell/trace-mapping@0.3.29': resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - '@napi-rs/cli@3.4.1': - resolution: {integrity: sha512-ayhm+NfrP5Hmh7vy5pfyYm/ktYtLh2PrgdLuqHTAubO7RoO2JkUE4F991AtgYxNewwXI8+guZLxU8itV7QnDrQ==} + '@napi-rs/cli@3.5.1': + resolution: {integrity: sha512-XBfLQRDcB3qhu6bazdMJsecWW55kR85l5/k0af9BIBELXQSsCFU0fzug7PX8eQp6vVdm7W/U3z6uP5WmITB2Gw==} engines: {node: '>= 16'} hasBin: true peerDependencies: - '@emnapi/runtime': ^1.5.0 + '@emnapi/runtime': ^1.7.1 peerDependenciesMeta: '@emnapi/runtime': optional: true @@ -1900,26 +1900,23 @@ packages: resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} engines: {node: '>= 20'} - '@octokit/core@7.0.4': - resolution: {integrity: sha512-jOT8V1Ba5BdC79sKrRWDdMT5l1R+XNHTPR6CPWzUP2EcfAcvIHZWF0eAbmRcpOOP5gVIwnqNg0C4nvh6Abc3OA==} + '@octokit/core@7.0.6': + resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==} engines: {node: '>= 20'} - '@octokit/endpoint@11.0.0': - resolution: {integrity: sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ==} + '@octokit/endpoint@11.0.2': + resolution: {integrity: sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==} engines: {node: '>= 20'} - '@octokit/graphql@9.0.1': - resolution: {integrity: sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg==} + '@octokit/graphql@9.0.3': + resolution: {integrity: sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==} engines: {node: '>= 20'} - '@octokit/openapi-types@25.1.0': - resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} + '@octokit/openapi-types@27.0.0': + resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==} - '@octokit/openapi-types@26.0.0': - resolution: {integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==} - - '@octokit/plugin-paginate-rest@13.1.1': - resolution: {integrity: sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw==} + '@octokit/plugin-paginate-rest@14.0.0': + resolution: {integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' @@ -1930,29 +1927,26 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-rest-endpoint-methods@16.1.0': - resolution: {integrity: sha512-nCsyiKoGRnhH5LkH8hJEZb9swpqOcsW+VXv1QoyUNQXJeVODG4+xM6UICEqyqe9XFr6LkL8BIiFCPev8zMDXPw==} + '@octokit/plugin-rest-endpoint-methods@17.0.0': + resolution: {integrity: sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==} engines: {node: '>= 20'} peerDependencies: '@octokit/core': '>=6' - '@octokit/request-error@7.0.0': - resolution: {integrity: sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg==} + '@octokit/request-error@7.1.0': + resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} engines: {node: '>= 20'} - '@octokit/request@10.0.3': - resolution: {integrity: sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA==} + '@octokit/request@10.0.7': + resolution: {integrity: sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==} engines: {node: '>= 20'} - '@octokit/rest@22.0.0': - resolution: {integrity: sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==} + '@octokit/rest@22.0.1': + resolution: {integrity: sha512-Jzbhzl3CEexhnivb1iQ0KJ7s5vvjMWcmRtq5aUsKmKDrRW6z3r84ngmiFKFvpZjpiU/9/S6ITPFRpn5s/3uQJw==} engines: {node: '>= 20'} - '@octokit/types@14.1.0': - resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} - - '@octokit/types@15.0.0': - resolution: {integrity: sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==} + '@octokit/types@16.0.0': + resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} '@oven/bun-darwin-aarch64@1.3.5': resolution: {integrity: sha512-8GvNtMo0NINM7Emk9cNAviCG3teEgr3BUX9be0+GD029zIagx2Sf54jMui1Eu1IpFm7nWHODuLEefGOQNaJ0gQ==} @@ -2672,8 +2666,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chardet@2.1.0: - resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} @@ -2858,6 +2852,9 @@ packages: node-addon-api: optional: true + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2903,8 +2900,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es-toolkit@1.39.10: - resolution: {integrity: sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==} + es-toolkit@1.43.0: + resolution: {integrity: sha512-SKCT8AsWvYzBBuUqMk4NPwFlSdqLpJwmy6AP322ERn8W2YLIB6JBXnwMI2Qsh2gfphT3q7EKAxKb23cvFHFwKA==} esbuild@0.23.1: resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} @@ -3164,6 +3161,10 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -3674,9 +3675,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -3788,6 +3789,9 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -4188,6 +4192,10 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + string.prototype.includes@2.0.1: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} @@ -4609,10 +4617,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -4621,6 +4625,10 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -4633,10 +4641,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} - engines: {node: '>=18'} - zod-validation-error@4.0.2: resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} engines: {node: '>=18.0.0'} @@ -5156,128 +5160,122 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@inquirer/ansi@1.0.0': {} + '@inquirer/ansi@2.0.2': {} - '@inquirer/checkbox@4.2.4(@types/node@20.19.1)': + '@inquirer/checkbox@5.0.3(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@20.19.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/ansi': 2.0.2 + '@inquirer/core': 11.1.0(@types/node@20.19.1) + '@inquirer/figures': 2.0.2 + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/confirm@5.1.18(@types/node@20.19.1)': + '@inquirer/confirm@6.0.3(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) + '@inquirer/core': 11.1.0(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/core@10.2.2(@types/node@20.19.1)': + '@inquirer/core@11.1.0(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@20.19.1) + '@inquirer/ansi': 2.0.2 + '@inquirer/figures': 2.0.2 + '@inquirer/type': 4.0.2(@types/node@20.19.1) cli-width: 4.1.0 - mute-stream: 2.0.0 + mute-stream: 3.0.0 signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 + wrap-ansi: 9.0.2 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/editor@4.2.20(@types/node@20.19.1)': + '@inquirer/editor@5.0.3(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/external-editor': 1.0.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) + '@inquirer/core': 11.1.0(@types/node@20.19.1) + '@inquirer/external-editor': 2.0.2(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/expand@4.0.20(@types/node@20.19.1)': + '@inquirer/expand@5.0.3(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 11.1.0(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/external-editor@1.0.2(@types/node@20.19.1)': + '@inquirer/external-editor@2.0.2(@types/node@20.19.1)': dependencies: - chardet: 2.1.0 + chardet: 2.1.1 iconv-lite: 0.7.0 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/figures@1.0.13': {} + '@inquirer/figures@2.0.2': {} - '@inquirer/input@4.2.4(@types/node@20.19.1)': + '@inquirer/input@5.0.3(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) + '@inquirer/core': 11.1.0(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/number@3.0.20(@types/node@20.19.1)': + '@inquirer/number@4.0.3(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) + '@inquirer/core': 11.1.0(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/password@4.0.20(@types/node@20.19.1)': + '@inquirer/password@5.0.3(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) + '@inquirer/ansi': 2.0.2 + '@inquirer/core': 11.1.0(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/prompts@7.8.6(@types/node@20.19.1)': - dependencies: - '@inquirer/checkbox': 4.2.4(@types/node@20.19.1) - '@inquirer/confirm': 5.1.18(@types/node@20.19.1) - '@inquirer/editor': 4.2.20(@types/node@20.19.1) - '@inquirer/expand': 4.0.20(@types/node@20.19.1) - '@inquirer/input': 4.2.4(@types/node@20.19.1) - '@inquirer/number': 3.0.20(@types/node@20.19.1) - '@inquirer/password': 4.0.20(@types/node@20.19.1) - '@inquirer/rawlist': 4.1.8(@types/node@20.19.1) - '@inquirer/search': 3.1.3(@types/node@20.19.1) - '@inquirer/select': 4.3.4(@types/node@20.19.1) + '@inquirer/prompts@8.1.0(@types/node@20.19.1)': + dependencies: + '@inquirer/checkbox': 5.0.3(@types/node@20.19.1) + '@inquirer/confirm': 6.0.3(@types/node@20.19.1) + '@inquirer/editor': 5.0.3(@types/node@20.19.1) + '@inquirer/expand': 5.0.3(@types/node@20.19.1) + '@inquirer/input': 5.0.3(@types/node@20.19.1) + '@inquirer/number': 4.0.3(@types/node@20.19.1) + '@inquirer/password': 5.0.3(@types/node@20.19.1) + '@inquirer/rawlist': 5.1.0(@types/node@20.19.1) + '@inquirer/search': 4.0.3(@types/node@20.19.1) + '@inquirer/select': 5.0.3(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/rawlist@4.1.8(@types/node@20.19.1)': + '@inquirer/rawlist@5.1.0(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/type': 3.0.8(@types/node@20.19.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 11.1.0(@types/node@20.19.1) + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/search@3.1.3(@types/node@20.19.1)': + '@inquirer/search@4.0.3(@types/node@20.19.1)': dependencies: - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@20.19.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 11.1.0(@types/node@20.19.1) + '@inquirer/figures': 2.0.2 + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/select@4.3.4(@types/node@20.19.1)': + '@inquirer/select@5.0.3(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/core': 10.2.2(@types/node@20.19.1) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@20.19.1) - yoctocolors-cjs: 2.1.2 + '@inquirer/ansi': 2.0.2 + '@inquirer/core': 11.1.0(@types/node@20.19.1) + '@inquirer/figures': 2.0.2 + '@inquirer/type': 4.0.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/type@3.0.8(@types/node@20.19.1)': + '@inquirer/type@4.0.2(@types/node@20.19.1)': optionalDependencies: '@types/node': 20.19.1 @@ -5330,18 +5328,18 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@napi-rs/cli@3.4.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0)': + '@napi-rs/cli@3.5.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0)': dependencies: - '@inquirer/prompts': 7.8.6(@types/node@20.19.1) + '@inquirer/prompts': 8.1.0(@types/node@20.19.1) '@napi-rs/cross-toolchain': 1.0.3 '@napi-rs/wasm-tools': 1.0.1 - '@octokit/rest': 22.0.0 + '@octokit/rest': 22.0.1 clipanion: 4.0.0-rc.4(typanion@3.14.0) colorette: 2.0.20 - debug: 4.4.3 emnapi: 1.7.1(node-addon-api@8.3.0) - es-toolkit: 1.39.10 + es-toolkit: 1.43.0 js-yaml: 4.1.0 + obug: 2.1.1 semver: 7.7.3 typanion: 3.14.0 optionalDependencies: @@ -5620,71 +5618,65 @@ snapshots: '@octokit/auth-token@6.0.0': {} - '@octokit/core@7.0.4': + '@octokit/core@7.0.6': dependencies: '@octokit/auth-token': 6.0.0 - '@octokit/graphql': 9.0.1 - '@octokit/request': 10.0.3 - '@octokit/request-error': 7.0.0 - '@octokit/types': 15.0.0 + '@octokit/graphql': 9.0.3 + '@octokit/request': 10.0.7 + '@octokit/request-error': 7.1.0 + '@octokit/types': 16.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.2 - '@octokit/endpoint@11.0.0': + '@octokit/endpoint@11.0.2': dependencies: - '@octokit/types': 14.1.0 + '@octokit/types': 16.0.0 universal-user-agent: 7.0.2 - '@octokit/graphql@9.0.1': + '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.3 - '@octokit/types': 14.1.0 + '@octokit/request': 10.0.7 + '@octokit/types': 16.0.0 universal-user-agent: 7.0.2 - '@octokit/openapi-types@25.1.0': {} + '@octokit/openapi-types@27.0.0': {} - '@octokit/openapi-types@26.0.0': {} - - '@octokit/plugin-paginate-rest@13.1.1(@octokit/core@7.0.4)': + '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.4 - '@octokit/types': 14.1.0 + '@octokit/core': 7.0.6 + '@octokit/types': 16.0.0 - '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.4)': + '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.4 + '@octokit/core': 7.0.6 - '@octokit/plugin-rest-endpoint-methods@16.1.0(@octokit/core@7.0.4)': + '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)': dependencies: - '@octokit/core': 7.0.4 - '@octokit/types': 15.0.0 + '@octokit/core': 7.0.6 + '@octokit/types': 16.0.0 - '@octokit/request-error@7.0.0': + '@octokit/request-error@7.1.0': dependencies: - '@octokit/types': 14.1.0 + '@octokit/types': 16.0.0 - '@octokit/request@10.0.3': + '@octokit/request@10.0.7': dependencies: - '@octokit/endpoint': 11.0.0 - '@octokit/request-error': 7.0.0 - '@octokit/types': 14.1.0 + '@octokit/endpoint': 11.0.2 + '@octokit/request-error': 7.1.0 + '@octokit/types': 16.0.0 fast-content-type-parse: 3.0.0 universal-user-agent: 7.0.2 - '@octokit/rest@22.0.0': - dependencies: - '@octokit/core': 7.0.4 - '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.4) - '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.4) - '@octokit/plugin-rest-endpoint-methods': 16.1.0(@octokit/core@7.0.4) - - '@octokit/types@14.1.0': + '@octokit/rest@22.0.1': dependencies: - '@octokit/openapi-types': 25.1.0 + '@octokit/core': 7.0.6 + '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6) + '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.6) + '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6) - '@octokit/types@15.0.0': + '@octokit/types@16.0.0': dependencies: - '@octokit/openapi-types': 26.0.0 + '@octokit/openapi-types': 27.0.0 '@oven/bun-darwin-aarch64@1.3.5': optional: true @@ -6446,7 +6438,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chardet@2.1.0: {} + chardet@2.1.1: {} chokidar@3.6.0: dependencies: @@ -6604,6 +6596,8 @@ snapshots: optionalDependencies: node-addon-api: 8.3.0 + emoji-regex@10.6.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -6714,7 +6708,7 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es-toolkit@1.39.10: {} + es-toolkit@1.43.0: {} esbuild@0.23.1: optionalDependencies: @@ -6805,27 +6799,27 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): + eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) optionalDependencies: - typescript: 5.6.3 + typescript: 5.5.4 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): + eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) @@ -6836,9 +6830,9 @@ snapshots: eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack @@ -6853,19 +6847,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 enhanced-resolve: 5.18.4 eslint: 9.39.2(jiti@2.6.1) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6891,14 +6885,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -6912,7 +6906,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6923,7 +6917,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6935,7 +6929,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -7207,6 +7201,8 @@ snapshots: gensync@1.0.0-beta.2: {} + get-east-asian-width@1.4.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7691,7 +7687,7 @@ snapshots: ms@2.1.3: {} - mute-stream@2.0.0: {} + mute-stream@3.0.0: {} mz@2.7.0: dependencies: @@ -7795,6 +7791,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + obug@2.1.1: {} + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -8247,6 +8245,12 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.0 + string.prototype.includes@2.0.1: dependencies: call-bind: 1.0.8 @@ -8729,12 +8733,6 @@ snapshots: word-wrap@1.2.5: {} - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -8747,14 +8745,18 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + yallist@3.1.1: {} yaml@2.6.0: {} yocto-queue@0.1.0: {} - yoctocolors-cjs@2.1.2: {} - zod-validation-error@4.0.2(zod@4.1.12): dependencies: zod: 4.1.12 From 25f7ccff8062d90db79264f3dca14f0bd91ecd13 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 12:46:14 +0100 Subject: [PATCH 033/100] Fix class extraction for Rails' strict locals (#19525) Fixes: #19481 This PR improves the Ruby extractor to better handle strict locals. We recently introduced skipping comments in the Ruby extractor (PR #19243 for #19239) by ignoring comments that start with `#` until the end of the line. Strict locals are implemented like this: ```ruby <%# locals: (css: "text-amber-600") %> ``` Notice the `#` after the `<%`, we considered this a comment and ignored it. This PR changes that behavior slightly where we skip comments that are preceded by `%`. This means that `<%# anything here _will_ be scanned %>`. This should solve the strict locals case, and normal comments will still be skipped. We can be more strict in the future if needed, but I think that this should be a good solution for both scenarios. ### Test plan 1. Added a test to ensure we extract candidates in strict locals 2. Added a regression test for issue #19239 where we introduced skipping comments in the Ruby extractor 3. Other existing tests are still passing We can also verify the extracted candidates: (it's subtle, but you can see that the class is being extracted now) image --- CHANGELOG.md | 1 + .../extractor/pre_processors/pre_processor.rs | 30 +++++++++++- .../src/extractor/pre_processors/ruby.rs | 47 ++++++++++++++++++- 3 files changed, 75 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf75d28e32df..5adb9f7f53d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Allow whitespace around `@source inline()` argument ([#19461](https://github.com/tailwindlabs/tailwindcss/pull/19461)) - CLI: Emit comment when source maps are saved to files ([#19447](https://github.com/tailwindlabs/tailwindcss/pull/19447)) - Detect utilities when containing capital letters followed by numbers ([#19465](https://github.com/tailwindlabs/tailwindcss/pull/19465)) +- Fix class extraction for Rails' strict locals ([#19525](https://github.com/tailwindlabs/tailwindcss/pull/19525)) ### Added diff --git a/crates/oxide/src/extractor/pre_processors/pre_processor.rs b/crates/oxide/src/extractor/pre_processors/pre_processor.rs index 8d42e744a73a..8e02b8f695fe 100644 --- a/crates/oxide/src/extractor/pre_processors/pre_processor.rs +++ b/crates/oxide/src/extractor/pre_processors/pre_processor.rs @@ -25,7 +25,33 @@ pub trait PreProcessor: Sized + Default { } #[cfg(test)] - fn test_extract_contains(input: &str, items: Vec<&str>) { + fn test_extract_exact(input: &str, expected: Vec<&str>) { + use crate::extractor::{Extracted, Extractor}; + + let input = input.as_bytes(); + + let processor = Self::default(); + let transformed = processor.process(input); + + let extracted = Extractor::new(&transformed).extract(); + + // Extract all candidates and css variables. + let candidates = extracted + .iter() + .filter_map(|x| match x { + Extracted::Candidate(bytes) => std::str::from_utf8(bytes).ok(), + Extracted::CssVariable(bytes) => std::str::from_utf8(bytes).ok(), + }) + .collect::<_>>(); + + if candidates != expected { + dbg!(&candidates, &expected); + panic!("Extracted candidates do not match expected candidates"); + } + } + + #[cfg(test)] + fn test_extract_contains(input: &str, expected: Vec<&str>) { use crate::extractor::{Extracted, Extractor}; let input = input.as_bytes(); @@ -46,7 +72,7 @@ pub trait PreProcessor: Sized + Default { // Ensure all items are present in the candidates. let mut missing = vec![]; - for item in &items { + for item in &expected { if !candidates.contains(item) { missing.push(item); } diff --git a/crates/oxide/src/extractor/pre_processors/ruby.rs b/crates/oxide/src/extractor/pre_processors/ruby.rs index c94bd945f56e..89ac1ee7b1c6 100644 --- a/crates/oxide/src/extractor/pre_processors/ruby.rs +++ b/crates/oxide/src/extractor/pre_processors/ruby.rs @@ -119,7 +119,11 @@ impl PreProcessor for Ruby { } // Replace comments in Ruby files - b'#' => { + // + // Except for strict locals, these are defined in a `<%# locals: … %>`. Checking if + // the comment is preceded by a `%` should be enough without having to perform more + // parsing logic. Worst case we _do_ scan a few comments. + b'#' if !matches!(cursor.prev, b'%') => { result[cursor.pos] = b' '; cursor.advance(); @@ -382,4 +386,45 @@ mod tests { "#; Ruby::test_extract_contains(input, vec!["z-1", "z-2", "z-3"]); } + + // https://github.com/tailwindlabs/tailwindcss/issues/19239 + #[test] + fn test_skip_comments() { + let input = r#" + # From activerecord-8.1.1/lib/active_record/errors.rb:147 + # Rails uses RDoc cross-reference syntax in inline documentation: + # {ActiveRecord::Base#save!}[rdoc-ref:Persistence#save!] + "#; + + // Nothing should be extracted from comments, so expect an empty array. + Ruby::test_extract_exact(input, vec![]); + } + + // https://github.com/tailwindlabs/tailwindcss/issues/19481 + #[test] + fn test_strict_locals() { + // Strict locals are defined in a `<%# locals: … %>`, but the `#` looks like a comment + // which we should not ignore in this case. + let input = r#" + <%# locals: (css: "text-amber-600") %> + <% more_css = "text-sky-500" %> + +

+ In a partial +

+ +

+ In a partial using explicit local variables +

+ +

+ In a partial using explicit local variables +

+ "#; + + Ruby::test_extract_contains( + input, + vec!["text-amber-600", "text-sky-500", "text-green-500"], + ); + } } From dc432aaa186e23cdfbee0282c3af85d3a49a42d4 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 11:49:41 +0000 Subject: [PATCH 034/100] =?UTF-8?q?Update=20@napi-rs/wasm-runtime=201.1.0?= =?UTF-8?q?=20=E2=86=92=201.1.1=20(patch)=20(#19527)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > 👉 **This PR is queued up to get rebased by Depfu** Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ @​napi-rs/wasm-runtime (1.1.0 → 1.1.1) · [Repo](https://github.com/napi-rs/napi-rs) Sorry, we couldn't find anything useful about this release. --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- crates/node/npm/wasm32-wasi/package.json | 2 +- crates/node/package.json | 2 +- pnpm-lock.yaml | 58 ++++++++++++------------ 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/crates/node/npm/wasm32-wasi/package.json b/crates/node/npm/wasm32-wasi/package.json index 601ad809e65f..ea06f944dd16 100644 --- a/crates/node/npm/wasm32-wasi/package.json +++ b/crates/node/npm/wasm32-wasi/package.json @@ -27,7 +27,7 @@ }, "browser": "tailwindcss-oxide.wasi-browser.js", "dependencies": { - "@napi-rs/wasm-runtime": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1", diff --git a/crates/node/package.json b/crates/node/package.json index 1bc5e0711e25..64282742a349 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -34,7 +34,7 @@ "license": "MIT", "devDependencies": { "@napi-rs/cli": "^3.5.1", - "@napi-rs/wasm-runtime": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", "emnapi": "1.7.1" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f5625835f163..d6dfe5f4529c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -129,8 +129,8 @@ importers: specifier: ^3.5.1 version: 3.5.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0) '@napi-rs/wasm-runtime': - specifier: ^1.1.0 - version: 1.1.0 + specifier: ^1.1.1 + version: 1.1.1 emnapi: specifier: 1.7.1 version: 1.7.1(node-addon-api@8.3.0) @@ -167,8 +167,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 '@napi-rs/wasm-runtime': - specifier: ^1.1.0 - version: 1.1.0 + specifier: ^1.1.1 + version: 1.1.1 '@tybys/wasm-util': specifier: ^0.10.1 version: 0.10.1 @@ -506,7 +506,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -543,7 +543,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) typescript: specifier: ^5.5.4 version: 5.6.3 @@ -1742,8 +1742,8 @@ packages: resolution: {integrity: sha512-7cmzIu+Vbupriudo7UudoMRH2OA3cTw67vva8MxeoAe5S7vPFI7z0vp0pMXiA25S8IUJefImQ90FeJjl8fjEaQ==} engines: {node: '>= 10'} - '@napi-rs/wasm-runtime@1.1.0': - resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==} + '@napi-rs/wasm-runtime@1.1.1': + resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} '@napi-rs/wasm-tools-android-arm-eabi@1.0.1': resolution: {integrity: sha512-lr07E/l571Gft5v4aA1dI8koJEmF1F0UigBbsqg9OWNzg80H3lDPO+auv85y3T/NHE3GirDk7x/D3sLO57vayw==} @@ -5408,7 +5408,7 @@ snapshots: '@napi-rs/lzma-wasm32-wasi@1.4.5': dependencies: - '@napi-rs/wasm-runtime': 1.1.0 + '@napi-rs/wasm-runtime': 1.1.1 optional: true '@napi-rs/lzma-win32-arm64-msvc@1.4.5': @@ -5478,7 +5478,7 @@ snapshots: '@napi-rs/tar-wasm32-wasi@1.1.0': dependencies: - '@napi-rs/wasm-runtime': 1.1.0 + '@napi-rs/wasm-runtime': 1.1.1 optional: true '@napi-rs/tar-win32-arm64-msvc@1.1.0': @@ -5509,7 +5509,7 @@ snapshots: '@napi-rs/tar-win32-ia32-msvc': 1.1.0 '@napi-rs/tar-win32-x64-msvc': 1.1.0 - '@napi-rs/wasm-runtime@1.1.0': + '@napi-rs/wasm-runtime@1.1.1': dependencies: '@emnapi/core': 1.7.1 '@emnapi/runtime': 1.7.1 @@ -5544,7 +5544,7 @@ snapshots: '@napi-rs/wasm-tools-wasm32-wasi@1.0.1': dependencies: - '@napi-rs/wasm-runtime': 1.1.0 + '@napi-rs/wasm-runtime': 1.1.1 optional: true '@napi-rs/wasm-tools-win32-arm64-msvc@1.0.1': @@ -6799,27 +6799,27 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): + eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): + eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) @@ -6830,9 +6830,9 @@ snapshots: eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) optionalDependencies: - typescript: 5.6.3 + typescript: 5.5.4 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack @@ -6847,19 +6847,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 enhanced-resolve: 5.18.4 eslint: 9.39.2(jiti@2.6.1) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6885,14 +6885,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -6906,7 +6906,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6917,7 +6917,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6929,7 +6929,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack From f82ac39ff2873ad23321b7311b6a6b595836e499 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 12:54:43 +0100 Subject: [PATCH 035/100] Improve `@utility` name validation (#19524) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR improves the validation of allowed `@utility …` names. Each `@utility` name should be a valid Tailwind CSS class, so new syntaxes should not be allowed, e.g. `foo/bar/baz` would be invalid. We already enforce this behavior but not consistently. The Oxide scanner that scans all your source files for potential Tailwind CSS classes does enforce all of these rules already. So if you used `@utility foo/bar/baz {}`, the Oxide scanner would not pick up `foo/bar/baz` as a valid class name, so for that reason it's not a breaking change. Where we didn't enforce it is in places where you use the development-only CDN or Tailwind Play. That's because those environments don't use the Oxide at all, and get the classes from the DOM directly and pass it to Tailwind's compiler. This PR moves some of these validation rules into Tailwind's core when defining custom `@utility` utilities. Fixes: #19505 ### Test plan 1. Existing tests still pass 2. Added a regression test for the linked issue 3. Added new tests with valid / invalid `@utility` names I also confirmed with Oxide to know which classes were actually valid and which ones are invalid. Given this input CSS: ```css @utility foo { color: red } @utility foo_ { color: red } /* This one looks invalid to me, but it works today */ /* and I don't want to introduce unnecessary breaking changes. */ @utility foo-1.5 { color: red } @utility foo-123 { color: red } @utility -foo { color: red } @utility foo-bar { color: red } @utility foo_bar { color: red } @utility foo-50% { color: red } @utility foo-1/2 { color: red } ``` And this HTML: ```html
``` Then all classes in the `Extracted` section are found. One funny thing in the not extracted section is that the `bar` in `foo.bar` and `foo..bar` is also extracted. Feels like a potential bug, but out of scope for this PR. image --- CHANGELOG.md | 1 + packages/tailwindcss/src/index.test.ts | 35 +++++ packages/tailwindcss/src/utilities.test.ts | 43 ++++++ packages/tailwindcss/src/utilities.ts | 148 ++++++++++++++++++++- 4 files changed, 222 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5adb9f7f53d5..b66ebaea00dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - CLI: Emit comment when source maps are saved to files ([#19447](https://github.com/tailwindlabs/tailwindcss/pull/19447)) - Detect utilities when containing capital letters followed by numbers ([#19465](https://github.com/tailwindlabs/tailwindcss/pull/19465)) - Fix class extraction for Rails' strict locals ([#19525](https://github.com/tailwindlabs/tailwindcss/pull/19525)) +- Align `@utility` name validation with Oxide scanner rules ([#19524](https://github.com/tailwindlabs/tailwindcss/pull/19524)) ### Added diff --git a/packages/tailwindcss/src/index.test.ts b/packages/tailwindcss/src/index.test.ts index 2d6ab8daf6f7..94b17714ed25 100644 --- a/packages/tailwindcss/src/index.test.ts +++ b/packages/tailwindcss/src/index.test.ts @@ -4660,6 +4660,41 @@ describe('@utility', () => { `[Error: \`@utility my-*-utility\` defines an invalid utility name. The dynamic portion marked by \`-*\` must appear once at the end.]`, ) }) + + // https://github.com/tailwindlabs/tailwindcss/issues/19505 + test('@utility name cannot contain multiple `/` characters', async () => { + await expect( + compileCss( + css` + @utility ui/button { + display: inline-flex; + background: blue; + } + @tailwind utilities; + `, + ['ui/button'], + ), + ).resolves.toMatchInlineSnapshot( + ` + ".ui\\/button { + background: #00f; + display: inline-flex; + }" + `, + ) + + await expect( + compileCss(css` + @utility ui/button/sm { + display: inline-flex; + background: blue; + font-size: 12px; + } + `), + ).rejects.toThrowErrorMatchingInlineSnapshot( + `[Error: \`@utility ui/button/sm\` defines an invalid utility name. Utilities should be alphanumeric and start with a lowercase letter.]`, + ) + }) }) test('addBase', async () => { diff --git a/packages/tailwindcss/src/utilities.test.ts b/packages/tailwindcss/src/utilities.test.ts index 732e4ab9a818..cff2284f45c9 100644 --- a/packages/tailwindcss/src/utilities.test.ts +++ b/packages/tailwindcss/src/utilities.test.ts @@ -1,6 +1,7 @@ import { describe, expect, test, vi } from 'vitest' import { compile } from '.' import { compileCss, optimizeCss, run } from './test-utils/run' +import { isValidFunctionalUtilityName, isValidStaticUtilityName } from './utilities' const css = String.raw @@ -27207,6 +27208,48 @@ describe('spacing utilities', () => { }) describe('custom utilities', () => { + test.each([ + ['foo', true], // Simple name + ['foo-123', true], // Ending with a number is valid + ['foo-2.5', true], // Dots are valid when surrounded by numbers + ['-foo', true], // Simple name with negative sign + ['foo-bar', true], // With dashes + ['foo_bar', true], // With underscores + ['foo-50%', true], // Bare value with percentage + ['foo-1/2', true], // Bare value with fraction + ['foo-sm/8', true], // Bare value with number modifier + ['foo-4/snug', true], // Bare value with named modifier + ['foo_', true], // This is supported today, so let's not break it + ['foo/bar', true], // A slash to separate the modifier is valid. + + ['Foo', false], // Starting with uppercase letter is invalid + ['-Foo', false], // Starting with uppercase letter is invalid (negative) + ['foo-', false], // Should not end with a dash + ['foo-1/', false], // Invalid fraction/modifier + ['foo-p%', false], // Invalid percentage + ['foo.bar', false], // Dots are only valid when surrounded by numbers + ['foo-1..5', false], // Double dots are invalid + ['foo..bar', false], // Double dots are invalid definitely without numbers + ['foo/bar/baz', false], // Multiple slashes are invalid + ])('valid static utility name "%s" (%s)', (name, valid) => { + expect(isValidStaticUtilityName(name)).toBe(valid) + }) + + test.each([ + ['foo', false], // Simple name, missing '-*' suffix + ['foo-*', true], // Simple name + ['foo--*', false], // Root should not end in `-` + ['-foo-*', true], // Simple name (negative) + ['foo-bar-*', true], // With dashes + ['foo_bar-*', true], // With underscores + ['Foo-*', false], // Starting with uppercase letter is invalid + ['-Foo-*', false], // Starting with uppercase letter is invalid + ['foo!-*', false], // Invalid special character + ['foo-[…]', false], // Invalid special character + ])('valid functional name "%s" (%s)', (name, valid) => { + expect(isValidFunctionalUtilityName(name)).toBe(valid) + }) + test('custom static utility', async () => { let { build } = await compile(css` @layer utilities { diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index 8ec903af64ec..e1c84ce00890 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -28,9 +28,6 @@ import { segment } from './utils/segment' import * as ValueParser from './value-parser' import { walk, WalkAction } from './walk' -const IS_VALID_STATIC_UTILITY_NAME = /^-?[a-z][a-zA-Z0-9/%._-]*$/ -const IS_VALID_FUNCTIONAL_UTILITY_NAME = /^-?[a-z][a-zA-Z0-9/%._-]*-\*$/ - const DEFAULT_SPACING_SUGGESTIONS = [ '0', '0.5', @@ -5835,7 +5832,7 @@ export function createCssUtility(node: AtRule) { let name = node.params // Functional utilities. E.g.: `tab-size-*` - if (IS_VALID_FUNCTIONAL_UTILITY_NAME.test(name)) { + if (isValidFunctionalUtilityName(name)) { // API: // // - `--value('literal')` resolves a literal named value @@ -6184,7 +6181,7 @@ export function createCssUtility(node: AtRule) { } } - if (IS_VALID_STATIC_UTILITY_NAME.test(name)) { + if (isValidStaticUtilityName(name)) { return (designSystem: DesignSystem) => { designSystem.utilities.static(name, () => node.nodes.map(cloneAstNode)) } @@ -6428,3 +6425,144 @@ function alphaReplacedDropShadowProperties( return [decl(property, prefix + replacedValue)] } } + +const UTILITY_ROOT = /^-?[a-z][a-zA-Z0-9_-]*/ + +const PERCENT = 37 +const SLASH = 47 +const DOT = 46 +const LOWER_A = 97 +const LOWER_Z = 122 +const UPPER_A = 65 +const UPPER_Z = 90 +const ZERO = 48 +const NINE = 57 +const UNDERSCORE = 95 +const DASH = 45 + +export function isValidStaticUtilityName(name: string): boolean { + let match = UTILITY_ROOT.exec(name) + if (match === null) return false // Invalid root + + let root = match[0] + let value = name.slice(root.length) + + // Root should not end in `-` if there is no value + // + // `tab-size-` + // --------- Root + if (value.length === 0 && root.endsWith('-')) { + return false + } + + // No remaining value is valid + // + // `tab-size` + // -------- Root + if (value.length === 0) { + return true + } + + // Any valid (static) utility should be valid including: + // - Bare values with `.`: `p-1.5` + // - Bare values with `%`: `w-50%` + // - With an embedded modifier: `text-xs/8` + + let seenSlash = false + for (let i = 0; i < value.length; i++) { + let charCode = value.charCodeAt(i) + switch (charCode) { + case PERCENT: { + // A percentage is only valid at the end of the value + if (i !== value.length - 1) return false + + // A percent is only valid when preceded by a digit. E.g.: `w-%` is invalid + let previousChar = value[i - 1] || root[root.length - 1] || '' + let previousCharCode = previousChar.charCodeAt(0) + if (previousCharCode < ZERO || previousCharCode > NINE) return false + break + } + + case SLASH: { + // A slash must be followed by at least 1 character. E.g.: `foo/` is invalid + if (i === value.length - 1) return false + + // A slash can only appear once. E.g.: `foo/bar/baz` is invalid + if (seenSlash) return false + seenSlash = true + break + } + + case DOT: { + // Dots are only allowed between digits. E.g.: `p-1.a` is invalid + let previousChar = value[i - 1] || root[root.length - 1] || '' + let previousCharCode = previousChar.charCodeAt(0) + if (previousCharCode < ZERO || previousCharCode > NINE) return false + + let nextChar = value[i + 1] || '' + let nextCharCode = nextChar.charCodeAt(0) + if (nextCharCode < ZERO || nextCharCode > NINE) return false + break + } + + // Allowed special characters + case UNDERSCORE: + case DASH: { + continue + } + + default: { + if ( + (charCode >= LOWER_A && charCode <= LOWER_Z) || // Allow a-z + (charCode >= UPPER_A && charCode <= UPPER_Z) || // Allow A-Z + (charCode >= ZERO && charCode <= NINE) // Allow 0-9 + ) { + continue + } + + // Everything else is invalid + return false + } + } + } + + return true +} + +export function isValidFunctionalUtilityName(name: string): boolean { + if (!name.endsWith('-*')) return false // Missing '-*' suffix + name = name.slice(0, -2) + + let match = UTILITY_ROOT.exec(name) + if (match === null) return false // Invalid root + + let root = match[0] + let value = name.slice(root.length) + + // Root should not end in `-` if there is no value + // + // `tab-size--*` + // --------- Root + // -- Suffix + // + // Because with default values, this could match `tab-size-` which is invalid. + if (value.length === 0 && root.endsWith('-')) { + return false + } + + // No remaining value is valid + // + // `tab-size-*` + // -------- Root + // -- Suffix + if (value.length === 0) { + return true + } + + // But if there is a value remaining, it's invalid. + // + // E.g.: `tab-size-[…]-*` + // + // If we allow more characters, we can extend the validation here + return false +} From 1f9ac73daf07112a8efe43e140861fffe4468a99 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 13:25:14 +0100 Subject: [PATCH 036/100] run release workflows against newer Node version When using NAPI to build for release purposes, it relies on `inquirer`, which relies on `@inquirer/core` which relies on a modern Node version to support `import { styleText } from 'node:util'` We want to still make sure that CI / Integration Tests pass on Node v20 (which we currently do), so just bumping the prepare-release.yml, release-insiders.yml and release.yml workflows. If this isn't enough, I'll properly drop the `@napi-rs/cli` version or force an `inquirer`/`@inquirer/core` version. Let's try this first. --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/release-insiders.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index be1050b03b9c..545fba07d188 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -8,7 +8,7 @@ on: env: APP_NAME: tailwindcss-oxide - NODE_VERSION: 20 + NODE_VERSION: 25 OXIDE_LOCATION: ./crates/node permissions: diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 53478a227ee4..1dba8c5d08fb 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -9,7 +9,7 @@ permissions: env: APP_NAME: tailwindcss-oxide - NODE_VERSION: 20 + NODE_VERSION: 25 OXIDE_LOCATION: ./crates/node RELEASE_CHANNEL: insiders diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8b27773b3dd5..1fa1080819c3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,7 +10,7 @@ permissions: env: APP_NAME: tailwindcss-oxide - NODE_VERSION: 20 + NODE_VERSION: 25 OXIDE_LOCATION: ./crates/node jobs: From 4719dd98483c38121716478d5e88a9b3f27aeff7 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 13:37:35 +0100 Subject: [PATCH 037/100] Revert "run release workflows against newer Node version" This reverts commit 1f9ac73daf07112a8efe43e140861fffe4468a99. --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/release-insiders.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 545fba07d188..be1050b03b9c 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -8,7 +8,7 @@ on: env: APP_NAME: tailwindcss-oxide - NODE_VERSION: 25 + NODE_VERSION: 20 OXIDE_LOCATION: ./crates/node permissions: diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 1dba8c5d08fb..53478a227ee4 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -9,7 +9,7 @@ permissions: env: APP_NAME: tailwindcss-oxide - NODE_VERSION: 25 + NODE_VERSION: 20 OXIDE_LOCATION: ./crates/node RELEASE_CHANNEL: insiders diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1fa1080819c3..8b27773b3dd5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,7 +10,7 @@ permissions: env: APP_NAME: tailwindcss-oxide - NODE_VERSION: 25 + NODE_VERSION: 20 OXIDE_LOCATION: ./crates/node jobs: From 7107c0471352bebdda39d495704305816de0de01 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 13:39:44 +0100 Subject: [PATCH 038/100] bump `actions/setup-node` to v6 --- .github/workflows/ci.yml | 2 +- .github/workflows/integration-tests.yml | 2 +- .github/workflows/prepare-release.yml | 6 +++--- .github/workflows/release-insiders.yml | 6 +++--- .github/workflows/release.yml | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e369c64fcd69..999ffcaf0853 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,7 +45,7 @@ jobs: - uses: pnpm/action-setup@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ matrix.node-version }} cache: 'pnpm' diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 475570615bf8..3e9b374fb0b4 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -58,7 +58,7 @@ jobs: git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ matrix.node-version }} cache: 'pnpm' diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index be1050b03b9c..1e9461ed2357 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -77,7 +77,7 @@ jobs: - uses: pnpm/action-setup@v4 - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' @@ -117,7 +117,7 @@ jobs: key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }} - name: Install Node.JS - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.NODE_VERSION }} @@ -221,7 +221,7 @@ jobs: - uses: pnpm/action-setup@v4 - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 53478a227ee4..5b26125dd2f4 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -76,7 +76,7 @@ jobs: - uses: pnpm/action-setup@v4 - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' @@ -116,7 +116,7 @@ jobs: key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }} - name: Install Node.JS - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.NODE_VERSION }} @@ -218,7 +218,7 @@ jobs: - uses: pnpm/action-setup@v4 - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8b27773b3dd5..79c1a70b79a3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -76,7 +76,7 @@ jobs: - uses: pnpm/action-setup@v4 - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' @@ -116,7 +116,7 @@ jobs: key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./crates/**/*') }} - name: Install Node.JS - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.NODE_VERSION }} @@ -213,7 +213,7 @@ jobs: - uses: pnpm/action-setup@v4 - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' From 4f76b47f40037be744d3e025ec615d795d63433e Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 13:41:55 +0100 Subject: [PATCH 039/100] bump `actions/checkout` to v6 --- .github/workflows/ci.yml | 2 +- .github/workflows/integration-tests.yml | 2 +- .github/workflows/prepare-release.yml | 6 +++--- .github/workflows/release-insiders.yml | 6 +++--- .github/workflows/release.yml | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 999ffcaf0853..005298ef9b3b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,7 +41,7 @@ jobs: name: ${{ matrix.runner.name }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: pnpm/action-setup@v4 - name: Use Node.js ${{ matrix.node-version }} diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 3e9b374fb0b4..5dd15ad93209 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -50,7 +50,7 @@ jobs: name: ${{ matrix.runner.name }} / ${{ matrix.integration }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: pnpm/action-setup@v4 - run: | diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 1e9461ed2357..6ef28f31a25a 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -73,7 +73,7 @@ jobs: container: ${{ matrix.container }} timeout-minutes: 15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: pnpm/action-setup@v4 - name: Use Node.js ${{ env.NODE_VERSION }} @@ -153,7 +153,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Build FreeBSD uses: cross-platform-actions/action@v0.25.0 env: @@ -207,7 +207,7 @@ jobs: - build-freebsd steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 20 diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 5b26125dd2f4..2fd8c010f716 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -72,7 +72,7 @@ jobs: container: ${{ matrix.container }} timeout-minutes: 15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: pnpm/action-setup@v4 - name: Use Node.js ${{ env.NODE_VERSION }} @@ -152,7 +152,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Build FreeBSD uses: cross-platform-actions/action@v0.25.0 env: @@ -206,7 +206,7 @@ jobs: - build-freebsd steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 20 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 79c1a70b79a3..661154e7f3f0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -72,7 +72,7 @@ jobs: container: ${{ matrix.container }} timeout-minutes: 15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: pnpm/action-setup@v4 - name: Use Node.js ${{ env.NODE_VERSION }} @@ -152,7 +152,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Build FreeBSD uses: cross-platform-actions/action@v0.25.0 env: @@ -206,7 +206,7 @@ jobs: - build-freebsd steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 20 From bd7fe7abc85ad429229e1d5b5d72754fc27be3ac Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 13:43:59 +0100 Subject: [PATCH 040/100] bump `actions/upload-artifact` to v6 --- .github/workflows/prepare-release.yml | 8 ++++---- .github/workflows/release-insiders.yml | 6 +++--- .github/workflows/release.yml | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 6ef28f31a25a..3a5ea7464c91 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -143,7 +143,7 @@ jobs: run: ${{ matrix.strip }} ${{ env.OXIDE_LOCATION }}/*.node - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: bindings-${{ matrix.target }} path: ${{ env.OXIDE_LOCATION }}/*.node @@ -187,7 +187,7 @@ jobs: strip -x ${{ env.OXIDE_LOCATION }}/*.node ls -la ${{ env.OXIDE_LOCATION }} - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: bindings-x86_64-unknown-freebsd path: ${{ env.OXIDE_LOCATION }}/*.node @@ -301,13 +301,13 @@ jobs: echo "EOF" >> $GITHUB_ENV - name: Upload standalone artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: tailwindcss-standalone path: packages/@tailwindcss-standalone/dist/ - name: Upload npm package tarballs - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: npm-package-tarballs path: dist/*.tgz diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 2fd8c010f716..1c690c96c3d2 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -142,7 +142,7 @@ jobs: run: ${{ matrix.strip }} ${{ env.OXIDE_LOCATION }}/*.node - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: bindings-${{ matrix.target }} path: ${{ env.OXIDE_LOCATION }}/*.node @@ -186,7 +186,7 @@ jobs: strip -x ${{ env.OXIDE_LOCATION }}/*.node ls -la ${{ env.OXIDE_LOCATION }} - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: bindings-x86_64-unknown-freebsd path: ${{ env.OXIDE_LOCATION }}/*.node @@ -292,7 +292,7 @@ jobs: run: node ./scripts/lock-pre-release-versions.mjs - name: Upload npm package tarballs - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: npm-package-tarballs path: dist/*.tgz diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 661154e7f3f0..c63ccfe77ff2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -142,7 +142,7 @@ jobs: run: ${{ matrix.strip }} ${{ env.OXIDE_LOCATION }}/*.node - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: bindings-${{ matrix.target }} path: ${{ env.OXIDE_LOCATION }}/*.node @@ -186,7 +186,7 @@ jobs: strip -x ${{ env.OXIDE_LOCATION }}/*.node ls -la ${{ env.OXIDE_LOCATION }} - name: Upload artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: bindings-x86_64-unknown-freebsd path: ${{ env.OXIDE_LOCATION }}/*.node From d214c30161b95e047216a8e01977a6879fa555c8 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 13:44:23 +0100 Subject: [PATCH 041/100] bump `actions/download-artifact` to v6 --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/release-insiders.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 3a5ea7464c91..0dcbe44bc779 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -262,7 +262,7 @@ jobs: run: pnpm --filter=!./playgrounds/* install - name: Download artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v6 with: path: ${{ env.OXIDE_LOCATION }} diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 1c690c96c3d2..01d186cc1a2e 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -259,7 +259,7 @@ jobs: run: pnpm --filter=!./playgrounds/* install - name: Download artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v6 with: path: ${{ env.OXIDE_LOCATION }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c63ccfe77ff2..f9cfc6a080cc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -254,7 +254,7 @@ jobs: run: pnpm --filter=!./playgrounds/* install - name: Download artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v6 with: path: ${{ env.OXIDE_LOCATION }} From 562acdac54f55bbc6ad558992d4df49daa704d4c Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 13:45:57 +0100 Subject: [PATCH 042/100] bump `actions/cache` to v5 --- .github/workflows/ci.yml | 4 ++-- .github/workflows/integration-tests.yml | 4 ++-- .github/workflows/prepare-release.yml | 8 ++++---- .github/workflows/release-insiders.yml | 8 ++++---- .github/workflows/release.yml | 8 ++++---- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 005298ef9b3b..506ce53d704e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,7 +52,7 @@ jobs: # Cargo already skips downloading dependencies if they already exist - name: Cache cargo - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.cargo/bin/ @@ -64,7 +64,7 @@ jobs: # Cache the `oxide` Rust build - name: Cache oxide build - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ./crates/node/*.node diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 5dd15ad93209..7a5c09b0f3db 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -65,7 +65,7 @@ jobs: # Cargo already skips downloading dependencies if they already exist - name: Cache cargo - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.cargo/bin/ @@ -77,7 +77,7 @@ jobs: # Cache the `oxide` Rust build - name: Cache oxide build - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ./crates/node/*.node diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 0dcbe44bc779..d65370a5d2c1 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -90,7 +90,7 @@ jobs: # Cargo already skips downloading dependencies if they already exist - name: Cache cargo - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.cargo/bin/ @@ -102,7 +102,7 @@ jobs: # Cache the `oxide` Rust build - name: Cache oxide build - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ./crates/node/*.node @@ -229,7 +229,7 @@ jobs: # Cargo already skips downloading dependencies if they already exist - name: Cache cargo - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.cargo/bin/ @@ -241,7 +241,7 @@ jobs: # Cache the `oxide` Rust build - name: Cache oxide build - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ./crates/node/*.node diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 01d186cc1a2e..2621b2ee6299 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -89,7 +89,7 @@ jobs: # Cargo already skips downloading dependencies if they already exist - name: Cache cargo - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.cargo/bin/ @@ -101,7 +101,7 @@ jobs: # Cache the `oxide` Rust build - name: Cache oxide build - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ./crates/node/*.node @@ -226,7 +226,7 @@ jobs: # Cargo already skips downloading dependencies if they already exist - name: Cache cargo - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.cargo/bin/ @@ -238,7 +238,7 @@ jobs: # Cache the `oxide` Rust build - name: Cache oxide build - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ./crates/node/*.node diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f9cfc6a080cc..881f7ed0abf9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -89,7 +89,7 @@ jobs: # Cargo already skips downloading dependencies if they already exist - name: Cache cargo - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.cargo/bin/ @@ -101,7 +101,7 @@ jobs: # Cache the `oxide` Rust build - name: Cache oxide build - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ./crates/node/*.node @@ -221,7 +221,7 @@ jobs: # Cargo already skips downloading dependencies if they already exist - name: Cache cargo - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.cargo/bin/ @@ -233,7 +233,7 @@ jobs: # Cache the `oxide` Rust build - name: Cache oxide build - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ./crates/node/*.node From bde403e013a4acfe3917cd3091975b632f834eae Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 13:46:44 +0100 Subject: [PATCH 043/100] bump `actions/github-script` to v8 --- .github/workflows/release-insiders.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 2621b2ee6299..159801138142 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -306,7 +306,7 @@ jobs: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Trigger Tailwind Play update - uses: actions/github-script@v7 + uses: actions/github-script@v8 with: github-token: ${{ secrets.TAILWIND_PLAY_TOKEN }} script: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 881f7ed0abf9..20bd34b3aaa4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -300,7 +300,7 @@ jobs: - name: Trigger Tailwind Play update if: env.RELEASE_CHANNEL == 'latest' - uses: actions/github-script@v7 + uses: actions/github-script@v8 with: github-token: ${{ secrets.TAILWIND_PLAY_TOKEN }} script: | From 6313cf677050e1848df8c35281d47ea80741cd2f Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 13:48:17 +0100 Subject: [PATCH 044/100] bump to Node 24 in CI All bumped `actions/*` for GitHub Workflows require Node 24 right now. We were relying on Node 20, but that's in maintenance mode until April. Node 24 is the current Active LTS version. --- .github/workflows/ci.yml | 8 +++++--- .github/workflows/integration-tests.yml | 9 +++++---- .github/workflows/prepare-release.yml | 2 +- .github/workflows/release-insiders.yml | 2 +- .github/workflows/release.yml | 2 +- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 506ce53d704e..d8c099873b64 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,12 +8,14 @@ on: permissions: contents: read +env: + NODE_VERSION: 24 + jobs: tests: strategy: fail-fast: false matrix: - node-version: [20] runner: - name: Windows os: windows-latest @@ -44,10 +46,10 @@ jobs: - uses: actions/checkout@v6 - uses: pnpm/action-setup@v4 - - name: Use Node.js ${{ matrix.node-version }} + - name: Use Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@v6 with: - node-version: ${{ matrix.node-version }} + node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' # Cargo already skips downloading dependencies if they already exist diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 7a5c09b0f3db..e36f5b3abc47 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -8,13 +8,14 @@ on: permissions: contents: read +env: + NODE_VERSION: 24 + jobs: tests: strategy: fail-fast: false matrix: - node-version: [20] - runner: - name: Windows os: windows-latest @@ -57,10 +58,10 @@ jobs: git config --global user.name "github-actions[bot]" git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" - - name: Use Node.js ${{ matrix.node-version }} + - name: Use Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@v6 with: - node-version: ${{ matrix.node-version }} + node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' # Cargo already skips downloading dependencies if they already exist diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index d65370a5d2c1..e506ab187b7a 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -8,7 +8,7 @@ on: env: APP_NAME: tailwindcss-oxide - NODE_VERSION: 20 + NODE_VERSION: 24 OXIDE_LOCATION: ./crates/node permissions: diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 159801138142..f7792244f520 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -9,7 +9,7 @@ permissions: env: APP_NAME: tailwindcss-oxide - NODE_VERSION: 20 + NODE_VERSION: 24 OXIDE_LOCATION: ./crates/node RELEASE_CHANNEL: insiders diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 20bd34b3aaa4..3b0aeab20049 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,7 +10,7 @@ permissions: env: APP_NAME: tailwindcss-oxide - NODE_VERSION: 20 + NODE_VERSION: 24 OXIDE_LOCATION: ./crates/node jobs: From c6f0c6b31845ed743030fc53a13b4ddc5657a468 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 13:57:52 +0100 Subject: [PATCH 045/100] bump required engine to Node 20 --- crates/node/npm/android-arm-eabi/package.json | 2 +- crates/node/npm/android-arm64/package.json | 2 +- crates/node/npm/darwin-arm64/package.json | 2 +- crates/node/npm/darwin-x64/package.json | 2 +- crates/node/npm/freebsd-x64/package.json | 2 +- crates/node/npm/linux-arm-gnueabihf/package.json | 2 +- crates/node/npm/linux-arm64-gnu/package.json | 2 +- crates/node/npm/linux-arm64-musl/package.json | 2 +- crates/node/npm/linux-x64-gnu/package.json | 2 +- crates/node/npm/linux-x64-musl/package.json | 2 +- crates/node/npm/win32-arm64-msvc/package.json | 2 +- crates/node/npm/win32-x64-msvc/package.json | 2 +- crates/node/package.json | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/crates/node/npm/android-arm-eabi/package.json b/crates/node/npm/android-arm-eabi/package.json index 9d4181ce645b..47df39f4ec30 100644 --- a/crates/node/npm/android-arm-eabi/package.json +++ b/crates/node/npm/android-arm-eabi/package.json @@ -22,6 +22,6 @@ }, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 20" } } diff --git a/crates/node/npm/android-arm64/package.json b/crates/node/npm/android-arm64/package.json index ff08b5b79617..a2d8231abb28 100644 --- a/crates/node/npm/android-arm64/package.json +++ b/crates/node/npm/android-arm64/package.json @@ -22,6 +22,6 @@ }, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 20" } } diff --git a/crates/node/npm/darwin-arm64/package.json b/crates/node/npm/darwin-arm64/package.json index e3e7e96e83dd..153b2306fe9c 100644 --- a/crates/node/npm/darwin-arm64/package.json +++ b/crates/node/npm/darwin-arm64/package.json @@ -22,6 +22,6 @@ }, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 20" } } diff --git a/crates/node/npm/darwin-x64/package.json b/crates/node/npm/darwin-x64/package.json index 7b445cf0b54a..fd4fba92b312 100644 --- a/crates/node/npm/darwin-x64/package.json +++ b/crates/node/npm/darwin-x64/package.json @@ -22,6 +22,6 @@ }, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 20" } } diff --git a/crates/node/npm/freebsd-x64/package.json b/crates/node/npm/freebsd-x64/package.json index 90064bbe1fe5..89f126ba19fd 100644 --- a/crates/node/npm/freebsd-x64/package.json +++ b/crates/node/npm/freebsd-x64/package.json @@ -22,6 +22,6 @@ }, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 20" } } diff --git a/crates/node/npm/linux-arm-gnueabihf/package.json b/crates/node/npm/linux-arm-gnueabihf/package.json index 77f22d89c834..e0939b03718c 100644 --- a/crates/node/npm/linux-arm-gnueabihf/package.json +++ b/crates/node/npm/linux-arm-gnueabihf/package.json @@ -22,6 +22,6 @@ }, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 20" } } diff --git a/crates/node/npm/linux-arm64-gnu/package.json b/crates/node/npm/linux-arm64-gnu/package.json index f7a4d322375d..ec4d07081c52 100644 --- a/crates/node/npm/linux-arm64-gnu/package.json +++ b/crates/node/npm/linux-arm64-gnu/package.json @@ -22,7 +22,7 @@ }, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 20" }, "libc": [ "glibc" diff --git a/crates/node/npm/linux-arm64-musl/package.json b/crates/node/npm/linux-arm64-musl/package.json index e0793213190f..1ff8c8917ebe 100644 --- a/crates/node/npm/linux-arm64-musl/package.json +++ b/crates/node/npm/linux-arm64-musl/package.json @@ -22,7 +22,7 @@ }, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 20" }, "libc": [ "musl" diff --git a/crates/node/npm/linux-x64-gnu/package.json b/crates/node/npm/linux-x64-gnu/package.json index bd1c36a82770..b27ebb4f169b 100644 --- a/crates/node/npm/linux-x64-gnu/package.json +++ b/crates/node/npm/linux-x64-gnu/package.json @@ -22,7 +22,7 @@ }, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 20" }, "libc": [ "glibc" diff --git a/crates/node/npm/linux-x64-musl/package.json b/crates/node/npm/linux-x64-musl/package.json index b67ce82fea99..b38fe0792485 100644 --- a/crates/node/npm/linux-x64-musl/package.json +++ b/crates/node/npm/linux-x64-musl/package.json @@ -22,7 +22,7 @@ }, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 20" }, "libc": [ "musl" diff --git a/crates/node/npm/win32-arm64-msvc/package.json b/crates/node/npm/win32-arm64-msvc/package.json index bbf8200850b8..f1ef4133a570 100644 --- a/crates/node/npm/win32-arm64-msvc/package.json +++ b/crates/node/npm/win32-arm64-msvc/package.json @@ -22,6 +22,6 @@ }, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 20" } } diff --git a/crates/node/npm/win32-x64-msvc/package.json b/crates/node/npm/win32-x64-msvc/package.json index ab648ee397f8..4049d272da2b 100644 --- a/crates/node/npm/win32-x64-msvc/package.json +++ b/crates/node/npm/win32-x64-msvc/package.json @@ -22,6 +22,6 @@ }, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 20" } } diff --git a/crates/node/package.json b/crates/node/package.json index 64282742a349..ff0fea3b1547 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -38,7 +38,7 @@ "emnapi": "1.7.1" }, "engines": { - "node": ">= 10" + "node": ">= 20" }, "files": [ "index.js", From 7d78fda879262e11defae758e8111a193199e053 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 14:37:46 +0100 Subject: [PATCH 046/100] temporarily disable discord notifications --- .github/workflows/ci.yml | 12 ++++++------ .github/workflows/integration-tests.yml | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d8c099873b64..b4f8d75921a7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -106,9 +106,9 @@ jobs: - name: Run Playwright tests run: npm run test:ui - - name: Notify Discord - if: failure() && github.ref == 'refs/heads/main' - uses: discord-actions/message@v2 - with: - webhookUrl: ${{ secrets.DISCORD_WEBHOOK_URL }} - message: 'The [most recent build](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) on the `main` branch has failed.' + # - name: Notify Discord + # if: failure() && github.ref == 'refs/heads/main' + # uses: discord-actions/message@v2 + # with: + # webhookUrl: ${{ secrets.DISCORD_WEBHOOK_URL }} + # message: 'The [most recent build](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) on the `main` branch has failed.' diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index e36f5b3abc47..647fbabffccf 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -109,9 +109,9 @@ jobs: env: GITHUB_WORKSPACE: ${{ github.workspace }} - - name: Notify Discord - if: failure() && github.ref == 'refs/heads/main' - uses: discord-actions/message@v2 - with: - webhookUrl: ${{ secrets.DISCORD_WEBHOOK_URL }} - message: 'The [most recent build](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) on the `main` branch has failed.' + # - name: Notify Discord + # if: failure() && github.ref == 'refs/heads/main' + # uses: discord-actions/message@v2 + # with: + # webhookUrl: ${{ secrets.DISCORD_WEBHOOK_URL }} + # message: 'The [most recent build](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) on the `main` branch has failed.' From 26515af2d55f1f56f3daaad13e6d1e01403c2c6e Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 15:07:42 +0100 Subject: [PATCH 047/100] pin musl-related docker images --- .github/workflows/prepare-release.yml | 4 ++-- .github/workflows/release-insiders.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index e506ab187b7a..f117c19ebe42 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -60,13 +60,13 @@ jobs: strip: aarch64-linux-musl-strip download: true container: - image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine + image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 - os: ubuntu-latest target: x86_64-unknown-linux-musl strip: strip download: true container: - image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine + image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 name: Build ${{ matrix.target }} (oxide) runs-on: ${{ matrix.os }} diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index f7792244f520..1c6c307fd149 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -59,13 +59,13 @@ jobs: strip: aarch64-linux-musl-strip download: true container: - image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine + image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 - os: ubuntu-latest target: x86_64-unknown-linux-musl strip: strip download: true container: - image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine + image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 name: Build ${{ matrix.target }} (oxide) runs-on: ${{ matrix.os }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3b0aeab20049..53347e808e63 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -59,13 +59,13 @@ jobs: strip: aarch64-linux-musl-strip download: true container: - image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine + image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 - os: ubuntu-latest target: x86_64-unknown-linux-musl strip: strip download: true container: - image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine + image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 name: Build ${{ matrix.target }} (oxide) runs-on: ${{ matrix.os }} From ae130776ab805a2a74de95c4a3ca15653c313cec Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 15:11:38 +0100 Subject: [PATCH 048/100] Revert "pin musl-related docker images" This reverts commit 26515af2d55f1f56f3daaad13e6d1e01403c2c6e. --- .github/workflows/prepare-release.yml | 4 ++-- .github/workflows/release-insiders.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index f117c19ebe42..e506ab187b7a 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -60,13 +60,13 @@ jobs: strip: aarch64-linux-musl-strip download: true container: - image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 + image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine - os: ubuntu-latest target: x86_64-unknown-linux-musl strip: strip download: true container: - image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 + image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine name: Build ${{ matrix.target }} (oxide) runs-on: ${{ matrix.os }} diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 1c6c307fd149..f7792244f520 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -59,13 +59,13 @@ jobs: strip: aarch64-linux-musl-strip download: true container: - image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 + image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine - os: ubuntu-latest target: x86_64-unknown-linux-musl strip: strip download: true container: - image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 + image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine name: Build ${{ matrix.target }} (oxide) runs-on: ${{ matrix.os }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 53347e808e63..3b0aeab20049 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -59,13 +59,13 @@ jobs: strip: aarch64-linux-musl-strip download: true container: - image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 + image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine - os: ubuntu-latest target: x86_64-unknown-linux-musl strip: strip download: true container: - image: ghcr.io/napi-rs/napi-rs/nodejs-rust@sha256:78c9ab1f117f8c535b93c4b91a2f19063dda6e4dba48a6187df49810625992c1 + image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine name: Build ${{ matrix.target }} (oxide) runs-on: ${{ matrix.os }} From 60c6255fb87b0c6497cbdf9cf6d87a0132bd09a3 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 15:12:32 +0100 Subject: [PATCH 049/100] use older version of `@napi-rs/cli` --- crates/node/package.json | 2 +- pnpm-lock.yaml | 55 +++++++++++++++------------------------- 2 files changed, 21 insertions(+), 36 deletions(-) diff --git a/crates/node/package.json b/crates/node/package.json index ff0fea3b1547..b2c174b3a680 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -33,7 +33,7 @@ }, "license": "MIT", "devDependencies": { - "@napi-rs/cli": "^3.5.1", + "@napi-rs/cli": "^3.4.1", "@napi-rs/wasm-runtime": "^1.1.1", "emnapi": "1.7.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d6dfe5f4529c..b6d7e867a851 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -126,7 +126,7 @@ importers: version: link:npm/win32-x64-msvc devDependencies: '@napi-rs/cli': - specifier: ^3.5.1 + specifier: ^3.4.1 version: 3.5.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0) '@napi-rs/wasm-runtime': specifier: ^1.1.1 @@ -506,7 +506,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -543,7 +543,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.0 - version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) typescript: specifier: ^5.5.4 version: 5.6.3 @@ -2024,7 +2024,6 @@ packages: '@parcel/watcher-darwin-arm64@2.5.1': resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} engines: {node: '>= 10.0.0'} - cpu: [arm64] os: [darwin] '@parcel/watcher-darwin-x64@2.5.0': @@ -2036,7 +2035,6 @@ packages: '@parcel/watcher-darwin-x64@2.5.1': resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} engines: {node: '>= 10.0.0'} - cpu: [x64] os: [darwin] '@parcel/watcher-freebsd-x64@2.5.0': @@ -2084,7 +2082,6 @@ packages: '@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] '@parcel/watcher-linux-arm64-musl@2.5.0': @@ -2096,7 +2093,6 @@ packages: '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} - cpu: [arm64] os: [linux] '@parcel/watcher-linux-x64-glibc@2.5.0': @@ -2108,7 +2104,6 @@ packages: '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} - cpu: [x64] os: [linux] '@parcel/watcher-linux-x64-musl@2.5.0': @@ -2120,7 +2115,6 @@ packages: '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} - cpu: [x64] os: [linux] '@parcel/watcher-wasm@2.5.0': @@ -2162,7 +2156,6 @@ packages: '@parcel/watcher-win32-x64@2.5.1': resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} engines: {node: '>= 10.0.0'} - cpu: [x64] os: [win32] '@parcel/watcher@2.5.0': @@ -2618,7 +2611,6 @@ packages: bun@1.3.5: resolution: {integrity: sha512-c1YHIGUfgvYPJmLug5QiLzNWlX2Dg7X/67JWu1Va+AmMXNXzC/KQn2lgQ7rD+n1u1UqDpJMowVGGxTNpbPydNw==} - cpu: [arm64, x64] os: [darwin, linux, win32] hasBin: true @@ -3518,13 +3510,11 @@ packages: lightningcss-darwin-arm64@1.30.2: resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} engines: {node: '>= 12.0.0'} - cpu: [arm64] os: [darwin] lightningcss-darwin-x64@1.30.2: resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} engines: {node: '>= 12.0.0'} - cpu: [x64] os: [darwin] lightningcss-freebsd-x64@1.30.2: @@ -3542,25 +3532,21 @@ packages: lightningcss-linux-arm64-gnu@1.30.2: resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} engines: {node: '>= 12.0.0'} - cpu: [arm64] os: [linux] lightningcss-linux-arm64-musl@1.30.2: resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} engines: {node: '>= 12.0.0'} - cpu: [arm64] os: [linux] lightningcss-linux-x64-gnu@1.30.2: resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} engines: {node: '>= 12.0.0'} - cpu: [x64] os: [linux] lightningcss-linux-x64-musl@1.30.2: resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} engines: {node: '>= 12.0.0'} - cpu: [x64] os: [linux] lightningcss-win32-arm64-msvc@1.30.2: @@ -3572,7 +3558,6 @@ packages: lightningcss-win32-x64-msvc@1.30.2: resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} engines: {node: '>= 12.0.0'} - cpu: [x64] os: [win32] lightningcss@1.30.2: @@ -6799,27 +6784,27 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): + eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) optionalDependencies: - typescript: 5.6.3 + typescript: 5.5.4 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): + eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): dependencies: '@next/eslint-plugin-next': 16.1.0 eslint: 9.39.2(jiti@2.6.1) @@ -6830,9 +6815,9 @@ snapshots: eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack @@ -6847,19 +6832,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 enhanced-resolve: 5.18.4 eslint: 9.39.2(jiti@2.6.1) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -6885,14 +6870,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -6906,7 +6891,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6917,7 +6902,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6929,7 +6914,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack From 80e35e8f38ff34b9fdbe593e18b17eca2acecb7d Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 15:18:05 +0100 Subject: [PATCH 050/100] pin `@napi-rs/cli` Newer versions of `@napi-rs/cli` (I noticed it in 3.5.1) rely on `@inquirer/core` for the CLI. This version requires a modern Node version because it relies on `import { styleText } from 'node:util';` which is not supported on older Node versions (<20). The issue now is that we rely on a Docker image on ghcr (ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine) which ships with Node v18 which is too old and would crash when trying to build on CI. Once ghcr is updated with a newer embedded Node version, we can bump `@napi-rs/cli` again. But for now, it's pinned. --- crates/node/package.json | 2 +- pnpm-lock.yaml | 296 +++++++++++++++++++-------------------- 2 files changed, 142 insertions(+), 156 deletions(-) diff --git a/crates/node/package.json b/crates/node/package.json index b2c174b3a680..00557993d8f3 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -33,7 +33,7 @@ }, "license": "MIT", "devDependencies": { - "@napi-rs/cli": "^3.4.1", + "@napi-rs/cli": "3.4.1", "@napi-rs/wasm-runtime": "^1.1.1", "emnapi": "1.7.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b6d7e867a851..d32bc3c6495f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -126,8 +126,8 @@ importers: version: link:npm/win32-x64-msvc devDependencies: '@napi-rs/cli': - specifier: ^3.4.1 - version: 3.5.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0) + specifier: 3.4.1 + version: 3.4.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0) '@napi-rs/wasm-runtime': specifier: ^1.1.1 version: 1.1.1 @@ -1322,134 +1322,134 @@ packages: cpu: [x64] os: [win32] - '@inquirer/ansi@2.0.2': - resolution: {integrity: sha512-SYLX05PwJVnW+WVegZt1T4Ip1qba1ik+pNJPDiqvk6zS5Y/i8PhRzLpGEtVd7sW0G8cMtkD8t4AZYhQwm8vnww==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/ansi@1.0.2': + resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} + engines: {node: '>=18'} - '@inquirer/checkbox@5.0.3': - resolution: {integrity: sha512-xtQP2eXMFlOcAhZ4ReKP2KZvDIBb1AnCfZ81wWXG3DXLVH0f0g4obE0XDPH+ukAEMRcZT0kdX2AS1jrWGXbpxw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/checkbox@4.3.2': + resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/confirm@6.0.3': - resolution: {integrity: sha512-lyEvibDFL+NA5R4xl8FUmNhmu81B+LDL9L/MpKkZlQDJZXzG8InxiqYxiAlQYa9cqLLhYqKLQwZqXmSTqCLjyw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/confirm@5.1.21': + resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/core@11.1.0': - resolution: {integrity: sha512-+jD/34T1pK8M5QmZD/ENhOfXdl9Zr+BrQAUc5h2anWgi7gggRq15ZbiBeLoObj0TLbdgW7TAIQRU2boMc9uOKQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/core@10.3.2': + resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/editor@5.0.3': - resolution: {integrity: sha512-wYyQo96TsAqIciP/r5D3cFeV8h4WqKQ/YOvTg5yOfP2sqEbVVpbxPpfV3LM5D0EP4zUI3EZVHyIUIllnoIa8OQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/editor@4.2.23': + resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/expand@5.0.3': - resolution: {integrity: sha512-2oINvuL27ujjxd95f6K2K909uZOU2x1WiAl7Wb1X/xOtL8CgQ1kSxzykIr7u4xTkXkXOAkCuF45T588/YKee7w==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/expand@4.0.23': + resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/external-editor@2.0.2': - resolution: {integrity: sha512-X/fMXK7vXomRWEex1j8mnj7s1mpnTeP4CO/h2gysJhHLT2WjBnLv4ZQEGpm/kcYI8QfLZ2fgW+9kTKD+jeopLg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/figures@2.0.2': - resolution: {integrity: sha512-qXm6EVvQx/FmnSrCWCIGtMHwqeLgxABP8XgcaAoywsL0NFga9gD5kfG0gXiv80GjK9Hsoz4pgGwF/+CjygyV9A==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/figures@1.0.15': + resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} + engines: {node: '>=18'} - '@inquirer/input@5.0.3': - resolution: {integrity: sha512-4R0TdWl53dtp79Vs6Df2OHAtA2FVNqya1hND1f5wjHWxZJxwDMSNB1X5ADZJSsQKYAJ5JHCTO+GpJZ42mK0Otw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/input@4.3.1': + resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/number@4.0.3': - resolution: {integrity: sha512-TjQLe93GGo5snRlu83JxE38ZPqj5ZVggL+QqqAF2oBA5JOJoxx25GG3EGH/XN/Os5WOmKfO8iLVdCXQxXRZIMQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/number@3.0.23': + resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/password@5.0.3': - resolution: {integrity: sha512-rCozGbUMAHedTeYWEN8sgZH4lRCdgG/WinFkit6ZPsp8JaNg2T0g3QslPBS5XbpORyKP/I+xyBO81kFEvhBmjA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/password@4.0.23': + resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/prompts@8.1.0': - resolution: {integrity: sha512-LsZMdKcmRNF5LyTRuZE5nWeOjganzmN3zwbtNfcs6GPh3I2TsTtF1UYZlbxVfhxd+EuUqLGs/Lm3Xt4v6Az1wA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/prompts@7.10.1': + resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/rawlist@5.1.0': - resolution: {integrity: sha512-yUCuVh0jW026Gr2tZlG3kHignxcrLKDR3KBp+eUgNz+BAdSeZk0e18yt2gyBr+giYhj/WSIHCmPDOgp1mT2niQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/rawlist@4.1.11': + resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/search@4.0.3': - resolution: {integrity: sha512-lzqVw0YwuKYetk5VwJ81Ba+dyVlhseHPx9YnRKQgwXdFS0kEavCz2gngnNhnMIxg8+j1N/rUl1t5s1npwa7bqg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/search@3.2.2': + resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/select@5.0.3': - resolution: {integrity: sha512-M+ynbwS0ecQFDYMFrQrybA0qL8DV0snpc4kKevCCNaTpfghsRowRY7SlQBeIYNzHqXtiiz4RG9vTOeb/udew7w==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/select@4.4.2': + resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/type@4.0.2': - resolution: {integrity: sha512-cae7mzluplsjSdgFA6ACLygb5jC8alO0UUnFPyu0E7tNRPrL+q/f8VcSXp+cjZQ7l5CMpDpi2G1+IQvkOiL1Lw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/type@3.0.10': + resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} + engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -1493,12 +1493,12 @@ packages: '@jridgewell/trace-mapping@0.3.29': resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} - '@napi-rs/cli@3.5.1': - resolution: {integrity: sha512-XBfLQRDcB3qhu6bazdMJsecWW55kR85l5/k0af9BIBELXQSsCFU0fzug7PX8eQp6vVdm7W/U3z6uP5WmITB2Gw==} + '@napi-rs/cli@3.4.1': + resolution: {integrity: sha512-ayhm+NfrP5Hmh7vy5pfyYm/ktYtLh2PrgdLuqHTAubO7RoO2JkUE4F991AtgYxNewwXI8+guZLxU8itV7QnDrQ==} engines: {node: '>= 16'} hasBin: true peerDependencies: - '@emnapi/runtime': ^1.7.1 + '@emnapi/runtime': ^1.5.0 peerDependenciesMeta: '@emnapi/runtime': optional: true @@ -2844,9 +2844,6 @@ packages: node-addon-api: optional: true - emoji-regex@10.6.0: - resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3153,10 +3150,6 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} - engines: {node: '>=18'} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -3660,9 +3653,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@3.0.0: - resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} - engines: {node: ^20.17.0 || >=22.9.0} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -3774,9 +3767,6 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} - onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -4177,10 +4167,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} - string.prototype.includes@2.0.1: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} @@ -4602,6 +4588,10 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -4610,10 +4600,6 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrap-ansi@9.0.2: - resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} - engines: {node: '>=18'} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -4626,6 +4612,10 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + zod-validation-error@4.0.2: resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} engines: {node: '>=18.0.0'} @@ -5145,122 +5135,128 @@ snapshots: '@img/sharp-win32-x64@0.34.5': optional: true - '@inquirer/ansi@2.0.2': {} + '@inquirer/ansi@1.0.2': {} - '@inquirer/checkbox@5.0.3(@types/node@20.19.1)': + '@inquirer/checkbox@4.3.2(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 2.0.2 - '@inquirer/core': 11.1.0(@types/node@20.19.1) - '@inquirer/figures': 2.0.2 - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@20.19.1) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@20.19.1) + yoctocolors-cjs: 2.1.3 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/confirm@6.0.3(@types/node@20.19.1)': + '@inquirer/confirm@5.1.21(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.1.0(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.3.2(@types/node@20.19.1) + '@inquirer/type': 3.0.10(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/core@11.1.0(@types/node@20.19.1)': + '@inquirer/core@10.3.2(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 2.0.2 - '@inquirer/figures': 2.0.2 - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@20.19.1) cli-width: 4.1.0 - mute-stream: 3.0.0 + mute-stream: 2.0.0 signal-exit: 4.1.0 - wrap-ansi: 9.0.2 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/editor@5.0.3(@types/node@20.19.1)': + '@inquirer/editor@4.2.23(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.1.0(@types/node@20.19.1) - '@inquirer/external-editor': 2.0.2(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.3.2(@types/node@20.19.1) + '@inquirer/external-editor': 1.0.3(@types/node@20.19.1) + '@inquirer/type': 3.0.10(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/expand@5.0.3(@types/node@20.19.1)': + '@inquirer/expand@4.0.23(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.1.0(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.3.2(@types/node@20.19.1) + '@inquirer/type': 3.0.10(@types/node@20.19.1) + yoctocolors-cjs: 2.1.3 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/external-editor@2.0.2(@types/node@20.19.1)': + '@inquirer/external-editor@1.0.3(@types/node@20.19.1)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.0 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/figures@2.0.2': {} + '@inquirer/figures@1.0.15': {} - '@inquirer/input@5.0.3(@types/node@20.19.1)': + '@inquirer/input@4.3.1(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.1.0(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.3.2(@types/node@20.19.1) + '@inquirer/type': 3.0.10(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/number@4.0.3(@types/node@20.19.1)': + '@inquirer/number@3.0.23(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.1.0(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.3.2(@types/node@20.19.1) + '@inquirer/type': 3.0.10(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/password@5.0.3(@types/node@20.19.1)': + '@inquirer/password@4.0.23(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 2.0.2 - '@inquirer/core': 11.1.0(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@20.19.1) + '@inquirer/type': 3.0.10(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/prompts@8.1.0(@types/node@20.19.1)': - dependencies: - '@inquirer/checkbox': 5.0.3(@types/node@20.19.1) - '@inquirer/confirm': 6.0.3(@types/node@20.19.1) - '@inquirer/editor': 5.0.3(@types/node@20.19.1) - '@inquirer/expand': 5.0.3(@types/node@20.19.1) - '@inquirer/input': 5.0.3(@types/node@20.19.1) - '@inquirer/number': 4.0.3(@types/node@20.19.1) - '@inquirer/password': 5.0.3(@types/node@20.19.1) - '@inquirer/rawlist': 5.1.0(@types/node@20.19.1) - '@inquirer/search': 4.0.3(@types/node@20.19.1) - '@inquirer/select': 5.0.3(@types/node@20.19.1) + '@inquirer/prompts@7.10.1(@types/node@20.19.1)': + dependencies: + '@inquirer/checkbox': 4.3.2(@types/node@20.19.1) + '@inquirer/confirm': 5.1.21(@types/node@20.19.1) + '@inquirer/editor': 4.2.23(@types/node@20.19.1) + '@inquirer/expand': 4.0.23(@types/node@20.19.1) + '@inquirer/input': 4.3.1(@types/node@20.19.1) + '@inquirer/number': 3.0.23(@types/node@20.19.1) + '@inquirer/password': 4.0.23(@types/node@20.19.1) + '@inquirer/rawlist': 4.1.11(@types/node@20.19.1) + '@inquirer/search': 3.2.2(@types/node@20.19.1) + '@inquirer/select': 4.4.2(@types/node@20.19.1) optionalDependencies: '@types/node': 20.19.1 - '@inquirer/rawlist@5.1.0(@types/node@20.19.1)': + '@inquirer/rawlist@4.1.11(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.1.0(@types/node@20.19.1) - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.3.2(@types/node@20.19.1) + '@inquirer/type': 3.0.10(@types/node@20.19.1) + yoctocolors-cjs: 2.1.3 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/search@4.0.3(@types/node@20.19.1)': + '@inquirer/search@3.2.2(@types/node@20.19.1)': dependencies: - '@inquirer/core': 11.1.0(@types/node@20.19.1) - '@inquirer/figures': 2.0.2 - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/core': 10.3.2(@types/node@20.19.1) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@20.19.1) + yoctocolors-cjs: 2.1.3 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/select@5.0.3(@types/node@20.19.1)': + '@inquirer/select@4.4.2(@types/node@20.19.1)': dependencies: - '@inquirer/ansi': 2.0.2 - '@inquirer/core': 11.1.0(@types/node@20.19.1) - '@inquirer/figures': 2.0.2 - '@inquirer/type': 4.0.2(@types/node@20.19.1) + '@inquirer/ansi': 1.0.2 + '@inquirer/core': 10.3.2(@types/node@20.19.1) + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@20.19.1) + yoctocolors-cjs: 2.1.3 optionalDependencies: '@types/node': 20.19.1 - '@inquirer/type@4.0.2(@types/node@20.19.1)': + '@inquirer/type@3.0.10(@types/node@20.19.1)': optionalDependencies: '@types/node': 20.19.1 @@ -5313,18 +5309,18 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@napi-rs/cli@3.5.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0)': + '@napi-rs/cli@3.4.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0)': dependencies: - '@inquirer/prompts': 8.1.0(@types/node@20.19.1) + '@inquirer/prompts': 7.10.1(@types/node@20.19.1) '@napi-rs/cross-toolchain': 1.0.3 '@napi-rs/wasm-tools': 1.0.1 '@octokit/rest': 22.0.1 clipanion: 4.0.0-rc.4(typanion@3.14.0) colorette: 2.0.20 + debug: 4.4.3 emnapi: 1.7.1(node-addon-api@8.3.0) es-toolkit: 1.43.0 js-yaml: 4.1.0 - obug: 2.1.1 semver: 7.7.3 typanion: 3.14.0 optionalDependencies: @@ -6581,8 +6577,6 @@ snapshots: optionalDependencies: node-addon-api: 8.3.0 - emoji-regex@10.6.0: {} - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -7186,8 +7180,6 @@ snapshots: gensync@1.0.0-beta.2: {} - get-east-asian-width@1.4.0: {} - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7672,7 +7664,7 @@ snapshots: ms@2.1.3: {} - mute-stream@3.0.0: {} + mute-stream@2.0.0: {} mz@2.7.0: dependencies: @@ -7776,8 +7768,6 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - obug@2.1.1: {} - onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -8230,12 +8220,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string-width@7.2.0: - dependencies: - emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.0 - string.prototype.includes@2.0.1: dependencies: call-bind: 1.0.8 @@ -8718,6 +8702,12 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -8730,18 +8720,14 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - wrap-ansi@9.0.2: - dependencies: - ansi-styles: 6.2.1 - string-width: 7.2.0 - strip-ansi: 7.1.0 - yallist@3.1.1: {} yaml@2.6.0: {} yocto-queue@0.1.0: {} + yoctocolors-cjs@2.1.3: {} + zod-validation-error@4.0.2(zod@4.1.12): dependencies: zod: 4.1.12 From 197d21c438e9864f4433f2730dd227d82182d618 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 15:28:25 +0100 Subject: [PATCH 051/100] remove `.npmrc` with `auto-install-peers=true` This was necessary in previous versions of Node, but now that we use Node 24 in CI you get the following warning: > npm warn Unknown env config "auto-install-peers". This will stop working in the next major version of npm. So... let's get rid of it. --- .npmrc | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .npmrc diff --git a/.npmrc b/.npmrc deleted file mode 100644 index ded82e2f63f3..000000000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -auto-install-peers = true From ffcb96a52365bb81462c86cac6f006619b05a3f6 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 16:00:48 +0100 Subject: [PATCH 052/100] retry integration tests 3 times before actually failing This is not ideal, but it prevents some manual work when CI is a bit too flaky on the integration tests. This also prevents the CI job from re-running from scratch which should speed up the process as well. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1b5a50a82d97..bbd0bdbd2743 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "postbuild": "node ./scripts/pack-packages.mjs", "dev": "turbo dev --filter=!./playgrounds/*", "test": "cargo test && vitest run --hideSkippedTests", - "test:integrations": "vitest --root=./integrations", + "test:integrations": "vitest --root=./integrations --retry=3", "test:ui": "pnpm run --filter=tailwindcss test:ui && pnpm run --filter=@tailwindcss/browser test:ui", "tdd": "vitest --hideSkippedTests", "bench": "vitest bench", From 309d7f6e8a61dfdf1539899395ba9d033929a083 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 16:08:02 +0100 Subject: [PATCH 053/100] bump nuxt dependency in integration tests --- integrations/vite/nuxt.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrations/vite/nuxt.test.ts b/integrations/vite/nuxt.test.ts index a6ac545b93b3..a803a89dac8b 100644 --- a/integrations/vite/nuxt.test.ts +++ b/integrations/vite/nuxt.test.ts @@ -7,7 +7,7 @@ const SETUP = { "type": "module", "dependencies": { "@tailwindcss/vite": "workspace:^", - "nuxt": "3.14.0", + "nuxt": "3.16.0", "nitropack": "2.11.0", "tailwindcss": "workspace:^", "vue": "latest" From efd75c1abb4f4f5594ad6f4e09edd2c8089e435f Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 16:15:48 +0100 Subject: [PATCH 054/100] re-run integration tests in CI if they fail This prevents the CI job from having to restart the entire job. --- .github/workflows/integration-tests.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 647fbabffccf..57478689ca2a 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -105,7 +105,11 @@ jobs: CARGO_TARGET_X86_64_PC_WINDOWS_MSVC_LINKER: 'lld-link' - name: Test ${{ matrix.integration }} - run: pnpm run test:integrations ./integrations/${{ matrix.integration }} + run: | + pnpm run test:integrations ./integrations/${{ matrix.integration }} + || pnpm run test:integrations ./integrations/${{ matrix.integration }} + || pnpm run test:integrations ./integrations/${{ matrix.integration }} + env: GITHUB_WORKSPACE: ${{ github.workspace }} From 4b507b0a23b31fb345807becefec2b4bce8b1339 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 16:23:46 +0100 Subject: [PATCH 055/100] Revert "retry integration tests 3 times before actually failing" This reverts commit ffcb96a52365bb81462c86cac6f006619b05a3f6. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bbd0bdbd2743..1b5a50a82d97 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "postbuild": "node ./scripts/pack-packages.mjs", "dev": "turbo dev --filter=!./playgrounds/*", "test": "cargo test && vitest run --hideSkippedTests", - "test:integrations": "vitest --root=./integrations --retry=3", + "test:integrations": "vitest --root=./integrations", "test:ui": "pnpm run --filter=tailwindcss test:ui && pnpm run --filter=@tailwindcss/browser test:ui", "tdd": "vitest --hideSkippedTests", "bench": "vitest bench", From 22c06185831fc3630cb39f0b44a4a26db39b0253 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 16:23:56 +0100 Subject: [PATCH 056/100] Revert "re-run integration tests in CI if they fail" This reverts commit efd75c1abb4f4f5594ad6f4e09edd2c8089e435f. --- .github/workflows/integration-tests.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 57478689ca2a..647fbabffccf 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -105,11 +105,7 @@ jobs: CARGO_TARGET_X86_64_PC_WINDOWS_MSVC_LINKER: 'lld-link' - name: Test ${{ matrix.integration }} - run: | - pnpm run test:integrations ./integrations/${{ matrix.integration }} - || pnpm run test:integrations ./integrations/${{ matrix.integration }} - || pnpm run test:integrations ./integrations/${{ matrix.integration }} - + run: pnpm run test:integrations ./integrations/${{ matrix.integration }} env: GITHUB_WORKSPACE: ${{ github.workspace }} From b8454b0b3fbcc2bee499936462cb2ae9cdff2047 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 16:40:50 +0100 Subject: [PATCH 057/100] Revert "temporarily disable discord notifications" This reverts commit 7d78fda879262e11defae758e8111a193199e053. --- .github/workflows/ci.yml | 12 ++++++------ .github/workflows/integration-tests.yml | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b4f8d75921a7..d8c099873b64 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -106,9 +106,9 @@ jobs: - name: Run Playwright tests run: npm run test:ui - # - name: Notify Discord - # if: failure() && github.ref == 'refs/heads/main' - # uses: discord-actions/message@v2 - # with: - # webhookUrl: ${{ secrets.DISCORD_WEBHOOK_URL }} - # message: 'The [most recent build](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) on the `main` branch has failed.' + - name: Notify Discord + if: failure() && github.ref == 'refs/heads/main' + uses: discord-actions/message@v2 + with: + webhookUrl: ${{ secrets.DISCORD_WEBHOOK_URL }} + message: 'The [most recent build](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) on the `main` branch has failed.' diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 647fbabffccf..e36f5b3abc47 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -109,9 +109,9 @@ jobs: env: GITHUB_WORKSPACE: ${{ github.workspace }} - # - name: Notify Discord - # if: failure() && github.ref == 'refs/heads/main' - # uses: discord-actions/message@v2 - # with: - # webhookUrl: ${{ secrets.DISCORD_WEBHOOK_URL }} - # message: 'The [most recent build](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) on the `main` branch has failed.' + - name: Notify Discord + if: failure() && github.ref == 'refs/heads/main' + uses: discord-actions/message@v2 + with: + webhookUrl: ${{ secrets.DISCORD_WEBHOOK_URL }} + message: 'The [most recent build](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) on the `main` branch has failed.' From 79711678fac74f61aae17b25ce51b5f6c409bb31 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 6 Jan 2026 20:58:00 +0100 Subject: [PATCH 058/100] workaround: increase some CI timeouts --- integrations/upgrade/index.test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/integrations/upgrade/index.test.ts b/integrations/upgrade/index.test.ts index 029ed77a89b3..46b657694ca3 100644 --- a/integrations/upgrade/index.test.ts +++ b/integrations/upgrade/index.test.ts @@ -175,7 +175,7 @@ test( `upgrades a v3 project with prefixes to v4`, { // Somehow this test takes *way* longer than the rest (but not always?) - timeout: 120_000, + timeout: 180_000, fs: { 'package.json': json` { @@ -603,6 +603,7 @@ test( test( 'migrates a simple postcss setup', { + timeout: 120_000, fs: { 'package.json': json` { @@ -774,6 +775,7 @@ test( test( 'migrates a postcss setup using package.json config', { + timeout: 120_000, fs: { 'package.json': json` { @@ -847,6 +849,7 @@ test( test( 'migrates a postcss setup using a json based config file', { + timeout: 120_000, fs: { 'package.json': json` { From bccf4bbfbd2c4203e5673a6196f01c73e20dca98 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Thu, 29 Jan 2026 15:16:31 +0100 Subject: [PATCH 059/100] Add @tailwindcss/webpack loader for Tailwind CSS v4 (#19610) ## Summary This PR adds a new `@tailwindcss/webpack` package that provides a dedicated webpack loader for Tailwind CSS v4. This loader works with both standard webpack and Turbopack's webpack loader compatibility layer. ### Why a dedicated loader? The current webpack integration uses `postcss-loader` + `@tailwindcss/postcss`. While this works, a dedicated loader: - **Eliminates PostCSS as a middleman** - works directly with CSS strings (no AST conversions) - **Simpler and more efficient** - follows the same pattern as `@tailwindcss/vite` - **Better for Turbopack** - gives direct control over dependency reporting via webpack's loader API ### How it works The loader mirrors the Vite plugin's approach: 1. Uses `compile()` from `@tailwindcss/node` to parse CSS and resolve `@apply` directives 2. Uses `Scanner` from `@tailwindcss/oxide` to scan content files for utility candidates 3. Reports dependencies via `this.addDependency()` and `this.addContextDependency()` 4. Optionally optimizes output with Lightning CSS ### Usage ```javascript // webpack.config.js module.exports = { module: { rules: [ { test: /.css$/i, use: [ MiniCssExtractPlugin.loader, 'css-loader', '@tailwindcss/webpack', // No PostCSS needed! ], }, ], }, } ``` ### Options - `base` - The base directory to scan for class candidates (defaults to `process.cwd()`) - `optimize` - Whether to optimize/minify the output CSS (defaults to `true` in production) ### Files added - `packages/@tailwindcss-webpack/` - New package - `src/index.ts` - Main loader implementation - `src/index.cts` - CommonJS entry point for webpack compatibility - `package.json`, `tsconfig.json`, `tsup.config.ts`, `README.md` - `integrations/webpack/loader.test.ts` - Integration tests - `integrations/utils.ts` - Added webpack override for transitive dependencies ### Test plan - [x] Build test - verifies basic compilation - [x] Watch test - verifies HMR when adding new Tailwind classes - [x] `@apply` test - verifies `@apply` directives work correctly - [x] Optimization test - verifies minification works --------- Co-authored-by: Robin Malfait --- CHANGELOG.md | 1 + integrations/utils.ts | 1 + integrations/webpack/loader.test.ts | 420 +++++++++++++++++ packages/@tailwindcss-postcss/README.md | 12 +- packages/@tailwindcss-webpack/README.md | 64 +++ packages/@tailwindcss-webpack/package.json | 46 ++ packages/@tailwindcss-webpack/src/index.cts | 5 + packages/@tailwindcss-webpack/src/index.ts | 282 ++++++++++++ packages/@tailwindcss-webpack/tsconfig.json | 3 + packages/@tailwindcss-webpack/tsup.config.ts | 19 + pnpm-lock.yaml | 447 ++++++++++++++++++- pnpm-workspace.yaml | 1 + 12 files changed, 1286 insertions(+), 15 deletions(-) create mode 100644 integrations/webpack/loader.test.ts create mode 100644 packages/@tailwindcss-webpack/README.md create mode 100644 packages/@tailwindcss-webpack/package.json create mode 100644 packages/@tailwindcss-webpack/src/index.cts create mode 100644 packages/@tailwindcss-webpack/src/index.ts create mode 100644 packages/@tailwindcss-webpack/tsconfig.json create mode 100644 packages/@tailwindcss-webpack/tsup.config.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index b66ebaea00dd..9d6710ddca43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) +- Add `@tailwindcss/webpack` loader for Tailwind CSS v4 ([#19610](https://github.com/tailwindlabs/tailwindcss/pull/19610)) ## [4.1.18] - 2025-12-11 diff --git a/integrations/utils.ts b/integrations/utils.ts index a2fc0d58af9a..c5d3306c4677 100644 --- a/integrations/utils.ts +++ b/integrations/utils.ts @@ -498,6 +498,7 @@ async function overwriteVersionsInPackageJson(content: string): Promise 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) } else { json.pnpm.overrides[pkg] = resolveVersion(pkg) } diff --git a/integrations/webpack/loader.test.ts b/integrations/webpack/loader.test.ts new file mode 100644 index 000000000000..3a3782c0d7a3 --- /dev/null +++ b/integrations/webpack/loader.test.ts @@ -0,0 +1,420 @@ +import { css, html, js, json, test } from '../utils' + +test( + '@tailwindcss/webpack loader (build)', + { + fs: { + 'package.json': json` + { + "main": "./src/index.js", + "browser": "./src/index.js", + "dependencies": { + "css-loader": "^6", + "webpack": "^5", + "webpack-cli": "^5", + "mini-css-extract-plugin": "^2", + "tailwindcss": "workspace:^", + "@tailwindcss/webpack": "workspace:^" + } + } + `, + 'webpack.config.js': js` + let MiniCssExtractPlugin = require('mini-css-extract-plugin') + + module.exports = { + output: { + clean: true, + }, + plugins: [new MiniCssExtractPlugin()], + module: { + rules: [ + { + test: /.css$/i, + use: [MiniCssExtractPlugin.loader, 'css-loader', '@tailwindcss/webpack'], + }, + ], + }, + } + `, + 'src/index.js': js`import './index.css'`, + 'src/index.html': html` +
+ `, + 'src/index.css': css` + @import 'tailwindcss/theme'; + @import 'tailwindcss/utilities'; + `, + }, + }, + async ({ fs, exec, expect }) => { + await exec('pnpm webpack --mode=development') + + expect(await fs.dumpFiles('./dist/*.css')).toMatchInlineSnapshot(` + " + --- ./dist/main.css --- + .flex { + display: flex; + } + " + `) + }, +) + +test( + '@tailwindcss/webpack loader (watch)', + { + fs: { + 'package.json': json` + { + "main": "./src/index.js", + "browser": "./src/index.js", + "dependencies": { + "css-loader": "^6", + "webpack": "^5", + "webpack-cli": "^5", + "mini-css-extract-plugin": "^2", + "tailwindcss": "workspace:^", + "@tailwindcss/webpack": "workspace:^" + } + } + `, + 'webpack.config.js': js` + let MiniCssExtractPlugin = require('mini-css-extract-plugin') + + module.exports = { + output: { + clean: true, + }, + plugins: [new MiniCssExtractPlugin()], + module: { + rules: [ + { + test: /.css$/i, + use: [MiniCssExtractPlugin.loader, 'css-loader', '@tailwindcss/webpack'], + }, + ], + }, + } + `, + 'src/index.js': js`import './index.css'`, + 'src/index.html': html` +
+ `, + 'src/index.css': css` + @import 'tailwindcss/theme'; + @import 'tailwindcss/utilities'; + `, + }, + }, + async ({ fs, spawn, exec, expect }) => { + // Generate the initial build so output CSS files exist on disk + await exec('pnpm webpack --mode=development') + + let process = await spawn('pnpm webpack --mode=development --watch') + await process.onStdout((m) => m.includes('compiled successfully in')) + + expect(await fs.dumpFiles('./dist/*.css')).toMatchInlineSnapshot(` + " + --- ./dist/main.css --- + .flex { + display: flex; + } + " + `) + + // Add a new Tailwind class to the HTML file + await fs.write('src/index.html', html` +
+ `) + await process.onStdout((m) => m.includes('compiled successfully in')) + + expect(await fs.dumpFiles('./dist/*.css')).toMatchInlineSnapshot(` + " + --- ./dist/main.css --- + .flex { + display: flex; + } + .underline { + text-decoration-line: underline; + } + " + `) + }, +) + +test( + '@tailwindcss/webpack loader with @apply', + { + fs: { + 'package.json': json` + { + "main": "./src/index.js", + "browser": "./src/index.js", + "dependencies": { + "css-loader": "^6", + "webpack": "^5", + "webpack-cli": "^5", + "mini-css-extract-plugin": "^2", + "tailwindcss": "workspace:^", + "@tailwindcss/webpack": "workspace:^" + } + } + `, + 'webpack.config.js': js` + let MiniCssExtractPlugin = require('mini-css-extract-plugin') + + module.exports = { + output: { + clean: true, + }, + plugins: [new MiniCssExtractPlugin()], + module: { + rules: [ + { + test: /.css$/i, + use: [MiniCssExtractPlugin.loader, 'css-loader', '@tailwindcss/webpack'], + }, + ], + }, + } + `, + 'src/index.js': js`import './index.css'`, + 'src/index.css': css` + @import 'tailwindcss/theme'; + + .btn { + @apply flex items-center px-4 py-2 rounded-md; + } + `, + }, + }, + async ({ fs, exec, expect }) => { + await exec('pnpm webpack --mode=development') + + expect(await fs.dumpFiles('./dist/*.css')).toMatchInlineSnapshot(` + " + --- ./dist/main.css --- + :root, :host { + --spacing: 0.25rem; + --radius-md: 0.375rem; + } + .btn { + display: flex; + align-items: center; + border-radius: var(--radius-md); + padding-inline: calc(var(--spacing) * 4); + padding-block: calc(var(--spacing) * 2); + } + " + `) + }, +) + +test( + '@tailwindcss/webpack loader with optimization', + { + fs: { + 'package.json': json` + { + "main": "./src/index.js", + "browser": "./src/index.js", + "dependencies": { + "css-loader": "^6", + "webpack": "^5", + "webpack-cli": "^5", + "mini-css-extract-plugin": "^2", + "tailwindcss": "workspace:^", + "@tailwindcss/webpack": "workspace:^" + } + } + `, + 'webpack.config.js': js` + let MiniCssExtractPlugin = require('mini-css-extract-plugin') + + module.exports = { + output: { + clean: true, + }, + plugins: [new MiniCssExtractPlugin()], + module: { + rules: [ + { + test: /.css$/i, + use: [ + MiniCssExtractPlugin.loader, + 'css-loader', + { + loader: '@tailwindcss/webpack', + options: { + optimize: true, + }, + }, + ], + }, + ], + }, + } + `, + 'src/index.js': js`import './index.css'`, + 'src/index.html': html` +
+ `, + 'src/index.css': css` + @import 'tailwindcss/theme'; + @import 'tailwindcss/utilities'; + `, + }, + }, + async ({ fs, exec, expect }) => { + await exec('pnpm webpack --mode=development') + + expect(await fs.dumpFiles('./dist/*.css')).toMatchInlineSnapshot(` + " + --- ./dist/main.css --- + .flex{display:flex} + " + `) + }, +) + +test( + '@tailwindcss/webpack loader with CSS @import', + { + fs: { + 'package.json': json` + { + "main": "./src/index.js", + "browser": "./src/index.js", + "dependencies": { + "css-loader": "^6", + "webpack": "^5", + "webpack-cli": "^5", + "mini-css-extract-plugin": "^2", + "tailwindcss": "workspace:^", + "@tailwindcss/webpack": "workspace:^" + } + } + `, + 'webpack.config.js': js` + let MiniCssExtractPlugin = require('mini-css-extract-plugin') + + module.exports = { + output: { + clean: true, + }, + plugins: [new MiniCssExtractPlugin()], + module: { + rules: [ + { + test: /.css$/i, + use: [MiniCssExtractPlugin.loader, 'css-loader', '@tailwindcss/webpack'], + }, + ], + }, + } + `, + 'src/index.js': js`import './index.css'`, + 'src/index.html': html` +
+ `, + 'src/index.css': css` + @import './custom.css'; + @import 'tailwindcss/theme'; + @import 'tailwindcss/utilities'; + `, + 'src/custom.css': css` + /**/ + @utility custom-util { + color: var(--color-red-500); + } + `, + }, + }, + async ({ fs, exec, expect }) => { + await exec('pnpm webpack --mode=development') + + expect(await fs.dumpFiles('./dist/*.css')).toMatchInlineSnapshot(` + " + --- ./dist/main.css --- + :root, :host { + --color-red-500: oklch(63.7% 0.237 25.331); + } + .flex { + display: flex; + } + .custom-util { + color: var(--color-red-500); + } + " + `) + }, +) + +test( + '@tailwindcss/webpack loader with @plugin', + { + fs: { + 'package.json': json` + { + "main": "./src/index.js", + "browser": "./src/index.js", + "dependencies": { + "css-loader": "^6", + "webpack": "^5", + "webpack-cli": "^5", + "mini-css-extract-plugin": "^2", + "tailwindcss": "workspace:^", + "@tailwindcss/webpack": "workspace:^" + } + } + `, + 'webpack.config.js': js` + let MiniCssExtractPlugin = require('mini-css-extract-plugin') + + module.exports = { + output: { + clean: true, + }, + plugins: [new MiniCssExtractPlugin()], + module: { + rules: [ + { + test: /.css$/i, + use: [MiniCssExtractPlugin.loader, 'css-loader', '@tailwindcss/webpack'], + }, + ], + }, + } + `, + 'src/index.js': js`import './index.css'`, + 'src/index.html': html` +
+ `, + 'src/index.css': css` + @import 'tailwindcss/utilities'; + @plugin './plugin.js'; + `, + 'src/plugin.js': js` + export default function ({ addUtilities }) { + addUtilities({ + '.custom-underline': { + 'border-bottom': '1px solid green', + }, + }) + } + `, + }, + }, + async ({ fs, exec, expect }) => { + await exec('pnpm webpack --mode=development') + + expect(await fs.dumpFiles('./dist/*.css')).toMatchInlineSnapshot(` + " + --- ./dist/main.css --- + .custom-underline { + border-bottom: 1px solid green; + } + " + `) + }, +) diff --git a/packages/@tailwindcss-postcss/README.md b/packages/@tailwindcss-postcss/README.md index db2a6b9a007d..867389f0ea79 100644 --- a/packages/@tailwindcss-postcss/README.md +++ b/packages/@tailwindcss-postcss/README.md @@ -44,14 +44,14 @@ If you're interested in contributing to Tailwind CSS, please read our [contribut You can use the `base` option (defaults to the current working directory) to change the directory in which the plugin searches for source files: ```js -import tailwindcss from "@tailwindcss/postcss" +import tailwindcss from '@tailwindcss/postcss' export default { - plugins: [ - tailwindcss({ - base: path.resolve(__dirname, "./path") - }) - ] + plugins: [ + tailwindcss({ + base: path.resolve(__dirname, './path'), + }), + ], } ``` diff --git a/packages/@tailwindcss-webpack/README.md b/packages/@tailwindcss-webpack/README.md new file mode 100644 index 000000000000..55e60562203c --- /dev/null +++ b/packages/@tailwindcss-webpack/README.md @@ -0,0 +1,64 @@ +# @tailwindcss/webpack + +A webpack loader for Tailwind CSS v4. + +## Installation + +```sh +npm install @tailwindcss/webpack +``` + +## Usage + +```javascript +// webpack.config.js +const MiniCssExtractPlugin = require('mini-css-extract-plugin') + +module.exports = { + plugins: [new MiniCssExtractPlugin()], + module: { + rules: [ + { + test: /\.css$/i, + use: [MiniCssExtractPlugin.loader, 'css-loader', '@tailwindcss/webpack'], + }, + ], + }, +} +``` + +Then create a CSS file that imports Tailwind: + +```css +/* src/index.css */ +@import 'tailwindcss/theme'; +@import 'tailwindcss/utilities'; +``` + +## Options + +### `base` + +The base directory to scan for class candidates. Defaults to the current working directory. + +```javascript +{ + loader: '@tailwindcss/webpack', + options: { + base: process.cwd(), + }, +} +``` + +### `optimize` + +Whether to optimize and minify the output CSS. Defaults to `true` in production mode. + +```javascript +{ + loader: '@tailwindcss/webpack', + options: { + optimize: true, // or { minify: true } + }, +} +``` diff --git a/packages/@tailwindcss-webpack/package.json b/packages/@tailwindcss-webpack/package.json new file mode 100644 index 000000000000..e22cb79355d1 --- /dev/null +++ b/packages/@tailwindcss-webpack/package.json @@ -0,0 +1,46 @@ +{ + "name": "@tailwindcss/webpack", + "version": "4.1.18", + "description": "A webpack loader for Tailwind CSS v4.", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/tailwindlabs/tailwindcss.git", + "directory": "packages/@tailwindcss-webpack" + }, + "bugs": "https://github.com/tailwindlabs/tailwindcss/issues", + "homepage": "https://tailwindcss.com", + "scripts": { + "build": "tsup-node", + "dev": "pnpm run build -- --watch" + }, + "files": [ + "dist/" + ], + "publishConfig": { + "provenance": true, + "access": "public" + }, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + } + }, + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "workspace:*", + "@tailwindcss/oxide": "workspace:*", + "tailwindcss": "workspace:*" + }, + "devDependencies": { + "@types/node": "catalog:", + "webpack": "catalog:" + }, + "peerDependencies": { + "webpack": "^5" + } +} diff --git a/packages/@tailwindcss-webpack/src/index.cts b/packages/@tailwindcss-webpack/src/index.cts new file mode 100644 index 000000000000..dbdded748a92 --- /dev/null +++ b/packages/@tailwindcss-webpack/src/index.cts @@ -0,0 +1,5 @@ +import tailwindLoader from './index.ts' + +// CommonJS export for webpack loaders - must be the function directly +// @ts-ignore +export = tailwindLoader diff --git a/packages/@tailwindcss-webpack/src/index.ts b/packages/@tailwindcss-webpack/src/index.ts new file mode 100644 index 000000000000..2c78a552b9e7 --- /dev/null +++ b/packages/@tailwindcss-webpack/src/index.ts @@ -0,0 +1,282 @@ +import QuickLRU from '@alloc/quick-lru' +import { + compile, + env, + Features, + Instrumentation, + normalizePath, + optimize, + Polyfills, +} from '@tailwindcss/node' +import { clearRequireCache } from '@tailwindcss/node/require-cache' +import { Scanner } from '@tailwindcss/oxide' +import fs from 'node:fs' +import path from 'node:path' +import type { LoaderContext } from 'webpack' + +const DEBUG = env.DEBUG + +export interface LoaderOptions { + /** + * The base directory to scan for class candidates. + * + * Defaults to the current working directory. + */ + base?: string + + /** + * Optimize and minify the output CSS. + */ + optimize?: boolean | { minify?: boolean } +} + +interface CacheEntry { + mtimes: Map + compiler: null | Awaited> + scanner: null | Scanner + candidates: Set + fullRebuildPaths: string[] +} + +const cache = new QuickLRU({ maxSize: 50 }) + +function getContextFromCache(inputFile: string, opts: LoaderOptions): CacheEntry { + let key = `${inputFile}:${opts.base ?? ''}:${JSON.stringify(opts.optimize)}` + if (cache.has(key)) return cache.get(key)! + let entry: CacheEntry = { + mtimes: new Map(), + compiler: null, + scanner: null, + candidates: new Set(), + fullRebuildPaths: [], + } + cache.set(key, entry) + return entry +} + +export default async function tailwindLoader( + this: LoaderContext, + source: string, +): Promise { + let callback = this.async() + let options = this.getOptions() ?? {} + let inputFile = this.resourcePath + let base = options.base ?? process.cwd() + let shouldOptimize = options.optimize ?? process.env.NODE_ENV === 'production' + let isCSSModuleFile = inputFile.endsWith('.module.css') + + using I = new Instrumentation() + + DEBUG && I.start(`[@tailwindcss/webpack] ${path.relative(base, inputFile)}`) + + // Bail out early if this is guaranteed to be a non-Tailwind CSS file. + { + DEBUG && I.start('Quick bail check') + let canBail = !/@(import|reference|theme|variant|config|plugin|apply|tailwind)\b/.test(source) + if (canBail) { + DEBUG && I.end('Quick bail check') + DEBUG && I.end(`[@tailwindcss/webpack] ${path.relative(base, inputFile)}`) + callback(null, source) + return + } + DEBUG && I.end('Quick bail check') + } + + try { + let context = getContextFromCache(inputFile, options) + let inputBasePath = path.dirname(path.resolve(inputFile)) + + // Whether this is the first build or not + let isInitialBuild = context.compiler === null + + async function createCompiler() { + DEBUG && I.start('Setup compiler') + if (context.fullRebuildPaths.length > 0 && !isInitialBuild) { + clearRequireCache(context.fullRebuildPaths) + } + + context.fullRebuildPaths = [] + + DEBUG && I.start('Create compiler') + let compiler = await compile(source, { + from: inputFile, + base: inputBasePath, + shouldRewriteUrls: true, + onDependency: (depPath) => context.fullRebuildPaths.push(depPath), + // In CSS Module files, we have to disable the `@property` polyfill since these will + // emit global `*` rules which are considered to be non-pure and will cause builds + // to fail. + polyfills: isCSSModuleFile ? Polyfills.All ^ Polyfills.AtProperty : Polyfills.All, + }) + DEBUG && I.end('Create compiler') + + DEBUG && I.end('Setup compiler') + return compiler + } + + // Setup the compiler if it doesn't exist yet + context.compiler ??= await createCompiler() + + // Early exit if no Tailwind features are used + if (context.compiler.features === Features.None) { + DEBUG && I.end(`[@tailwindcss/webpack] ${path.relative(base, inputFile)}`) + callback(null, source) + return + } + + let rebuildStrategy: 'full' | 'incremental' = 'incremental' + + // Track file modification times to CSS files + DEBUG && I.start('Register full rebuild paths') + { + // Report dependencies for config files, plugins, etc. + for (let file of context.fullRebuildPaths) { + this.addDependency(path.resolve(file)) + } + + let files = [...context.fullRebuildPaths, inputFile] + + for (let file of files) { + let changedTime: number | null = null + try { + changedTime = fs.statSync(file)?.mtimeMs ?? null + } catch { + // File might not exist + } + + if (changedTime === null) { + if (file === inputFile) { + rebuildStrategy = 'full' + } + continue + } + + let prevTime = context.mtimes.get(file) + if (prevTime === changedTime) continue + + rebuildStrategy = 'full' + context.mtimes.set(file, changedTime) + } + } + DEBUG && I.end('Register full rebuild paths') + + if (rebuildStrategy === 'full' && !isInitialBuild) { + context.compiler = await createCompiler() + } + + let compiler = context.compiler + + // Check if we need to process this file at all + if ( + !( + compiler.features & + (Features.AtApply | Features.JsPluginCompat | Features.ThemeFunction | Features.Utilities) + ) + ) { + DEBUG && I.end(`[@tailwindcss/webpack] ${path.relative(base, inputFile)}`) + callback(null, source) + return + } + + // Setup or update scanner if needed + if (context.scanner === null || rebuildStrategy === 'full') { + DEBUG && I.start('Setup scanner') + let sources = (() => { + // Disable auto source detection + if (compiler.root === 'none') { + return [] + } + + // No root specified, use the base directory + if (compiler.root === null) { + return [{ base, pattern: '**/*', negated: false }] + } + + // Use the specified root + return [{ ...compiler.root, negated: false }] + })().concat(compiler.sources) + + context.scanner = new Scanner({ sources }) + DEBUG && I.end('Setup scanner') + } + + // Scan for candidates if utilities are used + if (compiler.features & Features.Utilities) { + DEBUG && I.start('Scan for candidates') + for (let candidate of context.scanner.scan()) { + context.candidates.add(candidate) + } + DEBUG && I.end('Scan for candidates') + + DEBUG && I.start('Register dependency messages') + // Add all found files as direct dependencies + let resolvedInputFile = path.resolve(base, inputFile) + for (let file of context.scanner.files) { + let absolutePath = path.resolve(file) + // The CSS file cannot be a dependency of itself + if (absolutePath === resolvedInputFile) { + continue + } + this.addDependency(absolutePath) + } + + // Register context dependencies for glob patterns + for (let glob of context.scanner.globs) { + // Skip negated patterns + if (glob.pattern[0] === '!') continue + + // Avoid adding a dependency on the base directory itself + if (glob.pattern === '*' && base === glob.base) { + continue + } + + this.addContextDependency(path.resolve(glob.base)) + } + + // Validate that source(...) paths are directories + let root = compiler.root + if (root !== 'none' && root !== null) { + let basePath = normalizePath(path.resolve(root.base, root.pattern)) + try { + let stats = fs.statSync(basePath) + if (!stats.isDirectory()) { + throw new Error( + `The path given to \`source(…)\` must be a directory but got \`source(${basePath})\` instead.`, + ) + } + } catch (err) { + if ((err as NodeJS.ErrnoException).code !== 'ENOENT') { + throw err + } + // Directory doesn't exist yet, which is fine + } + } + DEBUG && I.end('Register dependency messages') + } + + DEBUG && I.start('Build utilities') + let css = compiler.build([...context.candidates]) + DEBUG && I.end('Build utilities') + + // Optionally optimize the output + let result = css + if (shouldOptimize) { + DEBUG && I.start('Optimization') + let optimized = optimize(css, { + minify: typeof shouldOptimize === 'object' ? shouldOptimize.minify : true, + }) + result = optimized.code + DEBUG && I.end('Optimization') + } + + DEBUG && I.end(`[@tailwindcss/webpack] ${path.relative(base, inputFile)}`) + callback(null, result) + } catch (error) { + // Clear the cache entry on error to force a full rebuild next time + let key = `${inputFile}:${options.base ?? ''}:${JSON.stringify(options.optimize)}` + cache.delete(key) + + DEBUG && I.end(`[@tailwindcss/webpack] ${path.relative(base, inputFile)}`) + callback(error as Error) + } +} diff --git a/packages/@tailwindcss-webpack/tsconfig.json b/packages/@tailwindcss-webpack/tsconfig.json new file mode 100644 index 000000000000..6ae022f65bf0 --- /dev/null +++ b/packages/@tailwindcss-webpack/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../tsconfig.base.json", +} diff --git a/packages/@tailwindcss-webpack/tsup.config.ts b/packages/@tailwindcss-webpack/tsup.config.ts new file mode 100644 index 000000000000..998eebe4fe0d --- /dev/null +++ b/packages/@tailwindcss-webpack/tsup.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from 'tsup' + +export default defineConfig([ + { + format: ['esm'], + clean: true, + minify: true, + cjsInterop: true, + dts: true, + entry: ['src/index.ts'], + }, + { + format: ['cjs'], + minify: true, + cjsInterop: true, + dts: true, + entry: ['src/index.cts'], + }, +]) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d32bc3c6495f..a7d9cf6f1ac4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,6 +39,9 @@ catalogs: vite: specifier: ^7.0.0 version: 7.0.0 + webpack: + specifier: ^5 + version: 5.104.1 patchedDependencies: '@parcel/watcher@2.5.1': @@ -445,6 +448,28 @@ importers: specifier: 'catalog:' version: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + packages/@tailwindcss-webpack: + dependencies: + '@alloc/quick-lru': + specifier: ^5.2.0 + version: 5.2.0 + '@tailwindcss/node': + specifier: workspace:* + version: link:../@tailwindcss-node + '@tailwindcss/oxide': + specifier: workspace:* + version: link:../../crates/node + tailwindcss: + specifier: workspace:* + version: link:../tailwindcss + devDependencies: + '@types/node': + specifier: 'catalog:' + version: 20.19.1 + webpack: + specifier: 'catalog:' + version: 5.104.1(esbuild@0.27.0) + packages/internal-example-plugin: {} packages/tailwindcss: @@ -2333,6 +2358,12 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -2456,6 +2487,63 @@ packages: '@vitest/utils@4.0.12': resolution: {integrity: sha512-DVS/TLkLdvGvj1avRy0LSmKfrcI9MNFvNGN6ECjTUHWJdlcgPDOXhjMis5Dh7rBH62nAmSXnkPbE+DZ5YD75Rw==} + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + acorn-import-phases@1.0.4: + resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} + engines: {node: '>=10.13.0'} + peerDependencies: + acorn: ^8.14.0 + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2471,9 +2559,25 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2669,6 +2773,10 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} @@ -2873,6 +2981,9 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -2989,6 +3100,10 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3023,6 +3138,10 @@ packages: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -3034,6 +3153,10 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -3069,6 +3192,9 @@ packages: fast-stringify@4.0.0: resolution: {integrity: sha512-lE2DIivBaLysf6hK5WH/VfMgqRbvBVHcpGVVTmA5Zi8oWIjq9YxIt6lYGdUgP1HNSXxTIat7HEIDnrSvXSeKQw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -3180,6 +3306,9 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true @@ -3430,6 +3559,10 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + jiti@1.21.6: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true @@ -3461,9 +3594,15 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -3576,6 +3715,10 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + loader-runner@4.3.1: + resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} + engines: {node: '>=6.11.5'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -3618,6 +3761,14 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -3673,6 +3824,9 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + next@16.1.0: resolution: {integrity: sha512-Y+KbmDbefYtHDDQKLNrmzE/YYzG2msqo2VXhzh5yrJ54tx/6TmGdkR5+kP9ma7i7LwZpZMfoY3m/AoPPPKxtVw==} engines: {node: '>=20.9.0'} @@ -3987,6 +4141,9 @@ packages: radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + react-dom@19.2.3: resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} peerDependencies: @@ -4022,6 +4179,10 @@ packages: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -4057,6 +4218,9 @@ packages: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-push-apply@1.0.0: resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} @@ -4071,6 +4235,10 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + schema-utils@4.3.3: + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} + engines: {node: '>= 10.13.0'} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4080,6 +4248,9 @@ packages: engines: {node: '>=10'} hasBin: true + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -4232,6 +4403,10 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -4253,6 +4428,26 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.3.16: + resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + terser@5.31.6: resolution: {integrity: sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==} engines: {node: '>=10'} @@ -4558,6 +4753,24 @@ packages: jsdom: optional: true + watchpack@2.5.1: + resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} + engines: {node: '>=10.13.0'} + + webpack-sources@3.3.3: + resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} + engines: {node: '>=10.13.0'} + + webpack@5.104.1: + resolution: {integrity: sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -5293,7 +5506,6 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 - optional: true '@jridgewell/sourcemap-codec@1.5.0': {} @@ -5941,6 +6153,16 @@ snapshots: '@types/deep-eql@4.0.2': {} + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.8 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@types/estree@1.0.8': {} '@types/json-schema@7.0.15': {} @@ -6194,6 +6416,90 @@ snapshots: '@vitest/pretty-format': 4.0.12 tinyrainbow: 3.0.3 + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + acorn-import-phases@1.0.4(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -6202,6 +6508,15 @@ snapshots: acorn@8.15.0: {} + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -6209,6 +6524,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} @@ -6359,8 +6681,7 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) - buffer-from@1.1.2: - optional: true + buffer-from@1.1.2: {} bun-types@1.3.5: dependencies: @@ -6437,6 +6758,8 @@ snapshots: dependencies: readdirp: 4.1.1 + chrome-trace-event@1.0.4: {} + citty@0.1.6: dependencies: consola: 3.2.3 @@ -6463,8 +6786,7 @@ snapshots: colorette@2.0.20: {} - commander@2.20.3: - optional: true + commander@2.20.3: {} commander@4.1.1: {} @@ -6666,6 +6988,8 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-lexer@2.0.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -6994,6 +7318,11 @@ snapshots: string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 @@ -7058,6 +7387,8 @@ snapshots: dependencies: estraverse: 5.3.0 + estraverse@4.3.0: {} + estraverse@5.3.0: {} estree-walker@3.0.3: @@ -7066,6 +7397,8 @@ snapshots: esutils@2.0.3: {} + events@3.3.0: {} + execa@8.0.1: dependencies: cross-spawn: 7.0.6 @@ -7108,6 +7441,8 @@ snapshots: fast-stringify@4.0.0: {} + fast-uri@3.1.0: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -7220,6 +7555,8 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} + glob@10.4.5: dependencies: foreground-child: 3.3.0 @@ -7468,6 +7805,12 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jest-worker@27.5.1: + dependencies: + '@types/node': 20.19.1 + merge-stream: 2.0.0 + supports-color: 8.1.1 + jiti@1.21.6: {} jiti@2.4.2: {} @@ -7486,8 +7829,12 @@ snapshots: json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} + json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@1.0.2: @@ -7589,6 +7936,8 @@ snapshots: load-tsconfig@0.2.5: {} + loader-runner@4.3.1: {} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -7630,6 +7979,12 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + mimic-fn@4.0.0: {} mini-svg-data-uri@1.4.4: {} @@ -7678,6 +8033,8 @@ snapshots: natural-compare@1.4.0: {} + neo-async@2.6.2: {} + next@16.1.0(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@next/env': 16.1.0 @@ -7972,6 +8329,10 @@ snapshots: radix3@1.1.2: {} + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + react-dom@19.2.3(react@19.2.3): dependencies: react: 19.2.3 @@ -8013,6 +8374,8 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 + require-from-string@2.0.2: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -8071,6 +8434,8 @@ snapshots: has-symbols: 1.1.0 isarray: 2.0.5 + safe-buffer@5.2.1: {} + safe-push-apply@1.0.0: dependencies: es-errors: 1.3.0 @@ -8086,10 +8451,21 @@ snapshots: scheduler@0.27.0: {} + schema-utils@4.3.3: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + semver@6.3.1: {} semver@7.7.3: {} + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -8190,10 +8566,8 @@ snapshots: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - optional: true - source-map@0.6.1: - optional: true + source-map@0.6.1: {} source-map@0.7.6: {} @@ -8302,6 +8676,10 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} system-architecture@0.1.0: {} @@ -8337,13 +8715,25 @@ snapshots: tapable@2.2.1: {} + tapable@2.3.0: {} + + terser-webpack-plugin@5.3.16(esbuild@0.27.0)(webpack@5.104.1(esbuild@0.27.0)): + dependencies: + '@jridgewell/trace-mapping': 0.3.29 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + serialize-javascript: 6.0.2 + terser: 5.31.6 + webpack: 5.104.1(esbuild@0.27.0) + optionalDependencies: + esbuild: 0.27.0 + terser@5.31.6: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 - optional: true thenify-all@1.6.0: dependencies: @@ -8650,6 +9040,45 @@ snapshots: - tsx - yaml + watchpack@2.5.1: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + webpack-sources@3.3.3: {} + + webpack@5.104.1(esbuild@0.27.0): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.15.0 + acorn-import-phases: 1.0.4(acorn@8.15.0) + browserslist: 4.28.1 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.4 + es-module-lexer: 2.0.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.16(esbuild@0.27.0)(webpack@5.104.1(esbuild@0.27.0)) + watchpack: 2.5.1 + webpack-sources: 3.3.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8f662c07fc67..ba9aedcb6660 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,6 +9,7 @@ catalog: '@types/node': ^20.19.0 prettier: 3.6.2 vite: ^7.0.0 + webpack: ^5 lightningcss: 1.30.2 lightningcss-darwin-arm64: 1.30.2 lightningcss-darwin-x64: 1.30.2 From e3e85b364fc62a19b97a4250854580132e7967c7 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Thu, 29 Jan 2026 15:17:50 +0100 Subject: [PATCH 060/100] [tailwindcss-vite] Add Register dependency messages logline (#19611) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The PostCSS implementation has a debug logline for registering dependencies but this is missing for @tailwindcss/vite. ## Summary Adds the "Register dependency messages" instrumentation span to the Vite plugin's dependency registration code, matching the existing implementation in @tailwindcss/postcss. This ensures consistent debug instrumentation across both bundler integrations when DEBUG is enabled. ## Test plan --- packages/@tailwindcss-vite/src/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/@tailwindcss-vite/src/index.ts b/packages/@tailwindcss-vite/src/index.ts index 341c662b164e..4ad70ba43a34 100644 --- a/packages/@tailwindcss-vite/src/index.ts +++ b/packages/@tailwindcss-vite/src/index.ts @@ -375,6 +375,7 @@ class Root { } if (this.compiler.features & Features.Utilities) { + DEBUG && I.start('Register dependency messages') // Watch individual files found via custom `@source` paths for (let file of this.scanner.files) { addWatchFile(file) @@ -411,6 +412,7 @@ class Root { } } } + DEBUG && I.end('Register dependency messages') } DEBUG && I.start('Build CSS') From 566eea4ff92dbac61a5f03f83d804c87a31ebc01 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 29 Jan 2026 15:49:31 +0100 Subject: [PATCH 061/100] Improve walk performance (#19614) This PR improves the walk performance by a little bit, but also reduces memory usage. It's a tiny change and all the APIs remain the same. Not the most important PR, but we had this idea on the backburner so we decided to just implement it. Thanks @thecrypticace! ## Test plan - All the existing tests should pass. Co-authored-by: Jordan Pittman --- packages/tailwindcss/src/walk.ts | 33 +++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/packages/tailwindcss/src/walk.ts b/packages/tailwindcss/src/walk.ts index ccb384256c3f..97c30db90be1 100644 --- a/packages/tailwindcss/src/walk.ts +++ b/packages/tailwindcss/src/walk.ts @@ -52,42 +52,53 @@ export function walk( else walkImplementation(ast, hooks.enter, hooks.exit) } +interface Stack { + value: T + prev: Stack | null +} + function walkImplementation( ast: T[], enter: (node: T, ctx: VisitContext) => EnterResult | void = () => WalkAction.Continue, exit: (node: T, ctx: VisitContext) => ExitResult | void = () => WalkAction.Continue, ) { - let stack: [nodes: T[], offset: number, parent: Parent | null][] = [[ast, 0, null]] + type StackFrame = [nodes: T[], offset: number, parent: Parent | null] + let stack: Stack | null = { value: [ast, 0, null], prev: null } + let ctx: VisitContext = { parent: null, depth: 0, path() { let path: T[] = [] - for (let i = 1; i < stack.length; i++) { - let parent = stack[i][2] + let frames: Stack | null = stack + + while (frames) { + let parent = frames.value[2] if (parent) path.push(parent) + frames = frames.prev } + path.reverse() + return path }, } - while (stack.length > 0) { - let depth = stack.length - 1 - let frame = stack[depth] + while (stack !== null) { + let frame = stack.value let nodes = frame[0] let offset = frame[1] let parent = frame[2] // Done with this level if (offset >= nodes.length) { - stack.pop() + stack = stack.prev + ctx.depth -= 1 continue } ctx.parent = parent - ctx.depth = depth // Enter phase (offsets are positive) if (offset >= 0) { @@ -97,7 +108,11 @@ function walkImplementation( switch (result.kind) { case WalkKind.Continue: { if (node.nodes && node.nodes.length > 0) { - stack.push([node.nodes, 0, node as Parent]) + ctx.depth += 1 + stack = { + value: [node.nodes, 0, node as Parent], + prev: stack, + } } frame[1] = ~offset // Prepare for exit phase, same offset From 991072fcacbf3ea6d141a240312768cd808697b1 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 30 Jan 2026 14:37:51 +0100 Subject: [PATCH 062/100] Add logical block-start/block-end border, margin, and padding utilities (#19601) ## Summary This PR adds support for logical block-start and block-end CSS properties in Tailwind CSS utilities. These properties are part of the CSS Logical Properties specification and provide writing-mode-aware alternatives to physical top/bottom properties. The following new utilities are added: - **Border utilities**: `border-bs-*` and `border-be-*` (for `border-block-start` and `border-block-end`) - **Margin utilities**: `mbs-*` and `mbe-*` (for `margin-block-start` and `margin-block-end`) - **Scroll margin utilities**: `scroll-mbs-*` and `scroll-mbe-*` (for `scroll-margin-block-start` and `scroll-margin-block-end`) - **Scroll padding utilities**: `scroll-pbs-*` and `scroll-pbe-*` (for `scroll-padding-block-start` and `scroll-padding-block-end`) - **Padding utilities**: `pbs-*` and `pbe-*` (for `padding-block-start` and `padding-block-end`) These utilities follow the same patterns as their existing inline-start/inline-end counterparts and support all standard modifiers (arbitrary values, negative values, opacity modifiers, etc.). ## Changes 1. **utilities.ts**: Added new utility definitions for all block-start/block-end properties 2. **property-order.ts**: Updated CSS property ordering to include the new logical properties in the correct cascade order 3. **utilities.test.ts**: Added comprehensive test cases for all new utilities 4. **utilities.test.ts.snap**: Updated snapshots showing generated CSS for the new utilities ## Test plan All changes are covered by existing test infrastructure: - Unit tests verify correct CSS generation for each utility variant - Snapshot tests validate the complete output for border utilities - Invalid modifier combinations are tested to ensure proper error handling - Tests cover standard values, arbitrary values, negative values, and opacity modifiers https://claude.ai/code/session_01V89HxEtppGVvMtuPbYrayM --------- Co-authored-by: Claude Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Robin Malfait --- CHANGELOG.md | 1 + .../__snapshots__/intellisense.test.ts.snap | 606 ++++++++++++++++++ .../src/__snapshots__/utilities.test.ts.snap | 370 +++++++++++ packages/tailwindcss/src/property-order.ts | 14 + packages/tailwindcss/src/utilities.test.ts | 412 ++++++++++++ packages/tailwindcss/src/utilities.ts | 24 + 6 files changed, 1427 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d6710ddca43..cc4d2a301536 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Add `pbs-*`, `pbe-*`, `mbs-*`, `mbe-*`, `scroll-pbs-*`, `scroll-pbe-*`, `scroll-mbs-*`, `scroll-mbe-*`, `border-bs-*`, `border-be-*` utilities for `padding-block-start`, `padding-block-end`, `margin-block-start`, `margin-block-end`, `scroll-padding-block-start`, `scroll-padding-block-end`, `scroll-margin-block-start`, `scroll-margin-block-end`, `border-block-start`, and `border-block-end` ([`#19601`](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) - Add `@tailwindcss/webpack` loader for Tailwind CSS v4 ([#19610](https://github.com/tailwindlabs/tailwindcss/pull/19610)) diff --git a/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap b/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap index 690b1cb1f0eb..759d91443c1c 100644 --- a/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap +++ b/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap @@ -739,6 +739,76 @@ exports[`getClassList 1`] = ` "-mb-80", "-mb-96", "-mb-px", + "-mbe-0", + "-mbe-0.5", + "-mbe-1", + "-mbe-1.5", + "-mbe-2", + "-mbe-2.5", + "-mbe-3", + "-mbe-3.5", + "-mbe-4", + "-mbe-5", + "-mbe-6", + "-mbe-7", + "-mbe-8", + "-mbe-9", + "-mbe-10", + "-mbe-11", + "-mbe-12", + "-mbe-14", + "-mbe-16", + "-mbe-20", + "-mbe-24", + "-mbe-28", + "-mbe-32", + "-mbe-36", + "-mbe-40", + "-mbe-44", + "-mbe-48", + "-mbe-52", + "-mbe-56", + "-mbe-60", + "-mbe-64", + "-mbe-72", + "-mbe-80", + "-mbe-96", + "-mbe-px", + "-mbs-0", + "-mbs-0.5", + "-mbs-1", + "-mbs-1.5", + "-mbs-2", + "-mbs-2.5", + "-mbs-3", + "-mbs-3.5", + "-mbs-4", + "-mbs-5", + "-mbs-6", + "-mbs-7", + "-mbs-8", + "-mbs-9", + "-mbs-10", + "-mbs-11", + "-mbs-12", + "-mbs-14", + "-mbs-16", + "-mbs-20", + "-mbs-24", + "-mbs-28", + "-mbs-32", + "-mbs-36", + "-mbs-40", + "-mbs-44", + "-mbs-48", + "-mbs-52", + "-mbs-56", + "-mbs-60", + "-mbs-64", + "-mbs-72", + "-mbs-80", + "-mbs-96", + "-mbs-px", "-me-0", "-me-0.5", "-me-1", @@ -1239,6 +1309,76 @@ exports[`getClassList 1`] = ` "-scroll-mb-80", "-scroll-mb-96", "-scroll-mb-px", + "-scroll-mbe-0", + "-scroll-mbe-0.5", + "-scroll-mbe-1", + "-scroll-mbe-1.5", + "-scroll-mbe-2", + "-scroll-mbe-2.5", + "-scroll-mbe-3", + "-scroll-mbe-3.5", + "-scroll-mbe-4", + "-scroll-mbe-5", + "-scroll-mbe-6", + "-scroll-mbe-7", + "-scroll-mbe-8", + "-scroll-mbe-9", + "-scroll-mbe-10", + "-scroll-mbe-11", + "-scroll-mbe-12", + "-scroll-mbe-14", + "-scroll-mbe-16", + "-scroll-mbe-20", + "-scroll-mbe-24", + "-scroll-mbe-28", + "-scroll-mbe-32", + "-scroll-mbe-36", + "-scroll-mbe-40", + "-scroll-mbe-44", + "-scroll-mbe-48", + "-scroll-mbe-52", + "-scroll-mbe-56", + "-scroll-mbe-60", + "-scroll-mbe-64", + "-scroll-mbe-72", + "-scroll-mbe-80", + "-scroll-mbe-96", + "-scroll-mbe-px", + "-scroll-mbs-0", + "-scroll-mbs-0.5", + "-scroll-mbs-1", + "-scroll-mbs-1.5", + "-scroll-mbs-2", + "-scroll-mbs-2.5", + "-scroll-mbs-3", + "-scroll-mbs-3.5", + "-scroll-mbs-4", + "-scroll-mbs-5", + "-scroll-mbs-6", + "-scroll-mbs-7", + "-scroll-mbs-8", + "-scroll-mbs-9", + "-scroll-mbs-10", + "-scroll-mbs-11", + "-scroll-mbs-12", + "-scroll-mbs-14", + "-scroll-mbs-16", + "-scroll-mbs-20", + "-scroll-mbs-24", + "-scroll-mbs-28", + "-scroll-mbs-32", + "-scroll-mbs-36", + "-scroll-mbs-40", + "-scroll-mbs-44", + "-scroll-mbs-48", + "-scroll-mbs-52", + "-scroll-mbs-56", + "-scroll-mbs-60", + "-scroll-mbs-64", + "-scroll-mbs-72", + "-scroll-mbs-80", + "-scroll-mbs-96", + "-scroll-mbs-px", "-scroll-me-0", "-scroll-me-0.5", "-scroll-me-1", @@ -2693,6 +2833,190 @@ exports[`getClassList 1`] = ` "border-b-transparent/90", "border-b-transparent/95", "border-b-transparent/100", + "border-be", + "border-be/0", + "border-be/5", + "border-be/10", + "border-be/15", + "border-be/20", + "border-be/25", + "border-be/30", + "border-be/35", + "border-be/40", + "border-be/45", + "border-be/50", + "border-be/55", + "border-be/60", + "border-be/65", + "border-be/70", + "border-be/75", + "border-be/80", + "border-be/85", + "border-be/90", + "border-be/95", + "border-be/100", + "border-be-0", + "border-be-2", + "border-be-4", + "border-be-8", + "border-be-current", + "border-be-current/0", + "border-be-current/5", + "border-be-current/10", + "border-be-current/15", + "border-be-current/20", + "border-be-current/25", + "border-be-current/30", + "border-be-current/35", + "border-be-current/40", + "border-be-current/45", + "border-be-current/50", + "border-be-current/55", + "border-be-current/60", + "border-be-current/65", + "border-be-current/70", + "border-be-current/75", + "border-be-current/80", + "border-be-current/85", + "border-be-current/90", + "border-be-current/95", + "border-be-current/100", + "border-be-inherit", + "border-be-inherit/0", + "border-be-inherit/5", + "border-be-inherit/10", + "border-be-inherit/15", + "border-be-inherit/20", + "border-be-inherit/25", + "border-be-inherit/30", + "border-be-inherit/35", + "border-be-inherit/40", + "border-be-inherit/45", + "border-be-inherit/50", + "border-be-inherit/55", + "border-be-inherit/60", + "border-be-inherit/65", + "border-be-inherit/70", + "border-be-inherit/75", + "border-be-inherit/80", + "border-be-inherit/85", + "border-be-inherit/90", + "border-be-inherit/95", + "border-be-inherit/100", + "border-be-transparent", + "border-be-transparent/0", + "border-be-transparent/5", + "border-be-transparent/10", + "border-be-transparent/15", + "border-be-transparent/20", + "border-be-transparent/25", + "border-be-transparent/30", + "border-be-transparent/35", + "border-be-transparent/40", + "border-be-transparent/45", + "border-be-transparent/50", + "border-be-transparent/55", + "border-be-transparent/60", + "border-be-transparent/65", + "border-be-transparent/70", + "border-be-transparent/75", + "border-be-transparent/80", + "border-be-transparent/85", + "border-be-transparent/90", + "border-be-transparent/95", + "border-be-transparent/100", + "border-bs", + "border-bs/0", + "border-bs/5", + "border-bs/10", + "border-bs/15", + "border-bs/20", + "border-bs/25", + "border-bs/30", + "border-bs/35", + "border-bs/40", + "border-bs/45", + "border-bs/50", + "border-bs/55", + "border-bs/60", + "border-bs/65", + "border-bs/70", + "border-bs/75", + "border-bs/80", + "border-bs/85", + "border-bs/90", + "border-bs/95", + "border-bs/100", + "border-bs-0", + "border-bs-2", + "border-bs-4", + "border-bs-8", + "border-bs-current", + "border-bs-current/0", + "border-bs-current/5", + "border-bs-current/10", + "border-bs-current/15", + "border-bs-current/20", + "border-bs-current/25", + "border-bs-current/30", + "border-bs-current/35", + "border-bs-current/40", + "border-bs-current/45", + "border-bs-current/50", + "border-bs-current/55", + "border-bs-current/60", + "border-bs-current/65", + "border-bs-current/70", + "border-bs-current/75", + "border-bs-current/80", + "border-bs-current/85", + "border-bs-current/90", + "border-bs-current/95", + "border-bs-current/100", + "border-bs-inherit", + "border-bs-inherit/0", + "border-bs-inherit/5", + "border-bs-inherit/10", + "border-bs-inherit/15", + "border-bs-inherit/20", + "border-bs-inherit/25", + "border-bs-inherit/30", + "border-bs-inherit/35", + "border-bs-inherit/40", + "border-bs-inherit/45", + "border-bs-inherit/50", + "border-bs-inherit/55", + "border-bs-inherit/60", + "border-bs-inherit/65", + "border-bs-inherit/70", + "border-bs-inherit/75", + "border-bs-inherit/80", + "border-bs-inherit/85", + "border-bs-inherit/90", + "border-bs-inherit/95", + "border-bs-inherit/100", + "border-bs-transparent", + "border-bs-transparent/0", + "border-bs-transparent/5", + "border-bs-transparent/10", + "border-bs-transparent/15", + "border-bs-transparent/20", + "border-bs-transparent/25", + "border-bs-transparent/30", + "border-bs-transparent/35", + "border-bs-transparent/40", + "border-bs-transparent/45", + "border-bs-transparent/50", + "border-bs-transparent/55", + "border-bs-transparent/60", + "border-bs-transparent/65", + "border-bs-transparent/70", + "border-bs-transparent/75", + "border-bs-transparent/80", + "border-bs-transparent/85", + "border-bs-transparent/90", + "border-bs-transparent/95", + "border-bs-transparent/100", "border-collapse", "border-current", "border-current/0", @@ -7614,6 +7938,78 @@ exports[`getClassList 1`] = ` "mb-96", "mb-auto", "mb-px", + "mbe-0", + "mbe-0.5", + "mbe-1", + "mbe-1.5", + "mbe-2", + "mbe-2.5", + "mbe-3", + "mbe-3.5", + "mbe-4", + "mbe-5", + "mbe-6", + "mbe-7", + "mbe-8", + "mbe-9", + "mbe-10", + "mbe-11", + "mbe-12", + "mbe-14", + "mbe-16", + "mbe-20", + "mbe-24", + "mbe-28", + "mbe-32", + "mbe-36", + "mbe-40", + "mbe-44", + "mbe-48", + "mbe-52", + "mbe-56", + "mbe-60", + "mbe-64", + "mbe-72", + "mbe-80", + "mbe-96", + "mbe-auto", + "mbe-px", + "mbs-0", + "mbs-0.5", + "mbs-1", + "mbs-1.5", + "mbs-2", + "mbs-2.5", + "mbs-3", + "mbs-3.5", + "mbs-4", + "mbs-5", + "mbs-6", + "mbs-7", + "mbs-8", + "mbs-9", + "mbs-10", + "mbs-11", + "mbs-12", + "mbs-14", + "mbs-16", + "mbs-20", + "mbs-24", + "mbs-28", + "mbs-32", + "mbs-36", + "mbs-40", + "mbs-44", + "mbs-48", + "mbs-52", + "mbs-56", + "mbs-60", + "mbs-64", + "mbs-72", + "mbs-80", + "mbs-96", + "mbs-auto", + "mbs-px", "me-0", "me-0.5", "me-1", @@ -8298,6 +8694,76 @@ exports[`getClassList 1`] = ` "pb-80", "pb-96", "pb-px", + "pbe-0", + "pbe-0.5", + "pbe-1", + "pbe-1.5", + "pbe-2", + "pbe-2.5", + "pbe-3", + "pbe-3.5", + "pbe-4", + "pbe-5", + "pbe-6", + "pbe-7", + "pbe-8", + "pbe-9", + "pbe-10", + "pbe-11", + "pbe-12", + "pbe-14", + "pbe-16", + "pbe-20", + "pbe-24", + "pbe-28", + "pbe-32", + "pbe-36", + "pbe-40", + "pbe-44", + "pbe-48", + "pbe-52", + "pbe-56", + "pbe-60", + "pbe-64", + "pbe-72", + "pbe-80", + "pbe-96", + "pbe-px", + "pbs-0", + "pbs-0.5", + "pbs-1", + "pbs-1.5", + "pbs-2", + "pbs-2.5", + "pbs-3", + "pbs-3.5", + "pbs-4", + "pbs-5", + "pbs-6", + "pbs-7", + "pbs-8", + "pbs-9", + "pbs-10", + "pbs-11", + "pbs-12", + "pbs-14", + "pbs-16", + "pbs-20", + "pbs-24", + "pbs-28", + "pbs-32", + "pbs-36", + "pbs-40", + "pbs-44", + "pbs-48", + "pbs-52", + "pbs-56", + "pbs-60", + "pbs-64", + "pbs-72", + "pbs-80", + "pbs-96", + "pbs-px", "pe-0", "pe-0.5", "pe-1", @@ -9097,6 +9563,76 @@ exports[`getClassList 1`] = ` "scroll-mb-80", "scroll-mb-96", "scroll-mb-px", + "scroll-mbe-0", + "scroll-mbe-0.5", + "scroll-mbe-1", + "scroll-mbe-1.5", + "scroll-mbe-2", + "scroll-mbe-2.5", + "scroll-mbe-3", + "scroll-mbe-3.5", + "scroll-mbe-4", + "scroll-mbe-5", + "scroll-mbe-6", + "scroll-mbe-7", + "scroll-mbe-8", + "scroll-mbe-9", + "scroll-mbe-10", + "scroll-mbe-11", + "scroll-mbe-12", + "scroll-mbe-14", + "scroll-mbe-16", + "scroll-mbe-20", + "scroll-mbe-24", + "scroll-mbe-28", + "scroll-mbe-32", + "scroll-mbe-36", + "scroll-mbe-40", + "scroll-mbe-44", + "scroll-mbe-48", + "scroll-mbe-52", + "scroll-mbe-56", + "scroll-mbe-60", + "scroll-mbe-64", + "scroll-mbe-72", + "scroll-mbe-80", + "scroll-mbe-96", + "scroll-mbe-px", + "scroll-mbs-0", + "scroll-mbs-0.5", + "scroll-mbs-1", + "scroll-mbs-1.5", + "scroll-mbs-2", + "scroll-mbs-2.5", + "scroll-mbs-3", + "scroll-mbs-3.5", + "scroll-mbs-4", + "scroll-mbs-5", + "scroll-mbs-6", + "scroll-mbs-7", + "scroll-mbs-8", + "scroll-mbs-9", + "scroll-mbs-10", + "scroll-mbs-11", + "scroll-mbs-12", + "scroll-mbs-14", + "scroll-mbs-16", + "scroll-mbs-20", + "scroll-mbs-24", + "scroll-mbs-28", + "scroll-mbs-32", + "scroll-mbs-36", + "scroll-mbs-40", + "scroll-mbs-44", + "scroll-mbs-48", + "scroll-mbs-52", + "scroll-mbs-56", + "scroll-mbs-60", + "scroll-mbs-64", + "scroll-mbs-72", + "scroll-mbs-80", + "scroll-mbs-96", + "scroll-mbs-px", "scroll-me-0", "scroll-me-0.5", "scroll-me-1", @@ -9412,6 +9948,76 @@ exports[`getClassList 1`] = ` "scroll-pb-80", "scroll-pb-96", "scroll-pb-px", + "scroll-pbe-0", + "scroll-pbe-0.5", + "scroll-pbe-1", + "scroll-pbe-1.5", + "scroll-pbe-2", + "scroll-pbe-2.5", + "scroll-pbe-3", + "scroll-pbe-3.5", + "scroll-pbe-4", + "scroll-pbe-5", + "scroll-pbe-6", + "scroll-pbe-7", + "scroll-pbe-8", + "scroll-pbe-9", + "scroll-pbe-10", + "scroll-pbe-11", + "scroll-pbe-12", + "scroll-pbe-14", + "scroll-pbe-16", + "scroll-pbe-20", + "scroll-pbe-24", + "scroll-pbe-28", + "scroll-pbe-32", + "scroll-pbe-36", + "scroll-pbe-40", + "scroll-pbe-44", + "scroll-pbe-48", + "scroll-pbe-52", + "scroll-pbe-56", + "scroll-pbe-60", + "scroll-pbe-64", + "scroll-pbe-72", + "scroll-pbe-80", + "scroll-pbe-96", + "scroll-pbe-px", + "scroll-pbs-0", + "scroll-pbs-0.5", + "scroll-pbs-1", + "scroll-pbs-1.5", + "scroll-pbs-2", + "scroll-pbs-2.5", + "scroll-pbs-3", + "scroll-pbs-3.5", + "scroll-pbs-4", + "scroll-pbs-5", + "scroll-pbs-6", + "scroll-pbs-7", + "scroll-pbs-8", + "scroll-pbs-9", + "scroll-pbs-10", + "scroll-pbs-11", + "scroll-pbs-12", + "scroll-pbs-14", + "scroll-pbs-16", + "scroll-pbs-20", + "scroll-pbs-24", + "scroll-pbs-28", + "scroll-pbs-32", + "scroll-pbs-36", + "scroll-pbs-40", + "scroll-pbs-44", + "scroll-pbs-48", + "scroll-pbs-52", + "scroll-pbs-56", + "scroll-pbs-60", + "scroll-pbs-64", + "scroll-pbs-72", + "scroll-pbs-80", + "scroll-pbs-96", + "scroll-pbs-px", "scroll-pe-0", "scroll-pe-0.5", "scroll-pe-1", diff --git a/packages/tailwindcss/src/__snapshots__/utilities.test.ts.snap b/packages/tailwindcss/src/__snapshots__/utilities.test.ts.snap index 6adc96113d46..12bf1312a0cd 100644 --- a/packages/tailwindcss/src/__snapshots__/utilities.test.ts.snap +++ b/packages/tailwindcss/src/__snapshots__/utilities.test.ts.snap @@ -370,6 +370,376 @@ exports[`border-b-* 1`] = ` }" `; +exports[`border-be-* 1`] = ` +"@layer properties { + @supports (((-webkit-hyphens: none)) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) { + *, :before, :after, ::backdrop { + --tw-border-style: solid; + } + } +} + +:root, :host { + --color-red-500: #ef4444; + --border-color-blue-500: #3b82f6; +} + +.border-be { + border-block-end-style: var(--tw-border-style); + border-block-end-width: 1px; +} + +.border-be-0 { + border-block-end-style: var(--tw-border-style); + border-block-end-width: 0; +} + +.border-be-2 { + border-block-end-style: var(--tw-border-style); + border-block-end-width: 2px; +} + +.border-be-4 { + border-block-end-style: var(--tw-border-style); + border-block-end-width: 4px; +} + +.border-be-123 { + border-block-end-style: var(--tw-border-style); + border-block-end-width: 123px; +} + +.border-be-\\[0_1\\] { + border-block-end-style: var(--tw-border-style); + border-block-end-width: 0 1; +} + +.border-be-\\[0_2px_0_2px\\] { + border-block-end-style: var(--tw-border-style); + border-block-end-width: 0 2px 0 2px; +} + +.border-be-\\[12px\\] { + border-block-end-style: var(--tw-border-style); + border-block-end-width: 12px; +} + +.border-be-\\[12px_8px\\] { + border-block-end-style: var(--tw-border-style); + border-block-end-width: 12px 8px; +} + +.border-be-\\[length\\:var\\(--my-width\\)\\], .border-be-\\[line-width\\:var\\(--my-width\\)\\] { + border-block-end-style: var(--tw-border-style); + border-block-end-width: var(--my-width); +} + +.border-be-\\[medium\\] { + border-block-end-style: var(--tw-border-style); + border-block-end-width: medium; +} + +.border-be-\\[thick\\] { + border-block-end-style: var(--tw-border-style); + border-block-end-width: thick; +} + +.border-be-\\[thin\\] { + border-block-end-style: var(--tw-border-style); + border-block-end-width: thin; +} + +.border-be-\\[thin_2px\\] { + border-block-end-style: var(--tw-border-style); + border-block-end-width: thin 2px; +} + +.border-be-\\[\\#0088cc\\] { + border-block-end-color: #08c; +} + +.border-be-\\[\\#0088cc\\]\\/50 { + border-block-end-color: oklab(59.9824% -.067 -.124 / .5); +} + +.border-be-\\[color\\:var\\(--my-color\\)\\], .border-be-\\[color\\:var\\(--my-color\\)\\]\\/50 { + border-block-end-color: var(--my-color); +} + +@supports (color: color-mix(in lab, red, red)) { + .border-be-\\[color\\:var\\(--my-color\\)\\]\\/50 { + border-block-end-color: color-mix(in oklab, var(--my-color) 50%, transparent); + } +} + +.border-be-\\[var\\(--my-color\\)\\], .border-be-\\[var\\(--my-color\\)\\]\\/50 { + border-block-end-color: var(--my-color); +} + +@supports (color: color-mix(in lab, red, red)) { + .border-be-\\[var\\(--my-color\\)\\]\\/50 { + border-block-end-color: color-mix(in oklab, var(--my-color) 50%, transparent); + } +} + +.border-be-blue-500 { + border-block-end-color: var(--border-color-blue-500); +} + +.border-be-current, .border-be-current\\/50 { + border-block-end-color: currentColor; +} + +@supports (color: color-mix(in lab, red, red)) { + .border-be-current\\/50 { + border-block-end-color: color-mix(in oklab, currentcolor 50%, transparent); + } +} + +.border-be-inherit { + border-block-end-color: inherit; +} + +.border-be-red-500 { + border-block-end-color: var(--color-red-500); +} + +.border-be-red-500\\/2\\.5 { + border-block-end-color: #ef444406; +} + +@supports (color: color-mix(in lab, red, red)) { + .border-be-red-500\\/2\\.5 { + border-block-end-color: color-mix(in oklab, var(--color-red-500) 2.5%, transparent); + } +} + +.border-be-red-500\\/2\\.25 { + border-block-end-color: #ef444406; +} + +@supports (color: color-mix(in lab, red, red)) { + .border-be-red-500\\/2\\.25 { + border-block-end-color: color-mix(in oklab, var(--color-red-500) 2.25%, transparent); + } +} + +.border-be-red-500\\/2\\.75 { + border-block-end-color: #ef444407; +} + +@supports (color: color-mix(in lab, red, red)) { + .border-be-red-500\\/2\\.75 { + border-block-end-color: color-mix(in oklab, var(--color-red-500) 2.75%, transparent); + } +} + +.border-be-red-500\\/50 { + border-block-end-color: #ef444480; +} + +@supports (color: color-mix(in lab, red, red)) { + .border-be-red-500\\/50 { + border-block-end-color: color-mix(in oklab, var(--color-red-500) 50%, transparent); + } +} + +.border-be-transparent { + border-block-end-color: #0000; +} + +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +}" +`; + +exports[`border-bs-* 1`] = ` +"@layer properties { + @supports (((-webkit-hyphens: none)) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) { + *, :before, :after, ::backdrop { + --tw-border-style: solid; + } + } +} + +:root, :host { + --color-red-500: #ef4444; + --border-color-blue-500: #3b82f6; +} + +.border-bs { + border-block-start-style: var(--tw-border-style); + border-block-start-width: 1px; +} + +.border-bs-0 { + border-block-start-style: var(--tw-border-style); + border-block-start-width: 0; +} + +.border-bs-2 { + border-block-start-style: var(--tw-border-style); + border-block-start-width: 2px; +} + +.border-bs-4 { + border-block-start-style: var(--tw-border-style); + border-block-start-width: 4px; +} + +.border-bs-123 { + border-block-start-style: var(--tw-border-style); + border-block-start-width: 123px; +} + +.border-bs-\\[0_1\\] { + border-block-start-style: var(--tw-border-style); + border-block-start-width: 0 1; +} + +.border-bs-\\[0_2px_0_2px\\] { + border-block-start-style: var(--tw-border-style); + border-block-start-width: 0 2px 0 2px; +} + +.border-bs-\\[12px\\] { + border-block-start-style: var(--tw-border-style); + border-block-start-width: 12px; +} + +.border-bs-\\[12px_8px\\] { + border-block-start-style: var(--tw-border-style); + border-block-start-width: 12px 8px; +} + +.border-bs-\\[length\\:var\\(--my-width\\)\\], .border-bs-\\[line-width\\:var\\(--my-width\\)\\] { + border-block-start-style: var(--tw-border-style); + border-block-start-width: var(--my-width); +} + +.border-bs-\\[medium\\] { + border-block-start-style: var(--tw-border-style); + border-block-start-width: medium; +} + +.border-bs-\\[thick\\] { + border-block-start-style: var(--tw-border-style); + border-block-start-width: thick; +} + +.border-bs-\\[thin\\] { + border-block-start-style: var(--tw-border-style); + border-block-start-width: thin; +} + +.border-bs-\\[thin_2px\\] { + border-block-start-style: var(--tw-border-style); + border-block-start-width: thin 2px; +} + +.border-bs-\\[\\#0088cc\\] { + border-block-start-color: #08c; +} + +.border-bs-\\[\\#0088cc\\]\\/50 { + border-block-start-color: oklab(59.9824% -.067 -.124 / .5); +} + +.border-bs-\\[color\\:var\\(--my-color\\)\\], .border-bs-\\[color\\:var\\(--my-color\\)\\]\\/50 { + border-block-start-color: var(--my-color); +} + +@supports (color: color-mix(in lab, red, red)) { + .border-bs-\\[color\\:var\\(--my-color\\)\\]\\/50 { + border-block-start-color: color-mix(in oklab, var(--my-color) 50%, transparent); + } +} + +.border-bs-\\[var\\(--my-color\\)\\], .border-bs-\\[var\\(--my-color\\)\\]\\/50 { + border-block-start-color: var(--my-color); +} + +@supports (color: color-mix(in lab, red, red)) { + .border-bs-\\[var\\(--my-color\\)\\]\\/50 { + border-block-start-color: color-mix(in oklab, var(--my-color) 50%, transparent); + } +} + +.border-bs-blue-500 { + border-block-start-color: var(--border-color-blue-500); +} + +.border-bs-current, .border-bs-current\\/50 { + border-block-start-color: currentColor; +} + +@supports (color: color-mix(in lab, red, red)) { + .border-bs-current\\/50 { + border-block-start-color: color-mix(in oklab, currentcolor 50%, transparent); + } +} + +.border-bs-inherit { + border-block-start-color: inherit; +} + +.border-bs-red-500 { + border-block-start-color: var(--color-red-500); +} + +.border-bs-red-500\\/2\\.5 { + border-block-start-color: #ef444406; +} + +@supports (color: color-mix(in lab, red, red)) { + .border-bs-red-500\\/2\\.5 { + border-block-start-color: color-mix(in oklab, var(--color-red-500) 2.5%, transparent); + } +} + +.border-bs-red-500\\/2\\.25 { + border-block-start-color: #ef444406; +} + +@supports (color: color-mix(in lab, red, red)) { + .border-bs-red-500\\/2\\.25 { + border-block-start-color: color-mix(in oklab, var(--color-red-500) 2.25%, transparent); + } +} + +.border-bs-red-500\\/2\\.75 { + border-block-start-color: #ef444407; +} + +@supports (color: color-mix(in lab, red, red)) { + .border-bs-red-500\\/2\\.75 { + border-block-start-color: color-mix(in oklab, var(--color-red-500) 2.75%, transparent); + } +} + +.border-bs-red-500\\/50 { + border-block-start-color: #ef444480; +} + +@supports (color: color-mix(in lab, red, red)) { + .border-bs-red-500\\/50 { + border-block-start-color: color-mix(in oklab, var(--color-red-500) 50%, transparent); + } +} + +.border-bs-transparent { + border-block-start-color: #0000; +} + +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +}" +`; + exports[`border-e-* 1`] = ` "@layer properties { @supports (((-webkit-hyphens: none)) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) { diff --git a/packages/tailwindcss/src/property-order.ts b/packages/tailwindcss/src/property-order.ts index f024f69771a0..03d0440ae083 100644 --- a/packages/tailwindcss/src/property-order.ts +++ b/packages/tailwindcss/src/property-order.ts @@ -39,6 +39,8 @@ export default [ 'margin-block', 'margin-inline-start', 'margin-inline-end', + 'margin-block-start', + 'margin-block-end', 'margin-top', 'margin-right', 'margin-bottom', @@ -108,6 +110,8 @@ export default [ 'scroll-margin-block', 'scroll-margin-inline-start', 'scroll-margin-inline-end', + 'scroll-margin-block-start', + 'scroll-margin-block-end', 'scroll-margin-top', 'scroll-margin-right', 'scroll-margin-bottom', @@ -118,6 +122,8 @@ export default [ 'scroll-padding-block', 'scroll-padding-inline-start', 'scroll-padding-inline-end', + 'scroll-padding-block-start', + 'scroll-padding-block-end', 'scroll-padding-top', 'scroll-padding-right', 'scroll-padding-bottom', @@ -196,6 +202,8 @@ export default [ 'border-block-width', 'border-inline-start-width', 'border-inline-end-width', + 'border-block-start-width', + 'border-block-end-width', 'border-top-width', 'border-right-width', 'border-bottom-width', @@ -206,6 +214,8 @@ export default [ 'border-block-style', 'border-inline-start-style', 'border-inline-end-style', + 'border-block-start-style', + 'border-block-end-style', 'border-top-style', 'border-right-style', 'border-bottom-style', @@ -216,6 +226,8 @@ export default [ 'border-block-color', 'border-inline-start-color', 'border-inline-end-color', + 'border-block-start-color', + 'border-block-end-color', 'border-top-color', 'border-right-color', 'border-bottom-color', @@ -317,6 +329,8 @@ export default [ 'padding-block', 'padding-inline-start', 'padding-inline-end', + 'padding-block-start', + 'padding-block-end', 'padding-top', 'padding-right', 'padding-bottom', diff --git a/packages/tailwindcss/src/utilities.test.ts b/packages/tailwindcss/src/utilities.test.ts index cff2284f45c9..a5991ebfac7a 100644 --- a/packages/tailwindcss/src/utilities.test.ts +++ b/packages/tailwindcss/src/utilities.test.ts @@ -2216,6 +2216,178 @@ test('me', async () => { ).toEqual('') }) +test('mbs', async () => { + expect( + await compileCss( + css` + @theme { + --spacing: 0.25rem; + --spacing-big: 100rem; + } + @tailwind utilities; + `, + [ + 'mbs-1', + 'mbs-99', + 'mbs-2.5', + 'mbs-big', + 'mbs-[4px]', + '-mbs-4', + '-mbs-2.5', + '-mbs-big', + '-mbs-[4px]', + 'mbs-[var(--my-var)]', + '-mbs-[var(--my-var)]', + ], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing: .25rem; + --spacing-big: 100rem; + } + + .-mbs-2\\.5 { + margin-block-start: calc(var(--spacing) * -2.5); + } + + .-mbs-4 { + margin-block-start: calc(var(--spacing) * -4); + } + + .-mbs-\\[4px\\] { + margin-block-start: -4px; + } + + .-mbs-\\[var\\(--my-var\\)\\] { + margin-block-start: calc(var(--my-var) * -1); + } + + .-mbs-big { + margin-block-start: calc(var(--spacing-big) * -1); + } + + .mbs-1 { + margin-block-start: calc(var(--spacing) * 1); + } + + .mbs-2\\.5 { + margin-block-start: calc(var(--spacing) * 2.5); + } + + .mbs-99 { + margin-block-start: calc(var(--spacing) * 99); + } + + .mbs-\\[4px\\] { + margin-block-start: 4px; + } + + .mbs-\\[var\\(--my-var\\)\\] { + margin-block-start: var(--my-var); + } + + .mbs-big { + margin-block-start: var(--spacing-big); + }" + `) + expect( + await run([ + 'mbs', + 'mbs-auto/foo', + 'mbs-4/foo', + 'mbs-[4px]/foo', + '-mbs-4/foo', + '-mbs-[var(--value)]/foo', + ]), + ).toEqual('') +}) + +test('mbe', async () => { + expect( + await compileCss( + css` + @theme { + --spacing: 0.25rem; + --spacing-big: 100rem; + } + @tailwind utilities; + `, + [ + 'mbe-1', + 'mbe-99', + 'mbe-2.5', + 'mbe-big', + 'mbe-[4px]', + '-mbe-4', + '-mbe-2.5', + '-mbe-big', + '-mbe-[4px]', + 'mbe-[var(--my-var)]', + '-mbe-[var(--my-var)]', + ], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing: .25rem; + --spacing-big: 100rem; + } + + .-mbe-2\\.5 { + margin-block-end: calc(var(--spacing) * -2.5); + } + + .-mbe-4 { + margin-block-end: calc(var(--spacing) * -4); + } + + .-mbe-\\[4px\\] { + margin-block-end: -4px; + } + + .-mbe-\\[var\\(--my-var\\)\\] { + margin-block-end: calc(var(--my-var) * -1); + } + + .-mbe-big { + margin-block-end: calc(var(--spacing-big) * -1); + } + + .mbe-1 { + margin-block-end: calc(var(--spacing) * 1); + } + + .mbe-2\\.5 { + margin-block-end: calc(var(--spacing) * 2.5); + } + + .mbe-99 { + margin-block-end: calc(var(--spacing) * 99); + } + + .mbe-\\[4px\\] { + margin-block-end: 4px; + } + + .mbe-\\[var\\(--my-var\\)\\] { + margin-block-end: var(--my-var); + } + + .mbe-big { + margin-block-end: var(--spacing-big); + }" + `) + expect( + await run([ + 'mbe', + 'mbe-auto/foo', + 'mbe-4/foo', + 'mbe-[4px]/foo', + '-mbe-4/foo', + '-mbe-[var(--value)]/foo', + ]), + ).toEqual('') +}) + test('mr', async () => { expect( await compileCss( @@ -6669,6 +6841,92 @@ test('scroll-me', async () => { ).toEqual('') }) +test('scroll-mbs', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + } + @tailwind utilities; + `, + ['scroll-mbs-4', 'scroll-mbs-[4px]', '-scroll-mbs-4', '-scroll-mbs-[var(--value)]'], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + } + + .-scroll-mbs-4 { + scroll-margin-block-start: calc(var(--spacing-4) * -1); + } + + .-scroll-mbs-\\[var\\(--value\\)\\] { + scroll-margin-block-start: calc(var(--value) * -1); + } + + .scroll-mbs-4 { + scroll-margin-block-start: var(--spacing-4); + } + + .scroll-mbs-\\[4px\\] { + scroll-margin-block-start: 4px; + }" + `) + expect( + await run([ + 'scroll-mbs', + 'scroll-mbs-4/foo', + 'scroll-mbs-[4px]/foo', + '-scroll-mbs-4/foo', + '-scroll-mbs-[var(--value)]/foo', + ]), + ).toEqual('') +}) + +test('scroll-mbe', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + } + @tailwind utilities; + `, + ['scroll-mbe-4', 'scroll-mbe-[4px]', '-scroll-mbe-4', '-scroll-mbe-[var(--value)]'], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + } + + .-scroll-mbe-4 { + scroll-margin-block-end: calc(var(--spacing-4) * -1); + } + + .-scroll-mbe-\\[var\\(--value\\)\\] { + scroll-margin-block-end: calc(var(--value) * -1); + } + + .scroll-mbe-4 { + scroll-margin-block-end: var(--spacing-4); + } + + .scroll-mbe-\\[4px\\] { + scroll-margin-block-end: 4px; + }" + `) + expect( + await run([ + 'scroll-mbe', + 'scroll-mbe-4/foo', + 'scroll-mbe-[4px]/foo', + '-scroll-mbe-4/foo', + '-scroll-mbe-[var(--value)]/foo', + ]), + ).toEqual('') +}) + test('scroll-mt', async () => { expect( await compileCss( @@ -7016,6 +7274,76 @@ test('scroll-pe', async () => { ).toEqual('') }) +test('scroll-pbs', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + } + @tailwind utilities; + `, + ['scroll-pbs-4', 'scroll-pbs-[4px]'], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + } + + .scroll-pbs-4 { + scroll-padding-block-start: var(--spacing-4); + } + + .scroll-pbs-\\[4px\\] { + scroll-padding-block-start: 4px; + }" + `) + expect( + await run([ + 'scroll-pbs', + 'scroll-pbs-4/foo', + 'scroll-pbs-[4px]/foo', + '-scroll-pbs-4', + '-scroll-pbs-[var(--value)]', + ]), + ).toEqual('') +}) + +test('scroll-pbe', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + } + @tailwind utilities; + `, + ['scroll-pbe-4', 'scroll-pbe-[4px]'], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + } + + .scroll-pbe-4 { + scroll-padding-block-end: var(--spacing-4); + } + + .scroll-pbe-\\[4px\\] { + scroll-padding-block-end: 4px; + }" + `) + expect( + await run([ + 'scroll-pbe', + 'scroll-pbe-4/foo', + 'scroll-pbe-[4px]/foo', + '-scroll-pbe-4', + '-scroll-pbe-[var(--value)]', + ]), + ).toEqual('') +}) + test('scroll-pt', async () => { expect( await compileCss( @@ -11119,6 +11447,8 @@ const prefixes = [ 'border-y', 'border-s', 'border-e', + 'border-bs', + 'border-be', 'border-t', 'border-r', 'border-b', @@ -20693,6 +21023,88 @@ test('pe', async () => { expect(await run(['pe', '-pe-4', '-pe-[4px]', 'pe-4/foo', 'pe-[4px]/foo'])).toEqual('') }) +test('pbs', async () => { + expect( + await compileCss( + css` + @theme { + --spacing: 0.25rem; + --spacing-big: 100rem; + } + @tailwind utilities; + `, + ['pbs-1', 'pbs-4', 'pbs-99', 'pbs-big', 'pbs-[4px]'], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing: .25rem; + --spacing-big: 100rem; + } + + .pbs-1 { + padding-block-start: calc(var(--spacing) * 1); + } + + .pbs-4 { + padding-block-start: calc(var(--spacing) * 4); + } + + .pbs-99 { + padding-block-start: calc(var(--spacing) * 99); + } + + .pbs-\\[4px\\] { + padding-block-start: 4px; + } + + .pbs-big { + padding-block-start: var(--spacing-big); + }" + `) + expect(await run(['pbs', '-pbs-4', '-pbs-[4px]', 'pbs-4/foo', 'pbs-[4px]/foo'])).toEqual('') +}) + +test('pbe', async () => { + expect( + await compileCss( + css` + @theme { + --spacing: 0.25rem; + --spacing-big: 100rem; + } + @tailwind utilities; + `, + ['pbe-1', 'pbe-4', 'pbe-99', 'pbe-big', 'pbe-[4px]'], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing: .25rem; + --spacing-big: 100rem; + } + + .pbe-1 { + padding-block-end: calc(var(--spacing) * 1); + } + + .pbe-4 { + padding-block-end: calc(var(--spacing) * 4); + } + + .pbe-99 { + padding-block-end: calc(var(--spacing) * 99); + } + + .pbe-\\[4px\\] { + padding-block-end: 4px; + } + + .pbe-big { + padding-block-end: var(--spacing-big); + }" + `) + expect(await run(['pbe', '-pbe-4', '-pbe-[4px]', 'pbe-4/foo', 'pbe-[4px]/foo'])).toEqual('') +}) + test('pr', async () => { expect( await compileCss( diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index e1c84ce00890..be6a4ebe7080 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -888,6 +888,8 @@ export function createUtilities(theme: Theme) { ['my', 'margin-block'], ['ms', 'margin-inline-start'], ['me', 'margin-inline-end'], + ['mbs', 'margin-block-start'], + ['mbe', 'margin-block-end'], ['mt', 'margin-top'], ['mr', 'margin-right'], ['mb', 'margin-bottom'], @@ -1774,6 +1776,8 @@ export function createUtilities(theme: Theme) { ['scroll-my', 'scroll-margin-block'], ['scroll-ms', 'scroll-margin-inline-start'], ['scroll-me', 'scroll-margin-inline-end'], + ['scroll-mbs', 'scroll-margin-block-start'], + ['scroll-mbe', 'scroll-margin-block-end'], ['scroll-mt', 'scroll-margin-top'], ['scroll-mr', 'scroll-margin-right'], ['scroll-mb', 'scroll-margin-bottom'], @@ -1798,6 +1802,8 @@ export function createUtilities(theme: Theme) { ['scroll-py', 'scroll-padding-block'], ['scroll-ps', 'scroll-padding-inline-start'], ['scroll-pe', 'scroll-padding-inline-end'], + ['scroll-pbs', 'scroll-padding-block-start'], + ['scroll-pbe', 'scroll-padding-block-end'], ['scroll-pt', 'scroll-padding-top'], ['scroll-pr', 'scroll-padding-right'], ['scroll-pb', 'scroll-padding-bottom'], @@ -2344,6 +2350,22 @@ export function createUtilities(theme: Theme) { color: (value) => [decl('border-inline-end-color', value)], }) + borderSideUtility('border-bs', { + width: (value) => [ + decl('border-block-start-style', 'var(--tw-border-style)'), + decl('border-block-start-width', value), + ], + color: (value) => [decl('border-block-start-color', value)], + }) + + borderSideUtility('border-be', { + width: (value) => [ + decl('border-block-end-style', 'var(--tw-border-style)'), + decl('border-block-end-width', value), + ], + color: (value) => [decl('border-block-end-color', value)], + }) + borderSideUtility('border-t', { width: (value) => [ decl('border-top-style', 'var(--tw-border-style)'), @@ -3706,6 +3728,8 @@ export function createUtilities(theme: Theme) { ['py', 'padding-block'], ['ps', 'padding-inline-start'], ['pe', 'padding-inline-end'], + ['pbs', 'padding-block-start'], + ['pbe', 'padding-block-end'], ['pt', 'padding-top'], ['pr', 'padding-right'], ['pb', 'padding-bottom'], From 3d1e654c022362f75643a00f9b6407e4822f5202 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 30 Jan 2026 14:46:37 +0100 Subject: [PATCH 063/100] Add logical sizing utilities (inline-size, block-size) (#19612) ## Summary Adds new utilities for CSS logical properties that provide writing-direction-aware alternatives to width and height: - `inline-*` for `inline-size` (logical equivalent of width) - `min-inline-*` for `min-inline-size` (logical equivalent of min-width) - `max-inline-*` for `max-inline-size` (logical equivalent of max-width) - `block-*` for `block-size` (logical equivalent of height) - `min-block-*` for `min-block-size` (logical equivalent of min-height) - `max-block-*` for `max-block-size` (logical equivalent of max-height) ## New Utilities ### inline-size utilities | Class | CSS Property | |-------|-------------| | `inline-auto` | `inline-size: auto` | | `inline-full` | `inline-size: 100%` | | `inline-min` | `inline-size: min-content` | | `inline-max` | `inline-size: max-content` | | `inline-fit` | `inline-size: fit-content` | | `inline-screen` | `inline-size: 100vw` | | `inline-svw` | `inline-size: 100svw` | | `inline-lvw` | `inline-size: 100lvw` | | `inline-dvw` | `inline-size: 100dvw` | | `inline-{spacing}` | `inline-size: {value}` (e.g., `inline-4`, `inline-px`) | | `inline-{fraction}` | `inline-size: {percent}` (e.g., `inline-1/2`, `inline-3/4`) | | `inline-[{value}]` | `inline-size: {value}` (arbitrary values) | ### min-inline-size utilities | Class | CSS Property | |-------|-------------| | `min-inline-auto` | `min-inline-size: auto` | | `min-inline-full` | `min-inline-size: 100%` | | `min-inline-min` | `min-inline-size: min-content` | | `min-inline-max` | `min-inline-size: max-content` | | `min-inline-fit` | `min-inline-size: fit-content` | | `min-inline-screen` | `min-inline-size: 100vw` | | `min-inline-svw` | `min-inline-size: 100svw` | | `min-inline-lvw` | `min-inline-size: 100lvw` | | `min-inline-dvw` | `min-inline-size: 100dvw` | | `min-inline-{spacing}` | `min-inline-size: {value}` | | `min-inline-[{value}]` | `min-inline-size: {value}` (arbitrary values) | ### max-inline-size utilities | Class | CSS Property | |-------|-------------| | `max-inline-none` | `max-inline-size: none` | | `max-inline-full` | `max-inline-size: 100%` | | `max-inline-min` | `max-inline-size: min-content` | | `max-inline-max` | `max-inline-size: max-content` | | `max-inline-fit` | `max-inline-size: fit-content` | | `max-inline-screen` | `max-inline-size: 100vw` | | `max-inline-svw` | `max-inline-size: 100svw` | | `max-inline-lvw` | `max-inline-size: 100lvw` | | `max-inline-dvw` | `max-inline-size: 100dvw` | | `max-inline-{spacing}` | `max-inline-size: {value}` | | `max-inline-[{value}]` | `max-inline-size: {value}` (arbitrary values) | ### block-size utilities | Class | CSS Property | |-------|-------------| | `block-auto` | `block-size: auto` | | `block-full` | `block-size: 100%` | | `block-min` | `block-size: min-content` | | `block-max` | `block-size: max-content` | | `block-fit` | `block-size: fit-content` | | `block-screen` | `block-size: 100vh` | | `block-lh` | `block-size: 1lh` | | `block-svh` | `block-size: 100svh` | | `block-lvh` | `block-size: 100lvh` | | `block-dvh` | `block-size: 100dvh` | | `block-{spacing}` | `block-size: {value}` (e.g., `block-4`, `block-px`) | | `block-{fraction}` | `block-size: {percent}` (e.g., `block-1/2`, `block-3/4`) | | `block-[{value}]` | `block-size: {value}` (arbitrary values) | ### min-block-size utilities | Class | CSS Property | |-------|-------------| | `min-block-auto` | `min-block-size: auto` | | `min-block-full` | `min-block-size: 100%` | | `min-block-min` | `min-block-size: min-content` | | `min-block-max` | `min-block-size: max-content` | | `min-block-fit` | `min-block-size: fit-content` | | `min-block-screen` | `min-block-size: 100vh` | | `min-block-lh` | `min-block-size: 1lh` | | `min-block-svh` | `min-block-size: 100svh` | | `min-block-lvh` | `min-block-size: 100lvh` | | `min-block-dvh` | `min-block-size: 100dvh` | | `min-block-{spacing}` | `min-block-size: {value}` | | `min-block-[{value}]` | `min-block-size: {value}` (arbitrary values) | ### max-block-size utilities | Class | CSS Property | |-------|-------------| | `max-block-none` | `max-block-size: none` | | `max-block-full` | `max-block-size: 100%` | | `max-block-min` | `max-block-size: min-content` | | `max-block-max` | `max-block-size: max-content` | | `max-block-fit` | `max-block-size: fit-content` | | `max-block-screen` | `max-block-size: 100vh` | | `max-block-lh` | `max-block-size: 1lh` | | `max-block-svh` | `max-block-size: 100svh` | | `max-block-lvh` | `max-block-size: 100lvh` | | `max-block-dvh` | `max-block-size: 100dvh` | | `max-block-{spacing}` | `max-block-size: {value}` | | `max-block-[{value}]` | `max-block-size: {value}` (arbitrary values) | ## Test plan - [x] Added comprehensive unit tests for all new utilities - [ ] Verify utilities work correctly in RTL layouts - [ ] Test with vertical writing modes --------- Co-authored-by: Claude Co-authored-by: Robin Malfait --- CHANGELOG.md | 1 + .../__snapshots__/intellisense.test.ts.snap | 429 ++++++++++++++ packages/tailwindcss/src/utilities.test.ts | 555 ++++++++++++++++++ packages/tailwindcss/src/utilities.ts | 76 +++ 4 files changed, 1061 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc4d2a301536..607302b3042b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add `pbs-*`, `pbe-*`, `mbs-*`, `mbe-*`, `scroll-pbs-*`, `scroll-pbe-*`, `scroll-mbs-*`, `scroll-mbe-*`, `border-bs-*`, `border-be-*` utilities for `padding-block-start`, `padding-block-end`, `margin-block-start`, `margin-block-end`, `scroll-padding-block-start`, `scroll-padding-block-end`, `scroll-margin-block-start`, `scroll-margin-block-end`, `border-block-start`, and `border-block-end` ([`#19601`](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) - Add `@tailwindcss/webpack` loader for Tailwind CSS v4 ([#19610](https://github.com/tailwindlabs/tailwindcss/pull/19610)) +- Add `inline-*`, `min-inline-*`, `max-inline-*`, `block-*`, `min-block-*`, `max-block-*` utilities for `inline-size`, `min-inline-size`, `max-inline-size`, `block-size`, `min-block-size`, and `max-block-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) ## [4.1.18] - 2025-12-11 diff --git a/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap b/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap index 759d91443c1c..87d882840d6c 100644 --- a/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap +++ b/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap @@ -2714,6 +2714,77 @@ exports[`getClassList 1`] = ` "bg-transparent/95", "bg-transparent/100", "block", + "block-0", + "block-0.5", + "block-1", + "block-1.5", + "block-2", + "block-2.5", + "block-3", + "block-3.5", + "block-4", + "block-5", + "block-6", + "block-7", + "block-8", + "block-9", + "block-10", + "block-11", + "block-12", + "block-14", + "block-16", + "block-20", + "block-24", + "block-28", + "block-32", + "block-36", + "block-40", + "block-44", + "block-48", + "block-52", + "block-56", + "block-60", + "block-64", + "block-72", + "block-80", + "block-96", + "block-1/2", + "block-1/3", + "block-1/4", + "block-1/5", + "block-1/6", + "block-1/12", + "block-2/3", + "block-2/4", + "block-2/5", + "block-2/6", + "block-2/12", + "block-3/4", + "block-3/5", + "block-3/6", + "block-3/12", + "block-4/5", + "block-4/6", + "block-4/12", + "block-5/6", + "block-5/12", + "block-6/12", + "block-7/12", + "block-8/12", + "block-9/12", + "block-10/12", + "block-11/12", + "block-auto", + "block-dvh", + "block-fit", + "block-full", + "block-lh", + "block-lvh", + "block-max", + "block-min", + "block-px", + "block-screen", + "block-svh", "blur-none", "border", "border/0", @@ -4952,9 +5023,81 @@ exports[`getClassList 1`] = ` "indent-96", "indent-px", "inline", + "inline-0", + "inline-0.5", + "inline-1", + "inline-1.5", + "inline-2", + "inline-2.5", + "inline-3", + "inline-3.5", + "inline-4", + "inline-5", + "inline-6", + "inline-7", + "inline-8", + "inline-9", + "inline-10", + "inline-11", + "inline-12", + "inline-14", + "inline-16", + "inline-20", + "inline-24", + "inline-28", + "inline-32", + "inline-36", + "inline-40", + "inline-44", + "inline-48", + "inline-52", + "inline-56", + "inline-60", + "inline-64", + "inline-72", + "inline-80", + "inline-96", + "inline-auto", "inline-block", + "inline-dvw", + "inline-fit", "inline-flex", + "inline-full", "inline-grid", + "inline-lg", + "inline-lvw", + "inline-max", + "inline-md", + "inline-1/2", + "inline-1/3", + "inline-1/4", + "inline-1/5", + "inline-1/6", + "inline-1/12", + "inline-2/3", + "inline-2/4", + "inline-2/5", + "inline-2/6", + "inline-2/12", + "inline-3/4", + "inline-3/5", + "inline-3/6", + "inline-3/12", + "inline-4/5", + "inline-4/6", + "inline-4/12", + "inline-5/6", + "inline-5/12", + "inline-6/12", + "inline-7/12", + "inline-8/12", + "inline-9/12", + "inline-10/12", + "inline-11/12", + "inline-min", + "inline-px", + "inline-screen", + "inline-svw", "inline-table", "inset-0", "inset-0.5", @@ -7754,6 +7897,77 @@ exports[`getClassList 1`] = ` "mask-y-to-transparent/90", "mask-y-to-transparent/95", "mask-y-to-transparent/100", + "max-block-0", + "max-block-0.5", + "max-block-1", + "max-block-1.5", + "max-block-2", + "max-block-2.5", + "max-block-3", + "max-block-3.5", + "max-block-4", + "max-block-5", + "max-block-6", + "max-block-7", + "max-block-8", + "max-block-9", + "max-block-10", + "max-block-11", + "max-block-12", + "max-block-14", + "max-block-16", + "max-block-20", + "max-block-24", + "max-block-28", + "max-block-32", + "max-block-36", + "max-block-40", + "max-block-44", + "max-block-48", + "max-block-52", + "max-block-56", + "max-block-60", + "max-block-64", + "max-block-72", + "max-block-80", + "max-block-96", + "max-block-1/2", + "max-block-1/3", + "max-block-1/4", + "max-block-1/5", + "max-block-1/6", + "max-block-1/12", + "max-block-2/3", + "max-block-2/4", + "max-block-2/5", + "max-block-2/6", + "max-block-2/12", + "max-block-3/4", + "max-block-3/5", + "max-block-3/6", + "max-block-3/12", + "max-block-4/5", + "max-block-4/6", + "max-block-4/12", + "max-block-5/6", + "max-block-5/12", + "max-block-6/12", + "max-block-7/12", + "max-block-8/12", + "max-block-9/12", + "max-block-10/12", + "max-block-11/12", + "max-block-dvh", + "max-block-fit", + "max-block-full", + "max-block-lh", + "max-block-lvh", + "max-block-max", + "max-block-min", + "max-block-none", + "max-block-px", + "max-block-screen", + "max-block-svh", "max-h-0", "max-h-0.5", "max-h-1", @@ -7828,6 +8042,78 @@ exports[`getClassList 1`] = ` "max-h-screen", "max-h-svh", "max-h-svw", + "max-inline-0", + "max-inline-0.5", + "max-inline-1", + "max-inline-1.5", + "max-inline-2", + "max-inline-2.5", + "max-inline-3", + "max-inline-3.5", + "max-inline-4", + "max-inline-5", + "max-inline-6", + "max-inline-7", + "max-inline-8", + "max-inline-9", + "max-inline-10", + "max-inline-11", + "max-inline-12", + "max-inline-14", + "max-inline-16", + "max-inline-20", + "max-inline-24", + "max-inline-28", + "max-inline-32", + "max-inline-36", + "max-inline-40", + "max-inline-44", + "max-inline-48", + "max-inline-52", + "max-inline-56", + "max-inline-60", + "max-inline-64", + "max-inline-72", + "max-inline-80", + "max-inline-96", + "max-inline-dvw", + "max-inline-fit", + "max-inline-full", + "max-inline-lg", + "max-inline-lvw", + "max-inline-max", + "max-inline-md", + "max-inline-1/2", + "max-inline-1/3", + "max-inline-1/4", + "max-inline-1/5", + "max-inline-1/6", + "max-inline-1/12", + "max-inline-2/3", + "max-inline-2/4", + "max-inline-2/5", + "max-inline-2/6", + "max-inline-2/12", + "max-inline-3/4", + "max-inline-3/5", + "max-inline-3/6", + "max-inline-3/12", + "max-inline-4/5", + "max-inline-4/6", + "max-inline-4/12", + "max-inline-5/6", + "max-inline-5/12", + "max-inline-6/12", + "max-inline-7/12", + "max-inline-8/12", + "max-inline-9/12", + "max-inline-10/12", + "max-inline-11/12", + "max-inline-min", + "max-inline-none", + "max-inline-px", + "max-inline-screen", + "max-inline-svw", "max-w-0", "max-w-0.5", "max-w-1", @@ -8046,6 +8332,77 @@ exports[`getClassList 1`] = ` "me-96", "me-auto", "me-px", + "min-block-0", + "min-block-0.5", + "min-block-1", + "min-block-1.5", + "min-block-2", + "min-block-2.5", + "min-block-3", + "min-block-3.5", + "min-block-4", + "min-block-5", + "min-block-6", + "min-block-7", + "min-block-8", + "min-block-9", + "min-block-10", + "min-block-11", + "min-block-12", + "min-block-14", + "min-block-16", + "min-block-20", + "min-block-24", + "min-block-28", + "min-block-32", + "min-block-36", + "min-block-40", + "min-block-44", + "min-block-48", + "min-block-52", + "min-block-56", + "min-block-60", + "min-block-64", + "min-block-72", + "min-block-80", + "min-block-96", + "min-block-1/2", + "min-block-1/3", + "min-block-1/4", + "min-block-1/5", + "min-block-1/6", + "min-block-1/12", + "min-block-2/3", + "min-block-2/4", + "min-block-2/5", + "min-block-2/6", + "min-block-2/12", + "min-block-3/4", + "min-block-3/5", + "min-block-3/6", + "min-block-3/12", + "min-block-4/5", + "min-block-4/6", + "min-block-4/12", + "min-block-5/6", + "min-block-5/12", + "min-block-6/12", + "min-block-7/12", + "min-block-8/12", + "min-block-9/12", + "min-block-10/12", + "min-block-11/12", + "min-block-auto", + "min-block-dvh", + "min-block-fit", + "min-block-full", + "min-block-lh", + "min-block-lvh", + "min-block-max", + "min-block-min", + "min-block-px", + "min-block-screen", + "min-block-svh", "min-h-0", "min-h-0.5", "min-h-1", @@ -8120,6 +8477,78 @@ exports[`getClassList 1`] = ` "min-h-screen", "min-h-svh", "min-h-svw", + "min-inline-0", + "min-inline-0.5", + "min-inline-1", + "min-inline-1.5", + "min-inline-2", + "min-inline-2.5", + "min-inline-3", + "min-inline-3.5", + "min-inline-4", + "min-inline-5", + "min-inline-6", + "min-inline-7", + "min-inline-8", + "min-inline-9", + "min-inline-10", + "min-inline-11", + "min-inline-12", + "min-inline-14", + "min-inline-16", + "min-inline-20", + "min-inline-24", + "min-inline-28", + "min-inline-32", + "min-inline-36", + "min-inline-40", + "min-inline-44", + "min-inline-48", + "min-inline-52", + "min-inline-56", + "min-inline-60", + "min-inline-64", + "min-inline-72", + "min-inline-80", + "min-inline-96", + "min-inline-auto", + "min-inline-dvw", + "min-inline-fit", + "min-inline-full", + "min-inline-lg", + "min-inline-lvw", + "min-inline-max", + "min-inline-md", + "min-inline-1/2", + "min-inline-1/3", + "min-inline-1/4", + "min-inline-1/5", + "min-inline-1/6", + "min-inline-1/12", + "min-inline-2/3", + "min-inline-2/4", + "min-inline-2/5", + "min-inline-2/6", + "min-inline-2/12", + "min-inline-3/4", + "min-inline-3/5", + "min-inline-3/6", + "min-inline-3/12", + "min-inline-4/5", + "min-inline-4/6", + "min-inline-4/12", + "min-inline-5/6", + "min-inline-5/12", + "min-inline-6/12", + "min-inline-7/12", + "min-inline-8/12", + "min-inline-9/12", + "min-inline-10/12", + "min-inline-11/12", + "min-inline-min", + "min-inline-px", + "min-inline-screen", + "min-inline-svw", "min-w-0", "min-w-0.5", "min-w-1", diff --git a/packages/tailwindcss/src/utilities.test.ts b/packages/tailwindcss/src/utilities.test.ts index a5991ebfac7a..a6c1ce91e850 100644 --- a/packages/tailwindcss/src/utilities.test.ts +++ b/packages/tailwindcss/src/utilities.test.ts @@ -3662,6 +3662,561 @@ test('max-height', async () => { ).toEqual('') }) +test('inline-size', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + --width-xl: 36rem; + } + @tailwind utilities; + `, + [ + 'inline-full', + 'inline-auto', + 'inline-screen', + 'inline-svw', + 'inline-lvw', + 'inline-dvw', + 'inline-min', + 'inline-max', + 'inline-fit', + 'inline-4', + 'inline-xl', + 'inline-1/2', + 'inline-[4px]', + ], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + --width-xl: 36rem; + } + + .inline-1\\/2 { + inline-size: 50%; + } + + .inline-4 { + inline-size: var(--spacing-4); + } + + .inline-\\[4px\\] { + inline-size: 4px; + } + + .inline-auto { + inline-size: auto; + } + + .inline-dvw { + inline-size: 100dvw; + } + + .inline-fit { + inline-size: fit-content; + } + + .inline-full { + inline-size: 100%; + } + + .inline-lvw { + inline-size: 100lvw; + } + + .inline-max { + inline-size: max-content; + } + + .inline-min { + inline-size: min-content; + } + + .inline-screen { + inline-size: 100vw; + } + + .inline-svw { + inline-size: 100svw; + } + + .inline-xl { + inline-size: var(--width-xl); + }" + `) + expect( + await run([ + 'inline--1', + 'inline--1/2', + 'inline--1/-2', + 'inline-1/-2', + '-inline-4', + '-inline-1/2', + '-inline-[4px]', + 'inline-full/foo', + 'inline-auto/foo', + 'inline-screen/foo', + 'inline-svw/foo', + 'inline-lvw/foo', + 'inline-dvw/foo', + 'inline-min/foo', + 'inline-max/foo', + 'inline-fit/foo', + 'inline-4/foo', + 'inline-xl/foo', + 'inline-1/2/foo', + 'inline-[4px]/foo', + ]), + ).toEqual('') +}) + +test('min-inline-size', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + --container-xl: 36rem; + } + @tailwind utilities; + `, + [ + 'min-inline-full', + 'min-inline-auto', + 'min-inline-min', + 'min-inline-max', + 'min-inline-fit', + 'min-inline-4', + 'min-inline-xl', + 'min-inline-[4px]', + ], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + --container-xl: 36rem; + } + + .min-inline-4 { + min-inline-size: var(--spacing-4); + } + + .min-inline-\\[4px\\] { + min-inline-size: 4px; + } + + .min-inline-auto { + min-inline-size: auto; + } + + .min-inline-fit { + min-inline-size: fit-content; + } + + .min-inline-full { + min-inline-size: 100%; + } + + .min-inline-max { + min-inline-size: max-content; + } + + .min-inline-min { + min-inline-size: min-content; + } + + .min-inline-xl { + min-inline-size: var(--container-xl); + }" + `) + expect( + await run([ + 'min-inline', + '-min-inline-4', + '-min-inline-[4px]', + 'min-inline-auto/foo', + 'min-inline-full/foo', + 'min-inline-min/foo', + 'min-inline-max/foo', + 'min-inline-fit/foo', + 'min-inline-4/foo', + 'min-inline-xl/foo', + 'min-inline-[4px]/foo', + ]), + ).toEqual('') +}) + +test('max-inline-size', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + --container-xl: 36rem; + } + @tailwind utilities; + `, + ['max-inline-none', 'max-inline-full', 'max-inline-max', 'max-inline-fit', 'max-inline-4', 'max-inline-xl', 'max-inline-[4px]'], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + --container-xl: 36rem; + } + + .max-inline-4 { + max-inline-size: var(--spacing-4); + } + + .max-inline-\\[4px\\] { + max-inline-size: 4px; + } + + .max-inline-fit { + max-inline-size: fit-content; + } + + .max-inline-full { + max-inline-size: 100%; + } + + .max-inline-max { + max-inline-size: max-content; + } + + .max-inline-none { + max-inline-size: none; + } + + .max-inline-xl { + max-inline-size: var(--container-xl); + }" + `) + expect( + await run([ + 'max-inline', + 'max-inline-auto', + '-max-inline-4', + '-max-inline-[4px]', + 'max-inline-none/foo', + 'max-inline-full/foo', + 'max-inline-max/foo', + 'max-inline-max/foo', + 'max-inline-fit/foo', + 'max-inline-4/foo', + 'max-inline-xl/foo', + 'max-inline-[4px]/foo', + ]), + ).toEqual('') +}) + +test('block-size', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + } + @tailwind utilities; + `, + [ + 'block-full', + 'block-auto', + 'block-screen', + 'block-svh', + 'block-lvh', + 'block-dvh', + 'block-min', + 'block-lh', + 'block-max', + 'block-fit', + 'block-4', + 'block-1/2', + 'block-[4px]', + ], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + } + + .block-1\\/2 { + block-size: 50%; + } + + .block-4 { + block-size: var(--spacing-4); + } + + .block-\\[4px\\] { + block-size: 4px; + } + + .block-auto { + block-size: auto; + } + + .block-dvh { + block-size: 100dvh; + } + + .block-fit { + block-size: fit-content; + } + + .block-full { + block-size: 100%; + } + + .block-lh { + block-size: 1lh; + } + + .block-lvh { + block-size: 100lvh; + } + + .block-max { + block-size: max-content; + } + + .block-min { + block-size: min-content; + } + + .block-screen { + block-size: 100vh; + } + + .block-svh { + block-size: 100svh; + }" + `) + expect( + await run([ + '-block-4', + 'block--1', + 'block--1/2', + 'block--1/-2', + 'block-1/-2', + '-block-1/2', + '-block-[4px]', + 'block-full/foo', + 'block-auto/foo', + 'block-screen/foo', + 'block-svh/foo', + 'block-lvh/foo', + 'block-dvh/foo', + 'block-lh/foo', + 'block-min/foo', + 'block-max/foo', + 'block-fit/foo', + 'block-4/foo', + 'block-1/2/foo', + 'block-[4px]/foo', + ]), + ).toEqual('') +}) + +test('min-block-size', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + } + @tailwind utilities; + `, + [ + 'min-block-full', + 'min-block-auto', + 'min-block-screen', + 'min-block-svh', + 'min-block-lvh', + 'min-block-dvh', + 'min-block-min', + 'min-block-lh', + 'min-block-max', + 'min-block-fit', + 'min-block-4', + 'min-block-[4px]', + ], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + } + + .min-block-4 { + min-block-size: var(--spacing-4); + } + + .min-block-\\[4px\\] { + min-block-size: 4px; + } + + .min-block-auto { + min-block-size: auto; + } + + .min-block-dvh { + min-block-size: 100dvh; + } + + .min-block-fit { + min-block-size: fit-content; + } + + .min-block-full { + min-block-size: 100%; + } + + .min-block-lh { + min-block-size: 1lh; + } + + .min-block-lvh { + min-block-size: 100lvh; + } + + .min-block-max { + min-block-size: max-content; + } + + .min-block-min { + min-block-size: min-content; + } + + .min-block-screen { + min-block-size: 100vh; + } + + .min-block-svh { + min-block-size: 100svh; + }" + `) + expect( + await run([ + 'min-block', + '-min-block-4', + '-min-block-[4px]', + 'min-block-auto/foo', + 'min-block-full/foo', + 'min-block-screen/foo', + 'min-block-svh/foo', + 'min-block-lvh/foo', + 'min-block-dvh/foo', + 'min-block-lh/foo', + 'min-block-min/foo', + 'min-block-max/foo', + 'min-block-fit/foo', + 'min-block-4/foo', + 'min-block-[4px]/foo', + ]), + ).toEqual('') +}) + +test('max-block-size', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + } + @tailwind utilities; + `, + [ + 'max-block-none', + 'max-block-full', + 'max-block-screen', + 'max-block-svh', + 'max-block-lvh', + 'max-block-dvh', + 'max-block-lh', + 'max-block-min', + 'max-block-max', + 'max-block-fit', + 'max-block-4', + 'max-block-[4px]', + ], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + } + + .max-block-4 { + max-block-size: var(--spacing-4); + } + + .max-block-\\[4px\\] { + max-block-size: 4px; + } + + .max-block-dvh { + max-block-size: 100dvh; + } + + .max-block-fit { + max-block-size: fit-content; + } + + .max-block-full { + max-block-size: 100%; + } + + .max-block-lh { + max-block-size: 1lh; + } + + .max-block-lvh { + max-block-size: 100lvh; + } + + .max-block-max { + max-block-size: max-content; + } + + .max-block-min { + max-block-size: min-content; + } + + .max-block-none { + max-block-size: none; + } + + .max-block-screen { + max-block-size: 100vh; + } + + .max-block-svh { + max-block-size: 100svh; + }" + `) + expect( + await run([ + 'max-block', + 'max-block-auto', + '-max-block-4', + '-max-block-[4px]', + 'max-block-none/foo', + 'max-block-full/foo', + 'max-block-screen/foo', + 'max-block-svh/foo', + 'max-block-lvh/foo', + 'max-block-dvh/foo', + 'max-block-lh/foo', + 'max-block-min/foo', + 'max-block-max/foo', + 'max-block-fit/foo', + 'max-block-4/foo', + 'max-block-[4px]/foo', + ]), + ).toEqual('') +}) + describe('container', () => { test('creates the right media queries and sorts it before width', async () => { expect( diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index be6a4ebe7080..0661a910912f 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -1069,6 +1069,82 @@ export function createUtilities(theme: Theme) { }) } + /** + * @css `inline-size` + * @css `min-inline-size` + * @css `max-inline-size` + * @css `block-size` + * @css `min-block-size` + * @css `max-block-size` + */ + for (let [key, value] of [ + ['full', '100%'], + ['min', 'min-content'], + ['max', 'max-content'], + ['fit', 'fit-content'], + ]) { + staticUtility(`inline-${key}`, [['inline-size', value]]) + staticUtility(`block-${key}`, [['block-size', value]]) + staticUtility(`min-inline-${key}`, [['min-inline-size', value]]) + staticUtility(`min-block-${key}`, [['min-block-size', value]]) + staticUtility(`max-inline-${key}`, [['max-inline-size', value]]) + staticUtility(`max-block-${key}`, [['max-block-size', value]]) + } + + // inline-size viewport units (like width) + for (let [key, value] of [ + ['svw', '100svw'], + ['lvw', '100lvw'], + ['dvw', '100dvw'], + ]) { + staticUtility(`inline-${key}`, [['inline-size', value]]) + staticUtility(`min-inline-${key}`, [['min-inline-size', value]]) + staticUtility(`max-inline-${key}`, [['max-inline-size', value]]) + } + + // block-size viewport units (like height) + for (let [key, value] of [ + ['svh', '100svh'], + ['lvh', '100lvh'], + ['dvh', '100dvh'], + ]) { + staticUtility(`block-${key}`, [['block-size', value]]) + staticUtility(`min-block-${key}`, [['min-block-size', value]]) + staticUtility(`max-block-${key}`, [['max-block-size', value]]) + } + + staticUtility(`inline-auto`, [['inline-size', 'auto']]) + staticUtility(`block-auto`, [['block-size', 'auto']]) + staticUtility(`min-inline-auto`, [['min-inline-size', 'auto']]) + staticUtility(`min-block-auto`, [['min-block-size', 'auto']]) + + staticUtility(`block-lh`, [['block-size', '1lh']]) + staticUtility(`min-block-lh`, [['min-block-size', '1lh']]) + staticUtility(`max-block-lh`, [['max-block-size', '1lh']]) + + staticUtility(`inline-screen`, [['inline-size', '100vw']]) + staticUtility(`min-inline-screen`, [['min-inline-size', '100vw']]) + staticUtility(`max-inline-screen`, [['max-inline-size', '100vw']]) + staticUtility(`block-screen`, [['block-size', '100vh']]) + staticUtility(`min-block-screen`, [['min-block-size', '100vh']]) + staticUtility(`max-block-screen`, [['max-block-size', '100vh']]) + + staticUtility(`max-inline-none`, [['max-inline-size', 'none']]) + staticUtility(`max-block-none`, [['max-block-size', 'none']]) + + for (let [name, namespaces, property] of [ + ['inline', ['--width', '--spacing', '--container'], 'inline-size'], + ['min-inline', ['--min-width', '--spacing', '--container'], 'min-inline-size'], + ['max-inline', ['--max-width', '--spacing', '--container'], 'max-inline-size'], + ['block', ['--height', '--spacing'], 'block-size'], + ['min-block', ['--min-height', '--height', '--spacing'], 'min-block-size'], + ['max-block', ['--max-height', '--height', '--spacing'], 'max-block-size'], + ] as [string, ThemeKey[], string][]) { + spacingUtility(name, namespaces, (value) => [decl(property, value)], { + supportsFractions: true, + }) + } + utilities.static('container', () => { let breakpoints = [...theme.namespace('--breakpoint').values()] breakpoints.sort((a, z) => compareBreakpoints(a, z, 'asc')) From 5395c7e7646ac09d9accf5517a0d07e13792dcbf Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 30 Jan 2026 15:13:56 +0100 Subject: [PATCH 064/100] Add logical inset utilities (inset-s, inset-e, inset-bs, inset-be) (#19613) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary This PR adds support for logical inset utilities that map to CSS logical properties: - `inset-s` → `inset-inline-start` - `inset-e` → `inset-inline-end` - `inset-bs` → `inset-block-start` - `inset-be` → `inset-block-end` These utilities complement the existing `inset-x` (inline) and `inset-y` (block) utilities, providing more granular control over positioning in a direction-aware manner. This aligns with CSS logical properties and improves support for internationalization (RTL/LTR languages). ### Changes 1. **property-order.ts**: Added `inset-block-start` and `inset-block-end` to the property ordering list to ensure consistent cascade ordering 2. **utilities.ts**: Added four new utility mappings for the logical inset properties 3. **utilities.test.ts**: Added comprehensive test coverage for all four new utilities, including: - Valid class generation with various value types (custom spacing, percentages, arbitrary values) - Negative value support - Invalid class rejection (malformed syntax, invalid modifiers) ## Test plan All changes are covered by unit tests in `utilities.test.ts`: - `inset-s` test: 8 valid classes + 13 invalid class assertions - `inset-e` test: 8 valid classes + 13 invalid class assertions - `inset-bs` test: 8 valid classes + 13 invalid class assertions - `inset-be` test: 8 valid classes + 13 invalid class assertions Each test verifies correct CSS output generation and proper rejection of malformed utilities. https://claude.ai/code/session_01JcYXVAMawRuntKatjku1WZ --------- Co-authored-by: Claude Co-authored-by: Robin Malfait --- CHANGELOG.md | 7 +- .../__snapshots__/intellisense.test.ts.snap | 740 ++++++++++++------ .../src/compat/legacy-utilities.test.ts | 174 ++++ .../src/compat/legacy-utilities.ts | 67 +- packages/tailwindcss/src/property-order.ts | 2 + packages/tailwindcss/src/utilities.test.ts | 304 +++++-- packages/tailwindcss/src/utilities.ts | 6 +- 7 files changed, 995 insertions(+), 305 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 607302b3042b..93f0446eb918 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,10 +18,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Add `pbs-*`, `pbe-*`, `mbs-*`, `mbe-*`, `scroll-pbs-*`, `scroll-pbe-*`, `scroll-mbs-*`, `scroll-mbe-*`, `border-bs-*`, `border-be-*` utilities for `padding-block-start`, `padding-block-end`, `margin-block-start`, `margin-block-end`, `scroll-padding-block-start`, `scroll-padding-block-end`, `scroll-margin-block-start`, `scroll-margin-block-end`, `border-block-start`, and `border-block-end` ([`#19601`](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) - Add `@tailwindcss/webpack` loader for Tailwind CSS v4 ([#19610](https://github.com/tailwindlabs/tailwindcss/pull/19610)) +- Add `pbs-*`, `pbe-*`, `mbs-*`, `mbe-*`, `scroll-pbs-*`, `scroll-pbe-*`, `scroll-mbs-*`, `scroll-mbe-*`, `border-bs-*`, `border-be-*` utilities for `padding-block-start`, `padding-block-end`, `margin-block-start`, `margin-block-end`, `scroll-padding-block-start`, `scroll-padding-block-end`, `scroll-margin-block-start`, `scroll-margin-block-end`, `border-block-start`, and `border-block-end` ([`#19601`](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - Add `inline-*`, `min-inline-*`, `max-inline-*`, `block-*`, `min-block-*`, `max-block-*` utilities for `inline-size`, `min-inline-size`, `max-inline-size`, `block-size`, `min-block-size`, and `max-block-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) +- Add `inset-s-*`, `inset-e-*`, `inset-bs-*`, `inset-be-*` utilities for `inset-inline-start`, `inset-inline-end`, `inset-block-start`, and `inset-block-end` ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) + +### Deprecated + +- Deprecate `start-*` and `end-*` utilities in favor of `inline-s-*` and `inline-e-*` ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) ## [4.1.18] - 2025-12-11 diff --git a/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap b/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap index 87d882840d6c..3bf7905409b2 100644 --- a/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap +++ b/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap @@ -306,66 +306,6 @@ exports[`getClassList 1`] = ` "-col-start-11", "-col-start-12", "-col-start-13", - "-end-0", - "-end-0.5", - "-end-1", - "-end-1.5", - "-end-2", - "-end-2.5", - "-end-3", - "-end-3.5", - "-end-4", - "-end-5", - "-end-6", - "-end-7", - "-end-8", - "-end-9", - "-end-10", - "-end-11", - "-end-12", - "-end-14", - "-end-16", - "-end-20", - "-end-24", - "-end-28", - "-end-32", - "-end-36", - "-end-40", - "-end-44", - "-end-48", - "-end-52", - "-end-56", - "-end-60", - "-end-64", - "-end-72", - "-end-80", - "-end-96", - "-end-1/2", - "-end-1/3", - "-end-1/4", - "-end-1/5", - "-end-1/6", - "-end-1/12", - "-end-2/3", - "-end-2/4", - "-end-2/5", - "-end-2/6", - "-end-2/12", - "-end-3/4", - "-end-3/5", - "-end-3/6", - "-end-3/12", - "-end-4/5", - "-end-4/6", - "-end-4/12", - "-end-5/6", - "-end-5/12", - "-end-6/12", - "-end-7/12", - "-end-8/12", - "-end-9/12", - "-end-10/12", - "-end-11/12", "-end-full", "-end-px", "-indent-0", @@ -463,8 +403,256 @@ exports[`getClassList 1`] = ` "-inset-9/12", "-inset-10/12", "-inset-11/12", + "-inset-be-0", + "-inset-be-0.5", + "-inset-be-1", + "-inset-be-1.5", + "-inset-be-2", + "-inset-be-2.5", + "-inset-be-3", + "-inset-be-3.5", + "-inset-be-4", + "-inset-be-5", + "-inset-be-6", + "-inset-be-7", + "-inset-be-8", + "-inset-be-9", + "-inset-be-10", + "-inset-be-11", + "-inset-be-12", + "-inset-be-14", + "-inset-be-16", + "-inset-be-20", + "-inset-be-24", + "-inset-be-28", + "-inset-be-32", + "-inset-be-36", + "-inset-be-40", + "-inset-be-44", + "-inset-be-48", + "-inset-be-52", + "-inset-be-56", + "-inset-be-60", + "-inset-be-64", + "-inset-be-72", + "-inset-be-80", + "-inset-be-96", + "-inset-be-1/2", + "-inset-be-1/3", + "-inset-be-1/4", + "-inset-be-1/5", + "-inset-be-1/6", + "-inset-be-1/12", + "-inset-be-2/3", + "-inset-be-2/4", + "-inset-be-2/5", + "-inset-be-2/6", + "-inset-be-2/12", + "-inset-be-3/4", + "-inset-be-3/5", + "-inset-be-3/6", + "-inset-be-3/12", + "-inset-be-4/5", + "-inset-be-4/6", + "-inset-be-4/12", + "-inset-be-5/6", + "-inset-be-5/12", + "-inset-be-6/12", + "-inset-be-7/12", + "-inset-be-8/12", + "-inset-be-9/12", + "-inset-be-10/12", + "-inset-be-11/12", + "-inset-be-full", + "-inset-be-px", + "-inset-bs-0", + "-inset-bs-0.5", + "-inset-bs-1", + "-inset-bs-1.5", + "-inset-bs-2", + "-inset-bs-2.5", + "-inset-bs-3", + "-inset-bs-3.5", + "-inset-bs-4", + "-inset-bs-5", + "-inset-bs-6", + "-inset-bs-7", + "-inset-bs-8", + "-inset-bs-9", + "-inset-bs-10", + "-inset-bs-11", + "-inset-bs-12", + "-inset-bs-14", + "-inset-bs-16", + "-inset-bs-20", + "-inset-bs-24", + "-inset-bs-28", + "-inset-bs-32", + "-inset-bs-36", + "-inset-bs-40", + "-inset-bs-44", + "-inset-bs-48", + "-inset-bs-52", + "-inset-bs-56", + "-inset-bs-60", + "-inset-bs-64", + "-inset-bs-72", + "-inset-bs-80", + "-inset-bs-96", + "-inset-bs-1/2", + "-inset-bs-1/3", + "-inset-bs-1/4", + "-inset-bs-1/5", + "-inset-bs-1/6", + "-inset-bs-1/12", + "-inset-bs-2/3", + "-inset-bs-2/4", + "-inset-bs-2/5", + "-inset-bs-2/6", + "-inset-bs-2/12", + "-inset-bs-3/4", + "-inset-bs-3/5", + "-inset-bs-3/6", + "-inset-bs-3/12", + "-inset-bs-4/5", + "-inset-bs-4/6", + "-inset-bs-4/12", + "-inset-bs-5/6", + "-inset-bs-5/12", + "-inset-bs-6/12", + "-inset-bs-7/12", + "-inset-bs-8/12", + "-inset-bs-9/12", + "-inset-bs-10/12", + "-inset-bs-11/12", + "-inset-bs-full", + "-inset-bs-px", + "-inset-e-0", + "-inset-e-0.5", + "-inset-e-1", + "-inset-e-1.5", + "-inset-e-2", + "-inset-e-2.5", + "-inset-e-3", + "-inset-e-3.5", + "-inset-e-4", + "-inset-e-5", + "-inset-e-6", + "-inset-e-7", + "-inset-e-8", + "-inset-e-9", + "-inset-e-10", + "-inset-e-11", + "-inset-e-12", + "-inset-e-14", + "-inset-e-16", + "-inset-e-20", + "-inset-e-24", + "-inset-e-28", + "-inset-e-32", + "-inset-e-36", + "-inset-e-40", + "-inset-e-44", + "-inset-e-48", + "-inset-e-52", + "-inset-e-56", + "-inset-e-60", + "-inset-e-64", + "-inset-e-72", + "-inset-e-80", + "-inset-e-96", + "-inset-e-1/2", + "-inset-e-1/3", + "-inset-e-1/4", + "-inset-e-1/5", + "-inset-e-1/6", + "-inset-e-1/12", + "-inset-e-2/3", + "-inset-e-2/4", + "-inset-e-2/5", + "-inset-e-2/6", + "-inset-e-2/12", + "-inset-e-3/4", + "-inset-e-3/5", + "-inset-e-3/6", + "-inset-e-3/12", + "-inset-e-4/5", + "-inset-e-4/6", + "-inset-e-4/12", + "-inset-e-5/6", + "-inset-e-5/12", + "-inset-e-6/12", + "-inset-e-7/12", + "-inset-e-8/12", + "-inset-e-9/12", + "-inset-e-10/12", + "-inset-e-11/12", + "-inset-e-full", + "-inset-e-px", "-inset-full", "-inset-px", + "-inset-s-0", + "-inset-s-0.5", + "-inset-s-1", + "-inset-s-1.5", + "-inset-s-2", + "-inset-s-2.5", + "-inset-s-3", + "-inset-s-3.5", + "-inset-s-4", + "-inset-s-5", + "-inset-s-6", + "-inset-s-7", + "-inset-s-8", + "-inset-s-9", + "-inset-s-10", + "-inset-s-11", + "-inset-s-12", + "-inset-s-14", + "-inset-s-16", + "-inset-s-20", + "-inset-s-24", + "-inset-s-28", + "-inset-s-32", + "-inset-s-36", + "-inset-s-40", + "-inset-s-44", + "-inset-s-48", + "-inset-s-52", + "-inset-s-56", + "-inset-s-60", + "-inset-s-64", + "-inset-s-72", + "-inset-s-80", + "-inset-s-96", + "-inset-s-1/2", + "-inset-s-1/3", + "-inset-s-1/4", + "-inset-s-1/5", + "-inset-s-1/6", + "-inset-s-1/12", + "-inset-s-2/3", + "-inset-s-2/4", + "-inset-s-2/5", + "-inset-s-2/6", + "-inset-s-2/12", + "-inset-s-3/4", + "-inset-s-3/5", + "-inset-s-3/6", + "-inset-s-3/12", + "-inset-s-4/5", + "-inset-s-4/6", + "-inset-s-4/12", + "-inset-s-5/6", + "-inset-s-5/12", + "-inset-s-6/12", + "-inset-s-7/12", + "-inset-s-8/12", + "-inset-s-9/12", + "-inset-s-10/12", + "-inset-s-11/12", + "-inset-s-full", + "-inset-s-px", "-inset-x-0", "-inset-x-0.5", "-inset-x-1", @@ -1712,66 +1900,6 @@ exports[`getClassList 1`] = ` "-space-y-80", "-space-y-96", "-space-y-px", - "-start-0", - "-start-0.5", - "-start-1", - "-start-1.5", - "-start-2", - "-start-2.5", - "-start-3", - "-start-3.5", - "-start-4", - "-start-5", - "-start-6", - "-start-7", - "-start-8", - "-start-9", - "-start-10", - "-start-11", - "-start-12", - "-start-14", - "-start-16", - "-start-20", - "-start-24", - "-start-28", - "-start-32", - "-start-36", - "-start-40", - "-start-44", - "-start-48", - "-start-52", - "-start-56", - "-start-60", - "-start-64", - "-start-72", - "-start-80", - "-start-96", - "-start-1/2", - "-start-1/3", - "-start-1/4", - "-start-1/5", - "-start-1/6", - "-start-1/12", - "-start-2/3", - "-start-2/4", - "-start-2/5", - "-start-2/6", - "-start-2/12", - "-start-3/4", - "-start-3/5", - "-start-3/6", - "-start-3/12", - "-start-4/5", - "-start-4/6", - "-start-4/12", - "-start-5/6", - "-start-5/12", - "-start-6/12", - "-start-7/12", - "-start-8/12", - "-start-9/12", - "-start-10/12", - "-start-11/12", "-start-full", "-start-px", "-top-0", @@ -4457,66 +4585,6 @@ exports[`getClassList 1`] = ` "duration-initial", "ease-initial", "ease-linear", - "end-0", - "end-0.5", - "end-1", - "end-1.5", - "end-2", - "end-2.5", - "end-3", - "end-3.5", - "end-4", - "end-5", - "end-6", - "end-7", - "end-8", - "end-9", - "end-10", - "end-11", - "end-12", - "end-14", - "end-16", - "end-20", - "end-24", - "end-28", - "end-32", - "end-36", - "end-40", - "end-44", - "end-48", - "end-52", - "end-56", - "end-60", - "end-64", - "end-72", - "end-80", - "end-96", - "end-1/2", - "end-1/3", - "end-1/4", - "end-1/5", - "end-1/6", - "end-1/12", - "end-2/3", - "end-2/4", - "end-2/5", - "end-2/6", - "end-2/12", - "end-3/4", - "end-3/5", - "end-3/6", - "end-3/12", - "end-4/5", - "end-4/6", - "end-4/12", - "end-5/6", - "end-5/12", - "end-6/12", - "end-7/12", - "end-8/12", - "end-9/12", - "end-10/12", - "end-11/12", "end-auto", "end-full", "end-px", @@ -5160,6 +5228,195 @@ exports[`getClassList 1`] = ` "inset-10/12", "inset-11/12", "inset-auto", + "inset-be-0", + "inset-be-0.5", + "inset-be-1", + "inset-be-1.5", + "inset-be-2", + "inset-be-2.5", + "inset-be-3", + "inset-be-3.5", + "inset-be-4", + "inset-be-5", + "inset-be-6", + "inset-be-7", + "inset-be-8", + "inset-be-9", + "inset-be-10", + "inset-be-11", + "inset-be-12", + "inset-be-14", + "inset-be-16", + "inset-be-20", + "inset-be-24", + "inset-be-28", + "inset-be-32", + "inset-be-36", + "inset-be-40", + "inset-be-44", + "inset-be-48", + "inset-be-52", + "inset-be-56", + "inset-be-60", + "inset-be-64", + "inset-be-72", + "inset-be-80", + "inset-be-96", + "inset-be-1/2", + "inset-be-1/3", + "inset-be-1/4", + "inset-be-1/5", + "inset-be-1/6", + "inset-be-1/12", + "inset-be-2/3", + "inset-be-2/4", + "inset-be-2/5", + "inset-be-2/6", + "inset-be-2/12", + "inset-be-3/4", + "inset-be-3/5", + "inset-be-3/6", + "inset-be-3/12", + "inset-be-4/5", + "inset-be-4/6", + "inset-be-4/12", + "inset-be-5/6", + "inset-be-5/12", + "inset-be-6/12", + "inset-be-7/12", + "inset-be-8/12", + "inset-be-9/12", + "inset-be-10/12", + "inset-be-11/12", + "inset-be-auto", + "inset-be-full", + "inset-be-px", + "inset-bs-0", + "inset-bs-0.5", + "inset-bs-1", + "inset-bs-1.5", + "inset-bs-2", + "inset-bs-2.5", + "inset-bs-3", + "inset-bs-3.5", + "inset-bs-4", + "inset-bs-5", + "inset-bs-6", + "inset-bs-7", + "inset-bs-8", + "inset-bs-9", + "inset-bs-10", + "inset-bs-11", + "inset-bs-12", + "inset-bs-14", + "inset-bs-16", + "inset-bs-20", + "inset-bs-24", + "inset-bs-28", + "inset-bs-32", + "inset-bs-36", + "inset-bs-40", + "inset-bs-44", + "inset-bs-48", + "inset-bs-52", + "inset-bs-56", + "inset-bs-60", + "inset-bs-64", + "inset-bs-72", + "inset-bs-80", + "inset-bs-96", + "inset-bs-1/2", + "inset-bs-1/3", + "inset-bs-1/4", + "inset-bs-1/5", + "inset-bs-1/6", + "inset-bs-1/12", + "inset-bs-2/3", + "inset-bs-2/4", + "inset-bs-2/5", + "inset-bs-2/6", + "inset-bs-2/12", + "inset-bs-3/4", + "inset-bs-3/5", + "inset-bs-3/6", + "inset-bs-3/12", + "inset-bs-4/5", + "inset-bs-4/6", + "inset-bs-4/12", + "inset-bs-5/6", + "inset-bs-5/12", + "inset-bs-6/12", + "inset-bs-7/12", + "inset-bs-8/12", + "inset-bs-9/12", + "inset-bs-10/12", + "inset-bs-11/12", + "inset-bs-auto", + "inset-bs-full", + "inset-bs-px", + "inset-e-0", + "inset-e-0.5", + "inset-e-1", + "inset-e-1.5", + "inset-e-2", + "inset-e-2.5", + "inset-e-3", + "inset-e-3.5", + "inset-e-4", + "inset-e-5", + "inset-e-6", + "inset-e-7", + "inset-e-8", + "inset-e-9", + "inset-e-10", + "inset-e-11", + "inset-e-12", + "inset-e-14", + "inset-e-16", + "inset-e-20", + "inset-e-24", + "inset-e-28", + "inset-e-32", + "inset-e-36", + "inset-e-40", + "inset-e-44", + "inset-e-48", + "inset-e-52", + "inset-e-56", + "inset-e-60", + "inset-e-64", + "inset-e-72", + "inset-e-80", + "inset-e-96", + "inset-e-1/2", + "inset-e-1/3", + "inset-e-1/4", + "inset-e-1/5", + "inset-e-1/6", + "inset-e-1/12", + "inset-e-2/3", + "inset-e-2/4", + "inset-e-2/5", + "inset-e-2/6", + "inset-e-2/12", + "inset-e-3/4", + "inset-e-3/5", + "inset-e-3/6", + "inset-e-3/12", + "inset-e-4/5", + "inset-e-4/6", + "inset-e-4/12", + "inset-e-5/6", + "inset-e-5/12", + "inset-e-6/12", + "inset-e-7/12", + "inset-e-8/12", + "inset-e-9/12", + "inset-e-10/12", + "inset-e-11/12", + "inset-e-auto", + "inset-e-full", + "inset-e-px", "inset-full", "inset-px", "inset-ring", @@ -5234,6 +5491,69 @@ exports[`getClassList 1`] = ` "inset-ring-transparent/90", "inset-ring-transparent/95", "inset-ring-transparent/100", + "inset-s-0", + "inset-s-0.5", + "inset-s-1", + "inset-s-1.5", + "inset-s-2", + "inset-s-2.5", + "inset-s-3", + "inset-s-3.5", + "inset-s-4", + "inset-s-5", + "inset-s-6", + "inset-s-7", + "inset-s-8", + "inset-s-9", + "inset-s-10", + "inset-s-11", + "inset-s-12", + "inset-s-14", + "inset-s-16", + "inset-s-20", + "inset-s-24", + "inset-s-28", + "inset-s-32", + "inset-s-36", + "inset-s-40", + "inset-s-44", + "inset-s-48", + "inset-s-52", + "inset-s-56", + "inset-s-60", + "inset-s-64", + "inset-s-72", + "inset-s-80", + "inset-s-96", + "inset-s-1/2", + "inset-s-1/3", + "inset-s-1/4", + "inset-s-1/5", + "inset-s-1/6", + "inset-s-1/12", + "inset-s-2/3", + "inset-s-2/4", + "inset-s-2/5", + "inset-s-2/6", + "inset-s-2/12", + "inset-s-3/4", + "inset-s-3/5", + "inset-s-3/6", + "inset-s-3/12", + "inset-s-4/5", + "inset-s-4/6", + "inset-s-4/12", + "inset-s-5/6", + "inset-s-5/12", + "inset-s-6/12", + "inset-s-7/12", + "inset-s-8/12", + "inset-s-9/12", + "inset-s-10/12", + "inset-s-11/12", + "inset-s-auto", + "inset-s-full", + "inset-s-px", "inset-shadow-current", "inset-shadow-current/0", "inset-shadow-current/5", @@ -10957,66 +11277,6 @@ exports[`getClassList 1`] = ` "space-y-reverse", "sr-only", "stacked-fractions", - "start-0", - "start-0.5", - "start-1", - "start-1.5", - "start-2", - "start-2.5", - "start-3", - "start-3.5", - "start-4", - "start-5", - "start-6", - "start-7", - "start-8", - "start-9", - "start-10", - "start-11", - "start-12", - "start-14", - "start-16", - "start-20", - "start-24", - "start-28", - "start-32", - "start-36", - "start-40", - "start-44", - "start-48", - "start-52", - "start-56", - "start-60", - "start-64", - "start-72", - "start-80", - "start-96", - "start-1/2", - "start-1/3", - "start-1/4", - "start-1/5", - "start-1/6", - "start-1/12", - "start-2/3", - "start-2/4", - "start-2/5", - "start-2/6", - "start-2/12", - "start-3/4", - "start-3/5", - "start-3/6", - "start-3/12", - "start-4/5", - "start-4/6", - "start-4/12", - "start-5/6", - "start-5/12", - "start-6/12", - "start-7/12", - "start-8/12", - "start-9/12", - "start-10/12", - "start-11/12", "start-auto", "start-full", "start-px", diff --git a/packages/tailwindcss/src/compat/legacy-utilities.test.ts b/packages/tailwindcss/src/compat/legacy-utilities.test.ts index 9a828d673b78..24222f882f75 100644 --- a/packages/tailwindcss/src/compat/legacy-utilities.test.ts +++ b/packages/tailwindcss/src/compat/legacy-utilities.test.ts @@ -211,3 +211,177 @@ test('flex-shrink', async () => { ]), ).toEqual('') }) + +test('start', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + --inset-shadowned: 1940px; + } + @tailwind utilities; + `, + [ + 'start-shadowned', + 'start-auto', + '-start-full', + 'start-full', + 'start-3/4', + 'start-4', + '-start-4', + 'start-[4px]', + ], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + --inset-shadowned: 1940px; + } + + .-start-4 { + inset-inline-start: calc(var(--spacing-4) * -1); + } + + .-start-full { + inset-inline-start: -100%; + } + + .start-3\\/4 { + inset-inline-start: 75%; + } + + .start-4 { + inset-inline-start: var(--spacing-4); + } + + .start-\\[4px\\] { + inset-inline-start: 4px; + } + + .start-auto { + inset-inline-start: auto; + } + + .start-full { + inset-inline-start: 100%; + } + + .start-shadowned { + inset-inline-start: var(--inset-shadowned); + }" + `) + expect( + await compileCss( + css` + @theme reference { + --spacing-4: 1rem; + --inset-shadow-sm: inset 0 1px 1px rgb(0 0 0 / 0.05); + } + @tailwind utilities; + `, + [ + 'start-shadow-sm', + 'start', + 'start--1', + 'start--1/2', + 'start--1/-2', + 'start-1/-2', + 'start-auto/foo', + '-start-full/foo', + 'start-full/foo', + 'start-3/4/foo', + 'start-4/foo', + '-start-4/foo', + 'start-[4px]/foo', + ], + ), + ).toEqual('') +}) + +test('end', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + --inset-shadowned: 1940px; + } + @tailwind utilities; + `, + [ + 'end-shadowned', + 'end-auto', + '-end-full', + 'end-full', + 'end-3/4', + 'end-4', + '-end-4', + 'end-[4px]', + ], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + --inset-shadowned: 1940px; + } + + .-end-4 { + inset-inline-end: calc(var(--spacing-4) * -1); + } + + .-end-full { + inset-inline-end: -100%; + } + + .end-3\\/4 { + inset-inline-end: 75%; + } + + .end-4 { + inset-inline-end: var(--spacing-4); + } + + .end-\\[4px\\] { + inset-inline-end: 4px; + } + + .end-auto { + inset-inline-end: auto; + } + + .end-full { + inset-inline-end: 100%; + } + + .end-shadowned { + inset-inline-end: var(--inset-shadowned); + }" + `) + expect( + await compileCss( + css` + @theme reference { + --spacing-4: 1rem; + --inset-shadow-sm: inset 0 1px 1px rgb(0 0 0 / 0.05); + } + @tailwind utilities; + `, + [ + 'end-shadow-sm', + 'end', + 'end--1', + 'end--1/2', + 'end--1/-2', + 'end-1/-2', + 'end-auto/foo', + '-end-full/foo', + 'end-full/foo', + 'end-3/4/foo', + 'end-4/foo', + '-end-4/foo', + 'end-[4px]/foo', + ], + ), + ).toEqual('') +}) diff --git a/packages/tailwindcss/src/compat/legacy-utilities.ts b/packages/tailwindcss/src/compat/legacy-utilities.ts index ffefca940e35..dc53e42179c8 100644 --- a/packages/tailwindcss/src/compat/legacy-utilities.ts +++ b/packages/tailwindcss/src/compat/legacy-utilities.ts @@ -1,6 +1,7 @@ import { decl } from '../ast' import type { DesignSystem } from '../design-system' -import { isPositiveInteger } from '../utils/infer-data-type' +import { isPositiveInteger, isValidSpacingMultiplier } from '../utils/infer-data-type' +import { segment } from '../utils/segment' export function registerLegacyUtilities(designSystem: DesignSystem) { for (let [value, direction] of [ @@ -111,4 +112,68 @@ export function registerLegacyUtilities(designSystem: DesignSystem) { designSystem.utilities.suggest('break-words', () => []) designSystem.utilities.static('break-words', () => [decl('overflow-wrap', 'break-word')]) + + // Legacy `start` and `end` inset utilities, replaced by `inset-s` and `inset-e` + for (let [name, property] of [ + ['start', 'inset-inline-start'], + ['end', 'inset-inline-end'], + ] as const) { + designSystem.utilities.static(`${name}-auto`, () => [decl(property, 'auto')]) + designSystem.utilities.static(`${name}-full`, () => [decl(property, '100%')]) + designSystem.utilities.static(`-${name}-full`, () => [decl(property, '-100%')]) + designSystem.utilities.static(`${name}-px`, () => [decl(property, '1px')]) + designSystem.utilities.static(`-${name}-px`, () => [decl(property, '-1px')]) + + function handleInset({ negative }: { negative: boolean }) { + return (candidate: Extract) => { + if (!candidate.value) { + if (candidate.modifier) return + let value = designSystem.theme.resolve(null, ['--inset', '--spacing']) + if (value === null) return + return [decl(property, negative ? `calc(${value} * -1)` : value)] + } + + if (candidate.value.kind === 'arbitrary') { + if (candidate.modifier) return + let value = candidate.value.value + return [decl(property, negative ? `calc(${value} * -1)` : value)] + } + + let value = designSystem.theme.resolve(candidate.value.fraction ?? candidate.value.value, [ + '--inset', + '--spacing', + ]) + + // Handle fractions like `start-1/2` + if (value === null && candidate.value.fraction) { + let [lhs, rhs] = segment(candidate.value.fraction, '/') + if (!isPositiveInteger(lhs) || !isPositiveInteger(rhs)) return + value = `calc(${candidate.value.fraction} * 100%)` + } + + // Handle bare spacing multiplier values like `start-4` + if (value === null && negative) { + let multiplier = designSystem.theme.resolve(null, ['--spacing']) + if (multiplier && isValidSpacingMultiplier(candidate.value.value)) { + value = `calc(${multiplier} * -${candidate.value.value})` + if (value !== null) return [decl(property, value)] + } + } + + if (value === null) { + let multiplier = designSystem.theme.resolve(null, ['--spacing']) + if (multiplier && isValidSpacingMultiplier(candidate.value.value)) { + value = `calc(${multiplier} * ${candidate.value.value})` + } + } + + if (value === null) return + + return [decl(property, negative ? `calc(${value} * -1)` : value)] + } + } + + designSystem.utilities.functional(`-${name}`, handleInset({ negative: true })) + designSystem.utilities.functional(name, handleInset({ negative: false })) + } } diff --git a/packages/tailwindcss/src/property-order.ts b/packages/tailwindcss/src/property-order.ts index 03d0440ae083..5177d8e2f405 100644 --- a/packages/tailwindcss/src/property-order.ts +++ b/packages/tailwindcss/src/property-order.ts @@ -11,6 +11,8 @@ export default [ 'inset-block', 'inset-inline-start', 'inset-inline-end', + 'inset-block-start', + 'inset-block-end', 'top', 'right', 'bottom', diff --git a/packages/tailwindcss/src/utilities.test.ts b/packages/tailwindcss/src/utilities.test.ts index a6c1ce91e850..64a1d3396d44 100644 --- a/packages/tailwindcss/src/utilities.test.ts +++ b/packages/tailwindcss/src/utilities.test.ts @@ -480,7 +480,7 @@ test('inset-y', async () => { ).toEqual('') }) -test('start', async () => { +test('inset-s', async () => { expect( await compileCss( css` @@ -491,14 +491,14 @@ test('start', async () => { @tailwind utilities; `, [ - 'start-shadowned', - 'start-auto', - '-start-full', - 'start-full', - 'start-3/4', - 'start-4', - '-start-4', - 'start-[4px]', + 'inset-s-shadowned', + 'inset-s-auto', + '-inset-s-full', + 'inset-s-full', + 'inset-s-3/4', + 'inset-s-4', + '-inset-s-4', + 'inset-s-[4px]', ], ), ).toMatchInlineSnapshot(` @@ -507,35 +507,35 @@ test('start', async () => { --inset-shadowned: 1940px; } - .-start-4 { + .-inset-s-4 { inset-inline-start: calc(var(--spacing-4) * -1); } - .-start-full { + .-inset-s-full { inset-inline-start: -100%; } - .start-3\\/4 { + .inset-s-3\\/4 { inset-inline-start: 75%; } - .start-4 { + .inset-s-4 { inset-inline-start: var(--spacing-4); } - .start-\\[4px\\] { + .inset-s-\\[4px\\] { inset-inline-start: 4px; } - .start-auto { + .inset-s-auto { inset-inline-start: auto; } - .start-full { + .inset-s-full { inset-inline-start: 100%; } - .start-shadowned { + .inset-s-shadowned { inset-inline-start: var(--inset-shadowned); }" `) @@ -549,25 +549,25 @@ test('start', async () => { @tailwind utilities; `, [ - 'start-shadow-sm', - 'start', - 'start--1', - 'start--1/2', - 'start--1/-2', - 'start-1/-2', - 'start-auto/foo', - '-start-full/foo', - 'start-full/foo', - 'start-3/4/foo', - 'start-4/foo', - '-start-4/foo', - 'start-[4px]/foo', + 'inset-s-shadow-sm', + 'inset-s', + 'inset-s--1', + 'inset-s--1/2', + 'inset-s--1/-2', + 'inset-s-1/-2', + 'inset-s-auto/foo', + '-inset-s-full/foo', + 'inset-s-full/foo', + 'inset-s-3/4/foo', + 'inset-s-4/foo', + '-inset-s-4/foo', + 'inset-s-[4px]/foo', ], ), ).toEqual('') }) -test('end', async () => { +test('inset-e', async () => { expect( await compileCss( css` @@ -578,14 +578,14 @@ test('end', async () => { @tailwind utilities; `, [ - 'end-shadowned', - 'end-auto', - '-end-full', - 'end-full', - 'end-3/4', - 'end-4', - '-end-4', - 'end-[4px]', + 'inset-e-shadowned', + 'inset-e-auto', + '-inset-e-full', + 'inset-e-full', + 'inset-e-3/4', + 'inset-e-4', + '-inset-e-4', + 'inset-e-[4px]', ], ), ).toMatchInlineSnapshot(` @@ -594,35 +594,35 @@ test('end', async () => { --inset-shadowned: 1940px; } - .-end-4 { + .-inset-e-4 { inset-inline-end: calc(var(--spacing-4) * -1); } - .-end-full { + .-inset-e-full { inset-inline-end: -100%; } - .end-3\\/4 { + .inset-e-3\\/4 { inset-inline-end: 75%; } - .end-4 { + .inset-e-4 { inset-inline-end: var(--spacing-4); } - .end-\\[4px\\] { + .inset-e-\\[4px\\] { inset-inline-end: 4px; } - .end-auto { + .inset-e-auto { inset-inline-end: auto; } - .end-full { + .inset-e-full { inset-inline-end: 100%; } - .end-shadowned { + .inset-e-shadowned { inset-inline-end: var(--inset-shadowned); }" `) @@ -636,19 +636,193 @@ test('end', async () => { @tailwind utilities; `, [ - 'end-shadow-sm', - 'end', - 'end--1', - 'end--1/2', - 'end--1/-2', - 'end-1/-2', - 'end-auto/foo', - '-end-full/foo', - 'end-full/foo', - 'end-3/4/foo', - 'end-4/foo', - '-end-4/foo', - 'end-[4px]/foo', + 'inset-e-shadow-sm', + 'inset-e', + 'inset-e--1', + 'inset-e--1/2', + 'inset-e--1/-2', + 'inset-e-1/-2', + 'inset-e-auto/foo', + '-inset-e-full/foo', + 'inset-e-full/foo', + 'inset-e-3/4/foo', + 'inset-e-4/foo', + '-inset-e-4/foo', + 'inset-e-[4px]/foo', + ], + ), + ).toEqual('') +}) + +test('inset-bs', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + --inset-shadowned: 1940px; + } + @tailwind utilities; + `, + [ + 'inset-bs-shadowned', + 'inset-bs-auto', + '-inset-bs-full', + 'inset-bs-full', + 'inset-bs-3/4', + 'inset-bs-4', + '-inset-bs-4', + 'inset-bs-[4px]', + ], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + --inset-shadowned: 1940px; + } + + .-inset-bs-4 { + inset-block-start: calc(var(--spacing-4) * -1); + } + + .-inset-bs-full { + inset-block-start: -100%; + } + + .inset-bs-3\\/4 { + inset-block-start: 75%; + } + + .inset-bs-4 { + inset-block-start: var(--spacing-4); + } + + .inset-bs-\\[4px\\] { + inset-block-start: 4px; + } + + .inset-bs-auto { + inset-block-start: auto; + } + + .inset-bs-full { + inset-block-start: 100%; + } + + .inset-bs-shadowned { + inset-block-start: var(--inset-shadowned); + }" + `) + expect( + await compileCss( + css` + @theme reference { + --spacing-4: 1rem; + --inset-shadow-sm: inset 0 1px 1px rgb(0 0 0 / 0.05); + } + @tailwind utilities; + `, + [ + 'inset-bs-shadow-sm', + 'inset-bs', + 'inset-bs--1', + 'inset-bs--1/2', + 'inset-bs--1/-2', + 'inset-bs-1/-2', + 'inset-bs-auto/foo', + '-inset-bs-full/foo', + 'inset-bs-full/foo', + 'inset-bs-3/4/foo', + 'inset-bs-4/foo', + '-inset-bs-4/foo', + 'inset-bs-[4px]/foo', + ], + ), + ).toEqual('') +}) + +test('inset-be', async () => { + expect( + await compileCss( + css` + @theme { + --spacing-4: 1rem; + --inset-shadowned: 1940px; + } + @tailwind utilities; + `, + [ + 'inset-be-shadowned', + 'inset-be-auto', + '-inset-be-full', + 'inset-be-full', + 'inset-be-3/4', + 'inset-be-4', + '-inset-be-4', + 'inset-be-[4px]', + ], + ), + ).toMatchInlineSnapshot(` + ":root, :host { + --spacing-4: 1rem; + --inset-shadowned: 1940px; + } + + .-inset-be-4 { + inset-block-end: calc(var(--spacing-4) * -1); + } + + .-inset-be-full { + inset-block-end: -100%; + } + + .inset-be-3\\/4 { + inset-block-end: 75%; + } + + .inset-be-4 { + inset-block-end: var(--spacing-4); + } + + .inset-be-\\[4px\\] { + inset-block-end: 4px; + } + + .inset-be-auto { + inset-block-end: auto; + } + + .inset-be-full { + inset-block-end: 100%; + } + + .inset-be-shadowned { + inset-block-end: var(--inset-shadowned); + }" + `) + expect( + await compileCss( + css` + @theme reference { + --spacing-4: 1rem; + --inset-shadow-sm: inset 0 1px 1px rgb(0 0 0 / 0.05); + } + @tailwind utilities; + `, + [ + 'inset-be-shadow-sm', + 'inset-be', + 'inset-be--1', + 'inset-be--1/2', + 'inset-be--1/-2', + 'inset-be-1/-2', + 'inset-be-auto/foo', + '-inset-be-full/foo', + 'inset-be-full/foo', + 'inset-be-3/4/foo', + 'inset-be-4/foo', + '-inset-be-4/foo', + 'inset-be-[4px]/foo', ], ), ).toEqual('') @@ -3858,7 +4032,15 @@ test('max-inline-size', async () => { } @tailwind utilities; `, - ['max-inline-none', 'max-inline-full', 'max-inline-max', 'max-inline-fit', 'max-inline-4', 'max-inline-xl', 'max-inline-[4px]'], + [ + 'max-inline-none', + 'max-inline-full', + 'max-inline-max', + 'max-inline-fit', + 'max-inline-4', + 'max-inline-xl', + 'max-inline-[4px]', + ], ), ).toMatchInlineSnapshot(` ":root, :host { diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index 0661a910912f..38aec8f428e8 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -624,8 +624,10 @@ export function createUtilities(theme: Theme) { ['inset', 'inset'], ['inset-x', 'inset-inline'], ['inset-y', 'inset-block'], - ['start', 'inset-inline-start'], - ['end', 'inset-inline-end'], + ['inset-s', 'inset-inline-start'], + ['inset-e', 'inset-inline-end'], + ['inset-bs', 'inset-block-start'], + ['inset-be', 'inset-block-end'], ['top', 'top'], ['right', 'right'], ['bottom', 'bottom'], From 53205f5dc5889d3a86300fee8ad8ac3ceb3ac020 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 30 Jan 2026 15:21:16 +0100 Subject: [PATCH 065/100] Add `font-features-*` utility for font-feature-settings (#19623) Add a new arbitrary-value-only utility `font-features-*` that sets the `font-feature-settings` CSS property. This utility only accepts arbitrary values (e.g., `font-features-["smcp"]`, `font-features-[var(--features)]`). The utility is sorted directly after `font-family` in the property order. https://claude.ai/code/session_01EAccbTHJ9dTUJ53ttq2jc4 --------- Co-authored-by: Claude Co-authored-by: Robin Malfait --- CHANGELOG.md | 17 ++++++----- packages/tailwindcss/src/property-order.ts | 1 + packages/tailwindcss/src/utilities.test.ts | 35 ++++++++++++++++++++++ packages/tailwindcss/src/utilities.ts | 8 +++++ 4 files changed, 53 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93f0446eb918..710d4a14f7f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) +- Add `@tailwindcss/webpack` loader for Tailwind CSS v4 ([#19610](https://github.com/tailwindlabs/tailwindcss/pull/19610)) +- Add `pbs-*`, `pbe-*`, `mbs-*`, `mbe-*`, `scroll-pbs-*`, `scroll-pbe-*`, `scroll-mbs-*`, `scroll-mbe-*`, `border-bs-*`, `border-be-*` utilities for `padding-block-start`, `padding-block-end`, `margin-block-start`, `margin-block-end`, `scroll-padding-block-start`, `scroll-padding-block-end`, `scroll-margin-block-start`, `scroll-margin-block-end`, `border-block-start`, and `border-block-end` ([`#19601`](https://github.com/tailwindlabs/tailwindcss/pull/19601)) +- Add `inline-*`, `min-inline-*`, `max-inline-*`, `block-*`, `min-block-*`, `max-block-*` utilities for `inline-size`, `min-inline-size`, `max-inline-size`, `block-size`, `min-block-size`, and `max-block-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) +- Add `inset-s-*`, `inset-e-*`, `inset-bs-*`, `inset-be-*` utilities for `inset-inline-start`, `inset-inline-end`, `inset-block-start`, and `inset-block-end` ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) +- Add `font-features-*` utility for `font-feature-settings` ([#19623](https://github.com/tailwindlabs/tailwindcss/pull/19615)) + ### Fixed - Do not wrap `color-mix` in a `@supports` rule if one already exists ([#19450](https://github.com/tailwindlabs/tailwindcss/pull/19450)) @@ -16,14 +25,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix class extraction for Rails' strict locals ([#19525](https://github.com/tailwindlabs/tailwindcss/pull/19525)) - Align `@utility` name validation with Oxide scanner rules ([#19524](https://github.com/tailwindlabs/tailwindcss/pull/19524)) -### Added - -- _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) -- Add `@tailwindcss/webpack` loader for Tailwind CSS v4 ([#19610](https://github.com/tailwindlabs/tailwindcss/pull/19610)) -- Add `pbs-*`, `pbe-*`, `mbs-*`, `mbe-*`, `scroll-pbs-*`, `scroll-pbe-*`, `scroll-mbs-*`, `scroll-mbe-*`, `border-bs-*`, `border-be-*` utilities for `padding-block-start`, `padding-block-end`, `margin-block-start`, `margin-block-end`, `scroll-padding-block-start`, `scroll-padding-block-end`, `scroll-margin-block-start`, `scroll-margin-block-end`, `border-block-start`, and `border-block-end` ([`#19601`](https://github.com/tailwindlabs/tailwindcss/pull/19601)) -- Add `inline-*`, `min-inline-*`, `max-inline-*`, `block-*`, `min-block-*`, `max-block-*` utilities for `inline-size`, `min-inline-size`, `max-inline-size`, `block-size`, `min-block-size`, and `max-block-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) -- Add `inset-s-*`, `inset-e-*`, `inset-bs-*`, `inset-be-*` utilities for `inset-inline-start`, `inset-inline-end`, `inset-block-start`, and `inset-block-end` ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) - ### Deprecated - Deprecate `start-*` and `end-*` utilities in favor of `inline-s-*` and `inline-e-*` ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) diff --git a/packages/tailwindcss/src/property-order.ts b/packages/tailwindcss/src/property-order.ts index 5177d8e2f405..e92bc374479c 100644 --- a/packages/tailwindcss/src/property-order.ts +++ b/packages/tailwindcss/src/property-order.ts @@ -343,6 +343,7 @@ export default [ 'vertical-align', 'font-family', + 'font-feature-settings', 'font-size', 'line-height', 'font-weight', diff --git a/packages/tailwindcss/src/utilities.test.ts b/packages/tailwindcss/src/utilities.test.ts index 64a1d3396d44..ea60feeaea92 100644 --- a/packages/tailwindcss/src/utilities.test.ts +++ b/packages/tailwindcss/src/utilities.test.ts @@ -22218,6 +22218,41 @@ test('font', async () => { ).toEqual('') }) +test('font-features', async () => { + expect( + await run([ + 'font-features-["smcp"]', + 'font-features-["c2sc","smcp"]', + 'font-features-[var(--my-features)]', + 'font-features-(--my-features)', + ]), + ).toMatchInlineSnapshot(` + ".font-features-\\(--my-features\\) { + font-feature-settings: var(--my-features); + } + + .font-features-\\[\\"c2sc\\"\\,\\"smcp\\"\\] { + font-feature-settings: "c2sc", "smcp"; + } + + .font-features-\\[\\"smcp\\"\\] { + font-feature-settings: "smcp"; + } + + .font-features-\\[var\\(--my-features\\)\\] { + font-feature-settings: var(--my-features); + }" + `) + expect( + await run([ + 'font-features', + '-font-features-["smcp"]', + 'font-features-smcp', + 'font-features-["smcp"]/foo', + ]), + ).toEqual('') +}) + test('text-transform', async () => { expect(await run(['uppercase', 'lowercase', 'capitalize', 'normal-case'])).toMatchInlineSnapshot(` ".capitalize { diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index 38aec8f428e8..4f54c9584796 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -3909,6 +3909,14 @@ export function createUtilities(theme: Theme) { }, ]) + /** + * @css `font-feature-settings` + */ + functionalUtility('font-features', { + themeKeys: [], + handle: (value) => [decl('font-feature-settings', value)], + }) + staticUtility('uppercase', [['text-transform', 'uppercase']]) staticUtility('lowercase', [['text-transform', 'lowercase']]) staticUtility('capitalize', [['text-transform', 'capitalize']]) From d8b00d1114645d757c9644556e9a366d24a771c6 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 30 Jan 2026 15:31:23 +0100 Subject: [PATCH 066/100] add concurrency control to workflows Essentially cancel previous workflows when new commits are pushed. --- .github/workflows/ci.yml | 4 ++++ .github/workflows/integration-tests.yml | 4 ++++ .github/workflows/prepare-release.yml | 4 ++++ .github/workflows/release-insiders.yml | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d8c099873b64..f817e05a3a90 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,10 @@ permissions: env: NODE_VERSION: 24 +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: tests: strategy: diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index e36f5b3abc47..1508c1effc49 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -11,6 +11,10 @@ permissions: env: NODE_VERSION: 24 +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: tests: strategy: diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index e506ab187b7a..0af8930a3a17 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -14,6 +14,10 @@ env: permissions: contents: read +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build: strategy: diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index f7792244f520..7a506892cbe2 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -13,6 +13,10 @@ env: OXIDE_LOCATION: ./crates/node RELEASE_CHANNEL: insiders +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build: strategy: From d52c94ff5faf4ab3b5a3caf878d22ff1b84e6c07 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 30 Jan 2026 16:40:51 +0100 Subject: [PATCH 067/100] Simplify logical sizing utility theme namespaces (#19625) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update inline-size and block-size utilities to only read from --spacing and --container theme keys, removing backwards-compat references to --width, --height, --min-width, --min-height, --max-width, and --max-height. Since these are new utilities with no backwards compatibility concerns, the simpler approach is preferred: - inline/min-inline/max-inline: --spacing, --container - block/min-block/max-block: --spacing only https://claude.ai/code/session_01WhrjmutxsLP753VUtFy24S ## Summary ## Test plan Co-authored-by: Claude --- packages/tailwindcss/src/utilities.test.ts | 6 +++--- packages/tailwindcss/src/utilities.ts | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/tailwindcss/src/utilities.test.ts b/packages/tailwindcss/src/utilities.test.ts index ea60feeaea92..f6860135890c 100644 --- a/packages/tailwindcss/src/utilities.test.ts +++ b/packages/tailwindcss/src/utilities.test.ts @@ -3842,7 +3842,7 @@ test('inline-size', async () => { css` @theme { --spacing-4: 1rem; - --width-xl: 36rem; + --container-xl: 36rem; } @tailwind utilities; `, @@ -3865,7 +3865,7 @@ test('inline-size', async () => { ).toMatchInlineSnapshot(` ":root, :host { --spacing-4: 1rem; - --width-xl: 36rem; + --container-xl: 36rem; } .inline-1\\/2 { @@ -3917,7 +3917,7 @@ test('inline-size', async () => { } .inline-xl { - inline-size: var(--width-xl); + inline-size: var(--container-xl); }" `) expect( diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index 4f54c9584796..66ae59230e12 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -1135,12 +1135,12 @@ export function createUtilities(theme: Theme) { staticUtility(`max-block-none`, [['max-block-size', 'none']]) for (let [name, namespaces, property] of [ - ['inline', ['--width', '--spacing', '--container'], 'inline-size'], - ['min-inline', ['--min-width', '--spacing', '--container'], 'min-inline-size'], - ['max-inline', ['--max-width', '--spacing', '--container'], 'max-inline-size'], - ['block', ['--height', '--spacing'], 'block-size'], - ['min-block', ['--min-height', '--height', '--spacing'], 'min-block-size'], - ['max-block', ['--max-height', '--height', '--spacing'], 'max-block-size'], + ['inline', ['--spacing', '--container'], 'inline-size'], + ['min-inline', ['--spacing', '--container'], 'min-inline-size'], + ['max-inline', ['--spacing', '--container'], 'max-inline-size'], + ['block', ['--spacing'], 'block-size'], + ['min-block', ['--spacing'], 'min-block-size'], + ['max-block', ['--spacing'], 'max-block-size'], ] as [string, ThemeKey[], string][]) { spacingUtility(name, namespaces, (value) => [decl(property, value)], { supportsFractions: true, From df96ea5eba94c801a08879cf95837b8a2b317b42 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Mon, 2 Feb 2026 14:42:31 +0100 Subject: [PATCH 068/100] Fix infinite loop when using `@variant` inside `@custom-variant` that points to another `@custom-variant` (#19633) This PR fixes an infinite loop when you use a `@variant` inside of a `@custom-variant`, where the `@variant` used is another `@custom-variant`. The issue stems from the fact that a `@custom-variant` can use a `@slot` that we have to replace with the proper AST nodes. However in this setup, the AST nodes will include a `@slot` node as well, which causes us to replace the `@slot` again, and so on, causing an infinite loop. ```css @custom-variant a { @slot; } @custom-variant b { @variant a { @slot; } } ``` The solution here is to replace the `@slot` nodes and then skip walking the nodes that were just inserted. This does mean that we end up with a `@slot` node in the final AST but that's not a real issue because that will get replaced later when handling the next `@custom-variant`. ## Test plan 1. Existing tests still pass 2. Added a regression test to ensure that the infinite loop does not happen anymore 3. Added additional tests to ensure that the behavior is correct Thanks @wongjn for your initial debugging help and providing a test case as well! Fixes: #19618 --- CHANGELOG.md | 1 + packages/tailwindcss/src/index.test.ts | 91 ++++++++++++++++++++++++++ packages/tailwindcss/src/variants.ts | 2 +- 3 files changed, 93 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 710d4a14f7f1..74f72f10eeb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Detect utilities when containing capital letters followed by numbers ([#19465](https://github.com/tailwindlabs/tailwindcss/pull/19465)) - Fix class extraction for Rails' strict locals ([#19525](https://github.com/tailwindlabs/tailwindcss/pull/19525)) - Align `@utility` name validation with Oxide scanner rules ([#19524](https://github.com/tailwindlabs/tailwindcss/pull/19524)) +- Fix infinite loop when using `@variant` inside `@custom-variant` ([#19633](https://github.com/tailwindlabs/tailwindcss/pull/19633)) ### Deprecated diff --git a/packages/tailwindcss/src/index.test.ts b/packages/tailwindcss/src/index.test.ts index 94b17714ed25..5182cdd14714 100644 --- a/packages/tailwindcss/src/index.test.ts +++ b/packages/tailwindcss/src/index.test.ts @@ -4558,6 +4558,97 @@ describe('@custom-variant', () => { `) }) + // https://github.com/tailwindlabs/tailwindcss/issues/19618 + test('@custom-variant can use a @variant that eventually uses another @custom-variant', async () => { + expect( + await compileCss( + css` + @custom-variant a { + @slot; + } + + @custom-variant b { + @variant a { + @slot; + } + } + + @tailwind utilities; + `, + ['a:flex', 'b:flex', 'a:b:flex', 'b:a:flex'], + ), + ).toMatchInlineSnapshot(` + ".a\\:flex, .b\\:flex, .a\\:b\\:flex, .b\\:a\\:flex { + display: flex; + }" + `) + }) + + test('@custom-variant can use a @variant that eventually uses another @custom-variant (2)', async () => { + expect( + await compileCss( + css` + @custom-variant a { + .a { + @slot; + } + } + + @custom-variant b { + .b { + @variant a { + .a-inside-b { + @slot; + } + } + } + } + + @tailwind utilities; + `, + ['a:flex', 'b:flex', 'a:b:flex', 'b:a:flex'], + ), + ).toMatchInlineSnapshot(` + ".a\\:flex .a, .b\\:flex .b .a .a-inside-b, .a\\:b\\:flex .a .b .a .a-inside-b, .b\\:a\\:flex .b .a .a-inside-b .a { + display: flex; + }" + `) + }) + + // https://github.com/tailwindlabs/tailwindcss/issues/19618#issuecomment-3830775912 + test('@custom-variant can use existing @slot @variants', async () => { + expect( + await compileCss( + css` + @custom-variant hocus { + @variant hover { + @variant focus { + @slot; + } + } + } + + @custom-variant hover { + &:hover { + @slot; + } + + &[data-hover] { + @slot; + } + } + + @tailwind utilities; + `, + ['hocus:flex'], + ), + ).toMatchInlineSnapshot(` + ".hocus\\:flex:hover:focus, .hocus\\:flex[data-hover]:focus { + display: flex; + }" + `) + }) + test('@custom-variant setup that results in a circular dependency error can be solved', async () => { expect( await compileCss( diff --git a/packages/tailwindcss/src/variants.ts b/packages/tailwindcss/src/variants.ts index 82a2b8592cfe..0b4bcb0c578c 100644 --- a/packages/tailwindcss/src/variants.ts +++ b/packages/tailwindcss/src/variants.ts @@ -1196,7 +1196,7 @@ export function substituteAtSlot(ast: AstNode[], nodes: AstNode[]) { walk(ast, (node) => { // Replace `@slot` with rule nodes if (node.kind === 'at-rule' && node.name === '@slot') { - return WalkAction.Replace(nodes) + return WalkAction.ReplaceSkip(nodes) } // Wrap `@keyframes` and `@property` in `AtRoot` nodes From 1638f35c3a2bfcd65a7b3b0f8626927a76bcf685 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 4 Feb 2026 12:38:50 +0100 Subject: [PATCH 069/100] Bump dependencies (#19608) This PR bumps a bunch of dependencies. This also moves a few dependencies that we use in multiple packages to the pnpm catalog. Closes: #19603, #19604, #19576, #19575, #19573, #19565, #19547, #19546, #19545, #19609, #19581, #19620, #19619 - #19603 - #19604 - #19576 - #19575 - #19573 - #19565 - #19547 - #19546 - #19545 - #19609 - #19581 - https://github.com/tailwindlabs/tailwindcss/pull/19620 - #19620 - #19619 ## Test Plan All tests in CI should still pass. [ci-all] --- .prettierignore | 1 + crates/node/npm/wasm32-wasi/package.json | 6 +- crates/node/package.json | 2 +- package.json | 8 +- packages/@tailwindcss-browser/package.json | 2 +- packages/@tailwindcss-node/package.json | 2 +- packages/@tailwindcss-postcss/package.json | 2 +- .../src/__snapshots__/index.test.ts.snap | 6 +- packages/@tailwindcss-standalone/package.json | 18 +- packages/@tailwindcss-standalone/src/index.ts | 10 +- packages/@tailwindcss-upgrade/package.json | 2 +- packages/tailwindcss/package.json | 2 +- .../src/__snapshots__/index.test.ts.snap | 6 +- .../tailwindcss/src/css-functions.test.ts | 3 +- packages/tailwindcss/src/index.test.ts | 5 +- packages/tailwindcss/src/utilities.test.ts | 333 ++--- packages/tailwindcss/src/utilities.ts | 17 +- packages/tailwindcss/tests/ui.spec.ts | 20 +- ...1.30.2.patch => lightningcss@1.31.1.patch} | 0 playgrounds/nextjs/package.json | 12 +- playgrounds/v3/package.json | 14 +- playgrounds/vite/package.json | 8 +- pnpm-lock.yaml | 1277 ++++++++--------- pnpm-workspace.yaml | 20 +- 24 files changed, 897 insertions(+), 879 deletions(-) rename patches/{lightningcss@1.30.2.patch => lightningcss@1.31.1.patch} (100%) diff --git a/.prettierignore b/.prettierignore index 3de4530ddcf2..4f50b932fbca 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,5 +4,6 @@ pnpm-lock.yaml target/ crates/node/index.d.ts crates/node/index.js +crates/ignore/ .next .fingerprint diff --git a/crates/node/npm/wasm32-wasi/package.json b/crates/node/npm/wasm32-wasi/package.json index ea06f944dd16..059735f5317d 100644 --- a/crates/node/npm/wasm32-wasi/package.json +++ b/crates/node/npm/wasm32-wasi/package.json @@ -28,11 +28,11 @@ "browser": "tailwindcss-oxide.wasi-browser.js", "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1", - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1", + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", "@tybys/wasm-util": "^0.10.1", "@emnapi/wasi-threads": "^1.1.0", - "tslib": "^2.4.0" + "tslib": "^2.8.1" }, "bundledDependencies": [ "@napi-rs/wasm-runtime", diff --git a/crates/node/package.json b/crates/node/package.json index 00557993d8f3..d9b07eab58c5 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -35,7 +35,7 @@ "devDependencies": { "@napi-rs/cli": "3.4.1", "@napi-rs/wasm-runtime": "^1.1.1", - "emnapi": "1.7.1" + "emnapi": "1.8.1" }, "engines": { "node": ">= 20" diff --git a/package.json b/package.json index 1b5a50a82d97..e1e310c69d52 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ }, "license": "MIT", "devDependencies": { - "@playwright/test": "^1.57.0", + "@playwright/test": "^1.58.0", "@types/node": "catalog:", "postcss": "8.5.6", "postcss-import": "^16.1.1", @@ -56,14 +56,14 @@ "prettier-plugin-embed": "^0.5.1", "prettier-plugin-organize-imports": "^4.3.0", "tsup": "^8.5.1", - "turbo": "^2.7.2", + "turbo": "^2.7.6", "typescript": "^5.5.4", - "vitest": "^4.0.3" + "vitest": "^4.0.18" }, "packageManager": "pnpm@9.6.0", "pnpm": { "patchedDependencies": { - "lightningcss@1.30.2": "patches/lightningcss@1.30.2.patch", + "lightningcss@1.31.1": "patches/lightningcss@1.31.1.patch", "@parcel/watcher@2.5.1": "patches/@parcel__watcher@2.5.1.patch" } } diff --git a/packages/@tailwindcss-browser/package.json b/packages/@tailwindcss-browser/package.json index 6bda85f75c78..8b9b1b5e24ce 100644 --- a/packages/@tailwindcss-browser/package.json +++ b/packages/@tailwindcss-browser/package.json @@ -30,7 +30,7 @@ "access": "public" }, "devDependencies": { - "h3": "^1.15.4", + "h3": "^1.15.5", "listhen": "^1.9.0", "tailwindcss": "workspace:*" } diff --git a/packages/@tailwindcss-node/package.json b/packages/@tailwindcss-node/package.json index 257b440aea3a..8afadb378108 100644 --- a/packages/@tailwindcss-node/package.json +++ b/packages/@tailwindcss-node/package.json @@ -37,7 +37,7 @@ } }, "dependencies": { - "@jridgewell/remapping": "^2.3.4", + "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.18.4", "jiti": "^2.6.1", "lightningcss": "catalog:", diff --git a/packages/@tailwindcss-postcss/package.json b/packages/@tailwindcss-postcss/package.json index 22e775d728ae..ff815030ab4f 100644 --- a/packages/@tailwindcss-postcss/package.json +++ b/packages/@tailwindcss-postcss/package.json @@ -33,7 +33,7 @@ "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "workspace:*", "@tailwindcss/oxide": "workspace:*", - "postcss": "^8.4.41", + "postcss": "^8.5.6", "tailwindcss": "workspace:*" }, "devDependencies": { diff --git a/packages/@tailwindcss-postcss/src/__snapshots__/index.test.ts.snap b/packages/@tailwindcss-postcss/src/__snapshots__/index.test.ts.snap index 8fdc0dbf740f..fd6db912cf4a 100644 --- a/packages/@tailwindcss-postcss/src/__snapshots__/index.test.ts.snap +++ b/packages/@tailwindcss-postcss/src/__snapshots__/index.test.ts.snap @@ -11,8 +11,10 @@ exports[`\`@import 'tailwindcss'\` is replaced with the generated CSS 1`] = ` @layer theme { :root, :host { - --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", + "Noto Color Emoji"; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", + monospace; --color-black: #000; --text-2xl: 1.5rem; --text-2xl--line-height: calc(2 / 1.5); diff --git a/packages/@tailwindcss-standalone/package.json b/packages/@tailwindcss-standalone/package.json index cfe124563789..cdc83f34a622 100644 --- a/packages/@tailwindcss-standalone/package.json +++ b/packages/@tailwindcss-standalone/package.json @@ -35,15 +35,15 @@ }, "__notes": "These binary packages must be included so Bun can build the CLI for all supported platforms. We also rely on Lightning CSS and Parcel being patched so Bun can statically analyze the executables.", "devDependencies": { - "@parcel/watcher-darwin-arm64": "^2.5.1", - "@parcel/watcher-darwin-x64": "^2.5.1", - "@parcel/watcher-linux-arm64-glibc": "^2.5.1", - "@parcel/watcher-linux-arm64-musl": "^2.5.1", - "@parcel/watcher-linux-x64-glibc": "^2.5.1", - "@parcel/watcher-linux-x64-musl": "^2.5.1", - "@parcel/watcher-win32-x64": "^2.5.1", - "@types/bun": "^1.3.5", - "bun": "^1.3.5", + "@parcel/watcher-darwin-arm64": "^2.5.6", + "@parcel/watcher-darwin-x64": "^2.5.6", + "@parcel/watcher-linux-arm64-glibc": "^2.5.6", + "@parcel/watcher-linux-arm64-musl": "^2.5.6", + "@parcel/watcher-linux-x64-glibc": "^2.5.6", + "@parcel/watcher-linux-x64-musl": "^2.5.6", + "@parcel/watcher-win32-x64": "^2.5.6", + "@types/bun": "^1.3.7", + "bun": "^1.3.7", "lightningcss-darwin-arm64": "catalog:", "lightningcss-darwin-x64": "catalog:", "lightningcss-linux-arm64-gnu": "catalog:", diff --git a/packages/@tailwindcss-standalone/src/index.ts b/packages/@tailwindcss-standalone/src/index.ts index ce6ba84d11fe..23a928f8b68b 100644 --- a/packages/@tailwindcss-standalone/src/index.ts +++ b/packages/@tailwindcss-standalone/src/index.ts @@ -75,12 +75,10 @@ Bun.plugin({ 'tailwindcss/plugin': await import('tailwindcss/plugin'), 'tailwindcss/plugin.js': await import('tailwindcss/plugin'), 'tailwindcss/package.json': await import('tailwindcss/package.json'), - 'tailwindcss/lib/util/flattenColorPalette': await import( - 'tailwindcss/lib/util/flattenColorPalette' - ), - 'tailwindcss/lib/util/flattenColorPalette.js': await import( - 'tailwindcss/lib/util/flattenColorPalette' - ), + 'tailwindcss/lib/util/flattenColorPalette': + await import('tailwindcss/lib/util/flattenColorPalette'), + 'tailwindcss/lib/util/flattenColorPalette.js': + await import('tailwindcss/lib/util/flattenColorPalette'), 'tailwindcss/defaultTheme': await import('tailwindcss/defaultTheme'), 'tailwindcss/defaultTheme.js': await import('tailwindcss/defaultTheme'), } diff --git a/packages/@tailwindcss-upgrade/package.json b/packages/@tailwindcss-upgrade/package.json index e41e40b22fcc..e1490711b622 100644 --- a/packages/@tailwindcss-upgrade/package.json +++ b/packages/@tailwindcss-upgrade/package.json @@ -36,7 +36,7 @@ "jiti": "^2.0.0-beta.3", "mri": "^1.2.0", "picocolors": "^1.1.1", - "postcss": "^8.4.41", + "postcss": "^8.5.6", "postcss-import": "^16.1.1", "postcss-selector-parser": "^7.1.1", "prettier": "catalog:", diff --git a/packages/tailwindcss/package.json b/packages/tailwindcss/package.json index a453c9a1461f..5650b1e2cd0f 100644 --- a/packages/tailwindcss/package.json +++ b/packages/tailwindcss/package.json @@ -127,7 +127,7 @@ "utilities.css" ], "devDependencies": { - "@jridgewell/remapping": "^2.3.4", + "@jridgewell/remapping": "^2.3.5", "@tailwindcss/oxide": "workspace:^", "@types/node": "catalog:", "dedent": "1.7.1", diff --git a/packages/tailwindcss/src/__snapshots__/index.test.ts.snap b/packages/tailwindcss/src/__snapshots__/index.test.ts.snap index 70060e1e1797..88365b1ce156 100644 --- a/packages/tailwindcss/src/__snapshots__/index.test.ts.snap +++ b/packages/tailwindcss/src/__snapshots__/index.test.ts.snap @@ -129,8 +129,10 @@ exports[`compiling CSS > \`@tailwind utilities\` is replaced by utilities using exports[`compiling CSS > prefix all CSS variables inside preflight 1`] = ` "@layer theme { :root, :host { - --tw-font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --tw-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --tw-font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", + "Noto Color Emoji"; + --tw-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", + monospace; --tw-default-font-family: var(--tw-font-sans); --tw-default-mono-font-family: var(--tw-font-mono); } diff --git a/packages/tailwindcss/src/css-functions.test.ts b/packages/tailwindcss/src/css-functions.test.ts index 464f058641e0..0c5a3c97e46a 100644 --- a/packages/tailwindcss/src/css-functions.test.ts +++ b/packages/tailwindcss/src/css-functions.test.ts @@ -313,7 +313,8 @@ describe('--theme(…)', () => { ), ).toMatchInlineSnapshot(` ":root, :host { - --tw-font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --tw-font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", + "Segoe UI Symbol", "Noto Color Emoji"; --tw-default-font-family: var(--tw-font-sans); } diff --git a/packages/tailwindcss/src/index.test.ts b/packages/tailwindcss/src/index.test.ts index 5182cdd14714..1534f84cf902 100644 --- a/packages/tailwindcss/src/index.test.ts +++ b/packages/tailwindcss/src/index.test.ts @@ -1561,7 +1561,8 @@ describe('Parsing theme values from CSS', () => { ), ).toMatchInlineSnapshot(` ":root, :host { - --animate-very-long-animation-name: very-long-animation-name var(--very-long-animation-name-configuration, 2.5s ease-in-out 0s infinite normal none running); + --animate-very-long-animation-name: very-long-animation-name + var(--very-long-animation-name-configuration, 2.5s ease-in-out 0s infinite normal none running); } .animate-very-long-animation-name { @@ -5650,7 +5651,7 @@ describe('`color-mix(…)` polyfill', () => { @supports (color: color-mix(in lab, red, red)) { .text-red-500\\/50 { - color: color-mix(in oklab, var(--color-red-500) 50%, transparent); + color: color-mix(in oklab,var(--color-red-500)50%,transparent); } }" `) diff --git a/packages/tailwindcss/src/utilities.test.ts b/packages/tailwindcss/src/utilities.test.ts index f6860135890c..29e8dae3a524 100644 --- a/packages/tailwindcss/src/utilities.test.ts +++ b/packages/tailwindcss/src/utilities.test.ts @@ -5764,27 +5764,27 @@ test('rotate-x', async () => { .-rotate-x-\\(--var\\) { --tw-rotate-x: rotateX(calc(var(--var) * -1)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .-rotate-x-45 { --tw-rotate-x: rotateX(calc(45deg * -1)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .rotate-x-\\(--var\\) { --tw-rotate-x: rotateX(var(--var)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .rotate-x-45 { --tw-rotate-x: rotateX(45deg); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .rotate-x-\\[123deg\\] { --tw-rotate-x: rotateX(123deg); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } @property --tw-rotate-x { @@ -5850,32 +5850,32 @@ test('rotate-y', async () => { .-rotate-y-\\(--var\\) { --tw-rotate-y: rotateY(calc(var(--var) * -1)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .-rotate-y-45 { --tw-rotate-y: rotateY(calc(45deg * -1)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .-rotate-y-\\[123deg\\] { --tw-rotate-y: rotateY(calc(123deg * -1)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .rotate-y-\\(--var\\) { --tw-rotate-y: rotateY(var(--var)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .rotate-y-45 { --tw-rotate-y: rotateY(45deg); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .rotate-y-\\[123deg\\] { --tw-rotate-y: rotateY(123deg); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } @property --tw-rotate-x { @@ -5941,32 +5941,32 @@ test('rotate-z', async () => { .-rotate-z-\\(--var\\) { --tw-rotate-z: rotateZ(calc(var(--var) * -1)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .-rotate-z-45 { --tw-rotate-z: rotateZ(calc(45deg * -1)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .-rotate-z-\\[123deg\\] { --tw-rotate-z: rotateZ(calc(123deg * -1)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .rotate-z-\\(--var\\) { --tw-rotate-z: rotateZ(var(--var)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .rotate-z-45 { --tw-rotate-z: rotateZ(45deg); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .rotate-z-\\[123deg\\] { --tw-rotate-z: rotateZ(123deg); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } @property --tw-rotate-x { @@ -6024,19 +6024,19 @@ test('skew', async () => { .-skew-6 { --tw-skew-x: skewX(calc(6deg * -1)); --tw-skew-y: skewY(calc(6deg * -1)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .skew-6 { --tw-skew-x: skewX(6deg); --tw-skew-y: skewY(6deg); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .skew-\\[123deg\\] { --tw-skew-x: skewX(123deg); --tw-skew-y: skewY(123deg); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } @property --tw-rotate-x { @@ -6092,17 +6092,17 @@ test('skew-x', async () => { .-skew-x-6 { --tw-skew-x: skewX(calc(6deg * -1)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .skew-x-6 { --tw-skew-x: skewX(6deg); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .skew-x-\\[123deg\\] { --tw-skew-x: skewX(123deg); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } @property --tw-rotate-x { @@ -6158,17 +6158,17 @@ test('skew-y', async () => { .-skew-y-6 { --tw-skew-y: skewY(calc(6deg * -1)); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .skew-y-6 { --tw-skew-y: skewY(6deg); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .skew-y-\\[123deg\\] { --tw-skew-y: skewY(123deg); - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } @property --tw-rotate-x { @@ -6551,7 +6551,7 @@ test('transform', async () => { } .transform { - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .transform-\\[scaleZ\\(2\\)_rotateY\\(45deg\\)\\] { @@ -6559,11 +6559,11 @@ test('transform', async () => { } .transform-cpu { - transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .transform-gpu { - transform: translateZ(0) var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + transform: translateZ(0) var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); } .transform-none { @@ -7075,32 +7075,32 @@ test('touch-pan', async () => { .touch-pan-left { --tw-pan-x: pan-left; - touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); + touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); } .touch-pan-right { --tw-pan-x: pan-right; - touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); + touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); } .touch-pan-x { --tw-pan-x: pan-x; - touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); + touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); } .touch-pan-down { --tw-pan-y: pan-down; - touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); + touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); } .touch-pan-up { --tw-pan-y: pan-up; - touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); + touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); } .touch-pan-y { --tw-pan-y: pan-y; - touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); + touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); } @property --tw-pan-x { @@ -7150,7 +7150,7 @@ test('touch-pinch-zoom', async () => { .touch-pinch-zoom { --tw-pinch-zoom: pinch-zoom; - touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); + touch-action: var(--tw-pan-x, ) var(--tw-pan-y, ) var(--tw-pinch-zoom, ); } @property --tw-pan-x { @@ -22139,7 +22139,8 @@ test('font', async () => { } :root, :host { - --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", + "Segoe UI Symbol", "Noto Color Emoji"; --font-weight-bold: 650; } @@ -22232,7 +22233,7 @@ test('font-features', async () => { } .font-features-\\[\\"c2sc\\"\\,\\"smcp\\"\\] { - font-feature-settings: "c2sc", "smcp"; + font-feature-settings: "c2sc","smcp"; } .font-features-\\[\\"smcp\\"\\] { @@ -23037,73 +23038,73 @@ test('filter', async () => { .blur-\\[4px\\] { --tw-blur: blur(4px); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .blur-none { - --tw-blur: ; - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + --tw-blur: ; + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .blur-xl { --tw-blur: blur(var(--blur-xl)); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .brightness-50 { --tw-brightness: brightness(50%); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .brightness-\\[1\\.23\\] { --tw-brightness: brightness(1.23); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .contrast-50 { --tw-contrast: contrast(50%); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .contrast-\\[1\\.23\\] { --tw-contrast: contrast(1.23); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .drop-shadow\\/25 { --tw-drop-shadow-alpha: 25%; --tw-drop-shadow-size: drop-shadow(0 1px 1px var(--tw-drop-shadow-color, oklab(0% 0 0 / .25))); --tw-drop-shadow: drop-shadow(var(--drop-shadow)); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .drop-shadow { --tw-drop-shadow-size: drop-shadow(0 1px 1px var(--tw-drop-shadow-color, #0000000d)); --tw-drop-shadow: drop-shadow(var(--drop-shadow)); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .drop-shadow-\\[0_0_red\\] { --tw-drop-shadow-size: drop-shadow(0 0 var(--tw-drop-shadow-color, red)); --tw-drop-shadow: var(--tw-drop-shadow-size); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .drop-shadow-multi { --tw-drop-shadow-size: drop-shadow(0 1px 1px var(--tw-drop-shadow-color, #0000000d)) drop-shadow(0 9px 7px var(--tw-drop-shadow-color, #0000001a)); --tw-drop-shadow: drop-shadow(0 1px 1px #0000000d) drop-shadow(0 9px 7px #0000001a); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .drop-shadow-xl { --tw-drop-shadow-size: drop-shadow(0 9px 7px var(--tw-drop-shadow-color, #0000001a)); --tw-drop-shadow: drop-shadow(var(--drop-shadow-xl)); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .drop-shadow-none { - --tw-drop-shadow: ; - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + --tw-drop-shadow: ; + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .drop-shadow-inherit { @@ -23141,91 +23142,91 @@ test('filter', async () => { .grayscale { --tw-grayscale: grayscale(100%); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .grayscale-0 { --tw-grayscale: grayscale(0%); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .grayscale-\\[var\\(--value\\)\\] { --tw-grayscale: grayscale(var(--value)); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .-hue-rotate-15 { --tw-hue-rotate: hue-rotate(calc(15deg * -1)); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .-hue-rotate-\\[45deg\\] { --tw-hue-rotate: hue-rotate(calc(45deg * -1)); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .hue-rotate-15 { --tw-hue-rotate: hue-rotate(15deg); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .hue-rotate-\\[45deg\\] { --tw-hue-rotate: hue-rotate(45deg); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .invert { --tw-invert: invert(100%); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .invert-0 { --tw-invert: invert(0%); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .invert-\\[var\\(--value\\)\\] { --tw-invert: invert(var(--value)); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .saturate-0 { --tw-saturate: saturate(0%); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .saturate-\\[1\\.75\\] { --tw-saturate: saturate(1.75); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .saturate-\\[var\\(--value\\)\\] { --tw-saturate: saturate(var(--value)); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .sepia { --tw-sepia: sepia(100%); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .sepia-0 { --tw-sepia: sepia(0%); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .sepia-\\[50\\%\\] { --tw-sepia: sepia(50%); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .sepia-\\[var\\(--value\\)\\] { --tw-sepia: sepia(var(--value)); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .filter { - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } .filter-\\[var\\(--value\\)\\] { @@ -23418,7 +23419,7 @@ test('filter', async () => { .blur-none { --tw-blur: blur(var(--blur-none)); - filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); + filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, ); } @property --tw-blur { @@ -23557,187 +23558,187 @@ test('backdrop-filter', async () => { .backdrop-blur-\\[4px\\] { --tw-backdrop-blur: blur(4px); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-blur-none { - --tw-backdrop-blur: ; - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + --tw-backdrop-blur: ; + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-blur-xl { --tw-backdrop-blur: blur(var(--blur-xl)); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-brightness-50 { --tw-backdrop-brightness: brightness(50%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-brightness-\\[1\\.23\\] { --tw-backdrop-brightness: brightness(1.23); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-contrast-50 { --tw-backdrop-contrast: contrast(50%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-contrast-\\[1\\.23\\] { --tw-backdrop-contrast: contrast(1.23); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-grayscale { --tw-backdrop-grayscale: grayscale(100%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-grayscale-0 { --tw-backdrop-grayscale: grayscale(0%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-grayscale-\\[var\\(--value\\)\\] { --tw-backdrop-grayscale: grayscale(var(--value)); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .-backdrop-hue-rotate-15 { --tw-backdrop-hue-rotate: hue-rotate(calc(15deg * -1)); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .-backdrop-hue-rotate-\\[45deg\\] { --tw-backdrop-hue-rotate: hue-rotate(calc(45deg * -1)); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-hue-rotate-15 { --tw-backdrop-hue-rotate: hue-rotate(15deg); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-hue-rotate-\\[45deg\\] { --tw-backdrop-hue-rotate: hue-rotate(45deg); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-invert { --tw-backdrop-invert: invert(100%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-invert-0 { --tw-backdrop-invert: invert(0%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-invert-\\[var\\(--value\\)\\] { --tw-backdrop-invert: invert(var(--value)); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-opacity-1\\.25 { --tw-backdrop-opacity: opacity(1.25%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-opacity-2\\.5 { --tw-backdrop-opacity: opacity(2.5%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-opacity-3\\.75 { --tw-backdrop-opacity: opacity(3.75%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-opacity-50 { --tw-backdrop-opacity: opacity(50%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-opacity-71 { --tw-backdrop-opacity: opacity(71%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-opacity-\\[0\\.5\\] { --tw-backdrop-opacity: opacity(.5); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-saturate-0 { --tw-backdrop-saturate: saturate(0%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-saturate-\\[1\\.75\\] { --tw-backdrop-saturate: saturate(1.75); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-saturate-\\[var\\(--value\\)\\] { --tw-backdrop-saturate: saturate(var(--value)); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-sepia { --tw-backdrop-sepia: sepia(100%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-sepia-0 { --tw-backdrop-sepia: sepia(0%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-sepia-\\[50\\%\\] { --tw-backdrop-sepia: sepia(50%); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-sepia-\\[var\\(--value\\)\\] { --tw-backdrop-sepia: sepia(var(--value)); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-filter { - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } .backdrop-filter-\\[var\\(--value\\)\\] { @@ -23901,8 +23902,8 @@ test('backdrop-filter', async () => { .backdrop-blur-none { --tw-backdrop-blur: blur(var(--backdrop-blur-none)); - -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); - backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); } @property --tw-backdrop-blur { @@ -24369,27 +24370,27 @@ test('contain', async () => { .contain-inline-size { --tw-contain-size: inline-size; - contain: var(--tw-contain-size, ) var(--tw-contain-layout, ) var(--tw-contain-paint, ) var(--tw-contain-style, ); + contain: var(--tw-contain-size, ) var(--tw-contain-layout, ) var(--tw-contain-paint, ) var(--tw-contain-style, ); } .contain-layout { --tw-contain-layout: layout; - contain: var(--tw-contain-size, ) var(--tw-contain-layout, ) var(--tw-contain-paint, ) var(--tw-contain-style, ); + contain: var(--tw-contain-size, ) var(--tw-contain-layout, ) var(--tw-contain-paint, ) var(--tw-contain-style, ); } .contain-paint { --tw-contain-paint: paint; - contain: var(--tw-contain-size, ) var(--tw-contain-layout, ) var(--tw-contain-paint, ) var(--tw-contain-style, ); + contain: var(--tw-contain-size, ) var(--tw-contain-layout, ) var(--tw-contain-paint, ) var(--tw-contain-style, ); } .contain-size { --tw-contain-size: size; - contain: var(--tw-contain-size, ) var(--tw-contain-layout, ) var(--tw-contain-paint, ) var(--tw-contain-style, ); + contain: var(--tw-contain-size, ) var(--tw-contain-layout, ) var(--tw-contain-paint, ) var(--tw-contain-style, ); } .contain-style { --tw-contain-style: style; - contain: var(--tw-contain-size, ) var(--tw-contain-layout, ) var(--tw-contain-paint, ) var(--tw-contain-style, ); + contain: var(--tw-contain-size, ) var(--tw-contain-layout, ) var(--tw-contain-paint, ) var(--tw-contain-style, ); } .contain-\\[unset\\] { @@ -24717,42 +24718,42 @@ test('font-variant-numeric', async () => { .diagonal-fractions { --tw-numeric-fraction: diagonal-fractions; - font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); + font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); } .lining-nums { --tw-numeric-figure: lining-nums; - font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); + font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); } .oldstyle-nums { --tw-numeric-figure: oldstyle-nums; - font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); + font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); } .ordinal { --tw-ordinal: ordinal; - font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); + font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); } .proportional-nums { --tw-numeric-spacing: proportional-nums; - font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); + font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); } .slashed-zero { --tw-slashed-zero: slashed-zero; - font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); + font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); } .stacked-fractions { --tw-numeric-fraction: stacked-fractions; - font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); + font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); } .tabular-nums { --tw-numeric-spacing: tabular-nums; - font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); + font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, ); } .normal-nums { @@ -27124,37 +27125,37 @@ test('ring', async () => { } .ring { - --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .ring-0 { - --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .ring-1 { - --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .ring-2 { - --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .ring-4 { - --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .ring-\\[12px\\] { - --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(12px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(12px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } .ring-\\[length\\:var\\(--my-width\\)\\] { - --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(var(--my-width) + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(var(--my-width) + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } @@ -27448,7 +27449,7 @@ test('ring', async () => { } .ring { - --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); } @@ -28018,32 +28019,32 @@ test('ring-offset', async () => { .ring-offset-0 { --tw-ring-offset-width: 0px; - --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); } .ring-offset-1 { --tw-ring-offset-width: 1px; - --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); } .ring-offset-2 { --tw-ring-offset-width: 2px; - --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); } .ring-offset-4 { --tw-ring-offset-width: 4px; - --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); } .ring-offset-\\[12px\\] { --tw-ring-offset-width: 12px; - --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); } .ring-offset-\\[length\\:var\\(--my-width\\)\\] { --tw-ring-offset-width: var(--my-width); - --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); } .ring-offset-\\[\\#0088cc\\] { @@ -28599,7 +28600,7 @@ describe('custom utilities', () => { .text-sm { font-size: var(--text-sm, .8755rem); line-height: var(--text-sm--line-height, 1.255rem); - text-rendering: optimizeLegibility; + text-rendering: optimizelegibility; font-size: var(--text-sm, .875rem); line-height: var(--tw-leading, var(--text-sm--line-height, 1.25rem)); } @@ -29582,7 +29583,7 @@ describe('custom utilities', () => { } .example-\\[7\\/9\\] { - --value: 7 / 9; + --value: 7/9; } .example-video { diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index 66ae59230e12..fd524f495575 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -421,7 +421,7 @@ export function createUtilities(theme: Theme) { if (value === null && desc.supportsFractions && candidate.value.fraction) { let [lhs, rhs] = segment(candidate.value.fraction, '/') if (!isPositiveInteger(lhs) || !isPositiveInteger(rhs)) return - value = `calc(${candidate.value.fraction} * 100%)` + value = `calc(${lhs} / ${rhs} * 100%)` } // If there is still no value but the utility supports bare values, @@ -5607,7 +5607,7 @@ export function createUtilities(theme: Theme) { value, alpha, (color) => `var(--tw-inset-shadow-color, ${color})`, - 'inset ', + 'inset', ), decl('box-shadow', cssBoxShadowValue), ] @@ -6377,7 +6377,7 @@ function resolveValueFunction( // Ratio must be a valid fraction, e.g.: / if (type === 'ratio') { - let [lhs, rhs] = segment(resolved, '/') + let [lhs, rhs] = segment(resolved, '/').map(Number) if (!isPositiveInteger(lhs) || !isPositiveInteger(rhs)) continue } @@ -6392,7 +6392,12 @@ function resolveValueFunction( continue } - return { nodes: ValueParser.parse(resolved), ratio: type === 'ratio' } + if (type === 'ratio') { + let [lhs, rhs] = segment(resolved, '/') + return { nodes: ValueParser.parse(`${lhs.trim()} / ${rhs.trim()}`), ratio: true } + } + + return { nodes: ValueParser.parse(resolved), ratio: false } } // Arbitrary value, e.g.: `--value([integer])` @@ -6471,8 +6476,8 @@ function alphaReplacedShadowProperties( function applyPrefix(x: string) { if (!prefix) return x return segment(x, ',') - .map((value) => prefix + value) - .join(',') + .map((value) => prefix.trim() + ' ' + value.trim()) + .join(', ') } if (requiresFallback) { diff --git a/packages/tailwindcss/tests/ui.spec.ts b/packages/tailwindcss/tests/ui.spec.ts index 0c3534efd748..889848c5cb68 100644 --- a/packages/tailwindcss/tests/ui.spec.ts +++ b/packages/tailwindcss/tests/ui.spec.ts @@ -1911,7 +1911,7 @@ test('outline style is optional', async ({ page }) => { html`
`, ) - expect(await getPropertyValue('#x', 'outline')).toEqual('rgb(255, 255, 255) solid 2px') + expect(await getPropertyValue('#x', 'outline')).toEqual('2px solid rgb(255, 255, 255)') }) test('outline style is preserved when changing outline width', async ({ page }) => { @@ -1922,11 +1922,11 @@ test('outline style is preserved when changing outline width', async ({ page }) `, ) - expect(await getPropertyValue('#x', 'outline')).toEqual('rgb(255, 255, 255) dotted 2px') + expect(await getPropertyValue('#x', 'outline')).toEqual('2px dotted rgb(255, 255, 255)') await page.locator('#x').hover() - expect(await getPropertyValue('#x', 'outline')).toEqual('rgb(255, 255, 255) dotted 4px') + expect(await getPropertyValue('#x', 'outline')).toEqual('4px dotted rgb(255, 255, 255)') }) test('borders can be added without a border-style utility', async ({ page }) => { @@ -2249,7 +2249,7 @@ async function getPropertyValue( selector: [string, string | undefined], property: string, ) { - return page.evaluate( + let value = await page.evaluate( ([[selector, pseudo], property]) => { return window .getComputedStyle(document.querySelector(selector)!, pseudo) @@ -2257,4 +2257,16 @@ async function getPropertyValue( }, [selector, property] as const, ) + + switch (property) { + case 'outline': + // Order in webkit vs chromium is different. Sort to normalize. + return segment(value, ' ') + .map((part) => part.trim()) + .sort((a, z) => a.length - z.length) + .join(' ') + + default: + return value + } } diff --git a/patches/lightningcss@1.30.2.patch b/patches/lightningcss@1.31.1.patch similarity index 100% rename from patches/lightningcss@1.30.2.patch rename to patches/lightningcss@1.31.1.patch diff --git a/playgrounds/nextjs/package.json b/playgrounds/nextjs/package.json index 8dc97a047be5..a996f3eab11c 100644 --- a/playgrounds/nextjs/package.json +++ b/playgrounds/nextjs/package.json @@ -11,17 +11,17 @@ "dependencies": { "@tailwindcss/postcss": "workspace:^", "fast-glob": "^3.3.3", - "next": "^16.1.0", - "react": "^19.2.3", - "react-dom": "^19.2.3", + "next": "^16.1.6", + "react": "^19.2.4", + "react-dom": "^19.2.4", "tailwindcss": "workspace:^" }, "devDependencies": { "@types/node": "catalog:", - "@types/react": "^19.2.7", + "@types/react": "^19.2.10", "@types/react-dom": "^19.2.3", "eslint": "^9.39.2", - "eslint-config-next": "^16.1.0", - "typescript": "^5.5.4" + "eslint-config-next": "^16.1.6", + "typescript": "^5.9.3" } } diff --git a/playgrounds/v3/package.json b/playgrounds/v3/package.json index c03663b698b8..b8e1e16fc6ca 100644 --- a/playgrounds/v3/package.json +++ b/playgrounds/v3/package.json @@ -9,18 +9,18 @@ "upgrade": "node scripts/upgrade.mjs" }, "dependencies": { - "next": "^16.1.0", - "react": "^19.2.3", - "react-dom": "^19.2.3", + "next": "^16.1.6", + "react": "^19.2.4", + "react-dom": "^19.2.4", "tailwindcss": "^3" }, "devDependencies": { - "@types/node": "^20.14.8", - "@types/react": "^19.2.7", + "@types/node": "catalog:", + "@types/react": "^19.2.10", "@types/react-dom": "^19.2.3", "autoprefixer": "^10.4.23", "eslint": "^9.39.2", - "eslint-config-next": "^16.1.0", - "typescript": "^5.5.4" + "eslint-config-next": "^16.1.6", + "typescript": "^5.9.3" } } diff --git a/playgrounds/vite/package.json b/playgrounds/vite/package.json index e158445cb765..d339dc39fe8b 100644 --- a/playgrounds/vite/package.json +++ b/playgrounds/vite/package.json @@ -11,14 +11,14 @@ "dependencies": { "@tailwindcss/vite": "workspace:^", "@vitejs/plugin-react": "^5.1.2", - "react": "^19.2.3", - "react-dom": "^19.2.3", + "react": "^19.2.4", + "react-dom": "^19.2.4", "tailwindcss": "workspace:^" }, "devDependencies": { - "@types/react": "^19.2.7", + "@types/react": "^19.2.10", "@types/react-dom": "^19.2.3", - "bun": "^1.3.5", + "bun": "^1.3.7", "vite": "catalog:" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a7d9cf6f1ac4..be257c0fbfe0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,35 +10,35 @@ catalogs: specifier: ^20.19.0 version: 20.19.1 lightningcss: - specifier: 1.30.2 - version: 1.30.2 + specifier: 1.31.1 + version: 1.31.1 lightningcss-darwin-arm64: - specifier: 1.30.2 - version: 1.30.2 + specifier: 1.31.1 + version: 1.31.1 lightningcss-darwin-x64: - specifier: 1.30.2 - version: 1.30.2 + specifier: 1.31.1 + version: 1.31.1 lightningcss-linux-arm64-gnu: - specifier: 1.30.2 - version: 1.30.2 + specifier: 1.31.1 + version: 1.31.1 lightningcss-linux-arm64-musl: - specifier: 1.30.2 - version: 1.30.2 + specifier: 1.31.1 + version: 1.31.1 lightningcss-linux-x64-gnu: - specifier: 1.30.2 - version: 1.30.2 + specifier: 1.31.1 + version: 1.31.1 lightningcss-linux-x64-musl: - specifier: 1.30.2 - version: 1.30.2 + specifier: 1.31.1 + version: 1.31.1 lightningcss-win32-x64-msvc: - specifier: 1.30.2 - version: 1.30.2 + specifier: 1.31.1 + version: 1.31.1 prettier: - specifier: 3.6.2 - version: 3.6.2 + specifier: 3.8.1 + version: 3.8.1 vite: - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.3.1 + version: 7.3.1 webpack: specifier: ^5 version: 5.104.1 @@ -47,17 +47,17 @@ patchedDependencies: '@parcel/watcher@2.5.1': hash: zs2vvlrje3h42xp5ed2v44fep4 path: patches/@parcel__watcher@2.5.1.patch - lightningcss@1.30.2: + lightningcss@1.31.1: hash: tzyxy3asfxcqc7ihrooumyi5fm - path: patches/lightningcss@1.30.2.patch + path: patches/lightningcss@1.31.1.patch importers: .: devDependencies: '@playwright/test': - specifier: ^1.57.0 - version: 1.57.0 + specifier: ^1.58.0 + version: 1.58.0 '@types/node': specifier: 'catalog:' version: 20.19.1 @@ -69,25 +69,25 @@ importers: version: 16.1.1(postcss@8.5.6) prettier: specifier: 'catalog:' - version: 3.6.2 + version: 3.8.1 prettier-plugin-embed: specifier: ^0.5.1 version: 0.5.1 prettier-plugin-organize-imports: specifier: ^4.3.0 - version: 4.3.0(prettier@3.6.2)(typescript@5.5.4) + version: 4.3.0(prettier@3.8.1)(typescript@5.5.4) tsup: specifier: ^8.5.1 version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.19.1)(typescript@5.5.4)(yaml@2.6.0) turbo: - specifier: ^2.7.2 - version: 2.7.2 + specifier: ^2.7.6 + version: 2.7.6 typescript: specifier: ^5.5.4 version: 5.5.4 vitest: - specifier: ^4.0.3 - version: 4.0.12(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + specifier: ^4.0.18 + version: 4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) crates/node: optionalDependencies: @@ -130,13 +130,13 @@ importers: devDependencies: '@napi-rs/cli': specifier: 3.4.1 - version: 3.4.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0) + version: 3.4.1(@emnapi/runtime@1.8.1)(@types/node@20.19.1)(node-addon-api@8.3.0) '@napi-rs/wasm-runtime': specifier: ^1.1.1 version: 1.1.1 emnapi: - specifier: 1.7.1 - version: 1.7.1(node-addon-api@8.3.0) + specifier: 1.8.1 + version: 1.8.1(node-addon-api@8.3.0) crates/node/npm/android-arm-eabi: {} @@ -161,11 +161,11 @@ importers: crates/node/npm/wasm32-wasi: dependencies: '@emnapi/core': - specifier: ^1.7.1 - version: 1.7.1 + specifier: ^1.8.1 + version: 1.8.1 '@emnapi/runtime': - specifier: ^1.7.1 - version: 1.7.1 + specifier: ^1.8.1 + version: 1.8.1 '@emnapi/wasi-threads': specifier: ^1.1.0 version: 1.1.0 @@ -176,7 +176,7 @@ importers: specifier: ^0.10.1 version: 0.10.1 tslib: - specifier: ^2.4.0 + specifier: ^2.8.1 version: 2.8.1 crates/node/npm/win32-arm64-msvc: {} @@ -198,8 +198,8 @@ importers: packages/@tailwindcss-browser: devDependencies: h3: - specifier: ^1.15.4 - version: 1.15.4 + specifier: ^1.15.5 + version: 1.15.5 listhen: specifier: ^1.9.0 version: 1.9.0 @@ -234,7 +234,7 @@ importers: packages/@tailwindcss-node: dependencies: '@jridgewell/remapping': - specifier: ^2.3.4 + specifier: ^2.3.5 version: 2.3.5 enhanced-resolve: specifier: ^5.18.4 @@ -244,7 +244,7 @@ importers: version: 2.6.1 lightningcss: specifier: 'catalog:' - version: 1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm) + version: 1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm) magic-string: specifier: ^0.30.21 version: 0.30.21 @@ -267,8 +267,8 @@ importers: specifier: workspace:* version: link:../../crates/node postcss: - specifier: ^8.4.41 - version: 8.4.41 + specifier: ^8.5.6 + version: 8.5.6 tailwindcss: specifier: workspace:* version: link:../tailwindcss @@ -287,7 +287,7 @@ importers: version: link:../internal-example-plugin postcss-import: specifier: ^16.1.1 - version: 16.1.1(postcss@8.4.41) + version: 16.1.1(postcss@8.5.6) packages/@tailwindcss-standalone: dependencies: @@ -314,53 +314,53 @@ importers: version: link:../tailwindcss devDependencies: '@parcel/watcher-darwin-arm64': - specifier: ^2.5.1 - version: 2.5.1 + specifier: ^2.5.6 + version: 2.5.6 '@parcel/watcher-darwin-x64': - specifier: ^2.5.1 - version: 2.5.1 + specifier: ^2.5.6 + version: 2.5.6 '@parcel/watcher-linux-arm64-glibc': - specifier: ^2.5.1 - version: 2.5.1 + specifier: ^2.5.6 + version: 2.5.6 '@parcel/watcher-linux-arm64-musl': - specifier: ^2.5.1 - version: 2.5.1 + specifier: ^2.5.6 + version: 2.5.6 '@parcel/watcher-linux-x64-glibc': - specifier: ^2.5.1 - version: 2.5.1 + specifier: ^2.5.6 + version: 2.5.6 '@parcel/watcher-linux-x64-musl': - specifier: ^2.5.1 - version: 2.5.1 + specifier: ^2.5.6 + version: 2.5.6 '@parcel/watcher-win32-x64': - specifier: ^2.5.1 - version: 2.5.1 + specifier: ^2.5.6 + version: 2.5.6 '@types/bun': - specifier: ^1.3.5 - version: 1.3.5 + specifier: ^1.3.7 + version: 1.3.7 bun: - specifier: ^1.3.5 - version: 1.3.5 + specifier: ^1.3.7 + version: 1.3.7 lightningcss-darwin-arm64: specifier: 'catalog:' - version: 1.30.2 + version: 1.31.1 lightningcss-darwin-x64: specifier: 'catalog:' - version: 1.30.2 + version: 1.31.1 lightningcss-linux-arm64-gnu: specifier: 'catalog:' - version: 1.30.2 + version: 1.31.1 lightningcss-linux-arm64-musl: specifier: 'catalog:' - version: 1.30.2 + version: 1.31.1 lightningcss-linux-x64-gnu: specifier: 'catalog:' - version: 1.30.2 + version: 1.31.1 lightningcss-linux-x64-musl: specifier: 'catalog:' - version: 1.30.2 + version: 1.31.1 lightningcss-win32-x64-msvc: specifier: 'catalog:' - version: 1.30.2 + version: 1.31.1 packages/@tailwindcss-upgrade: dependencies: @@ -392,17 +392,17 @@ importers: specifier: ^1.1.1 version: 1.1.1 postcss: - specifier: ^8.4.41 - version: 8.4.41 + specifier: ^8.5.6 + version: 8.5.6 postcss-import: specifier: ^16.1.1 - version: 16.1.1(postcss@8.4.41) + version: 16.1.1(postcss@8.5.6) postcss-selector-parser: specifier: ^7.1.1 version: 7.1.1 prettier: specifier: 'catalog:' - version: 3.6.2 + version: 3.8.1 semver: specifier: ^7.7.3 version: 7.7.3 @@ -446,7 +446,7 @@ importers: version: 20.19.1 vite: specifier: 'catalog:' - version: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + version: 7.3.1(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) packages/@tailwindcss-webpack: dependencies: @@ -475,7 +475,7 @@ importers: packages/tailwindcss: devDependencies: '@jridgewell/remapping': - specifier: ^2.3.4 + specifier: ^2.3.5 version: 2.3.5 '@tailwindcss/oxide': specifier: workspace:^ @@ -488,7 +488,7 @@ importers: version: 1.7.1 lightningcss: specifier: 'catalog:' - version: 1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm) + version: 1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm) magic-string: specifier: ^0.30.21 version: 0.30.21 @@ -505,14 +505,14 @@ importers: specifier: ^3.3.3 version: 3.3.3 next: - specifier: ^16.1.0 - version: 16.1.0(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^16.1.6 + version: 16.1.6(@playwright/test@1.58.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: - specifier: ^19.2.3 - version: 19.2.3 + specifier: ^19.2.4 + version: 19.2.4 react-dom: - specifier: ^19.2.3 - version: 19.2.3(react@19.2.3) + specifier: ^19.2.4 + version: 19.2.4(react@19.2.4) tailwindcss: specifier: workspace:^ version: link:../../packages/tailwindcss @@ -521,57 +521,57 @@ importers: specifier: 'catalog:' version: 20.19.1 '@types/react': - specifier: ^19.2.7 - version: 19.2.7 + specifier: ^19.2.10 + version: 19.2.10 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.10) eslint: specifier: ^9.39.2 version: 9.39.2(jiti@2.6.1) eslint-config-next: - specifier: ^16.1.0 - version: 16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + specifier: ^16.1.6 + version: 16.1.6(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: ^5.9.3 + version: 5.9.3 playgrounds/v3: dependencies: next: - specifier: ^16.1.0 - version: 16.1.0(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^16.1.6 + version: 16.1.6(@playwright/test@1.58.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: - specifier: ^19.2.3 - version: 19.2.3 + specifier: ^19.2.4 + version: 19.2.4 react-dom: - specifier: ^19.2.3 - version: 19.2.3(react@19.2.3) + specifier: ^19.2.4 + version: 19.2.4(react@19.2.4) tailwindcss: specifier: ^3 version: 3.4.14 devDependencies: '@types/node': - specifier: ^20.14.8 - version: 20.14.13 + specifier: 'catalog:' + version: 20.19.1 '@types/react': - specifier: ^19.2.7 - version: 19.2.7 + specifier: ^19.2.10 + version: 19.2.10 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.10) autoprefixer: specifier: ^10.4.23 - version: 10.4.23(postcss@8.4.47) + version: 10.4.23(postcss@8.5.6) eslint: specifier: ^9.39.2 version: 9.39.2(jiti@2.6.1) eslint-config-next: - specifier: ^16.1.0 - version: 16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + specifier: ^16.1.6 + version: 16.1.6(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) typescript: - specifier: ^5.5.4 - version: 5.6.3 + specifier: ^5.9.3 + version: 5.9.3 playgrounds/vite: dependencies: @@ -580,29 +580,29 @@ importers: version: link:../../packages/@tailwindcss-vite '@vitejs/plugin-react': specifier: ^5.1.2 - version: 5.1.2(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) + version: 5.1.2(vite@7.3.1(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) react: - specifier: ^19.2.3 - version: 19.2.3 + specifier: ^19.2.4 + version: 19.2.4 react-dom: - specifier: ^19.2.3 - version: 19.2.3(react@19.2.3) + specifier: ^19.2.4 + version: 19.2.4(react@19.2.4) tailwindcss: specifier: workspace:^ version: link:../../packages/tailwindcss devDependencies: '@types/react': - specifier: ^19.2.7 - version: 19.2.7 + specifier: ^19.2.10 + version: 19.2.10 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.7) + version: 19.2.3(@types/react@19.2.10) bun: - specifier: ^1.3.5 - version: 1.3.5 + specifier: ^1.3.7 + version: 1.3.7 vite: specifier: 'catalog:' - version: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + version: 7.3.1(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) packages: @@ -696,9 +696,15 @@ packages: '@emnapi/core@1.7.1': resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} + '@emnapi/core@1.8.1': + resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} + '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + '@emnapi/runtime@1.8.1': + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -1506,9 +1512,6 @@ packages: '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -1851,56 +1854,56 @@ packages: resolution: {integrity: sha512-enkZYyuCdo+9jneCPE/0fjIta4wWnvVN9hBo2HuiMpRF0q3lzv1J6b/cl7i0mxZUKhBrV3aCKDBQnCOhwKbPmQ==} engines: {node: '>= 10'} - '@next/env@16.1.0': - resolution: {integrity: sha512-Dd23XQeFHmhf3KBW76leYVkejHlCdB7erakC2At2apL1N08Bm+dLYNP+nNHh0tzUXfPQcNcXiQyacw0PG4Fcpw==} + '@next/env@16.1.6': + resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==} - '@next/eslint-plugin-next@16.1.0': - resolution: {integrity: sha512-sooC/k0LCF4/jLXYHpgfzJot04lZQqsttn8XJpTguP8N3GhqXN3wSkh68no2OcZzS/qeGwKDFTqhZ8WofdXmmQ==} + '@next/eslint-plugin-next@16.1.6': + resolution: {integrity: sha512-/Qq3PTagA6+nYVfryAtQ7/9FEr/6YVyvOtl6rZnGsbReGLf0jZU6gkpr1FuChAQpvV46a78p4cmHOVP8mbfSMQ==} - '@next/swc-darwin-arm64@16.1.0': - resolution: {integrity: sha512-onHq8dl8KjDb8taANQdzs3XmIqQWV3fYdslkGENuvVInFQzZnuBYYOG2HGHqqtvgmEU7xWzhgndXXxnhk4Z3fQ==} + '@next/swc-darwin-arm64@16.1.6': + resolution: {integrity: sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@16.1.0': - resolution: {integrity: sha512-Am6VJTp8KhLuAH13tPrAoVIXzuComlZlMwGr++o2KDjWiKPe3VwpxYhgV6I4gKls2EnsIMggL4y7GdXyDdJcFA==} + '@next/swc-darwin-x64@16.1.6': + resolution: {integrity: sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@16.1.0': - resolution: {integrity: sha512-fVicfaJT6QfghNyg8JErZ+EMNQ812IS0lmKfbmC01LF1nFBcKfcs4Q75Yy8IqnsCqH/hZwGhqzj3IGVfWV6vpA==} + '@next/swc-linux-arm64-gnu@16.1.6': + resolution: {integrity: sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@16.1.0': - resolution: {integrity: sha512-TojQnDRoX7wJWXEEwdfuJtakMDW64Q7NrxQPviUnfYJvAx5/5wcGE+1vZzQ9F17m+SdpFeeXuOr6v3jbyusYMQ==} + '@next/swc-linux-arm64-musl@16.1.6': + resolution: {integrity: sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@16.1.0': - resolution: {integrity: sha512-quhNFVySW4QwXiZkZ34SbfzNBm27vLrxZ2HwTfFFO1BBP0OY1+pI0nbyewKeq1FriqU+LZrob/cm26lwsiAi8Q==} + '@next/swc-linux-x64-gnu@16.1.6': + resolution: {integrity: sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@16.1.0': - resolution: {integrity: sha512-6JW0z2FZUK5iOVhUIWqE4RblAhUj1EwhZ/MwteGb//SpFTOHydnhbp3868gxalwea+mbOLWO6xgxj9wA9wNvNw==} + '@next/swc-linux-x64-musl@16.1.6': + resolution: {integrity: sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@16.1.0': - resolution: {integrity: sha512-+DK/akkAvvXn5RdYN84IOmLkSy87SCmpofJPdB8vbLmf01BzntPBSYXnMvnEEv/Vcf3HYJwt24QZ/s6sWAwOMQ==} + '@next/swc-win32-arm64-msvc@16.1.6': + resolution: {integrity: sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@16.1.0': - resolution: {integrity: sha512-Tr0j94MphimCCks+1rtYPzQFK+faJuhHWCegU9S9gDlgyOk8Y3kPmO64UcjyzZAlligeBtYZ/2bEyrKq0d2wqQ==} + '@next/swc-win32-x64-msvc@16.1.6': + resolution: {integrity: sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1973,58 +1976,58 @@ packages: '@octokit/types@16.0.0': resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} - '@oven/bun-darwin-aarch64@1.3.5': - resolution: {integrity: sha512-8GvNtMo0NINM7Emk9cNAviCG3teEgr3BUX9be0+GD029zIagx2Sf54jMui1Eu1IpFm7nWHODuLEefGOQNaJ0gQ==} + '@oven/bun-darwin-aarch64@1.3.7': + resolution: {integrity: sha512-Mh78f4B+vNTOhFpI7RWHRWDqSKTnFXj/MauRx7I/GmNwEfw56sUx98gWRwXyF4lkW+9VNU+33wuw6E+M22W66w==} cpu: [arm64] os: [darwin] - '@oven/bun-darwin-x64-baseline@1.3.5': - resolution: {integrity: sha512-p5q3rJk48qhLuLBOFehVc+kqCE03YrswTc6NCxbwsxiwfySXwcAvpF2KWKF/ZZObvvR8hCCvqe1F81b2p5r2dg==} + '@oven/bun-darwin-x64-baseline@1.3.7': + resolution: {integrity: sha512-bUND1aQoTCfIL+idALT7FWtuX59ltOIRo954c7p/JkESbSIJ01jY06BSNVbkGk8RQM19v/7qiqZZqi4NyO4Utw==} cpu: [x64] os: [darwin] - '@oven/bun-darwin-x64@1.3.5': - resolution: {integrity: sha512-r33eHQOHAwkuiBJIwmkXIyqONQOQMnd1GMTpDzaxx9vf9+svby80LZO9Hcm1ns6KT/TBRFyODC/0loA7FAaffg==} + '@oven/bun-darwin-x64@1.3.7': + resolution: {integrity: sha512-dFfKdSVz6Ois5zjEJboUC7igcYAVd+c//ajotd0L6WUQAKQrHMVq/+6LjOj/0zjC6VPFNGWzeF8erymNo1y0Jw==} cpu: [x64] os: [darwin] - '@oven/bun-linux-aarch64-musl@1.3.5': - resolution: {integrity: sha512-HKBeUlJdNduRkzJKZ5DXM+pPqntfC50/Hu2X65jVX0Y7hu/6IC8RaUTqpr8FtCZqqmc9wDK0OTL+Mbi9UQIKYQ==} + '@oven/bun-linux-aarch64-musl@1.3.7': + resolution: {integrity: sha512-QDxrROdUnC1d/uoilXtUeFHaLhYdRN7dRIzw/Iqj/vrrhnkA6VS+HYoCWtyyVvci/K+JrPmDwxOWlSRpmV4INA==} cpu: [arm64] os: [linux] - '@oven/bun-linux-aarch64@1.3.5': - resolution: {integrity: sha512-zkcHPI23QxJ1TdqafhgkXt1NOEN8o5C460sVeNnrhfJ43LwZgtfcvcQE39x/pBedu67fatY8CU0iY00nOh46ZQ==} + '@oven/bun-linux-aarch64@1.3.7': + resolution: {integrity: sha512-m03OtzEs+/RkWtk6tBf8yw0GW4P8ajfzTXnTt984tQBgkMubGQYUyUnFasWgr3mD2820LhkVjhYeBf1rkz/biQ==} cpu: [arm64] os: [linux] - '@oven/bun-linux-x64-baseline@1.3.5': - resolution: {integrity: sha512-FeCQyBU62DMuB0nn01vPnf3McXrKOsrK9p7sHaBFYycw0mmoU8kCq/WkBkGMnLuvQljJSyen8QBTx+fXdNupWg==} + '@oven/bun-linux-x64-baseline@1.3.7': + resolution: {integrity: sha512-Jlb/AcrIFU3QDeR3EL4UVT1CIKqnLJDgbU+R0k/+NaSWMrBEpZV+gJJT5L1cmEKTNhU/d+c7hudxkjtqA7XXqA==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64-musl-baseline@1.3.5': - resolution: {integrity: sha512-TJiYC7KCr0XxFTsxgwQOeE7dncrEL/RSyL0EzSL3xRkrxJMWBCvCSjQn7LV1i6T7hFst0+3KoN3VWvD5BinqHA==} + '@oven/bun-linux-x64-musl-baseline@1.3.7': + resolution: {integrity: sha512-lySQQ7zJJsoa5hQH+PE5bQyQaTI8G2Erszhu4iQuDtsocwy3zSxjB6TxGWTd4HmetPl9aRvg3nb2KR8RVAd7ug==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64-musl@1.3.5': - resolution: {integrity: sha512-XkCCHkByYn8BIDvoxnny898znju4xnW2kvFE8FT5+0Y62cWdcBGMZ9RdsEUTeRz16k8hHtJpaSfLcEmNTFIwRQ==} + '@oven/bun-linux-x64-musl@1.3.7': + resolution: {integrity: sha512-aK8fvkCosrHRG3CNdVqMom1C8Rj3XkqZp0ZFSBXgaXlKP22RkxlEE9tS7OmSq9yVgEk6euTB3dW4NFo/jlXqeg==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64@1.3.5': - resolution: {integrity: sha512-n7zhKTSDZS0yOYg5Rq8easZu5Y/o47sv0c7yGr2ciFdcie9uYV55fZ7QMqhWMGK33ezCSikh5EDkUMCIvfWpjA==} + '@oven/bun-linux-x64@1.3.7': + resolution: {integrity: sha512-uttKQ/eIRVGc4uBtLRqmQqXGf57/dmQaF0AEd37RQNRRRd1P/VYnFMiMcVaot3HJ6IFjHjGtcPO9ekT49LxBYQ==} cpu: [x64] os: [linux] - '@oven/bun-windows-x64-baseline@1.3.5': - resolution: {integrity: sha512-rtVQB9/1XK8FWJgFtsOthbPifRMYypgJwxu+pK3NHx8WvFKmq7HcPDqNr8xLzGULjQEO7eAo2aOZfONOwYz+5g==} + '@oven/bun-windows-x64-baseline@1.3.7': + resolution: {integrity: sha512-wMgELfW5vFceh4qEOYb5iV5TjrjjnBJzE383ixA3kqGKzaubksSxNc11eZhS0ptcJ5a0UjN5hfbMh6sYoh+cRQ==} cpu: [x64] os: [win32] - '@oven/bun-windows-x64@1.3.5': - resolution: {integrity: sha512-T3xkODItb/0ftQPFsZDc7EAX2D6A4TEazQ2YZyofZToO8Q7y8YT8ooWdhd0BQiTCd66uEvgE1DCZetynwg2IoA==} + '@oven/bun-windows-x64@1.3.7': + resolution: {integrity: sha512-3QdIGdSn3fkssCq/vPjtPLAQxo+eMUzcwJedn1c5mXDy1AoisjhoxhWnbVl8+uk+wt9N6JUPdISoe0N4OdwXfg==} cpu: [x64] os: [win32] @@ -2049,6 +2052,12 @@ packages: '@parcel/watcher-darwin-arm64@2.5.1': resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} os: [darwin] '@parcel/watcher-darwin-x64@2.5.0': @@ -2060,6 +2069,12 @@ packages: '@parcel/watcher-darwin-x64@2.5.1': resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} os: [darwin] '@parcel/watcher-freebsd-x64@2.5.0': @@ -2107,6 +2122,12 @@ packages: '@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] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} os: [linux] '@parcel/watcher-linux-arm64-musl@2.5.0': @@ -2118,6 +2139,12 @@ packages: '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} os: [linux] '@parcel/watcher-linux-x64-glibc@2.5.0': @@ -2129,6 +2156,12 @@ packages: '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} os: [linux] '@parcel/watcher-linux-x64-musl@2.5.0': @@ -2140,6 +2173,12 @@ packages: '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} os: [linux] '@parcel/watcher-wasm@2.5.0': @@ -2181,6 +2220,12 @@ packages: '@parcel/watcher-win32-x64@2.5.1': resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} os: [win32] '@parcel/watcher@2.5.0': @@ -2195,8 +2240,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.57.0': - resolution: {integrity: sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==} + '@playwright/test@1.58.0': + resolution: {integrity: sha512-fWza+Lpbj6SkQKCrU6si4iu+fD2dD3gxNHFhUPxsfXBPhnv3rRSQVd0NtBUT9Z/RhF/boCBcuUaMUSTRTopjZg==} engines: {node: '>=18'} hasBin: true @@ -2349,8 +2394,8 @@ packages: '@types/braces@3.0.5': resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==} - '@types/bun@1.3.5': - resolution: {integrity: sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w==} + '@types/bun@1.3.7': + resolution: {integrity: sha512-lmNuMda+Z9b7tmhA0tohwy8ZWFSnmQm1UDWXtH5r9F7wZCfkeO3Jx7wKQ1EOiKq43yHts7ky6r8SDJQWRNupkA==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -2373,9 +2418,6 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@20.14.13': - resolution: {integrity: sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==} - '@types/node@20.19.1': resolution: {integrity: sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA==} @@ -2387,8 +2429,8 @@ packages: peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.7': - resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} + '@types/react@19.2.10': + resolution: {integrity: sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==} '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} @@ -2458,11 +2500,11 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@vitest/expect@4.0.12': - resolution: {integrity: sha512-is+g0w8V3/ZhRNrRizrJNr8PFQKwYmctWlU4qg8zy5r9aIV5w8IxXLlfbbxJCwSpsVl2PXPTm2/zruqTqz3QSg==} + '@vitest/expect@4.0.18': + resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} - '@vitest/mocker@4.0.12': - resolution: {integrity: sha512-GsmA/tD5Ht3RUFoz41mZsMU1AXch3lhmgbTnoSPTdH231g7S3ytNN1aU0bZDSyxWs8WA7KDyMPD5L4q6V6vj9w==} + '@vitest/mocker@4.0.18': + resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0-0 @@ -2472,20 +2514,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.0.12': - resolution: {integrity: sha512-R7nMAcnienG17MvRN8TPMJiCG8rrZJblV9mhT7oMFdBXvS0x+QD6S1G4DxFusR2E0QIS73f7DqSR1n87rrmE+g==} + '@vitest/pretty-format@4.0.18': + resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} - '@vitest/runner@4.0.12': - resolution: {integrity: sha512-hDlCIJWuwlcLumfukPsNfPDOJokTv79hnOlf11V+n7E14rHNPz0Sp/BO6h8sh9qw4/UjZiKyYpVxK2ZNi+3ceQ==} + '@vitest/runner@4.0.18': + resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} - '@vitest/snapshot@4.0.12': - resolution: {integrity: sha512-2jz9zAuBDUSbnfyixnyOd1S2YDBrZO23rt1bicAb6MA/ya5rHdKFRikPIDpBj/Dwvh6cbImDmudegnDAkHvmRQ==} + '@vitest/snapshot@4.0.18': + resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} - '@vitest/spy@4.0.12': - resolution: {integrity: sha512-GZjI9PPhiOYNX8Nsyqdw7JQB+u0BptL5fSnXiottAUBHlcMzgADV58A7SLTXXQwcN1yZ6gfd1DH+2bqjuUlCzw==} + '@vitest/spy@4.0.18': + resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} - '@vitest/utils@4.0.12': - resolution: {integrity: sha512-DVS/TLkLdvGvj1avRy0LSmKfrcI9MNFvNGN6ECjTUHWJdlcgPDOXhjMis5Dh7rBH62nAmSXnkPbE+DZ5YD75Rw==} + '@vitest/utils@4.0.18': + resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -2710,11 +2752,11 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - bun-types@1.3.5: - resolution: {integrity: sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw==} + bun-types@1.3.7: + resolution: {integrity: sha512-qyschsA03Qz+gou+apt6HNl6HnI+sJJLL4wLDke4iugsE6584CMupOtTY1n+2YC9nGVrEKUlTs99jjRLKgWnjQ==} - bun@1.3.5: - resolution: {integrity: sha512-c1YHIGUfgvYPJmLug5QiLzNWlX2Dg7X/67JWu1Va+AmMXNXzC/KQn2lgQ7rD+n1u1UqDpJMowVGGxTNpbPydNw==} + bun@1.3.7: + resolution: {integrity: sha512-ha86NG8WiAXYR7eQw/9S+7V7Lo8KfD36XutWJNS1VndzaipWS0QIen5n3K9MT3PpP/sdGmmHjhkrU0sCM2lGGQ==} os: [darwin, linux, win32] hasBin: true @@ -2748,9 +2790,6 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001755: - resolution: {integrity: sha512-44V+Jm6ctPj7R52Na4TLi3Zri4dWUljJd+RDm+j8LtNCc/ihLCT+X1TzoOAkRETEWqjuLnh9581Tl80FvK7jVA==} - caniuse-lite@1.0.30001761: resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==} @@ -2913,10 +2952,6 @@ packages: engines: {node: '>=0.10'} hasBin: true - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} - engines: {node: '>=8'} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -2944,8 +2979,8 @@ packages: electron-to-chromium@1.5.267: resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} - emnapi@1.7.1: - resolution: {integrity: sha512-wlLK2xFq+T+rCBlY6+lPlFVDEyE93b7hSn9dMrfWBIcPf4ArwUvymvvMnN9M5WWuiryYQe9M+UJrkqw4trdyRA==} + emnapi@1.8.1: + resolution: {integrity: sha512-34i2BbgHx1LnEO4JCGQYo6h6s4e4KrdWtdTHfllBNLbXSHPmdIHplxKejfabsRK+ukNciqVdalB+fxMibqHdaQ==} peerDependencies: node-addon-api: '>= 6.1.0' peerDependenciesMeta: @@ -3026,8 +3061,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@16.1.0: - resolution: {integrity: sha512-RlPb8E2uO/Ix/w3kizxz6+6ogw99WqtNzTG0ArRZ5NEkIYcsfRb8U0j7aTG7NjRvcrsak5QtUSuxGNN2UcA58g==} + eslint-config-next@16.1.6: + resolution: {integrity: sha512-vKq40io2B0XtkkNDYyleATwblNt8xuh3FWp8SpSz3pt7P01OkBFlKsJZ2mWt5WsCySlDQLckb1zMY9yE9Qy0LA==} peerDependencies: eslint: '>=9.0.0' typescript: '>=3.3.1' @@ -3339,8 +3374,8 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - h3@1.15.4: - resolution: {integrity: sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==} + h3@1.15.5: + resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==} has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -3633,67 +3668,74 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-android-arm64@1.30.2: - resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + lightningcss-android-arm64@1.31.1: + resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.30.2: - resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + lightningcss-darwin-arm64@1.31.1: + resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} engines: {node: '>= 12.0.0'} + cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.30.2: - resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + lightningcss-darwin-x64@1.31.1: + resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} engines: {node: '>= 12.0.0'} + cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.30.2: - resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + lightningcss-freebsd-x64@1.31.1: + resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.30.2: - resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + lightningcss-linux-arm-gnueabihf@1.31.1: + resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.30.2: - resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + lightningcss-linux-arm64-gnu@1.31.1: + resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} engines: {node: '>= 12.0.0'} + cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.30.2: - resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + lightningcss-linux-arm64-musl@1.31.1: + resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} engines: {node: '>= 12.0.0'} + cpu: [arm64] os: [linux] - lightningcss-linux-x64-gnu@1.30.2: - resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + lightningcss-linux-x64-gnu@1.31.1: + resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} engines: {node: '>= 12.0.0'} + cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.30.2: - resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + lightningcss-linux-x64-musl@1.31.1: + resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} engines: {node: '>= 12.0.0'} + cpu: [x64] os: [linux] - lightningcss-win32-arm64-msvc@1.30.2: - resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + lightningcss-win32-arm64-msvc@1.31.1: + resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.30.2: - resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + lightningcss-win32-x64-msvc@1.31.1: + resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} engines: {node: '>= 12.0.0'} + cpu: [x64] os: [win32] - lightningcss@1.30.2: - resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + lightningcss@1.31.1: + resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} engines: {node: '>= 12.0.0'} lilconfig@2.1.0: @@ -3816,19 +3858,14 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - next@16.1.0: - resolution: {integrity: sha512-Y+KbmDbefYtHDDQKLNrmzE/YYzG2msqo2VXhzh5yrJ54tx/6TmGdkR5+kP9ma7i7LwZpZMfoY3m/AoPPPKxtVw==} + next@16.1.6: + resolution: {integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -3871,8 +3908,8 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true - node-mock-http@1.0.2: - resolution: {integrity: sha512-zWaamgDUdo9SSLw47we78+zYw/bDr5gH8pH7oRRs8V3KmBtu8GLgGIbV2p/gRPd3LWpEOpjQj7X1FOU3VFMJ8g==} + node-mock-http@1.0.4: + resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==} node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} @@ -3921,6 +3958,9 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -4007,13 +4047,13 @@ packages: pkg-types@1.3.0: resolution: {integrity: sha512-kS7yWjVFCkIw9hqdJBoMxDdzEngmkr5FXeWZZfQ6GoYacjVnsW6l2CcYW/0ThD0vF4LPJgVYnrg4d0uuhwYQbg==} - playwright-core@1.57.0: - resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==} + playwright-core@1.58.0: + resolution: {integrity: sha512-aaoB1RWrdNi3//rOeKuMiS65UCcgOVljU46At6eFcOFPFHWtd2weHRRow6z/n+Lec0Lvu0k9ZPKJSjPugikirw==} engines: {node: '>=18'} hasBin: true - playwright@1.57.0: - resolution: {integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==} + playwright@1.58.0: + resolution: {integrity: sha512-2SVA0sbPktiIY/MCOPX8e86ehA/e+tDNq+e5Y8qjKYti2Z/JG7xnronT/TXTIkKbYGWlCbuucZ6dziEgkoEjQQ==} engines: {node: '>=18'} hasBin: true @@ -4094,14 +4134,6 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.41: - resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.4.47: - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -4123,8 +4155,8 @@ packages: vue-tsc: optional: true - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + prettier@3.8.1: + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} engines: {node: '>=14'} hasBin: true @@ -4144,10 +4176,10 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - react-dom@19.2.3: - resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} + react-dom@19.2.4: + resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: - react: ^19.2.3 + react: ^19.2.4 react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -4156,8 +4188,8 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} - react@19.2.3: - resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} + react@19.2.4: + resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -4469,6 +4501,10 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} @@ -4547,38 +4583,38 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - turbo-darwin-64@2.7.2: - resolution: {integrity: sha512-dxY3X6ezcT5vm3coK6VGixbrhplbQMwgNsCsvZamS/+/6JiebqW9DKt4NwpgYXhDY2HdH00I7FWs3wkVuan4rA==} + turbo-darwin-64@2.7.6: + resolution: {integrity: sha512-bYu0qnWju2Ha3EbIkPCk1SMLT3sltKh1P/Jy5FER6BmH++H5z+T5MHh3W1Xoers9rk4N1VdKvog9FO1pxQyjhw==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.7.2: - resolution: {integrity: sha512-1bXmuwPLqNFt3mzrtYcVx1sdJ8UYb124Bf48nIgcpMCGZy3kDhgxNv1503kmuK/37OGOZbsWSQFU4I08feIuSg==} + turbo-darwin-arm64@2.7.6: + resolution: {integrity: sha512-KCxTf3Y1hgNLYIWRLw8bwH8Zie9RyCGoxAlXYsCBI/YNqBSR+ZZK9KYzFxAqDaVaNvTwLFv3rJRGsXOFWg4+Uw==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.7.2: - resolution: {integrity: sha512-kP+TiiMaiPugbRlv57VGLfcjFNsFbo8H64wMBCPV2270Or2TpDCBULMzZrvEsvWFjT3pBFvToYbdp8/Kw0jAQg==} + turbo-linux-64@2.7.6: + resolution: {integrity: sha512-vjoU8zIfNgvJR3cMitgw7inEoi6bmuVuFawDl5yKtxjAEhDktFdRBpGS3WojD4l3BklBbIK689ssXcGf21LxRA==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.7.2: - resolution: {integrity: sha512-VDJwQ0+8zjAfbyY6boNaWfP6RIez4ypKHxwkuB6SrWbOSk+vxTyW5/hEjytTwK8w/TsbKVcMDyvpora8tEsRFw==} + turbo-linux-arm64@2.7.6: + resolution: {integrity: sha512-TcMpBvTqZf+1DptrVYLbZls7WY1UVNDTGaf0bo7/GCgWYv5eZHCVo4Td7kCJeDU4glbXg67REX0md0S0V6ghMg==} cpu: [arm64] os: [linux] - turbo-windows-64@2.7.2: - resolution: {integrity: sha512-rPjqQXVnI6A6oxgzNEE8DNb6Vdj2Wwyhfv3oDc+YM3U9P7CAcBIlKv/868mKl4vsBtz4ouWpTQNXG8vljgJO+w==} + turbo-windows-64@2.7.6: + resolution: {integrity: sha512-1/MhkYldiihjneY8QnnDMbAkHXn/udTWSVYS94EMlkE9AShozsLTTOT1gDOpX06EfEW5njP09suhMvxbvwuwpQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.7.2: - resolution: {integrity: sha512-tcnHvBhO515OheIFWdxA+qUvZzNqqcHbLVFc1+n+TJ1rrp8prYicQtbtmsiKgMvr/54jb9jOabU62URAobnB7g==} + turbo-windows-arm64@2.7.6: + resolution: {integrity: sha512-0wDVnUJLFAWm4ZzOQFDkbyyUqaszorTGf3Rdc22IRIyJTTLd6ajqdb+cWD89UZ1RKr953+PZR1gqgWQY4PDuhA==} cpu: [arm64] os: [win32] - turbo@2.7.2: - resolution: {integrity: sha512-5JIA5aYBAJSAhrhbyag1ZuMSgUZnHtI+Sq3H8D3an4fL8PeF+L1yYvbEJg47akP1PFfATMf5ehkqFnxfkmuwZQ==} + turbo@2.7.6: + resolution: {integrity: sha512-PO9AvJLEsNLO+EYhF4zB+v10hOjsJe5kJW+S6tTbRv+TW7gf1Qer4mfjP9h3/y9h8ZiPvOrenxnEgDtFgaM5zw==} hasBin: true typanion@3.14.0: @@ -4620,8 +4656,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true @@ -4631,6 +4667,9 @@ packages: ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -4638,9 +4677,6 @@ packages: uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -4716,19 +4752,58 @@ packages: yaml: optional: true - vitest@4.0.12: - resolution: {integrity: sha512-pmW4GCKQ8t5Ko1jYjC3SqOr7TUKN7uHOHB/XGsAIb69eYu6d1ionGSsb5H9chmPf+WeXt0VE7jTXsB1IvWoNbw==} + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.0.18: + resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 - '@types/debug': ^4.1.12 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.12 - '@vitest/browser-preview': 4.0.12 - '@vitest/browser-webdriverio': 4.0.12 - '@vitest/ui': 4.0.12 + '@vitest/browser-playwright': 4.0.18 + '@vitest/browser-preview': 4.0.18 + '@vitest/browser-webdriverio': 4.0.18 + '@vitest/ui': 4.0.18 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4736,8 +4811,6 @@ packages: optional: true '@opentelemetry/api': optional: true - '@types/debug': - optional: true '@types/node': optional: true '@vitest/browser-playwright': @@ -4959,10 +5032,19 @@ snapshots: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 + '@emnapi/core@1.8.1': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 + '@emnapi/runtime@1.8.1': + dependencies: + tslib: 2.8.1 + '@emnapi/wasi-threads@1.1.0': dependencies: tslib: 2.8.1 @@ -5336,7 +5418,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.7.1 + '@emnapi/runtime': 1.8.1 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -5484,7 +5566,7 @@ snapshots: '@jridgewell/gen-mapping@0.3.12': dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.29 '@jridgewell/gen-mapping@0.3.5': @@ -5507,8 +5589,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 - '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.25': @@ -5519,9 +5599,9 @@ snapshots: '@jridgewell/trace-mapping@0.3.29': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 - '@napi-rs/cli@3.4.1(@emnapi/runtime@1.7.1)(@types/node@20.19.1)(node-addon-api@8.3.0)': + '@napi-rs/cli@3.4.1(@emnapi/runtime@1.8.1)(@types/node@20.19.1)(node-addon-api@8.3.0)': dependencies: '@inquirer/prompts': 7.10.1(@types/node@20.19.1) '@napi-rs/cross-toolchain': 1.0.3 @@ -5530,13 +5610,13 @@ snapshots: clipanion: 4.0.0-rc.4(typanion@3.14.0) colorette: 2.0.20 debug: 4.4.3 - emnapi: 1.7.1(node-addon-api@8.3.0) + emnapi: 1.8.1(node-addon-api@8.3.0) es-toolkit: 1.43.0 js-yaml: 4.1.0 semver: 7.7.3 typanion: 3.14.0 optionalDependencies: - '@emnapi/runtime': 1.7.1 + '@emnapi/runtime': 1.8.1 transitivePeerDependencies: - '@napi-rs/cross-toolchain-arm64-target-aarch64' - '@napi-rs/cross-toolchain-arm64-target-armv7' @@ -5765,34 +5845,34 @@ snapshots: '@napi-rs/wasm-tools-win32-ia32-msvc': 1.0.1 '@napi-rs/wasm-tools-win32-x64-msvc': 1.0.1 - '@next/env@16.1.0': {} + '@next/env@16.1.6': {} - '@next/eslint-plugin-next@16.1.0': + '@next/eslint-plugin-next@16.1.6': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@16.1.0': + '@next/swc-darwin-arm64@16.1.6': optional: true - '@next/swc-darwin-x64@16.1.0': + '@next/swc-darwin-x64@16.1.6': optional: true - '@next/swc-linux-arm64-gnu@16.1.0': + '@next/swc-linux-arm64-gnu@16.1.6': optional: true - '@next/swc-linux-arm64-musl@16.1.0': + '@next/swc-linux-arm64-musl@16.1.6': optional: true - '@next/swc-linux-x64-gnu@16.1.0': + '@next/swc-linux-x64-gnu@16.1.6': optional: true - '@next/swc-linux-x64-musl@16.1.0': + '@next/swc-linux-x64-musl@16.1.6': optional: true - '@next/swc-win32-arm64-msvc@16.1.0': + '@next/swc-win32-arm64-msvc@16.1.6': optional: true - '@next/swc-win32-x64-msvc@16.1.0': + '@next/swc-win32-x64-msvc@16.1.6': optional: true '@nodelib/fs.scandir@2.1.5': @@ -5871,37 +5951,37 @@ snapshots: dependencies: '@octokit/openapi-types': 27.0.0 - '@oven/bun-darwin-aarch64@1.3.5': + '@oven/bun-darwin-aarch64@1.3.7': optional: true - '@oven/bun-darwin-x64-baseline@1.3.5': + '@oven/bun-darwin-x64-baseline@1.3.7': optional: true - '@oven/bun-darwin-x64@1.3.5': + '@oven/bun-darwin-x64@1.3.7': optional: true - '@oven/bun-linux-aarch64-musl@1.3.5': + '@oven/bun-linux-aarch64-musl@1.3.7': optional: true - '@oven/bun-linux-aarch64@1.3.5': + '@oven/bun-linux-aarch64@1.3.7': optional: true - '@oven/bun-linux-x64-baseline@1.3.5': + '@oven/bun-linux-x64-baseline@1.3.7': optional: true - '@oven/bun-linux-x64-musl-baseline@1.3.5': + '@oven/bun-linux-x64-musl-baseline@1.3.7': optional: true - '@oven/bun-linux-x64-musl@1.3.5': + '@oven/bun-linux-x64-musl@1.3.7': optional: true - '@oven/bun-linux-x64@1.3.5': + '@oven/bun-linux-x64@1.3.7': optional: true - '@oven/bun-windows-x64-baseline@1.3.5': + '@oven/bun-windows-x64-baseline@1.3.7': optional: true - '@oven/bun-windows-x64@1.3.5': + '@oven/bun-windows-x64@1.3.7': optional: true '@parcel/watcher-android-arm64@2.5.0': @@ -5913,12 +5993,18 @@ snapshots: '@parcel/watcher-darwin-arm64@2.5.0': optional: true - '@parcel/watcher-darwin-arm64@2.5.1': {} + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.6': {} '@parcel/watcher-darwin-x64@2.5.0': optional: true - '@parcel/watcher-darwin-x64@2.5.1': {} + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.6': {} '@parcel/watcher-freebsd-x64@2.5.0': optional: true @@ -5941,22 +6027,34 @@ snapshots: '@parcel/watcher-linux-arm64-glibc@2.5.0': optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.1': {} + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.6': {} '@parcel/watcher-linux-arm64-musl@2.5.0': optional: true - '@parcel/watcher-linux-arm64-musl@2.5.1': {} + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.6': {} '@parcel/watcher-linux-x64-glibc@2.5.0': optional: true - '@parcel/watcher-linux-x64-glibc@2.5.1': {} + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.6': {} '@parcel/watcher-linux-x64-musl@2.5.0': optional: true - '@parcel/watcher-linux-x64-musl@2.5.1': {} + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.6': {} '@parcel/watcher-wasm@2.5.0': dependencies: @@ -5978,7 +6076,10 @@ snapshots: '@parcel/watcher-win32-x64@2.5.0': optional: true - '@parcel/watcher-win32-x64@2.5.1': {} + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.6': {} '@parcel/watcher@2.5.0': dependencies: @@ -6025,9 +6126,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.57.0': + '@playwright/test@1.58.0': dependencies: - playwright: 1.57.0 + playwright: 1.58.0 '@rolldown/pluginutils@1.0.0-beta.53': {} @@ -6142,9 +6243,9 @@ snapshots: '@types/braces@3.0.5': {} - '@types/bun@1.3.5': + '@types/bun@1.3.7': dependencies: - bun-types: 1.3.5 + bun-types: 1.3.7 '@types/chai@5.2.3': dependencies: @@ -6169,101 +6270,59 @@ snapshots: '@types/json5@0.0.29': {} - '@types/node@20.14.13': - dependencies: - undici-types: 5.26.5 - '@types/node@20.19.1': dependencies: undici-types: 6.21.0 '@types/postcss-import@14.0.3': dependencies: - postcss: 8.4.41 + postcss: 8.5.6 - '@types/react-dom@19.2.3(@types/react@19.2.7)': + '@types/react-dom@19.2.3(@types/react@19.2.10)': dependencies: - '@types/react': 19.2.7 + '@types/react': 19.2.10 - '@types/react@19.2.7': + '@types/react@19.2.10': dependencies: csstype: 3.2.3 '@types/semver@7.7.1': {} - '@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) - '@typescript-eslint/scope-manager': 8.47.0 - '@typescript-eslint/type-utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.47.0 - eslint: 9.39.2(jiti@2.6.1) - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.5.4) - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.47.0 - '@typescript-eslint/type-utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/type-utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.47.0 eslint: 9.39.2(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4)': - dependencies: - '@typescript-eslint/scope-manager': 8.47.0 - '@typescript-eslint/types': 8.47.0 - '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.47.0 - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.5.4 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3)': + '@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.47.0 '@typescript-eslint/types': 8.47.0 - '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.47.0 debug: 4.4.3 eslint: 9.39.2(jiti@2.6.1) - typescript: 5.6.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.47.0(typescript@5.5.4)': + '@typescript-eslint/project-service@8.47.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.5.4) + '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.9.3) '@typescript-eslint/types': 8.47.0 debug: 4.4.3 - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.47.0(typescript@5.6.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.6.3) - '@typescript-eslint/types': 8.47.0 - debug: 4.4.3 - typescript: 5.6.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -6272,44 +6331,28 @@ snapshots: '@typescript-eslint/types': 8.47.0 '@typescript-eslint/visitor-keys': 8.47.0 - '@typescript-eslint/tsconfig-utils@8.47.0(typescript@5.5.4)': - dependencies: - typescript: 5.5.4 - - '@typescript-eslint/tsconfig-utils@8.47.0(typescript@5.6.3)': + '@typescript-eslint/tsconfig-utils@8.47.0(typescript@5.9.3)': dependencies: - typescript: 5.6.3 + typescript: 5.9.3 - '@typescript-eslint/type-utils@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4)': + '@typescript-eslint/type-utils@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.47.0 - '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.2(jiti@2.6.1) - ts-api-utils: 2.1.0(typescript@5.5.4) - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/type-utils@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3)': - dependencies: - '@typescript-eslint/types': 8.47.0 - '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.47.0': {} - '@typescript-eslint/typescript-estree@8.47.0(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@8.47.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.47.0(typescript@5.5.4) - '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.5.4) + '@typescript-eslint/project-service': 8.47.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.9.3) '@typescript-eslint/types': 8.47.0 '@typescript-eslint/visitor-keys': 8.47.0 debug: 4.4.3 @@ -6317,46 +6360,19 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.3 - ts-api-utils: 2.1.0(typescript@5.5.4) - typescript: 5.5.4 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.47.0(typescript@5.6.3)': - dependencies: - '@typescript-eslint/project-service': 8.47.0(typescript@5.6.3) - '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.6.3) - '@typescript-eslint/types': 8.47.0 - '@typescript-eslint/visitor-keys': 8.47.0 - debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.3 - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4)': + '@typescript-eslint/utils@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.47.0 '@typescript-eslint/types': 8.47.0 - '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.47.0 - '@typescript-eslint/types': 8.47.0 - '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.6.3) - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.6.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -6365,7 +6381,7 @@ snapshots: '@typescript-eslint/types': 8.47.0 eslint-visitor-keys: 4.2.1 - '@vitejs/plugin-react@5.1.2(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': + '@vitejs/plugin-react@5.1.2(vite@7.3.1(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) @@ -6373,47 +6389,47 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.53 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + vite: 7.3.1(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) transitivePeerDependencies: - supports-color - '@vitest/expect@4.0.12': + '@vitest/expect@4.0.18': dependencies: '@standard-schema/spec': 1.0.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.0.12 - '@vitest/utils': 4.0.12 + '@vitest/spy': 4.0.18 + '@vitest/utils': 4.0.18 chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.12(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': + '@vitest/mocker@4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': dependencies: - '@vitest/spy': 4.0.12 + '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) - '@vitest/pretty-format@4.0.12': + '@vitest/pretty-format@4.0.18': dependencies: tinyrainbow: 3.0.3 - '@vitest/runner@4.0.12': + '@vitest/runner@4.0.18': dependencies: - '@vitest/utils': 4.0.12 + '@vitest/utils': 4.0.18 pathe: 2.0.3 - '@vitest/snapshot@4.0.12': + '@vitest/snapshot@4.0.18': dependencies: - '@vitest/pretty-format': 4.0.12 + '@vitest/pretty-format': 4.0.18 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.12': {} + '@vitest/spy@4.0.18': {} - '@vitest/utils@4.0.12': + '@vitest/utils@4.0.18': dependencies: - '@vitest/pretty-format': 4.0.12 + '@vitest/pretty-format': 4.0.18 tinyrainbow: 3.0.3 '@webassemblyjs/ast@1.14.1': @@ -6625,13 +6641,13 @@ snapshots: ast-types-flow@0.0.8: {} - autoprefixer@10.4.23(postcss@8.4.47): + autoprefixer@10.4.23(postcss@8.5.6): dependencies: browserslist: 4.28.1 caniuse-lite: 1.0.30001761 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.4.47 + postcss: 8.5.6 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -6683,23 +6699,23 @@ snapshots: buffer-from@1.1.2: {} - bun-types@1.3.5: + bun-types@1.3.7: dependencies: '@types/node': 20.19.1 - bun@1.3.5: + bun@1.3.7: optionalDependencies: - '@oven/bun-darwin-aarch64': 1.3.5 - '@oven/bun-darwin-x64': 1.3.5 - '@oven/bun-darwin-x64-baseline': 1.3.5 - '@oven/bun-linux-aarch64': 1.3.5 - '@oven/bun-linux-aarch64-musl': 1.3.5 - '@oven/bun-linux-x64': 1.3.5 - '@oven/bun-linux-x64-baseline': 1.3.5 - '@oven/bun-linux-x64-musl': 1.3.5 - '@oven/bun-linux-x64-musl-baseline': 1.3.5 - '@oven/bun-windows-x64': 1.3.5 - '@oven/bun-windows-x64-baseline': 1.3.5 + '@oven/bun-darwin-aarch64': 1.3.7 + '@oven/bun-darwin-x64': 1.3.7 + '@oven/bun-darwin-x64-baseline': 1.3.7 + '@oven/bun-linux-aarch64': 1.3.7 + '@oven/bun-linux-aarch64-musl': 1.3.7 + '@oven/bun-linux-x64': 1.3.7 + '@oven/bun-linux-x64-baseline': 1.3.7 + '@oven/bun-linux-x64-musl': 1.3.7 + '@oven/bun-linux-x64-musl-baseline': 1.3.7 + '@oven/bun-windows-x64': 1.3.7 + '@oven/bun-windows-x64-baseline': 1.3.7 bundle-require@5.1.0(esbuild@0.27.0): dependencies: @@ -6729,8 +6745,6 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001755: {} - caniuse-lite@1.0.30001761: {} chai@6.2.1: {} @@ -6870,10 +6884,7 @@ snapshots: detect-libc@1.0.3: {} - detect-libc@2.0.4: {} - - detect-libc@2.1.2: - optional: true + detect-libc@2.1.2: {} didyoumean@1.2.2: {} @@ -6895,7 +6906,7 @@ snapshots: electron-to-chromium@1.5.267: {} - emnapi@1.7.1(node-addon-api@8.3.0): + emnapi@1.8.1(node-addon-api@8.3.0): optionalDependencies: node-addon-api: 8.3.0 @@ -7102,29 +7113,29 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@16.1.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): + eslint-config-next@16.1.6(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@next/eslint-plugin-next': 16.1.0 + '@next/eslint-plugin-next': 16.1.6 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.9.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - eslint-config-next@16.1.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): + eslint-config-next@16.1.6(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@next/eslint-plugin-next': 16.1.0 + '@next/eslint-plugin-next': 16.1.6 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)) @@ -7133,9 +7144,9 @@ snapshots: eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + typescript-eslint: 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) optionalDependencies: - typescript: 5.6.3 + typescript: 5.9.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack @@ -7150,19 +7161,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 enhanced-resolve: 5.18.4 eslint: 9.39.2(jiti@2.6.1) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 get-tsconfig: 4.10.0 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -7188,14 +7199,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -7209,7 +7220,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -7220,7 +7231,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -7232,7 +7243,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -7590,16 +7601,16 @@ snapshots: graphemer@1.4.0: {} - h3@1.15.4: + h3@1.15.5: dependencies: cookie-es: 1.2.2 crossws: 0.3.5 defu: 6.1.4 destr: 2.0.5 iron-webcrypto: 1.2.1 - node-mock-http: 1.0.2 + node-mock-http: 1.0.4 radix3: 1.1.2 - ufo: 1.6.1 + ufo: 1.6.3 uncrypto: 0.1.3 has-bigints@1.0.2: {} @@ -7865,47 +7876,47 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-android-arm64@1.30.2: + lightningcss-android-arm64@1.31.1: optional: true - lightningcss-darwin-arm64@1.30.2: {} + lightningcss-darwin-arm64@1.31.1: {} - lightningcss-darwin-x64@1.30.2: {} + lightningcss-darwin-x64@1.31.1: {} - lightningcss-freebsd-x64@1.30.2: + lightningcss-freebsd-x64@1.31.1: optional: true - lightningcss-linux-arm-gnueabihf@1.30.2: + lightningcss-linux-arm-gnueabihf@1.31.1: optional: true - lightningcss-linux-arm64-gnu@1.30.2: {} + lightningcss-linux-arm64-gnu@1.31.1: {} - lightningcss-linux-arm64-musl@1.30.2: {} + lightningcss-linux-arm64-musl@1.31.1: {} - lightningcss-linux-x64-gnu@1.30.2: {} + lightningcss-linux-x64-gnu@1.31.1: {} - lightningcss-linux-x64-musl@1.30.2: {} + lightningcss-linux-x64-musl@1.31.1: {} - lightningcss-win32-arm64-msvc@1.30.2: + lightningcss-win32-arm64-msvc@1.31.1: optional: true - lightningcss-win32-x64-msvc@1.30.2: {} + lightningcss-win32-x64-msvc@1.31.1: {} - lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm): + lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm): dependencies: - detect-libc: 2.0.4 + detect-libc: 2.1.2 optionalDependencies: - lightningcss-android-arm64: 1.30.2 - lightningcss-darwin-arm64: 1.30.2 - lightningcss-darwin-x64: 1.30.2 - lightningcss-freebsd-x64: 1.30.2 - lightningcss-linux-arm-gnueabihf: 1.30.2 - lightningcss-linux-arm64-gnu: 1.30.2 - lightningcss-linux-arm64-musl: 1.30.2 - lightningcss-linux-x64-gnu: 1.30.2 - lightningcss-linux-x64-musl: 1.30.2 - lightningcss-win32-arm64-msvc: 1.30.2 - lightningcss-win32-x64-msvc: 1.30.2 + lightningcss-android-arm64: 1.31.1 + lightningcss-darwin-arm64: 1.31.1 + lightningcss-darwin-x64: 1.31.1 + lightningcss-freebsd-x64: 1.31.1 + lightningcss-linux-arm-gnueabihf: 1.31.1 + lightningcss-linux-arm64-gnu: 1.31.1 + lightningcss-linux-arm64-musl: 1.31.1 + lightningcss-linux-x64-gnu: 1.31.1 + lightningcss-linux-x64-musl: 1.31.1 + lightningcss-win32-arm64-msvc: 1.31.1 + lightningcss-win32-x64-msvc: 1.31.1 lilconfig@2.1.0: {} @@ -7923,7 +7934,7 @@ snapshots: crossws: 0.3.1 defu: 6.1.4 get-port-please: 3.1.2 - h3: 1.15.4 + h3: 1.15.5 http-shutdown: 1.2.2 jiti: 2.4.2 mlly: 1.7.3 @@ -8029,32 +8040,30 @@ snapshots: nanoid@3.3.11: {} - nanoid@3.3.7: {} - natural-compare@1.4.0: {} neo-async@2.6.2: {} - next@16.1.0(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + next@16.1.6(@playwright/test@1.58.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - '@next/env': 16.1.0 + '@next/env': 16.1.6 '@swc/helpers': 0.5.15 - baseline-browser-mapping: 2.8.29 - caniuse-lite: 1.0.30001755 + baseline-browser-mapping: 2.9.11 + caniuse-lite: 1.0.30001761 postcss: 8.4.31 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - styled-jsx: 5.1.6(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + styled-jsx: 5.1.6(react@19.2.4) optionalDependencies: - '@next/swc-darwin-arm64': 16.1.0 - '@next/swc-darwin-x64': 16.1.0 - '@next/swc-linux-arm64-gnu': 16.1.0 - '@next/swc-linux-arm64-musl': 16.1.0 - '@next/swc-linux-x64-gnu': 16.1.0 - '@next/swc-linux-x64-musl': 16.1.0 - '@next/swc-win32-arm64-msvc': 16.1.0 - '@next/swc-win32-x64-msvc': 16.1.0 - '@playwright/test': 1.57.0 + '@next/swc-darwin-arm64': 16.1.6 + '@next/swc-darwin-x64': 16.1.6 + '@next/swc-linux-arm64-gnu': 16.1.6 + '@next/swc-linux-arm64-musl': 16.1.6 + '@next/swc-linux-x64-gnu': 16.1.6 + '@next/swc-linux-x64-musl': 16.1.6 + '@next/swc-win32-arm64-msvc': 16.1.6 + '@next/swc-win32-x64-msvc': 16.1.6 + '@playwright/test': 1.58.0 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -8072,7 +8081,7 @@ snapshots: node-gyp-build@4.8.4: {} - node-mock-http@1.0.2: {} + node-mock-http@1.0.4: {} node-releases@2.0.27: {} @@ -8125,6 +8134,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + obug@2.1.1: {} + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -8199,26 +8210,19 @@ snapshots: mlly: 1.7.3 pathe: 1.1.2 - playwright-core@1.57.0: {} + playwright-core@1.58.0: {} - playwright@1.57.0: + playwright@1.58.0: dependencies: - playwright-core: 1.57.0 + playwright-core: 1.58.0 optionalDependencies: fsevents: 2.3.2 possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.4.47): + postcss-import@15.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.47 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - - postcss-import@16.1.1(postcss@8.4.41): - dependencies: - postcss: 8.4.41 + postcss: 8.5.6 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 @@ -8230,17 +8234,17 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.47): + postcss-js@4.0.1(postcss@8.5.6): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.47 + postcss: 8.5.6 - postcss-load-config@4.0.2(postcss@8.4.47): + postcss-load-config@4.0.2(postcss@8.5.6): dependencies: lilconfig: 3.1.2 yaml: 2.6.0 optionalDependencies: - postcss: 8.4.47 + postcss: 8.5.6 postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.19.1)(yaml@2.6.0): dependencies: @@ -8251,9 +8255,9 @@ snapshots: tsx: 4.19.1 yaml: 2.6.0 - postcss-nested@6.2.0(postcss@8.4.47): + postcss-nested@6.2.0(postcss@8.5.6): dependencies: - postcss: 8.4.47 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.0.10: @@ -8279,18 +8283,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.4.41: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postcss@8.4.47: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -8310,12 +8302,12 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros - prettier-plugin-organize-imports@4.3.0(prettier@3.6.2)(typescript@5.5.4): + prettier-plugin-organize-imports@4.3.0(prettier@3.8.1)(typescript@5.5.4): dependencies: - prettier: 3.6.2 + prettier: 3.8.1 typescript: 5.5.4 - prettier@3.6.2: {} + prettier@3.8.1: {} prop-types@15.8.1: dependencies: @@ -8333,16 +8325,16 @@ snapshots: dependencies: safe-buffer: 5.2.1 - react-dom@19.2.3(react@19.2.3): + react-dom@19.2.4(react@19.2.4): dependencies: - react: 19.2.3 + react: 19.2.4 scheduler: 0.27.0 react-is@16.13.1: {} react-refresh@0.18.0: {} - react@19.2.3: {} + react@19.2.4: {} read-cache@1.0.0: dependencies: @@ -8657,10 +8649,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(react@19.2.3): + styled-jsx@5.1.6(react@19.2.4): dependencies: client-only: 0.0.1 - react: 19.2.3 + react: 19.2.4 sucrase@3.35.0: dependencies: @@ -8702,11 +8694,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.4.47 - postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47) - postcss-nested: 6.2.0(postcss@8.4.47) + postcss: 8.5.6 + postcss-import: 15.1.0(postcss@8.5.6) + postcss-js: 4.0.1(postcss@8.5.6) + postcss-load-config: 4.0.2(postcss@8.5.6) + postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 @@ -8749,6 +8741,8 @@ snapshots: tinyexec@0.3.2: {} + tinyexec@1.0.2: {} + tinyglobby@0.2.14: dependencies: fdir: 6.4.6(picomatch@4.0.2) @@ -8787,13 +8781,9 @@ snapshots: node-addon-api: 8.3.0 node-gyp-build: 4.8.4 - ts-api-utils@2.1.0(typescript@5.5.4): + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: - typescript: 5.5.4 - - ts-api-utils@2.1.0(typescript@5.6.3): - dependencies: - typescript: 5.6.3 + typescript: 5.9.3 ts-interface-checker@0.1.13: {} @@ -8842,32 +8832,32 @@ snapshots: fsevents: 2.3.3 optional: true - turbo-darwin-64@2.7.2: + turbo-darwin-64@2.7.6: optional: true - turbo-darwin-arm64@2.7.2: + turbo-darwin-arm64@2.7.6: optional: true - turbo-linux-64@2.7.2: + turbo-linux-64@2.7.6: optional: true - turbo-linux-arm64@2.7.2: + turbo-linux-arm64@2.7.6: optional: true - turbo-windows-64@2.7.2: + turbo-windows-64@2.7.6: optional: true - turbo-windows-arm64@2.7.2: + turbo-windows-arm64@2.7.6: optional: true - turbo@2.7.2: + turbo@2.7.6: optionalDependencies: - turbo-darwin-64: 2.7.2 - turbo-darwin-arm64: 2.7.2 - turbo-linux-64: 2.7.2 - turbo-linux-arm64: 2.7.2 - turbo-windows-64: 2.7.2 - turbo-windows-arm64: 2.7.2 + turbo-darwin-64: 2.7.6 + turbo-darwin-arm64: 2.7.6 + turbo-linux-64: 2.7.6 + turbo-linux-arm64: 2.7.6 + turbo-windows-64: 2.7.6 + turbo-windows-arm64: 2.7.6 typanion@3.14.0: {} @@ -8912,36 +8902,27 @@ snapshots: possible-typed-array-names: 1.0.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4): - dependencies: - '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4))(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) - '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.5.4) - eslint: 9.39.2(jiti@2.6.1) - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - typescript-eslint@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3): + typescript-eslint@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) - '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) - '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.47.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) - typescript: 5.6.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color typescript@5.5.4: {} - typescript@5.6.3: {} + typescript@5.9.3: {} ufo@1.5.4: {} ufo@1.6.1: {} + ufo@1.6.3: {} + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -8951,8 +8932,6 @@ snapshots: uncrypto@0.1.3: {} - undici-types@5.26.5: {} - undici-types@6.21.0: {} unicorn-magic@0.3.0: {} @@ -8985,44 +8964,61 @@ snapshots: util-deprecate@1.0.2: {} - vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): + vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): dependencies: esbuild: 0.25.0 - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 postcss: 8.5.6 rollup: 4.44.0 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 optionalDependencies: '@types/node': 20.19.1 fsevents: 2.3.3 jiti: 2.6.1 - lightningcss: 1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm) + lightningcss: 1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm) terser: 5.31.6 tsx: 4.19.1 yaml: 2.6.0 - vitest@4.0.12(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): + vite@7.3.1(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): dependencies: - '@vitest/expect': 4.0.12 - '@vitest/mocker': 4.0.12(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) - '@vitest/pretty-format': 4.0.12 - '@vitest/runner': 4.0.12 - '@vitest/snapshot': 4.0.12 - '@vitest/spy': 4.0.12 - '@vitest/utils': 4.0.12 - debug: 4.4.3 + esbuild: 0.27.0 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.44.0 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 20.19.1 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm) + terser: 5.31.6 + tsx: 4.19.1 + yaml: 2.6.0 + + vitest@4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): + dependencies: + '@vitest/expect': 4.0.18 + '@vitest/mocker': 4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) + '@vitest/pretty-format': 4.0.18 + '@vitest/runner': 4.0.18 + '@vitest/snapshot': 4.0.18 + '@vitest/spy': 4.0.18 + '@vitest/utils': 4.0.18 es-module-lexer: 1.7.0 expect-type: 1.2.2 magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 std-env: 3.10.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.30.2(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.19.1 @@ -9035,7 +9031,6 @@ snapshots: - sass-embedded - stylus - sugarss - - supports-color - terser - tsx - yaml diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ba9aedcb6660..4752226d9c0a 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,14 +7,14 @@ packages: catalog: '@types/node': ^20.19.0 - prettier: 3.6.2 - vite: ^7.0.0 + prettier: 3.8.1 + vite: ^7.3.1 webpack: ^5 - lightningcss: 1.30.2 - lightningcss-darwin-arm64: 1.30.2 - lightningcss-darwin-x64: 1.30.2 - lightningcss-linux-arm64-gnu: 1.30.2 - lightningcss-linux-arm64-musl: 1.30.2 - lightningcss-linux-x64-gnu: 1.30.2 - lightningcss-linux-x64-musl: 1.30.2 - lightningcss-win32-x64-msvc: 1.30.2 + lightningcss: 1.31.1 + lightningcss-darwin-arm64: 1.31.1 + lightningcss-darwin-x64: 1.31.1 + lightningcss-linux-arm64-gnu: 1.31.1 + lightningcss-linux-arm64-musl: 1.31.1 + lightningcss-linux-x64-gnu: 1.31.1 + lightningcss-linux-x64-musl: 1.31.1 + lightningcss-win32-x64-msvc: 1.31.1 From 23d01bc4746c614a4e2c0ecd5ba4e89c72f7c569 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 4 Feb 2026 13:06:44 +0100 Subject: [PATCH 070/100] only notify Discord once If we're in a matrix, and one of the jobs fail, then we only want to notify Discord once instead of for each failure. --- .github/workflows/ci.yml | 8 ++++++-- .github/workflows/integration-tests.yml | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f817e05a3a90..fca477c08bec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -110,9 +110,13 @@ jobs: - name: Run Playwright tests run: npm run test:ui + notify: + if: ${{ always() && github.ref == 'refs/heads/main' && needs.tests.result == 'failure' }} + needs: tests + runs-on: ubuntu-latest + steps: - name: Notify Discord - if: failure() && github.ref == 'refs/heads/main' uses: discord-actions/message@v2 with: webhookUrl: ${{ secrets.DISCORD_WEBHOOK_URL }} - message: 'The [most recent build](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) on the `main` branch has failed.' + message: 'The [most recent ${{ github.workflow }} workflow](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) on the `main` branch has failed.' diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 1508c1effc49..3b2cf8f1b80a 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -113,9 +113,13 @@ jobs: env: GITHUB_WORKSPACE: ${{ github.workspace }} + notify: + if: ${{ always() && github.ref == 'refs/heads/main' && needs.tests.result == 'failure' }} + needs: tests + runs-on: ubuntu-latest + steps: - name: Notify Discord - if: failure() && github.ref == 'refs/heads/main' uses: discord-actions/message@v2 with: webhookUrl: ${{ secrets.DISCORD_WEBHOOK_URL }} - message: 'The [most recent build](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) on the `main` branch has failed.' + message: 'The [most recent ${{ github.workflow }} workflow](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>) on the `main` branch has failed.' From ddb47e84da39598edcf07c6048a034abfa104ef2 Mon Sep 17 00:00:00 2001 From: Pavan Shinde Date: Thu, 5 Feb 2026 21:29:10 +0530 Subject: [PATCH 071/100] Fix README license badge link (#19638) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary The README license badge linked to a non-existent `master` branch (and the wrong org). This updates the link to the current location: tailwindlabs/tailwindcss/blob/main/LICENSE. ## Test plan - Opened `README.md` and clicked the license badge/link to confirm it resolves to the LICENSE file on the `main` branch. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7d21bd88385a..6e676ed2afaa 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Build Status Total Downloads Latest Release - License + License

--- From e73c2472fd32411c811529cab451bb0212910999 Mon Sep 17 00:00:00 2001 From: Pavan Shinde Date: Fri, 6 Feb 2026 21:21:07 +0530 Subject: [PATCH 072/100] Fix README links to use main branch (#19641) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary The README still referenced the `next` branch for the CI badge and contributing docs link, but the `next` branch no longer exists upstream. This updates those URLs to point to `main` so the badge and contributing docs link work correctly. ## Test plan N/A, docs only change --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6e676ed2afaa..3dc5032fda5e 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@

- Build Status + Build Status Total Downloads Latest Release License @@ -33,4 +33,4 @@ For help, discussion about best practices, or feature ideas: ## Contributing -If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/next/.github/CONTRIBUTING.md) **before submitting a pull request**. +If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. From 8ed67bf5510d8435d2be766b25245abe15b3bcef Mon Sep 17 00:00:00 2001 From: Pavan Shinde Date: Sun, 8 Feb 2026 05:56:38 +0530 Subject: [PATCH 073/100] Fix Tailwind CSS package README GitHub links (#19644) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary These package READMEs referenced the wrong GitHub org (tailwindcss/tailwindcss) and outdated branches (master/next) for common project links. Update them to point at tailwindlabs/tailwindcss on main for releases, license, discussions, and contributing docs. ## Test plan Docs-only change: No test required. --- packages/@tailwindcss-browser/README.md | 8 ++++---- packages/@tailwindcss-cli/README.md | 8 ++++---- packages/@tailwindcss-node/README.md | 8 ++++---- packages/@tailwindcss-postcss/README.md | 8 ++++---- packages/@tailwindcss-upgrade/README.md | 8 ++++---- packages/@tailwindcss-vite/README.md | 8 ++++---- packages/tailwindcss/README.md | 8 ++++---- 7 files changed, 28 insertions(+), 28 deletions(-) diff --git a/packages/@tailwindcss-browser/README.md b/packages/@tailwindcss-browser/README.md index 7d21bd88385a..4c2e56fffa13 100644 --- a/packages/@tailwindcss-browser/README.md +++ b/packages/@tailwindcss-browser/README.md @@ -15,8 +15,8 @@

Build Status Total Downloads - Latest Release - License + Latest Release + License

--- @@ -29,8 +29,8 @@ For full documentation, visit [tailwindcss.com](https://tailwindcss.com). For help, discussion about best practices, or feature ideas: -[Discuss Tailwind CSS on GitHub](https://github.com/tailwindcss/tailwindcss/discussions) +[Discuss Tailwind CSS on GitHub](https://github.com/tailwindlabs/tailwindcss/discussions) ## Contributing -If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/next/.github/CONTRIBUTING.md) **before submitting a pull request**. +If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. diff --git a/packages/@tailwindcss-cli/README.md b/packages/@tailwindcss-cli/README.md index 7d21bd88385a..4c2e56fffa13 100644 --- a/packages/@tailwindcss-cli/README.md +++ b/packages/@tailwindcss-cli/README.md @@ -15,8 +15,8 @@

Build Status Total Downloads - Latest Release - License + Latest Release + License

--- @@ -29,8 +29,8 @@ For full documentation, visit [tailwindcss.com](https://tailwindcss.com). For help, discussion about best practices, or feature ideas: -[Discuss Tailwind CSS on GitHub](https://github.com/tailwindcss/tailwindcss/discussions) +[Discuss Tailwind CSS on GitHub](https://github.com/tailwindlabs/tailwindcss/discussions) ## Contributing -If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/next/.github/CONTRIBUTING.md) **before submitting a pull request**. +If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. diff --git a/packages/@tailwindcss-node/README.md b/packages/@tailwindcss-node/README.md index 7d21bd88385a..4c2e56fffa13 100644 --- a/packages/@tailwindcss-node/README.md +++ b/packages/@tailwindcss-node/README.md @@ -15,8 +15,8 @@

Build Status Total Downloads - Latest Release - License + Latest Release + License

--- @@ -29,8 +29,8 @@ For full documentation, visit [tailwindcss.com](https://tailwindcss.com). For help, discussion about best practices, or feature ideas: -[Discuss Tailwind CSS on GitHub](https://github.com/tailwindcss/tailwindcss/discussions) +[Discuss Tailwind CSS on GitHub](https://github.com/tailwindlabs/tailwindcss/discussions) ## Contributing -If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/next/.github/CONTRIBUTING.md) **before submitting a pull request**. +If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. diff --git a/packages/@tailwindcss-postcss/README.md b/packages/@tailwindcss-postcss/README.md index 867389f0ea79..2313ccb7725f 100644 --- a/packages/@tailwindcss-postcss/README.md +++ b/packages/@tailwindcss-postcss/README.md @@ -15,8 +15,8 @@

Build Status Total Downloads - Latest Release - License + Latest Release + License

--- @@ -29,11 +29,11 @@ For full documentation, visit [tailwindcss.com](https://tailwindcss.com). For help, discussion about best practices, or feature ideas: -[Discuss Tailwind CSS on GitHub](https://github.com/tailwindcss/tailwindcss/discussions) +[Discuss Tailwind CSS on GitHub](https://github.com/tailwindlabs/tailwindcss/discussions) ## Contributing -If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/next/.github/CONTRIBUTING.md) **before submitting a pull request**. +If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. --- diff --git a/packages/@tailwindcss-upgrade/README.md b/packages/@tailwindcss-upgrade/README.md index 7d21bd88385a..4c2e56fffa13 100644 --- a/packages/@tailwindcss-upgrade/README.md +++ b/packages/@tailwindcss-upgrade/README.md @@ -15,8 +15,8 @@

Build Status Total Downloads - Latest Release - License + Latest Release + License

--- @@ -29,8 +29,8 @@ For full documentation, visit [tailwindcss.com](https://tailwindcss.com). For help, discussion about best practices, or feature ideas: -[Discuss Tailwind CSS on GitHub](https://github.com/tailwindcss/tailwindcss/discussions) +[Discuss Tailwind CSS on GitHub](https://github.com/tailwindlabs/tailwindcss/discussions) ## Contributing -If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/next/.github/CONTRIBUTING.md) **before submitting a pull request**. +If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. diff --git a/packages/@tailwindcss-vite/README.md b/packages/@tailwindcss-vite/README.md index 53e03ab47e89..6e3688b875ef 100644 --- a/packages/@tailwindcss-vite/README.md +++ b/packages/@tailwindcss-vite/README.md @@ -15,8 +15,8 @@

Build Status Total Downloads - Latest Release - License + Latest Release + License

--- @@ -29,11 +29,11 @@ For full documentation, visit [tailwindcss.com](https://tailwindcss.com). For help, discussion about best practices, or feature ideas: -[Discuss Tailwind CSS on GitHub](https://github.com/tailwindcss/tailwindcss/discussions) +[Discuss Tailwind CSS on GitHub](https://github.com/tailwindlabs/tailwindcss/discussions) ## Contributing -If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/next/.github/CONTRIBUTING.md) **before submitting a pull request**. +If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. --- diff --git a/packages/tailwindcss/README.md b/packages/tailwindcss/README.md index 7d21bd88385a..4c2e56fffa13 100644 --- a/packages/tailwindcss/README.md +++ b/packages/tailwindcss/README.md @@ -15,8 +15,8 @@

Build Status Total Downloads - Latest Release - License + Latest Release + License

--- @@ -29,8 +29,8 @@ For full documentation, visit [tailwindcss.com](https://tailwindcss.com). For help, discussion about best practices, or feature ideas: -[Discuss Tailwind CSS on GitHub](https://github.com/tailwindcss/tailwindcss/discussions) +[Discuss Tailwind CSS on GitHub](https://github.com/tailwindlabs/tailwindcss/discussions) ## Contributing -If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/next/.github/CONTRIBUTING.md) **before submitting a pull request**. +If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. From 4614f5eaa7c8bd4bd446de885577af8a40814f63 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Mon, 9 Feb 2026 12:20:25 -0500 Subject: [PATCH 074/100] =?UTF-8?q?Update=20autoprefixer=2010.4.23=20?= =?UTF-8?q?=E2=86=92=2010.4.24=20(patch)=20(#19642)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ autoprefixer (10.4.23 → 10.4.24) · [Repo](https://github.com/postcss/autoprefixer) · [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
Release Notes

10.4.24

  • Made Autoprefixer a little faster (by @Cherry).

Does any of this look wrong? Please let us know.

Commits

See the full diff on Github. The new version differs by 3 commits:

--- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- playgrounds/v3/package.json | 2 +- pnpm-lock.yaml | 34 ++++++++++++++++++++++++---------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/playgrounds/v3/package.json b/playgrounds/v3/package.json index b8e1e16fc6ca..b54e5fae5af2 100644 --- a/playgrounds/v3/package.json +++ b/playgrounds/v3/package.json @@ -18,7 +18,7 @@ "@types/node": "catalog:", "@types/react": "^19.2.10", "@types/react-dom": "^19.2.3", - "autoprefixer": "^10.4.23", + "autoprefixer": "^10.4.24", "eslint": "^9.39.2", "eslint-config-next": "^16.1.6", "typescript": "^5.9.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index be257c0fbfe0..0b8282efaa29 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -561,8 +561,8 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.10) autoprefixer: - specifier: ^10.4.23 - version: 10.4.23(postcss@8.5.6) + specifier: ^10.4.24 + version: 10.4.24(postcss@8.5.6) eslint: specifier: ^9.39.2 version: 9.39.2(jiti@2.6.1) @@ -2058,6 +2058,7 @@ packages: '@parcel/watcher-darwin-arm64@2.5.6': resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} engines: {node: '>= 10.0.0'} + cpu: [arm64] os: [darwin] '@parcel/watcher-darwin-x64@2.5.0': @@ -2075,6 +2076,7 @@ packages: '@parcel/watcher-darwin-x64@2.5.6': resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} engines: {node: '>= 10.0.0'} + cpu: [x64] os: [darwin] '@parcel/watcher-freebsd-x64@2.5.0': @@ -2128,6 +2130,7 @@ packages: '@parcel/watcher-linux-arm64-glibc@2.5.6': resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} + cpu: [arm64] os: [linux] '@parcel/watcher-linux-arm64-musl@2.5.0': @@ -2145,6 +2148,7 @@ packages: '@parcel/watcher-linux-arm64-musl@2.5.6': resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} + cpu: [arm64] os: [linux] '@parcel/watcher-linux-x64-glibc@2.5.0': @@ -2162,6 +2166,7 @@ packages: '@parcel/watcher-linux-x64-glibc@2.5.6': resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} + cpu: [x64] os: [linux] '@parcel/watcher-linux-x64-musl@2.5.0': @@ -2179,6 +2184,7 @@ packages: '@parcel/watcher-linux-x64-musl@2.5.6': resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} + cpu: [x64] os: [linux] '@parcel/watcher-wasm@2.5.0': @@ -2226,6 +2232,7 @@ packages: '@parcel/watcher-win32-x64@2.5.6': resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} engines: {node: '>= 10.0.0'} + cpu: [x64] os: [win32] '@parcel/watcher@2.5.0': @@ -2692,8 +2699,8 @@ packages: ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - autoprefixer@10.4.23: - resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==} + autoprefixer@10.4.24: + resolution: {integrity: sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -2757,6 +2764,7 @@ packages: bun@1.3.7: resolution: {integrity: sha512-ha86NG8WiAXYR7eQw/9S+7V7Lo8KfD36XutWJNS1VndzaipWS0QIen5n3K9MT3PpP/sdGmmHjhkrU0sCM2lGGQ==} + cpu: [arm64, x64] os: [darwin, linux, win32] hasBin: true @@ -2793,6 +2801,9 @@ packages: caniuse-lite@1.0.30001761: resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==} + caniuse-lite@1.0.30001769: + resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==} + chai@6.2.1: resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} engines: {node: '>=18'} @@ -3346,6 +3357,7 @@ packages: glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true globals@14.0.0: @@ -6641,10 +6653,10 @@ snapshots: ast-types-flow@0.0.8: {} - autoprefixer@10.4.23(postcss@8.5.6): + autoprefixer@10.4.24(postcss@8.5.6): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001761 + caniuse-lite: 1.0.30001769 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.6 @@ -6684,7 +6696,7 @@ snapshots: browserslist@4.28.0: dependencies: baseline-browser-mapping: 2.8.29 - caniuse-lite: 1.0.30001761 + caniuse-lite: 1.0.30001769 electron-to-chromium: 1.5.255 node-releases: 2.0.27 update-browserslist-db: 1.1.4(browserslist@4.28.0) @@ -6747,6 +6759,8 @@ snapshots: caniuse-lite@1.0.30001761: {} + caniuse-lite@1.0.30001769: {} + chai@6.2.1: {} chalk@4.1.2: @@ -7119,7 +7133,7 @@ snapshots: eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.39.2(jiti@2.6.1)) @@ -7173,7 +7187,7 @@ snapshots: is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node @@ -7220,7 +7234,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 From 257dc581ba4a45eb34578eddad69905166bf8388 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Mon, 9 Feb 2026 12:20:45 -0500 Subject: [PATCH 075/100] =?UTF-8?q?Update=20@vitejs/plugin-react=205.1.2?= =?UTF-8?q?=20=E2=86=92=205.1.3=20(patch)=20(#19651)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ @​vitejs/plugin-react (5.1.2 → 5.1.3) · [Repo](https://github.com/vitejs/vite-plugin-react) · [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md) --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- playgrounds/vite/package.json | 2 +- pnpm-lock.yaml | 203 +++++++++++++++++++++++++++++----- 2 files changed, 175 insertions(+), 30 deletions(-) diff --git a/playgrounds/vite/package.json b/playgrounds/vite/package.json index d339dc39fe8b..1219e79b9f64 100644 --- a/playgrounds/vite/package.json +++ b/playgrounds/vite/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@tailwindcss/vite": "workspace:^", - "@vitejs/plugin-react": "^5.1.2", + "@vitejs/plugin-react": "^5.1.3", "react": "^19.2.4", "react-dom": "^19.2.4", "tailwindcss": "workspace:^" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b8282efaa29..a65a5ce8502b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -506,7 +506,7 @@ importers: version: 3.3.3 next: specifier: ^16.1.6 - version: 16.1.6(@playwright/test@1.58.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.1.6(@babel/core@7.28.5)(@playwright/test@1.58.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: specifier: ^19.2.4 version: 19.2.4 @@ -531,7 +531,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.6 - version: 16.1.6(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 16.1.6(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -540,7 +540,7 @@ importers: dependencies: next: specifier: ^16.1.6 - version: 16.1.6(@playwright/test@1.58.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + version: 16.1.6(@babel/core@7.28.5)(@playwright/test@1.58.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) react: specifier: ^19.2.4 version: 19.2.4 @@ -568,7 +568,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.6 - version: 16.1.6(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 16.1.6(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -579,8 +579,8 @@ importers: specifier: workspace:^ version: link:../../packages/@tailwindcss-vite '@vitejs/plugin-react': - specifier: ^5.1.2 - version: 5.1.2(vite@7.3.1(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) + specifier: ^5.1.3 + version: 5.1.3(vite@7.3.1(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) react: specifier: ^19.2.4 version: 19.2.4 @@ -614,22 +614,42 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.27.5': resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.28.5': resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} engines: {node: '>=6.9.0'} + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.28.5': resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.27.2': resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} engines: {node: '>=6.9.0'} @@ -638,12 +658,22 @@ packages: resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.28.3': resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-plugin-utils@7.27.1': resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} @@ -664,11 +694,20 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.28.6': + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.28.5': resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-transform-react-jsx-self@7.27.1': resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} @@ -685,14 +724,26 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.28.5': resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + '@babel/types@7.28.5': resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + '@emnapi/core@1.7.1': resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} @@ -2252,8 +2303,8 @@ packages: engines: {node: '>=18'} hasBin: true - '@rolldown/pluginutils@1.0.0-beta.53': - resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} + '@rolldown/pluginutils@1.0.0-rc.2': + resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} '@rollup/rollup-android-arm-eabi@4.44.0': resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==} @@ -2501,8 +2552,8 @@ packages: resolution: {integrity: sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitejs/plugin-react@5.1.2': - resolution: {integrity: sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==} + '@vitejs/plugin-react@5.1.3': + resolution: {integrity: sha512-NVUnA6gQCl8jfoYqKqQU5Clv0aPw14KkZYCsX6T9Lfu9slI0LOU10OTwFHS/WmptsMMpshNd/1tuWsHQ2Uk+cg==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -4933,8 +4984,16 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.27.5': {} + '@babel/compat-data@7.29.0': {} + '@babel/core@7.28.5': dependencies: '@babel/code-frame': 7.27.1 @@ -4955,6 +5014,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.28.5': dependencies: '@babel/parser': 7.28.5 @@ -4963,6 +5042,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.29 jsesc: 3.1.0 + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + jsesc: 3.1.0 + '@babel/helper-compilation-targets@7.27.2': dependencies: '@babel/compat-data': 7.27.5 @@ -4971,6 +5058,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-globals@7.28.0': {} '@babel/helper-module-imports@7.27.1': @@ -4980,6 +5075,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -4989,6 +5091,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-plugin-utils@7.27.1': {} '@babel/helper-string-parser@7.27.1': {} @@ -5002,18 +5113,27 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.28.5 + '@babel/helpers@7.28.6': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + '@babel/parser@7.28.5': dependencies: '@babel/types': 7.28.5 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': + '@babel/parser@7.29.0': dependencies: - '@babel/core': 7.28.5 + '@babel/types': 7.29.0 + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/template@7.27.2': @@ -5022,6 +5142,12 @@ snapshots: '@babel/parser': 7.28.5 '@babel/types': 7.28.5 + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@babel/traverse@7.28.5': dependencies: '@babel/code-frame': 7.27.1 @@ -5034,11 +5160,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + '@babel/types@7.28.5': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@emnapi/core@1.7.1': dependencies: '@emnapi/wasi-threads': 1.1.0 @@ -6142,7 +6285,7 @@ snapshots: dependencies: playwright: 1.58.0 - '@rolldown/pluginutils@1.0.0-beta.53': {} + '@rolldown/pluginutils@1.0.0-rc.2': {} '@rollup/rollup-android-arm-eabi@4.44.0': optional: true @@ -6234,24 +6377,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.0 '@types/braces@3.0.5': {} @@ -6393,12 +6536,12 @@ snapshots: '@typescript-eslint/types': 8.47.0 eslint-visitor-keys: 4.2.1 - '@vitejs/plugin-react@5.1.2(vite@7.3.1(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': + '@vitejs/plugin-react@5.1.3(vite@7.3.1(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) - '@rolldown/pluginutils': 1.0.0-beta.53 + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-rc.2 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 vite: 7.3.1(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) @@ -8058,7 +8201,7 @@ snapshots: neo-async@2.6.2: {} - next@16.1.6(@playwright/test@1.58.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): + next@16.1.6(@babel/core@7.28.5)(@playwright/test@1.58.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@next/env': 16.1.6 '@swc/helpers': 0.5.15 @@ -8067,7 +8210,7 @@ snapshots: postcss: 8.4.31 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - styled-jsx: 5.1.6(react@19.2.4) + styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.4) optionalDependencies: '@next/swc-darwin-arm64': 16.1.6 '@next/swc-darwin-x64': 16.1.6 @@ -8663,10 +8806,12 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(react@19.2.4): + styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.4): dependencies: client-only: 0.0.1 react: 19.2.4 + optionalDependencies: + '@babel/core': 7.28.5 sucrase@3.35.0: dependencies: From 99a7c602f2629f2b02645acd5980df1ee7e172b6 Mon Sep 17 00:00:00 2001 From: Pavan Shinde Date: Tue, 17 Feb 2026 17:36:49 +0530 Subject: [PATCH 076/100] docs: fix GitHub links to tailwindlabs org (#19686) ## Summary Fix outdated GitHub links that still point to `github.com/tailwindcss/tailwindcss` (old org). This updates references across the README, contributing guide, and PR template to the canonical `tailwindlabs/tailwindcss` URLs to avoid redirects/404s and keep repo metadata consistent ## Test Plan This change is docs-only. --- .github/CONTRIBUTING.md | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 2 +- README.md | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 42645aa492d5..4dfe6eba98fe 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -50,7 +50,7 @@ If you open a pull request for a new feature, we're likely to close it not becau ## Coding standards -Our code formatting rules are defined in the `"prettier"` section of [package.json](https://github.com/tailwindcss/tailwindcss/blob/main/package.json). You can check your code against these standards by running: +Our code formatting rules are defined in the `"prettier"` section of [package.json](https://github.com/tailwindlabs/tailwindcss/blob/main/package.json). You can check your code against these standards by running: ```sh pnpm run lint diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ee9d3f9abcc0..aa0793aa39f8 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -8,7 +8,7 @@ It's never a fun experience to have your pull request declined after investing a For more info, check out the contributing guide: -https://github.com/tailwindcss/tailwindcss/blob/main/.github/CONTRIBUTING.md +https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md --> diff --git a/README.md b/README.md index 3dc5032fda5e..5f532607d00a 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@

Build Status Total Downloads - Latest Release + Latest Release License

@@ -29,8 +29,8 @@ For full documentation, visit [tailwindcss.com](https://tailwindcss.com). For help, discussion about best practices, or feature ideas: -[Discuss Tailwind CSS on GitHub](https://github.com/tailwindcss/tailwindcss/discussions) +[Discuss Tailwind CSS on GitHub](https://github.com/tailwindlabs/tailwindcss/discussions) ## Contributing -If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindcss/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. +If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. From d74f8b83926bb78c05e6bb51cf6d5f149ec4c65f Mon Sep 17 00:00:00 2001 From: Benjamin Bock Date: Tue, 17 Feb 2026 18:09:59 +0100 Subject: [PATCH 077/100] Add '.jj' to ignored content directories (#19687) Ignore .jj directory, just like .git, .hg, .svn. https://www.jj-vcs.dev/latest/ --------- Co-authored-by: Robin Malfait --- CHANGELOG.md | 1 + .../scanner/fixtures/ignored-content-dirs.txt | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74f72f10eeb3..55cec3e08f5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add `inline-*`, `min-inline-*`, `max-inline-*`, `block-*`, `min-block-*`, `max-block-*` utilities for `inline-size`, `min-inline-size`, `max-inline-size`, `block-size`, `min-block-size`, and `max-block-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) - Add `inset-s-*`, `inset-e-*`, `inset-bs-*`, `inset-be-*` utilities for `inset-inline-start`, `inset-inline-end`, `inset-block-start`, and `inset-block-end` ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) - Add `font-features-*` utility for `font-feature-settings` ([#19623](https://github.com/tailwindlabs/tailwindcss/pull/19615)) +- Add '.jj' to ignored content directories ([#19687](https://github.com/tailwindlabs/tailwindcss/pull/19687)) ### Fixed diff --git a/crates/oxide/src/scanner/fixtures/ignored-content-dirs.txt b/crates/oxide/src/scanner/fixtures/ignored-content-dirs.txt index 0921d2ff8c8e..79f01ecc117a 100644 --- a/crates/oxide/src/scanner/fixtures/ignored-content-dirs.txt +++ b/crates/oxide/src/scanner/fixtures/ignored-content-dirs.txt @@ -1,14 +1,15 @@ .git .hg -.svn -node_modules -.yarn -.venv -venv +.jj .next -.turbo .parcel-cache -__pycache__ -.svelte-kit .pnpm-store +.svelte-kit +.svn +.turbo +.venv .vercel +.yarn +__pycache__ +node_modules +venv From 6eb3b324340f451a14389b7ed97f43a264ad4487 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 17 Feb 2026 13:32:31 -0500 Subject: [PATCH 078/100] Allow multiples of `.25` in `aspect-*` fractions (#19688) This PR reduces the restrictions of the `aspect-*` utilities when dealing with fractional values. Up until now, the numbers had to be positive integers, so `aspect-1/2` was valid, but `aspect-8.5/11` was not. This PR allows for any multiple of `.25` as a valid value, so `aspect-8.5/11` is now valid, but `aspect-8.3/11` is not, this will still require `aspect-[8.3/11]` arbitrary value syntax to be valid. This behavior of allowing multiples of `.25` is consistent with other utilities that handle bare values such as `w-2.5`. ## Test plan 1. Existing tests pass 2. Added a test for `aspect-8.5/11` Fixes: #19663 Closes: #19680, #19669 --- CHANGELOG.md | 1 + packages/tailwindcss/src/utilities.test.ts | 7 ++++++- packages/tailwindcss/src/utilities.ts | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55cec3e08f5e..2eb00b020469 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix class extraction for Rails' strict locals ([#19525](https://github.com/tailwindlabs/tailwindcss/pull/19525)) - Align `@utility` name validation with Oxide scanner rules ([#19524](https://github.com/tailwindlabs/tailwindcss/pull/19524)) - Fix infinite loop when using `@variant` inside `@custom-variant` ([#19633](https://github.com/tailwindlabs/tailwindcss/pull/19633)) +- Allow multiples of `.25` in `aspect-*` fractions ([#19688](https://github.com/tailwindlabs/tailwindcss/pull/19688)) ### Deprecated diff --git a/packages/tailwindcss/src/utilities.test.ts b/packages/tailwindcss/src/utilities.test.ts index 29e8dae3a524..7bd03b577f66 100644 --- a/packages/tailwindcss/src/utilities.test.ts +++ b/packages/tailwindcss/src/utilities.test.ts @@ -3156,7 +3156,7 @@ test('aspect-ratio', async () => { } @tailwind utilities; `, - ['aspect-video', 'aspect-[10/9]', 'aspect-4/3'], + ['aspect-video', 'aspect-[10/9]', 'aspect-4/3', 'aspect-8.5/11'], ), ).toMatchInlineSnapshot(` ":root, :host { @@ -3167,6 +3167,10 @@ test('aspect-ratio', async () => { aspect-ratio: 4 / 3; } + .aspect-8\\.5\\/11 { + aspect-ratio: 8.5 / 11; + } + .aspect-\\[10\\/9\\] { aspect-ratio: 10 / 9; } @@ -3188,6 +3192,7 @@ test('aspect-ratio', async () => { 'aspect--4/3', 'aspect--4/-3', 'aspect-4/-3', + 'aspect-1.23/4.56', ]), ).toEqual('') }) diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index fd524f495575..015821e4e833 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -981,7 +981,7 @@ export function createUtilities(theme: Theme) { handleBareValue: ({ fraction }) => { if (fraction === null) return null let [lhs, rhs] = segment(fraction, '/') - if (!isPositiveInteger(lhs) || !isPositiveInteger(rhs)) return null + if (!isValidSpacingMultiplier(lhs) || !isValidSpacingMultiplier(rhs)) return null return fraction }, handle: (value) => [decl('aspect-ratio', value)], From f212b0fc22c3e6f93a5068654e67bd2818109b95 Mon Sep 17 00:00:00 2001 From: "Arsher. {Zach}" Date: Tue, 17 Feb 2026 19:04:17 +0000 Subject: [PATCH 079/100] fix: restore full page reload for watched external files on Vite 7.1+ (#19670) # PR: Fix @source file changes not triggering full page reload on Vite 7.1+ ## Description This PR addresses issue #19637 where template files (PHP, HTML, Blade, etc.) watched via the `@source` directive fail to trigger a full page reload when using Vite 7.1 or newer. ## Root Cause Vite 7.1 introduced the Environment API, which supersedes the legacy WebSocket API for HMR. Specifically: - `server.ws.send` is deprecated/ignored for certain external file updates in favor of `server.hot.send`. - The `@tailwindcss/vite` plugin currently collects `ViteDevServer` instances but lacks a `handleHotUpdate` hook to explicitly trigger reloads for non-module files added via `addWatchFile`. ## Changes - Implemented a `handleHotUpdate` hook in the `@tailwindcss/vite` plugin. - The hook identifies changes to files that are not part of the standard Vite module graph (e.g., `.php`, `.html`) but are watched by Tailwind. - Triggers a `full-reload` using the new `server.hot.send` API if available (Vite 7.1+), with a fallback to `server.ws.send` for backward compatibility. ## Verification - Reproduced the issue in a standalone Vite 7.1.0 project using a mock plugin with the legacy API. - Confirmed that the browser fails to reload upon editing a watched `.php` file. - Verified that migrating to `server.hot.send` restores the expected reload behavior. [ci-all] --------- Co-authored-by: Robin Malfait --- CHANGELOG.md | 1 + integrations/vite/index.test.ts | 112 +++++++++++++++++++++++ packages/@tailwindcss-vite/src/index.ts | 114 ++++++++++++++++++++++++ 3 files changed, 227 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2eb00b020469..a549a1232d65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Align `@utility` name validation with Oxide scanner rules ([#19524](https://github.com/tailwindlabs/tailwindcss/pull/19524)) - Fix infinite loop when using `@variant` inside `@custom-variant` ([#19633](https://github.com/tailwindlabs/tailwindcss/pull/19633)) - Allow multiples of `.25` in `aspect-*` fractions ([#19688](https://github.com/tailwindlabs/tailwindcss/pull/19688)) +- Ensure changes to external files listed via `@source` trigger a full page reload when using `@tailwindcss/vite` ([#19670](https://github.com/tailwindlabs/tailwindcss/pull/19670)) ### Deprecated diff --git a/integrations/vite/index.test.ts b/integrations/vite/index.test.ts index b8b2ad6e39df..81236579d378 100644 --- a/integrations/vite/index.test.ts +++ b/integrations/vite/index.test.ts @@ -7,6 +7,7 @@ import { html, js, json, + jsx, retryAssertion, test, ts, @@ -472,6 +473,117 @@ describe.each(['postcss', 'lightningcss'])('%s', (transformer) => { }, ) + describe.sequential.each([['^6'], ['7.0.8'], ['7.1.12'], ['7.3.1']])( + 'Using Vite %s', + (version) => { + test( + 'external source file changes trigger a full reload', + { + fs: { + 'package.json': json`{}`, + 'pnpm-workspace.yaml': yaml` + # + packages: + - project-a + `, + 'project-a/package.json': json` + { + "type": "module", + "dependencies": { + "@tailwindcss/vite": "workspace:^", + "tailwindcss": "workspace:^" + }, + "devDependencies": { + ${transformer === 'lightningcss' ? `"lightningcss": "^1",` : ''} + "vite": "${version}" + } + } + `, + 'project-a/vite.config.ts': ts` + import fs from 'node:fs' + import path from 'node:path' + import tailwindcss from '@tailwindcss/vite' + import { defineConfig } from 'vite' + + export default defineConfig({ + css: ${transformer === 'postcss' ? '{}' : "{ transformer: 'lightningcss' }"}, + build: { cssMinify: false }, + plugins: [tailwindcss()], + logLevel: 'info', + }) + `, + 'project-a/index.html': html` + + + + + +
+ + + + `, + 'project-a/src/main.ts': jsx`import { classes } from './app'`, + 'project-a/src/app.ts': jsx`export let classes = "content-['project-a/src/app.ts']"`, + 'project-a/src/index.css': css` + @import 'tailwindcss'; + @source '../../project-b/**/*.php'; + `, + 'project-b/src/index.php': html` +
+ `, + }, + }, + async ({ root, spawn, fs, expect }) => { + let process = await spawn('pnpm vite dev --debug hmr', { + cwd: path.join(root, 'project-a'), + }) + await process.onStdout((m) => m.includes('ready in')) + + let url = '' + await process.onStdout((m) => { + let match = /Local:\s*(http.*)\//.exec(m) + if (match) url = match[1] + return Boolean(url) + }) + + await retryAssertion(async () => { + let styles = await fetchStyles(url, '/index.html') + expect(styles).toContain(candidate`content-['project-b/src/index.php']`) + }) + + // Flush all messages so that we can be sure the next messages are from + // the file changes we're about to make + process.flush() + + // Changing an external .php file should trigger a full reload + { + await fs.write( + 'project-b/src/index.php', + txt`
`, + ) + + // Ensure the page reloaded + if (version === '^6' || version === '7.0.8') { + await process.onStdout((m) => m.includes('page reload') && m.includes('index.php')) + } else { + await process.onStderr( + (m) => m.includes('vite:hmr (client)') && m.includes('index.php'), + ) + } + await process.onStderr((m) => m.includes('vite:hmr (ssr)') && m.includes('index.php')) + + // Ensure the styles were regenerated with the new content + let styles = await fetchStyles(url, '/index.html') + expect(styles).toContain(candidate`content-['updated:project-b/src/index.php']`) + } + }, + ) + }, + ) + test( `source(none) disables looking at the module graph`, { diff --git a/packages/@tailwindcss-vite/src/index.ts b/packages/@tailwindcss-vite/src/index.ts index 4ad70ba43a34..d7d46c77222a 100644 --- a/packages/@tailwindcss-vite/src/index.ts +++ b/packages/@tailwindcss-vite/src/index.ts @@ -9,6 +9,7 @@ import { } from '@tailwindcss/node' import { clearRequireCache } from '@tailwindcss/node/require-cache' import { Scanner } from '@tailwindcss/oxide' +import { realpathSync } from 'node:fs' import fs from 'node:fs/promises' import path from 'node:path' import type { Environment, Plugin, ResolvedConfig, ViteDevServer } from 'vite' @@ -151,6 +152,64 @@ export default function tailwindcss(opts: PluginOptions = {}): Plugin[] { return result }, }, + + hotUpdate({ file, modules, timestamp, server }) { + // Ensure full-reloads are triggered for files that are being watched by + // Tailwind but aren't part of the module graph (like PHP or HTML + // files). If we don't do this, then changes to those files won't + // trigger a reload at all since Vite doesn't know about them. + { + // It's a little bit confusing, because due to the `addWatchFile` + // calls, it _is_ part of the module graph but nothing is really + // handling those files. These modules typically have an id of + // undefined and/or have a type of 'asset'. + // + // If we call `addWatchFile` on a file that is part of the actual + // module graph, then we will see a module for it with a type of `js` + // and a type of `asset`. We are only interested if _all_ of them are + // missing an id and/or have a type of 'asset', which is a strong + // signal that the changed file is not being handled by Vite or any of + // the plugins. + // + // Note: in Vite v7.0.6 the modules here will have a type of `js`, not + // 'asset'. But it will also have a `HARD_INVALIDATED` state and will + // do a full page reload already. + let isExternalFile = modules.every((mod) => mod.type === 'asset' || mod.id === undefined) + if (!isExternalFile) return + + for (let env of new Set([this.environment.name, 'client'])) { + let roots = rootsByEnv.get(env) + if (roots.size === 0) continue + + // If the file is not being watched by any of the roots, then we can + // skip the reload since it's not relevant to Tailwind CSS. + if (!isScannedFile(file, modules, roots)) { + continue + } + + // https://vite.dev/changes/hotupdate-hook#migration-guide + let invalidatedModules = new Set() + for (let mod of modules) { + this.environment.moduleGraph.invalidateModule( + mod, + invalidatedModules, + timestamp, + true, + ) + } + + if (env === this.environment.name) { + this.environment.hot.send({ type: 'full-reload' }) + } else if (server.hot.send) { + server.hot.send({ type: 'full-reload' }) + } else if (server.ws.send) { + server.ws.send({ type: 'full-reload' }) + } + + return [] + } + } + }, }, { @@ -271,6 +330,10 @@ class Root { private customJsResolver: (id: string, base: string) => Promise, ) {} + get scannedFiles() { + return this.scanner?.files ?? [] + } + // Generate the CSS for the root file. This can return false if the file is // not considered a Tailwind root. When this happened, the root can be GCed. public async generate( @@ -452,3 +515,54 @@ class Root { return false } } + +function isScannedFile( + file: string, + modules: vite.EnvironmentModuleNode[], + roots: Map, +) { + let seen = new Set() + let q = [...modules] + let checks = { + file, + get realpath() { + try { + let realpath = realpathSync(file) + Object.defineProperty(checks, 'realpath', { value: realpath }) + return realpath + } catch { + return null + } + }, + } + + while (q.length > 0) { + let module = q.shift()! + if (seen.has(module)) continue + seen.add(module) + + if (module.id) { + let root = roots.get(module.id) + + if (root) { + // If the file is part of the scanned files for this root, then we know + // for sure that it's being watched by any of the Tailwind CSS roots. It + // doesn't matter which root it is since it's only used to know whether + // we should trigger a full reload or not. + if ( + root.scannedFiles.includes(checks.file) || + (checks.realpath && root.scannedFiles.includes(checks.realpath)) + ) { + return true + } + } + } + + // Keep walking up the tree until we find a root. + for (let importer of module.importers) { + q.push(importer) + } + } + + return false +} From 095ff96ba35de0824313fd150b6e70695d300dd1 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 17 Feb 2026 14:15:20 -0500 Subject: [PATCH 080/100] Improve performance in bigger projects (#19632) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR improves the performance of Oxide when scanning large codebases. The `Oxide` API, looks something like this: ```ts let scanner = new Scanner({ sources }) let candidates = scanner.scan() // Found candidates let files = scanner.files // Scanned files let globs = scanner.globs // Scanned globs ``` The `files` and `globs` are used to tell PostCSS, Vite, webpack etc which files to watch for changes. The `.scan()` operation extracts the candidates from the source files. You can think of these as potential Tailwind CSS classes. In all these scenarios we have to walk the file system and find files that match the `sources`. ### 1. Prevent multiple file system walks The first big win came from the fact that accessing `.files` after a `.scan()` also does an entire walk of the file system (for the given `sources`), which is unnecessary because we just walked the file system. This is something that's not really an issue in smaller codebases because we have `mtime` tracking. We don't re-scan a file if its `mtime` hasn't changed since the last scan. However, in large codebases with thousands of files, even walking the file system to check `mtime`s can be expensive. ### 2. Use parallel file system walking Another big win is to use a parallel file system walker instead of a synchronous one. The big problem here is that the parallel build has 20ms-50ms of overhead which is noticeable on small codebases. We don't really know if you have a small or big codebase ahead of time, so maybe some kind of hint in the future would be useful. So the solution I settled on right now is to use a synchronous walker for the initial scan, and then switch to a parallel walker for subsequent scans (think dev mode). This gives us the best of both worlds: fast initial scan on small codebases, and fast re-scans on large codebases. Caveat: if you use the `@tailwindcss/cli` we know exactly which files changed so we can just re-scan those files directly without walking the file system at all. But in `@tailwindcss/postcss` we don't know which files changed, so we have to walk the file system to check `mtime`s. While this improvement is nice, it resulted in an annoying issue related to `mtime` tracking. Since the parallel walker processes files in parallel, the `mtime` was typed as `Arc>>` so to avoid locking, I decided to only walk the files here and collect their paths. Then later we check the `mtime` to know whether to re-scan them or not. Initially I just removed the `mtime` tracking altogether. But it did have an impact when actually extracting candidates from those files, so I added it back later. ### 3. Delaying work I was still a bit annoyed by the fact that we had to track `mtime` values for every file. This seems like annoying overhead, especially when doing a single build (no dev mode). So the trick I applied here is to only start tracking `mtime` values after the initial scan. This means that, in dev mode, we would do this: 1. Walk entire file system to track files. 2. On a subsequent scan, walk entire file system (again) and start tracking `mtime` values. This time, we use the parallel walker instead of the synchronous one. 3. On further scans, only re-scan files whose `mtime` has changed The trade-off here is that on the second scan we always re-scan all files, even if they haven't changed. Since this typically only happens in dev mode, I think this is an acceptable trade-off especially if the initial build is therefor faster this way. ### 3. Small wins There are also a few small wins in here that I would like to mention but that are less significant: 1. Pre-computed normalized `source` patterns instead of in every walker filter call. 2. Tried to avoid some allocations in various places. For example the `pre_process_input` always called `content.to_vec()` which allocates. Instead we now accept an owned `Vec` so we don't have to call `.to_vec()` in the default case (in my testing, this is ~92% of the time in the codebases I checked). 3. Made the `Cursor` struct smaller, which is used a lot during candidate extraction. ### Benchmarks Now for the fun stuff, the benchmarks!
The code for the benchmarks ```ts import path from 'node:path' import { bench, boxplot, do_not_optimize, run, summary } from 'mitata' import { Scanner as ScannerPr } from '/path/to/repo/with/pr/branch/tailwindcss/crates/node' import { Scanner as ScannerMain } from '/path/to/repo/with/main/branch/tailwindcss/crates/node' let base = '/path/to/some/codebase' let sources = [{ base, pattern: '**/*', negated: false }] // Verify the results are the same before benchmarking let scannerPr = new ScannerPr({ sources }) let scannerMain = new ScannerMain({ sources }) { let aCandidates = scannerPr.scan() let bCandidates = scannerMain.scan() if (aCandidates.length !== bCandidates.length) { throw new Error(`Mismatch in candidate count: ${aCandidates.length} vs ${bCandidates.length}`) } for (let i = 0; i < aCandidates.length; i++) { if (aCandidates[i] !== bCandidates[i]) { throw new Error(`Mismatch in candidate at index ${i}: ${aCandidates[i]} vs ${bCandidates[i]}`) } } let aFiles = scannerPr.files let bFiles = scannerMain.files if (aFiles.length !== bFiles.length) { throw new Error(`Mismatch in file count: ${aFiles.length} vs ${bFiles.length}`) } for (let i = 0; i < aFiles.length; i++) { if (aFiles[i] !== bFiles[i]) { throw new Error(`Mismatch in file at index ${i}: ${aFiles[i]} vs ${bFiles[i]}`) } } console.log('Scanned', aFiles.length, 'files') console.log('Extracted', aCandidates.length, 'candidates') console.log('Base =', base) console.log() } summary(() => { boxplot(() => { bench('PR (build, .scan()))', function* () { yield { [0]() { return new ScannerPr({ sources }) }, bench(scanner: ScannerPr) { do_not_optimize(scanner.scan()) }, } }) bench('main (build, .scan()))', function* () { yield { [0]() { return new ScannerMain({ sources }) }, bench(scanner: ScannerMain) { do_not_optimize(scanner.scan()) }, } }) }) }) summary(() => { boxplot(() => { bench('PR (build, .scan() + .files)', function* () { yield { [0]() { return new ScannerPr({ sources }) }, bench(scanner: ScannerPr) { do_not_optimize(scanner.scan()) do_not_optimize(scanner.files) }, } }) bench('main (build, .scan() + .files)', function* () { yield { [0]() { return new ScannerMain({ sources }) }, bench(scanner: ScannerMain) { do_not_optimize(scanner.scan()) do_not_optimize(scanner.files) }, } }) }) }) summary(() => { boxplot(() => { bench('PR (watch, .scan()))', function* () { yield { bench() { do_not_optimize(scannerPr.scan()) }, } }) bench('main (watch, .scan()))', function* () { yield { bench() { do_not_optimize(scannerMain.scan()) }, } }) }) }) summary(() => { boxplot(() => { bench('PR (watch, .scan() + .files)', function* () { yield { bench() { do_not_optimize(scannerPr.scan()) do_not_optimize(scannerPr.files) }, } }) bench('main (watch, .scan() + .files)', function* () { yield { bench() { do_not_optimize(scannerMain.scan()) do_not_optimize(scannerMain.files) }, } }) }) }) await run() ```
#### tailwindcss.com codebase ``` Scanned 462 files Extracted 13200 candidates Base = /Users/robin/github.com/tailwindlabs/tailwindcss.com clk: ~3.09 GHz cpu: Apple M1 Max runtime: bun 1.3.3 (arm64-darwin) ``` In these benchmarks the `PR` one is consistently faster than `main`. It's not by a lot but that's mainly because the codebase itself isn't that big. It is a codebase with _a lot_ of candidates though, but not that many files. The candidate extraction was already pretty fast, so the wins here mainly come from avoiding re-walking the file system when accessing `.files`, and from delaying `mtime` tracking until after the initial scan. **Single initial build**: It's not a lot, but it's a bit faster. This is due to avoiding tracking the `mtime` values initially and making some small optimizations related to the struct size and allocations. ``` benchmark avg (min … max) p75 / p99 (min … top 1%) --------------------------------------------- ------------------------------- PR (build, .scan())) 22.87 ms/iter 23.28 ms █ (21.49 ms … 25.68 ms) 23.98 ms ▂ ▂ ▂ █ ▂▂ (832.00 kb … 2.69 mb) 1.41 mb ▆▆▆▆█▆▆█▁▆▆█▁▁█▁▆██▁▆ main (build, .scan())) 25.67 ms/iter 26.12 ms █ █ █ (24.54 ms … 27.74 ms) 27.06 ms █ █ █ ███ (432.00 kb … 2.78 mb) 996.00 kb ██▁████▁█▁████▁█▁▁█▁█ ┌ ┐ ╷ ┌─────┬──┐ ╷ PR (build, .scan())) ├────┤ │ ├─────┤ ╵ └─────┴──┘ ╵ ╷ ┌─────┬──┐ ╷ main (build, .scan())) ├──┤ │ ├───────┤ ╵ └─────┴──┘ ╵ └ ┘ 21.49 ms 24.28 ms 27.06 ms summary PR (build, .scan())) 1.12x faster than main (build, .scan())) ``` **Single initial build + accessing `.files`**: We don't have to re-walk the entire file system even if we're just dealing with ~462 scanned files. ``` benchmark avg (min … max) p75 / p99 (min … top 1%) --------------------------------------------- ------------------------------- PR (build, .scan() + .files) 22.54 ms/iter 22.99 ms █ ▂ (21.41 ms … 25.86 ms) 24.26 ms █ ▅ ▅▅█▅ ▅▅ (368.00 kb … 2.05 mb) 853.00 kb █▇█▇▇████▇▇██▁▁▇▁▁▇▁▇ main (build, .scan() + .files) 32.15 ms/iter 32.17 ms █ ▂ (30.78 ms … 36.22 ms) 35.75 ms ▅█ ▅█ ▅ (400.00 kb … 2.45 mb) 952.00 kb ██▁██▇▇█▇▁▁▁▁▁▁▁▁▁▁▁▇ ┌ ┐ ╷┌──┬┐ ╷ PR (build, .scan() + .files) ├┤ │├───┤ ╵└──┴┘ ╵ ╷┌───┬ ╷ main (build, .scan() + .files) ├┤ │──────────┤ ╵└───┴ ╵ └ ┘ 21.41 ms 28.58 ms 35.75 ms summary PR (build, .scan() + .files) 1.43x faster than main (build, .scan() + .files) ``` **Watch/dev mode, only scanning**: This now switches to the parallel walker, but since it's not a super big codebase we don't see a huge win here yet. ``` benchmark avg (min … max) p75 / p99 (min … top 1%) --------------------------------------------- ------------------------------- PR (watch, .scan())) 6.85 ms/iter 7.22 ms █▄ (6.34 ms … 7.94 ms) 7.91 ms ▄██▃ ( 64.00 kb … 688.00 kb) 452.82 kb ▃████▆▂▂▁▂▁▂▁▁▁▅█▆▃▅▃ main (watch, .scan())) 7.92 ms/iter 8.08 ms █ █ ▃ █▃▃ (7.41 ms … 8.71 ms) 8.68 ms █▆█▆▃█████ ( 0.00 b … 64.00 kb) 19.20 kb ▆▄██████████▆▁▆▆█▄▄▄▆ ┌ ┐ ╷ ┌──────┬──────┐ ╷ PR (watch, .scan())) ├──┤ │ ├────────────┤ ╵ └──────┴──────┘ ╵ ╷ ┌───┬──┐ ╷ main (watch, .scan())) ├────┤ │ ├───────────┤ ╵ └───┴──┘ ╵ └ ┘ 6.34 ms 7.51 ms 8.68 ms summary PR (watch, .scan())) 1.16x faster than main (watch, .scan())) ``` **Watch/dev mode, scanning + accessing `.files`**: Again we avoid re-walking the entire file system when accessing `.files`. ``` benchmark avg (min … max) p75 / p99 (min … top 1%) --------------------------------------------- ------------------------------- PR (watch, .scan() + .files) 12.10 ms/iter 12.74 ms █ █ █ █ ▃▃▃ (10.69 ms … 13.89 ms) 13.81 ms █ █▂▂▂ ▇█▂█▂███▇ (128.00 kb … 10.73 mb) 5.23 mb █▆████▁█████████▆▆▆▆▆ main (watch, .scan() + .files) 14.44 ms/iter 14.74 ms █ (13.93 ms … 15.33 ms) 15.18 ms ███▅ █ ▅ ▅ ( 16.00 kb … 80.00 kb) 39.51 kb █▅████▁███▅▁█████▅▁▅▅ ┌ ┐ ╷ ┌──────┬──────┐ ╷ PR (watch, .scan() + .files) ├──────┤ │ ├─────────┤ ╵ └──────┴──────┘ ╵ ╷ ┌───┬──┐ ╷ main (watch, .scan() + .files) ├─┤ │ ├───┤ ╵ └───┴──┘ ╵ └ ┘ 10.69 ms 12.93 ms 15.18 ms summary PR (watch, .scan() + .files) 1.19x faster than main (watch, .scan() + .files) ``` #### Synthetic 5000 files codebase Based on the instructions from #19616 I created a codebase with 5000 files. Each file contains a `flex` class and a unique class like `content-['/path/to/file']` to ensure we have a decent amount of unique candidates. You can test the script yourself by running this: ``` mkdir -p fixtures/app-5000/src/components/{auth,dashboard,settings,profile,notifications,messages,search,navigation,footer,sidebar}/sub{001..500} && for dir in fixtures/app-5000/src/components/*/sub*; do echo "export const Component = () =>
test
" > "$dir/index.tsx"; done && find fixtures/app-5000/src/components -type f | wc -lc ``` ``` Scanned 5000 files Extracted 5005 candidates Base = /Users/robin/github.com/RobinMalfait/playground/scanner-benchmarks/fixtures/app-5000 clk: ~3.08 GHz cpu: Apple M1 Max runtime: bun 1.3.3 (arm64-darwin) ``` **Single initial build**: As expected not a super big win here because it's a single build. But there is a noticeable improvement. ``` benchmark avg (min … max) p75 / p99 (min … top 1%) --------------------------------------------- ------------------------------- PR (build, .scan())) 217.27 ms/iter 211.97 ms █ (205.99 ms … 289.53 ms) 214.33 ms ▅ ▅ ▅▅▅▅█▅▅ ▅ ( 3.34 mb … 4.25 mb) 3.72 mb █▁▁▁▁▁▁█▁███████▁▁▁▁█ main (build, .scan())) 249.26 ms/iter 239.88 ms █ (231.51 ms … 381.66 ms) 241.01 ms ▅ ▅ ▅▅ ▅ █▅ ▅▅▅ ( 4.22 mb … 4.78 mb) 4.49 mb █▁▁▁▁█▁██▁▁█▁▁██▁▁███ ┌ ┐ ╷ ┌─────╷──┬ PR (build, .scan())) ├────┤ ┤ │ ╵ └─────╵──┴ ╷ ┌───────╷ main (build, .scan())) ├───┤ ┤ ╵ └───────╵ └ ┘ 205.99 ms 223.50 ms 241.01 ms summary PR (build, .scan())) 1.15x faster than main (build, .scan())) ``` **Single initial build + accessing `.files`**: Now things are getting interesting. Almost a 2x speedup by avoiding re-walking the file system when accessing `.files`. ``` benchmark avg (min … max) p75 / p99 (min … top 1%) --------------------------------------------- ------------------------------- PR (build, .scan() + .files) 216.35 ms/iter 214.53 ms █ █ █ (211.00 ms … 242.64 ms) 221.45 ms █ █▅█ ▅▅ ▅ ▅ ( 2.97 mb … 4.47 mb) 3.97 mb █▁███▁██▁▁▁▁▁▁█▁▁▁▁▁█ main (build, .scan() + .files) 414.79 ms/iter 406.05 ms ██ (396.72 ms … 542.30 ms) 413.69 ms ▅ ██▅ ▅▅ ▅ ▅ ▅ ( 5.19 mb … 6.03 mb) 5.63 mb █▁▁▁███▁██▁█▁█▁▁▁▁▁▁█ ┌ ┐ ┌┬╷ PR (build, .scan() + .files) ││┤ └┴╵ ╷┌──╷ main (build, .scan() + .files) ├┤ ┤ ╵└──╵ └ ┘ 211.00 ms 312.34 ms 413.69 ms summary PR (build, .scan() + .files) 1.92x faster than main (build, .scan() + .files) ``` **Watch/dev mode, only scanning**: This is where we see bigger wins because now we're using the parallel walker. ``` benchmark avg (min … max) p75 / p99 (min … top 1%) --------------------------------------------- ------------------------------- PR (watch, .scan())) 76.26 ms/iter 77.41 ms █ (73.56 ms … 79.02 ms) 77.81 ms ▅ ▅ ▅ ▅▅ ▅▅▅ ▅ █ ( 2.53 mb … 5.52 mb) 3.06 mb █▁▁▁█▁▁█▁██▁███▁▁▁█▁█ main (watch, .scan())) 166.71 ms/iter 165.14 ms █ █ (161.49 ms … 198.26 ms) 168.99 ms █ ▅█ ▅▅▅ ▅ ▅ ▅ ( 1.08 mb … 2.72 mb) 1.24 mb █▁██▁███▁▁█▁▁█▁▁▁▁▁▁█ ┌ ┐ ╷┬┐ PR (watch, .scan())) ├││ ╵┴┘ ╷┌─┬╷ main (watch, .scan())) ├┤ │┤ ╵└─┴╵ └ ┘ 73.56 ms 121.28 ms 168.99 ms summary PR (watch, .scan())) 2.19x faster than main (watch, .scan())) ``` **Watch/dev mode, scanning + accessing `.files`**: This is the biggest win of them all because we have all the benefits combined: 1. Avoiding re-walking the file system when accessing `.files` 2. Using the parallel walker for faster file system walking ``` benchmark avg (min … max) p75 / p99 (min … top 1%) --------------------------------------------- ------------------------------- PR (watch, .scan() + .files) 84.04 ms/iter 84.84 ms █ (80.96 ms … 87.53 ms) 87.27 ms ▅▅ ▅▅ ▅▅ █▅ ▅ ▅ ( 15.42 mb … 31.34 mb) 22.16 mb ██▁▁▁██▁██▁██▁█▁▁▁▁▁█ main (watch, .scan() + .files) 338.59 ms/iter 353.89 ms █ (321.87 ms … 378.43 ms) 358.70 ms █ █ ( 2.39 mb … 2.45 mb) 2.42 mb ███▁▁██▁▁▁▁▁▁▁▁▁▁██▁█ ┌ ┐ ┬┐ PR (watch, .scan() + .files) ││ ┴┘ ┌──┬─┐╷ main (watch, .scan() + .files) │ │ ├┤ └──┴─┘╵ └ ┘ 80.96 ms 219.83 ms 358.70 ms summary PR (watch, .scan() + .files) 4.03x faster than main (watch, .scan() + .files) ``` ## Test plan 1. All existing tests still pass 2. All public APIs remain the same 3. In the benchmarks I'm sharing, I first verify that the candidates returned and the files returned are the same before and after the change. 4. Benchmarked against real codebases, and against a synthetic large codebase (5000 files). Fixes: #19616 --- CHANGELOG.md | 1 + crates/oxide/src/cursor.rs | 130 ++--- .../extractor/arbitrary_property_machine.rs | 18 +- .../src/extractor/arbitrary_value_machine.rs | 12 +- .../extractor/arbitrary_variable_machine.rs | 22 +- .../oxide/src/extractor/candidate_machine.rs | 6 +- .../src/extractor/css_variable_machine.rs | 8 +- crates/oxide/src/extractor/mod.rs | 8 +- .../oxide/src/extractor/modifier_machine.rs | 8 +- .../src/extractor/named_utility_machine.rs | 30 +- .../src/extractor/named_variant_machine.rs | 20 +- .../src/extractor/pre_processors/clojure.rs | 30 +- .../src/extractor/pre_processors/elixir.rs | 14 +- .../src/extractor/pre_processors/haml.rs | 28 +- .../src/extractor/pre_processors/json.rs | 4 +- .../src/extractor/pre_processors/markdown.rs | 2 +- .../oxide/src/extractor/pre_processors/pug.rs | 12 +- .../src/extractor/pre_processors/ruby.rs | 27 +- .../src/extractor/pre_processors/rust.rs | 10 +- .../src/extractor/pre_processors/slim.rs | 20 +- .../oxide/src/extractor/pre_processors/vue.rs | 3 +- crates/oxide/src/extractor/string_machine.rs | 10 +- crates/oxide/src/extractor/utility_machine.rs | 10 +- crates/oxide/src/extractor/variant_machine.rs | 4 +- crates/oxide/src/fast_skip.rs | 2 +- crates/oxide/src/scanner/detect_sources.rs | 8 +- crates/oxide/src/scanner/init_tracing.rs | 70 +++ crates/oxide/src/scanner/mod.rs | 541 ++++++++++-------- 28 files changed, 579 insertions(+), 479 deletions(-) create mode 100644 crates/oxide/src/scanner/init_tracing.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index a549a1232d65..0657008292ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fix infinite loop when using `@variant` inside `@custom-variant` ([#19633](https://github.com/tailwindlabs/tailwindcss/pull/19633)) - Allow multiples of `.25` in `aspect-*` fractions ([#19688](https://github.com/tailwindlabs/tailwindcss/pull/19688)) - Ensure changes to external files listed via `@source` trigger a full page reload when using `@tailwindcss/vite` ([#19670](https://github.com/tailwindlabs/tailwindcss/pull/19670)) +- Improve performance Oxide scanner in bigger projects ([#19632](https://github.com/tailwindlabs/tailwindcss/pull/19632)) ### Deprecated diff --git a/crates/oxide/src/cursor.rs b/crates/oxide/src/cursor.rs index 818a0ef1b450..71cdccdf6aeb 100644 --- a/crates/oxide/src/cursor.rs +++ b/crates/oxide/src/cursor.rs @@ -1,44 +1,49 @@ use std::{ascii::escape_default, fmt::Display}; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Copy)] pub struct Cursor<'a> { // The input we're scanning pub input: &'a [u8], // The location of the cursor in the input pub pos: usize, - - /// Is the cursor at the start of the input - pub at_start: bool, - - /// Is the cursor at the end of the input - pub at_end: bool, - - /// The previously consumed character - /// If `at_start` is true, this will be NUL - pub prev: u8, - - /// The current character - pub curr: u8, - - /// The upcoming character (if any) - /// If `at_end` is true, this will be NUL - pub next: u8, } impl<'a> Cursor<'a> { + #[inline(always)] pub fn new(input: &'a [u8]) -> Self { - let mut cursor = Self { - input, - pos: 0, - at_start: true, - at_end: false, - prev: 0x00, - curr: 0x00, - next: 0x00, - }; - cursor.move_to(0); - cursor + Self { input, pos: 0 } + } + + /// The current byte at `pos`, or 0x00 if past the end. + #[inline(always)] + pub fn curr(&self) -> u8 { + if self.pos < self.input.len() { + unsafe { *self.input.get_unchecked(self.pos) } + } else { + 0x00 + } + } + + /// The next byte at `pos + 1`, or 0x00 if past the end. + #[inline(always)] + pub fn next(&self) -> u8 { + let next_pos = self.pos + 1; + if next_pos < self.input.len() { + unsafe { *self.input.get_unchecked(next_pos) } + } else { + 0x00 + } + } + + /// The previous byte at `pos - 1`, or 0x00 if at the start. + #[inline(always)] + pub fn prev(&self) -> u8 { + if self.pos > 0 { + unsafe { *self.input.get_unchecked(self.pos - 1) } + } else { + 0x00 + } } pub fn advance_by(&mut self, amount: usize) { @@ -48,38 +53,15 @@ impl<'a> Cursor<'a> { #[inline(always)] pub fn advance(&mut self) { self.pos += 1; - - self.prev = self.curr; - self.curr = self.next; - self.next = *self - .input - .get(self.pos.saturating_add(1)) - .unwrap_or(&0x00u8); } #[inline(always)] pub fn advance_twice(&mut self) { self.pos += 2; - - self.prev = self.next; - self.curr = *self.input.get(self.pos).unwrap_or(&0x00u8); - self.next = *self - .input - .get(self.pos.saturating_add(1)) - .unwrap_or(&0x00u8); } pub fn move_to(&mut self, pos: usize) { - let len = self.input.len(); - let pos = pos.clamp(0, len); - - self.pos = pos; - self.at_start = pos == 0; - self.at_end = pos + 1 >= len; - - self.prev = *self.input.get(pos.wrapping_sub(1)).unwrap_or(&0x00u8); - self.curr = *self.input.get(pos).unwrap_or(&0x00u8); - self.next = *self.input.get(pos.saturating_add(1)).unwrap_or(&0x00u8); + self.pos = pos.min(self.input.len()); } } @@ -90,9 +72,9 @@ impl Display for Cursor<'_> { let pos = format!("{: >len_count$}", self.pos, len_count = len.len()); write!(f, "{}/{} ", pos, len)?; - if self.at_start { + if self.pos == 0 { write!(f, "S ")?; - } else if self.at_end { + } else if self.pos + 1 >= self.input.len() { write!(f, "E ")?; } else { write!(f, "M ")?; @@ -109,9 +91,9 @@ impl Display for Cursor<'_> { write!( f, "[{} {} {}]", - to_str(self.prev), - to_str(self.curr), - to_str(self.next) + to_str(self.prev()), + to_str(self.curr()), + to_str(self.next()) ) } } @@ -125,36 +107,28 @@ mod test { fn test_cursor() { let mut cursor = Cursor::new(b"hello world"); assert_eq!(cursor.pos, 0); - assert!(cursor.at_start); - assert!(!cursor.at_end); - assert_eq!(cursor.prev, 0x00); - assert_eq!(cursor.curr, b'h'); - assert_eq!(cursor.next, b'e'); + assert_eq!(cursor.prev(), 0x00); + assert_eq!(cursor.curr(), b'h'); + assert_eq!(cursor.next(), b'e'); cursor.advance_by(1); assert_eq!(cursor.pos, 1); - assert!(!cursor.at_start); - assert!(!cursor.at_end); - assert_eq!(cursor.prev, b'h'); - assert_eq!(cursor.curr, b'e'); - assert_eq!(cursor.next, b'l'); + assert_eq!(cursor.prev(), b'h'); + assert_eq!(cursor.curr(), b'e'); + assert_eq!(cursor.next(), b'l'); // Advancing too far should stop at the end cursor.advance_by(10); assert_eq!(cursor.pos, 11); - assert!(!cursor.at_start); - assert!(cursor.at_end); - assert_eq!(cursor.prev, b'd'); - assert_eq!(cursor.curr, 0x00); - assert_eq!(cursor.next, 0x00); + assert_eq!(cursor.prev(), b'd'); + assert_eq!(cursor.curr(), 0x00); + assert_eq!(cursor.next(), 0x00); // Can't advance past the end cursor.advance_by(1); assert_eq!(cursor.pos, 11); - assert!(!cursor.at_start); - assert!(cursor.at_end); - assert_eq!(cursor.prev, b'd'); - assert_eq!(cursor.curr, 0x00); - assert_eq!(cursor.next, 0x00); + assert_eq!(cursor.prev(), b'd'); + assert_eq!(cursor.curr(), 0x00); + assert_eq!(cursor.next(), 0x00); } } diff --git a/crates/oxide/src/extractor/arbitrary_property_machine.rs b/crates/oxide/src/extractor/arbitrary_property_machine.rs index 8fd13e39405f..a4325333925c 100644 --- a/crates/oxide/src/extractor/arbitrary_property_machine.rs +++ b/crates/oxide/src/extractor/arbitrary_property_machine.rs @@ -74,7 +74,7 @@ impl Machine for ArbitraryPropertyMachine { #[inline] fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { - match cursor.curr.into() { + match cursor.curr().into() { // Start of an arbitrary property Class::OpenBracket => { self.start_pos = cursor.pos; @@ -97,8 +97,8 @@ impl Machine for ArbitraryPropertyMachine { let len = cursor.input.len(); while cursor.pos < len { - match cursor.curr.into() { - Class::Dash => match cursor.next.into() { + match cursor.curr().into() { + Class::Dash => match cursor.next().into() { // Start of a CSS variable // // E.g.: `[--my-color:red]` @@ -137,7 +137,7 @@ impl ArbitraryPropertyMachine { fn parse_property_variable(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { match self.css_variable_machine.next(cursor) { MachineState::Idle => self.restart(), - MachineState::Done(_) => match cursor.next.into() { + MachineState::Done(_) => match cursor.next().into() { // End of the CSS variable, must be followed by a `:` // // E.g.: `[--my-color:red]` @@ -165,8 +165,8 @@ impl Machine for ArbitraryPropertyMachine { let len = cursor.input.len(); let start_of_value_pos = cursor.pos; while cursor.pos < len { - match cursor.curr.into() { - Class::Escape => match cursor.next.into() { + match cursor.curr().into() { + Class::Escape => match cursor.next().into() { // An escaped whitespace character is not allowed // // E.g.: `[color:var(--my-\ color)]` @@ -181,7 +181,7 @@ impl Machine for ArbitraryPropertyMachine { }, Class::OpenParen | Class::OpenBracket | Class::OpenCurly => { - if !self.bracket_stack.push(cursor.curr) { + if !self.bracket_stack.push(cursor.curr()) { return self.restart(); } cursor.advance(); @@ -190,7 +190,7 @@ impl Machine for ArbitraryPropertyMachine { Class::CloseParen | Class::CloseBracket | Class::CloseCurly if !self.bracket_stack.is_empty() => { - if !self.bracket_stack.pop(cursor.curr) { + if !self.bracket_stack.pop(cursor.curr()) { return self.restart(); } cursor.advance(); @@ -227,7 +227,7 @@ impl Machine for ArbitraryPropertyMachine { Class::Slash if start_of_value_pos == cursor.pos => return self.restart(), // String interpolation-like syntax is not allowed. E.g.: `[${x}]` - Class::Dollar if matches!(cursor.next.into(), Class::OpenCurly) => { + Class::Dollar if matches!(cursor.next().into(), Class::OpenCurly) => { return self.restart() } diff --git a/crates/oxide/src/extractor/arbitrary_value_machine.rs b/crates/oxide/src/extractor/arbitrary_value_machine.rs index f5a612df13f2..cbef62c42681 100644 --- a/crates/oxide/src/extractor/arbitrary_value_machine.rs +++ b/crates/oxide/src/extractor/arbitrary_value_machine.rs @@ -32,7 +32,7 @@ impl Machine for ArbitraryValueMachine { #[inline] fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { // An arbitrary value must start with an open bracket - if Class::OpenBracket != cursor.curr.into() { + if Class::OpenBracket != cursor.curr().into() { return MachineState::Idle; } @@ -42,8 +42,8 @@ impl Machine for ArbitraryValueMachine { let len = cursor.input.len(); while cursor.pos < len { - match cursor.curr.into() { - Class::Escape => match cursor.next.into() { + match cursor.curr().into() { + Class::Escape => match cursor.next().into() { // An escaped whitespace character is not allowed // // E.g.: `[color:var(--my-\ color)]` @@ -61,7 +61,7 @@ impl Machine for ArbitraryValueMachine { }, Class::OpenParen | Class::OpenBracket | Class::OpenCurly => { - if !self.bracket_stack.push(cursor.curr) { + if !self.bracket_stack.push(cursor.curr()) { return self.restart(); } cursor.advance(); @@ -70,7 +70,7 @@ impl Machine for ArbitraryValueMachine { Class::CloseParen | Class::CloseBracket | Class::CloseCurly if !self.bracket_stack.is_empty() => { - if !self.bracket_stack.pop(cursor.curr) { + if !self.bracket_stack.pop(cursor.curr()) { return self.restart(); } cursor.advance(); @@ -96,7 +96,7 @@ impl Machine for ArbitraryValueMachine { Class::Whitespace => return self.restart(), // String interpolation-like syntax is not allowed. E.g.: `[${x}]` - Class::Dollar if matches!(cursor.next.into(), Class::OpenCurly) => { + Class::Dollar if matches!(cursor.next().into(), Class::OpenCurly) => { return self.restart() } diff --git a/crates/oxide/src/extractor/arbitrary_variable_machine.rs b/crates/oxide/src/extractor/arbitrary_variable_machine.rs index 6990e110b087..e8d4755571c7 100644 --- a/crates/oxide/src/extractor/arbitrary_variable_machine.rs +++ b/crates/oxide/src/extractor/arbitrary_variable_machine.rs @@ -80,13 +80,13 @@ impl Machine for ArbitraryVariableMachine { #[inline(always)] fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { - match cursor.curr.into() { + match cursor.curr().into() { // Arbitrary variables start with `(` followed by a CSS variable // // E.g.: `(--my-variable)` // ^^ // - Class::OpenParen => match cursor.next.into() { + Class::OpenParen => match cursor.next().into() { Class::Dash => { self.start_pos = cursor.pos; cursor.advance(); @@ -117,7 +117,7 @@ impl Machine for ArbitraryVariableMachine { fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { match self.css_variable_machine.next(cursor) { MachineState::Idle => self.restart(), - MachineState::Done(_) => match cursor.next.into() { + MachineState::Done(_) => match cursor.next().into() { // A CSS variable followed by a `,` means that there is a fallback // // E.g.: `(--my-color,red)` @@ -134,7 +134,7 @@ impl Machine for ArbitraryVariableMachine { _ => { cursor.advance(); - match cursor.curr.into() { + match cursor.curr().into() { // End of an arbitrary variable, must be followed by `)` Class::CloseParen => self.done(self.start_pos, cursor), @@ -156,7 +156,7 @@ impl Machine for ArbitraryVariableMachine { let len = cursor.input.len(); while cursor.pos < len { - match cursor.curr.into() { + match cursor.curr().into() { // Valid data type characters // // E.g.: `(length:--my-length)` @@ -169,7 +169,7 @@ impl Machine for ArbitraryVariableMachine { // // E.g.: `(length:--my-length)` // ^ - Class::Colon => match cursor.next.into() { + Class::Colon => match cursor.next().into() { Class::Dash => { cursor.advance(); return self.transition::().next(cursor); @@ -196,8 +196,8 @@ impl Machine for ArbitraryVariableMachine { fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { let len = cursor.input.len(); while cursor.pos < len { - match cursor.curr.into() { - Class::Escape => match cursor.next.into() { + match cursor.curr().into() { + Class::Escape => match cursor.next().into() { // An escaped whitespace character is not allowed // // E.g.: `(--my-\ color)` @@ -212,7 +212,7 @@ impl Machine for ArbitraryVariableMachine { }, Class::OpenParen | Class::OpenBracket | Class::OpenCurly => { - if !self.bracket_stack.push(cursor.curr) { + if !self.bracket_stack.push(cursor.curr()) { return self.restart(); } cursor.advance(); @@ -221,7 +221,7 @@ impl Machine for ArbitraryVariableMachine { Class::CloseParen | Class::CloseBracket | Class::CloseCurly if !self.bracket_stack.is_empty() => { - if !self.bracket_stack.pop(cursor.curr) { + if !self.bracket_stack.pop(cursor.curr()) { return self.restart(); } cursor.advance(); @@ -253,7 +253,7 @@ impl Machine for ArbitraryVariableMachine { Class::Whitespace => return self.restart(), // String interpolation-like syntax is not allowed. E.g.: `[${x}]` - Class::Dollar if matches!(cursor.next.into(), Class::OpenCurly) => { + Class::Dollar if matches!(cursor.next().into(), Class::OpenCurly) => { return self.restart() } diff --git a/crates/oxide/src/extractor/candidate_machine.rs b/crates/oxide/src/extractor/candidate_machine.rs index c82cc3707993..a755cf02a2b5 100644 --- a/crates/oxide/src/extractor/candidate_machine.rs +++ b/crates/oxide/src/extractor/candidate_machine.rs @@ -32,14 +32,14 @@ impl Machine for CandidateMachine { while cursor.pos < len { // Skip ahead for known characters that will never be part of a candidate. No need to // run any sub-machines. - if cursor.curr.is_ascii_whitespace() { + if cursor.curr().is_ascii_whitespace() { self.reset(); cursor.advance(); continue; } // Candidates don't start with these characters, so we can skip ahead. - if matches!(cursor.curr, b':' | b'"' | b'\'' | b'`') { + if matches!(cursor.curr(), b':' | b'"' | b'\'' | b'`') { self.reset(); cursor.advance(); continue; @@ -56,7 +56,7 @@ impl Machine for CandidateMachine { // E.g.: `Some Class` // ^ ^ Invalid, we can jump ahead to the next boundary // - if matches!(cursor.curr, b'<' | b'A'..=b'Z') { + if matches!(cursor.curr(), b'<' | b'A'..=b'Z') { if let Some(offset) = cursor.input[cursor.pos..] .iter() .position(|&c| is_valid_before_boundary(&c)) diff --git a/crates/oxide/src/extractor/css_variable_machine.rs b/crates/oxide/src/extractor/css_variable_machine.rs index 4e19c7111f5d..7beb827ee84b 100644 --- a/crates/oxide/src/extractor/css_variable_machine.rs +++ b/crates/oxide/src/extractor/css_variable_machine.rs @@ -20,7 +20,7 @@ impl Machine for CssVariableMachine { #[inline] fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { // CSS Variables must start with `--` - if Class::Dash != cursor.curr.into() || Class::Dash != cursor.next.into() { + if Class::Dash != cursor.curr().into() || Class::Dash != cursor.next().into() { return MachineState::Idle; } @@ -30,11 +30,11 @@ impl Machine for CssVariableMachine { cursor.advance_twice(); while cursor.pos < len { - match cursor.curr.into() { + match cursor.curr().into() { // https://drafts.csswg.org/css-syntax-3/#ident-token-diagram // Class::AllowedCharacter | Class::Dash => { - match cursor.next.into() { + match cursor.next().into() { // Valid character followed by a valid character or an escape character // // E.g.: `--my-variable` @@ -58,7 +58,7 @@ impl Machine for CssVariableMachine { } } - Class::Escape => match cursor.next.into() { + Class::Escape => match cursor.next().into() { // An escaped whitespace character is not allowed // // In CSS it is allowed, but in the context of a class it's not because then we diff --git a/crates/oxide/src/extractor/mod.rs b/crates/oxide/src/extractor/mod.rs index add0de4acaca..a37d6a0a49b3 100644 --- a/crates/oxide/src/extractor/mod.rs +++ b/crates/oxide/src/extractor/mod.rs @@ -86,7 +86,7 @@ impl<'a> Extractor<'a> { { let cursor = &mut self.cursor.clone(); while cursor.pos < len { - if cursor.curr.is_ascii_whitespace() { + if cursor.curr().is_ascii_whitespace() { cursor.advance(); continue; } @@ -104,7 +104,7 @@ impl<'a> Extractor<'a> { let cursor = &mut self.cursor.clone(); while cursor.pos < len { - if cursor.curr.is_ascii_whitespace() { + if cursor.curr().is_ascii_whitespace() { cursor.advance(); continue; } @@ -147,7 +147,7 @@ impl<'a> Extractor<'a> { let cursor = &mut self.cursor.clone(); while cursor.pos < len { - if cursor.curr.is_ascii_whitespace() { + if cursor.curr().is_ascii_whitespace() { cursor.advance(); continue; } @@ -238,7 +238,7 @@ mod tests { use std::hint::black_box; fn pre_process_input(input: &str, extension: &str) -> String { - let input = crate::scanner::pre_process_input(input.as_bytes(), extension); + let input = crate::scanner::pre_process_input(input.as_bytes().to_vec(), extension); String::from_utf8(input).unwrap() } diff --git a/crates/oxide/src/extractor/modifier_machine.rs b/crates/oxide/src/extractor/modifier_machine.rs index 22668a828749..811bc9ded9e0 100644 --- a/crates/oxide/src/extractor/modifier_machine.rs +++ b/crates/oxide/src/extractor/modifier_machine.rs @@ -31,14 +31,14 @@ impl Machine for ModifierMachine { #[inline] fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { // A modifier must start with a `/`, everything else is not a valid start of a modifier - if Class::Slash != cursor.curr.into() { + if Class::Slash != cursor.curr().into() { return MachineState::Idle; } let start_pos = cursor.pos; cursor.advance(); - match cursor.curr.into() { + match cursor.curr().into() { // Start of an arbitrary value: // // ``` @@ -70,9 +70,9 @@ impl Machine for ModifierMachine { Class::ValidStart => { let len = cursor.input.len(); while cursor.pos < len { - match cursor.curr.into() { + match cursor.curr().into() { Class::ValidStart | Class::ValidInside => { - match cursor.next.into() { + match cursor.next().into() { // Only valid characters are allowed, if followed by another valid character Class::ValidStart | Class::ValidInside => cursor.advance(), diff --git a/crates/oxide/src/extractor/named_utility_machine.rs b/crates/oxide/src/extractor/named_utility_machine.rs index d218dbeb7a9b..24dc027b2d69 100644 --- a/crates/oxide/src/extractor/named_utility_machine.rs +++ b/crates/oxide/src/extractor/named_utility_machine.rs @@ -52,8 +52,8 @@ impl Machine for NamedUtilityMachine { #[inline] fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { - match cursor.curr.into() { - Class::AlphaLower => match cursor.next.into() { + match cursor.curr().into() { + Class::AlphaLower => match cursor.next().into() { // Valid single character utility in between quotes // // E.g.: `
` @@ -90,7 +90,7 @@ impl Machine for NamedUtilityMachine { // // E.g.: `-mx-2.5` // ^^ - Class::Dash => match cursor.next.into() { + Class::Dash => match cursor.next().into() { Class::AlphaLower => { self.start_pos = cursor.pos; cursor.advance(); @@ -118,7 +118,7 @@ impl Machine for NamedUtilityMachine { let len = cursor.input.len(); while cursor.pos < len { - match cursor.curr.into() { + match cursor.curr().into() { // Followed by a boundary character, we are at the end of the utility. // // E.g.: `'flex'` @@ -132,14 +132,14 @@ impl Machine for NamedUtilityMachine { // E.g.: `:div="{ flex: true }"` (JavaScript object syntax) // ^ Class::AlphaLower | Class::AlphaUpper => { - if is_valid_after_boundary(&cursor.next) || { + if is_valid_after_boundary(&cursor.next()) || { // Or any of these characters // // - `:`, because of JS object keys // - `/`, because of modifiers // - `!`, because of important matches!( - cursor.next.into(), + cursor.next().into(), Class::Colon | Class::Slash | Class::Exclamation ) } { @@ -150,7 +150,7 @@ impl Machine for NamedUtilityMachine { cursor.advance() } - Class::Dash => match cursor.next.into() { + Class::Dash => match cursor.next().into() { // Start of an arbitrary value // // E.g.: `bg-[#0088cc]` @@ -196,7 +196,7 @@ impl Machine for NamedUtilityMachine { _ => return self.restart(), }, - Class::Underscore => match cursor.next.into() { + Class::Underscore => match cursor.next().into() { // Valid characters _if_ followed by another valid character. These characters are // only valid inside of the utility but not at the end of the utility. // @@ -225,14 +225,14 @@ impl Machine for NamedUtilityMachine { // ^ // E.g.: `:div="{ flex: true }"` (JavaScript object syntax) // ^ - _ if is_valid_after_boundary(&cursor.next) || { + _ if is_valid_after_boundary(&cursor.next()) || { // Or any of these characters // // - `:`, because of JS object keys // - `/`, because of modifiers // - `!`, because of important matches!( - cursor.next.into(), + cursor.next().into(), Class::Colon | Class::Slash | Class::Exclamation ) } => @@ -249,11 +249,11 @@ impl Machine for NamedUtilityMachine { // E.g.: `px-2.5` // ^^^ Class::Dot => { - if !matches!(cursor.prev.into(), Class::Number) { + if !matches!(cursor.prev().into(), Class::Number) { return self.restart(); } - if !matches!(cursor.next.into(), Class::Number) { + if !matches!(cursor.next().into(), Class::Number) { return self.restart(); } @@ -278,7 +278,7 @@ impl Machine for NamedUtilityMachine { // Class::Number => { if !matches!( - cursor.prev.into(), + cursor.prev().into(), Class::Dash | Class::Underscore | Class::Dot @@ -290,7 +290,7 @@ impl Machine for NamedUtilityMachine { } if !matches!( - cursor.next.into(), + cursor.next().into(), Class::Dot | Class::Number | Class::AlphaLower @@ -314,7 +314,7 @@ impl Machine for NamedUtilityMachine { // ^^ // ``` Class::Percent => { - if !matches!(cursor.prev.into(), Class::Number) { + if !matches!(cursor.prev().into(), Class::Number) { return self.restart(); } diff --git a/crates/oxide/src/extractor/named_variant_machine.rs b/crates/oxide/src/extractor/named_variant_machine.rs index b6de8220b4cb..285fe6ab51a6 100644 --- a/crates/oxide/src/extractor/named_variant_machine.rs +++ b/crates/oxide/src/extractor/named_variant_machine.rs @@ -81,8 +81,8 @@ impl Machine for NamedVariantMachine { #[inline(always)] fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { - match cursor.curr.into() { - Class::AlphaLower | Class::Star => match cursor.next.into() { + match cursor.curr().into() { + Class::AlphaLower | Class::Star => match cursor.next().into() { // Valid single character variant, must be followed by a `:` // // E.g.: `
` @@ -134,8 +134,8 @@ impl Machine for NamedVariantMachine { let len = cursor.input.len(); while cursor.pos < len { - match cursor.curr.into() { - Class::Dash => match cursor.next.into() { + match cursor.curr().into() { + Class::Dash => match cursor.next().into() { // Start of an arbitrary value // // E.g.: `data-[state=pending]:`. @@ -192,7 +192,7 @@ impl Machine for NamedVariantMachine { }; } - Class::Underscore => match cursor.next.into() { + Class::Underscore => match cursor.next().into() { // Valid characters _if_ followed by another valid character. These characters are // only valid inside of the variant but not at the end of the variant. // @@ -240,11 +240,11 @@ impl Machine for NamedVariantMachine { // E.g.: `2.5xl:flex` // ^^^ Class::Dot => { - if !matches!(cursor.prev.into(), Class::Number) { + if !matches!(cursor.prev().into(), Class::Number) { return self.restart(); } - if !matches!(cursor.next.into(), Class::Number) { + if !matches!(cursor.next().into(), Class::Number) { return self.restart(); } @@ -263,7 +263,7 @@ impl Machine for NamedVariantMachine { impl NamedVariantMachine { #[inline(always)] fn parse_arbitrary_end(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { - match cursor.next.into() { + match cursor.next().into() { Class::Slash => { cursor.advance(); self.transition::().next(cursor) @@ -285,7 +285,7 @@ impl Machine for NamedVariantMachine { fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { match self.modifier_machine.next(cursor) { MachineState::Idle => self.restart(), - MachineState::Done(_) => match cursor.next.into() { + MachineState::Done(_) => match cursor.next().into() { // Modifier must be followed by a `:` // // E.g.: `group-hover/name:` @@ -308,7 +308,7 @@ impl Machine for NamedVariantMachine { #[inline(always)] fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { - match cursor.curr.into() { + match cursor.curr().into() { // The end of a variant must be the `:` // // E.g.: `hover:` diff --git a/crates/oxide/src/extractor/pre_processors/clojure.rs b/crates/oxide/src/extractor/pre_processors/clojure.rs index ecf02b4ff634..3fb4ce601cd6 100644 --- a/crates/oxide/src/extractor/pre_processors/clojure.rs +++ b/crates/oxide/src/extractor/pre_processors/clojure.rs @@ -32,14 +32,14 @@ impl PreProcessor for Clojure { let mut cursor = cursor::Cursor::new(&content); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Consume strings as-is b'"' => { result[cursor.pos] = b' '; cursor.advance(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Escaped character, skip ahead to the next character b'\\' => cursor.advance_twice(), @@ -57,8 +57,8 @@ impl PreProcessor for Clojure { // Discard line comments until the end of the line. // Comments start with `;;` - b';' if matches!(cursor.next, b';') => { - while cursor.pos < len && cursor.curr != b'\n' { + b';' if matches!(cursor.next(), b';') => { + while cursor.pos < len && cursor.curr() != b'\n' { result[cursor.pos] = b' '; cursor.advance(); } @@ -70,7 +70,7 @@ impl PreProcessor for Clojure { cursor.advance(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // A `.` surrounded by digits is a decimal number, so we don't want to replace it. // // E.g.: @@ -78,8 +78,8 @@ impl PreProcessor for Clojure { // gap-1.5 // ^ // ``` - b'.' if cursor.prev.is_ascii_digit() - && cursor.next.is_ascii_digit() => + b'.' if cursor.prev().is_ascii_digit() + && cursor.next().is_ascii_digit() => { // Keep the `.` as-is } @@ -95,7 +95,7 @@ impl PreProcessor for Clojure { result[cursor.pos] = b' '; } // End of keyword. - _ if !is_keyword_character(cursor.curr) => { + _ if !is_keyword_character(cursor.curr()) => { result[cursor.pos] = b' '; break; } @@ -110,11 +110,11 @@ impl PreProcessor for Clojure { // Handle quote with a list, e.g.: `'(…)` // and with a vector, e.g.: `'[…]` - b'\'' if matches!(cursor.next, b'[' | b'(') => { + b'\'' if matches!(cursor.next(), b'[' | b'(') => { result[cursor.pos] = b' '; cursor.advance(); result[cursor.pos] = b' '; - let end = match cursor.curr { + let end = match cursor.curr() { b'[' => b']', b'(' => b')', _ => unreachable!(), @@ -122,7 +122,7 @@ impl PreProcessor for Clojure { // Consume until the closing `]` while cursor.pos < len { - match cursor.curr { + match cursor.curr() { x if x == end => { result[cursor.pos] = b' '; break; @@ -134,7 +134,7 @@ impl PreProcessor for Clojure { cursor.advance(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Escaped character, skip ahead to the next character b'\\' => cursor.advance_twice(), @@ -157,14 +157,14 @@ impl PreProcessor for Clojure { } // Handle quote with a keyword, e.g.: `'bg-white` - b'\'' if !cursor.next.is_ascii_whitespace() => { + b'\'' if !cursor.next().is_ascii_whitespace() => { result[cursor.pos] = b' '; cursor.advance(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // End of keyword. - _ if !is_keyword_character(cursor.curr) => { + _ if !is_keyword_character(cursor.curr()) => { result[cursor.pos] = b' '; break; } diff --git a/crates/oxide/src/extractor/pre_processors/elixir.rs b/crates/oxide/src/extractor/pre_processors/elixir.rs index 87b89a2a9dda..7737a6b2d1ae 100644 --- a/crates/oxide/src/extractor/pre_processors/elixir.rs +++ b/crates/oxide/src/extractor/pre_processors/elixir.rs @@ -13,13 +13,13 @@ impl PreProcessor for Elixir { while cursor.pos < content.len() { // Look for a sigil marker - if cursor.curr != b'~' { + if cursor.curr() != b'~' { cursor.advance(); continue; } // Scan charlists, strings, and wordlists - if !matches!(cursor.next, b'c' | b'C' | b's' | b'S' | b'w' | b'W') { + if !matches!(cursor.next(), b'c' | b'C' | b's' | b'S' | b'w' | b'W') { cursor.advance(); continue; } @@ -27,7 +27,7 @@ impl PreProcessor for Elixir { cursor.advance_twice(); // Match the opening for a sigil - if !matches!(cursor.curr, b'(' | b'[' | b'{') { + if !matches!(cursor.curr(), b'(' | b'[' | b'{') { continue; } @@ -35,19 +35,19 @@ impl PreProcessor for Elixir { result[cursor.pos] = b' '; // Scan until we find a balanced closing one and replace it too - bracket_stack.push(cursor.curr); + bracket_stack.push(cursor.curr()); while cursor.pos < content.len() { cursor.advance(); - match cursor.curr { + match cursor.curr() { // Escaped character, skip ahead to the next character b'\\' => cursor.advance_twice(), b'(' | b'[' | b'{' => { - bracket_stack.push(cursor.curr); + bracket_stack.push(cursor.curr()); } b')' | b']' | b'}' if !bracket_stack.is_empty() => { - bracket_stack.pop(cursor.curr); + bracket_stack.pop(cursor.curr()); if bracket_stack.is_empty() { // Replace the closing bracket with a space diff --git a/crates/oxide/src/extractor/pre_processors/haml.rs b/crates/oxide/src/extractor/pre_processors/haml.rs index a131618abe66..99b7bd052302 100644 --- a/crates/oxide/src/extractor/pre_processors/haml.rs +++ b/crates/oxide/src/extractor/pre_processors/haml.rs @@ -101,7 +101,7 @@ impl PreProcessor for Haml { let mut last_newline_position = 0; while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Escape the next character b'\\' => { cursor.advance_twice(); @@ -119,7 +119,7 @@ impl PreProcessor for Haml { b'-' if cursor.input[last_newline_position..cursor.pos] .iter() .all(u8::is_ascii_whitespace) - && matches!(cursor.next, b'#') => + && matches!(cursor.next(), b'#') => { // Just consume the comment let updated_last_newline_position = @@ -159,7 +159,7 @@ impl PreProcessor for Haml { // Override the last known newline position last_newline_position = end; - let replaced = pre_process_input(ruby_code, "rb"); + let replaced = pre_process_input(ruby_code.to_vec(), "rb"); result.replace_range(start..end, replaced); } @@ -190,7 +190,7 @@ impl PreProcessor for Haml { // digit. // E.g.: `bg-red-500.2xl:flex` // ^^^ - if cursor.prev.is_ascii_digit() && cursor.next.is_ascii_digit() { + if cursor.prev().is_ascii_digit() && cursor.next().is_ascii_digit() { let mut next_cursor = cursor.clone(); next_cursor.advance(); @@ -213,11 +213,11 @@ impl PreProcessor for Haml { if bracket_stack.is_empty() { result[cursor.pos] = b' '; } - bracket_stack.push(cursor.curr); + bracket_stack.push(cursor.curr()); } b')' | b']' | b'}' if !bracket_stack.is_empty() => { - bracket_stack.pop(cursor.curr); + bracket_stack.pop(cursor.curr()); // Replace closing bracket with a space if bracket_stack.is_empty() { @@ -257,7 +257,7 @@ impl Haml { // :url => { :action => "add", :id => product.id }, // :update => { :success => "cart", :failure => "error" } // ``` - let evaluation_type = cursor.curr; + let evaluation_type = cursor.curr(); let block_indentation_level = cursor .pos @@ -267,17 +267,17 @@ impl Haml { let mut last_newline_position = last_known_newline_position; // Consume until the end of the line first - while cursor.pos < len && cursor.curr != b'\n' { + while cursor.pos < len && cursor.curr() != b'\n' { cursor.advance(); } // Block is already done, aka just a line - if evaluation_type == b'=' && cursor.prev != b',' { + if evaluation_type == b'=' && cursor.prev() != b',' { return cursor.pos; } 'outer: while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Escape the next character b'\\' => { cursor.advance_twice(); @@ -289,7 +289,7 @@ impl Haml { last_newline_position = cursor.pos; // We are done with this block - if evaluation_type == b'=' && cursor.prev != b',' { + if evaluation_type == b'=' && cursor.prev() != b',' { break; } @@ -300,11 +300,11 @@ impl Haml { // Skip whitespace and compute the indentation level x if x.is_ascii_whitespace() => { // Find first non-whitespace character - while cursor.pos < len && cursor.curr.is_ascii_whitespace() { - if cursor.curr == b'\n' { + while cursor.pos < len && cursor.curr().is_ascii_whitespace() { + if cursor.curr() == b'\n' { last_newline_position = cursor.pos; - if evaluation_type == b'=' && cursor.prev != b',' { + if evaluation_type == b'=' && cursor.prev() != b',' { // We are done with this block break 'outer; } diff --git a/crates/oxide/src/extractor/pre_processors/json.rs b/crates/oxide/src/extractor/pre_processors/json.rs index 809eb501e679..cd457050c5fc 100644 --- a/crates/oxide/src/extractor/pre_processors/json.rs +++ b/crates/oxide/src/extractor/pre_processors/json.rs @@ -11,13 +11,13 @@ impl PreProcessor for Json { let mut cursor = cursor::Cursor::new(content); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Consume strings as-is b'"' => { cursor.advance(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Escaped character, skip ahead to the next character b'\\' => cursor.advance_twice(), diff --git a/crates/oxide/src/extractor/pre_processors/markdown.rs b/crates/oxide/src/extractor/pre_processors/markdown.rs index 63dc37d1eb4b..d2acc6a58738 100644 --- a/crates/oxide/src/extractor/pre_processors/markdown.rs +++ b/crates/oxide/src/extractor/pre_processors/markdown.rs @@ -13,7 +13,7 @@ impl PreProcessor for Markdown { let mut in_directive = false; while cursor.pos < len { - match (in_directive, cursor.curr) { + match (in_directive, cursor.curr()) { (false, b'{') => { result[cursor.pos] = b' '; in_directive = true; diff --git a/crates/oxide/src/extractor/pre_processors/pug.rs b/crates/oxide/src/extractor/pre_processors/pug.rs index 7b44fcf5be04..70dfe5683197 100644 --- a/crates/oxide/src/extractor/pre_processors/pug.rs +++ b/crates/oxide/src/extractor/pre_processors/pug.rs @@ -15,7 +15,7 @@ impl PreProcessor for Pug { let mut bracket_stack = BracketStack::default(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Only replace `.` with a space if it's not surrounded by numbers. E.g.: // // ```diff @@ -43,7 +43,7 @@ impl PreProcessor for Pug { // digit. // E.g.: `bg-red-500.2xl:flex` // ^^^ - if cursor.prev.is_ascii_digit() && cursor.next.is_ascii_digit() { + if cursor.prev().is_ascii_digit() && cursor.next().is_ascii_digit() { let mut next_cursor = cursor.clone(); next_cursor.advance(); @@ -68,17 +68,17 @@ impl PreProcessor for Pug { // // However, we also need to make sure that we keep the parens that are part of the // utility class. E.g.: `bg-(--my-color)`. - b'(' if bracket_stack.is_empty() && !matches!(cursor.prev, b'-' | b'/') => { + b'(' if bracket_stack.is_empty() && !matches!(cursor.prev(), b'-' | b'/') => { result[cursor.pos] = b' '; - bracket_stack.push(cursor.curr); + bracket_stack.push(cursor.curr()); } b'(' | b'[' | b'{' => { - bracket_stack.push(cursor.curr); + bracket_stack.push(cursor.curr()); } b')' | b']' | b'}' if !bracket_stack.is_empty() => { - bracket_stack.pop(cursor.curr); + bracket_stack.pop(cursor.curr()); } // Consume everything else diff --git a/crates/oxide/src/extractor/pre_processors/ruby.rs b/crates/oxide/src/extractor/pre_processors/ruby.rs index 89ac1ee7b1c6..1f2221414ff4 100644 --- a/crates/oxide/src/extractor/pre_processors/ruby.rs +++ b/crates/oxide/src/extractor/pre_processors/ruby.rs @@ -68,7 +68,8 @@ impl PreProcessor for Ruby { } let body = &content_as_str[body_start..body_end]; - let replaced = pre_process_input(body.as_bytes(), &lang.to_ascii_lowercase()); + let replaced = + pre_process_input(body.as_bytes().to_vec(), &lang.to_ascii_lowercase()); result.replace_range(body_start..body_end, replaced); break; @@ -77,12 +78,12 @@ impl PreProcessor for Ruby { // Ruby extraction while cursor.pos < len { - match cursor.curr { + match cursor.curr() { b'"' => { cursor.advance(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Escaped character, skip ahead to the next character b'\\' => cursor.advance_twice(), @@ -102,7 +103,7 @@ impl PreProcessor for Ruby { cursor.advance(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Escaped character, skip ahead to the next character b'\\' => cursor.advance_twice(), @@ -123,12 +124,12 @@ impl PreProcessor for Ruby { // Except for strict locals, these are defined in a `<%# locals: … %>`. Checking if // the comment is preceded by a `%` should be enough without having to perform more // parsing logic. Worst case we _do_ scan a few comments. - b'#' if !matches!(cursor.prev, b'%') => { + b'#' if !matches!(cursor.prev(), b'%') => { result[cursor.pos] = b' '; cursor.advance(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // End of the comment b'\n' => break, @@ -148,7 +149,7 @@ impl PreProcessor for Ruby { } // Looking for `%w`, `%W`, or `%p` - if cursor.curr != b'%' || !matches!(cursor.next, b'w' | b'W' | b'p') { + if cursor.curr() != b'%' || !matches!(cursor.next(), b'w' | b'W' | b'p') { cursor.advance(); continue; } @@ -156,7 +157,7 @@ impl PreProcessor for Ruby { cursor.advance_twice(); // Boundary character - let boundary = match cursor.curr { + let boundary = match cursor.curr() { b'[' => b']', b'(' => b')', b'{' => b'}', @@ -177,11 +178,11 @@ impl PreProcessor for Ruby { cursor.advance(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Skip escaped characters b'\\' => { // Use backslash to embed spaces in the strings. - if cursor.next == b' ' { + if cursor.next() == b' ' { result[cursor.pos] = b' '; } @@ -190,19 +191,19 @@ impl PreProcessor for Ruby { // Start of a nested bracket b'[' | b'(' | b'{' => { - bracket_stack.push(cursor.curr); + bracket_stack.push(cursor.curr()); } // End of a nested bracket b']' | b')' | b'}' if !bracket_stack.is_empty() => { - if !bracket_stack.pop(cursor.curr) { + if !bracket_stack.pop(cursor.curr()) { // Unbalanced cursor.advance(); } } // End of the pattern, replace the boundary character with a space - _ if cursor.curr == boundary => { + _ if cursor.curr() == boundary => { if boundary != b'\n' { result[cursor.pos] = b' '; } diff --git a/crates/oxide/src/extractor/pre_processors/rust.rs b/crates/oxide/src/extractor/pre_processors/rust.rs index 6404fffb5e29..34c9e0c916b7 100644 --- a/crates/oxide/src/extractor/pre_processors/rust.rs +++ b/crates/oxide/src/extractor/pre_processors/rust.rs @@ -33,7 +33,7 @@ impl Rust { let mut bracket_stack = bracket_stack::BracketStack::default(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Escaped character, skip ahead to the next character b'\\' => { cursor.advance_twice(); @@ -46,7 +46,7 @@ impl Rust { cursor.advance(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Escaped character, skip ahead to the next character b'\\' => cursor.advance_twice(), @@ -89,7 +89,7 @@ impl Rust { // digit. // E.g.: `bg-red-500.2xl:flex` // ^^^ - if cursor.prev.is_ascii_digit() && cursor.next.is_ascii_digit() { + if cursor.prev().is_ascii_digit() && cursor.next().is_ascii_digit() { let mut next_cursor = cursor.clone(); next_cursor.advance(); @@ -103,11 +103,11 @@ impl Rust { } b'[' => { - bracket_stack.push(cursor.curr); + bracket_stack.push(cursor.curr()); } b']' if !bracket_stack.is_empty() => { - bracket_stack.pop(cursor.curr); + bracket_stack.pop(cursor.curr()); } // Consume everything else diff --git a/crates/oxide/src/extractor/pre_processors/slim.rs b/crates/oxide/src/extractor/pre_processors/slim.rs index 6d41e5a09b72..eacfb55eedfd 100644 --- a/crates/oxide/src/extractor/pre_processors/slim.rs +++ b/crates/oxide/src/extractor/pre_processors/slim.rs @@ -15,7 +15,7 @@ impl PreProcessor for Slim { let mut bracket_stack = BracketStack::default(); while cursor.pos < len { - match cursor.curr { + match cursor.curr() { // Only replace `.` with a space if it's not surrounded by numbers. E.g.: // // ```diff @@ -43,7 +43,7 @@ impl PreProcessor for Slim { // digit. // E.g.: `bg-red-500.2xl:flex` // ^^^ - if cursor.prev.is_ascii_digit() && cursor.next.is_ascii_digit() { + if cursor.prev().is_ascii_digit() && cursor.next().is_ascii_digit() { let mut next_cursor = cursor.clone(); next_cursor.advance(); @@ -65,7 +65,7 @@ impl PreProcessor for Slim { // class=%w[bg-blue-500 w-10 h-10] // ] // ``` - b'%' if matches!(cursor.next, b'w' | b'W') + b'%' if matches!(cursor.next(), b'w' | b'W') && matches!(cursor.input.get(cursor.pos + 2), Some(b'[' | b'(' | b'{')) => { result[cursor.pos] = b' '; // Replace `%` @@ -73,7 +73,7 @@ impl PreProcessor for Slim { result[cursor.pos] = b' '; // Replace `w` cursor.advance(); result[cursor.pos] = b' '; // Replace `[` or `(` or `{` - bracket_stack.push(cursor.curr); + bracket_stack.push(cursor.curr()); cursor.advance(); // Move past the bracket continue; } @@ -96,10 +96,10 @@ impl PreProcessor for Slim { // Instead of listing all boundary characters, let's list the characters we know // will be invalid instead. b'[' if bracket_stack.is_empty() - && matches!(cursor.prev, b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9') => + && matches!(cursor.prev(), b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9') => { result[cursor.pos] = b' '; - bracket_stack.push(cursor.curr); + bracket_stack.push(cursor.curr()); } // In Slim the class name shorthand can be followed by a parenthesis. E.g.: @@ -114,17 +114,17 @@ impl PreProcessor for Slim { // // However, we also need to make sure that we keep the parens that are part of the // utility class. E.g.: `bg-(--my-color)`. - b'(' if bracket_stack.is_empty() && !matches!(cursor.prev, b'-' | b'/') => { + b'(' if bracket_stack.is_empty() && !matches!(cursor.prev(), b'-' | b'/') => { result[cursor.pos] = b' '; - bracket_stack.push(cursor.curr); + bracket_stack.push(cursor.curr()); } b'(' | b'[' | b'{' => { - bracket_stack.push(cursor.curr); + bracket_stack.push(cursor.curr()); } b')' | b']' | b'}' if !bracket_stack.is_empty() => { - bracket_stack.pop(cursor.curr); + bracket_stack.pop(cursor.curr()); } // Consume everything else diff --git a/crates/oxide/src/extractor/pre_processors/vue.rs b/crates/oxide/src/extractor/pre_processors/vue.rs index 119e2a3d2079..1b9bf1668cb4 100644 --- a/crates/oxide/src/extractor/pre_processors/vue.rs +++ b/crates/oxide/src/extractor/pre_processors/vue.rs @@ -14,13 +14,12 @@ pub struct Vue; impl PreProcessor for Vue { fn process(&self, content: &[u8]) -> Vec { let mut result = content.to_vec(); - let content_as_str = std::str::from_utf8(content).unwrap(); for (_, [lang, body]) in TEMPLATE_REGEX .captures_iter(content_as_str) .map(|c| c.extract()) { - let replaced = pre_process_input(body.as_bytes(), lang); + let replaced = pre_process_input(body.as_bytes().to_vec(), lang); result = result.replace(body, replaced); } diff --git a/crates/oxide/src/extractor/string_machine.rs b/crates/oxide/src/extractor/string_machine.rs index 9148a1fbf619..4fad49faae19 100644 --- a/crates/oxide/src/extractor/string_machine.rs +++ b/crates/oxide/src/extractor/string_machine.rs @@ -30,20 +30,20 @@ impl Machine for StringMachine { #[inline] fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { - if Class::Quote != cursor.curr.into() { + if Class::Quote != cursor.curr().into() { return MachineState::Idle; } // Start of a string let len = cursor.input.len(); let start_pos = cursor.pos; - let end_char = cursor.curr; + let end_char = cursor.curr(); cursor.advance(); while cursor.pos < len { - match cursor.curr.into() { - Class::Escape => match cursor.next.into() { + match cursor.curr().into() { + Class::Escape => match cursor.next().into() { // An escaped whitespace character is not allowed Class::Whitespace => return MachineState::Idle, @@ -52,7 +52,7 @@ impl Machine for StringMachine { }, // End of the string - Class::Quote if cursor.curr == end_char => return self.done(start_pos, cursor), + Class::Quote if cursor.curr() == end_char => return self.done(start_pos, cursor), // Any kind of whitespace is not allowed Class::Whitespace => return MachineState::Idle, diff --git a/crates/oxide/src/extractor/utility_machine.rs b/crates/oxide/src/extractor/utility_machine.rs index b9b1038cdb3a..c116ec4e4226 100644 --- a/crates/oxide/src/extractor/utility_machine.rs +++ b/crates/oxide/src/extractor/utility_machine.rs @@ -27,12 +27,12 @@ impl Machine for UtilityMachine { #[inline] fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { - match cursor.curr.into() { + match cursor.curr().into() { // LEGACY: Important marker Class::Exclamation => { self.legacy_important = true; - match cursor.next.into() { + match cursor.next().into() { // Start of an arbitrary property // // E.g.: `![color:red]` @@ -78,7 +78,7 @@ impl UtilityMachine { fn parse_arbitrary_property(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { match self.arbitrary_property_machine.next(cursor) { MachineState::Idle => self.restart(), - MachineState::Done(_) => match cursor.next.into() { + MachineState::Done(_) => match cursor.next().into() { // End of arbitrary property, but there is a potential modifier. // // E.g.: `[color:#0088cc]/` @@ -109,7 +109,7 @@ impl UtilityMachine { fn parse_named_utility(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { match self.named_utility_machine.next(cursor) { MachineState::Idle => self.restart(), - MachineState::Done(_) => match cursor.next.into() { + MachineState::Done(_) => match cursor.next().into() { // End of a named utility, but there is a potential modifier. // // E.g.: `bg-red-500/` @@ -140,7 +140,7 @@ impl UtilityMachine { fn parse_modifier(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { match self.modifier_machine.next(cursor) { MachineState::Idle => self.restart(), - MachineState::Done(_) => match cursor.next.into() { + MachineState::Done(_) => match cursor.next().into() { // A modifier followed by a modifier is invalid Class::Slash => self.restart(), diff --git a/crates/oxide/src/extractor/variant_machine.rs b/crates/oxide/src/extractor/variant_machine.rs index 23aa61798643..9ec2adc0922a 100644 --- a/crates/oxide/src/extractor/variant_machine.rs +++ b/crates/oxide/src/extractor/variant_machine.rs @@ -16,7 +16,7 @@ impl Machine for VariantMachine { #[inline] fn next(&mut self, cursor: &mut cursor::Cursor<'_>) -> MachineState { - match cursor.curr.into() { + match cursor.curr().into() { // Start of an arbitrary variant // // E.g.: `[&:hover]:` @@ -48,7 +48,7 @@ impl VariantMachine { start_pos: usize, cursor: &mut cursor::Cursor<'_>, ) -> MachineState { - match cursor.next.into() { + match cursor.next().into() { // End of an arbitrary value, must be followed by a `:` // // E.g.: `[&:hover]:` diff --git a/crates/oxide/src/fast_skip.rs b/crates/oxide/src/fast_skip.rs index 488e61bd68da..54930548c620 100644 --- a/crates/oxide/src/fast_skip.rs +++ b/crates/oxide/src/fast_skip.rs @@ -10,7 +10,7 @@ pub fn fast_skip(cursor: &Cursor) -> Option { return None; } - if !cursor.curr.is_ascii_whitespace() { + if !cursor.curr().is_ascii_whitespace() { return None; } diff --git a/crates/oxide/src/scanner/detect_sources.rs b/crates/oxide/src/scanner/detect_sources.rs index 9dc340fbaf47..c519cd00d788 100644 --- a/crates/oxide/src/scanner/detect_sources.rs +++ b/crates/oxide/src/scanner/detect_sources.rs @@ -30,11 +30,9 @@ fn sort_by_dir_and_name(a: &DirEntry, z: &DirEntry) -> Ordering { pub fn resolve_globs( base: PathBuf, - dirs: &[PathBuf], + dirs: &FxHashSet, extensions: &FxHashSet, ) -> Vec { - let allowed_paths: FxHashSet = FxHashSet::from_iter(dirs.iter().cloned()); - // A list of known extensions + a list of extensions we found in the project. let mut found_extensions: FxHashSet = FxHashSet::from_iter(KNOWN_EXTENSIONS.iter().map(|x| x.to_string())); @@ -72,7 +70,7 @@ pub fn resolve_globs( continue; } - if !allowed_paths.contains(path) { + if !dirs.contains(path) { let mut path = path; while let Some(parent) = path.parent() { if parent == base { @@ -113,7 +111,7 @@ pub fn resolve_globs( continue; } - if !allowed_paths.contains(path) { + if !dirs.contains(path) { continue; } diff --git a/crates/oxide/src/scanner/init_tracing.rs b/crates/oxide/src/scanner/init_tracing.rs new file mode 100644 index 000000000000..2a570ff20188 --- /dev/null +++ b/crates/oxide/src/scanner/init_tracing.rs @@ -0,0 +1,70 @@ +use std::fs::OpenOptions; +use std::io::{self, Write}; +use std::path::Path; +use std::sync::{self, Arc, Mutex}; +use tracing_subscriber::fmt::writer::BoxMakeWriter; + +pub static SHOULD_TRACE: sync::LazyLock = sync::LazyLock::new( + || matches!(std::env::var("DEBUG"), Ok(value) if value.eq("*") || (value.contains("tailwindcss:oxide") && !value.contains("-tailwindcss:oxide"))), +); + +fn dim(input: &str) -> String { + format!("\u{001b}[2m{input}\u{001b}[22m") +} + +fn blue(input: &str) -> String { + format!("\u{001b}[34m{input}\u{001b}[39m") +} + +fn highlight(input: &str) -> String { + format!("{}{}{}", dim(&blue("`")), blue(input), dim(&blue("`"))) +} + +struct MutexWriter(Arc>); + +impl Write for MutexWriter { + fn write(&mut self, buf: &[u8]) -> io::Result { + self.0.lock().unwrap().write(buf) + } + + fn flush(&mut self) -> io::Result<()> { + self.0.lock().unwrap().flush() + } +} + +pub fn init_tracing() { + if !*SHOULD_TRACE { + return; + } + + let file_path = format!("tailwindcss-{}.log", std::process::id()); + let file = OpenOptions::new() + .create(true) + .append(true) + .open(&file_path) + .unwrap_or_else(|_| panic!("Failed to open {file_path}")); + + let file_path = Path::new(&file_path); + let absolute_file_path = dunce::canonicalize(file_path) + .unwrap_or_else(|_| panic!("Failed to canonicalize {file_path:?}")); + eprintln!( + "{} Writing debug info to: {}\n", + dim("[DEBUG]"), + highlight(absolute_file_path.as_path().to_str().unwrap()) + ); + + let file = Arc::new(Mutex::new(file)); + + let writer: BoxMakeWriter = BoxMakeWriter::new({ + let file = file.clone(); + move || Box::new(MutexWriter(file.clone())) as Box + }); + + _ = tracing_subscriber::fmt() + .with_max_level(tracing::Level::INFO) + .with_span_events(tracing_subscriber::fmt::format::FmtSpan::ACTIVE) + .with_writer(writer) + .with_ansi(false) + .compact() + .try_init(); +} diff --git a/crates/oxide/src/scanner/mod.rs b/crates/oxide/src/scanner/mod.rs index ec6aea642481..6d6cabc2aa80 100644 --- a/crates/oxide/src/scanner/mod.rs +++ b/crates/oxide/src/scanner/mod.rs @@ -1,5 +1,6 @@ pub mod auto_source_detection; pub mod detect_sources; +pub mod init_tracing; pub mod sources; use crate::extractor::{Extracted, Extractor}; @@ -14,15 +15,13 @@ use bstr::ByteSlice; use fast_glob::glob_match; use fxhash::{FxHashMap, FxHashSet}; use ignore::{gitignore::GitignoreBuilder, WalkBuilder}; +use init_tracing::{init_tracing, SHOULD_TRACE}; use rayon::prelude::*; use std::collections::{BTreeMap, BTreeSet}; -use std::fs::OpenOptions; -use std::io::{self, Write}; use std::path::{Path, PathBuf}; -use std::sync::{self, Arc, Mutex}; +use std::sync::{Arc, Mutex}; use std::time::SystemTime; use tracing::event; -use tracing_subscriber::fmt::writer::BoxMakeWriter; // @source "some/folder"; // This is auto source detection // @source "some/folder/**/*"; // This is auto source detection @@ -34,70 +33,6 @@ use tracing_subscriber::fmt::writer::BoxMakeWriter; // // @source "do-include-me.bin"; // `.bin` is typically ignored, but now it's explicit so should be included // @source "git-ignored.html"; // A git ignored file that is listed explicitly, should be scanned -static SHOULD_TRACE: sync::LazyLock = sync::LazyLock::new( - || matches!(std::env::var("DEBUG"), Ok(value) if value.eq("*") || (value.contains("tailwindcss:oxide") && !value.contains("-tailwindcss:oxide"))), -); - -fn dim(input: &str) -> String { - format!("\u{001b}[2m{input}\u{001b}[22m") -} - -fn blue(input: &str) -> String { - format!("\u{001b}[34m{input}\u{001b}[39m") -} - -fn highlight(input: &str) -> String { - format!("{}{}{}", dim(&blue("`")), blue(input), dim(&blue("`"))) -} - -fn init_tracing() { - if !*SHOULD_TRACE { - return; - } - - let file_path = format!("tailwindcss-{}.log", std::process::id()); - let file = OpenOptions::new() - .create(true) - .append(true) - .open(&file_path) - .unwrap_or_else(|_| panic!("Failed to open {file_path}")); - - let file_path = Path::new(&file_path); - let absolute_file_path = dunce::canonicalize(file_path) - .unwrap_or_else(|_| panic!("Failed to canonicalize {file_path:?}")); - eprintln!( - "{} Writing debug info to: {}\n", - dim("[DEBUG]"), - highlight(absolute_file_path.as_path().to_str().unwrap()) - ); - - let file = Arc::new(Mutex::new(file)); - - let writer: BoxMakeWriter = BoxMakeWriter::new({ - let file = file.clone(); - move || Box::new(MutexWriter(file.clone())) as Box - }); - - _ = tracing_subscriber::fmt() - .with_max_level(tracing::Level::INFO) - .with_span_events(tracing_subscriber::fmt::format::FmtSpan::ACTIVE) - .with_writer(writer) - .with_ansi(false) - .compact() - .try_init(); -} - -struct MutexWriter(Arc>); - -impl Write for MutexWriter { - fn write(&mut self, buf: &[u8]) -> io::Result { - self.0.lock().unwrap().write(buf) - } - - fn flush(&mut self) -> io::Result<()> { - self.0.lock().unwrap().flush() - } -} #[derive(Debug, Clone)] pub enum ChangedContent { @@ -129,26 +64,32 @@ pub struct Scanner { /// The walker to detect all files that we have to scan walker: Option, - /// All changed content that we have to parse - changed_content: Vec, - /// All found extensions extensions: FxHashSet, - /// All CSS files we want to scan for CSS variable usage - css_files: Vec, - /// All files that we have to scan - files: Vec, + files: FxHashSet, /// All directories, sub-directories, etc… we saw during source detection - dirs: Vec, + dirs: FxHashSet, /// All generated globs, used for setting up watchers globs: Option>, /// Track unique set of candidates candidates: FxHashSet, + + /// Track mtimes for files so re-scans can skip unchanged files. + /// Only populated after the first scan completes (to avoid unnecessary + /// metadata calls on initial build). + mtimes: FxHashMap, + + /// Whether we've completed at least one full scan. When false, we skip + /// mtime tracking entirely so the initial build stays fast. + has_scanned_once: bool, + + /// Whether sources have been scanned since the last `scan()` call + sources_scanned: bool, } impl Scanner { @@ -163,7 +104,6 @@ impl Scanner { } let sources = Sources::new(public_source_entries_to_private_source_entries(sources)); - if *SHOULD_TRACE { event!(tracing::Level::INFO, "Optimized sources:"); for source in sources.iter() { @@ -171,29 +111,26 @@ impl Scanner { } } + let walker = create_walker(&sources); + Self { - sources: sources.clone(), - walker: create_walker(sources), + sources, + walker, ..Default::default() } } pub fn scan(&mut self) -> Vec { - self.scan_sources(); + self.sources_scanned = false; - // TODO: performance improvement, bail early if we don't have any changed content - // if self.changed_content.is_empty() { - // return vec![]; - // } + let (scanned_blobs, css_files) = self.discover_sources(); - let _new_candidates = self.extract_candidates(); + self.extract_candidates(scanned_blobs, css_files); - // Make sure we have a sorted list of candidates - let mut candidates = self.candidates.iter().cloned().collect::<_>>(); - candidates.par_sort_unstable(); - - // Return all candidates instead of only the new ones - candidates + // Return all candidates sorted + let mut result = self.candidates.iter().cloned().collect::<_>>(); + result.par_sort_unstable(); + result } #[tracing::instrument(skip_all)] @@ -208,7 +145,7 @@ impl Scanner { // Raw content can be parsed directly, no need to verify if the file exists and is allowed // to be scanned. - self.changed_content.extend(changed_contents); + let mut content_to_scan: Vec = changed_contents; // Fully resolve all files let changed_files = changed_files @@ -232,7 +169,7 @@ impl Scanner { }); // All known files are allowed to be scanned - self.changed_content.extend(known_files); + content_to_scan.extend(known_files); // Figure out if the new unknown files are allowed to be scanned if !new_unknown_files.is_empty() { @@ -252,8 +189,8 @@ impl Scanner { // When the file is found on disk it means that all the rules pass. We can // extract the current file and remove it from the list of passed in files. if file == path { - self.files.push(path.to_path_buf()); // Track for future use - self.changed_content.push(changed_file.clone()); // Track for parsing + self.files.insert(path.to_path_buf()); // Track for future use + content_to_scan.push(changed_file.clone()); // Track for parsing drop_file_indexes.push(idx); } } @@ -274,18 +211,17 @@ impl Scanner { } } - self.extract_candidates() + // Read all content into blobs for extraction + let blobs = read_all_files(content_to_scan); + self.extract_candidates(blobs, vec![]) } #[tracing::instrument(skip_all)] - fn extract_candidates(&mut self) -> Vec { - let changed_content = self.changed_content.drain(..).collect::<_>>(); - - // Extract all candidates from the changed content - let mut new_candidates = parse_all_blobs(read_all_files(changed_content)); + fn extract_candidates(&mut self, blobs: Vec>, css_files: Vec) -> Vec { + // Extract all candidates from the pre-read blobs + let mut new_candidates = parse_all_blobs(blobs); // Extract all CSS variables from the CSS files - let css_files = self.css_files.drain(..).collect::<_>>(); if !css_files.is_empty() { let css_variables = extract_css_variables(read_all_files( css_files @@ -297,63 +233,23 @@ impl Scanner { new_candidates.extend(css_variables); } - // Only compute the new candidates and ignore the ones we already have. This is for - // subsequent calls to prevent serializing the entire set of candidates every time. - let mut new_candidates = new_candidates - .into_par_iter() - .filter(|candidate| !self.candidates.contains(candidate)) - .collect::<_>>(); - - new_candidates.par_sort_unstable(); + // Only keep candidates we haven't seen before + for existing in self.candidates.iter() { + new_candidates.remove(existing); + } // Track new candidates for subsequent calls - self.candidates.par_extend(new_candidates.clone()); - - new_candidates - } - - #[tracing::instrument(skip_all)] - fn scan_sources(&mut self) { - let Some(walker) = &mut self.walker else { - return; - }; + self.candidates.extend(new_candidates.iter().cloned()); - for entry in walker.build().filter_map(Result::ok) { - let path = entry.into_path(); - let Ok(metadata) = path.metadata() else { - continue; - }; - if metadata.is_dir() { - self.dirs.push(path); - } else if metadata.is_file() { - let extension = path - .extension() - .and_then(|x| x.to_str()) - .unwrap_or_default(); // In case the file has no extension + let mut result: Vec = new_candidates.into_iter().collect(); + result.par_sort_unstable(); - match extension { - // Special handing for CSS files, we don't want to extract candidates from - // these files, but we do want to extract used CSS variables. - "css" => { - self.css_files.push(path.clone()); - } - _ => { - self.changed_content.push(ChangedContent::File( - path.to_path_buf(), - extension.to_owned(), - )); - } - } - - self.extensions.insert(extension.to_owned()); - self.files.push(path); - } - } + result } #[tracing::instrument(skip_all)] pub fn get_files(&mut self) -> Vec { - self.scan_sources(); + let _ = self.discover_sources(); self.files .par_iter() @@ -367,7 +263,7 @@ impl Scanner { return globs.clone(); } - self.scan_sources(); + let _ = self.discover_sources(); let mut globs = vec![]; for source in self.sources.iter() { @@ -456,6 +352,99 @@ impl Scanner { }) .collect() } + + #[tracing::instrument(skip_all)] + fn discover_sources(&mut self) -> (Vec>, Vec) { + if self.sources_scanned { + return (vec![], vec![]); + } + self.sources_scanned = true; + + let Some(walker) = &mut self.walker else { + return (vec![], vec![]); + }; + + // Use synchronous walk for the initial build (lower overhead) and parallel + // walk for subsequent calls (watch mode) where the overhead is amortised. + let all_entries = if self.has_scanned_once { + walk_parallel(walker) + } else { + walk_synchronous(walker) + }; + + let mut css_files: Vec = vec![]; + let mut content_paths: Vec<(PathBuf, String)> = Vec::new(); + let mut seen_files: FxHashSet = FxHashSet::default(); + + for (path, is_dir, extension) in all_entries { + if is_dir { + self.dirs.insert(path); + } else { + // Deduplicate: parallel walk can visit the same file from multiple threads + if !seen_files.insert(path.clone()) { + continue; + } + + // On re-scans, check mtime to skip unchanged files. + // On the first scan we skip this entirely to avoid extra + // metadata syscalls. + let changed = if self.has_scanned_once { + let current_mtime = std::fs::metadata(&path) + .ok() + .and_then(|m| m.modified().ok()); + + match current_mtime { + Some(mtime) => { + let prev = self.mtimes.insert(path.clone(), mtime); + prev.is_none_or(|prev| prev != mtime) + } + None => true, + } + } else { + true + }; + + match extension.as_str() { + // Special handing for CSS files, we don't want to extract candidates from + // these files, but we do want to extract used CSS variables. + "css" => { + if changed { + css_files.push(path.clone()); + } + } + _ => { + if changed { + content_paths.push((path.clone(), extension.clone())); + } + } + } + + self.extensions.insert(extension); + self.files.insert(path); + } + } + + // Read + preprocess all discovered files in parallel + let scanned_blobs: Vec> = content_paths + .into_par_iter() + .filter_map(|(path, ext)| { + let content = std::fs::read(&path).ok()?; + event!(tracing::Level::INFO, "Reading {:?}", path); + let processed = pre_process_input(content, &ext); + if processed.is_empty() { + None + } else { + Some(processed) + } + }) + .collect(); + + if !self.has_scanned_once { + self.has_scanned_once = true; + } + + (scanned_blobs, css_files) + } } fn read_changed_content(c: ChangedContent) -> Option> { @@ -474,26 +463,26 @@ fn read_changed_content(c: ChangedContent) -> Option> { ChangedContent::Content(contents, extension) => (contents.into_bytes(), extension), }; - Some(pre_process_input(&content, &extension)) + Some(pre_process_input(content, &extension)) } -pub fn pre_process_input(content: &[u8], extension: &str) -> Vec { +pub fn pre_process_input(content: Vec, extension: &str) -> Vec { use crate::extractor::pre_processors::*; match extension { - "clj" | "cljs" | "cljc" => Clojure.process(content), - "heex" | "eex" | "ex" | "exs" => Elixir.process(content), - "cshtml" | "razor" => Razor.process(content), - "haml" => Haml.process(content), - "json" => Json.process(content), - "md" | "mdx" => Markdown.process(content), - "pug" => Pug.process(content), - "rb" | "erb" => Ruby.process(content), - "slim" | "slang" => Slim.process(content), - "svelte" => Svelte.process(content), - "rs" => Rust.process(content), - "vue" => Vue.process(content), - _ => content.to_vec(), + "clj" | "cljs" | "cljc" => Clojure.process(&content), + "heex" | "eex" | "ex" | "exs" => Elixir.process(&content), + "cshtml" | "razor" => Razor.process(&content), + "haml" => Haml.process(&content), + "json" => Json.process(&content), + "md" | "mdx" => Markdown.process(&content), + "pug" => Pug.process(&content), + "rb" | "erb" => Ruby.process(&content), + "slim" | "slang" => Slim.process(&content), + "svelte" => Svelte.process(&content), + "rs" => Rust.process(&content), + "vue" => Vue.process(&content), + _ => content, } } @@ -512,23 +501,23 @@ fn read_all_files(changed_content: Vec) -> Vec> { } #[tracing::instrument(skip_all)] -fn extract_css_variables(blobs: Vec>) -> Vec { +fn extract_css_variables(blobs: Vec>) -> FxHashSet { extract(blobs, |mut extractor| { extractor.extract_variables_from_css() }) } #[tracing::instrument(skip_all)] -fn parse_all_blobs(blobs: Vec>) -> Vec { +fn parse_all_blobs(blobs: Vec>) -> FxHashSet { extract(blobs, |mut extractor| extractor.extract()) } #[tracing::instrument(skip_all)] -fn extract(blobs: Vec>, handle: H) -> Vec +fn extract(blobs: Vec>, handle: H) -> FxHashSet where H: Fn(Extractor) -> Vec + std::marker::Sync, { - let mut result: Vec<_> = blobs + blobs .par_iter() .flat_map(|blob| blob.par_split(|x| *x == b'\n')) .filter_map(|blob| { @@ -554,22 +543,97 @@ where }) .into_iter() .map(|s| unsafe { String::from_utf8_unchecked(s.to_vec()) }) - .collect(); + .collect() +} + +type WalkEntry = (PathBuf, bool, String); - // SAFETY: Unstable sort is faster and in this scenario it's also safe because we are - // guaranteed to have unique candidates. - result.par_sort_unstable(); +/// Walk the file system synchronously. Used for the initial build where the overhead of spawning +/// parallel walker threads is not worth it. +#[tracing::instrument(skip_all)] +fn walk_synchronous(walker: &mut WalkBuilder) -> Vec { + let mut entries = Vec::new(); + + for entry in walker.build().filter_map(Result::ok) { + let is_dir = entry.file_type().map(|ft| ft.is_dir()).unwrap_or(false); + let path = entry.into_path(); + + if is_dir { + entries.push((path, true, String::new())); + } else { + let ext = path + .extension() + .and_then(|x| x.to_str()) + .unwrap_or_default() + .to_owned(); + entries.push((path, false, ext)); + } + } - result + entries } -/// Create a walker for the given sources to detect all the files that we have to scan. +/// Walk the file system in parallel. Used in watch mode where the parallel walker overhead is +/// amortised across many rebuilds and subsequent calls are much faster. +#[tracing::instrument(skip_all)] +fn walk_parallel(walker: &mut WalkBuilder) -> Vec { + struct FlushOnDrop { + local: Vec, + shared: Arc>>, + } + + impl Drop for FlushOnDrop { + fn drop(&mut self) { + if !self.local.is_empty() { + self.shared.lock().unwrap().append(&mut self.local); + } + } + } + + let collected: Arc>> = Arc::new(Mutex::new(Vec::new())); + + walker.build_parallel().run(|| { + let mut buf = FlushOnDrop { + local: Vec::with_capacity(256), + shared: collected.clone(), + }; + + Box::new(move |entry| { + let Ok(entry) = entry else { + return ignore::WalkState::Continue; + }; + + let is_dir = entry.file_type().map(|ft| ft.is_dir()).unwrap_or(false); + let path = entry.into_path(); + + if is_dir { + buf.local.push((path, true, String::new())); + } else { + let ext = path + .extension() + .and_then(|x| x.to_str()) + .unwrap_or_default() + .to_owned(); + buf.local.push((path, false, ext)); + } + + if buf.local.len() >= 256 { + buf.shared.lock().unwrap().append(&mut buf.local); + } + + ignore::WalkState::Continue + }) + }); + + // All threads have finished and flushed their buffers via FlushOnDrop::drop + Arc::try_unwrap(collected).unwrap().into_inner().unwrap() +} + +/// Sets up a WalkBuilder with all source roots, gitignore rules, and source pattern matching. /// -/// The `mtimes` map is used to keep track of the last modified time of each file. This is used to -/// determine if a file or folder has changed since the last scan and we can skip folders that -/// haven't changed. -fn create_walker(sources: Sources) -> Option { - let mtimes: Arc>> = Default::default(); +/// This is the common setup shared between the full walker (with mtime tracking for re-scans) +/// and the parallel walker (without mtime tracking for the initial scan). +fn create_walker(sources: &Sources) -> Option { let mut other_roots: FxHashSet<&PathBuf> = FxHashSet::default(); let mut first_root: Option<&PathBuf> = None; let mut ignores: BTreeMap<&PathBuf, BTreeSet> = Default::default(); @@ -717,75 +781,68 @@ fn create_walker(sources: Sources) -> Option { builder.add_gitignore(ignore); } - builder.filter_entry({ - move |entry| { - let path = entry.path(); - - // Ensure the entries are matching any of the provided source patterns (this is - // necessary for manual-patterns that can filter the file extension) - if path.is_file() { - let mut matches = false; - for source in sources.iter() { - match source { - SourceEntry::Auto { base } | SourceEntry::External { base } => { - if path.starts_with(base) { - matches = true; - break; - } - } - SourceEntry::Pattern { base, pattern } => { - let mut pattern = pattern.to_string(); - // Ensure that the pattern is pinned to the base path. - if !pattern.starts_with("/") { - pattern = format!("/{pattern}"); - } - - // Check if path starts with base, if so, remove the prefix and check the remainder against the pattern - let remainder = path.strip_prefix(base); - if remainder.is_ok_and(|remainder| { - let mut path_str = remainder.to_string_lossy().to_string(); - if !path_str.starts_with("/") { - path_str = format!("/{path_str}"); - } - glob_match(pattern, path_str.as_bytes()) - }) { - matches = true; - break; - } - } - _ => {} - } - } + // Pre-compute source matching data to avoid allocations in the hot filter_entry path + let auto_bases: Vec = sources + .iter() + .filter_map(|source| match source { + SourceEntry::Auto { base } | SourceEntry::External { base } => Some(base.clone()), + _ => None, + }) + .collect(); - if !matches { - return false; - } + let pattern_sources: Vec<(PathBuf, String)> = sources + .iter() + .filter_map(|source| match source { + SourceEntry::Pattern { base, pattern } => { + let normalized = if pattern.starts_with("/") { + pattern.to_string() + } else { + format!("/{pattern}") + }; + Some((base.clone(), normalized)) } + _ => None, + }) + .collect(); - let mut mtimes = mtimes.lock().unwrap(); - let current_time = match entry.metadata() { - Ok(metadata) if metadata.is_file() => { - if let Ok(time) = metadata.modified() { - Some(time) - } else { - None - } - } - _ => None, - }; + // Source pattern matching filter (lock-free, safe for parallel walking) + builder.filter_entry(move |entry| { + let path = entry.path(); - let previous_time = - current_time.and_then(|time| mtimes.insert(entry.clone().into_path(), time)); + // Ensure the entries are matching any of the provided source patterns (this is + // necessary for manual-patterns that can filter the file extension) + if path.is_file() { + let mut matches = false; - match (current_time, previous_time) { - (Some(current), Some(prev)) if prev == current => false, - _ => { - event!(tracing::Level::INFO, "Discovering {:?}", path); + for base in &auto_bases { + if path.starts_with(base) { + matches = true; + break; + } + } - true + if !matches { + for (base, pattern) in &pattern_sources { + let remainder = path.strip_prefix(base); + if remainder.is_ok_and(|remainder| { + let mut path_str = remainder.to_string_lossy().to_string(); + if !path_str.starts_with("/") { + path_str = format!("/{path_str}"); + } + glob_match(pattern, path_str.as_bytes()) + }) { + matches = true; + break; + } } } + + if !matches { + return false; + } } + + true }); Some(builder) From bc6e4b85bf1dce84e2947f81cbb9881a77427de7 Mon Sep 17 00:00:00 2001 From: Andrey Viktorov Date: Wed, 18 Feb 2026 02:59:57 +0700 Subject: [PATCH 081/100] Fallback to `config.createResolver` for `client` and `ssr` environments in `@tailwindcss/vite` (#19679) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Sometimes even if Vite Envrionment API is available, some plugins are still override `config.createResolver` function to inject own aliases Since technically `config.createResolver` was only [properly deprecated](https://github.com/vitejs/vite/pull/20031) in Vite 7.0.0, it's still a valid(-ish) to do so, even if it wasn't ever officially supported Vite already handles this in its internal css resolvers, but not exposes the code to do so as part of public API, so I've copied and adapted it Fixes #19677 ## Test plan Tested by copying built package into my repro from the issue, also ran vite integration tests --------- Co-authored-by: Robin Malfait --- CHANGELOG.md | 1 + integrations/vite/astro.test.ts | 72 ++++++++++++++++++++++++- packages/@tailwindcss-vite/src/index.ts | 40 ++++++++++++-- 3 files changed, 109 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0657008292ef..3feec133112d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Allow multiples of `.25` in `aspect-*` fractions ([#19688](https://github.com/tailwindlabs/tailwindcss/pull/19688)) - Ensure changes to external files listed via `@source` trigger a full page reload when using `@tailwindcss/vite` ([#19670](https://github.com/tailwindlabs/tailwindcss/pull/19670)) - Improve performance Oxide scanner in bigger projects ([#19632](https://github.com/tailwindlabs/tailwindcss/pull/19632)) +- Ensure import aliases in Astro v5 work without crashing ([#19677](https://github.com/tailwindlabs/tailwindcss/issues/19677)) ### Deprecated diff --git a/integrations/vite/astro.test.ts b/integrations/vite/astro.test.ts index 43406624c316..f828b5071b60 100644 --- a/integrations/vite/astro.test.ts +++ b/integrations/vite/astro.test.ts @@ -1,4 +1,4 @@ -import { candidate, fetchStyles, html, js, json, retryAssertion, test, ts } from '../utils' +import { candidate, css, fetchStyles, html, js, json, retryAssertion, test, ts } from '../utils' test( 'dev mode', @@ -129,3 +129,73 @@ test( await fs.expectFileToContain(files[0][0], [candidate`underline`, candidate`overline`]) }, ) + +// https://github.com/tailwindlabs/tailwindcss/issues/19677 +test( + 'import aliases should work in + + +

Astro

+ + + `, + 'src/styles/global.css': css`@import 'tailwindcss';`, + }, + }, + async ({ fs, exec, expect }) => { + await exec('pnpm astro build') + + let files = await fs.glob('dist/**/*.css') + expect(files).toHaveLength(1) + + await fs.expectFileToContain(files[0][0], [candidate`underline`]) + }, +) diff --git a/packages/@tailwindcss-vite/src/index.ts b/packages/@tailwindcss-vite/src/index.ts index d7d46c77222a..3ab7c3a0f2f8 100644 --- a/packages/@tailwindcss-vite/src/index.ts +++ b/packages/@tailwindcss-vite/src/index.ts @@ -12,7 +12,13 @@ import { Scanner } from '@tailwindcss/oxide' import { realpathSync } from 'node:fs' import fs from 'node:fs/promises' import path from 'node:path' -import type { Environment, Plugin, ResolvedConfig, ViteDevServer } from 'vite' +import type { + Environment, + InternalResolveOptions, + Plugin, + ResolvedConfig, + ViteDevServer, +} from 'vite' import * as vite from 'vite' const DEBUG = env.DEBUG @@ -59,8 +65,36 @@ export default function tailwindcss(opts: PluginOptions = {}): Plugin[] { customCssResolver = (id: string, base: string) => cssResolver(id, base, true, isSSR) customJsResolver = (id: string, base: string) => jsResolver(id, base, true, isSSR) } else { + type ResolveIdFn = ( + environment: Environment, + id: string, + importer?: string, + aliasOnly?: boolean, + ) => Promise + + // There are cases where Environment API is available, + // but `createResolver` is still overriden (for example astro v5) + // + // Copied as-is from vite, because this function is not a part of public API + // + // TODO: Remove this function and pre-environment code when Vite < 7 is no longer supported + function createBackCompatIdResolver( + config: ResolvedConfig, + options?: Partial, + ): ResolveIdFn { + const compatResolve = config.createResolver(options) + let resolve: ResolveIdFn + return async (environment, id, importer, aliasOnly) => { + if (environment.name === 'client' || environment.name === 'ssr') { + return compatResolve(id, importer, aliasOnly, environment.name === 'ssr') + } + resolve ??= vite.createIdResolver(config, options) + return resolve(environment, id, importer, aliasOnly) + } + } + // Newer Vite versions - let cssResolver = vite.createIdResolver(env.config, { + let cssResolver = createBackCompatIdResolver(env.config, { ...env.config.resolve, extensions: ['.css'], mainFields: ['style'], @@ -69,7 +103,7 @@ export default function tailwindcss(opts: PluginOptions = {}): Plugin[] { preferRelative: true, }) - let jsResolver = vite.createIdResolver(env.config, env.config.resolve) + let jsResolver = createBackCompatIdResolver(env.config, env.config.resolve) customCssResolver = (id: string, base: string) => cssResolver(env, id, base, true) customJsResolver = (id: string, base: string) => jsResolver(env, id, base, true) From ed52d3e6c9c20ca2a1c23d57d346ac399ebe9400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=B3zsa=20Zolt=C3=A1n?= <67325669+rozsazoltan@users.noreply.github.com> Date: Tue, 17 Feb 2026 22:12:20 +0100 Subject: [PATCH 082/100] feat: handle backslash in `@utility` name (#19626) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves #19607 ## Summary I believe there is no obstacle to simply ignoring backslashes in the name. This way, various validators - which are not aware of Tailwind CSS's specific syntax (which allows the `/` character to be used directly in utility names) - can still be bypassed using backslashes. For example, instead of `@utility push-1/2`, one could use `@utility push-1\/2`, while the end result would be identical. ## Test plan I took a previous utility test as a baseline and extended it with backslashes, and I expect the same result in the output as in the original test case: * https://github.com/rozsazoltan/tailwindcss/blob/main/packages/tailwindcss/src/utilities.test.ts#L28553-L28567 (the original test case I started from) * https://github.com/rozsazoltan/tailwindcss/blob/feat/handle-blackslash-in-utility-name/packages/tailwindcss/src/index.test.ts#L4640-L4654 (the current PR's test) --------- Co-authored-by: Robin Malfait --- CHANGELOG.md | 1 + packages/tailwindcss/src/index.test.ts | 25 +++++++++++++++++++++++++ packages/tailwindcss/src/utilities.ts | 7 ++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3feec133112d..f6d9407f68e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Ensure changes to external files listed via `@source` trigger a full page reload when using `@tailwindcss/vite` ([#19670](https://github.com/tailwindlabs/tailwindcss/pull/19670)) - Improve performance Oxide scanner in bigger projects ([#19632](https://github.com/tailwindlabs/tailwindcss/pull/19632)) - Ensure import aliases in Astro v5 work without crashing ([#19677](https://github.com/tailwindlabs/tailwindcss/issues/19677)) +- Allow escape characters in `@utility` names to improve support with formatters such as Biome ([#19626](https://github.com/tailwindlabs/tailwindcss/pull/19626)) ### Deprecated diff --git a/packages/tailwindcss/src/index.test.ts b/packages/tailwindcss/src/index.test.ts index 1534f84cf902..3bc3edad33eb 100644 --- a/packages/tailwindcss/src/index.test.ts +++ b/packages/tailwindcss/src/index.test.ts @@ -4729,6 +4729,31 @@ describe('@utility', () => { ) }) + test('@utility can handle escape sequences correctly', async () => { + let { build } = await compile(css` + @layer utilities { + @tailwind utilities; + } + + @utility push-1\/2 { + right: 50%; + } + + @utility push-50\% { + right: 50%; + } + `) + let compiled = build(['push-1/2', 'push-50%']) + + expect(optimizeCss(compiled).trim()).toMatchInlineSnapshot(` + "@layer utilities { + .push-1\\/2, .push-50\\% { + right: 50%; + } + }" + `) + }) + test('A functional @utility must end in -*', () => { return expect( compileCss(css` diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index 015821e4e833..69837e0d3345 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -16,6 +16,7 @@ import { enableContainerSizeUtility } from './feature-flags' import type { Theme, ThemeKey } from './theme' import { compareBreakpoints } from './utils/compare-breakpoints' import { DefaultMap } from './utils/default-map' +import { unescape } from './utils/escape' import { inferDataType, isPositiveInteger, @@ -5939,7 +5940,11 @@ export const BARE_VALUE_DATA_TYPES = [ ] export function createCssUtility(node: AtRule) { - let name = node.params + // Allow escaped characters in the name for compatibility with formatters and + // other parsers, to ensure valid CSS syntax. E.g.: `@utility foo-1\/2`. + // + // Note: the actual utility will be `foo-1/2` + let name = unescape(node.params) // Functional utilities. E.g.: `tab-size-*` if (isValidFunctionalUtilityName(name)) { From d9fff9f5956433e362dc231ca16dcd77497def76 Mon Sep 17 00:00:00 2001 From: Pavan Shinde Date: Wed, 18 Feb 2026 16:22:07 +0530 Subject: [PATCH 083/100] docs: update package README CI badge to main (#19692) ## Summary Update the GitHub Actions CI status badge URLs in `packages/*/README.md` to track `branch=main` instead of `branch=next`. This matches the root README, keeps the badges consistent across the repo, and ensures the displayed CI status reflects the default branch. ## Test plan Docs-only change. Verified the updated badge URLs in the modified `packages/*/README.md` files use `ci.yml?branch=main`. --- packages/@tailwindcss-browser/README.md | 2 +- packages/@tailwindcss-cli/README.md | 2 +- packages/@tailwindcss-node/README.md | 2 +- packages/@tailwindcss-postcss/README.md | 2 +- packages/@tailwindcss-upgrade/README.md | 2 +- packages/@tailwindcss-vite/README.md | 2 +- packages/tailwindcss/README.md | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/@tailwindcss-browser/README.md b/packages/@tailwindcss-browser/README.md index 4c2e56fffa13..5f532607d00a 100644 --- a/packages/@tailwindcss-browser/README.md +++ b/packages/@tailwindcss-browser/README.md @@ -13,7 +13,7 @@

- Build Status + Build Status Total Downloads Latest Release License diff --git a/packages/@tailwindcss-cli/README.md b/packages/@tailwindcss-cli/README.md index 4c2e56fffa13..5f532607d00a 100644 --- a/packages/@tailwindcss-cli/README.md +++ b/packages/@tailwindcss-cli/README.md @@ -13,7 +13,7 @@

- Build Status + Build Status Total Downloads Latest Release License diff --git a/packages/@tailwindcss-node/README.md b/packages/@tailwindcss-node/README.md index 4c2e56fffa13..5f532607d00a 100644 --- a/packages/@tailwindcss-node/README.md +++ b/packages/@tailwindcss-node/README.md @@ -13,7 +13,7 @@

- Build Status + Build Status Total Downloads Latest Release License diff --git a/packages/@tailwindcss-postcss/README.md b/packages/@tailwindcss-postcss/README.md index 2313ccb7725f..6aec3fe253de 100644 --- a/packages/@tailwindcss-postcss/README.md +++ b/packages/@tailwindcss-postcss/README.md @@ -13,7 +13,7 @@

- Build Status + Build Status Total Downloads Latest Release License diff --git a/packages/@tailwindcss-upgrade/README.md b/packages/@tailwindcss-upgrade/README.md index 4c2e56fffa13..5f532607d00a 100644 --- a/packages/@tailwindcss-upgrade/README.md +++ b/packages/@tailwindcss-upgrade/README.md @@ -13,7 +13,7 @@

- Build Status + Build Status Total Downloads Latest Release License diff --git a/packages/@tailwindcss-vite/README.md b/packages/@tailwindcss-vite/README.md index 6e3688b875ef..1a5d25c73652 100644 --- a/packages/@tailwindcss-vite/README.md +++ b/packages/@tailwindcss-vite/README.md @@ -13,7 +13,7 @@

- Build Status + Build Status Total Downloads Latest Release License diff --git a/packages/tailwindcss/README.md b/packages/tailwindcss/README.md index 4c2e56fffa13..5f532607d00a 100644 --- a/packages/tailwindcss/README.md +++ b/packages/tailwindcss/README.md @@ -13,7 +13,7 @@

- Build Status + Build Status Total Downloads Latest Release License From d0a56128721b7be01703b7879056f38443239fc5 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Wed, 18 Feb 2026 05:52:35 -0500 Subject: [PATCH 084/100] Add mauve, olive, mist, and taupe color palettes (#19627) ## Summary This PR adds four new neutral color palettes to Tailwind CSS: `mauve`, `olive`, `mist`, and `taupe`. Each palette includes 11 shades (50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950) defined using the OKLch color space for perceptually uniform color transitions. These new palettes expand the available neutral color options beyond the existing stone, slate, gray, zinc, and neutral palettes, providing designers with more nuanced choices for different design systems and brand aesthetics. The changes include: - Added color definitions to `packages/tailwindcss/src/compat/colors.ts` - Added corresponding CSS custom properties to `packages/tailwindcss/theme.css` ## Test plan To verify these changes: 1. Build the project and ensure no compilation errors occur 2. Verify that the new color palettes are available in the Tailwind config 3. Test that utilities like `bg-mauve-500`, `text-olive-600`, `border-mist-300`, and `ring-taupe-400` work correctly 4. Confirm that the colors render with proper OKLch values in the browser https://claude.ai/code/session_01QhC1ZYkW3pCd55WbbqYBNV --------- Co-authored-by: Claude Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Robin Malfait --- CHANGELOG.md | 3 +- packages/tailwindcss/src/compat/colors.ts | 52 +++++++++++++++++++ .../src/source-maps/source-map.test.ts | 4 +- packages/tailwindcss/theme.css | 48 +++++++++++++++++ 4 files changed, 104 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6d9407f68e8..376db05cc4c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,12 +10,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) +- Add `mauve`, `olive`, `mist`, and `taupe` color palettes to the default theme ([`#19627`](https://github.com/tailwindlabs/tailwindcss/pull/19627)) - Add `@tailwindcss/webpack` loader for Tailwind CSS v4 ([#19610](https://github.com/tailwindlabs/tailwindcss/pull/19610)) - Add `pbs-*`, `pbe-*`, `mbs-*`, `mbe-*`, `scroll-pbs-*`, `scroll-pbe-*`, `scroll-mbs-*`, `scroll-mbe-*`, `border-bs-*`, `border-be-*` utilities for `padding-block-start`, `padding-block-end`, `margin-block-start`, `margin-block-end`, `scroll-padding-block-start`, `scroll-padding-block-end`, `scroll-margin-block-start`, `scroll-margin-block-end`, `border-block-start`, and `border-block-end` ([`#19601`](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - Add `inline-*`, `min-inline-*`, `max-inline-*`, `block-*`, `min-block-*`, `max-block-*` utilities for `inline-size`, `min-inline-size`, `max-inline-size`, `block-size`, `min-block-size`, and `max-block-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) - Add `inset-s-*`, `inset-e-*`, `inset-bs-*`, `inset-be-*` utilities for `inset-inline-start`, `inset-inline-end`, `inset-block-start`, and `inset-block-end` ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) - Add `font-features-*` utility for `font-feature-settings` ([#19623](https://github.com/tailwindlabs/tailwindcss/pull/19615)) -- Add '.jj' to ignored content directories ([#19687](https://github.com/tailwindlabs/tailwindcss/pull/19687)) +- Add `.jj` to ignored content directories ([#19687](https://github.com/tailwindlabs/tailwindcss/pull/19687)) ### Fixed diff --git a/packages/tailwindcss/src/compat/colors.ts b/packages/tailwindcss/src/compat/colors.ts index 2f443b4b65e1..a1d162c54b06 100644 --- a/packages/tailwindcss/src/compat/colors.ts +++ b/packages/tailwindcss/src/compat/colors.ts @@ -69,6 +69,58 @@ export default { '900': 'oklch(21.6% 0.006 56.043)', '950': 'oklch(14.7% 0.004 49.25)', }, + mauve: { + '50': 'oklch(98.5% 0 0)', + '100': 'oklch(96% 0.003 325.6)', + '200': 'oklch(92.2% 0.005 325.62)', + '300': 'oklch(86.5% 0.012 325.68)', + '400': 'oklch(71.1% 0.019 323.02)', + '500': 'oklch(54.2% 0.034 322.5)', + '600': 'oklch(43.5% 0.029 321.78)', + '700': 'oklch(36.4% 0.029 323.89)', + '800': 'oklch(26.3% 0.024 320.12)', + '900': 'oklch(21.2% 0.019 322.12)', + '950': 'oklch(14.5% 0.008 326)', + }, + olive: { + '50': 'oklch(98.8% 0.003 106.5)', + '100': 'oklch(96.6% 0.005 106.5)', + '200': 'oklch(93% 0.007 106.5)', + '300': 'oklch(88% 0.011 106.6)', + '400': 'oklch(73.7% 0.021 106.9)', + '500': 'oklch(58% 0.031 107.3)', + '600': 'oklch(46.6% 0.025 107.3)', + '700': 'oklch(39.4% 0.023 107.4)', + '800': 'oklch(28.6% 0.016 107.4)', + '900': 'oklch(22.8% 0.013 107.4)', + '950': 'oklch(15.3% 0.006 107.1)', + }, + mist: { + '50': 'oklch(98.7% 0.002 197.1)', + '100': 'oklch(96.3% 0.002 197.1)', + '200': 'oklch(92.5% 0.005 214.3)', + '300': 'oklch(87.2% 0.007 219.6)', + '400': 'oklch(72.3% 0.014 214.4)', + '500': 'oklch(56% 0.021 213.5)', + '600': 'oklch(45% 0.017 213.2)', + '700': 'oklch(37.8% 0.015 216)', + '800': 'oklch(27.5% 0.011 216.9)', + '900': 'oklch(21.8% 0.008 223.9)', + '950': 'oklch(14.8% 0.004 228.8)', + }, + taupe: { + '50': 'oklch(98.6% 0.002 67.8)', + '100': 'oklch(96% 0.002 17.2)', + '200': 'oklch(92.2% 0.005 34.3)', + '300': 'oklch(86.8% 0.007 39.5)', + '400': 'oklch(71.4% 0.014 41.2)', + '500': 'oklch(54.7% 0.021 43.1)', + '600': 'oklch(43.8% 0.017 39.3)', + '700': 'oklch(36.7% 0.016 35.7)', + '800': 'oklch(26.8% 0.011 36.5)', + '900': 'oklch(21.4% 0.009 43.1)', + '950': 'oklch(14.7% 0.004 49.3)', + }, red: { '50': 'oklch(97.1% 0.013 17.38)', '100': 'oklch(93.6% 0.032 17.717)', diff --git a/packages/tailwindcss/src/source-maps/source-map.test.ts b/packages/tailwindcss/src/source-maps/source-map.test.ts index 8433e8aa031a..02d8a434acb4 100644 --- a/packages/tailwindcss/src/source-maps/source-map.test.ts +++ b/packages/tailwindcss/src/source-maps/source-map.test.ts @@ -178,8 +178,8 @@ test('source maps trace back to @import location', async ({ expect }) => { 'theme.css: 5:22 <- 4:22', 'theme.css: 6:4 <- 6:2-8:0', 'theme.css: 7:13 <- 8:13', - 'theme.css: 8:4-43 <- 446:2-54', - 'theme.css: 9:4-48 <- 449:2-59', + 'theme.css: 8:4-43 <- 494:2-54', + 'theme.css: 9:4-48 <- 497:2-59', 'index.css: 12:0-12 <- 4:0-37', 'preflight.css: 13:2-59 <- 7:0-11:23', 'preflight.css: 14:4-26 <- 12:2-24', diff --git a/packages/tailwindcss/theme.css b/packages/tailwindcss/theme.css index 52d447f7ffa0..502f5c752293 100644 --- a/packages/tailwindcss/theme.css +++ b/packages/tailwindcss/theme.css @@ -271,6 +271,54 @@ --color-stone-900: oklch(21.6% 0.006 56.043); --color-stone-950: oklch(14.7% 0.004 49.25); + --color-mauve-50: oklch(98.5% 0 0); + --color-mauve-100: oklch(96% 0.003 325.6); + --color-mauve-200: oklch(92.2% 0.005 325.62); + --color-mauve-300: oklch(86.5% 0.012 325.68); + --color-mauve-400: oklch(71.1% 0.019 323.02); + --color-mauve-500: oklch(54.2% 0.034 322.5); + --color-mauve-600: oklch(43.5% 0.029 321.78); + --color-mauve-700: oklch(36.4% 0.029 323.89); + --color-mauve-800: oklch(26.3% 0.024 320.12); + --color-mauve-900: oklch(21.2% 0.019 322.12); + --color-mauve-950: oklch(14.5% 0.008 326); + + --color-olive-50: oklch(98.8% 0.003 106.5); + --color-olive-100: oklch(96.6% 0.005 106.5); + --color-olive-200: oklch(93% 0.007 106.5); + --color-olive-300: oklch(88% 0.011 106.6); + --color-olive-400: oklch(73.7% 0.021 106.9); + --color-olive-500: oklch(58% 0.031 107.3); + --color-olive-600: oklch(46.6% 0.025 107.3); + --color-olive-700: oklch(39.4% 0.023 107.4); + --color-olive-800: oklch(28.6% 0.016 107.4); + --color-olive-900: oklch(22.8% 0.013 107.4); + --color-olive-950: oklch(15.3% 0.006 107.1); + + --color-mist-50: oklch(98.7% 0.002 197.1); + --color-mist-100: oklch(96.3% 0.002 197.1); + --color-mist-200: oklch(92.5% 0.005 214.3); + --color-mist-300: oklch(87.2% 0.007 219.6); + --color-mist-400: oklch(72.3% 0.014 214.4); + --color-mist-500: oklch(56% 0.021 213.5); + --color-mist-600: oklch(45% 0.017 213.2); + --color-mist-700: oklch(37.8% 0.015 216); + --color-mist-800: oklch(27.5% 0.011 216.9); + --color-mist-900: oklch(21.8% 0.008 223.9); + --color-mist-950: oklch(14.8% 0.004 228.8); + + --color-taupe-50: oklch(98.6% 0.002 67.8); + --color-taupe-100: oklch(96% 0.002 17.2); + --color-taupe-200: oklch(92.2% 0.005 34.3); + --color-taupe-300: oklch(86.8% 0.007 39.5); + --color-taupe-400: oklch(71.4% 0.014 41.2); + --color-taupe-500: oklch(54.7% 0.021 43.1); + --color-taupe-600: oklch(43.8% 0.017 39.3); + --color-taupe-700: oklch(36.7% 0.016 35.7); + --color-taupe-800: oklch(26.8% 0.011 36.5); + --color-taupe-900: oklch(21.4% 0.009 43.1); + --color-taupe-950: oklch(14.7% 0.004 49.3); + --color-black: #000; --color-white: #fff; From 06b6473fccc1178ecc432a682013e53c86927cd3 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 11:58:33 +0100 Subject: [PATCH 085/100] =?UTF-8?q?Update=20@types/react=2019.2.10=20?= =?UTF-8?q?=E2=86=92=2019.2.14=20(patch)=20(#19681)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ @​types/react (19.2.10 → 19.2.14) · [Repo](https://github.com/DefinitelyTyped/DefinitelyTyped) Sorry, we couldn't find anything useful about this release. --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.

All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- playgrounds/nextjs/package.json | 2 +- playgrounds/v3/package.json | 2 +- playgrounds/vite/package.json | 2 +- pnpm-lock.yaml | 32 ++++++++++++++++---------------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/playgrounds/nextjs/package.json b/playgrounds/nextjs/package.json index a996f3eab11c..4e56fd3092e1 100644 --- a/playgrounds/nextjs/package.json +++ b/playgrounds/nextjs/package.json @@ -18,7 +18,7 @@ }, "devDependencies": { "@types/node": "catalog:", - "@types/react": "^19.2.10", + "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "eslint": "^9.39.2", "eslint-config-next": "^16.1.6", diff --git a/playgrounds/v3/package.json b/playgrounds/v3/package.json index b54e5fae5af2..15449f6405bd 100644 --- a/playgrounds/v3/package.json +++ b/playgrounds/v3/package.json @@ -16,7 +16,7 @@ }, "devDependencies": { "@types/node": "catalog:", - "@types/react": "^19.2.10", + "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "autoprefixer": "^10.4.24", "eslint": "^9.39.2", diff --git a/playgrounds/vite/package.json b/playgrounds/vite/package.json index 1219e79b9f64..903b8db1da40 100644 --- a/playgrounds/vite/package.json +++ b/playgrounds/vite/package.json @@ -16,7 +16,7 @@ "tailwindcss": "workspace:^" }, "devDependencies": { - "@types/react": "^19.2.10", + "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "bun": "^1.3.7", "vite": "catalog:" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a65a5ce8502b..e584e93a67a1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -521,17 +521,17 @@ importers: specifier: 'catalog:' version: 20.19.1 '@types/react': - specifier: ^19.2.10 - version: 19.2.10 + specifier: ^19.2.14 + version: 19.2.14 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.10) + version: 19.2.3(@types/react@19.2.14) eslint: specifier: ^9.39.2 version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.6 - version: 16.1.6(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 16.1.6(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -555,11 +555,11 @@ importers: specifier: 'catalog:' version: 20.19.1 '@types/react': - specifier: ^19.2.10 - version: 19.2.10 + specifier: ^19.2.14 + version: 19.2.14 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.10) + version: 19.2.3(@types/react@19.2.14) autoprefixer: specifier: ^10.4.24 version: 10.4.24(postcss@8.5.6) @@ -568,7 +568,7 @@ importers: version: 9.39.2(jiti@2.6.1) eslint-config-next: specifier: ^16.1.6 - version: 16.1.6(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 16.1.6(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -592,11 +592,11 @@ importers: version: link:../../packages/tailwindcss devDependencies: '@types/react': - specifier: ^19.2.10 - version: 19.2.10 + specifier: ^19.2.14 + version: 19.2.14 '@types/react-dom': specifier: ^19.2.3 - version: 19.2.3(@types/react@19.2.10) + version: 19.2.3(@types/react@19.2.14) bun: specifier: ^1.3.7 version: 1.3.7 @@ -2487,8 +2487,8 @@ packages: peerDependencies: '@types/react': ^19.2.0 - '@types/react@19.2.10': - resolution: {integrity: sha512-WPigyYuGhgZ/cTPRXB2EwUw+XvsRA3GqHlsP4qteqrnnjDrApbS7MxcGr/hke5iUoeB7E/gQtrs9I37zAJ0Vjw==} + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} @@ -6433,11 +6433,11 @@ snapshots: dependencies: postcss: 8.5.6 - '@types/react-dom@19.2.3(@types/react@19.2.10)': + '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: - '@types/react': 19.2.10 + '@types/react': 19.2.14 - '@types/react@19.2.10': + '@types/react@19.2.14': dependencies: csstype: 3.2.3 From fb42a3ff9ee59f6177d59316f4886805ce64a15e Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 11:58:49 +0100 Subject: [PATCH 086/100] =?UTF-8?q?Update=20semver=207.7.3=20=E2=86=92=207?= =?UTF-8?q?.7.4=20(patch)=20(#19667)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ semver (7.7.3 → 7.7.4) · [Repo](https://github.com/npm/node-semver) · [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
Release Notes

7.7.4

7.7.4 (2026-01-16)

Bug Fixes

Documentation

Dependencies

Chores

Does any of this look wrong? Please let us know.

Commits

See the full diff on Github. The new version differs by 10 commits:

--- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- packages/@tailwindcss-upgrade/package.json | 2 +- pnpm-lock.yaml | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/@tailwindcss-upgrade/package.json b/packages/@tailwindcss-upgrade/package.json index e1490711b622..0775ab745d32 100644 --- a/packages/@tailwindcss-upgrade/package.json +++ b/packages/@tailwindcss-upgrade/package.json @@ -40,7 +40,7 @@ "postcss-import": "^16.1.1", "postcss-selector-parser": "^7.1.1", "prettier": "catalog:", - "semver": "^7.7.3", + "semver": "^7.7.4", "tailwindcss": "workspace:*", "tree-sitter": "^0.22.4", "tree-sitter-typescript": "^0.23.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e584e93a67a1..10a38f617c64 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -404,8 +404,8 @@ importers: specifier: 'catalog:' version: 3.8.1 semver: - specifier: ^7.7.3 - version: 7.7.3 + specifier: ^7.7.4 + version: 7.7.4 tailwindcss: specifier: workspace:* version: link:../tailwindcss @@ -4343,6 +4343,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -6514,7 +6519,7 @@ snapshots: fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.3 + semver: 7.7.4 ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -7850,7 +7855,7 @@ snapshots: is-bun-module@1.2.1: dependencies: - semver: 7.7.3 + semver: 7.7.4 is-callable@1.2.7: {} @@ -8611,6 +8616,8 @@ snapshots: semver@7.7.3: {} + semver@7.7.4: {} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -8641,7 +8648,7 @@ snapshots: dependencies: '@img/colour': 1.0.0 detect-libc: 2.1.2 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: '@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5 From d9c4cd8c7ca8f406644770a4e7731e8102ca2723 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 11:59:11 +0100 Subject: [PATCH 087/100] =?UTF-8?q?Update=20enhanced-resolve=205.18.4=20?= =?UTF-8?q?=E2=86=92=205.19.0=20(minor)=20(#19658)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ enhanced-resolve (5.18.4 → 5.19.0) · [Repo](https://github.com/webpack/enhanced-resolve)
Release Notes

5.19.0

Features

  • Added TsconfigPathsPlugin (replacement for tsconfig-paths-webpack-plugin) .

Does any of this look wrong? Please let us know.

Commits

See the full diff on Github. The new version differs by 4 commits:

--- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- packages/@tailwindcss-cli/package.json | 2 +- packages/@tailwindcss-node/package.json | 2 +- packages/@tailwindcss-standalone/package.json | 2 +- packages/@tailwindcss-upgrade/package.json | 2 +- pnpm-lock.yaml | 36 ++++++++----------- 5 files changed, 19 insertions(+), 25 deletions(-) diff --git a/packages/@tailwindcss-cli/package.json b/packages/@tailwindcss-cli/package.json index 346d244ec3bf..749c06c5f5f7 100644 --- a/packages/@tailwindcss-cli/package.json +++ b/packages/@tailwindcss-cli/package.json @@ -32,7 +32,7 @@ "@parcel/watcher": "^2.5.1", "@tailwindcss/node": "workspace:*", "@tailwindcss/oxide": "workspace:*", - "enhanced-resolve": "^5.18.4", + "enhanced-resolve": "^5.19.0", "mri": "^1.2.0", "picocolors": "^1.1.1", "tailwindcss": "workspace:*" diff --git a/packages/@tailwindcss-node/package.json b/packages/@tailwindcss-node/package.json index 8afadb378108..9b1c28cab602 100644 --- a/packages/@tailwindcss-node/package.json +++ b/packages/@tailwindcss-node/package.json @@ -38,7 +38,7 @@ }, "dependencies": { "@jridgewell/remapping": "^2.3.5", - "enhanced-resolve": "^5.18.4", + "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "catalog:", "magic-string": "^0.30.21", diff --git a/packages/@tailwindcss-standalone/package.json b/packages/@tailwindcss-standalone/package.json index cdc83f34a622..07aa6dfb8811 100644 --- a/packages/@tailwindcss-standalone/package.json +++ b/packages/@tailwindcss-standalone/package.json @@ -30,7 +30,7 @@ "@tailwindcss/forms": "^0.5.11", "@tailwindcss/typography": "^0.5.19", "detect-libc": "1.0.3", - "enhanced-resolve": "^5.18.4", + "enhanced-resolve": "^5.19.0", "tailwindcss": "workspace:*" }, "__notes": "These binary packages must be included so Bun can build the CLI for all supported platforms. We also rely on Lightning CSS and Parcel being patched so Bun can statically analyze the executables.", diff --git a/packages/@tailwindcss-upgrade/package.json b/packages/@tailwindcss-upgrade/package.json index 0775ab745d32..d30ab3ace894 100644 --- a/packages/@tailwindcss-upgrade/package.json +++ b/packages/@tailwindcss-upgrade/package.json @@ -31,7 +31,7 @@ "@tailwindcss/oxide": "workspace:*", "braces": "^3.0.3", "dedent": "1.7.1", - "enhanced-resolve": "^5.18.4", + "enhanced-resolve": "^5.19.0", "globby": "^15.0.0", "jiti": "^2.0.0-beta.3", "mri": "^1.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 10a38f617c64..60da3997338b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -219,8 +219,8 @@ importers: specifier: workspace:* version: link:../../crates/node enhanced-resolve: - specifier: ^5.18.4 - version: 5.18.4 + specifier: ^5.19.0 + version: 5.19.0 mri: specifier: ^1.2.0 version: 1.2.0 @@ -237,8 +237,8 @@ importers: specifier: ^2.3.5 version: 2.3.5 enhanced-resolve: - specifier: ^5.18.4 - version: 5.18.4 + specifier: ^5.19.0 + version: 5.19.0 jiti: specifier: ^2.6.1 version: 2.6.1 @@ -307,8 +307,8 @@ importers: specifier: 1.0.3 version: 1.0.3 enhanced-resolve: - specifier: ^5.18.4 - version: 5.18.4 + specifier: ^5.19.0 + version: 5.19.0 tailwindcss: specifier: workspace:* version: link:../tailwindcss @@ -377,8 +377,8 @@ importers: specifier: 1.7.1 version: 1.7.1 enhanced-resolve: - specifier: ^5.18.4 - version: 5.18.4 + specifier: ^5.19.0 + version: 5.19.0 globby: specifier: ^15.0.0 version: 15.0.0 @@ -3055,8 +3055,8 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.18.4: - resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} + enhanced-resolve@5.19.0: + resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} engines: {node: '>=10.13.0'} es-abstract@1.24.0: @@ -4524,10 +4524,6 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} @@ -7076,10 +7072,10 @@ snapshots: emoji-regex@9.2.2: {} - enhanced-resolve@5.18.4: + enhanced-resolve@5.19.0: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.1 + tapable: 2.3.0 es-abstract@1.24.0: dependencies: @@ -7327,7 +7323,7 @@ snapshots: dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 - enhanced-resolve: 5.18.4 + enhanced-resolve: 5.19.0 eslint: 9.39.2(jiti@2.6.1) eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.47.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 @@ -7346,7 +7342,7 @@ snapshots: dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 - enhanced-resolve: 5.18.4 + enhanced-resolve: 5.19.0 eslint: 9.39.2(jiti@2.6.1) eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.32.0)(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1)) fast-glob: 3.3.3 @@ -8871,8 +8867,6 @@ snapshots: transitivePeerDependencies: - ts-node - tapable@2.2.1: {} - tapable@2.3.0: {} terser-webpack-plugin@5.3.16(esbuild@0.27.0)(webpack@5.104.1(esbuild@0.27.0)): @@ -9220,7 +9214,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.15.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.4 + enhanced-resolve: 5.19.0 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 From acf8dd0bf078fad321c85c100347b4c75a1f1d4e Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 11:59:30 +0100 Subject: [PATCH 088/100] =?UTF-8?q?Update=20@types/bun=201.3.7=20=E2=86=92?= =?UTF-8?q?=201.3.9=20(patch)=20(#19689)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ @​types/bun (1.3.7 → 1.3.9) · [Repo](https://github.com/DefinitelyTyped/DefinitelyTyped) Sorry, we couldn't find anything useful about this release. --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> --- packages/@tailwindcss-standalone/package.json | 2 +- pnpm-lock.yaml | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/@tailwindcss-standalone/package.json b/packages/@tailwindcss-standalone/package.json index 07aa6dfb8811..e4157963c2f6 100644 --- a/packages/@tailwindcss-standalone/package.json +++ b/packages/@tailwindcss-standalone/package.json @@ -42,7 +42,7 @@ "@parcel/watcher-linux-x64-glibc": "^2.5.6", "@parcel/watcher-linux-x64-musl": "^2.5.6", "@parcel/watcher-win32-x64": "^2.5.6", - "@types/bun": "^1.3.7", + "@types/bun": "^1.3.9", "bun": "^1.3.7", "lightningcss-darwin-arm64": "catalog:", "lightningcss-darwin-x64": "catalog:", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 60da3997338b..d0f4c306adfa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -335,8 +335,8 @@ importers: specifier: ^2.5.6 version: 2.5.6 '@types/bun': - specifier: ^1.3.7 - version: 1.3.7 + specifier: ^1.3.9 + version: 1.3.9 bun: specifier: ^1.3.7 version: 1.3.7 @@ -2452,8 +2452,8 @@ packages: '@types/braces@3.0.5': resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==} - '@types/bun@1.3.7': - resolution: {integrity: sha512-lmNuMda+Z9b7tmhA0tohwy8ZWFSnmQm1UDWXtH5r9F7wZCfkeO3Jx7wKQ1EOiKq43yHts7ky6r8SDJQWRNupkA==} + '@types/bun@1.3.9': + resolution: {integrity: sha512-KQ571yULOdWJiMH+RIWIOZ7B2RXQGpL1YQrBtLIV3FqDcCu6FsbFUBwhdKUlCKUpS3PJDsHlJ1QKlpxoVR+xtw==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -2810,8 +2810,8 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - bun-types@1.3.7: - resolution: {integrity: sha512-qyschsA03Qz+gou+apt6HNl6HnI+sJJLL4wLDke4iugsE6584CMupOtTY1n+2YC9nGVrEKUlTs99jjRLKgWnjQ==} + bun-types@1.3.9: + resolution: {integrity: sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg==} bun@1.3.7: resolution: {integrity: sha512-ha86NG8WiAXYR7eQw/9S+7V7Lo8KfD36XutWJNS1VndzaipWS0QIen5n3K9MT3PpP/sdGmmHjhkrU0sCM2lGGQ==} @@ -6399,9 +6399,9 @@ snapshots: '@types/braces@3.0.5': {} - '@types/bun@1.3.7': + '@types/bun@1.3.9': dependencies: - bun-types: 1.3.7 + bun-types: 1.3.9 '@types/chai@5.2.3': dependencies: @@ -6855,7 +6855,7 @@ snapshots: buffer-from@1.1.2: {} - bun-types@1.3.7: + bun-types@1.3.9: dependencies: '@types/node': 20.19.1 From d520e1f5718fb9c7d5839bee39f1357ab3155b83 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 12:00:11 +0100 Subject: [PATCH 089/100] =?UTF-8?q?Update=20bun=201.3.7=20=E2=86=92=201.3.?= =?UTF-8?q?9=20(patch)=20(#19678)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > 👉 **This PR is queued up to get rebased by Depfu** Here is everything you need to know about this update. Please take a good look at what changed and the test results before merging this pull request. ### What changed? #### ✳️ bun (1.3.7 → 1.3.9) · [Repo](https://github.com/oven-sh/bun) Sorry, we couldn't find anything useful about this release. --- ![Depfu Status](https://depfu.com/badges/edd6acd35d74c8d41cbb540c30442adf/stats.svg) [Depfu](https://depfu.com) will automatically keep this PR conflict-free, as long as you don't add any commits to this branch yourself. You can also trigger a rebase manually by commenting with `@depfu rebase`.
All Depfu comment commands
@​depfu rebase
Rebases against your default branch and redoes this update
@​depfu recreate
Recreates this PR, overwriting any edits that you've made to it
@​depfu merge
Merges this PR once your tests are passing and conflicts are resolved
@​depfu cancel merge
Cancels automatic merging of this PR
@​depfu close
Closes this PR and deletes the branch
@​depfu reopen
Restores the branch and reopens this PR (if it's closed)
@​depfu pause
Ignores all future updates for this dependency and closes this PR
@​depfu pause [minor|major]
Ignores all future minor/major updates for this dependency and closes this PR
@​depfu resume
Future versions of this dependency will create PRs again (leaves this PR as is)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com> Co-authored-by: Robin Malfait --- packages/@tailwindcss-standalone/package.json | 2 +- playgrounds/vite/package.json | 2 +- pnpm-lock.yaml | 102 +++++++++--------- 3 files changed, 53 insertions(+), 53 deletions(-) diff --git a/packages/@tailwindcss-standalone/package.json b/packages/@tailwindcss-standalone/package.json index e4157963c2f6..36075b0ebb36 100644 --- a/packages/@tailwindcss-standalone/package.json +++ b/packages/@tailwindcss-standalone/package.json @@ -43,7 +43,7 @@ "@parcel/watcher-linux-x64-musl": "^2.5.6", "@parcel/watcher-win32-x64": "^2.5.6", "@types/bun": "^1.3.9", - "bun": "^1.3.7", + "bun": "^1.3.9", "lightningcss-darwin-arm64": "catalog:", "lightningcss-darwin-x64": "catalog:", "lightningcss-linux-arm64-gnu": "catalog:", diff --git a/playgrounds/vite/package.json b/playgrounds/vite/package.json index 903b8db1da40..1a7c0b74573e 100644 --- a/playgrounds/vite/package.json +++ b/playgrounds/vite/package.json @@ -18,7 +18,7 @@ "devDependencies": { "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", - "bun": "^1.3.7", + "bun": "^1.3.9", "vite": "catalog:" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d0f4c306adfa..4ce5acce01ed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -338,8 +338,8 @@ importers: specifier: ^1.3.9 version: 1.3.9 bun: - specifier: ^1.3.7 - version: 1.3.7 + specifier: ^1.3.9 + version: 1.3.9 lightningcss-darwin-arm64: specifier: 'catalog:' version: 1.31.1 @@ -598,8 +598,8 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.14) bun: - specifier: ^1.3.7 - version: 1.3.7 + specifier: ^1.3.9 + version: 1.3.9 vite: specifier: 'catalog:' version: 7.3.1(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.31.1(patch_hash=tzyxy3asfxcqc7ihrooumyi5fm))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) @@ -2027,58 +2027,58 @@ packages: '@octokit/types@16.0.0': resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==} - '@oven/bun-darwin-aarch64@1.3.7': - resolution: {integrity: sha512-Mh78f4B+vNTOhFpI7RWHRWDqSKTnFXj/MauRx7I/GmNwEfw56sUx98gWRwXyF4lkW+9VNU+33wuw6E+M22W66w==} + '@oven/bun-darwin-aarch64@1.3.9': + resolution: {integrity: sha512-df7smckMWSUfaT5mzwN9Lfpd3ZGkOqo+vmQ8VV2a32gl14v6uZ/qeeo+1RlANXn8M0uzXPWWCkrKZIWSZUR0qw==} cpu: [arm64] os: [darwin] - '@oven/bun-darwin-x64-baseline@1.3.7': - resolution: {integrity: sha512-bUND1aQoTCfIL+idALT7FWtuX59ltOIRo954c7p/JkESbSIJ01jY06BSNVbkGk8RQM19v/7qiqZZqi4NyO4Utw==} + '@oven/bun-darwin-x64-baseline@1.3.9': + resolution: {integrity: sha512-XbhsA2XAFzvFr0vPSV6SNqGxab4xHKdPmVTLqoSHAx9tffrSq/012BDptOskulwnD+YNsrJUx2D2Ve1xvfgGcg==} cpu: [x64] os: [darwin] - '@oven/bun-darwin-x64@1.3.7': - resolution: {integrity: sha512-dFfKdSVz6Ois5zjEJboUC7igcYAVd+c//ajotd0L6WUQAKQrHMVq/+6LjOj/0zjC6VPFNGWzeF8erymNo1y0Jw==} + '@oven/bun-darwin-x64@1.3.9': + resolution: {integrity: sha512-YiLxfsPzQqaVvT2a+nxH9do0YfUjrlxF3tKP0b1DDgvfgCcVKGsrQH3Wa82qHgL4dnT8h2bqi94JxXESEuPmcA==} cpu: [x64] os: [darwin] - '@oven/bun-linux-aarch64-musl@1.3.7': - resolution: {integrity: sha512-QDxrROdUnC1d/uoilXtUeFHaLhYdRN7dRIzw/Iqj/vrrhnkA6VS+HYoCWtyyVvci/K+JrPmDwxOWlSRpmV4INA==} + '@oven/bun-linux-aarch64-musl@1.3.9': + resolution: {integrity: sha512-t8uimCVBTw5f9K2QTZE5wN6UOrFETNrh/Xr7qtXT9nAOzaOnIFvYA+HcHbGfi31fRlCVfTxqm/EiCwJ1gEw9YQ==} cpu: [arm64] os: [linux] - '@oven/bun-linux-aarch64@1.3.7': - resolution: {integrity: sha512-m03OtzEs+/RkWtk6tBf8yw0GW4P8ajfzTXnTt984tQBgkMubGQYUyUnFasWgr3mD2820LhkVjhYeBf1rkz/biQ==} + '@oven/bun-linux-aarch64@1.3.9': + resolution: {integrity: sha512-VaNQTu0Up4gnwZLQ6/Hmho6jAlLxTQ1PwxEth8EsXHf82FOXXPV5OCQ6KC9mmmocjKlmWFaIGebThrOy8DUo4g==} cpu: [arm64] os: [linux] - '@oven/bun-linux-x64-baseline@1.3.7': - resolution: {integrity: sha512-Jlb/AcrIFU3QDeR3EL4UVT1CIKqnLJDgbU+R0k/+NaSWMrBEpZV+gJJT5L1cmEKTNhU/d+c7hudxkjtqA7XXqA==} + '@oven/bun-linux-x64-baseline@1.3.9': + resolution: {integrity: sha512-nZ12g22cy7pEOBwAxz2tp0wVqekaCn9QRKuGTHqOdLlyAqR4SCdErDvDhUWd51bIyHTQoCmj72TegGTgG0WNPw==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64-musl-baseline@1.3.7': - resolution: {integrity: sha512-lySQQ7zJJsoa5hQH+PE5bQyQaTI8G2Erszhu4iQuDtsocwy3zSxjB6TxGWTd4HmetPl9aRvg3nb2KR8RVAd7ug==} + '@oven/bun-linux-x64-musl-baseline@1.3.9': + resolution: {integrity: sha512-3FXQgtYFsT0YOmAdMcJn56pLM5kzSl6y942rJJIl5l2KummB9Ea3J/vMJMzQk7NCAGhleZGWU/pJSS/uXKGa7w==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64-musl@1.3.7': - resolution: {integrity: sha512-aK8fvkCosrHRG3CNdVqMom1C8Rj3XkqZp0ZFSBXgaXlKP22RkxlEE9tS7OmSq9yVgEk6euTB3dW4NFo/jlXqeg==} + '@oven/bun-linux-x64-musl@1.3.9': + resolution: {integrity: sha512-4ZjIUgCxEyKwcKXideB5sX0KJpnHTZtu778w73VNq2uNH2fNpMZv98+DBgJyQ9OfFoRhmKn1bmLmSefvnHzI9w==} cpu: [x64] os: [linux] - '@oven/bun-linux-x64@1.3.7': - resolution: {integrity: sha512-uttKQ/eIRVGc4uBtLRqmQqXGf57/dmQaF0AEd37RQNRRRd1P/VYnFMiMcVaot3HJ6IFjHjGtcPO9ekT49LxBYQ==} + '@oven/bun-linux-x64@1.3.9': + resolution: {integrity: sha512-oQyAW3+ugulvXTZ+XYeUMmNPR94sJeMokfHQoKwPvVwhVkgRuMhcLGV2ZesHCADVu30Oz2MFXbgdC8x4/o9dRg==} cpu: [x64] os: [linux] - '@oven/bun-windows-x64-baseline@1.3.7': - resolution: {integrity: sha512-wMgELfW5vFceh4qEOYb5iV5TjrjjnBJzE383ixA3kqGKzaubksSxNc11eZhS0ptcJ5a0UjN5hfbMh6sYoh+cRQ==} + '@oven/bun-windows-x64-baseline@1.3.9': + resolution: {integrity: sha512-a/+hSrrDpMD7THyXvE2KJy1skxzAD0cnW4K1WjuI/91VqsphjNzvf5t/ZgxEVL4wb6f+hKrSJ5J3aH47zPr61g==} cpu: [x64] os: [win32] - '@oven/bun-windows-x64@1.3.7': - resolution: {integrity: sha512-3QdIGdSn3fkssCq/vPjtPLAQxo+eMUzcwJedn1c5mXDy1AoisjhoxhWnbVl8+uk+wt9N6JUPdISoe0N4OdwXfg==} + '@oven/bun-windows-x64@1.3.9': + resolution: {integrity: sha512-/d6vAmgKvkoYlsGPsRPlPmOK1slPis/F40UG02pYwypTH0wmY0smgzdFqR4YmryxFh17XrW1kITv+U99Oajk9Q==} cpu: [x64] os: [win32] @@ -2813,8 +2813,8 @@ packages: bun-types@1.3.9: resolution: {integrity: sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg==} - bun@1.3.7: - resolution: {integrity: sha512-ha86NG8WiAXYR7eQw/9S+7V7Lo8KfD36XutWJNS1VndzaipWS0QIen5n3K9MT3PpP/sdGmmHjhkrU0sCM2lGGQ==} + bun@1.3.9: + resolution: {integrity: sha512-v5hkh1us7sMNjfimWE70flYbD5I1/qWQaqmJ45q2qk5H/7muQVa478LSVRSFyGTBUBog2LsPQnfIRdjyWJRY+A==} cpu: [arm64, x64] os: [darwin, linux, win32] hasBin: true @@ -6107,37 +6107,37 @@ snapshots: dependencies: '@octokit/openapi-types': 27.0.0 - '@oven/bun-darwin-aarch64@1.3.7': + '@oven/bun-darwin-aarch64@1.3.9': optional: true - '@oven/bun-darwin-x64-baseline@1.3.7': + '@oven/bun-darwin-x64-baseline@1.3.9': optional: true - '@oven/bun-darwin-x64@1.3.7': + '@oven/bun-darwin-x64@1.3.9': optional: true - '@oven/bun-linux-aarch64-musl@1.3.7': + '@oven/bun-linux-aarch64-musl@1.3.9': optional: true - '@oven/bun-linux-aarch64@1.3.7': + '@oven/bun-linux-aarch64@1.3.9': optional: true - '@oven/bun-linux-x64-baseline@1.3.7': + '@oven/bun-linux-x64-baseline@1.3.9': optional: true - '@oven/bun-linux-x64-musl-baseline@1.3.7': + '@oven/bun-linux-x64-musl-baseline@1.3.9': optional: true - '@oven/bun-linux-x64-musl@1.3.7': + '@oven/bun-linux-x64-musl@1.3.9': optional: true - '@oven/bun-linux-x64@1.3.7': + '@oven/bun-linux-x64@1.3.9': optional: true - '@oven/bun-windows-x64-baseline@1.3.7': + '@oven/bun-windows-x64-baseline@1.3.9': optional: true - '@oven/bun-windows-x64@1.3.7': + '@oven/bun-windows-x64@1.3.9': optional: true '@parcel/watcher-android-arm64@2.5.0': @@ -6859,19 +6859,19 @@ snapshots: dependencies: '@types/node': 20.19.1 - bun@1.3.7: + bun@1.3.9: optionalDependencies: - '@oven/bun-darwin-aarch64': 1.3.7 - '@oven/bun-darwin-x64': 1.3.7 - '@oven/bun-darwin-x64-baseline': 1.3.7 - '@oven/bun-linux-aarch64': 1.3.7 - '@oven/bun-linux-aarch64-musl': 1.3.7 - '@oven/bun-linux-x64': 1.3.7 - '@oven/bun-linux-x64-baseline': 1.3.7 - '@oven/bun-linux-x64-musl': 1.3.7 - '@oven/bun-linux-x64-musl-baseline': 1.3.7 - '@oven/bun-windows-x64': 1.3.7 - '@oven/bun-windows-x64-baseline': 1.3.7 + '@oven/bun-darwin-aarch64': 1.3.9 + '@oven/bun-darwin-x64': 1.3.9 + '@oven/bun-darwin-x64-baseline': 1.3.9 + '@oven/bun-linux-aarch64': 1.3.9 + '@oven/bun-linux-aarch64-musl': 1.3.9 + '@oven/bun-linux-x64': 1.3.9 + '@oven/bun-linux-x64-baseline': 1.3.9 + '@oven/bun-linux-x64-musl': 1.3.9 + '@oven/bun-linux-x64-musl-baseline': 1.3.9 + '@oven/bun-windows-x64': 1.3.9 + '@oven/bun-windows-x64-baseline': 1.3.9 bundle-require@5.1.0(esbuild@0.27.0): dependencies: From 5a4a7eba3a3db4f4a834f37a3e37624fe9c4daa7 Mon Sep 17 00:00:00 2001 From: Cameron Date: Wed, 18 Feb 2026 12:16:59 +0000 Subject: [PATCH 090/100] fix(canonicalize): prevent collapse cache pollution across calls (#19675) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary fixes https://github.com/schoero/eslint-plugin-better-tailwindcss/issues/321 This PR fixes an order-sensitive canonicalization bug. This bug caused issues when running eslint-plugin-better-tailwindcss as the order in which files are linted in is not consistent. This caused, in some scenarios, `canonicalizeCandidates(..., { collapse: true, logicalToPhysical: true, rem: 16 })` to stop collapsing valid combinations (for example `h-4 + w-4 -> size-4`) after unrelated prior calls. To reproduce this issue: ``` # checkout this branch $ git checkout c/fix-canonicalizeCandidates # Revert the fix to the current `main` branch $ git checkout main ./packages/tailwindcss/src/canonicalize-candidates.ts # Run the tests $ pnpm run test ``` This should produce a failure like so: ``` FAIL tailwindcss src/canonicalize-candidates.test.ts > regressions > collapse canonicalization is not affected by previous calls AssertionError: expected [ 'underline', 'h-4', 'w-4' ] to deeply equal [ 'underline', 'size-4' ] - Expected + Received [ "underline", - "size-4", + "h-4", + "w-4", ] ❯ src/canonicalize-candidates.test.ts:1167:66 1165| designSystem.canonicalizeCandidates(['underline', 'mb-4'], options) 1166| 1167| expect(designSystem.canonicalizeCandidates(target, options)).toEqual(['underline', 'size-4']) | ^ 1168| }) 1169| }) ``` ``` # reset all changes on this branch git reset --hard # run the tests again (they should now pass) pnpm run test ``` The cause of this bug is that the canonicalization caches used `DefaultMap` in places where lookups were expected to be read-only. `DefaultMap.get` inserts missing entried, which mutated shared cache state during intermediate lookups and made later canonicalization results depend on prior calls. By replacing the use of `DefaultMap` with a plain `Map`, it avoids inserting into the map on lookup paths. I've polyfilled [`Map#getOrInsert`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/getOrInsert) as it is not widely available yet, and used that where appropriate. ## Test plan I wrote a test that fails on `main` branch, I then fixed the issue, and validated that the test now passes. --------- Co-authored-by: Robin Malfait --- CHANGELOG.md | 1 + .../src/canonicalize-candidates.test.ts | 43 +++++++++++++++++++ .../src/canonicalize-candidates.ts | 4 ++ 3 files changed, 48 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 376db05cc4c7..078ca6ef6ae1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improve performance Oxide scanner in bigger projects ([#19632](https://github.com/tailwindlabs/tailwindcss/pull/19632)) - Ensure import aliases in Astro v5 work without crashing ([#19677](https://github.com/tailwindlabs/tailwindcss/issues/19677)) - Allow escape characters in `@utility` names to improve support with formatters such as Biome ([#19626](https://github.com/tailwindlabs/tailwindcss/pull/19626)) +- Fix invalid cache during subsequent canonicalization calls ([#19675](https://github.com/tailwindlabs/tailwindcss/pull/19675)) ### Deprecated diff --git a/packages/tailwindcss/src/canonicalize-candidates.test.ts b/packages/tailwindcss/src/canonicalize-candidates.test.ts index b8ca59d67880..fae944cde362 100644 --- a/packages/tailwindcss/src/canonicalize-candidates.test.ts +++ b/packages/tailwindcss/src/canonicalize-candidates.test.ts @@ -1163,3 +1163,46 @@ describe('options', () => { expect(designSystem.canonicalizeCandidates(['m-[16px]'])).toEqual(['m-[16px]']) // Ensure options don't influence shared state }) }) + +// https://github.com/schoero/eslint-plugin-better-tailwindcss/issues/321 +test('a subset of classes should be canonicalizable', { timeout }, async () => { + let designSystem = await designSystems.get(__dirname).get(css` + @import 'tailwindcss'; + `) + + let options: CanonicalizeOptions = { + collapse: true, + logicalToPhysical: true, + rem: 16, + } + + expect( + designSystem.canonicalizeCandidates(['underline', 'h-4', 'w-4', 'text-sm'], options), + ).toEqual(['underline', 'text-sm', 'size-4']) +}) + +test('collapse canonicalization is not affected by previous calls', { timeout }, async () => { + let designSystem = await designSystems.get(__dirname).get(css` + @import 'tailwindcss'; + `) + + let options: CanonicalizeOptions = { + collapse: true, + logicalToPhysical: true, + rem: 16, + } + + let target = ['underline', 'h-4', 'w-4'] + + expect(designSystem.canonicalizeCandidates(target, options)).toEqual(['underline', 'size-4']) + + designSystem.canonicalizeCandidates(['mb-4', 'text-sm'], options) + designSystem.canonicalizeCandidates(['underline', 'mb-4'], options) + + expect(designSystem.canonicalizeCandidates(target, options)).toEqual(['underline', 'size-4']) + expect(designSystem.canonicalizeCandidates(target.concat('text-sm'), options)).toEqual([ + 'underline', + 'text-sm', + 'size-4', + ]) +}) diff --git a/packages/tailwindcss/src/canonicalize-candidates.ts b/packages/tailwindcss/src/canonicalize-candidates.ts index 61212998545d..64fa2d8b16cf 100644 --- a/packages/tailwindcss/src/canonicalize-candidates.ts +++ b/packages/tailwindcss/src/canonicalize-candidates.ts @@ -267,6 +267,8 @@ function collapseCandidates(options: InternalCanonicalizeOptions, candidates: st let interestingLineHeights = new Set() let seenLineHeights = new Set() for (let pairs of candidatePropertiesValues) { + if (!pairs.has('line-height')) continue + for (let lineHeight of pairs.get('line-height')) { if (seenLineHeights.has(lineHeight)) continue seenLineHeights.add(lineHeight) @@ -292,6 +294,8 @@ function collapseCandidates(options: InternalCanonicalizeOptions, candidates: st let seenFontSizes = new Set() for (let pairs of candidatePropertiesValues) { + if (!pairs.has('font-size')) continue + for (let fontSize of pairs.get('font-size')) { if (seenFontSizes.has(fontSize)) continue seenFontSizes.add(fontSize) From 6118f4f6a796ece218d145b626770e3fb9163d91 Mon Sep 17 00:00:00 2001 From: Pavan Shinde Date: Wed, 18 Feb 2026 17:53:48 +0530 Subject: [PATCH 091/100] Fix/misc docs and tests (#19652) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary This PR makes a few small consistency fixes: - Fix outdated GitHub links that still point to the old `tailwindcss/tailwindcss` org and update them to `tailwindlabs/tailwindcss` (README + contributing docs + PR template). - Fix punctuation in the contributing guide (“i.e., …”). - Update two test titles to use “cannot” instead of “can not” for consistency. No behavior changes. ## Test plan - Link check (manual): clicked the updated GitHub links in `README.md`, `.github/CONTRIBUTING.md`, and `.github/PULL_REQUEST_TEMPLATE.md` to confirm they resolve correctly. - (Optional) `pnpm test` — not required since changes are docs/test-title-only. --------- Co-authored-by: Robin Malfait --- .github/CONTRIBUTING.md | 2 +- packages/tailwindcss/src/css-functions.test.ts | 2 +- packages/tailwindcss/src/index.test.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 4dfe6eba98fe..63f79fa100e6 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -76,7 +76,7 @@ To run the integration tests, use: pnpm build && pnpm test:integrations ``` -Additionally, some features require testing in browsers (i.e to ensure CSS variable resolution works as expected). These can be run via: +Additionally, some features require testing in browsers (i.e. to ensure CSS variable resolution works as expected). These can be run via: ```sh pnpm build && pnpm test:ui diff --git a/packages/tailwindcss/src/css-functions.test.ts b/packages/tailwindcss/src/css-functions.test.ts index 0c5a3c97e46a..3e880dd8b0d7 100644 --- a/packages/tailwindcss/src/css-functions.test.ts +++ b/packages/tailwindcss/src/css-functions.test.ts @@ -1361,7 +1361,7 @@ test('resolves paths ending with a 1', async () => { `) }) -test('upgrades to a full JS compat theme lookup if a value can not be mapped to a CSS variable', async () => { +test('upgrades to a full JS compat theme lookup if a value cannot be mapped to a CSS variable', async () => { expect( await compileCss( css` diff --git a/packages/tailwindcss/src/index.test.ts b/packages/tailwindcss/src/index.test.ts index 3bc3edad33eb..5eb7407d81dd 100644 --- a/packages/tailwindcss/src/index.test.ts +++ b/packages/tailwindcss/src/index.test.ts @@ -3098,7 +3098,7 @@ describe('plugins', () => { ).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: \`@plugin\` must have a path.]`) }) - test('@plugin can not have an empty path', () => { + test('@plugin cannot have an empty path', () => { return expect( compile( css` From 198af9c3ae162efc3ac66f7f9df6a446522f0d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draic=20Slattery?= Date: Wed, 18 Feb 2026 13:27:13 +0100 Subject: [PATCH 092/100] chore: Update outdated GitHub Actions versions (#19577) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary This PR updates outdated GitHub Action versions by migrating `actions/download-artifact` from `v6` to `v7` in the following workflows: - `.github/workflows/prepare-release.yml` - `.github/workflows/release.yml` - `.github/workflows/release-insiders.yml` ## Test plan The changes will be tested in the CI pipeline of the pull request. [×] Summary [×] Test plan --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/release-insiders.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 0af8930a3a17..d5ad798be455 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -266,7 +266,7 @@ jobs: run: pnpm --filter=!./playgrounds/* install - name: Download artifacts - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v7 with: path: ${{ env.OXIDE_LOCATION }} diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 7a506892cbe2..4852cce7b7a9 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -263,7 +263,7 @@ jobs: run: pnpm --filter=!./playgrounds/* install - name: Download artifacts - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v7 with: path: ${{ env.OXIDE_LOCATION }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3b0aeab20049..a872900ff9e2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -254,7 +254,7 @@ jobs: run: pnpm --filter=!./playgrounds/* install - name: Download artifacts - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v7 with: path: ${{ env.OXIDE_LOCATION }} From 1b16411919457ee47d38910fd07e134e9765eb4c Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 18 Feb 2026 15:45:06 +0100 Subject: [PATCH 093/100] 4.2.0 (#19695) Co-authored-by: Adam Wathan --- CHANGELOG.md | 39 ++++++++++++------- crates/node/npm/android-arm-eabi/package.json | 2 +- crates/node/npm/android-arm64/package.json | 2 +- crates/node/npm/darwin-arm64/package.json | 2 +- crates/node/npm/darwin-x64/package.json | 2 +- crates/node/npm/freebsd-x64/package.json | 2 +- .../node/npm/linux-arm-gnueabihf/package.json | 2 +- crates/node/npm/linux-arm64-gnu/package.json | 2 +- crates/node/npm/linux-arm64-musl/package.json | 2 +- crates/node/npm/linux-x64-gnu/package.json | 2 +- crates/node/npm/linux-x64-musl/package.json | 2 +- crates/node/npm/wasm32-wasi/package.json | 2 +- crates/node/npm/win32-arm64-msvc/package.json | 2 +- crates/node/npm/win32-x64-msvc/package.json | 2 +- crates/node/package.json | 2 +- packages/@tailwindcss-browser/package.json | 2 +- packages/@tailwindcss-cli/package.json | 2 +- packages/@tailwindcss-node/package.json | 2 +- packages/@tailwindcss-postcss/package.json | 2 +- packages/@tailwindcss-standalone/package.json | 2 +- packages/@tailwindcss-upgrade/package.json | 2 +- packages/@tailwindcss-vite/package.json | 2 +- packages/@tailwindcss-webpack/package.json | 2 +- packages/tailwindcss/package.json | 2 +- 24 files changed, 48 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 078ca6ef6ae1..652c33fb106b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,33 +10,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) -- Add `mauve`, `olive`, `mist`, and `taupe` color palettes to the default theme ([`#19627`](https://github.com/tailwindlabs/tailwindcss/pull/19627)) -- Add `@tailwindcss/webpack` loader for Tailwind CSS v4 ([#19610](https://github.com/tailwindlabs/tailwindcss/pull/19610)) -- Add `pbs-*`, `pbe-*`, `mbs-*`, `mbe-*`, `scroll-pbs-*`, `scroll-pbe-*`, `scroll-mbs-*`, `scroll-mbe-*`, `border-bs-*`, `border-be-*` utilities for `padding-block-start`, `padding-block-end`, `margin-block-start`, `margin-block-end`, `scroll-padding-block-start`, `scroll-padding-block-end`, `scroll-margin-block-start`, `scroll-margin-block-end`, `border-block-start`, and `border-block-end` ([`#19601`](https://github.com/tailwindlabs/tailwindcss/pull/19601)) -- Add `inline-*`, `min-inline-*`, `max-inline-*`, `block-*`, `min-block-*`, `max-block-*` utilities for `inline-size`, `min-inline-size`, `max-inline-size`, `block-size`, `min-block-size`, and `max-block-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) + +## [4.2.0] - 2026-02-18 + +### Added + +- Add mauve, olive, mist, and taupe color palettes to the default theme ([#19627](https://github.com/tailwindlabs/tailwindcss/pull/19627)) +- Add `@tailwindcss/webpack` package to run Tailwind CSS as a webpack plugin ([#19610](https://github.com/tailwindlabs/tailwindcss/pull/19610)) +- Add `pbs-*` and `pbe-*` utilities for `padding-block-start` and `padding-block-end` ([#19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) +- Add `mbs-*` and `mbe-*` utilities for `margin-block-start` and `margin-block-end` ([#19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) +- Add `scroll-pbs-*` and `scroll-pbe-*` utilities for `scroll-padding-block-start` and `scroll-padding-block-end` ([#19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) +- Add `scroll-mbs-*` and `scroll-mbe-*` utilities for `scroll-margin-block-start` and `scroll-margin-block-end` ([#19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) +- Add `border-bs-*` and `border-be-*` utilities for `border-block-start` and `border-block-end` ([#19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) +- Add `inline-*`, `min-inline-*`, `max-inline-*` utilities for `inline-size`, `min-inline-size`, and `max-inline-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) +- Add `block-*`, `min-block-*`, `max-block-*` utilities for `block-size`, `min-block-size`, and `max-block-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) - Add `inset-s-*`, `inset-e-*`, `inset-bs-*`, `inset-be-*` utilities for `inset-inline-start`, `inset-inline-end`, `inset-block-start`, and `inset-block-end` ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) - Add `font-features-*` utility for `font-feature-settings` ([#19623](https://github.com/tailwindlabs/tailwindcss/pull/19615)) -- Add `.jj` to ignored content directories ([#19687](https://github.com/tailwindlabs/tailwindcss/pull/19687)) ### Fixed -- Do not wrap `color-mix` in a `@supports` rule if one already exists ([#19450](https://github.com/tailwindlabs/tailwindcss/pull/19450)) +- Prevent double `@supports` wrapper for `color-mix` values ([#19450](https://github.com/tailwindlabs/tailwindcss/pull/19450)) - Allow whitespace around `@source inline()` argument ([#19461](https://github.com/tailwindlabs/tailwindcss/pull/19461)) -- CLI: Emit comment when source maps are saved to files ([#19447](https://github.com/tailwindlabs/tailwindcss/pull/19447)) -- Detect utilities when containing capital letters followed by numbers ([#19465](https://github.com/tailwindlabs/tailwindcss/pull/19465)) +- Emit comment when source maps are saved to files when using `@tailwindcss/cli` ([#19447](https://github.com/tailwindlabs/tailwindcss/pull/19447)) +- Detect utilities containing capital letters followed by numbers ([#19465](https://github.com/tailwindlabs/tailwindcss/pull/19465)) - Fix class extraction for Rails' strict locals ([#19525](https://github.com/tailwindlabs/tailwindcss/pull/19525)) - Align `@utility` name validation with Oxide scanner rules ([#19524](https://github.com/tailwindlabs/tailwindcss/pull/19524)) - Fix infinite loop when using `@variant` inside `@custom-variant` ([#19633](https://github.com/tailwindlabs/tailwindcss/pull/19633)) -- Allow multiples of `.25` in `aspect-*` fractions ([#19688](https://github.com/tailwindlabs/tailwindcss/pull/19688)) +- Allow multiples of `.25` in `aspect-*` fractions (e.g. `aspect-8.5/11`) ([#19688](https://github.com/tailwindlabs/tailwindcss/pull/19688)) - Ensure changes to external files listed via `@source` trigger a full page reload when using `@tailwindcss/vite` ([#19670](https://github.com/tailwindlabs/tailwindcss/pull/19670)) -- Improve performance Oxide scanner in bigger projects ([#19632](https://github.com/tailwindlabs/tailwindcss/pull/19632)) -- Ensure import aliases in Astro v5 work without crashing ([#19677](https://github.com/tailwindlabs/tailwindcss/issues/19677)) +- Improve performance of Oxide scanner in bigger projects by reducing file system walks ([#19632](https://github.com/tailwindlabs/tailwindcss/pull/19632)) +- Ensure import aliases in Astro v5 work without crashing when using `@tailwindcss/vite` ([#19677](https://github.com/tailwindlabs/tailwindcss/issues/19677)) - Allow escape characters in `@utility` names to improve support with formatters such as Biome ([#19626](https://github.com/tailwindlabs/tailwindcss/pull/19626)) -- Fix invalid cache during subsequent canonicalization calls ([#19675](https://github.com/tailwindlabs/tailwindcss/pull/19675)) +- Fix incorrect canonicalization results when canonicalizing multiple times ([#19675](https://github.com/tailwindlabs/tailwindcss/pull/19675)) +- Add `.jj` to default ignored content directories ([#19687](https://github.com/tailwindlabs/tailwindcss/pull/19687)) ### Deprecated -- Deprecate `start-*` and `end-*` utilities in favor of `inline-s-*` and `inline-e-*` ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) +- Deprecate `start-*` and `end-*` utilities in favor of `inline-s-*` and `inline-e-*` utilities ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) ## [4.1.18] - 2025-12-11 @@ -3931,7 +3941,8 @@ No release notes - Everything! -[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.18...HEAD +[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v4.2.0...HEAD +[4.2.0]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.18...v4.2.0 [4.1.18]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.17...v4.1.18 [3.4.19]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.18...v3.4.19 [4.1.17]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.16...v4.1.17 diff --git a/crates/node/npm/android-arm-eabi/package.json b/crates/node/npm/android-arm-eabi/package.json index 47df39f4ec30..cba6fedce0b2 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.1.18", + "version": "4.2.0", "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 a2d8231abb28..0950b7a03e95 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.1.18", + "version": "4.2.0", "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 153b2306fe9c..423333d61dcf 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.1.18", + "version": "4.2.0", "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 fd4fba92b312..81007674ee5c 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.1.18", + "version": "4.2.0", "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 89f126ba19fd..8c25927edc39 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.1.18", + "version": "4.2.0", "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 e0939b03718c..b2a4c0281127 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.1.18", + "version": "4.2.0", "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 ec4d07081c52..e1855f2894c3 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.1.18", + "version": "4.2.0", "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 1ff8c8917ebe..c6b96ab8ab14 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.1.18", + "version": "4.2.0", "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 b27ebb4f169b..2d4fa6fe3c84 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.1.18", + "version": "4.2.0", "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 b38fe0792485..5855b5d6a331 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.1.18", + "version": "4.2.0", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/wasm32-wasi/package.json b/crates/node/npm/wasm32-wasi/package.json index 059735f5317d..0c1defca3a43 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.1.18", + "version": "4.2.0", "cpu": [ "wasm32" ], diff --git a/crates/node/npm/win32-arm64-msvc/package.json b/crates/node/npm/win32-arm64-msvc/package.json index f1ef4133a570..633a4d12eb9c 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.1.18", + "version": "4.2.0", "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 4049d272da2b..99dca35d18c4 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.1.18", + "version": "4.2.0", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/package.json b/crates/node/package.json index d9b07eab58c5..6da669ced184 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide", - "version": "4.1.18", + "version": "4.2.0", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/packages/@tailwindcss-browser/package.json b/packages/@tailwindcss-browser/package.json index 8b9b1b5e24ce..8075cfb3fc0c 100644 --- a/packages/@tailwindcss-browser/package.json +++ b/packages/@tailwindcss-browser/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/browser", - "version": "4.1.18", + "version": "4.2.0", "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 749c06c5f5f7..af488a701caa 100644 --- a/packages/@tailwindcss-cli/package.json +++ b/packages/@tailwindcss-cli/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/cli", - "version": "4.1.18", + "version": "4.2.0", "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 9b1c28cab602..064b53f802a7 100644 --- a/packages/@tailwindcss-node/package.json +++ b/packages/@tailwindcss-node/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/node", - "version": "4.1.18", + "version": "4.2.0", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { diff --git a/packages/@tailwindcss-postcss/package.json b/packages/@tailwindcss-postcss/package.json index ff815030ab4f..5180133e8f27 100644 --- a/packages/@tailwindcss-postcss/package.json +++ b/packages/@tailwindcss-postcss/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/postcss", - "version": "4.1.18", + "version": "4.2.0", "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 36075b0ebb36..50039f29a459 100644 --- a/packages/@tailwindcss-standalone/package.json +++ b/packages/@tailwindcss-standalone/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/standalone", - "version": "4.1.18", + "version": "4.2.0", "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 d30ab3ace894..b8191e23c58e 100644 --- a/packages/@tailwindcss-upgrade/package.json +++ b/packages/@tailwindcss-upgrade/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/upgrade", - "version": "4.1.18", + "version": "4.2.0", "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 bdf5518e289f..db0297fc215a 100644 --- a/packages/@tailwindcss-vite/package.json +++ b/packages/@tailwindcss-vite/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/vite", - "version": "4.1.18", + "version": "4.2.0", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { diff --git a/packages/@tailwindcss-webpack/package.json b/packages/@tailwindcss-webpack/package.json index e22cb79355d1..0fcf0d3f7b0c 100644 --- a/packages/@tailwindcss-webpack/package.json +++ b/packages/@tailwindcss-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/webpack", - "version": "4.1.18", + "version": "4.2.0", "description": "A webpack loader for Tailwind CSS v4.", "license": "MIT", "repository": { diff --git a/packages/tailwindcss/package.json b/packages/tailwindcss/package.json index 5650b1e2cd0f..abe6da365387 100644 --- a/packages/tailwindcss/package.json +++ b/packages/tailwindcss/package.json @@ -1,6 +1,6 @@ { "name": "tailwindcss", - "version": "4.1.18", + "version": "4.2.0", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { From 7a54d15f7231d16d6f796d240cad54c303c61a27 Mon Sep 17 00:00:00 2001 From: ginnyTheCat Date: Thu, 19 Feb 2026 14:05:37 +0100 Subject: [PATCH 094/100] Correct CHANGELOG to mention inset not inline (#19700) I noticed this when reading the changelog to migrate a project to the new version. I'm not sure whether retroactively changing the changelog is considered acceptable behaviour in this project or whether appending a notice in the next changelog would be better. Funnily this was actually guessed in #19613, though hard to notice among the other many false guesses. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 652c33fb106b..f9c82527ab47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,7 +46,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Deprecated -- Deprecate `start-*` and `end-*` utilities in favor of `inline-s-*` and `inline-e-*` utilities ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) +- Deprecate `start-*` and `end-*` utilities in favor of `inset-s-*` and `inset-e-*` utilities ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) ## [4.1.18] - 2025-12-11 From d15d92ca60b2c06a11c2db6a24dfcca18147de59 Mon Sep 17 00:00:00 2001 From: Kirk Ouimet Date: Thu, 19 Feb 2026 07:40:37 -0700 Subject: [PATCH 095/100] Allow trailing dash in functional utility names (#19696) ## Problem Tailwind 4.2.0 introduced stricter `@utility` name validation (#19524) that rejects functional utility names where the root ends with a dash after stripping the `-*` suffix. This breaks a valid and useful naming pattern where a double dash separates the CSS property from a value scale: ```css @utility border--* { border-color: --value(--color-border-*, [color]); } ``` This produces: `border--0`, `border--1`, `border--2`, etc. The error message is: > `@utility border--*` defines an invalid utility name. Utilities should be alphanumeric and start with a lowercase letter. ## Why this pattern matters The double-dash convention creates a clear visual grammar in class names. The first segment names the CSS property, and the double dash separates it from the semantic scale value. In a dense className string like `border border--0 background--0 content--4`, the scale values (0, 0, 4) are immediately scannable, distinct from the single-dash property names around them. This pattern is actively used in production design systems for semantic color scales (background, content, border, shadow) with values from 0-10. ## Why the restriction is unnecessary The validation comment states the concern is that `border--*` could match the bare class `border-` when using default values. However, this edge case is already handled: 1. **`findRoots` in `candidate.ts`** (line 887) already rejects empty values: `if (root[1] === '') break` 2. **The Oxide scanner** already extracts double-dash candidates correctly, as confirmed by existing tests: `("items--center", vec!["items--center"])` The candidate parser and scanner both handle this case. The validation was an overcorrection. ## Changes - Removed the trailing-dash check from `isValidFunctionalUtilityName` in `utilities.ts` - Updated the existing unit test from `['foo--*', false]` to `['foo--*', true]` - Added an integration test proving `@utility border--*` compiles correctly with theme values ## Test results All 4121 tests pass across the tailwindcss package, including the new integration test. --------- Co-authored-by: Robin Malfait --- CHANGELOG.md | 4 +++ packages/tailwindcss/src/utilities.test.ts | 34 +++++++++++++++++++++- packages/tailwindcss/src/utilities.ts | 21 +++++++------ 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9c82527ab47..3bde2966b4c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) +### Fixed + +- Allow trailing dash in functional utility names for backwards compatibility ([#19696](https://github.com/tailwindlabs/tailwindcss/pull/19696)) + ## [4.2.0] - 2026-02-18 ### Added diff --git a/packages/tailwindcss/src/utilities.test.ts b/packages/tailwindcss/src/utilities.test.ts index 7bd03b577f66..360acd9e29a6 100644 --- a/packages/tailwindcss/src/utilities.test.ts +++ b/packages/tailwindcss/src/utilities.test.ts @@ -28428,7 +28428,7 @@ describe('custom utilities', () => { test.each([ ['foo', false], // Simple name, missing '-*' suffix ['foo-*', true], // Simple name - ['foo--*', false], // Root should not end in `-` + ['foo--*', true], // Root ending in `-` is valid (e.g. `border--*`) ['-foo-*', true], // Simple name (negative) ['foo-bar-*', true], // With dashes ['foo_bar-*', true], // With underscores @@ -28900,6 +28900,38 @@ describe('custom utilities', () => { expect(await compileCss(input, ['tab-3', 'tab-gitlab'])).toEqual('') }) + test('functional utility with double-dash separator', async () => { + let input = css` + @theme reference { + --color-border-0: #e5e7eb; + --color-border-1: #d1d5db; + --color-border-2: #9ca3af; + } + + @utility border--* { + border-color: --value(--color-border-*, [color]); + } + + @tailwind utilities; + ` + + expect(await compileCss(input, ['border--0', 'border--1', 'border--2'])) + .toMatchInlineSnapshot(` + ".border--0 { + border-color: var(--color-border-0, #e5e7eb); + } + + .border--1 { + border-color: var(--color-border-1, #d1d5db); + } + + .border--2 { + border-color: var(--color-border-2, #9ca3af); + }" + `) + expect(await compileCss(input, ['border--3'])).toEqual('') + }) + test('resolving values from `@theme`, with `--tab-size-*` syntax', async () => { let input = // Explicitly not using the css tagged template literal so that diff --git a/packages/tailwindcss/src/utilities.ts b/packages/tailwindcss/src/utilities.ts index 69837e0d3345..aa2187887405 100644 --- a/packages/tailwindcss/src/utilities.ts +++ b/packages/tailwindcss/src/utilities.ts @@ -6659,22 +6659,21 @@ export function isValidFunctionalUtilityName(name: string): boolean { let root = match[0] let value = name.slice(root.length) - // Root should not end in `-` if there is no value - // - // `tab-size--*` - // --------- Root - // -- Suffix - // - // Because with default values, this could match `tab-size-` which is invalid. - if (value.length === 0 && root.endsWith('-')) { - return false - } - // No remaining value is valid // // `tab-size-*` // -------- Root // -- Suffix + // + // Backwards compatibility: a root ending in `-` was valid and correctly + // scanned by Oxide. This means that custom utilities can result in candidates + // such as `foo--bar`. + // + // We might want to revisit this for Tailwind CSS v5, but for now we have to + // make it backwards compatible. + // + // PR: https://github.com/tailwindlabs/tailwindcss/pull/19696 + // if (value.length === 0) { return true } From 14083ad9aa290bf93a65458eea609ef10a3cdb86 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 20 Feb 2026 12:03:25 +0100 Subject: [PATCH 096/100] use simpler tailwindcss import --- packages/@tailwindcss-webpack/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/@tailwindcss-webpack/README.md b/packages/@tailwindcss-webpack/README.md index 55e60562203c..183e42ee39c8 100644 --- a/packages/@tailwindcss-webpack/README.md +++ b/packages/@tailwindcss-webpack/README.md @@ -31,8 +31,7 @@ Then create a CSS file that imports Tailwind: ```css /* src/index.css */ -@import 'tailwindcss/theme'; -@import 'tailwindcss/utilities'; +@import 'tailwindcss'; ``` ## Options From 1a973557edaed212568cba2b8fc3c5d8f156c5ba Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 20 Feb 2026 12:04:41 +0100 Subject: [PATCH 097/100] update webpack readme to be a bit more consistent with other readmes --- packages/@tailwindcss-webpack/README.md | 49 ++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/packages/@tailwindcss-webpack/README.md b/packages/@tailwindcss-webpack/README.md index 183e42ee39c8..56484ed7f0f6 100644 --- a/packages/@tailwindcss-webpack/README.md +++ b/packages/@tailwindcss-webpack/README.md @@ -1,4 +1,43 @@ -# @tailwindcss/webpack +

+ + + + + Tailwind CSS + + +

+ +

+ A utility-first CSS framework for rapidly building custom user interfaces. +

+ +

+ Build Status + Total Downloads + Latest Release + License +

+ +--- + +## Documentation + +For full documentation, visit [tailwindcss.com](https://tailwindcss.com). + +## Community + +For help, discussion about best practices, or feature ideas: + +[Discuss Tailwind CSS on GitHub](https://github.com/tailwindlabs/tailwindcss/discussions) + +## Contributing + +If you're interested in contributing to Tailwind CSS, please read our [contributing docs](https://github.com/tailwindlabs/tailwindcss/blob/main/.github/CONTRIBUTING.md) **before submitting a pull request**. + +--- + +## @tailwindcss/webpack A webpack loader for Tailwind CSS v4. @@ -8,7 +47,7 @@ A webpack loader for Tailwind CSS v4. npm install @tailwindcss/webpack ``` -## Usage +### Usage ```javascript // webpack.config.js @@ -34,9 +73,9 @@ Then create a CSS file that imports Tailwind: @import 'tailwindcss'; ``` -## Options +### Options -### `base` +#### `base` The base directory to scan for class candidates. Defaults to the current working directory. @@ -49,7 +88,7 @@ The base directory to scan for class candidates. Defaults to the current working } ``` -### `optimize` +#### `optimize` Whether to optimize and minify the output CSS. Defaults to `true` in production mode. From 58d1fe3948fdf963d628071ff13d15147e9f712c Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Sun, 22 Feb 2026 13:02:05 +0100 Subject: [PATCH 098/100] Fix missing extracted classes in mdx files (#19711) --- CHANGELOG.md | 1 + .../src/extractor/pre_processors/markdown.rs | 22 ++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bde2966b4c0..dd549036ed0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Allow trailing dash in functional utility names for backwards compatibility ([#19696](https://github.com/tailwindlabs/tailwindcss/pull/19696)) +- Fix missing extracted classes in mdx files containing `.` ([#19711](https://github.com/tailwindlabs/tailwindcss/pull/19711)) ## [4.2.0] - 2026-02-18 diff --git a/crates/oxide/src/extractor/pre_processors/markdown.rs b/crates/oxide/src/extractor/pre_processors/markdown.rs index d2acc6a58738..488614ee57bd 100644 --- a/crates/oxide/src/extractor/pre_processors/markdown.rs +++ b/crates/oxide/src/extractor/pre_processors/markdown.rs @@ -9,6 +9,7 @@ impl PreProcessor for Markdown { let len = content.len(); let mut result = content.to_vec(); let mut cursor = cursor::Cursor::new(content); + let mut bracket_stack = vec![]; let mut in_directive = false; @@ -18,11 +19,17 @@ impl PreProcessor for Markdown { result[cursor.pos] = b' '; in_directive = true; } + (true, b'(' | b'[' | b'{' | b'<') => { + bracket_stack.push(cursor.curr()); + } + (true, b')' | b']' | b'}' | b'>') if !bracket_stack.is_empty() => { + bracket_stack.pop(); + } (true, b'}') => { result[cursor.pos] = b' '; in_directive = false; } - (true, b'.') => { + (true, b'.') if bracket_stack.is_empty() => { result[cursor.pos] = b' '; } _ => {} @@ -60,4 +67,17 @@ mod tests { Markdown::test(input, expected); } } + + #[test] + fn test_nested_classes_keep_the_dots() { + for (input, expected) in [ + ( + r#"{
}"#, + r#"
"#, + ), + (r#"{content-['example.js']}"#, r#" content-['example.js'] "#), + ] { + Markdown::test(input, expected); + } + } } From 1dce64ee7ec2e414c845b4e268ac3b9b89aaf0c8 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Mon, 23 Feb 2026 11:45:12 +0100 Subject: [PATCH 099/100] 4.2.1 (#19714) --- CHANGELOG.md | 5 ++++- crates/node/npm/android-arm-eabi/package.json | 2 +- crates/node/npm/android-arm64/package.json | 2 +- crates/node/npm/darwin-arm64/package.json | 2 +- crates/node/npm/darwin-x64/package.json | 2 +- crates/node/npm/freebsd-x64/package.json | 2 +- crates/node/npm/linux-arm-gnueabihf/package.json | 2 +- crates/node/npm/linux-arm64-gnu/package.json | 2 +- crates/node/npm/linux-arm64-musl/package.json | 2 +- crates/node/npm/linux-x64-gnu/package.json | 2 +- crates/node/npm/linux-x64-musl/package.json | 2 +- crates/node/npm/wasm32-wasi/package.json | 2 +- crates/node/npm/win32-arm64-msvc/package.json | 2 +- crates/node/npm/win32-x64-msvc/package.json | 2 +- crates/node/package.json | 2 +- packages/@tailwindcss-browser/package.json | 2 +- packages/@tailwindcss-cli/package.json | 2 +- packages/@tailwindcss-node/package.json | 2 +- packages/@tailwindcss-postcss/package.json | 2 +- packages/@tailwindcss-standalone/package.json | 2 +- packages/@tailwindcss-upgrade/package.json | 2 +- packages/@tailwindcss-vite/package.json | 2 +- packages/@tailwindcss-webpack/package.json | 2 +- packages/tailwindcss/package.json | 2 +- 24 files changed, 27 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd549036ed0f..fa0edaacd029 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - _Experimental_: Add `@container-size` utility ([#18901](https://github.com/tailwindlabs/tailwindcss/pull/18901)) +## [4.2.1] - 2026-02-23 + ### Fixed - Allow trailing dash in functional utility names for backwards compatibility ([#19696](https://github.com/tailwindlabs/tailwindcss/pull/19696)) @@ -3946,7 +3948,8 @@ No release notes - Everything! -[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v4.2.0...HEAD +[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v4.2.1...HEAD +[4.2.1]: https://github.com/tailwindlabs/tailwindcss/compare/v4.2.0...v4.2.1 [4.2.0]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.18...v4.2.0 [4.1.18]: https://github.com/tailwindlabs/tailwindcss/compare/v4.1.17...v4.1.18 [3.4.19]: https://github.com/tailwindlabs/tailwindcss/compare/v3.4.18...v3.4.19 diff --git a/crates/node/npm/android-arm-eabi/package.json b/crates/node/npm/android-arm-eabi/package.json index cba6fedce0b2..34a1c58a54e0 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.2.0", + "version": "4.2.1", "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 0950b7a03e95..909ddf9145f4 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.2.0", + "version": "4.2.1", "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 423333d61dcf..bfeb71630488 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.2.0", + "version": "4.2.1", "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 81007674ee5c..bf4bfe6524e2 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.2.0", + "version": "4.2.1", "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 8c25927edc39..0619de4ad584 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.2.0", + "version": "4.2.1", "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 b2a4c0281127..cd818b2aa2da 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.2.0", + "version": "4.2.1", "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 e1855f2894c3..9dd325f38624 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.2.0", + "version": "4.2.1", "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 c6b96ab8ab14..991a9c2104b3 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.2.0", + "version": "4.2.1", "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 2d4fa6fe3c84..847484f1dcb5 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.2.0", + "version": "4.2.1", "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 5855b5d6a331..66acddc12fe0 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.2.0", + "version": "4.2.1", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/npm/wasm32-wasi/package.json b/crates/node/npm/wasm32-wasi/package.json index 0c1defca3a43..25807493d8d4 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.2.0", + "version": "4.2.1", "cpu": [ "wasm32" ], diff --git a/crates/node/npm/win32-arm64-msvc/package.json b/crates/node/npm/win32-arm64-msvc/package.json index 633a4d12eb9c..2dca490b5005 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.2.0", + "version": "4.2.1", "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 99dca35d18c4..ddcf1802662e 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.2.0", + "version": "4.2.1", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/crates/node/package.json b/crates/node/package.json index 6da669ced184..f16920029f84 100644 --- a/crates/node/package.json +++ b/crates/node/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/oxide", - "version": "4.2.0", + "version": "4.2.1", "repository": { "type": "git", "url": "git+https://github.com/tailwindlabs/tailwindcss.git", diff --git a/packages/@tailwindcss-browser/package.json b/packages/@tailwindcss-browser/package.json index 8075cfb3fc0c..12442e87e66b 100644 --- a/packages/@tailwindcss-browser/package.json +++ b/packages/@tailwindcss-browser/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/browser", - "version": "4.2.0", + "version": "4.2.1", "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 af488a701caa..2a91542f1059 100644 --- a/packages/@tailwindcss-cli/package.json +++ b/packages/@tailwindcss-cli/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/cli", - "version": "4.2.0", + "version": "4.2.1", "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 064b53f802a7..c4d7d48739ad 100644 --- a/packages/@tailwindcss-node/package.json +++ b/packages/@tailwindcss-node/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/node", - "version": "4.2.0", + "version": "4.2.1", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { diff --git a/packages/@tailwindcss-postcss/package.json b/packages/@tailwindcss-postcss/package.json index 5180133e8f27..6052a08b070b 100644 --- a/packages/@tailwindcss-postcss/package.json +++ b/packages/@tailwindcss-postcss/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/postcss", - "version": "4.2.0", + "version": "4.2.1", "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 50039f29a459..b25d5bb9e04b 100644 --- a/packages/@tailwindcss-standalone/package.json +++ b/packages/@tailwindcss-standalone/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/standalone", - "version": "4.2.0", + "version": "4.2.1", "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 b8191e23c58e..cf9de79d6a11 100644 --- a/packages/@tailwindcss-upgrade/package.json +++ b/packages/@tailwindcss-upgrade/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/upgrade", - "version": "4.2.0", + "version": "4.2.1", "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 db0297fc215a..24fac1bd46c6 100644 --- a/packages/@tailwindcss-vite/package.json +++ b/packages/@tailwindcss-vite/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/vite", - "version": "4.2.0", + "version": "4.2.1", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { diff --git a/packages/@tailwindcss-webpack/package.json b/packages/@tailwindcss-webpack/package.json index 0fcf0d3f7b0c..ed9206a9e7c0 100644 --- a/packages/@tailwindcss-webpack/package.json +++ b/packages/@tailwindcss-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@tailwindcss/webpack", - "version": "4.2.0", + "version": "4.2.1", "description": "A webpack loader for Tailwind CSS v4.", "license": "MIT", "repository": { diff --git a/packages/tailwindcss/package.json b/packages/tailwindcss/package.json index abe6da365387..f98c80152d65 100644 --- a/packages/tailwindcss/package.json +++ b/packages/tailwindcss/package.json @@ -1,6 +1,6 @@ { "name": "tailwindcss", - "version": "4.2.0", + "version": "4.2.1", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "repository": { From 097f982d7a112dd9efa9bfc6785d222afd9f4bb2 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Mon, 23 Feb 2026 13:46:49 +0100 Subject: [PATCH 100/100] update changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa0edaacd029..a2359f1812b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Allow trailing dash in functional utility names for backwards compatibility ([#19696](https://github.com/tailwindlabs/tailwindcss/pull/19696)) -- Fix missing extracted classes in mdx files containing `.` ([#19711](https://github.com/tailwindlabs/tailwindcss/pull/19711)) +- Properly detect classes containing `.` characters within curly braces in MDX files ([#19711](https://github.com/tailwindlabs/tailwindcss/pull/19711)) ## [4.2.0] - 2026-02-18 @@ -32,7 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add `inline-*`, `min-inline-*`, `max-inline-*` utilities for `inline-size`, `min-inline-size`, and `max-inline-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) - Add `block-*`, `min-block-*`, `max-block-*` utilities for `block-size`, `min-block-size`, and `max-block-size` ([#19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) - Add `inset-s-*`, `inset-e-*`, `inset-bs-*`, `inset-be-*` utilities for `inset-inline-start`, `inset-inline-end`, `inset-block-start`, and `inset-block-end` ([#19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) -- Add `font-features-*` utility for `font-feature-settings` ([#19623](https://github.com/tailwindlabs/tailwindcss/pull/19615)) +- Add `font-features-*` utility for `font-feature-settings` ([#19623](https://github.com/tailwindlabs/tailwindcss/pull/19623)) ### Fixed