{"version":3,"file":"bezier.cjs","sources":["../../../../../../../../../.yarn/berry/cache/chroma-js-npm-3.2.0-d5c39f5077-10c0.zip/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":";;;;AAUA,MAAM,YAAY,SAAU,GAAG;AAC3B,MAAI,MAAM,CAAC,GAAG,CAAC;AACf,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,QAAI,SAAS,CAAC,CAAC;AACf,aAAS,IAAI,GAAG,KAAK,IAAI,QAAQ,KAAK;AAClC,aAAO,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC;AAAA,IACzC;AACA,UAAM;AAAA,EACV;AACA,SAAO;AACX;AAEA,MAAMA,WAAS,SAAU,QAAQ;AAC7B,MAAI,GAAG,MAAM,MAAM;AACnB,WAAS,OAAO,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;AACvC,MAAI,OAAO,WAAW,GAAG;AAErB,KAAC,MAAM,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK;AACxC,QAAI,SAAU,GAAG;AACb,YAAM,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;AAClE,aAAO,IAAI,MAAM,KAAK,KAAK;AAAA,IAC/B;AAAA,EACJ,WAAW,OAAO,WAAW,GAAG;AAE5B,KAAC,MAAM,MAAM,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK;AAC9C,QAAI,SAAU,GAAG;AACb,YAAM,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE;AAAA,QAClB,CAAC,OACI,IAAI,MAAM,IAAI,KAAK,KAAK,CAAC,IAC1B,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,IACxB,IAAI,IAAI,KAAK,CAAC;AAAA,MAClC;AACY,aAAO,IAAI,MAAM,KAAK,KAAK;AAAA,IAC/B;AAAA,EACJ,WAAW,OAAO,WAAW,GAAG;AAE5B,QAAI;AACJ,KAAC,MAAM,MAAM,MAAM,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,IAAG,CAAE;AACpD,QAAI,SAAU,GAAG;AACb,YAAM,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE;AAAA,QAClB,CAAC,OACI,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,KAAK,CAAC,IACpC,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAClC,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,IAC5B,IAAI,IAAI,IAAI,KAAK,CAAC;AAAA,MACtC;AACY,aAAO,IAAI,MAAM,KAAK,KAAK;AAAA,IAC/B;AAAA,EACJ,WAAW,OAAO,UAAU,GAAG;AAE3B,QAAI,MAAM,KAAK;AACf,WAAO,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK;AAChC,QAAI,OAAO,SAAS;AACpB,UAAM,UAAU,CAAC;AACjB,QAAI,SAAU,GAAG;AACb,YAAM,IAAI,IAAI;AACd,YAAM,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE;AAAA,QAAI,CAAC,MACvB,KAAK;AAAA,UACD,CAAC,KAAK,IAAI,MACN,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC;AAAA,UAC/C;AAAA,QACpB;AAAA,MACA;AACY,aAAO,IAAI,MAAM,KAAK,KAAK;AAAA,IAC/B;AAAA,EACJ,OAAO;AACH,UAAM,IAAI,WAAW,iDAAiD;AAAA,EAC1E;AACA,SAAO;AACX;AAEA,MAAA,SAAe,CAAC,WAAW;AACvB,QAAM,IAAIA,SAAO,MAAM;AACvB,IAAE,QAAQ,MAAM,MAAM,CAAC;AACvB,SAAO;AACX;;","x_google_ignoreList":[0]}