diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2023-10-14 15:05:55 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2023-10-14 15:05:55 +0800 |
| commit | c06f7ee0a40255214c477e13d9b956a7e07c2900 (patch) | |
| tree | f5982a568ef8fab865d0142e71c7494fea3e4c1b /node_modules/postcss-ordered-values/src/rules/transition.js | |
| parent | 3fd9400d4dccc25aa29b5702216732e0b7542073 (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.js | 76 |
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); +}; |
