summaryrefslogtreecommitdiff
path: root/node_modules/postcss-convert-values/src/lib/convert.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/postcss-convert-values/src/lib/convert.js')
-rw-r--r--node_modules/postcss-convert-values/src/lib/convert.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/node_modules/postcss-convert-values/src/lib/convert.js b/node_modules/postcss-convert-values/src/lib/convert.js
new file mode 100644
index 00000000..aa6555cf
--- /dev/null
+++ b/node_modules/postcss-convert-values/src/lib/convert.js
@@ -0,0 +1,85 @@
+'use strict';
+const lengthConv = new Map([
+ ['in', 96],
+ ['px', 1],
+ ['pt', 4 / 3],
+ ['pc', 16],
+]);
+
+const timeConv = new Map([
+ ['s', 1000],
+ ['ms', 1],
+]);
+
+const angleConv = new Map([
+ ['turn', 360],
+ ['deg', 1],
+]);
+/**
+ * @param {number} number
+ * @return {string}
+ */
+function dropLeadingZero(number) {
+ const value = String(number);
+
+ if (number % 1) {
+ if (value[0] === '0') {
+ return value.slice(1);
+ }
+
+ if (value[0] === '-' && value[1] === '0') {
+ return '-' + value.slice(2);
+ }
+ }
+
+ return value;
+}
+/**
+ * @param {number} number
+ * @param {string} originalUnit
+ * @param {lengthConv | timeConv | angleConv} conversions
+ * @return {string}
+ */
+function transform(number, originalUnit, conversions) {
+ let conversionUnits = [...conversions.keys()].filter((u) => {
+ return originalUnit !== u;
+ });
+
+ const base = number * /** @type {number} */ (conversions.get(originalUnit));
+
+ return conversionUnits
+ .map(
+ (u) =>
+ dropLeadingZero(base / /** @type {number} */ (conversions.get(u))) + u
+ )
+ .reduce((a, b) => (a.length < b.length ? a : b));
+}
+
+/**
+ * @param {number} number
+ * @param {string} unit
+ * @param {{time?: boolean, length?: boolean, angle?: boolean}} options
+ * @return {string}
+ */
+module.exports = function (number, unit, { time, length, angle }) {
+ let value = dropLeadingZero(number) + (unit ? unit : '');
+ let converted;
+ const lowerCaseUnit = unit.toLowerCase();
+ if (length !== false && lengthConv.has(lowerCaseUnit)) {
+ converted = transform(number, lowerCaseUnit, lengthConv);
+ }
+
+ if (time !== false && timeConv.has(lowerCaseUnit)) {
+ converted = transform(number, lowerCaseUnit, timeConv);
+ }
+
+ if (angle !== false && angleConv.has(lowerCaseUnit)) {
+ converted = transform(number, lowerCaseUnit, angleConv);
+ }
+
+ if (converted && converted.length < value.length) {
+ value = converted;
+ }
+
+ return value;
+};