summaryrefslogtreecommitdiff
path: root/node_modules/postcss-ordered-values/src/rules/transition.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
commitc06f7ee0a40255214c477e13d9b956a7e07c2900 (patch)
treef5982a568ef8fab865d0142e71c7494fea3e4c1b /node_modules/postcss-ordered-values/src/rules/transition.js
parent3fd9400d4dccc25aa29b5702216732e0b7542073 (diff)
postcss,(plugins): nanocss, postcss-preset-env
Diffstat (limited to 'node_modules/postcss-ordered-values/src/rules/transition.js')
-rw-r--r--node_modules/postcss-ordered-values/src/rules/transition.js76
1 files changed, 76 insertions, 0 deletions
diff --git a/node_modules/postcss-ordered-values/src/rules/transition.js b/node_modules/postcss-ordered-values/src/rules/transition.js
new file mode 100644
index 00000000..657da74d
--- /dev/null
+++ b/node_modules/postcss-ordered-values/src/rules/transition.js
@@ -0,0 +1,76 @@
+'use strict';
+const { unit } = require('postcss-value-parser');
+const { getArguments } = require('cssnano-utils');
+const addSpace = require('../lib/addSpace');
+const getValue = require('../lib/getValue');
+
+// transition: [ none | <single-transition-property> ] || <time> || <single-transition-timing-function> || <time>
+
+const timingFunctions = new Set([
+ 'ease',
+ 'linear',
+ 'ease-in',
+ 'ease-out',
+ 'ease-in-out',
+ 'step-start',
+ 'step-end',
+]);
+
+/**
+ * @param {import('postcss-value-parser').Node[][]} args
+ * @return {import('postcss-value-parser').Node[][]}
+ */
+function normalize(args) {
+ const list = [];
+ for (const arg of args) {
+ /** @type {Record<string, import('postcss-value-parser').Node[]>} */
+ let state = {
+ timingFunction: [],
+ property: [],
+ time1: [],
+ time2: [],
+ };
+
+ arg.forEach((node) => {
+ const { type, value } = node;
+
+ if (type === 'space') {
+ return;
+ }
+
+ if (
+ type === 'function' &&
+ new Set(['steps', 'cubic-bezier']).has(value.toLowerCase())
+ ) {
+ state.timingFunction = [...state.timingFunction, node, addSpace()];
+ } else if (unit(value)) {
+ if (!state.time1.length) {
+ state.time1 = [...state.time1, node, addSpace()];
+ } else {
+ state.time2 = [...state.time2, node, addSpace()];
+ }
+ } else if (timingFunctions.has(value.toLowerCase())) {
+ state.timingFunction = [...state.timingFunction, node, addSpace()];
+ } else {
+ state.property = [...state.property, node, addSpace()];
+ }
+ });
+
+ list.push([
+ ...state.property,
+ ...state.time1,
+ ...state.timingFunction,
+ ...state.time2,
+ ]);
+ }
+ return list;
+}
+/**
+ * @param {import('postcss-value-parser').ParsedValue} parsed
+ * @return {string}
+ */
+module.exports = function normalizeTransition(parsed) {
+ const values = normalize(getArguments(parsed));
+
+ return getValue(values);
+};