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/boxShadow.js | |
| parent | 3fd9400d4dccc25aa29b5702216732e0b7542073 (diff) | |
postcss,(plugins): nanocss, postcss-preset-env
Diffstat (limited to 'node_modules/postcss-ordered-values/src/rules/boxShadow.js')
| -rw-r--r-- | node_modules/postcss-ordered-values/src/rules/boxShadow.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/node_modules/postcss-ordered-values/src/rules/boxShadow.js b/node_modules/postcss-ordered-values/src/rules/boxShadow.js new file mode 100644 index 00000000..ed87ab20 --- /dev/null +++ b/node_modules/postcss-ordered-values/src/rules/boxShadow.js @@ -0,0 +1,73 @@ +'use strict'; +const { unit } = require('postcss-value-parser'); +const { getArguments } = require('cssnano-utils'); +const addSpace = require('../lib/addSpace'); +const getValue = require('../lib/getValue'); +const mathFunctions = require('../lib/mathfunctions.js'); +const vendorUnprefixed = require('../lib/vendorUnprefixed.js'); + +// box-shadow: inset? && <length>{2,4} && <color>? + +/** + * @param {import('postcss-value-parser').ParsedValue} parsed + * @return {string} + */ +module.exports = function normalizeBoxShadow(parsed) { + let args = getArguments(parsed); + + const normalized = normalize(args); + + if (normalized === false) { + return parsed.toString(); + } + + return getValue(normalized); +}; +/** + * @param {import('postcss-value-parser').Node[][]} args + * @return {false | import('postcss-value-parser').Node[][]} + */ +function normalize(args) { + const list = []; + let abort = false; + for (const arg of args) { + /** @type {import('postcss-value-parser').Node[]} */ + let val = []; + /** @type {Record<'inset'|'color', import('postcss-value-parser').Node[]>} */ + let state = { + inset: [], + color: [], + }; + + arg.forEach((node) => { + const { type, value } = node; + + if ( + type === 'function' && + mathFunctions.has(vendorUnprefixed(value.toLowerCase())) + ) { + abort = true; + return; + } + + if (type === 'space') { + return; + } + + if (unit(value)) { + val = [...val, node, addSpace()]; + } else if (value.toLowerCase() === 'inset') { + state.inset = [...state.inset, node, addSpace()]; + } else { + state.color = [...state.color, node, addSpace()]; + } + }); + + if (abort) { + return false; + } + + list.push([...state.inset, ...val, ...state.color]); + } + return list; +} |
