{"version":3,"file":"index.mjs","sources":["../../../../../src/value/types/complex/index.ts"],"sourcesContent":["import { AnyResolvedKeyframe } from \"../../../animation/types\"\nimport { CSSVariableToken } from \"../../../animation/utils/is-css-variable\"\nimport { color } from \"../color\"\nimport { Color } from \"../types\"\nimport { colorRegex } from \"../utils/color-regex\"\nimport { floatRegex } from \"../utils/float-regex\"\nimport { sanitize } from \"../utils/sanitize\"\n\nfunction test(v: any) {\n    return (\n        isNaN(v) &&\n        typeof v === \"string\" &&\n        (v.match(floatRegex)?.length || 0) +\n            (v.match(colorRegex)?.length || 0) >\n            0\n    )\n}\n\nconst NUMBER_TOKEN = \"number\"\nconst COLOR_TOKEN = \"color\"\nconst VAR_TOKEN = \"var\"\nconst VAR_FUNCTION_TOKEN = \"var(\"\nconst SPLIT_TOKEN = \"${}\"\n\nexport type ComplexValues = Array<\n    CSSVariableToken | AnyResolvedKeyframe | Color\n>\n\nexport interface ValueIndexes {\n    color: number[]\n    number: number[]\n    var: number[]\n}\n\nexport interface ComplexValueInfo {\n    values: ComplexValues\n    split: string[]\n    indexes: ValueIndexes\n    types: Array<keyof ValueIndexes>\n}\n\n// this regex consists of the `singleCssVariableRegex|rgbHSLValueRegex|digitRegex`\nconst complexRegex =\n    /var\\s*\\(\\s*--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)|#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\)|-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/giu\n\nexport function analyseComplexValue(\n    value: AnyResolvedKeyframe\n): ComplexValueInfo {\n    const originalValue = value.toString()\n\n    const values: ComplexValues = []\n    const indexes: ValueIndexes = {\n        color: [],\n        number: [],\n        var: [],\n    }\n    const types: Array<keyof ValueIndexes> = []\n\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\n    return { values, split, indexes, types }\n}\n\nfunction parseComplexValue(v: AnyResolvedKeyframe) {\n    return analyseComplexValue(v).values\n}\n\nfunction createTransformer(source: AnyResolvedKeyframe) {\n    const { split, types } = analyseComplexValue(source)\n\n    const numSections = split.length\n    return (v: Array<CSSVariableToken | Color | number | string>) => {\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] as number)\n                } else if (type === COLOR_TOKEN) {\n                    output += color.transform(v[i] as Color)\n                } else {\n                    output += v[i]\n                }\n            }\n        }\n\n        return output\n    }\n}\n\nconst convertNumbersToZero = (v: number | string) =>\n    typeof v === \"number\" ? 0 : color.test(v) ? color.getAnimatableNone(v) : v\n\nfunction getAnimatableNone(v: AnyResolvedKeyframe) {\n    const parsed = parseComplexValue(v)\n    const transformer = createTransformer(v)\n    return transformer(parsed.map(convertNumbersToZero))\n}\n\nexport const complex = {\n    test,\n    parse: parseComplexValue,\n    createTransformer,\n    getAnimatableNone,\n}\n"],"names":[],"mappings":"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"}