UNPKG

tdesign-mobile-vue

Version:
129 lines (125 loc) 4.27 kB
/** * 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