"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseBoxShadowValue = parseBoxShadowValue; exports.formatBoxShadowValue = formatBoxShadowValue; let KEYWORDS = new Set([ 'inset', 'inherit', 'initial', 'revert', 'unset' ]); let COMMA = /\,(?![^(]*\))/g // Comma separator that is not located between brackets. E.g.: `cubiz-bezier(a, b, c)` these don't count. ; let SPACE = /\ +(?![^(]*\))/g // Similar to the one above, but with spaces instead. ; let LENGTH = /^-?(\d+|\.\d+)(.*?)$/g; function parseBoxShadowValue(input) { let shadows = input.split(COMMA); 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'); } 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'); } } 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; }); } 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(', '); }