tdesign-mobile-vue
Version:
tdesign-mobile-vue
129 lines (125 loc) • 4.27 kB
JavaScript
/**
* tdesign v1.9.3
* (c) 2025 TDesign Group
* @license MIT
*/
import { isString, isNull } from 'lodash-es';
import tinyColor from 'tinycolor2';
var combineRegExp = function combineRegExp(regexpList, flags) {
var source = "";
for (var i = 0; i < regexpList.length; i++) {
if (isString(regexpList[i])) {
source += regexpList[i];
} else {
source += regexpList[i].source;
}
}
return new RegExp(source, flags);
};
var generateRegExp = function generateRegExp() {
var searchFlags = "gi";
var rAngle = /(?:[+-]?\d*\.?\d+)(?:deg|grad|rad|turn)/;
var rSideCornerCapture = /to\s+((?:(?:left|right|top|bottom)(?:\s+(?:top|bottom|left|right))?))/;
var rComma = /\s*,\s*/;
var rColorHex = /#(?:[a-f0-9]{6}|[a-f0-9]{3})/;
var rDigits3 = /\(\s*(?:\d{1,3}\s*,\s*){2}\d{1,3}\s*\)/;
var rDigits4 = /\(\s*(?:\d{1,3}\s*,\s*){2}\d{1,3}\s*,\s*\d*\.?\d+\)/;
var rValue = /(?:[+-]?\d*\.?\d+)(?:%|[a-z]+)?/;
var rKeyword = /[_a-z-][_a-z0-9-]*/;
var rColor = combineRegExp(["(?:", rColorHex, "|", "(?:rgb|hsl)", rDigits3, "|", "(?:rgba|hsla)", rDigits4, "|", rKeyword, ")"], "");
var rColorStop = combineRegExp([rColor, "(?:\\s+", rValue, "(?:\\s+", rValue, ")?)?"], "");
var rColorStopList = combineRegExp(["(?:", rColorStop, rComma, ")*", rColorStop], "");
var rLineCapture = combineRegExp(["(?:(", rAngle, ")|", rSideCornerCapture, ")"], "");
var rGradientSearch = combineRegExp(["(?:(", rLineCapture, ")", rComma, ")?(", rColorStopList, ")"], searchFlags);
var rColorStopSearch = combineRegExp(["\\s*(", rColor, ")", "(?:\\s+", "(", rValue, "))?", "(?:", rComma, "\\s*)?"], searchFlags);
return {
gradientSearch: rGradientSearch,
colorStopSearch: rColorStopSearch
};
};
var parseGradient = function parseGradient(regExpLib, input) {
var result;
var matchColorStop;
var stopResult;
regExpLib.gradientSearch.lastIndex = 0;
var matchGradient = regExpLib.gradientSearch.exec(input);
if (!isNull(matchGradient)) {
result = {
original: matchGradient[0],
colorStopList: []
};
if (matchGradient[1]) {
result.line = matchGradient[1];
}
if (matchGradient[2]) {
result.angle = matchGradient[2];
}
if (matchGradient[3]) {
result.sideCorner = matchGradient[3];
}
regExpLib.colorStopSearch.lastIndex = 0;
matchColorStop = regExpLib.colorStopSearch.exec(matchGradient[4]);
while (!isNull(matchColorStop)) {
stopResult = {
color: matchColorStop[1]
};
if (matchColorStop[2]) {
stopResult.position = matchColorStop[2];
}
result.colorStopList.push(stopResult);
matchColorStop = regExpLib.colorStopSearch.exec(matchGradient[4]);
}
}
return result;
};
var REGEXP_LIB = generateRegExp();
var REG_GRADIENT = /.*gradient\s*\(((?:\([^)]*\)|[^)(]*)*)\)/gim;
var isGradientColor = function isGradientColor(input) {
REG_GRADIENT.lastIndex = 0;
return REG_GRADIENT.exec(input);
};
var sideCornerDegreeMap = {
top: 0,
right: 90,
bottom: 180,
left: 270,
"top left": 315,
"left top": 315,
"top right": 45,
"right top": 45,
"bottom left": 225,
"left bottom": 225,
"bottom right": 135,
"right bottom": 135
};
var parseGradientString = function parseGradientString(input) {
var match = isGradientColor(input);
if (!match) return false;
var gradientColors = {
points: [],
degree: 0
};
var result = parseGradient(REGEXP_LIB, match[1]);
if (result.original.trim() !== match[1].trim()) return false;
var points = result.colorStopList.map(function (_ref, index, array) {
var color = _ref.color,
position = _ref.position;
var point = /* @__PURE__ */Object.create(null);
point.color = tinyColor(color).toRgbString();
var left = parseFloat(position);
if (Number.isNaN(left)) {
left = index / (array.length - 1) * 100;
}
point.left = left;
return point;
});
gradientColors.points = points;
var degree = parseInt(result.angle, 10);
if (Number.isNaN(degree)) {
degree = sideCornerDegreeMap[result.sideCorner] || 180;
}
gradientColors.degree = degree;
return gradientColors;
};
export { parseGradientString as default, isGradientColor, parseGradientString };
//# sourceMappingURL=gradient.js.map