{"version":3,"file":"bezier.mjs","sources":["../../../../../../../../node_modules/chroma-js/src/generator/bezier.js"],"sourcesContent":["//\n// interpolates between a set of colors uzing a bezier spline\n//\n\n// @requires utils lab\nimport Color from '../Color.js';\nimport '../io/lab/index.js';\nimport scale from './scale.js';\n\n// nth row of the pascal triangle\nconst binom_row = function (n) {\n    let row = [1, 1];\n    for (let i = 1; i < n; i++) {\n        let newrow = [1];\n        for (let j = 1; j <= row.length; j++) {\n            newrow[j] = (row[j] || 0) + row[j - 1];\n        }\n        row = newrow;\n    }\n    return row;\n};\n\nconst bezier = function (colors) {\n    let I, lab0, lab1, lab2;\n    colors = colors.map((c) => new Color(c));\n    if (colors.length === 2) {\n        // linear interpolation\n        [lab0, lab1] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map((i) => lab0[i] + t * (lab1[i] - lab0[i]));\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length === 3) {\n        // quadratic bezier interpolation\n        [lab0, lab1, lab2] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map(\n                (i) =>\n                    (1 - t) * (1 - t) * lab0[i] +\n                    2 * (1 - t) * t * lab1[i] +\n                    t * t * lab2[i]\n            );\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length === 4) {\n        // cubic bezier interpolation\n        let lab3;\n        [lab0, lab1, lab2, lab3] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map(\n                (i) =>\n                    (1 - t) * (1 - t) * (1 - t) * lab0[i] +\n                    3 * (1 - t) * (1 - t) * t * lab1[i] +\n                    3 * (1 - t) * t * t * lab2[i] +\n                    t * t * t * lab3[i]\n            );\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length >= 5) {\n        // general case (degree n bezier)\n        let labs, row, n;\n        labs = colors.map((c) => c.lab());\n        n = colors.length - 1;\n        row = binom_row(n);\n        I = function (t) {\n            const u = 1 - t;\n            const lab = [0, 1, 2].map((i) =>\n                labs.reduce(\n                    (sum, el, j) =>\n                        sum + row[j] * u ** (n - j) * t ** j * el[i],\n                    0\n                )\n            );\n            return new Color(lab, 'lab');\n        };\n    } else {\n        throw new RangeError('No point in running bezier with only one color.');\n    }\n    return I;\n};\n\nexport default (colors) => {\n    const f = bezier(colors);\n    f.scale = () => scale(f);\n    return f;\n};\n"],"names":["bezier"],"mappings":"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","x_google_ignoreList":[0]}