summaryrefslogtreecommitdiff
path: root/node_modules/csso/lib/replace/Dimension.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/csso/lib/replace/Dimension.js')
-rw-r--r--node_modules/csso/lib/replace/Dimension.js63
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
+ };
+ }
+};