1 line
11 KiB
JSON
1 line
11 KiB
JSON
|
|
{"ast":null,"code":"import { color } from '../color/index.mjs';\nimport { colorRegex } from '../utils/color-regex.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nfunction test(v) {\n var _v$match, _v$match2;\n return isNaN(v) && typeof v === \"string\" && (((_v$match = v.match(floatRegex)) === null || _v$match === void 0 ? void 0 : _v$match.length) || 0) + (((_v$match2 = v.match(colorRegex)) === null || _v$match2 === void 0 ? void 0 : _v$match2.length) || 0) > 0;\n}\nconst NUMBER_TOKEN = \"number\";\nconst COLOR_TOKEN = \"color\";\nconst VAR_TOKEN = \"var\";\nconst VAR_FUNCTION_TOKEN = \"var(\";\nconst SPLIT_TOKEN = \"${}\";\n// this regex consists of the `singleCssVariableRegex|rgbHSLValueRegex|digitRegex`\nconst complexRegex = /var[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*\\([\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*--(?:[\\x2D0-9A-Z_a-z\\u017F\\u212A]+[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*|[\\x2D0-9A-Z_a-z\\u017F\\u212A]+[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*,(?:[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*(?:(?![\\t-\\r \\(\\)\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uD800-\\uDFFF\\uFEFF])[^]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])|[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*\\((?:(?:(?![\\(\\)\\uD800-\\uDFFF])[^]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])|\\((?:(?![\\(\\)\\uD800-\\uDFFF])[^]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])*\\))*\\))+[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*)\\)|#[0-9a-f]{3,8}|(?:rgb|h[s\\u017F]l)a?\\((?:-?[\\.0-9]+%?[\\t-\\r ,\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]+){2}-?[\\.0-9]+%?[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*(?:[,\\/][\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*)?(?:\\b[0-9]+(?:\\.[0-9]+)?|\\.[0-9]+)?%?\\)|-?(?:[0-9]+(?:\\.[0-9]+)?|\\.[0-9]+)/gi;\nfunction analyseComplexValue(value) {\n const originalValue = value.toString();\n const values = [];\n const indexes = {\n color: [],\n number: [],\n var: []\n };\n const types = [];\n let i = 0;\n const tokenised = originalValue.replace(complexRegex, parsedValue => {\n if (color.test(parsedValue)) {\n indexes.color.push(i);\n types.push(COLOR_TOKEN);\n values.push(color.parse(parsedValue));\n } else if (parsedValue.startsWith(VAR_FUNCTION_TOKEN)) {\n indexes.var.push(i);\n types.push(VAR_TOKEN);\n values.push(parsedValue);\n } else {\n indexes.number.push(i);\n types.push(NUMBER_TOKEN);\n values.push(parseFloat(parsedValue));\n }\n ++i;\n return SPLIT_TOKEN;\n });\n const split = tokenised.split(SPLIT_TOKEN);\n return {\n values,\n split,\n indexes,\n types\n };\n}\nfunction parseComplexValue(v) {\n return analyseComplexValue(v).values;\n}\nfunction createTransformer(source) {\n const {\n split,\n types\n } = analyseComplexValue(source);\n const numSections = split.length;\n return v => {\n let output = \"\";\n for (let i = 0; i < numSections; i++) {\n output += split[i];\n if (v[i] !== undefined) {\n const type = types[i];\n if (type === NUMBER_TOKEN) {\n output += sanitize(v[i]);\n } else if (type === COLOR_TOKEN) {\n output += color.transform(v[i]);\n } else {\n output += v[i];\n }\n }\n }\n return output;\n };\n}\nconst convertNumbersToZero = v => typeof v === \"number\" ? 0 : color.test(v) ? color.getAnimatableNone(v) : v;\nfunction getAnimatableNone(v) {\n const parsed = parseComplexValue(v);\n const transformer = createTransformer(v);\n return transformer(parsed.map(convertNumbersToZero));\n}\nconst complex = {\n test,\n parse: parseComplexValue,\n createTransformer,\n getAnimatableNon
|