UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

252 lines (196 loc) 6.75 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports.getRootFontSize = getRootFontSize; exports.isCalcSize = isCalcSize; exports.isPercentSize = isPercentSize; exports.pxToPercent = pxToPercent; exports.pxToRem = pxToRem; exports.pxToVw = pxToVw; exports.scaleSize = scaleSize; exports.toPx = toPx; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _isNumber = _interopRequireDefault(require("lodash/isNumber")); var _isString = _interopRequireDefault(require("lodash/isString")); var _isNil = _interopRequireDefault(require("lodash/isNil")); var _round = _interopRequireDefault(require("lodash/round")); var _cssUnitConverter = _interopRequireDefault(require("css-unit-converter")); var _shared = require("choerodon-ui/shared"); var _math = _interopRequireDefault(require("choerodon-ui/dataset/math")); function defaultTo(value, callback) { if ((0, _isNil["default"])(value)) { return callback(); } return value; } function isEvalSupport() { var EVAL_SUPPORT = _shared.global.EVAL_SUPPORT; if (EVAL_SUPPORT === undefined) { try { /* eslint-disable-next-line no-eval */ eval(''); _shared.global.EVAL_SUPPORT = true; return true; } catch (e) { _shared.global.EVAL_SUPPORT = false; return false; } } return EVAL_SUPPORT; } function getRootFontSize() { var ROOT_STYLE = _shared.global.ROOT_STYLE; if (!ROOT_STYLE && typeof window !== 'undefined') { ROOT_STYLE = window.getComputedStyle(document.documentElement); } return ROOT_STYLE ? defaultTo(toPx(ROOT_STYLE.fontSize), function () { return 100; }) : 100; } function calculate(n1, n2, operation) { if (n1 !== undefined && n2 !== undefined) { switch (operation.trim()) { case '+': return n1 + n2; case '-': return n1 - n2; case '*': return n1 * n2; case '/': return n1 / n2; case '%': return n1 % n2; default: { if (isEvalSupport()) { /* eslint-disable-next-line no-eval */ return eval("".concat(n1).concat(operation).concat(n2)); } } } } } function scaleSize(px) { return px * getRootFontSize() / 100; } function pxToRem(num, useCurrentFrontSize) { if (num !== undefined && num !== null) { if (num === 0) { return '0'; } if ((0, _isNumber["default"])(num)) { return "".concat(num / (useCurrentFrontSize ? getRootFontSize() : 100), "rem"); } return num; } } function pxToVw(num) { var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'vw'; if (num !== undefined && num !== null) { if ((0, _isNumber["default"])(num)) { var _document$documentEle = document.documentElement, clientWidth = _document$documentEle.clientWidth, clientHeight = _document$documentEle.clientHeight; return "".concat(num / (unit === 'vw' ? clientWidth : clientHeight) * 100).concat(unit); } return num; } } function pxToPercent(num, parentPx) { if (!(0, _isNil["default"])(num)) { num = _math["default"].floor(num); if (!(0, _isNil["default"])(parentPx)) { parentPx = _math["default"].floor(parentPx); } if ((0, _isNumber["default"])(num) && (0, _isNumber["default"])(parentPx)) { return "".concat((0, _round["default"])(num / parentPx, 6) * 100, "%"); } return num; } } var builtInHeight = ['auto', 'fit-content', 'max-content', 'min-content', 'inherit', 'initial', 'unset', 'revert', 'available', '-webkit-fit-content', '-moz-max-content', '-moz-min-content', '-moz-initial']; var calcReg = /^calc\(([^()]*)\)$/; var unitReg = /^([+-]?[\d]+(?:[.][\d]+)?(?:[Ee][+-]?[\d]+)?)([^\d.+-]+)$/; function isCalcSize(num) { return num.match(calcReg); } function isPercentSize(num) { return num.indexOf('%') !== -1; } function toPx(num, getRelationSize) { if (num !== undefined && num !== null) { if ((0, _isNumber["default"])(num)) { return num; } if ((0, _isString["default"])(num) && !builtInHeight.includes(num)) { var calcMatches = isCalcSize(num); if (calcMatches) { try { var list = calcMatches[1].split(' '); return list.slice(1).reduce(function (result, calc, index, array) { if (index % 2 === 1) { return calculate(result, toPx(calc, getRelationSize), array[index - 1]); } return result; }, toPx(list[0], getRelationSize)); } catch (e) { console.error("Invalid property value in \"".concat(num, "\".")); return undefined; } } var unitMatches = num.match(unitReg); if (unitMatches) { var _unitMatches = (0, _slicedToArray2["default"])(unitMatches, 3), n = _unitMatches[1], u = _unitMatches[2]; if (n) { var number = Number(n); if (u && u !== 'px') { switch (u) { case '%': { var parentPx = getRelationSize && getRelationSize('%'); if (parentPx !== undefined) { return parentPx * number / 100; } return undefined; } case 'vh': { var viewHeight = defaultTo(getRelationSize && getRelationSize('vh'), function () { return document.documentElement.clientHeight; }); return viewHeight * number / 100; } case 'vw': { var viewWidth = defaultTo(getRelationSize && getRelationSize('vw'), function () { return document.documentElement.clientWidth; }); return viewWidth * number / 100; } case 'rem': return number * getRootFontSize(); case 'em': return number * defaultTo(getRelationSize && getRelationSize('em'), function () { return defaultTo(toPx(window.getComputedStyle(document.body).fontSize), function () { return 12; }); }); default: try { return (0, _cssUnitConverter["default"])(number, u, 'px'); } catch (e) { return undefined; } } } return number; } } } } } //# sourceMappingURL=UnitConvertor.js.map