summaryrefslogtreecommitdiff
path: root/node_modules/postcss-ordered-values/src/rules/boxShadow.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/boxShadow.js
parent3fd9400d4dccc25aa29b5702216732e0b7542073 (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.js73
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;
+}