diff --git a/package-lock.json b/package-lock.json
index 8b5295fc7..63608caf0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6940,7 +6940,7 @@
"version": "7.6.0",
"license": "CC0-1.0",
"dependencies": {
- "@csstools/postcss-cascade-layers": "^1.0.1",
+ "@csstools/postcss-cascade-layers": "^1.0.2",
"@csstools/postcss-color-function": "^1.1.0",
"@csstools/postcss-font-format-keywords": "^1.0.0",
"@csstools/postcss-hwb-function": "^1.0.1",
@@ -6950,6 +6950,7 @@
"@csstools/postcss-oklab-function": "^1.1.0",
"@csstools/postcss-progressive-custom-properties": "^1.3.0",
"@csstools/postcss-stepped-value-functions": "^1.0.0",
+ "@csstools/postcss-trigonometric-functions": "^1.0.0",
"@csstools/postcss-unset-value": "^1.0.1",
"autoprefixer": "^10.4.7",
"browserslist": "^4.20.3",
@@ -6959,7 +6960,7 @@
"cssdb": "^6.6.2",
"postcss-attribute-case-insensitive": "^5.0.0",
"postcss-clamp": "^4.1.0",
- "postcss-color-functional-notation": "^4.2.2",
+ "postcss-color-functional-notation": "^4.2.3",
"postcss-color-hex-alpha": "^8.0.3",
"postcss-color-rebeccapurple": "^7.0.2",
"postcss-custom-media": "^8.0.0",
@@ -6977,7 +6978,7 @@
"postcss-lab-function": "^4.2.0",
"postcss-logical": "^5.0.4",
"postcss-media-minmax": "^5.0.0",
- "postcss-nesting": "^10.1.6",
+ "postcss-nesting": "^10.1.7",
"postcss-opacity-percentage": "^1.1.2",
"postcss-overflow-shorthand": "^3.0.3",
"postcss-page-break": "^3.0.4",
@@ -11793,7 +11794,7 @@
"postcss-preset-env": {
"version": "file:plugin-packs/postcss-preset-env",
"requires": {
- "@csstools/postcss-cascade-layers": "^1.0.1",
+ "@csstools/postcss-cascade-layers": "^1.0.2",
"@csstools/postcss-color-function": "^1.1.0",
"@csstools/postcss-font-format-keywords": "^1.0.0",
"@csstools/postcss-hwb-function": "^1.0.1",
@@ -11803,6 +11804,7 @@
"@csstools/postcss-oklab-function": "^1.1.0",
"@csstools/postcss-progressive-custom-properties": "^1.3.0",
"@csstools/postcss-stepped-value-functions": "^1.0.0",
+ "@csstools/postcss-trigonometric-functions": "^1.0.0",
"@csstools/postcss-unset-value": "^1.0.1",
"autoprefixer": "^10.4.7",
"browserslist": "^4.20.3",
@@ -11812,7 +11814,7 @@
"cssdb": "^6.6.2",
"postcss-attribute-case-insensitive": "^5.0.0",
"postcss-clamp": "^4.1.0",
- "postcss-color-functional-notation": "^4.2.2",
+ "postcss-color-functional-notation": "^4.2.3",
"postcss-color-hex-alpha": "^8.0.3",
"postcss-color-rebeccapurple": "^7.0.2",
"postcss-custom-media": "^8.0.0",
@@ -11830,7 +11832,7 @@
"postcss-lab-function": "^4.2.0",
"postcss-logical": "^5.0.4",
"postcss-media-minmax": "^5.0.0",
- "postcss-nesting": "^10.1.6",
+ "postcss-nesting": "^10.1.7",
"postcss-opacity-percentage": "^1.1.2",
"postcss-overflow-shorthand": "^3.0.3",
"postcss-page-break": "^3.0.4",
diff --git a/plugin-packs/postcss-preset-env/CHANGELOG.md b/plugin-packs/postcss-preset-env/CHANGELOG.md
index 2bb7ae780..283063b8a 100644
--- a/plugin-packs/postcss-preset-env/CHANGELOG.md
+++ b/plugin-packs/postcss-preset-env/CHANGELOG.md
@@ -1,13 +1,20 @@
# Changes to PostCSS Preset Env
+### 7.7.0 (Unreleased)
+
+- Added `@csstools/postcss-trigonometric-functions`
[Check the plugin README](https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-trigonometric-functions#readme) for usage details.
+- Updated `@csstools/postcss-cascade-layers` to `1.0.2` (patch)
+- Updated `postcss-color-functional-notation` to `4.2.3` (patch)
+- Updated `postcss-nesting` to `10.1.7` (patch)
+
### 7.6.0 (May 19, 2022)
- Added `@csstools/postcss-cascade-layers`
[Check the plugin README](https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-cascade-layers#readme) for usage details.
-- Updated `@csstools/postcss-hwb-function` to `1.0.1` (patch)
-- Updated `@csstools/postcss-is-pseudo-class` to `2.0.4` (patch)
-- Updated `@csstools/postcss-unset-value` to `1.0.1` (patch)
+- Updated `@csstools/postcss-hwb-function` to `1.0.1` (patch)
+- Updated `@csstools/postcss-is-pseudo-class` to `2.0.4` (patch)
+- Updated `@csstools/postcss-unset-value` to `1.0.1` (patch)
- Updated `postcss-nesting` to `10.1.6` (patch)
-- Updated `postcss-pseudo-class-any-link` to `7.1.4` (patch)
+- Updated `postcss-pseudo-class-any-link` to `7.1.4` (patch)
### 7.5.0 (May 2, 2022)
diff --git a/plugin-packs/postcss-preset-env/package.json b/plugin-packs/postcss-preset-env/package.json
index bfa245148..43fd2df5b 100644
--- a/plugin-packs/postcss-preset-env/package.json
+++ b/plugin-packs/postcss-preset-env/package.json
@@ -27,7 +27,7 @@
"dist"
],
"dependencies": {
- "@csstools/postcss-cascade-layers": "^1.0.1",
+ "@csstools/postcss-cascade-layers": "^1.0.2",
"@csstools/postcss-color-function": "^1.1.0",
"@csstools/postcss-font-format-keywords": "^1.0.0",
"@csstools/postcss-hwb-function": "^1.0.1",
@@ -37,6 +37,7 @@
"@csstools/postcss-oklab-function": "^1.1.0",
"@csstools/postcss-progressive-custom-properties": "^1.3.0",
"@csstools/postcss-stepped-value-functions": "^1.0.0",
+ "@csstools/postcss-trigonometric-functions": "^1.0.0",
"@csstools/postcss-unset-value": "^1.0.1",
"autoprefixer": "^10.4.7",
"browserslist": "^4.20.3",
@@ -46,7 +47,7 @@
"cssdb": "^6.6.2",
"postcss-attribute-case-insensitive": "^5.0.0",
"postcss-clamp": "^4.1.0",
- "postcss-color-functional-notation": "^4.2.2",
+ "postcss-color-functional-notation": "^4.2.3",
"postcss-color-hex-alpha": "^8.0.3",
"postcss-color-rebeccapurple": "^7.0.2",
"postcss-custom-media": "^8.0.0",
@@ -64,7 +65,7 @@
"postcss-lab-function": "^4.2.0",
"postcss-logical": "^5.0.4",
"postcss-media-minmax": "^5.0.0",
- "postcss-nesting": "^10.1.6",
+ "postcss-nesting": "^10.1.7",
"postcss-opacity-percentage": "^1.1.2",
"postcss-overflow-shorthand": "^3.0.3",
"postcss-page-break": "^3.0.4",
diff --git a/plugin-packs/postcss-preset-env/scripts/plugins-data.json b/plugin-packs/postcss-preset-env/scripts/plugins-data.json
index 42e92eb07..f306912ee 100644
--- a/plugin-packs/postcss-preset-env/scripts/plugins-data.json
+++ b/plugin-packs/postcss-preset-env/scripts/plugins-data.json
@@ -209,5 +209,10 @@
"packageName": "@csstools/postcss-cascade-layers",
"id": "cascade-layers",
"importName": "postcssCascadeLayers"
+ },
+ {
+ "packageName": "@csstools/postcss-trigonometric-functions",
+ "id": "trigonometric-functions",
+ "importName": "postcssTrigonometricFunctions"
}
]
diff --git a/plugin-packs/postcss-preset-env/src/lib/ids-by-execution-order.mjs b/plugin-packs/postcss-preset-env/src/lib/ids-by-execution-order.mjs
index 5e2265e59..6b5d9db8d 100644
--- a/plugin-packs/postcss-preset-env/src/lib/ids-by-execution-order.mjs
+++ b/plugin-packs/postcss-preset-env/src/lib/ids-by-execution-order.mjs
@@ -33,4 +33,6 @@ export default [
'place-properties',
'system-ui-font-family',
'cascade-layers',
+ 'stepped-value-functions',
+ 'trigonometric-functions',
];
diff --git a/plugin-packs/postcss-preset-env/src/plugins/plugins-by-id.mjs b/plugin-packs/postcss-preset-env/src/plugins/plugins-by-id.mjs
index b6e7670d9..24894fe89 100644
--- a/plugin-packs/postcss-preset-env/src/plugins/plugins-by-id.mjs
+++ b/plugin-packs/postcss-preset-env/src/plugins/plugins-by-id.mjs
@@ -39,6 +39,7 @@ import postcssPrefersColorScheme from 'css-prefers-color-scheme';
import postcssColorRebeccapurple from 'postcss-color-rebeccapurple';
import postcssSteppedValueFunctions from '@csstools/postcss-stepped-value-functions';
import postcssFontFamilySystemUI from '../patch/postcss-system-ui-font-family.mjs';
+import postcssTrigonometricFunctions from '@csstools/postcss-trigonometric-functions';
import postcssUnsetValue from '@csstools/postcss-unset-value';
// postcss plugins ordered by id
@@ -85,6 +86,7 @@ export const pluginsById = new Map(
['rebeccapurple-color', postcssColorRebeccapurple],
['stepped-value-functions', postcssSteppedValueFunctions],
['system-ui-font-family', postcssFontFamilySystemUI],
+ ['trigonometric-functions', postcssTrigonometricFunctions],
['unset-value', postcssUnsetValue],
],
);
diff --git a/plugin-packs/postcss-preset-env/src/plugins/plugins-data.mjs b/plugin-packs/postcss-preset-env/src/plugins/plugins-data.mjs
index 98d58208e..e41440f15 100644
--- a/plugin-packs/postcss-preset-env/src/plugins/plugins-data.mjs
+++ b/plugin-packs/postcss-preset-env/src/plugins/plugins-data.mjs
@@ -210,4 +210,9 @@ export default [
'id': 'cascade-layers',
'importName': 'postcssCascadeLayers',
},
+ {
+ 'packageName': '@csstools/postcss-trigonometric-functions',
+ 'id': 'trigonometric-functions',
+ 'importName': 'postcssTrigonometricFunctions',
+ },
];
diff --git a/plugin-packs/postcss-preset-env/test/basic.autoprefixer.expect.css b/plugin-packs/postcss-preset-env/test/basic.autoprefixer.expect.css
index 9cfc09834..3069b9813 100644
--- a/plugin-packs/postcss-preset-env/test/basic.autoprefixer.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.autoprefixer.expect.css
@@ -552,3 +552,36 @@
bottom: 2px;
left: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.autoprefixer.false.expect.css b/plugin-packs/postcss-preset-env/test/basic.autoprefixer.false.expect.css
index 9cfc09834..3069b9813 100644
--- a/plugin-packs/postcss-preset-env/test/basic.autoprefixer.false.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.autoprefixer.false.expect.css
@@ -552,3 +552,36 @@
bottom: 2px;
left: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.ch38.expect.css b/plugin-packs/postcss-preset-env/test/basic.ch38.expect.css
index 7802cf932..5d16b9507 100644
--- a/plugin-packs/postcss-preset-env/test/basic.ch38.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.ch38.expect.css
@@ -471,3 +471,36 @@
bottom: 2px;
left: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.ch88-ff78-saf10.expect.css b/plugin-packs/postcss-preset-env/test/basic.ch88-ff78-saf10.expect.css
index e983136d2..262dbb5af 100644
--- a/plugin-packs/postcss-preset-env/test/basic.ch88-ff78-saf10.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.ch88-ff78-saf10.expect.css
@@ -468,3 +468,36 @@ h1.test-custom-selectors,h2.test-custom-selectors,h3.test-custom-selectors,h4.te
bottom: 2px;
left: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.ch88-ff78.expect.css b/plugin-packs/postcss-preset-env/test/basic.ch88-ff78.expect.css
index 57a1ff347..f7d051880 100644
--- a/plugin-packs/postcss-preset-env/test/basic.ch88-ff78.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.ch88-ff78.expect.css
@@ -442,3 +442,36 @@ h1.test-custom-selectors,h2.test-custom-selectors,h3.test-custom-selectors,h4.te
bottom: 2px;
left: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.ch88-ff78.no-is-pseudo.expect.css b/plugin-packs/postcss-preset-env/test/basic.ch88-ff78.no-is-pseudo.expect.css
index b124d4d53..a7e1173d9 100644
--- a/plugin-packs/postcss-preset-env/test/basic.ch88-ff78.no-is-pseudo.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.ch88-ff78.no-is-pseudo.expect.css
@@ -442,3 +442,36 @@ h1.test-custom-selectors,h2.test-custom-selectors,h3.test-custom-selectors,h4.te
bottom: 2px;
left: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.css b/plugin-packs/postcss-preset-env/test/basic.css
index ad69c3a88..da2a04535 100644
--- a/plugin-packs/postcss-preset-env/test/basic.css
+++ b/plugin-packs/postcss-preset-env/test/basic.css
@@ -352,3 +352,36 @@
left: round(down, 2.5px, 1px);
inset: round(to-zero, 2.5px, 1px);
}
+
+.trigonometric {
+ left: sin(45deg);
+ left: cos(45deg);
+ left: tan(45deg);
+ left: asin(0.5);
+ left: acos(0.5);
+ left: atan(10);
+ left: atan2(-1, 1);
+ left: asin(sin(pi / 2));
+ left: atan2(infinity, -infinity);
+ left: sin((1deg + 3) + .25turn);
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.expect.css b/plugin-packs/postcss-preset-env/test/basic.expect.css
index 7afb9c835..33b9706e0 100644
--- a/plugin-packs/postcss-preset-env/test/basic.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.expect.css
@@ -576,3 +576,36 @@
bottom: 2px;
left: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.ff49.expect.css b/plugin-packs/postcss-preset-env/test/basic.ff49.expect.css
index 99f3e98d3..e73aeefcf 100644
--- a/plugin-packs/postcss-preset-env/test/basic.ff49.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.ff49.expect.css
@@ -465,3 +465,36 @@
bottom: 2px;
left: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.ff66.expect.css b/plugin-packs/postcss-preset-env/test/basic.ff66.expect.css
index ae0f72afe..825458444 100644
--- a/plugin-packs/postcss-preset-env/test/basic.ff66.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.ff66.expect.css
@@ -450,3 +450,36 @@
left: 2px;
inset: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.ie10.expect.css b/plugin-packs/postcss-preset-env/test/basic.ie10.expect.css
index 2d31b47c2..b662be8de 100644
--- a/plugin-packs/postcss-preset-env/test/basic.ie10.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.ie10.expect.css
@@ -591,3 +591,36 @@
bottom: 2px;
left: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.nesting.false.expect.css b/plugin-packs/postcss-preset-env/test/basic.nesting.false.expect.css
index e5f3a90a0..abf1fe64e 100644
--- a/plugin-packs/postcss-preset-env/test/basic.nesting.false.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.nesting.false.expect.css
@@ -574,3 +574,36 @@ h1.test-custom-selectors,h2.test-custom-selectors,h3.test-custom-selectors,h4.te
bottom: 2px;
left: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.nesting.true.expect.css b/plugin-packs/postcss-preset-env/test/basic.nesting.true.expect.css
index 2006b4c91..b25194d61 100644
--- a/plugin-packs/postcss-preset-env/test/basic.nesting.true.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.nesting.true.expect.css
@@ -368,3 +368,36 @@
left: round(down, 2.5px, 1px);
inset: round(to-zero, 2.5px, 1px);
}
+
+.trigonometric {
+ left: sin(45deg);
+ left: cos(45deg);
+ left: tan(45deg);
+ left: asin(0.5);
+ left: acos(0.5);
+ left: atan(10);
+ left: atan2(-1, 1);
+ left: asin(sin(pi / 2));
+ left: atan2(infinity, -infinity);
+ left: sin((1deg + 3) + .25turn);
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.preserve.true.expect.css b/plugin-packs/postcss-preset-env/test/basic.preserve.true.expect.css
index e5951f9bf..6e7db7fdc 100644
--- a/plugin-packs/postcss-preset-env/test/basic.preserve.true.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.preserve.true.expect.css
@@ -975,3 +975,47 @@ h1.test-custom-selectors,h2.test-custom-selectors,h3.test-custom-selectors,h4.te
left: round(to-zero, 2.5px, 1px);
inset: round(to-zero, 2.5px, 1px);
}
+
+.trigonometric {
+ left: 0.70711;
+ left: sin(45deg);
+ left: 0.70711;
+ left: cos(45deg);
+ left: 1;
+ left: tan(45deg);
+ left: 30deg;
+ left: asin(0.5);
+ left: 60deg;
+ left: acos(0.5);
+ left: 84.29deg;
+ left: atan(10);
+ left: -45deg;
+ left: atan2(-1, 1);
+ left: 90deg;
+ left: asin(1);
+ left: asin(sin(pi / 2));
+ left: 135deg;
+ left: atan2(infinity, -infinity);
+ left: 0.90533;
+ left: sin((1deg + 3) + .25turn);
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.safari15.expect.css b/plugin-packs/postcss-preset-env/test/basic.safari15.expect.css
index 7cb37a185..6fa5aa742 100644
--- a/plugin-packs/postcss-preset-env/test/basic.safari15.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.safari15.expect.css
@@ -397,3 +397,36 @@
left: 2px;
inset: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.stage0-ff49.expect.css b/plugin-packs/postcss-preset-env/test/basic.stage0-ff49.expect.css
index 61acb1534..afbd53286 100644
--- a/plugin-packs/postcss-preset-env/test/basic.stage0-ff49.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.stage0-ff49.expect.css
@@ -470,3 +470,36 @@ h1.test-custom-selectors,h2.test-custom-selectors,h3.test-custom-selectors,h4.te
bottom: 2px;
left: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.stage0-ff66.expect.css b/plugin-packs/postcss-preset-env/test/basic.stage0-ff66.expect.css
index b7f1b6500..c8e2e31cc 100644
--- a/plugin-packs/postcss-preset-env/test/basic.stage0-ff66.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.stage0-ff66.expect.css
@@ -455,3 +455,36 @@ h1.test-custom-selectors,h2.test-custom-selectors,h3.test-custom-selectors,h4.te
left: 2px;
inset: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.stage0.expect.css b/plugin-packs/postcss-preset-env/test/basic.stage0.expect.css
index 3474743f4..7f82d44aa 100644
--- a/plugin-packs/postcss-preset-env/test/basic.stage0.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.stage0.expect.css
@@ -581,3 +581,36 @@ h1.test-custom-selectors,h2.test-custom-selectors,h3.test-custom-selectors,h4.te
bottom: 2px;
left: 2px;
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.vendors-1.expect.css b/plugin-packs/postcss-preset-env/test/basic.vendors-1.expect.css
index 9e29ab332..6abf00a18 100644
--- a/plugin-packs/postcss-preset-env/test/basic.vendors-1.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.vendors-1.expect.css
@@ -517,3 +517,36 @@
bottom: round(to-zero, 2.5px, 1px);
left: round(to-zero, 2.5px, 1px);
}
+
+.trigonometric {
+ left: 0.70711;
+ left: 0.70711;
+ left: 1;
+ left: 30deg;
+ left: 60deg;
+ left: 84.29deg;
+ left: -45deg;
+ left: 90deg;
+ left: 135deg;
+ left: 0.90533;
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.vendors-2.expect.css b/plugin-packs/postcss-preset-env/test/basic.vendors-2.expect.css
index 60a6a484f..e85c30431 100644
--- a/plugin-packs/postcss-preset-env/test/basic.vendors-2.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.vendors-2.expect.css
@@ -509,3 +509,36 @@
bottom: round(to-zero, 2.5px, 1px);
left: round(to-zero, 2.5px, 1px);
}
+
+.trigonometric {
+ left: sin(45deg);
+ left: cos(45deg);
+ left: tan(45deg);
+ left: asin(0.5);
+ left: acos(0.5);
+ left: atan(10);
+ left: atan2(-1, 1);
+ left: asin(sin(pi / 2));
+ left: atan2(infinity, -infinity);
+ left: sin((1deg + 3) + .25turn);
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/plugin-packs/postcss-preset-env/test/basic.vendors-3.expect.css b/plugin-packs/postcss-preset-env/test/basic.vendors-3.expect.css
index 12b83a366..2eff4417e 100644
--- a/plugin-packs/postcss-preset-env/test/basic.vendors-3.expect.css
+++ b/plugin-packs/postcss-preset-env/test/basic.vendors-3.expect.css
@@ -489,3 +489,36 @@
bottom: round(to-zero, 2.5px, 1px);
left: round(to-zero, 2.5px, 1px);
}
+
+.trigonometric {
+ left: sin(45deg);
+ left: cos(45deg);
+ left: tan(45deg);
+ left: asin(0.5);
+ left: acos(0.5);
+ left: atan(10);
+ left: atan2(-1, 1);
+ left: asin(sin(pi / 2));
+ left: atan2(infinity, -infinity);
+ left: sin((1deg + 3) + .25turn);
+}
+
+.trigonometric-ignore-not-a-function {
+ left: sin;
+ left: cos;
+ left: tan;
+ left: asin;
+ left: acos;
+ left: atan;
+ left: atan2;
+}
+
+.trigonometric-ignore-no-arguments {
+ left: sin();
+ left: cos();
+ left: tan();
+ left: asin();
+ left: acos();
+ left: atan();
+ left: atan2();
+}
diff --git a/rollup/configs/externals.js b/rollup/configs/externals.js
index 4312dd4a4..c55cf07e3 100644
--- a/rollup/configs/externals.js
+++ b/rollup/configs/externals.js
@@ -13,6 +13,7 @@ export const externalsForCLI = [
'@csstools/postcss-oklab-function',
'@csstools/postcss-progressive-custom-properties',
'@csstools/postcss-stepped-value-functions',
+ '@csstools/postcss-trigonometric-functions',
'@csstools/postcss-unset-value',
'@csstools/selector-specificity',
'autoprefixer',
@@ -72,6 +73,7 @@ export const externalsForPlugin = [
'@csstools/postcss-oklab-function',
'@csstools/postcss-progressive-custom-properties',
'@csstools/postcss-stepped-value-functions',
+ '@csstools/postcss-trigonometric-functions',
'@csstools/postcss-unset-value',
'@csstools/selector-specificity',
'autoprefixer',