| 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 | |
| }; | |
| } | |
| }; |