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