@kurkle/color 0.3.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/index.esm.ts", "../src/byte.ts", "../src/hex.ts", "../src/hue.ts", "../src/packed.ts", "../src/names.ts", "../src/rgb.ts", "../src/srgb.ts", "../src/color.ts"],
4
+ "sourcesContent": ["/**\n * @packageDocumentation\n * @module index\n */\n\nimport * as color from './index.esm.js'\n\nexport default Object.assign(color.default, color)\n", "/**\n * @packageDocumentation\n * @module index\n */\n\nimport Color, { RGBA } from './color.js'\n\nexport * from './byte.js'\nexport * from './hex.js'\nexport * from './hue.js'\nexport * from './names.js'\nexport * from './rgb.js'\nexport * from './srgb.js'\nexport { Color, RGBA }\n\n/**\n * Construct new Color instance\n * @param input\n * @internal\n */\nexport default function (input: Color | RGBA | string | number[]): Color {\n return new Color(input)\n}\n", "/**\n * @packageDocumentation\n * @module utils\n */\n\n/**\n * Rounds decimal to nearest integer\n * @param v - the number to round\n */\nexport function round(v: number): number {\n return (v + 0.5) | 0\n}\n\nexport const lim = (v: number, l: number, h: number): number => Math.max(Math.min(v, h), l)\n\n/**\n * convert percent to byte 0..255\n * @param v - 0..100\n */\nexport function p2b(v: number): number {\n return lim(round(v * 2.55), 0, 255)\n}\n\n/**\n * convert byte to percet 0..100\n * @param v - 0..255\n */\nexport function b2p(v: number): number {\n return lim(round(v / 2.55), 0, 100)\n}\n\n/**\n * convert normalized to byte 0..255\n * @param v - 0..1\n */\nexport function n2b(v: number): number {\n return lim(round(v * 255), 0, 255)\n}\n\n/**\n * convert byte to normalized 0..1\n * @param v - 0..255\n */\nexport function b2n(v: number): number {\n return lim(round(v / 2.55) / 100, 0, 1)\n}\n\n/**\n * convert normalized to percent 0..100\n * @param v - 0..1\n */\nexport function n2p(v: number): number {\n return lim(round(v * 100), 0, 100)\n}\n", "/**\n * @packageDocumentation\n * @module utils\n */\n\nimport type { RGBA } from './color.js'\n\n/**\n * @hidden\n */\nconst map: Record<string, number> = {\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n A: 10,\n a: 10,\n B: 11,\n b: 11,\n C: 12,\n c: 12,\n D: 13,\n d: 13,\n E: 14,\n e: 14,\n F: 15,\n f: 15,\n}\n\n/**\n * @hidden\n */\nconst hex = [...'0123456789ABCDEF']\n\n/**\n * @param b - byte\n * @hidden\n */\nconst h1 = (b: number): string => hex[b & 0xf]\n\n/**\n * @param b - byte\n * @hidden\n */\nconst h2 = (b: number): string => hex[(b & 0xf0) >> 4] + hex[b & 0xf]\n\n/**\n * @param b - byte\n * @hidden\n */\nconst eq = (b: number): boolean => (b & 0xf0) >> 4 === (b & 0xf)\n\n/**\n * @param v - the color\n * @hidden\n */\nconst isShort = (v: RGBA): boolean => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a)\n\n/**\n * Parse HEX to color\n * @param str - the string\n */\nexport function hexParse(str: string): RGBA | undefined {\n if (str[0] !== '#') {\n return // undefined\n }\n const len = str.length\n\n if (len === 4 || len === 5) {\n return {\n a: len === 5 ? (map[str[4]] << 4) | map[str[4]] : 255,\n b: (map[str[3]] << 4) | map[str[3]],\n g: (map[str[2]] << 4) | map[str[2]],\n r: (map[str[1]] << 4) | map[str[1]],\n }\n }\n if (len === 7 || len === 9) {\n return {\n a: len === 9 ? (map[str[7]] << 4) | map[str[8]] : 255,\n b: (map[str[5]] << 4) | map[str[6]],\n g: (map[str[3]] << 4) | map[str[4]],\n r: (map[str[1]] << 4) | map[str[2]],\n }\n }\n}\n\nconst alpha = (a: number, f: (b: number) => string): string => (a < 255 ? f(a) : '')\n\n/**\n * Return HEX string from color\n * @param v - the color\n * @return {string|undefined}\n */\nexport function hexString(v: RGBA | undefined): string | undefined {\n const f = v && isShort(v) ? h1 : h2\n return v ? `#${f(v.r)}${f(v.g)}${f(v.b)}${alpha(v.a, f)}` : undefined\n}\n", "/**\n * @packageDocumentation\n * @module utils\n */\n\nimport type { RGBA } from './color.js'\n\nimport { b2n, n2b, n2p, p2b } from './byte.js'\n\n/**\n * @hidden\n */\nconst HUE_RE =\n /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/\n\n/**\n * Converts hsl to rgb normalized\n * @url https://jsfiddle.net/Lamik/reuk63ay/91\n * @param h - hue [0..360]\n * @param s - saturation [0..1]\n * @param l - lightness [0..1]\n * @returns - [r, g, b] each normalized to [0..1]\n * @hidden\n */\nfunction hsl2rgbn(h: number, s: number, l: number): number[] {\n const a = s * Math.min(l, 1 - l)\n /**\n * @param n\n */\n const f = (n: number, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1)\n return [f(0), f(8), f(4)]\n}\n\n/**\n * Convert hsv to rgb normalized\n * @url https://jsfiddle.net/Lamik/Lr61wqub/15/\n * @param h - hue [0..360]\n * @param s - saturation [0..1]\n * @param v - value [0..1]\n * @returns - [r, g, b] each normalized to [0..1]\n * @hidden\n */\nfunction hsv2rgbn(h: number, s: number, v: number): number[] {\n /**\n * @param n\n */\n const f = (n: number, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0)\n return [f(5), f(3), f(1)]\n}\n\n/**\n * Convert hwb to rgb normalized\n * @param h - hue [0..360]\n * @param w - whiteness [0..1]\n * @param b - blackness [0..1]\n * @returns - [r, g, b] each normalized to [0..1]\n * @hidden\n */\nfunction hwb2rgbn(h: number, w: number, b: number): number[] {\n const rgb = hsl2rgbn(h, 1, 0.5)\n let i: number\n if (w + b > 1) {\n i = 1 / (w + b)\n w *= i\n b *= i\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b\n rgb[i] += w\n }\n return rgb\n}\n\nfunction hueValue(r: number, g: number, b: number, d: number, max: number): number {\n if (r === max) {\n return (g - b) / d + (g < b ? 6 : 0)\n }\n if (g === max) {\n return (b - r) / d + 2\n }\n return (r - g) / d + 4\n}\n\n/**\n * Convert rgb to hsl\n * @param v - the color\n * @returns - [h, s, l]\n */\nexport function rgb2hsl(v: RGBA): number[] {\n const range = 255\n const r = v.r / range\n const g = v.g / range\n const b = v.b / range\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const l = (max + min) / 2\n let h: number = 0\n let s: number = 0\n let d: number\n if (max !== min) {\n d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n h = hueValue(r, g, b, d, max)\n h = h * 60 + 0.5\n }\n return [h | 0, s || 0, l]\n}\n\n/**\n * @param f\n * @param a\n * @param b\n * @param c\n * @private\n * @hidden\n */\nfunction calln(\n f: (h: number, s: number, l: number) => number[],\n a: number | number[],\n b?: number,\n c?: number\n): number[] {\n return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b!, c!)).map(n2b)\n}\n\n/**\n * Convert hsl to rgb\n * @param h - hue | [h, s, l]\n * @param s - saturation\n * @param l - lightness\n * @returns\n */\nexport function hsl2rgb(h: number | number[], s?: number, l?: number): number[] {\n return calln(hsl2rgbn, h, s, l)\n}\n\n/**\n * Convert hwb to rgb\n * @param h - hue | [h, s, l]\n * @param w - whiteness\n * @param b - blackness\n * @returns\n */\nexport function hwb2rgb(h: number | number[], w?: number, b?: number): number[] {\n return calln(hwb2rgbn, h, w, b)\n}\n\n/**\n * Convert hsv to rgb\n * @param h - hue | [h, s, l]\n * @param s - saturation\n * @param v - value\n * @returns\n */\nexport function hsv2rgb(h: number | number[], s?: number, v?: number): number[] {\n return calln(hsv2rgbn, h, s, v)\n}\n\n/**\n * @param h - the angle\n * @hidden\n */\nfunction hue(h: number): number {\n return ((h % 360) + 360) % 360\n}\n\n/**\n * Parse hsl/hsv/hwb color string\n * @param str - hsl/hsv/hwb color string\n * @returns - the parsed color components\n */\nexport function hueParse(str: string): RGBA | undefined {\n const m = HUE_RE.exec(str)\n let a = 255\n let v: number[]\n\n if (!m) {\n return undefined\n }\n\n // v is undefined\n if (m[5] !== undefined) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5])\n }\n\n const h = hue(+m[2])\n const p1 = +m[3] / 100\n const p2 = +m[4] / 100\n\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2)\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2)\n } else {\n v = hsl2rgb(h, p1, p2)\n }\n\n return {\n a: a,\n b: v[2],\n g: v[1],\n r: v[0],\n }\n}\n\n/**\n * Rotate the `v` color by `deg` degrees\n * @param v - the color\n * @param deg - degrees to rotate\n */\nexport function rotate(v: RGBA, deg: number): void {\n const h = rgb2hsl(v)\n h[0] = hue(h[0] + deg)\n const rgb = hsl2rgb(h)\n v.r = rgb[0]\n v.g = rgb[1]\n v.b = rgb[2]\n}\n\n/**\n * Return hsl(a) string from color components\n * @param v - the color\n * @return\n */\nexport function hslString(v: RGBA | undefined): string | undefined {\n if (!v) {\n return undefined\n }\n const a = rgb2hsl(v)\n const h = a[0]\n const s = n2p(a[1])\n const l = n2p(a[2])\n return v.a < 255 ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` : `hsl(${h}, ${s}%, ${l}%)`\n}\n", "/**\n * @packageDocumentation\n * @module utils\n */\n\nconst map: Record<string, string> = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names: Record<string, string> = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\n\n/**\n * Unpack color names\n * @returns Record of color names to RGB arrays\n */\nexport default function unpack(): Record<string, number[]> {\n const unpacked: Record<string, number[]> = {};\n const keys = Object.keys(names);\n const tkeys = Object.keys(map);\n let i: number, j: number, k: string | number, ok: string, nk: string;\n\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n\n return unpacked;\n}\n", "/**\n * @packageDocumentation\n * @module utils\n */\n\nimport type { RGBA } from './color.js'\n\nimport unpack from './packed.js'\n\nlet names: Record<string, number[]>\n\n/**\n * Parse color name\n * @param str - the color name\n * @return - the color\n */\nexport function nameParse(str: string): RGBA | undefined {\n if (!names) {\n names = unpack()\n names.transparent = [0, 0, 0, 0]\n }\n const a = names[str.toLowerCase()]\n return (\n a && {\n a: a.length === 4 ? a[3] : 255,\n b: a[2],\n g: a[1],\n r: a[0],\n }\n )\n}\n", "/**\n * @packageDocumentation\n * @module utils\n */\n\nimport type { RGBA } from './color.js'\n\nimport { b2n, lim, p2b } from './byte.js'\n\n/**\n * @hidden\n */\nconst RGB_RE =\n /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/\n\n/**\n * Parse rgb(a) string to RGBA\n * @param str - the rgb string\n * @returns - the parsed color\n */\nexport function rgbParse(str: string): RGBA | undefined {\n const m = RGB_RE.exec(str)\n let a = 255\n let r: number, g: number, b: number\n\n if (!m) {\n return undefined\n }\n\n // r is undefined\n if (m[7] !== undefined) {\n const v = +m[7]\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255)\n }\n\n r = +m[1]\n g = +m[3]\n b = +m[5]\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255))\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255))\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255))\n\n return {\n a: a,\n b: b,\n g: g,\n r: r,\n }\n}\n\n/**\n * Return rgb(a) string from color\n * @param v - the color\n */\nexport function rgbString(v: RGBA | undefined): string | undefined {\n return (\n v && (v.a < 255 ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` : `rgb(${v.r}, ${v.g}, ${v.b})`)\n )\n}\n", "/**\n * @packageDocumentation\n * @module utils\n */\n\nimport type { RGBA } from './color.js'\n\nimport { b2n, n2b } from './byte.js'\n\nconst to = (v: number): number => (v <= 0.0031308 ? v * 12.92 : v ** (1.0 / 2.4) * 1.055 - 0.055)\nconst from = (v: number): number => (v <= 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4)\n\n/**\n * @param rgb1 from color\n * @param rgb2 to color\n * @param t 0..1\n * @returns interpolaced\n */\nexport function interpolate(rgb1: RGBA, rgb2: RGBA, t: number): RGBA {\n const r = from(b2n(rgb1.r))\n const g = from(b2n(rgb1.g))\n const b = from(b2n(rgb1.b))\n return {\n a: rgb1.a + t * (rgb2.a - rgb1.a),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n }\n}\n", "/**\n * @packageDocumentation\n * @module index\n */\n\nimport { b2n, n2b, round } from './byte.js'\nimport { hexParse, hexString } from './hex.js'\nimport { hsl2rgb, hslString, hueParse, rgb2hsl, rotate } from './hue.js'\nimport { nameParse } from './names.js'\nimport { rgbParse, rgbString } from './rgb.js'\nimport { interpolate } from './srgb.js'\n\nconst COMMENT_REGEXP = /\\/\\*[\\s\\S]*?\\*\\//g\n\n/**\n * RGBA color type\n */\nexport interface RGBA {\n r: number\n g: number\n b: number\n a: number\n}\n\n/**\n * Modify HSL properties\n * @param v - the color\n * @param i - index [0=h, 1=s, 2=l]\n * @param ratio - ratio [0..1]\n * @hidden\n */\nfunction modHSL(v: RGBA | undefined, i: number, ratio: number): void {\n if (v) {\n let tmp = rgb2hsl(v)\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1))\n tmp = hsl2rgb(tmp)\n v.r = tmp[0]\n v.g = tmp[1]\n v.b = tmp[2]\n }\n}\n\n/**\n * Clone color\n * @param v - the color\n * @param proto - prototype\n * @hidden\n */\nfunction clone(v: RGBA | undefined, proto?: object): RGBA | undefined {\n return v ? Object.assign(proto || {}, v) : v\n}\n\n/**\n * @param input\n * @hidden\n */\nfunction fromObject(input: RGBA | number[]): RGBA {\n let v: RGBA = { a: 255, b: 0, g: 0, r: 0 }\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = { a: 255, b: input[2], g: input[1], r: input[0] }\n if (input.length > 3) {\n v.a = n2b(input[3])\n }\n }\n } else {\n v = clone(input, { a: 1, b: 0, g: 0, r: 0 })!\n v.a = n2b(v.a)\n }\n return v\n}\n\n/**\n * @param str\n * @hidden\n */\nfunction functionParse(str: string): RGBA | undefined {\n const clean = str.replace(COMMENT_REGEXP, '').trim()\n if (clean.charAt(0) === 'r') {\n return rgbParse(clean)\n }\n return hueParse(clean)\n}\n\nexport default class Color {\n /**\n * @type {RGBA}\n * @hidden\n **/\n _rgb: RGBA\n\n /**\n * @type {boolean}\n * @hidden\n **/\n _valid: boolean\n\n /**\n * constructor\n * @param input\n */\n constructor(input: Color | RGBA | string | number[]) {\n if (input instanceof Color) {\n // biome-ignore lint/correctness/noConstructorReturn: returns the existing instance instead of double-wrapping it\n return input\n }\n const type = typeof input\n let v: RGBA | undefined\n if (type === 'object') {\n v = fromObject(input as RGBA | number[])\n } else if (type === 'string') {\n v = hexParse(input as string) || nameParse(input as string) || functionParse(input as string)\n }\n\n this._rgb = v\n this._valid = !!v\n }\n\n /**\n * `true` if this is a valid color\n * @returns {boolean}\n */\n get valid(): boolean {\n return this._valid\n }\n\n /**\n * @returns {RGBA} - the color\n */\n get rgb(): RGBA {\n const v = clone(this._rgb)\n if (v) {\n v.a = b2n(v.a)\n }\n return v as RGBA\n }\n\n /**\n * @param obj - the color\n */\n set rgb(obj: RGBA) {\n this._rgb = fromObject(obj)\n }\n\n /**\n * rgb(a) string\n * @return {string|undefined}\n */\n rgbString(): string | undefined {\n return this._valid ? rgbString(this._rgb) : undefined\n }\n\n /**\n * hex string\n * @return {string|undefined}\n */\n hexString(): string | undefined {\n return this._valid ? hexString(this._rgb) : undefined\n }\n\n /**\n * hsl(a) string\n * @return {string|undefined}\n */\n hslString(): string | undefined {\n return this._valid ? hslString(this._rgb) : undefined\n }\n\n /**\n * Mix another color to this color.\n * @param color - Color to mix in\n * @param weight - 0..1\n * @returns {Color}\n */\n mix(color: Color, weight: number = 0.5): Color {\n if (color) {\n const c1 = this.rgb\n const c2 = color.rgb\n\n const w = 2 * weight - 1\n const a = c1.a - c2.a\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0\n const w2 = 1 - w1\n c1.r = 0xff & (w1 * c1.r + w2 * c2.r + 0.5)\n c1.g = 0xff & (w1 * c1.g + w2 * c2.g + 0.5)\n c1.b = 0xff & (w1 * c1.b + w2 * c2.b + 0.5)\n c1.a = weight * c1.a + (1 - weight) * c2.a\n this.rgb = c1\n }\n return this\n }\n\n /**\n * Interpolate a color value between this and `color`\n * @param color\n * @param t - 0..1\n * @returns {Color}\n */\n interpolate(color: Color, t: number): Color {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t)\n }\n return this\n }\n\n /**\n * Clone\n * @returns {Color}\n */\n clone(): Color {\n return new Color(this.rgb)\n }\n\n /**\n * Set alpha\n * @param a - the alpha [0..1]\n * @returns {Color}\n */\n alpha(a: number): Color {\n this._rgb.a = n2b(a)\n return this\n }\n\n /**\n * Make clearer\n * @param ratio - ratio [0..1]\n * @returns {Color}\n */\n clearer(ratio: number): Color {\n const rgb = this._rgb\n rgb.a *= 1 - ratio\n return this\n }\n\n /**\n * Convert to grayscale\n * @returns {Color}\n */\n greyscale(): Color {\n const rgb = this._rgb\n // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11)\n rgb.r = rgb.g = rgb.b = val\n return this\n }\n\n /**\n * Opaquer\n * @param ratio - ratio [0..1]\n * @returns {Color}\n */\n opaquer(ratio: number): Color {\n const rgb = this._rgb\n rgb.a *= 1 + ratio\n return this\n }\n\n /**\n * Negates the rgb value\n * @returns {Color}\n */\n negate(): Color {\n const v = this._rgb\n v.r = 255 - v.r\n v.g = 255 - v.g\n v.b = 255 - v.b\n return this\n }\n\n /**\n * Lighten\n * @param ratio - ratio [0..1]\n * @returns {Color}\n */\n lighten(ratio: number): Color {\n modHSL(this._rgb, 2, ratio)\n return this\n }\n\n /**\n * Darken\n * @param ratio - ratio [0..1]\n * @returns {Color}\n */\n darken(ratio: number): Color {\n modHSL(this._rgb, 2, -ratio)\n return this\n }\n\n /**\n * Saturate\n * @param ratio - ratio [0..1]\n * @returns {Color}\n */\n saturate(ratio: number): Color {\n modHSL(this._rgb, 1, ratio)\n return this\n }\n\n /**\n * Desaturate\n * @param ratio - ratio [0..1]\n * @returns {Color}\n */\n desaturate(ratio: number): Color {\n modHSL(this._rgb, 1, -ratio)\n return this\n }\n\n /**\n * Rotate\n * @param deg - degrees to rotate\n * @returns {Color}\n */\n rotate(deg: number): Color {\n rotate(this._rgb, deg)\n return this\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["map", "names"]
7
+ }
package/dist/color.d.ts CHANGED
@@ -1,142 +1,17 @@
1
1
  /**
2
2
  * @packageDocumentation
3
- * @module @kurkle/color
3
+ * @module index
4
4
  */
