'use strict'; const { unit, stringify } = require('postcss-value-parser'); const mathFunctions = require('../lib/mathfunctions.js'); // border: || || // outline: || || const borderWidths = new Set(['thin', 'medium', 'thick']); const borderStyles = new Set([ 'none', 'auto', // only in outline-style 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset', ]); /** * @param {import('postcss-value-parser').ParsedValue} border * @return {string} */ module.exports = function normalizeBorder(border) { const order = { width: '', style: '', color: '' }; border.walk((node) => { const { type, value } = node; if (type === 'word') { if (borderStyles.has(value.toLowerCase())) { order.style = value; return false; } if (borderWidths.has(value.toLowerCase()) || unit(value.toLowerCase())) { if (order.width !== '') { order.width = `${order.width} ${value}`; return false; } order.width = value; return false; } order.color = value; return false; } if (type === 'function') { if (mathFunctions.has(value.toLowerCase())) { order.width = stringify(node); } else { order.color = stringify(node); } return false; } }); return `${order.width} ${order.style} ${order.color}`.trim(); };