diff options
Diffstat (limited to 'node_modules/csso/lib/replace/Dimension.js')
| -rw-r--r-- | node_modules/csso/lib/replace/Dimension.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/node_modules/csso/lib/replace/Dimension.js b/node_modules/csso/lib/replace/Dimension.js new file mode 100644 index 00000000..edb00388 --- /dev/null +++ b/node_modules/csso/lib/replace/Dimension.js @@ -0,0 +1,63 @@ +import { packNumber } from './Number.js'; + +const MATH_FUNCTIONS = new Set([ + 'calc', + 'min', + 'max', + 'clamp' +]); +const LENGTH_UNIT = new Set([ + // absolute length units + 'px', + 'mm', + 'cm', + 'in', + 'pt', + 'pc', + + // relative length units + 'em', + 'ex', + 'ch', + 'rem', + + // viewport-percentage lengths + 'vh', + 'vw', + 'vmin', + 'vmax', + 'vm' +]); + +export default function compressDimension(node, item) { + const value = packNumber(node.value); + + node.value = value; + + if (value === '0' && this.declaration !== null && this.atrulePrelude === null) { + const unit = node.unit.toLowerCase(); + + // only length values can be compressed + if (!LENGTH_UNIT.has(unit)) { + return; + } + + // issue #362: shouldn't remove unit in -ms-flex since it breaks flex in IE10/11 + // issue #200: shouldn't remove unit in flex since it breaks flex in IE10/11 + if (this.declaration.property === '-ms-flex' || + this.declaration.property === 'flex') { + return; + } + + // issue #222: don't remove units inside calc + if (this.function && MATH_FUNCTIONS.has(this.function.name)) { + return; + } + + item.data = { + type: 'Number', + loc: node.loc, + value + }; + } +}; |
