UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

1 lines 3.43 kB
{"version":3,"file":"util.mjs","names":[],"sources":["../../../src/color/util.ts"],"sourcesContent":["import type { TRGBAColorSource } from './typedefs';\n\n/**\n * @param {Number} p\n * @param {Number} q\n * @param {Number} t\n * @return {Number}\n */\nexport const hue2rgb = (p: number, q: number, t: number): number => {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n};\n\n/**\n * Adapted from {@link https://gist.github.com/mjackson/5311256 https://gist.github.com/mjackson}\n * @param {Number} r Red color value\n * @param {Number} g Green color value\n * @param {Number} b Blue color value\n * @param {Number} a Alpha color value pass through\n * @return {TRGBColorSource} Hsl color\n */\nexport const rgb2Hsl = (\n r: number,\n g: number,\n b: number,\n a: number,\n): TRGBAColorSource => {\n r /= 255;\n g /= 255;\n b /= 255;\n const maxValue = Math.max(r, g, b),\n minValue = Math.min(r, g, b);\n\n let h!: number, s: number;\n const l = (maxValue + minValue) / 2;\n\n if (maxValue === minValue) {\n h = s = 0; // achromatic\n } else {\n const d = maxValue - minValue;\n s = l > 0.5 ? d / (2 - maxValue - minValue) : d / (maxValue + minValue);\n switch (maxValue) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100), a];\n};\n\nexport const fromAlphaToFloat = (value = '1') =>\n parseFloat(value) / (value.endsWith('%') ? 100 : 1);\n\n/**\n * Convert a value in the inclusive range [0, 255] to hex\n */\nexport const hexify = (value: number) =>\n Math.min(Math.round(value), 255).toString(16).toUpperCase().padStart(2, '0');\n\n/**\n * Calculate the grey average value for rgb and pass through alpha\n */\nexport const greyAverage = ([\n r,\n g,\n b,\n a = 1,\n]: TRGBAColorSource): TRGBAColorSource => {\n const avg = Math.round(r * 0.3 + g * 0.59 + b * 0.11);\n return [avg, avg, avg, a];\n};\n"],"mappings":";;;;;;;AAQA,MAAa,WAAW,GAAW,GAAW,MAAsB;AAClE,KAAI,IAAI,EACN,MAAK;AAEP,KAAI,IAAI,EACN,MAAK;AAEP,KAAI,IAAI,IAAI,EACV,QAAO,KAAK,IAAI,KAAK,IAAI;AAE3B,KAAI,IAAI,IAAI,EACV,QAAO;AAET,KAAI,IAAI,IAAI,EACV,QAAO,KAAK,IAAI,MAAM,IAAI,IAAI,KAAK;AAErC,QAAO;;;;;;;;;;AAWT,MAAa,WACX,GACA,GACA,GACA,MACqB;AACrB,MAAK;AACL,MAAK;AACL,MAAK;CACL,MAAM,WAAW,KAAK,IAAI,GAAG,GAAG,EAAE,EAChC,WAAW,KAAK,IAAI,GAAG,GAAG,EAAE;CAE9B,IAAI,GAAY;CAChB,MAAM,KAAK,WAAW,YAAY;AAElC,KAAI,aAAa,SACf,KAAI,IAAI;MACH;EACL,MAAM,IAAI,WAAW;AACrB,MAAI,IAAI,KAAM,KAAK,IAAI,WAAW,YAAY,KAAK,WAAW;AAC9D,UAAQ,UAAR;GACE,KAAK;AACH,SAAK,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI;AAC/B;GACF,KAAK;AACH,SAAK,IAAI,KAAK,IAAI;AAClB;GACF,KAAK;AACH,SAAK,IAAI,KAAK,IAAI;AAClB;;AAEJ,OAAK;;AAGP,QAAO;EAAC,KAAK,MAAM,IAAI,IAAI;EAAE,KAAK,MAAM,IAAI,IAAI;EAAE,KAAK,MAAM,IAAI,IAAI;EAAE;EAAE;;AAG3E,MAAa,oBAAoB,QAAQ,QACvC,WAAW,MAAM,IAAI,MAAM,SAAS,IAAI,GAAG,MAAM;;;;AAKnD,MAAa,UAAU,UACrB,KAAK,IAAI,KAAK,MAAM,MAAM,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI;;;;AAK9E,MAAa,eAAe,CAC1B,GACA,GACA,GACA,IAAI,OACoC;CACxC,MAAM,MAAM,KAAK,MAAM,IAAI,KAAM,IAAI,MAAO,IAAI,IAAK;AACrD,QAAO;EAAC;EAAK;EAAK;EAAK;EAAE"}