From b1e2c8fd5cb5dfa46bc440a12eafaf56cd844b1c Mon Sep 17 00:00:00 2001 From: Philipp Tanlak Date: Mon, 24 Nov 2025 20:54:57 +0100 Subject: Docs --- .../tailwindcss/src/util/parseBoxShadowValue.js | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 node_modules/tailwindcss/src/util/parseBoxShadowValue.js (limited to 'node_modules/tailwindcss/src/util/parseBoxShadowValue.js') diff --git a/node_modules/tailwindcss/src/util/parseBoxShadowValue.js b/node_modules/tailwindcss/src/util/parseBoxShadowValue.js new file mode 100644 index 0000000..4be3efa --- /dev/null +++ b/node_modules/tailwindcss/src/util/parseBoxShadowValue.js @@ -0,0 +1,72 @@ +import { splitAtTopLevelOnly } from './splitAtTopLevelOnly' + +let KEYWORDS = new Set(['inset', 'inherit', 'initial', 'revert', 'unset']) +let SPACE = /\ +(?![^(]*\))/g // Similar to the one above, but with spaces instead. +let LENGTH = /^-?(\d+|\.\d+)(.*?)$/g + +export function parseBoxShadowValue(input) { + let shadows = splitAtTopLevelOnly(input, ',') + return shadows.map((shadow) => { + let value = shadow.trim() + let result = { raw: value } + let parts = value.split(SPACE) + let seen = new Set() + + for (let part of parts) { + // Reset index, since the regex is stateful. + LENGTH.lastIndex = 0 + + // Keyword + if (!seen.has('KEYWORD') && KEYWORDS.has(part)) { + result.keyword = part + seen.add('KEYWORD') + } + + // Length value + else if (LENGTH.test(part)) { + if (!seen.has('X')) { + result.x = part + seen.add('X') + } else if (!seen.has('Y')) { + result.y = part + seen.add('Y') + } else if (!seen.has('BLUR')) { + result.blur = part + seen.add('BLUR') + } else if (!seen.has('SPREAD')) { + result.spread = part + seen.add('SPREAD') + } + } + + // Color or unknown + else { + if (!result.color) { + result.color = part + } else { + if (!result.unknown) result.unknown = [] + result.unknown.push(part) + } + } + } + + // Check if valid + result.valid = result.x !== undefined && result.y !== undefined + + return result + }) +} + +export function formatBoxShadowValue(shadows) { + return shadows + .map((shadow) => { + if (!shadow.valid) { + return shadow.raw + } + + return [shadow.keyword, shadow.x, shadow.y, shadow.blur, shadow.spread, shadow.color] + .filter(Boolean) + .join(' ') + }) + .join(', ') +} -- cgit v1.2.3