@macrostrat/column-components
Version:
React rendering primitives for stratigraphic columns
1 lines • 4.85 kB
Source Map (JSON)
{"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]}