UNPKG

fabric

Version:

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

1 lines 3.36 kB
{"version":3,"file":"util.min.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,GAAW,EAAW,EAAW,KACxC,EAAI,IACN,GAAK,GAEH,EAAI,GACN,IAEE,EAAI,EAAI,EACH,EAAc,GAAT,EAAI,GAAS,EAEvB,EAAI,GACC,EAEL,EAAI,EAAI,EACH,GAAK,EAAI,IAAM,EAAI,EAAI,GAAK,EAE9B,GAWI,GACX,EACA,EACA,EACA,IAAA,CAEA,GAAK,IACL,GAAK,IACL,GAAK,IACL,IAAM,EAAW,KAAK,IAAI,EAAG,EAAG,EAAA,CAC9B,EAAW,KAAK,IAAI,EAAG,EAAG,EAAA,CAExB,EAAY,EACV,GAAK,EAAW,GAAY,EAElC,GAAI,IAAa,EACf,EAAI,EAAI,MACH,CACL,IAAM,EAAI,EAAW,EAErB,OADA,EAAI,EAAI,GAAM,GAAK,EAAI,EAAW,GAAY,GAAK,EAAW,GACtD,EAAR,CACE,KAAK,EACH,GAAK,EAAI,GAAK,GAAK,EAAI,EAAI,EAAI,GAC/B,MACF,KAAK,EACH,GAAK,EAAI,GAAK,EAAI,EAClB,MACF,KAAK,EACH,GAAK,EAAI,GAAK,EAAI,EAGtB,GAAK,EAGP,MAAO,CAAC,KAAK,MAAU,IAAJ,EAAA,CAAU,KAAK,MAAU,IAAJ,EAAA,CAAU,KAAK,MAAU,IAAJ,EAAA,CAAU,EAAA,EAG5D,GAAoB,EAAQ,MACvC,WAAW,EAAA,EAAU,EAAM,SAAS,IAAA,CAAO,IAAM,GAKtC,EAAU,GACrB,KAAK,IAAI,KAAK,MAAM,EAAA,CAAQ,IAAA,CAAK,SAAS,GAAA,CAAI,aAAA,CAAc,SAAS,EAAG,IAAA,CAK7D,GAAA,CACX,EACA,EACA,EACA,EAAI,KAAA,CAEJ,IAAM,EAAM,KAAK,MAAU,GAAJ,EAAc,IAAJ,EAAe,IAAJ,EAAA,CAC5C,MAAO,CAAC,EAAK,EAAK,EAAK,EAAA,EAAA,OAAA,KAAA,iBAAA,KAAA,YAAA,KAAA,OAAA,KAAA,QAAA,KAAA"}