diff --git a/CHANGELOG.md b/CHANGELOG.md index b60a8520d7f9..b5a3570b0d66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Nothing yet! +## [3.2.2] - 2022-11-04 + +### Fixed + +- Escape special characters in resolved content base paths ([#9650](https://github.com/tailwindlabs/tailwindcss/pull/9650)) +- Don't reuse container for array returning variant functions ([#9644](https://github.com/tailwindlabs/tailwindcss/pull/9644)) +- Exclude non-relevant selectors when generating rules with the important modifier ([#9677](https://github.com/tailwindlabs/tailwindcss/issues/9677)) +- Fix merging of arrays during config resolution ([#9706](https://github.com/tailwindlabs/tailwindcss/issues/9706)) +- Ensure configured `font-feature-settings` are included in Preflight ([#9707](https://github.com/tailwindlabs/tailwindcss/pull/9707)) +- Fix fractional values not being parsed properly inside arbitrary properties ([#9705](https://github.com/tailwindlabs/tailwindcss/pull/9705)) +- Fix incorrect selectors when using `@apply` in selectors with combinators and pseudos ([#9722](https://github.com/tailwindlabs/tailwindcss/pull/9722)) +- Fix cannot read properties of undefined (reading 'modifier') ([#9656](https://github.com/tailwindlabs/tailwindcss/pull/9656), [aa979d6](https://github.com/tailwindlabs/tailwindcss/commit/aa979d645f8bf4108c5fc938d7c0ba085b654c31)) + ## [3.2.1] - 2022-10-21 ### Fixed @@ -2088,7 +2101,8 @@ No release notes - Everything! -[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.2.1...HEAD +[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.2.2...HEAD +[3.2.2]: https://github.com/tailwindlabs/tailwindcss/compare/v3.2.1...v3.2.2 [3.2.1]: https://github.com/tailwindlabs/tailwindcss/compare/v3.2.0...v3.2.1 [3.2.0]: https://github.com/tailwindlabs/tailwindcss/compare/v3.1.8...v3.2.0 [3.1.8]: https://github.com/tailwindlabs/tailwindcss/compare/v3.1.7...v3.1.8 diff --git a/package-lock.json b/package-lock.json index 79df575d50ec..59e51c22943f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tailwindcss", - "version": "3.2.1", + "version": "3.2.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "tailwindcss", - "version": "3.2.1", + "version": "3.2.2", "license": "MIT", "dependencies": { "arg": "^5.0.2", @@ -23,7 +23,7 @@ "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.17", + "postcss": "^8.4.18", "postcss-import": "^14.1.0", "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.4", @@ -39,12 +39,12 @@ }, "devDependencies": { "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.4", + "@swc/core": "^1.3.11", "@swc/jest": "^0.2.23", "@swc/register": "^0.1.10", - "autoprefixer": "^10.4.12", - "cssnano": "^5.1.13", - "esbuild": "^0.15.10", + "autoprefixer": "^10.4.13", + "cssnano": "^5.1.14", + "esbuild": "^0.15.12", "eslint": "^8.25.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.2.1", @@ -615,9 +615,9 @@ "dev": true }, "node_modules/@esbuild/android-arm": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz", - "integrity": "sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", + "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==", "cpu": [ "arm" ], @@ -631,9 +631,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz", - "integrity": "sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz", + "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==", "cpu": [ "loong64" ], @@ -1399,9 +1399,9 @@ } }, "node_modules/@swc/core": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.4.tgz", - "integrity": "sha512-W1AvQImfF2T+7dzWdg/GqFpcMJ24lyXGQ/kPKHL/FGPZbf0Q1ExD7wp3eQ2PQMgHTLe28qWonxicm2DPfprx3g==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.11.tgz", + "integrity": "sha512-lnCnnnNCsnbrhW/gwkoN0sAeIqOyoHLS4ZB20xmPJjKVfvTnJrAcNnLSiwlYdcoUSFqT2GYZjUAG6usEzRQASA==", "dev": true, "hasInstallScript": true, "bin": { @@ -1415,25 +1415,25 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-android-arm-eabi": "1.3.4", - "@swc/core-android-arm64": "1.3.4", - "@swc/core-darwin-arm64": "1.3.4", - "@swc/core-darwin-x64": "1.3.4", - "@swc/core-freebsd-x64": "1.3.4", - "@swc/core-linux-arm-gnueabihf": "1.3.4", - "@swc/core-linux-arm64-gnu": "1.3.4", - "@swc/core-linux-arm64-musl": "1.3.4", - "@swc/core-linux-x64-gnu": "1.3.4", - "@swc/core-linux-x64-musl": "1.3.4", - "@swc/core-win32-arm64-msvc": "1.3.4", - "@swc/core-win32-ia32-msvc": "1.3.4", - "@swc/core-win32-x64-msvc": "1.3.4" + "@swc/core-android-arm-eabi": "1.3.11", + "@swc/core-android-arm64": "1.3.11", + "@swc/core-darwin-arm64": "1.3.11", + "@swc/core-darwin-x64": "1.3.11", + "@swc/core-freebsd-x64": "1.3.11", + "@swc/core-linux-arm-gnueabihf": "1.3.11", + "@swc/core-linux-arm64-gnu": "1.3.11", + "@swc/core-linux-arm64-musl": "1.3.11", + "@swc/core-linux-x64-gnu": "1.3.11", + "@swc/core-linux-x64-musl": "1.3.11", + "@swc/core-win32-arm64-msvc": "1.3.11", + "@swc/core-win32-ia32-msvc": "1.3.11", + "@swc/core-win32-x64-msvc": "1.3.11" } }, "node_modules/@swc/core-android-arm-eabi": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.3.4.tgz", - "integrity": "sha512-aq+CAebSQMtdrIR4+v/JBfykK/daD+so2gPHm4wgLaTR+xwziQAsBBI5iq5sinhIg4FGnmljtO75QolcNLmpvw==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.3.11.tgz", + "integrity": "sha512-LC9JlMcdFmTU94KKmQkJKaPSeVmYTfVm2rKGESMiFrgIjopXL/Zeg+XHA97ucnh5iUMkWIpXAMzSOaVRs33K5g==", "cpu": [ "arm" ], @@ -1450,9 +1450,9 @@ } }, "node_modules/@swc/core-android-arm64": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.3.4.tgz", - "integrity": "sha512-E5z6ribiEzDqrq5Kv5xOLdWcTzHWlzGuqDSxTQNz9GCC94qSVzXp5Df+egVEKE/4t7u2P6nO46BUKweYMb9TJg==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.3.11.tgz", + "integrity": "sha512-M7FamR3kFpVTyTw73FzKcOZmS7/TWHX75eqtwBTaU9fW4shf0KTLr/h9DnMxNKAnwUMeub/lqlINUe5EKFIKwQ==", "cpu": [ "arm64" ], @@ -1476,9 +1476,9 @@ "optional": true }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.4.tgz", - "integrity": "sha512-JNBFQKtaUdsq0Sv6N29++Q6xrvZDn1bQ7pbMvr8t7kBNXaYCDmupbwPGT725MrGVs72N4qKee5Z0OIvmnLCQfw==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.11.tgz", + "integrity": "sha512-LOoiw3uQDuoKBLW3Mn8p6wIccpYjAoDI3ROdto4MksLQSraHMufXY8bqqncfVuy1750XZmC1qnU39RC3yihPfA==", "cpu": [ "arm64" ], @@ -1492,9 +1492,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.4.tgz", - "integrity": "sha512-A6KMZsUJ3j5TVxAizbv+UEjCNvMgWBm9jw4R3biaw8kbgu3XUWHdkiheXO+c2kjjjgwr1jhkHcLgRjffwpLYFA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.11.tgz", + "integrity": "sha512-ycjrEbWmpU8MTDdVLdf76ClxQCSTfNqSoP59hieLzhmXpXUa7Oy4sN/v6WSQgp4I1euGs1Wp5kPU5hH5f7XBJQ==", "cpu": [ "x64" ], @@ -1508,9 +1508,9 @@ } }, "node_modules/@swc/core-freebsd-x64": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.3.4.tgz", - "integrity": "sha512-C5FCXHebcHwPJtEhgRShumXvcdPO5Cqiwd7GDNBav1IZribs3+ZqrTkCaz2hY7gb5NvyFIxkJ5HhpS4Pxafhuw==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.3.11.tgz", + "integrity": "sha512-02uqYktPp6WmZfZ2Crc/yIVOcgANtjo8ciHcT7yLHvz7v+S7gx1I2tyNGUFtTX5hcR2IFNGrL8Yj4DvpTABFHg==", "cpu": [ "x64" ], @@ -1534,9 +1534,9 @@ "optional": true }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.4.tgz", - "integrity": "sha512-vawHUhUcS//xNvGzL0zZ3vZ1YnsjgyvWQXB5PF4bhM5Y0/rmcrEdpkSId1qTfaMpcL7l2QSy9/DM7ucjlSpK6w==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.11.tgz", + "integrity": "sha512-nZ2T/gPFncsIiFGhVeVY9vRCTX0hTdqso8OEvFhSwRfRvcEYOpb/rhMG09are7YoB44GMiku5tSzEiNmvT3GuQ==", "cpu": [ "arm" ], @@ -1560,9 +1560,9 @@ "optional": true }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.4.tgz", - "integrity": "sha512-p60RoYaDS8zrqp/cGkcJryk9HobJvrL+Ox/iz8ivDrV4IS0LXvqW5/5YTSzLo93/+blvG/M0hdaokoMhWhDnwA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.11.tgz", + "integrity": "sha512-EWEd8NnGwhykEDFIet/r4Fcfr6805ecnBniHZWmG8UVYUp5tz7LYEMZesxCxa0+aGVpCmxHL5/Cdk1uEIrVIzg==", "cpu": [ "arm64" ], @@ -1576,9 +1576,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.4.tgz", - "integrity": "sha512-F9hW6g5l4YesJJH/JMznaLGdLeCV4FKq5MN5DaZfuB8qrCZGLmAasGgvSNbXh1oZnDu1PD2ZxMYivkf2n8/4OA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.11.tgz", + "integrity": "sha512-ms7CLj2+8sfTM2QnnwqDheYRky9rgPpX2hXmc0KltX+AiSAs7WURjn2JwXWkaICDzXL+djennfswxSspJ53knw==", "cpu": [ "arm64" ], @@ -1592,9 +1592,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.4.tgz", - "integrity": "sha512-rRqDtxktiVaxO8NQeEZSX0kNSFkI5Ft+4fZcFTbWhDO0vknC0+ZYbWpverfQ8yAwo7aA9jKWupwc3I7iZ1EQQQ==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.11.tgz", + "integrity": "sha512-Fq5/QEY0IbzpIrqlvQT59aMf+nLk//esL3Aj4nvZdsvF4iZaD2oHtXW+/MBi0i1HV9OBWApGZMygYNVS0uVZkQ==", "cpu": [ "x64" ], @@ -1608,9 +1608,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.4.tgz", - "integrity": "sha512-stVnU7KXQxSbh67UiIVxZsgjkRSXApPTEU3CYnwsdH7G+ynfO1WocSatzjIKpJfhcY2Nss8/33yDaOKZXVhbIA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.11.tgz", + "integrity": "sha512-S/KoEgRHwGhs7VunHiz4jLrnFOJvqZe391j2MiYN1p2EThoGI3rvwcUoHkoxLCXVuDbi4E91qodOheaMGetWNA==", "cpu": [ "x64" ], @@ -1624,9 +1624,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.4.tgz", - "integrity": "sha512-qc3UIdAQfLTA1mJsFkX3ISqJDU02qtcjUbnLI8sl6oedCAOFF66TcecJvwl4iO+BTO04+KoZc5rJovSTOb3eQA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.11.tgz", + "integrity": "sha512-fFby7KOQIxolR6w4Gie8MSkgQ3ee6j3r7A6PX4ekzu+509QsZogLPZnWFTJ8WFo7ui0tx/ocA5X8BV4ZNBVlKQ==", "cpu": [ "arm64" ], @@ -1650,9 +1650,9 @@ "optional": true }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.4.tgz", - "integrity": "sha512-FxuDGn60VrnYBcpH0CeR9+pCnPUaVvZ20CO6o/oNYHSfIhqPc76o3zFYYEFswYodExjCCYwsuPYgi+stvKZroA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.11.tgz", + "integrity": "sha512-fii7Y33S9Z5oZ/BTsXa8Ou/RZ4T/ZsAOFpG7mMvifpdAP6LVWdhLoNy7SeeEHTEAWGcWNA/FslA6p2WETvEEfA==", "cpu": [ "ia32" ], @@ -1676,9 +1676,9 @@ "optional": true }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.4.tgz", - "integrity": "sha512-9/bSvgjV31u1G2slRFPgK85ohJdo8KtWJ0f4CPp2LdVtIJHbFGd0pWjnMfiPJeodSxSGGWrgUNQtajqIIsrbqA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.11.tgz", + "integrity": "sha512-cDF4qBQLf3U0KypnLn3T1HtE12QmEplPGjWs2Xd/hzVkjsPixVR8XIgLlczsj7Pk7Of7VDnUDLIl52aIdgTm8w==", "cpu": [ "x64" ], @@ -1988,9 +1988,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.12", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", - "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "dev": true, "funding": [ { @@ -2004,7 +2004,7 @@ ], "dependencies": { "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -2223,9 +2223,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001409", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001409.tgz", - "integrity": "sha512-V0mnJ5dwarmhYv8/MzhJ//aW68UpvnQBXv8lJ2QUsvn2pHcmAuNtu8hQEDz37XnA1iE+lRR9CIfGWWpgJ5QedQ==", + "version": "1.0.30001429", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz", + "integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==", "dev": true, "funding": [ { @@ -2398,9 +2398,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, "node_modules/commander": { @@ -2442,9 +2442,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz", - "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", "dev": true, "engines": { "node": "^10 || ^12 || >=14" @@ -2506,12 +2506,12 @@ } }, "node_modules/cssnano": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", - "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", + "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", "dev": true, "dependencies": { - "cssnano-preset-default": "^5.2.12", + "cssnano-preset-default": "^5.2.13", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, @@ -2527,25 +2527,25 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", "dev": true, "dependencies": { - "css-declaration-sorter": "^6.3.0", + "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", + "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", + "postcss-minify-params": "^5.1.4", "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", @@ -2553,11 +2553,11 @@ "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-initial": "^5.1.1", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -2802,9 +2802,9 @@ } }, "node_modules/esbuild": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz", - "integrity": "sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", + "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==", "dev": true, "hasInstallScript": true, "bin": { @@ -2814,34 +2814,34 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.15.10", - "@esbuild/linux-loong64": "0.15.10", - "esbuild-android-64": "0.15.10", - "esbuild-android-arm64": "0.15.10", - "esbuild-darwin-64": "0.15.10", - "esbuild-darwin-arm64": "0.15.10", - "esbuild-freebsd-64": "0.15.10", - "esbuild-freebsd-arm64": "0.15.10", - "esbuild-linux-32": "0.15.10", - "esbuild-linux-64": "0.15.10", - "esbuild-linux-arm": "0.15.10", - "esbuild-linux-arm64": "0.15.10", - "esbuild-linux-mips64le": "0.15.10", - "esbuild-linux-ppc64le": "0.15.10", - "esbuild-linux-riscv64": "0.15.10", - "esbuild-linux-s390x": "0.15.10", - "esbuild-netbsd-64": "0.15.10", - "esbuild-openbsd-64": "0.15.10", - "esbuild-sunos-64": "0.15.10", - "esbuild-windows-32": "0.15.10", - "esbuild-windows-64": "0.15.10", - "esbuild-windows-arm64": "0.15.10" + "@esbuild/android-arm": "0.15.12", + "@esbuild/linux-loong64": "0.15.12", + "esbuild-android-64": "0.15.12", + "esbuild-android-arm64": "0.15.12", + "esbuild-darwin-64": "0.15.12", + "esbuild-darwin-arm64": "0.15.12", + "esbuild-freebsd-64": "0.15.12", + "esbuild-freebsd-arm64": "0.15.12", + "esbuild-linux-32": "0.15.12", + "esbuild-linux-64": "0.15.12", + "esbuild-linux-arm": "0.15.12", + "esbuild-linux-arm64": "0.15.12", + "esbuild-linux-mips64le": "0.15.12", + "esbuild-linux-ppc64le": "0.15.12", + "esbuild-linux-riscv64": "0.15.12", + "esbuild-linux-s390x": "0.15.12", + "esbuild-netbsd-64": "0.15.12", + "esbuild-openbsd-64": "0.15.12", + "esbuild-sunos-64": "0.15.12", + "esbuild-windows-32": "0.15.12", + "esbuild-windows-64": "0.15.12", + "esbuild-windows-arm64": "0.15.12" } }, "node_modules/esbuild-android-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz", - "integrity": "sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz", + "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==", "cpu": [ "x64" ], @@ -2855,9 +2855,9 @@ } }, "node_modules/esbuild-android-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz", - "integrity": "sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz", + "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==", "cpu": [ "arm64" ], @@ -2871,9 +2871,9 @@ } }, "node_modules/esbuild-darwin-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz", - "integrity": "sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz", + "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==", "cpu": [ "x64" ], @@ -2887,9 +2887,9 @@ } }, "node_modules/esbuild-darwin-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz", - "integrity": "sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz", + "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==", "cpu": [ "arm64" ], @@ -2903,9 +2903,9 @@ } }, "node_modules/esbuild-freebsd-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz", - "integrity": "sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz", + "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==", "cpu": [ "x64" ], @@ -2919,9 +2919,9 @@ } }, "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz", - "integrity": "sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz", + "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==", "cpu": [ "arm64" ], @@ -2935,9 +2935,9 @@ } }, "node_modules/esbuild-linux-32": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz", - "integrity": "sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz", + "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==", "cpu": [ "ia32" ], @@ -2951,9 +2951,9 @@ } }, "node_modules/esbuild-linux-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz", - "integrity": "sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz", + "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==", "cpu": [ "x64" ], @@ -2967,9 +2967,9 @@ } }, "node_modules/esbuild-linux-arm": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz", - "integrity": "sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz", + "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==", "cpu": [ "arm" ], @@ -2983,9 +2983,9 @@ } }, "node_modules/esbuild-linux-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz", - "integrity": "sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz", + "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==", "cpu": [ "arm64" ], @@ -2999,9 +2999,9 @@ } }, "node_modules/esbuild-linux-mips64le": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz", - "integrity": "sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz", + "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==", "cpu": [ "mips64el" ], @@ -3015,9 +3015,9 @@ } }, "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz", - "integrity": "sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz", + "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==", "cpu": [ "ppc64" ], @@ -3031,9 +3031,9 @@ } }, "node_modules/esbuild-linux-riscv64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz", - "integrity": "sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz", + "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==", "cpu": [ "riscv64" ], @@ -3047,9 +3047,9 @@ } }, "node_modules/esbuild-linux-s390x": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz", - "integrity": "sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz", + "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==", "cpu": [ "s390x" ], @@ -3063,9 +3063,9 @@ } }, "node_modules/esbuild-netbsd-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz", - "integrity": "sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz", + "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==", "cpu": [ "x64" ], @@ -3079,9 +3079,9 @@ } }, "node_modules/esbuild-openbsd-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz", - "integrity": "sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz", + "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==", "cpu": [ "x64" ], @@ -3095,9 +3095,9 @@ } }, "node_modules/esbuild-sunos-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz", - "integrity": "sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz", + "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==", "cpu": [ "x64" ], @@ -3111,9 +3111,9 @@ } }, "node_modules/esbuild-windows-32": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz", - "integrity": "sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz", + "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==", "cpu": [ "ia32" ], @@ -3127,9 +3127,9 @@ } }, "node_modules/esbuild-windows-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz", - "integrity": "sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz", + "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==", "cpu": [ "x64" ], @@ -3143,9 +3143,9 @@ } }, "node_modules/esbuild-windows-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz", - "integrity": "sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz", + "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==", "cpu": [ "arm64" ], @@ -5654,9 +5654,9 @@ } }, "node_modules/postcss": { - "version": "8.4.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", - "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "funding": [ { "type": "opencollective", @@ -5708,12 +5708,12 @@ } }, "node_modules/postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, "dependencies": { - "browserslist": "^4.20.3", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -5834,13 +5834,13 @@ } }, "node_modules/postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "stylehacks": "^5.1.1" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -5850,12 +5850,12 @@ } }, "node_modules/postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" @@ -5900,12 +5900,12 @@ } }, "node_modules/postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, @@ -6037,12 +6037,12 @@ } }, "node_modules/postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -6100,12 +6100,12 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "engines": { @@ -6610,12 +6610,12 @@ } }, "node_modules/stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "engines": { @@ -7368,16 +7368,16 @@ "dev": true }, "@esbuild/android-arm": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz", - "integrity": "sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", + "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz", - "integrity": "sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz", + "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==", "dev": true, "optional": true }, @@ -8001,30 +8001,30 @@ } }, "@swc/core": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.4.tgz", - "integrity": "sha512-W1AvQImfF2T+7dzWdg/GqFpcMJ24lyXGQ/kPKHL/FGPZbf0Q1ExD7wp3eQ2PQMgHTLe28qWonxicm2DPfprx3g==", - "dev": true, - "requires": { - "@swc/core-android-arm-eabi": "1.3.4", - "@swc/core-android-arm64": "1.3.4", - "@swc/core-darwin-arm64": "1.3.4", - "@swc/core-darwin-x64": "1.3.4", - "@swc/core-freebsd-x64": "1.3.4", - "@swc/core-linux-arm-gnueabihf": "1.3.4", - "@swc/core-linux-arm64-gnu": "1.3.4", - "@swc/core-linux-arm64-musl": "1.3.4", - "@swc/core-linux-x64-gnu": "1.3.4", - "@swc/core-linux-x64-musl": "1.3.4", - "@swc/core-win32-arm64-msvc": "1.3.4", - "@swc/core-win32-ia32-msvc": "1.3.4", - "@swc/core-win32-x64-msvc": "1.3.4" + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.11.tgz", + "integrity": "sha512-lnCnnnNCsnbrhW/gwkoN0sAeIqOyoHLS4ZB20xmPJjKVfvTnJrAcNnLSiwlYdcoUSFqT2GYZjUAG6usEzRQASA==", + "dev": true, + "requires": { + "@swc/core-android-arm-eabi": "1.3.11", + "@swc/core-android-arm64": "1.3.11", + "@swc/core-darwin-arm64": "1.3.11", + "@swc/core-darwin-x64": "1.3.11", + "@swc/core-freebsd-x64": "1.3.11", + "@swc/core-linux-arm-gnueabihf": "1.3.11", + "@swc/core-linux-arm64-gnu": "1.3.11", + "@swc/core-linux-arm64-musl": "1.3.11", + "@swc/core-linux-x64-gnu": "1.3.11", + "@swc/core-linux-x64-musl": "1.3.11", + "@swc/core-win32-arm64-msvc": "1.3.11", + "@swc/core-win32-ia32-msvc": "1.3.11", + "@swc/core-win32-x64-msvc": "1.3.11" } }, "@swc/core-android-arm-eabi": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.3.4.tgz", - "integrity": "sha512-aq+CAebSQMtdrIR4+v/JBfykK/daD+so2gPHm4wgLaTR+xwziQAsBBI5iq5sinhIg4FGnmljtO75QolcNLmpvw==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.3.11.tgz", + "integrity": "sha512-LC9JlMcdFmTU94KKmQkJKaPSeVmYTfVm2rKGESMiFrgIjopXL/Zeg+XHA97ucnh5iUMkWIpXAMzSOaVRs33K5g==", "dev": true, "optional": true, "requires": { @@ -8032,9 +8032,9 @@ } }, "@swc/core-android-arm64": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.3.4.tgz", - "integrity": "sha512-E5z6ribiEzDqrq5Kv5xOLdWcTzHWlzGuqDSxTQNz9GCC94qSVzXp5Df+egVEKE/4t7u2P6nO46BUKweYMb9TJg==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-android-arm64/-/core-android-arm64-1.3.11.tgz", + "integrity": "sha512-M7FamR3kFpVTyTw73FzKcOZmS7/TWHX75eqtwBTaU9fW4shf0KTLr/h9DnMxNKAnwUMeub/lqlINUe5EKFIKwQ==", "dev": true, "optional": true, "requires": { @@ -8051,23 +8051,23 @@ } }, "@swc/core-darwin-arm64": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.4.tgz", - "integrity": "sha512-JNBFQKtaUdsq0Sv6N29++Q6xrvZDn1bQ7pbMvr8t7kBNXaYCDmupbwPGT725MrGVs72N4qKee5Z0OIvmnLCQfw==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.11.tgz", + "integrity": "sha512-LOoiw3uQDuoKBLW3Mn8p6wIccpYjAoDI3ROdto4MksLQSraHMufXY8bqqncfVuy1750XZmC1qnU39RC3yihPfA==", "dev": true, "optional": true }, "@swc/core-darwin-x64": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.4.tgz", - "integrity": "sha512-A6KMZsUJ3j5TVxAizbv+UEjCNvMgWBm9jw4R3biaw8kbgu3XUWHdkiheXO+c2kjjjgwr1jhkHcLgRjffwpLYFA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.11.tgz", + "integrity": "sha512-ycjrEbWmpU8MTDdVLdf76ClxQCSTfNqSoP59hieLzhmXpXUa7Oy4sN/v6WSQgp4I1euGs1Wp5kPU5hH5f7XBJQ==", "dev": true, "optional": true }, "@swc/core-freebsd-x64": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.3.4.tgz", - "integrity": "sha512-C5FCXHebcHwPJtEhgRShumXvcdPO5Cqiwd7GDNBav1IZribs3+ZqrTkCaz2hY7gb5NvyFIxkJ5HhpS4Pxafhuw==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-freebsd-x64/-/core-freebsd-x64-1.3.11.tgz", + "integrity": "sha512-02uqYktPp6WmZfZ2Crc/yIVOcgANtjo8ciHcT7yLHvz7v+S7gx1I2tyNGUFtTX5hcR2IFNGrL8Yj4DvpTABFHg==", "dev": true, "optional": true, "requires": { @@ -8084,9 +8084,9 @@ } }, "@swc/core-linux-arm-gnueabihf": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.4.tgz", - "integrity": "sha512-vawHUhUcS//xNvGzL0zZ3vZ1YnsjgyvWQXB5PF4bhM5Y0/rmcrEdpkSId1qTfaMpcL7l2QSy9/DM7ucjlSpK6w==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.11.tgz", + "integrity": "sha512-nZ2T/gPFncsIiFGhVeVY9vRCTX0hTdqso8OEvFhSwRfRvcEYOpb/rhMG09are7YoB44GMiku5tSzEiNmvT3GuQ==", "dev": true, "optional": true, "requires": { @@ -8103,37 +8103,37 @@ } }, "@swc/core-linux-arm64-gnu": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.4.tgz", - "integrity": "sha512-p60RoYaDS8zrqp/cGkcJryk9HobJvrL+Ox/iz8ivDrV4IS0LXvqW5/5YTSzLo93/+blvG/M0hdaokoMhWhDnwA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.11.tgz", + "integrity": "sha512-EWEd8NnGwhykEDFIet/r4Fcfr6805ecnBniHZWmG8UVYUp5tz7LYEMZesxCxa0+aGVpCmxHL5/Cdk1uEIrVIzg==", "dev": true, "optional": true }, "@swc/core-linux-arm64-musl": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.4.tgz", - "integrity": "sha512-F9hW6g5l4YesJJH/JMznaLGdLeCV4FKq5MN5DaZfuB8qrCZGLmAasGgvSNbXh1oZnDu1PD2ZxMYivkf2n8/4OA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.11.tgz", + "integrity": "sha512-ms7CLj2+8sfTM2QnnwqDheYRky9rgPpX2hXmc0KltX+AiSAs7WURjn2JwXWkaICDzXL+djennfswxSspJ53knw==", "dev": true, "optional": true }, "@swc/core-linux-x64-gnu": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.4.tgz", - "integrity": "sha512-rRqDtxktiVaxO8NQeEZSX0kNSFkI5Ft+4fZcFTbWhDO0vknC0+ZYbWpverfQ8yAwo7aA9jKWupwc3I7iZ1EQQQ==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.11.tgz", + "integrity": "sha512-Fq5/QEY0IbzpIrqlvQT59aMf+nLk//esL3Aj4nvZdsvF4iZaD2oHtXW+/MBi0i1HV9OBWApGZMygYNVS0uVZkQ==", "dev": true, "optional": true }, "@swc/core-linux-x64-musl": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.4.tgz", - "integrity": "sha512-stVnU7KXQxSbh67UiIVxZsgjkRSXApPTEU3CYnwsdH7G+ynfO1WocSatzjIKpJfhcY2Nss8/33yDaOKZXVhbIA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.11.tgz", + "integrity": "sha512-S/KoEgRHwGhs7VunHiz4jLrnFOJvqZe391j2MiYN1p2EThoGI3rvwcUoHkoxLCXVuDbi4E91qodOheaMGetWNA==", "dev": true, "optional": true }, "@swc/core-win32-arm64-msvc": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.4.tgz", - "integrity": "sha512-qc3UIdAQfLTA1mJsFkX3ISqJDU02qtcjUbnLI8sl6oedCAOFF66TcecJvwl4iO+BTO04+KoZc5rJovSTOb3eQA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.11.tgz", + "integrity": "sha512-fFby7KOQIxolR6w4Gie8MSkgQ3ee6j3r7A6PX4ekzu+509QsZogLPZnWFTJ8WFo7ui0tx/ocA5X8BV4ZNBVlKQ==", "dev": true, "optional": true, "requires": { @@ -8150,9 +8150,9 @@ } }, "@swc/core-win32-ia32-msvc": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.4.tgz", - "integrity": "sha512-FxuDGn60VrnYBcpH0CeR9+pCnPUaVvZ20CO6o/oNYHSfIhqPc76o3zFYYEFswYodExjCCYwsuPYgi+stvKZroA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.11.tgz", + "integrity": "sha512-fii7Y33S9Z5oZ/BTsXa8Ou/RZ4T/ZsAOFpG7mMvifpdAP6LVWdhLoNy7SeeEHTEAWGcWNA/FslA6p2WETvEEfA==", "dev": true, "optional": true, "requires": { @@ -8169,9 +8169,9 @@ } }, "@swc/core-win32-x64-msvc": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.4.tgz", - "integrity": "sha512-9/bSvgjV31u1G2slRFPgK85ohJdo8KtWJ0f4CPp2LdVtIJHbFGd0pWjnMfiPJeodSxSGGWrgUNQtajqIIsrbqA==", + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.11.tgz", + "integrity": "sha512-cDF4qBQLf3U0KypnLn3T1HtE12QmEplPGjWs2Xd/hzVkjsPixVR8XIgLlczsj7Pk7Of7VDnUDLIl52aIdgTm8w==", "dev": true, "optional": true }, @@ -8417,13 +8417,13 @@ "dev": true }, "autoprefixer": { - "version": "10.4.12", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", - "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "dev": true, "requires": { "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -8584,9 +8584,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001409", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001409.tgz", - "integrity": "sha512-V0mnJ5dwarmhYv8/MzhJ//aW68UpvnQBXv8lJ2QUsvn2pHcmAuNtu8hQEDz37XnA1iE+lRR9CIfGWWpgJ5QedQ==", + "version": "1.0.30001429", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz", + "integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==", "dev": true }, "chalk": { @@ -8709,9 +8709,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, "commander": { @@ -8747,9 +8747,9 @@ } }, "css-declaration-sorter": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz", - "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", "dev": true, "requires": {} }, @@ -8788,36 +8788,36 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "cssnano": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", - "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", + "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", "dev": true, "requires": { - "cssnano-preset-default": "^5.2.12", + "cssnano-preset-default": "^5.2.13", "lilconfig": "^2.0.3", "yaml": "^1.10.2" } }, "cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", "dev": true, "requires": { - "css-declaration-sorter": "^6.3.0", + "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", + "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", + "postcss-minify-params": "^5.1.4", "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", @@ -8825,11 +8825,11 @@ "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-initial": "^5.1.1", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -9004,172 +9004,172 @@ } }, "esbuild": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz", - "integrity": "sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.10", - "@esbuild/linux-loong64": "0.15.10", - "esbuild-android-64": "0.15.10", - "esbuild-android-arm64": "0.15.10", - "esbuild-darwin-64": "0.15.10", - "esbuild-darwin-arm64": "0.15.10", - "esbuild-freebsd-64": "0.15.10", - "esbuild-freebsd-arm64": "0.15.10", - "esbuild-linux-32": "0.15.10", - "esbuild-linux-64": "0.15.10", - "esbuild-linux-arm": "0.15.10", - "esbuild-linux-arm64": "0.15.10", - "esbuild-linux-mips64le": "0.15.10", - "esbuild-linux-ppc64le": "0.15.10", - "esbuild-linux-riscv64": "0.15.10", - "esbuild-linux-s390x": "0.15.10", - "esbuild-netbsd-64": "0.15.10", - "esbuild-openbsd-64": "0.15.10", - "esbuild-sunos-64": "0.15.10", - "esbuild-windows-32": "0.15.10", - "esbuild-windows-64": "0.15.10", - "esbuild-windows-arm64": "0.15.10" + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", + "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.15.12", + "@esbuild/linux-loong64": "0.15.12", + "esbuild-android-64": "0.15.12", + "esbuild-android-arm64": "0.15.12", + "esbuild-darwin-64": "0.15.12", + "esbuild-darwin-arm64": "0.15.12", + "esbuild-freebsd-64": "0.15.12", + "esbuild-freebsd-arm64": "0.15.12", + "esbuild-linux-32": "0.15.12", + "esbuild-linux-64": "0.15.12", + "esbuild-linux-arm": "0.15.12", + "esbuild-linux-arm64": "0.15.12", + "esbuild-linux-mips64le": "0.15.12", + "esbuild-linux-ppc64le": "0.15.12", + "esbuild-linux-riscv64": "0.15.12", + "esbuild-linux-s390x": "0.15.12", + "esbuild-netbsd-64": "0.15.12", + "esbuild-openbsd-64": "0.15.12", + "esbuild-sunos-64": "0.15.12", + "esbuild-windows-32": "0.15.12", + "esbuild-windows-64": "0.15.12", + "esbuild-windows-arm64": "0.15.12" } }, "esbuild-android-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz", - "integrity": "sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz", + "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==", "dev": true, "optional": true }, "esbuild-android-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz", - "integrity": "sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz", + "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz", - "integrity": "sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz", + "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz", - "integrity": "sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz", + "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz", - "integrity": "sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz", + "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz", - "integrity": "sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz", + "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz", - "integrity": "sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz", + "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz", - "integrity": "sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz", + "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz", - "integrity": "sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz", + "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz", - "integrity": "sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz", + "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz", - "integrity": "sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz", + "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz", - "integrity": "sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz", + "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==", "dev": true, "optional": true }, "esbuild-linux-riscv64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz", - "integrity": "sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz", + "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==", "dev": true, "optional": true }, "esbuild-linux-s390x": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz", - "integrity": "sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz", + "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==", "dev": true, "optional": true }, "esbuild-netbsd-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz", - "integrity": "sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz", + "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz", - "integrity": "sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz", + "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==", "dev": true, "optional": true }, "esbuild-sunos-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz", - "integrity": "sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz", + "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==", "dev": true, "optional": true }, "esbuild-windows-32": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz", - "integrity": "sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz", + "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz", - "integrity": "sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz", + "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.15.10", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz", - "integrity": "sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz", + "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==", "dev": true, "optional": true }, @@ -11113,9 +11113,9 @@ } }, "postcss": { - "version": "8.4.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", - "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "requires": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -11145,12 +11145,12 @@ } }, "postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, "requires": { - "browserslist": "^4.20.3", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" } }, @@ -11210,22 +11210,22 @@ } }, "postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "stylehacks": "^5.1.1" } }, "postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" @@ -11252,12 +11252,12 @@ } }, "postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" } @@ -11332,12 +11332,12 @@ } }, "postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" } }, @@ -11371,12 +11371,12 @@ } }, "postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" } }, @@ -11714,12 +11714,12 @@ "dev": true }, "stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" } }, diff --git a/package.json b/package.json index b2f60694b925..a84374078469 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tailwindcss", - "version": "3.2.1", + "version": "3.2.2", "description": "A utility-first CSS framework for rapidly building custom user interfaces.", "license": "MIT", "main": "lib/index.js", @@ -44,12 +44,12 @@ ], "devDependencies": { "@swc/cli": "^0.1.57", - "@swc/core": "^1.3.4", + "@swc/core": "^1.3.11", "@swc/jest": "^0.2.23", "@swc/register": "^0.1.10", - "autoprefixer": "^10.4.12", - "cssnano": "^5.1.13", - "esbuild": "^0.15.10", + "autoprefixer": "^10.4.13", + "cssnano": "^5.1.14", + "esbuild": "^0.15.12", "eslint": "^8.25.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.2.1", @@ -77,7 +77,7 @@ "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.17", + "postcss": "^8.4.18", "postcss-import": "^14.1.0", "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.4", diff --git a/src/cli/build/watching.js b/src/cli/build/watching.js index 9b5462a244fd..c5204b610e54 100644 --- a/src/cli/build/watching.js +++ b/src/cli/build/watching.js @@ -8,6 +8,14 @@ import path from 'path' import { readFileWithRetries } from './utils.js' +/** + * The core idea of this watcher is: + * 1. Whenever a file is added, changed, or renamed we queue a rebuild + * 2. Perform as few rebuilds as possible by batching them together + * 3. Coalesce events that happen in quick succession to avoid unnecessary rebuilds + * 4. Ensure another rebuild happens _if_ changed while a rebuild is in progress + */ + /** * * @param {*} args @@ -42,27 +50,93 @@ export function createWatcher(args, { state, rebuild }) { : false, }) + // A queue of rebuilds, file reads, etc… to run let chain = Promise.resolve() - let pendingRebuilds = new Set() + + /** + * A list of files that have been changed since the last rebuild + * + * @type {{file: string, content: () => Promise, extension: string}[]} + */ let changedContent = [] + /** + * A list of files for which a rebuild has already been queued. + * This is used to prevent duplicate rebuilds when multiple events are fired for the same file. + * The rebuilt file is cleared from this list when it's associated rebuild has _started_ + * This is because if the file is changed during a rebuild it won't trigger a new rebuild which it should + **/ + let pendingRebuilds = new Set() + + let _timer + let _reject + + /** + * Rebuilds the changed files and resolves when the rebuild is + * complete regardless of whether it was successful or not + */ + async function rebuildAndContinue() { + let changes = changedContent.splice(0) + + // There are no changes to rebuild so we can just do nothing + if (changes.length === 0) { + return Promise.resolve() + } + + // Clear all pending rebuilds for the about-to-be-built files + changes.forEach((change) => pendingRebuilds.delete(change.file)) + + // Resolve the promise even when the rebuild fails + return rebuild(changes).then( + () => {}, + () => {} + ) + } + /** * * @param {*} file * @param {(() => Promise) | null} content + * @returns {Promise} */ function recordChangedFile(file, content = null) { file = path.resolve(file) - content = content ?? (async () => await fs.promises.readFile(file, 'utf8')) + // Applications like Vim/Neovim fire both rename and change events in succession for atomic writes + // In that case rebuild has already been queued by rename, so can be skipped in change + if (pendingRebuilds.has(file)) { + return Promise.resolve() + } + + // Mark that a rebuild of this file is going to happen + // It MUST happen synchronously before the rebuild is queued for this to be effective + pendingRebuilds.add(file) changedContent.push({ file, - content, + content: content ?? (() => fs.promises.readFile(file, 'utf8')), extension: path.extname(file).slice(1), }) - chain = chain.then(() => rebuild(changedContent.splice(0))) + if (_timer) { + clearTimeout(_timer) + _reject() + } + + // If a rebuild is already in progress we don't want to start another one until the 10ms timer has expired + chain = chain.then( + () => + new Promise((resolve, reject) => { + _timer = setTimeout(resolve, 10) + _reject = reject + }) + ) + + // Resolves once this file has been rebuilt (or the rebuild for this file has failed) + // This queues as many rebuilds as there are changed files + // But those rebuilds happen after some delay + // And will immediately resolve if there are no changes + chain = chain.then(rebuildAndContinue, rebuildAndContinue) return chain } @@ -107,18 +181,34 @@ export function createWatcher(args, { state, rebuild }) { return } + // We'll go ahead and add the file to the pending rebuilds list here + // It'll be removed when the rebuild starts unless the read fails + // which will be taken care of as well pendingRebuilds.add(filePath) - chain = chain.then(async () => { - let content - + async function enqueue() { try { - content = await readFileWithRetries(path.resolve(filePath)) - } finally { - pendingRebuilds.delete(filePath) + // We need to read the file as early as possible outside of the chain + // because it may be gone by the time we get to it. doing the read + // immediately increases the chance that the file is still there + let content = await readFileWithRetries(path.resolve(filePath)) + + if (content === undefined) { + return + } + + // This will push the rebuild onto the chain + // @ts-ignore: TypeScript isn't picking up that content is a string here + await recordChangedFile(filePath, () => content) + } catch { + // If reading the file fails, it's was probably a deleted temporary file + // So we can ignore it and no rebuild is needed } + } - return recordChangedFile(filePath, () => content) + enqueue().then(() => { + // If the file read fails we still need to make sure the file isn't stuck in the pending rebuilds list + pendingRebuilds.delete(filePath) }) }) diff --git a/src/css/preflight.css b/src/css/preflight.css index 45ab5c55c5db..3029044290d5 100644 --- a/src/css/preflight.css +++ b/src/css/preflight.css @@ -22,6 +22,7 @@ 2. Prevent adjustments of font size after orientation changes in iOS. 3. Use a more readable tab size. 4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. */ html { @@ -30,6 +31,7 @@ html { -moz-tab-size: 4; /* 3 */ tab-size: 4; /* 3 */ font-family: theme('fontFamily.sans', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); /* 4 */ + font-feature-settings: theme('fontFamily.sans[1].fontFeatureSettings', normal); /* 5 */ } /* diff --git a/src/lib/content.js b/src/lib/content.js index 708bb687bb08..c486a6886374 100644 --- a/src/lib/content.js +++ b/src/lib/content.js @@ -94,17 +94,18 @@ function parseFilePath(filePath, ignore) { * @returns {ContentPath} */ function resolveGlobPattern(contentPath) { - contentPath.pattern = contentPath.glob - ? `${contentPath.base}/${contentPath.glob}` - : contentPath.base - - contentPath.pattern = contentPath.ignore ? `!${contentPath.pattern}` : contentPath.pattern - // This is required for Windows support to properly pick up Glob paths. // Afaik, this technically shouldn't be needed but there's probably // some internal, direct path matching with a normalized path in // a package which can't handle mixed directory separators - contentPath.pattern = normalizePath(contentPath.pattern) + let base = normalizePath(contentPath.base) + + // If the user's file path contains any special characters (like parens) for instance fast-glob + // is like "OOOH SHINY" and treats them as such. So we have to escape the base path to fix this + base = fastGlob.escapePath(base) + + contentPath.pattern = contentPath.glob ? `${base}/${contentPath.glob}` : base + contentPath.pattern = contentPath.ignore ? `!${contentPath.pattern}` : contentPath.pattern return contentPath } diff --git a/src/lib/defaultExtractor.js b/src/lib/defaultExtractor.js index 965e644d2131..15d27aca4348 100644 --- a/src/lib/defaultExtractor.js +++ b/src/lib/defaultExtractor.js @@ -29,7 +29,7 @@ function* buildRegExps(context) { let utility = regex.any([ // Arbitrary properties - /\[[^\s:'"`]+:[^\s\]]+\]/, + /\[[^\s:'"`]+:[^\s]+\]/, // Utilities regex.pattern([ diff --git a/src/lib/expandApplyAtRules.js b/src/lib/expandApplyAtRules.js index 7dad021f0d82..e1453af0152a 100644 --- a/src/lib/expandApplyAtRules.js +++ b/src/lib/expandApplyAtRules.js @@ -346,22 +346,42 @@ function processApply(root, context, localCache) { }) }) - // Sort tag names before class names + // Sort tag names before class names (but only sort each group (separated by a combinator) + // separately and not in total) // This happens when replacing `.bar` in `.foo.bar` with a tag like `section` - for (const sel of replaced) { - sel.sort((a, b) => { - if (a.type === 'tag' && b.type === 'class') { - return -1 - } else if (a.type === 'class' && b.type === 'tag') { - return 1 - } else if (a.type === 'class' && b.type === 'pseudo') { - return -1 - } else if (a.type === 'pseudo' && b.type === 'class') { - return 1 + for (let sel of replaced) { + let groups = [[]] + for (let node of sel.nodes) { + if (node.type === 'combinator') { + groups.push(node) + groups.push([]) + } else { + let last = groups[groups.length - 1] + last.push(node) } + } - return sel.index(a) - sel.index(b) - }) + sel.nodes = [] + + for (let group of groups) { + if (Array.isArray(group)) { + group.sort((a, b) => { + if (a.type === 'tag' && b.type === 'class') { + return -1 + } else if (a.type === 'class' && b.type === 'tag') { + return 1 + } else if (a.type === 'class' && b.type === 'pseudo') { + return -1 + } else if (a.type === 'pseudo' && b.type === 'class') { + return 1 + } + + return 0 + }) + } + + sel.nodes = sel.nodes.concat(group) + } } sel.replaceWith(...replaced) @@ -382,7 +402,7 @@ function processApply(root, context, localCache) { if (apply.parent.type === 'atrule') { if (apply.parent.name === 'screen') { - const screenType = apply.parent.params + let screenType = apply.parent.params throw apply.error( `@apply is not supported within nested at-rules like @screen. We suggest you write this as @apply ${applyCandidates @@ -414,7 +434,7 @@ function processApply(root, context, localCache) { } } - for (const [parent, [candidates, atApplySource]] of perParentApplies) { + for (let [parent, [candidates, atApplySource]] of perParentApplies) { let siblings = [] for (let [applyCandidate, important, rules] of candidates) { diff --git a/src/lib/generateRules.js b/src/lib/generateRules.js index 3695876140b0..339440d00812 100644 --- a/src/lib/generateRules.js +++ b/src/lib/generateRules.js @@ -3,7 +3,7 @@ import selectorParser from 'postcss-selector-parser' import parseObjectStyles from '../util/parseObjectStyles' import isPlainObject from '../util/isPlainObject' import prefixSelector from '../util/prefixSelector' -import { updateAllClasses, getMatchingTypes } from '../util/pluginUtils' +import { updateAllClasses, filterSelectorsForClass, getMatchingTypes } from '../util/pluginUtils' import log from '../util/log' import * as sharedState from './sharedState' import { formatVariantSelector, finalizeSelector } from '../util/formatVariantSelector' @@ -116,12 +116,15 @@ function applyImportant(matches, classCandidate) { for (let [meta, rule] of matches) { let container = postcss.root({ nodes: [rule.clone()] }) container.walkRules((r) => { - r.selector = updateAllClasses(r.selector, (className) => { - if (className === classCandidate) { - return `!${className}` + r.selector = updateAllClasses( + filterSelectorsForClass(r.selector, classCandidate), + (className) => { + if (className === classCandidate) { + return `!${className}` + } + return className } - return className - }) + ) r.walkDecls((d) => (d.important = true)) }) result.push([{ ...meta, important: true }, container.nodes[0]]) @@ -210,7 +213,7 @@ function applyVariant(variant, matches, context) { let container = postcss.root({ nodes: [rule.clone()] }) for (let [variantSort, variantFunction, containerFromArray] of variantFunctionTuples) { - let clone = containerFromArray ?? container.clone() + let clone = (containerFromArray ?? container).clone() let collectedFormats = [] function prepareBackup() { diff --git a/src/lib/setupContextUtils.js b/src/lib/setupContextUtils.js index 4e6cc96e9038..0d092b3517e7 100644 --- a/src/lib/setupContextUtils.js +++ b/src/lib/setupContextUtils.js @@ -528,7 +528,7 @@ function buildPluginApi(tailwindConfig, context, { variantList, variantMap, offs variantFunctions = [].concat(variantFunctions).map((variantFunction) => { if (typeof variantFunction !== 'string') { // Safelist public API functions - return (api) => { + return (api = {}) => { let { args, modifySelectors, container, separator, wrap, format } = api let result = variantFunction( Object.assign( @@ -581,11 +581,13 @@ function buildPluginApi(tailwindConfig, context, { variantList, variantMap, offs api.addVariant( isSpecial ? `${variant}${key}` : `${variant}-${key}`, - ({ args, container }) => - variantFn( + ({ args, container }) => { + return variantFn( value, - modifiersEnabled ? { modifier: args.modifier, container } : { container } - ), + modifiersEnabled ? { modifier: args?.modifier, container } : { container } + ) + }, + { ...options, value, @@ -601,13 +603,17 @@ function buildPluginApi(tailwindConfig, context, { variantList, variantMap, offs api.addVariant( variant, ({ args, container }) => { - if (args.value === sharedState.NONE && !hasDefault) { + if (args?.value === sharedState.NONE && !hasDefault) { return null } return variantFn( - args.value === sharedState.NONE ? options.values.DEFAULT : args.value, - modifiersEnabled ? { modifier: args.modifier, container } : { container } + args?.value === sharedState.NONE + ? options.values.DEFAULT + : // Falling back to args if it is a string, otherwise '' for older intellisense + // (JetBrains) plugins. + args?.value ?? (typeof args === 'string' ? args : ''), + modifiersEnabled ? { modifier: args?.modifier, container } : { container } ) }, { diff --git a/src/util/pluginUtils.js b/src/util/pluginUtils.js index 6295bd2bfff2..5049b088e38e 100644 --- a/src/util/pluginUtils.js +++ b/src/util/pluginUtils.js @@ -37,6 +37,23 @@ export function updateAllClasses(selectors, updateClass) { return result } +export function filterSelectorsForClass(selectors, classCandidate) { + let parser = selectorParser((selectors) => { + selectors.each((sel) => { + const containsClass = sel.nodes.some( + (node) => node.type === 'class' && node.value === classCandidate + ) + if (!containsClass) { + sel.remove() + } + }) + }) + + let result = parser.processSync(selectors) + + return result +} + function resolveArbitraryValue(modifier, validate) { if (!isArbitraryValue(modifier)) { return undefined diff --git a/src/util/resolveConfig.js b/src/util/resolveConfig.js index 35b0cef5fe31..7e9deebe843c 100644 --- a/src/util/resolveConfig.js +++ b/src/util/resolveConfig.js @@ -16,10 +16,6 @@ function isFunction(input) { return typeof input === 'function' } -function isObject(input) { - return typeof input === 'object' && input !== null -} - function mergeWith(target, ...sources) { let customizer = sources.pop() @@ -28,7 +24,7 @@ function mergeWith(target, ...sources) { let merged = customizer(target[k], source[k]) if (merged === undefined) { - if (isObject(target[k]) && isObject(source[k])) { + if (isPlainObject(target[k]) && isPlainObject(source[k])) { target[k] = mergeWith({}, target[k], source[k], customizer) } else { target[k] = source[k] @@ -103,12 +99,12 @@ function mergeThemes(themes) { function mergeExtensionCustomizer(merged, value) { // When we have an array of objects, we do want to merge it - if (Array.isArray(merged) && isObject(merged[0])) { + if (Array.isArray(merged) && isPlainObject(merged[0])) { return merged.concat(value) } // When the incoming value is an array, and the existing config is an object, prepend the existing object - if (Array.isArray(value) && isObject(value[0]) && isObject(merged)) { + if (Array.isArray(value) && isPlainObject(value[0]) && isPlainObject(merged)) { return [merged, ...value] } diff --git a/tests/__snapshots__/source-maps.test.js.snap b/tests/__snapshots__/source-maps.test.js.snap index 407668c517e3..b1016e638e7c 100644 --- a/tests/__snapshots__/source-maps.test.js.snap +++ b/tests/__snapshots__/source-maps.test.js.snap @@ -73,292 +73,293 @@ Array [ "2:4-18 -> 19:2-18", "2:18 -> 20:0", "2:4 -> 22:0", - "2:18 -> 27:1", - "2:4 -> 29:0", - "2:4-18 -> 30:2-26", - "2:4-18 -> 31:2-40", - "2:4-18 -> 32:2-26", - "2:4-18 -> 33:2-21", - "2:4-18 -> 34:2-230", - "2:18 -> 35:0", - "2:4 -> 37:0", - "2:18 -> 40:1", - "2:4 -> 42:0", - "2:4-18 -> 43:2-19", - "2:4-18 -> 44:2-30", - "2:18 -> 45:0", - "2:4 -> 47:0", - "2:18 -> 51:1", - "2:4 -> 53:0", - "2:4-18 -> 54:2-19", - "2:4-18 -> 55:2-24", - "2:4-18 -> 56:2-31", - "2:18 -> 57:0", - "2:4 -> 59:0", - "2:18 -> 61:1", - "2:4 -> 63:0", - "2:4-18 -> 64:2-35", - "2:18 -> 65:0", - "2:4 -> 67:0", - "2:18 -> 69:1", - "2:4 -> 71:0", - "2:4-18 -> 77:2-20", - "2:4-18 -> 78:2-22", - "2:18 -> 79:0", - "2:4 -> 81:0", - "2:18 -> 83:1", - "2:4 -> 85:0", - "2:4-18 -> 86:2-16", - "2:4-18 -> 87:2-26", - "2:18 -> 88:0", - "2:4 -> 90:0", - "2:18 -> 92:1", - "2:4 -> 94:0", - "2:4-18 -> 96:2-21", - "2:18 -> 97:0", - "2:4 -> 99:0", - "2:18 -> 102:1", - "2:4 -> 104:0", - "2:4-18 -> 108:2-121", - "2:4-18 -> 109:2-24", - "2:18 -> 110:0", - "2:4 -> 112:0", - "2:18 -> 114:1", - "2:4 -> 116:0", - "2:4-18 -> 117:2-16", - "2:18 -> 118:0", - "2:4 -> 120:0", - "2:18 -> 122:1", - "2:4 -> 124:0", - "2:4-18 -> 126:2-16", - "2:4-18 -> 127:2-16", - "2:4-18 -> 128:2-20", - "2:4-18 -> 129:2-26", - "2:18 -> 130:0", - "2:4 -> 132:0", - "2:4-18 -> 133:2-17", - "2:18 -> 134:0", - "2:4 -> 136:0", - "2:4-18 -> 137:2-13", - "2:18 -> 138:0", - "2:4 -> 140:0", - "2:18 -> 144:1", - "2:4 -> 146:0", - "2:4-18 -> 147:2-24", - "2:4-18 -> 148:2-31", - "2:4-18 -> 149:2-35", - "2:18 -> 150:0", - "2:4 -> 152:0", - "2:18 -> 156:1", - "2:4 -> 158:0", - "2:4-18 -> 163:2-30", - "2:4-18 -> 164:2-25", + "2:18 -> 28:1", + "2:4 -> 30:0", + "2:4-18 -> 31:2-26", + "2:4-18 -> 32:2-40", + "2:4-18 -> 33:2-26", + "2:4-18 -> 34:2-21", + "2:4-18 -> 35:2-230", + "2:4-18 -> 36:2-39", + "2:18 -> 37:0", + "2:4 -> 39:0", + "2:18 -> 42:1", + "2:4 -> 44:0", + "2:4-18 -> 45:2-19", + "2:4-18 -> 46:2-30", + "2:18 -> 47:0", + "2:4 -> 49:0", + "2:18 -> 53:1", + "2:4 -> 55:0", + "2:4-18 -> 56:2-19", + "2:4-18 -> 57:2-24", + "2:4-18 -> 58:2-31", + "2:18 -> 59:0", + "2:4 -> 61:0", + "2:18 -> 63:1", + "2:4 -> 65:0", + "2:4-18 -> 66:2-35", + "2:18 -> 67:0", + "2:4 -> 69:0", + "2:18 -> 71:1", + "2:4 -> 73:0", + "2:4-18 -> 79:2-20", + "2:4-18 -> 80:2-22", + "2:18 -> 81:0", + "2:4 -> 83:0", + "2:18 -> 85:1", + "2:4 -> 87:0", + "2:4-18 -> 88:2-16", + "2:4-18 -> 89:2-26", + "2:18 -> 90:0", + "2:4 -> 92:0", + "2:18 -> 94:1", + "2:4 -> 96:0", + "2:4-18 -> 98:2-21", + "2:18 -> 99:0", + "2:4 -> 101:0", + "2:18 -> 104:1", + "2:4 -> 106:0", + "2:4-18 -> 110:2-121", + "2:4-18 -> 111:2-24", + "2:18 -> 112:0", + "2:4 -> 114:0", + "2:18 -> 116:1", + "2:4 -> 118:0", + "2:4-18 -> 119:2-16", + "2:18 -> 120:0", + "2:4 -> 122:0", + "2:18 -> 124:1", + "2:4 -> 126:0", + "2:4-18 -> 128:2-16", + "2:4-18 -> 129:2-16", + "2:4-18 -> 130:2-20", + "2:4-18 -> 131:2-26", + "2:18 -> 132:0", + "2:4 -> 134:0", + "2:4-18 -> 135:2-17", + "2:18 -> 136:0", + "2:4 -> 138:0", + "2:4-18 -> 139:2-13", + "2:18 -> 140:0", + "2:4 -> 142:0", + "2:18 -> 146:1", + "2:4 -> 148:0", + "2:4-18 -> 149:2-24", + "2:4-18 -> 150:2-31", + "2:4-18 -> 151:2-35", + "2:18 -> 152:0", + "2:4 -> 154:0", + "2:18 -> 158:1", + "2:4 -> 160:0", "2:4-18 -> 165:2-30", - "2:4-18 -> 166:2-30", - "2:4-18 -> 167:2-24", - "2:4-18 -> 168:2-19", - "2:4-18 -> 169:2-20", - "2:18 -> 170:0", - "2:4 -> 172:0", - "2:18 -> 174:1", - "2:4 -> 176:0", - "2:4-18 -> 178:2-22", - "2:18 -> 179:0", - "2:4 -> 181:0", - "2:18 -> 184:1", - "2:4 -> 186:0", - "2:4-18 -> 190:2-36", - "2:4-18 -> 191:2-39", - "2:4-18 -> 192:2-32", - "2:18 -> 193:0", - "2:4 -> 195:0", - "2:18 -> 197:1", - "2:4 -> 199:0", - "2:4-18 -> 200:2-15", - "2:18 -> 201:0", - "2:4 -> 203:0", - "2:18 -> 205:1", - "2:4 -> 207:0", - "2:4-18 -> 208:2-18", - "2:18 -> 209:0", - "2:4 -> 211:0", - "2:18 -> 213:1", - "2:4 -> 215:0", - "2:4-18 -> 216:2-26", - "2:18 -> 217:0", - "2:4 -> 219:0", - "2:18 -> 221:1", - "2:4 -> 223:0", - "2:4-18 -> 225:2-14", - "2:18 -> 226:0", - "2:4 -> 228:0", - "2:18 -> 231:1", - "2:4 -> 233:0", - "2:4-18 -> 234:2-39", - "2:4-18 -> 235:2-30", - "2:18 -> 236:0", - "2:4 -> 238:0", - "2:18 -> 240:1", - "2:4 -> 242:0", - "2:4-18 -> 243:2-26", - "2:18 -> 244:0", - "2:4 -> 246:0", - "2:18 -> 249:1", - "2:4 -> 251:0", - "2:4-18 -> 252:2-36", - "2:4-18 -> 253:2-23", - "2:18 -> 254:0", - "2:4 -> 256:0", - "2:18 -> 258:1", - "2:4 -> 260:0", - "2:4-18 -> 261:2-20", - "2:18 -> 262:0", - "2:4 -> 264:0", - "2:18 -> 266:1", - "2:4 -> 268:0", - "2:4-18 -> 281:2-11", - "2:18 -> 282:0", - "2:4 -> 284:0", - "2:4-18 -> 285:2-11", - "2:4-18 -> 286:2-12", - "2:18 -> 287:0", - "2:4 -> 289:0", - "2:4-18 -> 290:2-12", - "2:18 -> 291:0", - "2:4 -> 293:0", - "2:4-18 -> 296:2-18", - "2:4-18 -> 297:2-11", - "2:4-18 -> 298:2-12", - "2:18 -> 299:0", - "2:4 -> 301:0", - "2:18 -> 303:1", - "2:4 -> 305:0", - "2:4-18 -> 306:2-18", - "2:18 -> 307:0", - "2:4 -> 309:0", - "2:18 -> 312:1", - "2:4 -> 314:0", - "2:4-18 -> 316:2-20", - "2:4-18 -> 317:2-24", - "2:18 -> 318:0", - "2:4 -> 320:0", - "2:18 -> 322:1", - "2:4 -> 324:0", - "2:4-18 -> 326:2-17", - "2:18 -> 327:0", - "2:4 -> 329:0", - "2:18 -> 331:1", - "2:4 -> 332:0", - "2:4-18 -> 333:2-17", - "2:18 -> 334:0", - "2:4 -> 336:0", - "2:18 -> 340:1", - "2:4 -> 342:0", - "2:4-18 -> 350:2-24", - "2:4-18 -> 351:2-32", - "2:18 -> 352:0", - "2:4 -> 354:0", - "2:18 -> 356:1", - "2:4 -> 358:0", - "2:4-18 -> 360:2-17", - "2:4-18 -> 361:2-14", - "2:18 -> 362:0", - "2:4-18 -> 364:0-72", - "2:4 -> 365:0", - "2:4-18 -> 366:2-15", - "2:18 -> 367:0", - "2:4 -> 369:0", - "2:4-18 -> 370:2-26", - "2:4-18 -> 371:2-26", - "2:4-18 -> 372:2-21", - "2:4-18 -> 373:2-21", - "2:4-18 -> 374:2-16", - "2:4-18 -> 375:2-16", + "2:4-18 -> 166:2-25", + "2:4-18 -> 167:2-30", + "2:4-18 -> 168:2-30", + "2:4-18 -> 169:2-24", + "2:4-18 -> 170:2-19", + "2:4-18 -> 171:2-20", + "2:18 -> 172:0", + "2:4 -> 174:0", + "2:18 -> 176:1", + "2:4 -> 178:0", + "2:4-18 -> 180:2-22", + "2:18 -> 181:0", + "2:4 -> 183:0", + "2:18 -> 186:1", + "2:4 -> 188:0", + "2:4-18 -> 192:2-36", + "2:4-18 -> 193:2-39", + "2:4-18 -> 194:2-32", + "2:18 -> 195:0", + "2:4 -> 197:0", + "2:18 -> 199:1", + "2:4 -> 201:0", + "2:4-18 -> 202:2-15", + "2:18 -> 203:0", + "2:4 -> 205:0", + "2:18 -> 207:1", + "2:4 -> 209:0", + "2:4-18 -> 210:2-18", + "2:18 -> 211:0", + "2:4 -> 213:0", + "2:18 -> 215:1", + "2:4 -> 217:0", + "2:4-18 -> 218:2-26", + "2:18 -> 219:0", + "2:4 -> 221:0", + "2:18 -> 223:1", + "2:4 -> 225:0", + "2:4-18 -> 227:2-14", + "2:18 -> 228:0", + "2:4 -> 230:0", + "2:18 -> 233:1", + "2:4 -> 235:0", + "2:4-18 -> 236:2-39", + "2:4-18 -> 237:2-30", + "2:18 -> 238:0", + "2:4 -> 240:0", + "2:18 -> 242:1", + "2:4 -> 244:0", + "2:4-18 -> 245:2-26", + "2:18 -> 246:0", + "2:4 -> 248:0", + "2:18 -> 251:1", + "2:4 -> 253:0", + "2:4-18 -> 254:2-36", + "2:4-18 -> 255:2-23", + "2:18 -> 256:0", + "2:4 -> 258:0", + "2:18 -> 260:1", + "2:4 -> 262:0", + "2:4-18 -> 263:2-20", + "2:18 -> 264:0", + "2:4 -> 266:0", + "2:18 -> 268:1", + "2:4 -> 270:0", + "2:4-18 -> 283:2-11", + "2:18 -> 284:0", + "2:4 -> 286:0", + "2:4-18 -> 287:2-11", + "2:4-18 -> 288:2-12", + "2:18 -> 289:0", + "2:4 -> 291:0", + "2:4-18 -> 292:2-12", + "2:18 -> 293:0", + "2:4 -> 295:0", + "2:4-18 -> 298:2-18", + "2:4-18 -> 299:2-11", + "2:4-18 -> 300:2-12", + "2:18 -> 301:0", + "2:4 -> 303:0", + "2:18 -> 305:1", + "2:4 -> 307:0", + "2:4-18 -> 308:2-18", + "2:18 -> 309:0", + "2:4 -> 311:0", + "2:18 -> 314:1", + "2:4 -> 316:0", + "2:4-18 -> 318:2-20", + "2:4-18 -> 319:2-24", + "2:18 -> 320:0", + "2:4 -> 322:0", + "2:18 -> 324:1", + "2:4 -> 326:0", + "2:4-18 -> 328:2-17", + "2:18 -> 329:0", + "2:4 -> 331:0", + "2:18 -> 333:1", + "2:4 -> 334:0", + "2:4-18 -> 335:2-17", + "2:18 -> 336:0", + "2:4 -> 338:0", + "2:18 -> 342:1", + "2:4 -> 344:0", + "2:4-18 -> 352:2-24", + "2:4-18 -> 353:2-32", + "2:18 -> 354:0", + "2:4 -> 356:0", + "2:18 -> 358:1", + "2:4 -> 360:0", + "2:4-18 -> 362:2-17", + "2:4-18 -> 363:2-14", + "2:18 -> 364:0", + "2:4-18 -> 366:0-72", + "2:4 -> 367:0", + "2:4-18 -> 368:2-15", + "2:18 -> 369:0", + "2:4 -> 371:0", + "2:4-18 -> 372:2-26", + "2:4-18 -> 373:2-26", + "2:4-18 -> 374:2-21", + "2:4-18 -> 375:2-21", "2:4-18 -> 376:2-16", - "2:4-18 -> 377:2-17", - "2:4-18 -> 378:2-17", - "2:4-18 -> 379:2-15", - "2:4-18 -> 380:2-15", - "2:4-18 -> 381:2-20", - "2:4-18 -> 382:2-40", - "2:4-18 -> 383:2-17", - "2:4-18 -> 384:2-22", - "2:4-18 -> 385:2-24", - "2:4-18 -> 386:2-25", - "2:4-18 -> 387:2-26", - "2:4-18 -> 388:2-20", - "2:4-18 -> 389:2-29", - "2:4-18 -> 390:2-30", - "2:4-18 -> 391:2-40", - "2:4-18 -> 392:2-36", - "2:4-18 -> 393:2-29", - "2:4-18 -> 394:2-24", - "2:4-18 -> 395:2-32", - "2:4-18 -> 396:2-14", - "2:4-18 -> 397:2-20", - "2:4-18 -> 398:2-18", - "2:4-18 -> 399:2-19", - "2:4-18 -> 400:2-20", - "2:4-18 -> 401:2-16", - "2:4-18 -> 402:2-18", - "2:4-18 -> 403:2-15", - "2:4-18 -> 404:2-21", - "2:4-18 -> 405:2-23", - "2:4-18 -> 406:2-29", - "2:4-18 -> 407:2-27", - "2:4-18 -> 408:2-28", - "2:4-18 -> 409:2-29", - "2:4-18 -> 410:2-25", - "2:4-18 -> 411:2-26", - "2:4-18 -> 412:2-27", - "2:4 -> 413:2", - "2:18 -> 414:0", - "2:4 -> 416:0", - "2:4-18 -> 417:2-26", - "2:4-18 -> 418:2-26", - "2:4-18 -> 419:2-21", - "2:4-18 -> 420:2-21", - "2:4-18 -> 421:2-16", - "2:4-18 -> 422:2-16", + "2:4-18 -> 377:2-16", + "2:4-18 -> 378:2-16", + "2:4-18 -> 379:2-17", + "2:4-18 -> 380:2-17", + "2:4-18 -> 381:2-15", + "2:4-18 -> 382:2-15", + "2:4-18 -> 383:2-20", + "2:4-18 -> 384:2-40", + "2:4-18 -> 385:2-17", + "2:4-18 -> 386:2-22", + "2:4-18 -> 387:2-24", + "2:4-18 -> 388:2-25", + "2:4-18 -> 389:2-26", + "2:4-18 -> 390:2-20", + "2:4-18 -> 391:2-29", + "2:4-18 -> 392:2-30", + "2:4-18 -> 393:2-40", + "2:4-18 -> 394:2-36", + "2:4-18 -> 395:2-29", + "2:4-18 -> 396:2-24", + "2:4-18 -> 397:2-32", + "2:4-18 -> 398:2-14", + "2:4-18 -> 399:2-20", + "2:4-18 -> 400:2-18", + "2:4-18 -> 401:2-19", + "2:4-18 -> 402:2-20", + "2:4-18 -> 403:2-16", + "2:4-18 -> 404:2-18", + "2:4-18 -> 405:2-15", + "2:4-18 -> 406:2-21", + "2:4-18 -> 407:2-23", + "2:4-18 -> 408:2-29", + "2:4-18 -> 409:2-27", + "2:4-18 -> 410:2-28", + "2:4-18 -> 411:2-29", + "2:4-18 -> 412:2-25", + "2:4-18 -> 413:2-26", + "2:4-18 -> 414:2-27", + "2:4 -> 415:2", + "2:18 -> 416:0", + "2:4 -> 418:0", + "2:4-18 -> 419:2-26", + "2:4-18 -> 420:2-26", + "2:4-18 -> 421:2-21", + "2:4-18 -> 422:2-21", "2:4-18 -> 423:2-16", - "2:4-18 -> 424:2-17", - "2:4-18 -> 425:2-17", - "2:4-18 -> 426:2-15", - "2:4-18 -> 427:2-15", - "2:4-18 -> 428:2-20", - "2:4-18 -> 429:2-40", - "2:4-18 -> 430:2-17", - "2:4-18 -> 431:2-22", - "2:4-18 -> 432:2-24", - "2:4-18 -> 433:2-25", - "2:4-18 -> 434:2-26", - "2:4-18 -> 435:2-20", - "2:4-18 -> 436:2-29", - "2:4-18 -> 437:2-30", - "2:4-18 -> 438:2-40", - "2:4-18 -> 439:2-36", - "2:4-18 -> 440:2-29", - "2:4-18 -> 441:2-24", - "2:4-18 -> 442:2-32", - "2:4-18 -> 443:2-14", - "2:4-18 -> 444:2-20", - "2:4-18 -> 445:2-18", - "2:4-18 -> 446:2-19", - "2:4-18 -> 447:2-20", - "2:4-18 -> 448:2-16", - "2:4-18 -> 449:2-18", - "2:4-18 -> 450:2-15", - "2:4-18 -> 451:2-21", - "2:4-18 -> 452:2-23", - "2:4-18 -> 453:2-29", - "2:4-18 -> 454:2-27", - "2:4-18 -> 455:2-28", - "2:4-18 -> 456:2-29", - "2:4-18 -> 457:2-25", - "2:4-18 -> 458:2-26", - "2:4-18 -> 459:2-27", - "2:4 -> 460:2", - "2:18 -> 461:0", + "2:4-18 -> 424:2-16", + "2:4-18 -> 425:2-16", + "2:4-18 -> 426:2-17", + "2:4-18 -> 427:2-17", + "2:4-18 -> 428:2-15", + "2:4-18 -> 429:2-15", + "2:4-18 -> 430:2-20", + "2:4-18 -> 431:2-40", + "2:4-18 -> 432:2-17", + "2:4-18 -> 433:2-22", + "2:4-18 -> 434:2-24", + "2:4-18 -> 435:2-25", + "2:4-18 -> 436:2-26", + "2:4-18 -> 437:2-20", + "2:4-18 -> 438:2-29", + "2:4-18 -> 439:2-30", + "2:4-18 -> 440:2-40", + "2:4-18 -> 441:2-36", + "2:4-18 -> 442:2-29", + "2:4-18 -> 443:2-24", + "2:4-18 -> 444:2-32", + "2:4-18 -> 445:2-14", + "2:4-18 -> 446:2-20", + "2:4-18 -> 447:2-18", + "2:4-18 -> 448:2-19", + "2:4-18 -> 449:2-20", + "2:4-18 -> 450:2-16", + "2:4-18 -> 451:2-18", + "2:4-18 -> 452:2-15", + "2:4-18 -> 453:2-21", + "2:4-18 -> 454:2-23", + "2:4-18 -> 455:2-29", + "2:4-18 -> 456:2-27", + "2:4-18 -> 457:2-28", + "2:4-18 -> 458:2-29", + "2:4-18 -> 459:2-25", + "2:4-18 -> 460:2-26", + "2:4-18 -> 461:2-27", + "2:4 -> 462:2", + "2:18 -> 463:0", ] `; diff --git a/tests/apply.test.js b/tests/apply.test.js index b1ef198145c6..5eb8ecb38151 100644 --- a/tests/apply.test.js +++ b/tests/apply.test.js @@ -1691,3 +1691,53 @@ it('should not replace multiple instances of the same class in a single selector } `) }) + +it('should maintain the correct selector when applying other utilities', () => { + let config = { + content: [ + { + raw: html` +
+
+
+ `, + }, + ], + } + + let input = css` + @tailwind utilities; + + .foo:hover.bar .baz { + @apply bg-black; + color: red; + } + + .foo:hover.bar > .baz { + @apply bg-black; + color: red; + } + ` + + return run(input, config).then((result) => { + expect(result.css).toMatchFormattedCss(css` + .foo.bar:hover .baz { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity)); + } + + .foo:hover.bar .baz { + color: red; + } + + .foo.bar:hover > .baz { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity)); + } + + .foo:hover.bar > .baz { + color: red; + } + `) + }) +}) diff --git a/tests/arbitrary-properties.test.js b/tests/arbitrary-properties.test.js index a7d1b5bbf72d..826cc309ace5 100644 --- a/tests/arbitrary-properties.test.js +++ b/tests/arbitrary-properties.test.js @@ -27,6 +27,37 @@ test('basic arbitrary properties', () => { }) }) +test('different arbitrary properties are picked up separately', () => { + let config = { + content: [ + { + raw: html`
`, + }, + ], + corePlugins: { preflight: false }, + } + + let input = css` + @tailwind base; + @tailwind components; + @tailwind utilities; + ` + + return run(input, config).then((result) => { + expect(result.css).toMatchFormattedCss(css` + ${defaults} + + .\[foo\:bar\] { + foo: bar; + } + + .\[bar\:baz\] { + bar: baz; + } + `) + }) +}) + test('arbitrary properties with modifiers', () => { let config = { content: [ @@ -296,6 +327,67 @@ test('invalid arbitrary property 2', () => { }) }) +test('using fractional spacing values inside theme() function', () => { + let config = { + content: [ + { + raw: html`
`, + }, + ], + corePlugins: { preflight: false }, + } + + let input = css` + @tailwind base; + @tailwind components; + @tailwind utilities; + ` + + return run(input, config).then((result) => { + expect(result.css).toMatchFormattedCss(css` + ${defaults} + + .\[border\:_calc\(5vw_-_theme\(spacing\[2\.5\]\)\)_double_theme\(\'colors\.fuchsia\.700\'\)\] { + border: calc(5vw - 0.625rem) double #a21caf; + } + `) + }) +}) + +test('using multiple arbitrary props having fractional spacing values', () => { + let config = { + content: [ + { + raw: html`
`, + }, + ], + corePlugins: { preflight: false }, + } + + let input = css` + @tailwind base; + @tailwind components; + @tailwind utilities; + ` + + return run(input, config).then((result) => { + return expect(result.css).toMatchFormattedCss(css` + ${defaults} + + .\[height\:_calc\(100vh_-_theme\(spacing\[2\.5\]\)\)\] { + height: calc(100vh - 0.625rem); + } + .\[box-shadow\:_0_calc\(theme\(spacing\[0\.5\]\)_\*_-1\)_theme\(colors\.red\.400\)_inset\] { + box-shadow: 0 calc(0.125rem * -1) #f87171 inset; + } + `) + }) +}) + it('should be possible to read theme values in arbitrary properties (without quotes)', () => { let config = { content: [{ raw: html`
` }], diff --git a/tests/evaluateTailwindFunctions.test.js b/tests/evaluateTailwindFunctions.test.js index ef3a4d1ca184..f5d0822041d3 100644 --- a/tests/evaluateTailwindFunctions.test.js +++ b/tests/evaluateTailwindFunctions.test.js @@ -653,6 +653,33 @@ test('font-family values are retrieved without font-feature-settings', () => { }) }) +test('font-feature-settings values can be retrieved', () => { + let input = css` + .heading { + font-family: theme('fontFamily.sans'); + font-feature-settings: theme('fontFamily.sans[1].fontFeatureSettings'); + } + ` + + let output = css` + .heading { + font-family: Inter; + font-feature-settings: 'cv11'; + } + ` + + return run(input, { + theme: { + fontFamily: { + sans: ['Inter', { fontFeatureSettings: "'cv11'" }], + }, + }, + }).then((result) => { + expect(result.css).toMatchCss(output) + expect(result.warnings().length).toBe(0) + }) +}) + test('box-shadow values are joined when an array', () => { let input = css` .element { diff --git a/tests/important-modifier.test.js b/tests/important-modifier.test.js index e57c81340575..f6fd5f8224dc 100644 --- a/tests/important-modifier.test.js +++ b/tests/important-modifier.test.js @@ -13,12 +13,13 @@ test('important modifier', () => {
+
`, }, ], corePlugins: { preflight: false }, plugins: [ - function ({ theme, matchUtilities }) { + function ({ theme, matchUtilities, addComponents }) { matchUtilities( { 'custom-parent': (value) => { @@ -31,6 +32,13 @@ test('important modifier', () => { }, { values: theme('spacing') } ) + addComponents({ + '.btn': { + '&.disabled, &:disabled': { + color: 'gray', + }, + }, + }) }, ], } @@ -70,6 +78,13 @@ test('important modifier', () => { max-width: 1536px !important; } } + .btn.disabled, + .btn:disabled { + color: gray; + } + .btn.\!disabled { + color: gray !important; + } .\!font-bold { font-weight: 700 !important; } diff --git a/tests/match-variants.test.js b/tests/match-variants.test.js index dd839151fe55..ad08042af2b4 100644 --- a/tests/match-variants.test.js +++ b/tests/match-variants.test.js @@ -1,3 +1,6 @@ +import resolveConfig from '../src/public/resolve-config' +import { createContext } from '../src/lib/setupContextUtils' + import { run, html, css } from './util/run' test('partial arbitrary variants', () => { @@ -788,3 +791,56 @@ it('should be possible to use `undefined` as a DEFAULT value', () => { `) }) }) + +it('should be possible to use `undefined` as a DEFAULT value', () => { + let config = { + content: [ + { + raw: html` +
+
+
+ `, + }, + ], + corePlugins: { preflight: false }, + plugins: [ + ({ matchVariant }) => { + matchVariant('foo', (value) => `.foo${value === undefined ? '-good' : '-bad'} &`, { + values: { DEFAULT: undefined }, + }) + }, + ], + } + + let input = css` + @tailwind utilities; + ` + + return run(input, config).then((result) => { + expect(result.css).toMatchFormattedCss(css` + .foo-good .foo\:underline { + text-decoration-line: underline; + } + `) + }) +}) + +it('should not break things', () => { + let config = {} + + let context = createContext(resolveConfig(config)) + let [[, fn]] = context.variantMap.get('group') + + let format + + expect( + fn({ + format(input) { + format = input + }, + }) + ).toBe(undefined) + + expect(format).toBe(':merge(.group) &') +}) diff --git a/tests/resolveConfig.test.js b/tests/resolveConfig.test.js index 60776a39a88b..954c406597d8 100644 --- a/tests/resolveConfig.test.js +++ b/tests/resolveConfig.test.js @@ -591,6 +591,8 @@ test('theme values in the extend section are not deeply merged when they are sim extend: { fonts: { sans: ['Comic Sans'], + serif: ['Papyrus', { fontFeatureSettings: '"cv11"' }], + mono: [['Lobster', 'Papyrus'], { fontFeatureSettings: '"cv11"' }], }, }, }, @@ -619,8 +621,8 @@ test('theme values in the extend section are not deeply merged when they are sim theme: { fonts: { sans: ['Comic Sans'], - serif: ['Constantia', 'Georgia', 'serif'], - mono: ['Menlo', 'Courier New', 'monospace'], + serif: ['Papyrus', { fontFeatureSettings: '"cv11"' }], + mono: [['Lobster', 'Papyrus'], { fontFeatureSettings: '"cv11"' }], }, }, }) diff --git a/tests/variants.test.js b/tests/variants.test.js index 45584fc3614a..e05c826fdfc2 100644 --- a/tests/variants.test.js +++ b/tests/variants.test.js @@ -1029,3 +1029,40 @@ test('class inside pseudo-class function :has', () => { `) }) }) + +test('variant functions returning arrays should output correct results when nesting', async () => { + let config = { + content: [{ raw: html`
` }], + corePlugins: { preflight: false }, + plugins: [ + function ({ addUtilities, addVariant }) { + addVariant('test', () => ['@media (test)']) + addUtilities({ + '.foo': { + display: 'grid', + '> *': { + 'grid-column': 'span 2', + }, + }, + }) + }, + ], + } + + let input = css` + @tailwind utilities; + ` + + let result = await run(input, config) + + expect(result.css).toMatchFormattedCss(css` + @media (test) { + .test\:foo { + display: grid; + } + .test\:foo > * { + grid-column: span 2; + } + } + `) +})