5
- export type RGBA = {
6
- /**
7
- * - red [0..255]
8
- */
9
- r: number;
10
- /**
11
- * - green [0..255]
12
- */
13
- g: number;
14
- /**
15
- * - blue [0..255]
16
- */
17
- b: number;
18
- /**
19
- * - alpha [0..1]
20
- */
21
- a: number;
22
- };
23
- /**
24
- * Parse HEX to color
25
- * @param {string} str - the string
5
+ /**
6
+ * RGBA color type
26
7
  */
27
- export function hexParse(str: string): {
8
+ export interface RGBA {
28
9
  r: number;
29
10
  g: number;
30
11
  b: number;
31
12
  a: number;
32
- };
33
- /**
34
- * Return HEX string from color
35
- * @param {RGBA} v - the color
36
- */
37
- export function hexString(v: RGBA): string | RGBA;
38
- /**
39
- * Rounds decimal to nearest integer
40
- * @param {number} v - the number to round
41
- */
42
- export function round(v: number): number;
43
- /**
44
- * convert percent to byte 0..255
45
- * @param {number} v - 0..100
46
- */
47
- export function p2b(v: number): number;
48
- /**
49
- * convert byte to percet 0..100
50
- * @param {number} v - 0..255
51
- */
52
- export function b2p(v: number): number;
53
- /**
54
- * convert normalized to byte 0..255
55
- * @param {number} v - 0..1
56
- */
57
- export function n2b(v: number): number;
58
- /**
59
- * convert byte to normalized 0..1
60
- * @param {number} v - 0..255
61
- */
62
- export function b2n(v: number): number;
63
- /**
64
- * convert normalized to percent 0..100
65
- * @param {number} v - 0..1
66
- */
67
- export function n2p(v: number): number;
68
- /**
69
- * Convert rgb to hsl
70
- * @param {RGBA} v - the color
71
- * @returns {number[]} - [h, s, l]
72
- */
73
- export function rgb2hsl(v: RGBA): number[];
74
- /**
75
- * Convert hsl to rgb
76
- * @param {number|number[]} h - hue | [h, s, l]
77
- * @param {number} [s] - saturation
78
- * @param {number} [l] - lightness
79
- * @returns {number[]}
80
- */
81
- export function hsl2rgb(h: number | number[], s?: number, l?: number): number[];
82
- /**
83
- * Convert hwb to rgb
84
- * @param {number|number[]} h - hue | [h, s, l]
85
- * @param {number} [w] - whiteness
86
- * @param {number} [b] - blackness
87
- * @returns {number[]}
88
- */
89
- export function hwb2rgb(h: number | number[], w?: number, b?: number): number[];
90
- /**
91
- * Convert hsv to rgb
92
- * @param {number|number[]} h - hue | [h, s, l]
93
- * @param {number} [s] - saturation
94
- * @param {number} [v] - value
95
- * @returns {number[]}
96
- */
97
- export function hsv2rgb(h: number | number[], s?: number, v?: number): number[];
98
- /**
99
- * Parse hsl/hsv/hwb color string
100
- * @param {string} str - hsl/hsv/hwb color string
101
- * @returns {RGBA} - the parsed color components
102
- */
103
- export function hueParse(str: string): RGBA;
104
- /**
105
- * Rotate the `v` color by `deg` degrees
106
- * @param {RGBA} v - the color
107
- * @param {number} deg - degrees to rotate
108
- */
109
- export function rotate(v: RGBA, deg: number): void;
110
- /**
111
- * Return hsl(a) string from color components
112
- * @param {RGBA} v - the color
113
- * @return {string|undefined}
114
- */
115
- export function hslString(v: RGBA): string;
116
- /**
117
- * Parse color name
118
- * @param {string} str - the color name
119
- * @return {RGBA} - the color
120
- */
121
- export function nameParse(str: string): RGBA;
122
- /**
123
- * Parse rgb(a) string to RGBA
124
- * @param {string} str - the rgb string
125
- * @returns {RGBA} - the parsed color
126
- */
127
- export function rgbParse(str: string): RGBA;
128
- /**
129
- * Return rgb(a) string from color
130
- * @param {RGBA} v - the color
131
- */
132
- export function rgbString(v: RGBA): string;
133
-
134
- export class Color {
135
- /**
136
- * constructor
137
- * @param {Color|RGBA|string|number[]} input
138
- */
139
- constructor(input: string | number[] | Color | RGBA);
13
+ }
14
+ export default class Color {
140
15
  /**
141
16
  * @type {RGBA}
142
17
  * @hidden
@@ -147,89 +22,114 @@ export class Color {
147
22
  * @hidden
148
23
  **/
149
24
  _valid: boolean;
25
+ /**
26
+ * constructor
27
+ * @param input
28
+ */
29
+ constructor(input: Color | RGBA | string | number[]);
150
30
  /**
151
31
  * `true` if this is a valid color
152
32
  * @returns {boolean}
153
33
  */
154
34
  get valid(): boolean;
155
- /**
156
- * @param {RGBA} obj - the color
157
- */
158
- set rgb(arg: RGBA);
159
35
  /**
160
36
  * @returns {RGBA} - the color
161
37
  */
162
38
  get rgb(): RGBA;
39
+ /**
40
+ * @param obj - the color
41
+ */
42
+ set rgb(obj: RGBA);
163
43
  /**
164
44
  * rgb(a) string
45
+ * @return {string|undefined}
165
46
  */
166
- rgbString(): string;
47
+ rgbString(): string | undefined;
167
48
  /**
168
49
  * hex string
50
+ * @return {string|undefined}
169
51
  */
170
- hexString(): string;
52
+ hexString(): string | undefined;
171
53
  /**
172
54
  * hsl(a) string
55
+ * @return {string|undefined}
173
56
  */
174
- hslString(): string;
57
+ hslString(): string | undefined;
175
58
  /**
176
59
  * Mix another color to this color.
177
- * @param {Color} color - Color to mix in
178
- * @param {number} weight - 0..1
60
+ * @param color - Color to mix in
61
+ * @param weight - 0..1
62
+ * @returns {Color}
63
+ */
64
+ mix(color: Color, weight?: number): Color;
65
+ /**
66
+ * Interpolate a color value between this and `color`
67
+ * @param color
68
+ * @param t - 0..1
69
+ * @returns {Color}
179
70
  */
180
- mix(color: Color, weight: number): Color;
71
+ interpolate(color: Color, t: number): Color;
181
72
  /**
182
73
  * Clone
74
+ * @returns {Color}
183
75
  */
184
76
  clone(): Color;
185
77
  /**
186
- * Set aplha
187
- * @param {number} a - the alpha [0..1]
78
+ * Set alpha
79
+ * @param a - the alpha [0..1]
80
+ * @returns {Color}
188
81
  */
189
82
  alpha(a: number): Color;
190
83
  /**
191
84
  * Make clearer
192
- * @param {number} ratio - ratio [0..1]
85
+ * @param ratio - ratio [0..1]
86
+ * @returns {Color}
193
87
  */
194
88
  clearer(ratio: number): Color;
195
89
  /**
196
90
  * Convert to grayscale
91
+ * @returns {Color}
197
92
  */
198
93
  greyscale(): Color;
199
94
  /**
200
95
  * Opaquer
201
- * @param {number} ratio - ratio [0..1]
96
+ * @param ratio - ratio [0..1]
97
+ * @returns {Color}
202
98
  */
203
99
  opaquer(ratio: number): Color;
100
+ /**
101
+ * Negates the rgb value
102
+ * @returns {Color}
103
+ */
204
104
  negate(): Color;
205
105
  /**
206
106
  * Lighten
207
- * @param {number} ratio - ratio [0..1]
107
+ * @param ratio - ratio [0..1]
108
+ * @returns {Color}
208
109
  */
209
110
  lighten(ratio: number): Color;
210
111
  /**
211
112
  * Darken
212
- * @param {number} ratio - ratio [0..1]
113
+ * @param ratio - ratio [0..1]
114
+ * @returns {Color}
213
115
  */
214
116
  darken(ratio: number): Color;
215
117
  /**
216
118
  * Saturate
217
- * @param {number} ratio - ratio [0..1]
119
+ * @param ratio - ratio [0..1]
120
+ * @returns {Color}
218
121
  */
219
122
  saturate(ratio: number): Color;
220
123
  /**
221
124
  * Desaturate
222
- * @param {number} ratio - ratio [0..1]
125
+ * @param ratio - ratio [0..1]
126
+ * @returns {Color}
223
127
  */
224
128
  desaturate(ratio: number): Color;
225
129
  /**
226
130
  * Rotate
227
- * @param {number} deg - degrees to rotate
131
+ * @param deg - degrees to rotate
132
+ * @returns {Color}
228
133
  */
229
134
  rotate(deg: number): Color;
230
135
  }
231
- /**
232
- * Construct new Color instance
233
- * @param {Color|RGBA|string|number[]} input
234
- */
235
- export default function _default(input: string | number[] | Color | RGBA): Color;