From 97bbd0a2367e7dd7ce8368be5f0040a48a41e446 Mon Sep 17 00:00:00 2001 From: landonwjohnson Date: Fri, 19 Jul 2024 10:31:27 -0600 Subject: [PATCH] fixed typo relating to 1-100 --- README.md | 73 +- docs/.nojekyll | 1 + docs/assets/highlight.css | 92 ++ docs/assets/icons.js | 15 + docs/assets/icons.svg | 1 + docs/assets/main.js | 59 + docs/assets/navigation.js | 1 + docs/assets/search.js | 1 + docs/assets/style.css | 1412 +++++++++++++++++ docs/classes/Color.html | 11 + docs/enums/ColorNames.html | 145 ++ docs/functions/RGBAToHexAlpha.html | 8 + docs/functions/adjustColor.html | 1 + docs/functions/applyAlphaToColor.html | 1 + docs/functions/blendColors.html | 1 + docs/functions/canBeConvertedIntoColor.html | 1 + docs/functions/darkenColor.html | 7 + docs/functions/formatDecimalObjectToRgba.html | 11 + docs/functions/hexToDecimal.html | 6 + docs/functions/hexToRgb.html | 6 + docs/functions/hexToRgba.html | 5 + docs/functions/hexesToDecimals.html | 7 + docs/functions/hslToRgb.html | 6 + docs/functions/isHexColor.html | 8 + docs/functions/isRgbaOutOfRange.html | 6 + docs/functions/isValidAlphaHexCode.html | 6 + docs/functions/isValidHex.html | 11 + docs/functions/isValidRgb.html | 4 + docs/functions/isValidRgba.html | 1 + docs/functions/lightenColor.html | 7 + docs/functions/log.html | 1 + docs/functions/parseColor.html | 5 + docs/functions/parseHex.html | 1 + docs/functions/parseRgbString.html | 4 + docs/functions/toHexColor.html | 1 + docs/functions/toRgbString.html | 4 + docs/index.html | 54 + docs/interfaces/AdjustColorFunc.html | 1 + docs/interfaces/HexObject.html | 5 + docs/interfaces/RgbWithAHexObject.html | 5 + docs/modules.html | 32 + docs/variables/cssColors.html | 1 + package.json | 6 +- src/__tests__/adjustColor.test.ts | 48 +- src/__tests__/applyAlphaToColor.test.ts | 73 +- src/__tests__/blendColors.test.ts | 47 +- src/__tests__/canBeConvertedToColor.test.ts | 52 +- src/__tests__/color.test.ts | 36 +- src/__tests__/colorTestCases.test.ts | 321 ++++ src/__tests__/colorTestCasesFunctions.test.ts | 98 ++ src/__tests__/darkenColor.test.ts | 58 +- .../formatDecimalObjectToRgba.test.ts | 41 +- src/__tests__/hexToDecimals.test.ts | 91 +- src/__tests__/hexToRgb.test.ts | 1 - src/__tests__/isHexColor.test.ts | 52 +- src/__tests__/isRgbaOutOfRange.test.ts | 73 + src/__tests__/isValidAlphaHexCode.test.ts | 31 + src/__tests__/isValidHex.test.ts | 54 +- src/__tests__/isValidRgb.test.ts | 52 +- src/__tests__/parseColor.test.ts | 50 +- src/__tests__/parseRgbString.test.ts | 53 +- src/__tests__/rgbaToHexAlpha.test.ts | 44 +- src/__tests__/toHexColor.test.ts | 25 +- src/__tests__/toRgbString.test.ts | 32 +- src/adjustColor.ts | 53 +- src/applyAlphaToColor.ts | 4 +- src/blendColors.ts | 22 +- src/canBeConvertedToColor.ts | 16 +- src/color.ts | 20 +- src/colorCodes.txt | 1110 +++++++++++++ src/cssColors.ts | 364 +++-- src/darkenColor.ts | 17 +- src/formatDecimalObjectToRgba.ts | 8 +- src/hexToDecimals.ts | 18 +- src/hexToRgb.ts | 29 +- src/hexToRgba.ts | 24 +- src/hslToRgb.ts | 62 +- src/index.ts | 12 +- src/isHexColor.ts | 16 +- src/isRgbaOutOfRange.ts | 21 + src/isValidAlphaHexCode.ts | 10 + src/isValidHex.ts | 2 +- src/isValidRgb.ts | 15 +- src/isValidRgba.ts | 47 +- src/lightenColor.ts | 17 +- src/parseColor.ts | 30 +- src/parseHex.ts | 37 +- src/parseRgbString.ts | 22 +- src/rgbaToHexAlpha.ts | 11 +- src/toHexColor.ts | 12 +- src/types/alpha-value.type.ts | 16 +- src/types/color-input.type.ts | 1 + src/types/color-item.interface.ts | 16 +- src/types/color-names.ts | 291 ++-- src/types/hex-decimal-object.interface.ts | 12 +- src/types/number-range-hundred.type.ts | 11 + src/types/rgb.type.ts | 13 +- src/types/theme.type.ts | 2 +- typings/__tests__/colorTestCases.test.d.ts | 12 + .../colorTestCasesFunctions.test.d.ts | 4 + typings/__tests__/isRgbaOutOfRange.test.d.ts | 1 + .../__tests__/isValidAlphaHexCode.test.d.ts | 1 + typings/__tests__/isValidRgb.test.d.ts | 2 +- typings/__tests__/isValidRgba.test.d.ts | 1 + typings/color.d.ts | 2 +- typings/cssColors.d.ts | 4 +- typings/formatDecimalObjectToRgba.d.ts | 2 +- typings/generateColorFrom[TODO].d.ts | 0 typings/hexToDecimals.d.ts | 21 +- typings/hexToRgba.d.ts | 8 +- typings/index.d.ts | 12 +- typings/isRgbaOutOfRange.d.ts | 7 + typings/isValidAlphaHexCode.d.ts | 6 + typings/isValidRgba.d.ts | 5 + typings/parseColor.d.ts | 1 + typings/parseRgbString.d.ts | 2 +- typings/types/color-input.type.d.ts | 1 + typings/types/color-item.interface.d.ts | 11 +- typings/types/rgb.type.d.ts | 3 + typings/types/theme.type.d.ts | 2 +- 120 files changed, 4870 insertions(+), 965 deletions(-) create mode 100644 docs/.nojekyll create mode 100644 docs/assets/highlight.css create mode 100644 docs/assets/icons.js create mode 100644 docs/assets/icons.svg create mode 100644 docs/assets/main.js create mode 100644 docs/assets/navigation.js create mode 100644 docs/assets/search.js create mode 100644 docs/assets/style.css create mode 100644 docs/classes/Color.html create mode 100644 docs/enums/ColorNames.html create mode 100644 docs/functions/RGBAToHexAlpha.html create mode 100644 docs/functions/adjustColor.html create mode 100644 docs/functions/applyAlphaToColor.html create mode 100644 docs/functions/blendColors.html create mode 100644 docs/functions/canBeConvertedIntoColor.html create mode 100644 docs/functions/darkenColor.html create mode 100644 docs/functions/formatDecimalObjectToRgba.html create mode 100644 docs/functions/hexToDecimal.html create mode 100644 docs/functions/hexToRgb.html create mode 100644 docs/functions/hexToRgba.html create mode 100644 docs/functions/hexesToDecimals.html create mode 100644 docs/functions/hslToRgb.html create mode 100644 docs/functions/isHexColor.html create mode 100644 docs/functions/isRgbaOutOfRange.html create mode 100644 docs/functions/isValidAlphaHexCode.html create mode 100644 docs/functions/isValidHex.html create mode 100644 docs/functions/isValidRgb.html create mode 100644 docs/functions/isValidRgba.html create mode 100644 docs/functions/lightenColor.html create mode 100644 docs/functions/log.html create mode 100644 docs/functions/parseColor.html create mode 100644 docs/functions/parseHex.html create mode 100644 docs/functions/parseRgbString.html create mode 100644 docs/functions/toHexColor.html create mode 100644 docs/functions/toRgbString.html create mode 100644 docs/index.html create mode 100644 docs/interfaces/AdjustColorFunc.html create mode 100644 docs/interfaces/HexObject.html create mode 100644 docs/interfaces/RgbWithAHexObject.html create mode 100644 docs/modules.html create mode 100644 docs/variables/cssColors.html create mode 100644 src/__tests__/colorTestCases.test.ts create mode 100644 src/__tests__/colorTestCasesFunctions.test.ts create mode 100644 src/__tests__/isRgbaOutOfRange.test.ts create mode 100644 src/__tests__/isValidAlphaHexCode.test.ts create mode 100644 src/colorCodes.txt create mode 100644 src/isRgbaOutOfRange.ts create mode 100644 src/isValidAlphaHexCode.ts create mode 100644 src/types/color-input.type.ts create mode 100644 src/types/number-range-hundred.type.ts create mode 100644 typings/__tests__/colorTestCases.test.d.ts create mode 100644 typings/__tests__/colorTestCasesFunctions.test.d.ts create mode 100644 typings/__tests__/isRgbaOutOfRange.test.d.ts create mode 100644 typings/__tests__/isValidAlphaHexCode.test.d.ts delete mode 100644 typings/generateColorFrom[TODO].d.ts create mode 100644 typings/isRgbaOutOfRange.d.ts create mode 100644 typings/isValidAlphaHexCode.d.ts create mode 100644 typings/types/color-input.type.d.ts diff --git a/README.md b/README.md index 8c70cc6..fde2f3d 100755 --- a/README.md +++ b/README.md @@ -1,63 +1,42 @@ +Here's a cleaned-up version of your README: +--- # Colors -
-Devlander Colors Npm Package +Devlander Colors Npm Package +## Badges -
+[![Join Devlander on Discord](https://img.shields.io/badge/Discord-Devlander-%235865F2)](https://bit.ly/devlander-discord-invite) +[![npm downloads](https://img.shields.io/npm/dm/@devlander/colors.svg)](https://www.npmjs.com/package/@devlander/colors) +[![Join the discussion on Github](https://img.shields.io/badge/Github%20Discussions%20%26%20Support-Chat%20now!-blue)](https://github.com/orgs/Devlander-Software/discussions) +[![Join Devlander on Twitch](https://img.shields.io/twitch/status/devlander)](https://bit.ly/devlander-twitch) +[![Follow Landon Johnson On Twitter](https://img.shields.io/twitter/follow/landonwjohnson.svg?style=social&label=Follow)](https://bit.ly/landonwjohnson-on-twitter) +[![Wakatime](https://wakatime.com/badge/user/bd50b6c5-e0ca-4937-83b3-ab2d13adbc73/project/02037e5a-4e97-4cd5-872c-df41ad2d6b67.svg)](https://wakatime.com/badge/user/bd50b6c5-e0ca-4937-83b3-ab2d13adbc73/project/02037e5a-4e97-4cd5-872c-df41ad2d6b67) +## Overview -
+The Devlander Colors package provides a collection of color utilities for JavaScript, including color pickers, color schemes, and palette generation. It's used across various projects to manage and utilize color schemes effectively. -
- - - Join Devlander on Discord - - -
- - - npm downloads - -
- - - Join the discussion on Github - -
- - - Join Devlander on Twitch - -
- - - Follow Landon Johnson On Twitter - -
- - -[![wakatime](https://wakatime.com/badge/user/bd50b6c5-e0ca-4937-83b3-ab2d13adbc73/project/02037e5a-4e97-4cd5-872c-df41ad2d6b67.svg)](https://wakatime.com/badge/user/bd50b6c5-e0ca-4937-83b3-ab2d13adbc73/project/02037e5a-4e97-4cd5-872c-df41ad2d6b67) -
- - -
- -In house colors package used across project +## Get Involved - **Discord:** Join the Devlander community [here](https://bit.ly/devlander-discord-invite). -- **npm downloads:** Get our package [@devlander/colors](https://www.npmjs.com/package/@devlander/colors). -- **GitHub Discussions:** Engage in discussions and get support [here](https://github.com/orgs/Devlander-Software/discussions). -- **Twitch:** Catch our live coding sessions [here](https://bit.ly/devlander-twitch). +- **npm:** Download the package [@devlander/colors](https://www.npmjs.com/package/@devlander/colors). +- **GitHub Discussions:** Engage with the community and get support [here](https://github.com/orgs/Devlander-Software/discussions). +- **Twitch:** Watch live coding sessions [here](https://bit.ly/devlander-twitch). - **Twitter:** Follow Landon Johnson [@landonwjohnson](https://bit.ly/landonwjohnson-on-twitter). -- **Wakatime stats:** Track our progress [here](https://bit.ly/landonwjohnson-on-twitter). +- **Wakatime:** Track our development progress [here](https://wakatime.com/badge/user/bd50b6c5-e0ca-4937-83b3-ab2d13adbc73/project/02037e5a-4e97-4cd5-872c-df41ad2d6b67). + +## Future Goals + +- Develop functions to generate themes based on colors and parameters. +- Implement a function to find complementary colors. +- Create a utility to extract colors from images. -## Engage and Contribute +### [Become a Sponsor!](https://bit.ly/sponsor-landonjohnson-github/) -We welcome contributions, feedback, and suggestions! Join our discussions on GitHub, or connect with us on Discord and Twitter. Your input helps us improve the Devlander Colors Package for the developer community. +--- -### [Become a Sponsor!](https://bit.ly/sponsor-landonjohnson-github/) \ No newline at end of file +Feel free to adjust any sections or add additional information as needed! \ No newline at end of file diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e2ac661 --- /dev/null +++ b/docs/.nojekyll @@ -0,0 +1 @@ +TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/docs/assets/highlight.css b/docs/assets/highlight.css new file mode 100644 index 0000000..341ca72 --- /dev/null +++ b/docs/assets/highlight.css @@ -0,0 +1,92 @@ +:root { + --light-hl-0: #001080; + --dark-hl-0: #9CDCFE; + --light-hl-1: #000000; + --dark-hl-1: #D4D4D4; + --light-hl-2: #795E26; + --dark-hl-2: #DCDCAA; + --light-hl-3: #A31515; + --dark-hl-3: #CE9178; + --light-hl-4: #008000; + --dark-hl-4: #6A9955; + --light-hl-5: #0000FF; + --dark-hl-5: #569CD6; + --light-hl-6: #098658; + --dark-hl-6: #B5CEA8; + --light-hl-7: #0070C1; + --dark-hl-7: #4FC1FF; + --light-hl-8: #AF00DB; + --dark-hl-8: #C586C0; + --light-hl-9: #267F99; + --dark-hl-9: #4EC9B0; + --light-code-background: #FFFFFF; + --dark-code-background: #1E1E1E; +} + +@media (prefers-color-scheme: light) { :root { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --hl-9: var(--light-hl-9); + --code-background: var(--light-code-background); +} } + +@media (prefers-color-scheme: dark) { :root { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --hl-9: var(--dark-hl-9); + --code-background: var(--dark-code-background); +} } + +:root[data-theme='light'] { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --hl-9: var(--light-hl-9); + --code-background: var(--light-code-background); +} + +:root[data-theme='dark'] { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --hl-9: var(--dark-hl-9); + --code-background: var(--dark-code-background); +} + +.hl-0 { color: var(--hl-0); } +.hl-1 { color: var(--hl-1); } +.hl-2 { color: var(--hl-2); } +.hl-3 { color: var(--hl-3); } +.hl-4 { color: var(--hl-4); } +.hl-5 { color: var(--hl-5); } +.hl-6 { color: var(--hl-6); } +.hl-7 { color: var(--hl-7); } +.hl-8 { color: var(--hl-8); } +.hl-9 { color: var(--hl-9); } +pre, code { background: var(--code-background); } diff --git a/docs/assets/icons.js b/docs/assets/icons.js new file mode 100644 index 0000000..b79c9e8 --- /dev/null +++ b/docs/assets/icons.js @@ -0,0 +1,15 @@ +(function(svg) { + svg.innerHTML = ``; + svg.style.display = 'none'; + if (location.protocol === 'file:') { + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateUseElements); + else updateUseElements() + function updateUseElements() { + document.querySelectorAll('use').forEach(el => { + if (el.getAttribute('href').includes('#icon-')) { + el.setAttribute('href', el.getAttribute('href').replace(/.*#/, '#')); + } + }); + } + } +})(document.body.appendChild(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))) \ No newline at end of file diff --git a/docs/assets/icons.svg b/docs/assets/icons.svg new file mode 100644 index 0000000..7dead61 --- /dev/null +++ b/docs/assets/icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/main.js b/docs/assets/main.js new file mode 100644 index 0000000..d6f1388 --- /dev/null +++ b/docs/assets/main.js @@ -0,0 +1,59 @@ +"use strict"; +"use strict";(()=>{var Ce=Object.create;var ne=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Ce(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),y=s.str.charAt(1),p;y in s.node.edges?p=s.node.edges[y]:(p=new t.TokenSet,s.node.edges[y]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(console.log("Show page"),document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){console.log("Scorlling");let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!e.checkVisibility()){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ve(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ne(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ve(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ce(l.parent,i)}.${d}`);let y=document.createElement("li");y.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,y.append(p),e.appendChild(y)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ne(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",fe="mousemove",H="mouseup",J={x:0,y:0},pe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",fe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{pe&&(t.preventDefault(),t.stopImmediatePropagation(),pe=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ye=document.head.appendChild(document.createElement("style"));ye.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ye.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ve(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ve(t.value)})}function ve(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.pathname===r.pathname&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); +/*! Bundled license information: + +lunr/lunr.js: + (** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + *) + (*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + *) + (*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + *) +*/ diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js new file mode 100644 index 0000000..1c02abf --- /dev/null +++ b/docs/assets/navigation.js @@ -0,0 +1 @@ +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAE43TT0+DMBgG8O/S8+Li1MXsxjSKF5cg0YPxUOBd6VZaQsuCMX53I861bO3Lzs/z/vqH8v5FDHSGLMidEqp5phVoMiE1NSVZEJBtpac2uShNJciEbLksyOL2ezKctoO5oFrDfnQ4dTlz56Ji02rT1x5amVuBSwPNmuagp0edITe7mTtcDN0q20BuvNAhxYiEZW/clBFOnbQwMte6371zszvacJoJ0NNDOBSuZu6eHpdRqmLoIlGX1CrrVuaGK6mnw8aQml87FLWX6XOcGEPqWnz2K6UqTB2XEDATIIvjO7KUEyNITuUS7pTcQWOgeJImvLdAFcEL2mxBBkEnRpC1aipq7iHnFRV/7yZVCcu8nzRYRhYooUvVfsRnuvkYk7AsSCQsO2Pce6xDiAOgDxv1PomjCoZpET7MPkPGuY6hC353m6LE73lXrVmtEyoZ+KFhB+VeqeBF/2v1qxcB8aQ2jsbQIVYM3TgRuGqbnkV4344TI4jgrDTIv+rmGKOYd1oxZKimjYbgyjYdIwLf4T8bG09Y9mIaLr0nGDYQyijs6dsUJdCtOPEJ8vEDaFMCLZwIAAA=" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js new file mode 100644 index 0000000..9636e4c --- /dev/null +++ b/docs/assets/search.js @@ -0,0 +1 @@ +window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAE7Vd267bRrL9F/lV46h4p9/sBBMPzmQS2EaCgw0joCRuiTFFKiS1L8fwvx90kZKqm1Vi76bnyUhU1avZq6ovq7ibXxdN/dgu3tx9XXwpqu3ijRdGy0WVHfLFm8Xb7V+ntvuxLuvmn6dqs1guTk25eLMoqi5v7rNN3v5gmLzed4dysVxsyqxt83bxZrH4tjw3HQWXlst6d2nt/lRtuqKu2h/KemfbQHbFZRoiv1o3eDyWz2/L4z77VIvNmja3Gw9D/zqWf/7ZPR9z60Zfjf/3pQWCtlwcsyavOu4BXo8f6do5WHnXZ7d/VrFbr5s5HTs/m9A/LlZe2r/df7F/6+/Qv/V/sX/Zd+hf9n37RzJvXebVFs1app/kV9tU3mTVu/zHunrImy7f/qvqxIQWLG8CgZdckPR2B/MfptsIwbv2tq7arjltupstvdLNeCZuJvlmoq+vzgbXtrt2+4+i/cexKR6yLr+F5K2C66hss+ZLXt2CuljYPYfWelns9t3t5q8mDu03u/WttvufHdrd50+32u1/dmi3wOi91fTFwqH1TGXxrcbPBg5tY2rfavts4ND2Lu+mkvMVsbFD8EnWtq0xZT1kTZGty7z94fKb7YTVp4M0SZFfv8d+w2zuFf0fE3sMako7/YJ9hQX8jb2E0AGH/YNNP+Q9g1s/uH2CTT/kGce6HyTa7uvmkHU/5ZvikJW/rv/KN92n+sNuze0SRFvb0N7nT5/qwZ9pn/58s0l6LPmwW/9RdPu37/OnvkvcwWRkdHtR58N2sr1XcqiOezkZndNwckRaw61fACcHnjVc9gI4eR25BadHW95eAorbThoWLwrjDzsugc8/vbQpLt0uv1k31pZiv4afbJsq2vf5k7QGXX+0b049x6+n7tf7D1m141Yi08S+6d+zstjiAQO7teVbH1m9EOA92bGN2n2fP72wOZ6m648vb44LIfKrtRjTb5cl7unP32MDMmrvlfZ/JrYgmq3W8xdsQqy6cGMbInbCYSNi1xd54nftCxeMdn2RV4UX9IXE3zFr2lyKvuuP1vuDm/uC77UfsN4HuK3/1uu+23pvvc67re/W6/rEeo7k89Pw+SfbSQ7tP+zWH7umqLg81A1sm/3w87u3n+r3+dNb7aB8bVY3sG22q28sxtcf7Zu79eTk15sNGrrXf7JDft1i5dXpMJyu8Yfb6UVqDGWxyd+Vp/x2S6+o3Y3Tet8pHqnqir9P+R/7opsE000d8f4+ZVM4vYl7+4esKarJp6GGjlj/d2omYQYbN4R3ebGbQjjbOCIU7d+TYXYxcsQos82XKYjBxhmh2uzz7dvyUBP1TITSjV0xp8dtTmYq59+Lusw7C5SLoSNWUz9WUzCDjSPCqSmf/6jrSXKInRvSj9k27yzIoXaOSPus6Zr81E5CUUNXrHpTl9nkJE3tHJHqhqhSAspg44xQ3Zf1Y97Y0GQau2O2RTk1DREzR5ymOLT1VC5drRxRnrNJiN7Erf2fsuaLBTfEzB3H4lmImTvOz3W5zasPkzOQaTsDscmebcB6szk4eW4zhGe7WUh2T5TPe6L/2WdfCgugs5070i/ZLq+6qS2pbumO9mtZPOS2dGnGMzAbTWm8gXc2nIO12Rc2CXYxdMf6kNsA9VbuKB8ztUu0ALoYzsDKM9vYIKYz8NQ+wXKap7YzES2nRWrrjvjp1Px9qovJLZpp645otWfXDB2x8vz4W1FN7WiImTvOxy/PNnGiWTqiFQeb+LhYzUCZXsouVo4o9XZntcfVDN2w/lk0+bummDxnUztHpFJt/m0EI93SEa1u8razmRZ1S0e002bfFlO7gauVG8rPWVG167qpJ3ConSPSvm47G6o0Q0esupxakAcT9/Zt9u/z9+4WE9Cs2ccmmufFMXr/b16W9aMNzsXSDe19XeXPP+VTUMTMFaezWPCuVm4o/6q2RVZN7y6pnTvSbmoSuBg5YjzUzVQwn23cEGzOavPOaf/OHvJqmzcTIMRsHs678tTuLcHOtq6Ij5XNbEDtHJHyQ139uC/u7ydPM4apI56qc1tsfajdDCQb0VIznIM1LVhRuxlIl6XMaioXXObgTy+E1G4WkkUSUMN5WJZPNWPvjy1YrFbUbgaSlUyhW85BsxMqTNs5iFYHUMN0Dp6lUDEynoPZ5Xlp/ZTEeAam/cQyez45TD/XYc7THKyEVWrnilRZoFQzEOw06bl69C9ZU09OGRcjR4x8W5wO6lWLX2zeyWDM5+Ba5JJmOAfLSvk2TOfg/XZqjqXd011M5+BZTvkj41mYlvr02HoW6lG98/WCh9Xs5yDbatVj6zmovQw9fd4dWzuiFtvK8nBgmLriVd2PTZ4dJsGudq5Ibff8oZ7mj9g5ItWbTdYWkwF6NXPD+U/2kP1V2wiIuqUz2tR+azBxa//XcvvvbDP1JFcrV5TiYRqjt5mB8FOTrW1QBjtHJJva8cy6ce8+Pf9QO1ckizV65ur8W1bmtkq1aTsD0WK1onbuSLZrlGnrjmi7Ppm2rojH7Dn7Y18cJ+GIoSNWnm32v53u76egiJ0rUnOaBEETx/anhY5ZGsdv5Wlq+R5MHNuvH7dWlVrN0BHLZuc+c8/+IV/nm01mBWXauiJO5eecrPxQt8827yhTO1ek58xGhKF2bkgfs+22zG2eSrd0RbMQCGdqgx+zamtFk2boiGV3Hp19Ev2YZx/3eTlVWyBmjjhFXlVTks/FyBWjfJisol2MHDGshNq5Gq2tMjBfE7AVgudrwB+rSSF2MHFs31rX+B6Khq2YPV/H/jRZjfs0ow73KZ+sKw4mju3vi7abXKOvVo4o9SHrpt40uBg5YlieDOafCqzesJz5duUf+zybgjjbuCJMqyrz9BT0/niov1jBnA3dsKwKSTNrSL27zQymW06jfV4uimqbPy3efF085E1b1NXizcJ77b9OF8vFfZGXW3UdaN+R5WJTHw6qkc/Db7/n6gY6ZdGb/LBaLO9WyyB97cX+58/Lu7MH/oD/A81gsbwDzgw0M2+xvPM4M08z8xfLO58z8zWzYLG8C5bB6nWiGQWaUbhY3oVLP3rt6VahZhUtlncRYxVpVvFieRczVrFmlSyWd8m4W4lmlC6Wdyn3iKk+rmqYgSUADAaQAlgGwWuIAt1SJwHUYANLA+g8gC+3qVMBatCB5Qx0PkANPASspc4JqMGHkLXUeQFFAESspc4NKBYgZi11gkARAQlrqXPkIUcsmZ7OkaeI8Fg2PSNRMFPYjPJ0jjxFhMcnlc6RJ+SLpxPkSRnj6fR4Us54OjmelDWeTo2nxt9jQ8jTqfHU+HtsCHk6Nb4af48NIV+nxgfhqX2dGN8Tnto3pjBfeGpfJ8UP+NnC10nx1dh7bIT7Oi2+Gn2PjXBfJ8ZX4++xEe7r1PhIDRvhvk6Nr8bfZyPc16kJ1Pj7bIQHOjWBYsBnIzzQyQkUBz4bQoFOT4BLDBtCgbHIKCJ8NoQCnaNAEeGzHAU6R0EkrFw6QUEsxGSg0xMkQkwGOjlBKsRkoFMTIjVsCIU6NSFSw4ZQqFMTetI6rBMT+sKzhDotYSA8S2gs/yGfX6HOSKhG3mcjPNRJCdXYB2yEhzotoRr9gI3wUCcmVOMfsBEe6tREavwDNsIjnZpIjX/ARnikUxMpBgI2wiOdnEhxELARHun0RLjWsCEU6QRFioiADaHI2KNh1rAcRTpHESYOy1GkcxQpIkKWo0jnKFJEhCxHkc5RrIgIWY5inaMYFx2Wo1jnKMb0YTmKdY5iRUTIchTrHMWKiJDlKNY5inFLwHIU6xzFioiQ5Sg29tKKiIjlKNY5inF6YzmKdY5iRUTEchTrHCWKiIjlKNE5ShQREctRonOU4NaA5SjROUpwkmM5SnSOEkVExHKU6BwlioiI5SjROUpw48ZylOgcJbh1YzlKjDOPIiJmOUp0jhJchFiOEp2jVBERsxylOkepIiJmOUp1jlJFRMxylOocpbiBYzlKdY5SXIpYjlKdo1QREbMcpTpHqSIi5g+IOkepIiJhOUp1jlI8mLIcpcbhVBGRsByl5vlUMZHwB7+VcUJdKS4S/ui3Ms6oK8VGwh/+VsYpdaX4SPjj38o4p65wv80fAFfGSXWFewf+CLgyzqorxUrCEtb/Rm0VL6lwqDfOqyvFTMpLKyvjxLpCUYE/2K8M3lA9SHneRsqC4ibleTO1BVQQUp43U11ADSHleTP1BVQRUp43U2FAHSHleTM1BlQSUp43U2XoZYYVT5wpNPRKw4pnztQaerFhxVNnyA3Q6w0rnjtDcQDUFWDFk+eZwhAqQyuePUN3AFQXYMXTZ0gPgBoDrHj+DAECUGiAFU+goUIAqg2w4hk0pAhAyQEEPc3QIwBVBwCeQUOSABQeQFLVDAZRewBBLjOECfB7YY9n0FAnAFUIEEQz31T3enmPZ9DQKQAFCRCkM0OtANQkQFDPDMECUJYAXkADQ7MAVCaA19DAkC0AxQngZTQwlAtAfQJ4JQ0M8QJQogBerQJDvwBUKYAXrMCQMCDo1VmeQUPFANQqgNeFIDAlWmSQl4bA0DIAFQvg1SEw5AxA3QJ4gQgMUQNQvABeIwJD2QBUMICXicCQNwBlDOCVIjA0DkAlA3ixCAyZA1DMAF4vAkPpAFQ0gJeMwJA7AGUN4FUjMDQPCHuVnWcwNHV2ZJAXZ8CQPwBFDuAFEDAUEECdA3gNBAwRBFDqAF4GAUMHAVQ7gFdCwJBCAAUP4MUQMNQQQM0DeD0EDEEEUPYAXhIBQxMBVD6AV0XAkEUAxQ/ghREwlBGI+lIJz2BkFkuQQV4eAUMfAVRBgFdIwJBIAIUQ4EUSMFQSQC0EeJ0EDKEEUA4BXioBQysBVESAV0vAkEsARRHgBRMwFBNAXQR4zQQM0QRQGgFeNgFDNwFUR4BXTsCQTiDu6108g7FZ8epLXjyDhoACKJMAL6GAoaEAKiXAqyhgyCiAYgnwQgoYSgqgXgK8lgKGmAIomQAvp4ChpwCqJsArKmBIKoDCCfCiChiqCqB2AryuAoawAiifAC+tgKGtACoowKsrYMgrkPR1S55BQ2EB1FGA11jAEFkApRTgZRYwdBZANQV4pQUMqQVQUAFebAFDbQHUVIDXW8AQXABlFeAlFzA0F0BlBXjVBQzZBVBcAV54AUN5AdRXgNdewBBfACUW4OUXMPQXSPviM8+gIcF4KLMAr8F4hgbjoc4CvAjjGSKMh0IL8CqMZ6gwHiotwMswniHDeCi1AK/DeIYO46HWArwQ4w1CDL73cv7OI77/cnd3+UbJ18Wfw0sxlzvzvy6CxZuv35YLb/g3iNS/366vxKj/UkgZ9U+u/knv5w/+YSj548dqh68vXlvyri150573+H3eq/fq6r2SvNWN+mt8H5E8f3h1jETc/lsHVy8gjw2p5NVfqv/Yv+hFICMC6UvO6pOiiNvVo6Hyrw2I/njTPgGNCWhww+l8cT5xJQ8biaT2l+ETr5R4SaG0ph6kh/EQisO/vj+EZDqElvQA6/7C/GubIYmLKJa8hjvwiRsQt0Ry6++1J14khCMpKtbDFfXZcEU9cSe0xlIQD5+IJKFIxtm76YVh1FJf4ip31xgZMmHEcMPpYXhJk7iSVIulVFv3fzpAvEi2xFK0r9XV8o94tTzxpAElRcxGXRU/ekgS8bEU8ZusWueb87d0i4rJUyDRBxI3G3KDPOkC4SaW0mdzvRH+6hkR0FgK+XFXScQD9GkG0nCjd4XvV9KMJ6ERSaGxoZ/1JfAkdUCKjU1/wRN5VNLpWErTzeWWeZPmiIDGUgJsLtfGE0eSqYnI6/kieOJHRigRR6htx5nqkSf1xPHBW6kIHEm4RHJSX9EcDQzJuUQKAuU4QiQpl0gpd/4YMmGfjCfcdhtvG+i+4VZfd/jnuI0+R0R0/yJlOnrj338QR5KfiZSfvWOuP2xM8jOR8nPw1CBjEgOJFO3K8Ut/JR/xJGOUSIGuPA/ni2eIL+EmlWJd+dbqT9LHT0tCPpVCHt2HPzUnriR801vhWw9/101cSQCnt4KiyXU/Er/prUBshz+nI64kktJbkdTm2XiU6Ep8K5paNdub6ZqQiEpvRRR6m5GckLBKb4VVd/3rDuJNQiu9FVrj/UBCs34lhlaeH4/4B8bEM6CeYlTl+bH98jwarZA6i3FVHEYDFVFHMaqUo564SUwdxbDCm6JHvaUnjZUUV/dFk6/7q5+Ja0pdpai6x5ucR4eUVNu6SEF1jxczj8I5pZuJlRRT/beWt/2XaWv8Kl5XN/iVTzK9kyDxxJbOtzaTLtANxUoKzJ02pZPty3D+GP71veH8MRxxQ4n83fVaZ9IVGufiNnCXM0diQoInhflO3e885o+mCIi+eGsz8aK5Ie7D2JU0pdkh7hzNnEppaohL/zjAaFaAlBXo9jz8YRJxpnkBUl7s1VcYyRaFPp6UDvix5a7eXj7HTKgk/r7U4X3+VA8f8iSHffKsoUTkPn+64GqwJAw8KQvQudlph3GPEOPfGCMmY0l/fXGk1IXR21zjRb1IQoiRXTtzPVBvlRBPaZrYt+X4OUkw+JJjgfdBG3sF9XYKAZUGtxgueaaOdEIQz+y9eqc50mQR+9ru86exYkSG1he72iou61NX3482Yz4Z4UDscvugvsWMshX2Yqu3QQYskCJ5aMNIP58MWSDNS4OrwbBPJU5pXrq6arHsk/kwkGanor9jmxJMJ19x4h5t09WLRsRPeszychk2daXzk3gOOruu+6utqT+NLU961DJ7rEaTsXoxifhKk1up7p7enO+epu50PvakuQa/rmzujkBTWDxpykDfkXoAmuYhbi56Z+OgC7pgIWXU8ElozZPGhjhWvd84jQnLwU3nyxo9Xv9AO277UjL3zRjrNWjd96XQHnzNQAEa374Y34OzAUwD3BcDXPmOlgdt4vTF4Fa+44MdaGK/uHb33szZDqhCC+Ja2vuPjytAN4EgLqi9O3e+A6odgbjG9Q2oKxvGPaCxLq4e2AATbZ4m7sjRdjBAaaCJq4VyG4+4R+NMXC7K/iZf6kdjTFwrylo7NtDRFTwYWQXoBgvEteUwXNJLHWk4ipPAAa/05As6QDc9INb5+iZG0UC3Eur1tFvOY2UG6EYCAikae/fjcHEVdaexGEix2Luz2Uh3Euq1tpsNcGoL+NoMLnLet4D3rTC9oBEaShHat8HqLkCXAhAPpH0LvfZi7l99GoFiSe0wXNQ6HgYah2Kx91BU3aa/epX60gAMxQBUl6k2tfHgAY2/UIy/y/2o1JXGXijFXoX3nY5O1OotPOIthV6F15hSNxpwkRRwdbkt8WpS6kkDTayo1P2Fo9SPBpdY1Ea/LV4hSn1pWInV6bFYC7TADGKFuXc0I5FWmEEsMTOTCS0yg1hlPmZlzmoWQMvDINaH0X+UwrRGDGKRWPnyCUyrxSCWi5U/n760XAxivfiId1k+4l2W1JmGlljHPWZNm483oYRpcQJFV/MQR9gSkx4dm9267dTMqdUXCVli3h/VhZpHvFCTPi7NCLH2fMR7MqmbJvpIyTDabtLCM4iV5yPeakndaBaIZecjXlM5mo1pvRjEgjGzoNJyMYj1Yi0AyGBiL5cLb/jXHyrHwfDihriyNf3NlFx/aFqJRV0zGWgpF8RarqEMaMcRaciUJNDV+/xp9BIQXU3ExaTZrR+LDuWQsbRH96niOayp2+fRWxFAS9Ag1qAbdZXlKFZoGRrEOnSLV1MyyHTUxLIyc46iVWUQy8qtukCSQdW0Lymn2B0frfGCWORt86ztr3mkrjSrxDJvO9zdSJU6mlVilbcdLmSkjjT8xSovd06kRV4Qq7z8lpYWeUGs8vLHS1rhBbHE21bGsZBWd0Es70r7Z1rgBbHCyx9naZEXxCpvZwg+sfbKnxRFXW5oTLSyC2JptztfAkg8aVUXxLIuTk2jJZpuVcWdajdcCkgxafSJxWAU0Zn1mQSRuM/l90K0igxiGXlcQgZaQ/bEGvJjf5sf9aN1EbGCPD4D0OKxJxaP0a/tL92jzhF1loKWkVBoAdkTC8i94zhXaAnZ40vIn5eLY3HMlSKyeHP3+du3/wddiLOQJ6MAAA=="; \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css new file mode 100644 index 0000000..778b949 --- /dev/null +++ b/docs/assets/style.css @@ -0,0 +1,1412 @@ +:root { + /* Light */ + --light-color-background: #f2f4f8; + --light-color-background-secondary: #eff0f1; + --light-color-warning-text: #222; + --light-color-background-warning: #e6e600; + --light-color-icon-background: var(--light-color-background); + --light-color-accent: #c5c7c9; + --light-color-active-menu-item: var(--light-color-accent); + --light-color-text: #222; + --light-color-text-aside: #6e6e6e; + --light-color-link: #1f70c2; + + --light-color-ts-keyword: #056bd6; + --light-color-ts-project: #b111c9; + --light-color-ts-module: var(--light-color-ts-project); + --light-color-ts-namespace: var(--light-color-ts-project); + --light-color-ts-enum: #7e6f15; + --light-color-ts-enum-member: var(--light-color-ts-enum); + --light-color-ts-variable: #4760ec; + --light-color-ts-function: #572be7; + --light-color-ts-class: #1f70c2; + --light-color-ts-interface: #108024; + --light-color-ts-constructor: var(--light-color-ts-class); + --light-color-ts-property: var(--light-color-ts-variable); + --light-color-ts-method: var(--light-color-ts-function); + --light-color-ts-call-signature: var(--light-color-ts-method); + --light-color-ts-index-signature: var(--light-color-ts-property); + --light-color-ts-constructor-signature: var(--light-color-ts-constructor); + --light-color-ts-parameter: var(--light-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --light-color-ts-type-parameter: #a55c0e; + --light-color-ts-accessor: var(--light-color-ts-property); + --light-color-ts-get-signature: var(--light-color-ts-accessor); + --light-color-ts-set-signature: var(--light-color-ts-accessor); + --light-color-ts-type-alias: #d51270; + /* reference not included as links will be colored with the kind that it points to */ + + --light-external-icon: url("data:image/svg+xml;utf8,"); + --light-color-scheme: light; + + /* Dark */ + --dark-color-background: #2b2e33; + --dark-color-background-secondary: #1e2024; + --dark-color-background-warning: #bebe00; + --dark-color-warning-text: #222; + --dark-color-icon-background: var(--dark-color-background-secondary); + --dark-color-accent: #9096a2; + --dark-color-active-menu-item: #5d5d6a; + --dark-color-text: #f5f5f5; + --dark-color-text-aside: #dddddd; + --dark-color-link: #00aff4; + + --dark-color-ts-keyword: #3399ff; + --dark-color-ts-project: #e358ff; + --dark-color-ts-module: var(--dark-color-ts-project); + --dark-color-ts-namespace: var(--dark-color-ts-project); + --dark-color-ts-enum: #f4d93e; + --dark-color-ts-enum-member: var(--dark-color-ts-enum); + --dark-color-ts-variable: #798dff; + --dark-color-ts-function: #a280ff; + --dark-color-ts-class: #8ac4ff; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-constructor: var(--dark-color-ts-class); + --dark-color-ts-property: var(--dark-color-ts-variable); + --dark-color-ts-method: var(--dark-color-ts-function); + --dark-color-ts-call-signature: var(--dark-color-ts-method); + --dark-color-ts-index-signature: var(--dark-color-ts-property); + --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); + --dark-color-ts-parameter: var(--dark-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --dark-color-ts-type-parameter: #e07d13; + --dark-color-ts-accessor: var(--dark-color-ts-property); + --dark-color-ts-get-signature: var(--dark-color-ts-accessor); + --dark-color-ts-set-signature: var(--dark-color-ts-accessor); + --dark-color-ts-type-alias: #ff6492; + /* reference not included as links will be colored with the kind that it points to */ + + --dark-external-icon: url("data:image/svg+xml;utf8,"); + --dark-color-scheme: dark; +} + +@media (prefers-color-scheme: light) { + :root { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-icon-background: var(--light-color-icon-background); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + --color-link: var(--light-color-link); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-icon-background: var(--dark-color-icon-background); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + --color-link: var(--dark-color-link); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } +} + +html { + color-scheme: var(--color-scheme); +} + +body { + margin: 0; +} + +:root[data-theme="light"] { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-icon-background: var(--light-color-icon-background); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + --color-link: var(--light-color-link); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); +} + +:root[data-theme="dark"] { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-icon-background: var(--dark-color-icon-background); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + --color-link: var(--dark-color-link); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); +} + +.always-visible, +.always-visible .tsd-signatures { + display: inherit !important; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + line-height: 1.2; +} + +h1 > a:not(.link), +h2 > a:not(.link), +h3 > a:not(.link), +h4 > a:not(.link), +h5 > a:not(.link), +h6 > a:not(.link) { + text-decoration: none; + color: var(--color-text); +} + +h1 { + font-size: 1.875rem; + margin: 0.67rem 0; +} + +h2 { + font-size: 1.5rem; + margin: 0.83rem 0; +} + +h3 { + font-size: 1.25rem; + margin: 1rem 0; +} + +h4 { + font-size: 1.05rem; + margin: 1.33rem 0; +} + +h5 { + font-size: 1rem; + margin: 1.5rem 0; +} + +h6 { + font-size: 0.875rem; + margin: 2.33rem 0; +} + +.uppercase { + text-transform: uppercase; +} + +dl, +menu, +ol, +ul { + margin: 1em 0; +} + +dd { + margin: 0 0 0 40px; +} + +.container { + max-width: 1700px; + padding: 0 2rem; +} + +/* Footer */ +footer { + border-top: 1px solid var(--color-accent); + padding-top: 1rem; + padding-bottom: 1rem; + max-height: 3.5rem; +} +.tsd-generator { + margin: 0 1em; +} + +.container-main { + margin: 0 auto; + /* toolbar, footer, margin */ + min-height: calc(100vh - 41px - 56px - 4rem); +} + +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes fade-out { + from { + opacity: 1; + visibility: visible; + } + to { + opacity: 0; + } +} +@keyframes fade-in-delayed { + 0% { + opacity: 0; + } + 33% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fade-out-delayed { + 0% { + opacity: 1; + visibility: visible; + } + 66% { + opacity: 0; + } + 100% { + opacity: 0; + } +} +@keyframes pop-in-from-right { + from { + transform: translate(100%, 0); + } + to { + transform: translate(0, 0); + } +} +@keyframes pop-out-to-right { + from { + transform: translate(0, 0); + visibility: visible; + } + to { + transform: translate(100%, 0); + } +} +body { + background: var(--color-background); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; + font-size: 16px; + color: var(--color-text); +} + +a { + color: var(--color-link); + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +a.external[target="_blank"] { + background-image: var(--external-icon); + background-position: top 3px right; + background-repeat: no-repeat; + padding-right: 13px; +} + +code, +pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 0.875rem; + border-radius: 0.8em; +} + +pre { + position: relative; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; + padding: 10px; + border: 1px solid var(--color-accent); +} +pre code { + padding: 0; + font-size: 100%; +} +pre > button { + position: absolute; + top: 10px; + right: 10px; + opacity: 0; + transition: opacity 0.1s; + box-sizing: border-box; +} +pre:hover > button, +pre > button.visible { + opacity: 1; +} + +blockquote { + margin: 1em 0; + padding-left: 1em; + border-left: 4px solid gray; +} + +.tsd-typography { + line-height: 1.333em; +} +.tsd-typography ul { + list-style: square; + padding: 0 0 0 20px; + margin: 0; +} +.tsd-typography .tsd-index-panel h3, +.tsd-index-panel .tsd-typography h3, +.tsd-typography h4, +.tsd-typography h5, +.tsd-typography h6 { + font-size: 1em; +} +.tsd-typography h5, +.tsd-typography h6 { + font-weight: normal; +} +.tsd-typography p, +.tsd-typography ul, +.tsd-typography ol { + margin: 1em 0; +} +.tsd-typography table { + border-collapse: collapse; + border: none; +} +.tsd-typography td, +.tsd-typography th { + padding: 6px 13px; + border: 1px solid var(--color-accent); +} +.tsd-typography thead, +.tsd-typography tr:nth-child(even) { + background-color: var(--color-background-secondary); +} + +.tsd-breadcrumb { + margin: 0; + padding: 0; + color: var(--color-text-aside); +} +.tsd-breadcrumb a { + color: var(--color-text-aside); + text-decoration: none; +} +.tsd-breadcrumb a:hover { + text-decoration: underline; +} +.tsd-breadcrumb li { + display: inline; +} +.tsd-breadcrumb li:after { + content: " / "; +} + +.tsd-comment-tags { + display: flex; + flex-direction: column; +} +dl.tsd-comment-tag-group { + display: flex; + align-items: center; + overflow: hidden; + margin: 0.5em 0; +} +dl.tsd-comment-tag-group dt { + display: flex; + margin-right: 0.5em; + font-size: 0.875em; + font-weight: normal; +} +dl.tsd-comment-tag-group dd { + margin: 0; +} +code.tsd-tag { + padding: 0.25em 0.4em; + border: 0.1em solid var(--color-accent); + margin-right: 0.25em; + font-size: 70%; +} +h1 code.tsd-tag:first-of-type { + margin-left: 0.25em; +} + +dl.tsd-comment-tag-group dd:before, +dl.tsd-comment-tag-group dd:after { + content: " "; +} +dl.tsd-comment-tag-group dd pre, +dl.tsd-comment-tag-group dd:after { + clear: both; +} +dl.tsd-comment-tag-group p { + margin: 0; +} + +.tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; +} +.tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; +} + +.tsd-filter-visibility h4 { + font-size: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.5rem; + margin: 0; +} +.tsd-filter-item:not(:last-child) { + margin-bottom: 0.5rem; +} +.tsd-filter-input { + display: flex; + width: fit-content; + width: -moz-fit-content; + align-items: center; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + cursor: pointer; +} +.tsd-filter-input input[type="checkbox"] { + cursor: pointer; + position: absolute; + width: 1.5em; + height: 1.5em; + opacity: 0; +} +.tsd-filter-input input[type="checkbox"]:disabled { + pointer-events: none; +} +.tsd-filter-input svg { + cursor: pointer; + width: 1.5em; + height: 1.5em; + margin-right: 0.5em; + border-radius: 0.33em; + /* Leaving this at full opacity breaks event listeners on Firefox. + Don't remove unless you know what you're doing. */ + opacity: 0.99; +} +.tsd-filter-input input[type="checkbox"]:focus + svg { + transform: scale(0.95); +} +.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { + transform: scale(1); +} +.tsd-checkbox-background { + fill: var(--color-accent); +} +input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { + stroke: var(--color-text); +} +.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { + fill: var(--color-background); + stroke: var(--color-accent); + stroke-width: 0.25rem; +} +.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { + stroke: var(--color-accent); +} + +.tsd-theme-toggle { + padding-top: 0.75rem; +} +.tsd-theme-toggle > h4 { + display: inline; + vertical-align: middle; + margin-right: 0.75rem; +} + +.tsd-hierarchy { + list-style: square; + margin: 0; +} +.tsd-hierarchy .target { + font-weight: bold; +} + +.tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); +} +.tsd-full-hierarchy, +.tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; +} +.tsd-full-hierarchy ul { + padding-left: 1.5rem; +} +.tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); +} + +.tsd-panel-group.tsd-index-group { + margin-bottom: 0; +} +.tsd-index-panel .tsd-index-list { + list-style: none; + line-height: 1.333em; + margin: 0; + padding: 0.25rem 0 0 0; + overflow: hidden; + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 1rem; + grid-template-rows: auto; +} +@media (max-width: 1024px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(2, 1fr); + } +} +@media (max-width: 768px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(1, 1fr); + } +} +.tsd-index-panel .tsd-index-list li { + -webkit-page-break-inside: avoid; + -moz-page-break-inside: avoid; + -ms-page-break-inside: avoid; + -o-page-break-inside: avoid; + page-break-inside: avoid; +} + +.tsd-flag { + display: inline-block; + padding: 0.25em 0.4em; + border-radius: 4px; + color: var(--color-comment-tag-text); + background-color: var(--color-comment-tag); + text-indent: 0; + font-size: 75%; + line-height: 1; + font-weight: normal; +} + +.tsd-anchor { + position: relative; + top: -100px; +} + +.tsd-member { + position: relative; +} +.tsd-member .tsd-anchor + h3 { + display: flex; + align-items: center; + margin-top: 0; + margin-bottom: 0; + border-bottom: none; +} + +.tsd-navigation.settings { + margin: 1rem 0; +} +.tsd-navigation > a, +.tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.25rem); + display: flex; + align-items: center; +} +.tsd-navigation a, +.tsd-navigation summary > span, +.tsd-page-navigation a { + display: flex; + width: calc(100% - 0.25rem); + align-items: center; + padding: 0.25rem; + color: var(--color-text); + text-decoration: none; + box-sizing: border-box; +} +.tsd-navigation a.current, +.tsd-page-navigation a.current { + background: var(--color-active-menu-item); +} +.tsd-navigation a:hover, +.tsd-page-navigation a:hover { + text-decoration: underline; +} +.tsd-navigation ul, +.tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; + padding: 0; + list-style: none; +} +.tsd-navigation li, +.tsd-page-navigation li { + padding: 0; + max-width: 100%; +} +.tsd-nested-navigation { + margin-left: 3rem; +} +.tsd-nested-navigation > li > details { + margin-left: -1.5rem; +} +.tsd-small-nested-navigation { + margin-left: 1.5rem; +} +.tsd-small-nested-navigation > li > details { + margin-left: -1.5rem; +} + +.tsd-page-navigation ul { + padding-left: 1.75rem; +} + +#tsd-sidebar-links a { + margin-top: 0; + margin-bottom: 0.5rem; + line-height: 1.25rem; +} +#tsd-sidebar-links a:last-of-type { + margin-bottom: 0; +} + +a.tsd-index-link { + padding: 0.25rem 0 !important; + font-size: 1rem; + line-height: 1.25rem; + display: inline-flex; + align-items: center; + color: var(--color-text); +} +.tsd-accordion-summary { + list-style-type: none; /* hide marker on non-safari */ + outline: none; /* broken on safari, so just hide it */ +} +.tsd-accordion-summary::-webkit-details-marker { + display: none; /* hide marker on safari */ +} +.tsd-accordion-summary, +.tsd-accordion-summary a { + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + + cursor: pointer; +} +.tsd-accordion-summary a { + width: calc(100% - 1.5rem); +} +.tsd-accordion-summary > * { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} +.tsd-index-accordion .tsd-accordion-summary > svg { + margin-left: 0.25rem; +} +.tsd-index-content > :not(:first-child) { + margin-top: 0.75rem; +} +.tsd-index-heading { + margin-top: 1.5rem; + margin-bottom: 0.75rem; +} + +.tsd-kind-icon { + margin-right: 0.5rem; + width: 1.25rem; + height: 1.25rem; + min-width: 1.25rem; + min-height: 1.25rem; +} +.tsd-kind-icon path { + transform-origin: center; + transform: scale(1.1); +} +.tsd-signature > .tsd-kind-icon { + margin-right: 0.8rem; +} + +.tsd-panel { + margin-bottom: 2.5rem; +} +.tsd-panel.tsd-member { + margin-bottom: 4rem; +} +.tsd-panel:empty { + display: none; +} +.tsd-panel > h1, +.tsd-panel > h2, +.tsd-panel > h3 { + margin: 1.5rem -1.5rem 0.75rem -1.5rem; + padding: 0 1.5rem 0.75rem 1.5rem; +} +.tsd-panel > h1.tsd-before-signature, +.tsd-panel > h2.tsd-before-signature, +.tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: none; +} + +.tsd-panel-group { + margin: 4rem 0; +} +.tsd-panel-group.tsd-index-group { + margin: 2rem 0; +} +.tsd-panel-group.tsd-index-group details { + margin: 2rem 0; +} + +#tsd-search { + transition: background-color 0.2s; +} +#tsd-search .title { + position: relative; + z-index: 2; +} +#tsd-search .field { + position: absolute; + left: 0; + top: 0; + right: 2.5rem; + height: 100%; +} +#tsd-search .field input { + box-sizing: border-box; + position: relative; + top: -50px; + z-index: 1; + width: 100%; + padding: 0 10px; + opacity: 0; + outline: 0; + border: 0; + background: transparent; + color: var(--color-text); +} +#tsd-search .field label { + position: absolute; + overflow: hidden; + right: -40px; +} +#tsd-search .field input, +#tsd-search .title, +#tsd-toolbar-links a { + transition: opacity 0.2s; +} +#tsd-search .results { + position: absolute; + visibility: hidden; + top: 40px; + width: 100%; + margin: 0; + padding: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); +} +#tsd-search .results li { + background-color: var(--color-background); + line-height: initial; + padding: 4px; +} +#tsd-search .results li:nth-child(even) { + background-color: var(--color-background-secondary); +} +#tsd-search .results li.state { + display: none; +} +#tsd-search .results li.current:not(.no-results), +#tsd-search .results li:hover:not(.no-results) { + background-color: var(--color-accent); +} +#tsd-search .results a { + display: flex; + align-items: center; + padding: 0.25rem; + box-sizing: border-box; +} +#tsd-search .results a:before { + top: 10px; +} +#tsd-search .results span.parent { + color: var(--color-text-aside); + font-weight: normal; +} +#tsd-search.has-focus { + background-color: var(--color-accent); +} +#tsd-search.has-focus .field input { + top: 0; + opacity: 1; +} +#tsd-search.has-focus .title, +#tsd-search.has-focus #tsd-toolbar-links a { + z-index: 0; + opacity: 0; +} +#tsd-search.has-focus .results { + visibility: visible; +} +#tsd-search.loading .results li.state.loading { + display: block; +} +#tsd-search.failure .results li.state.failure { + display: block; +} + +#tsd-toolbar-links { + position: absolute; + top: 0; + right: 2rem; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-end; +} +#tsd-toolbar-links a { + margin-left: 1.5rem; +} +#tsd-toolbar-links a:hover { + text-decoration: underline; +} + +.tsd-signature { + margin: 0 0 1rem 0; + padding: 1rem 0.5rem; + border: 1px solid var(--color-accent); + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; +} + +.tsd-signature-keyword { + color: var(--color-ts-keyword); + font-weight: normal; +} + +.tsd-signature-symbol { + color: var(--color-text-aside); + font-weight: normal; +} + +.tsd-signature-type { + font-style: italic; + font-weight: normal; +} + +.tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + list-style-type: none; +} +.tsd-signatures .tsd-signature { + margin: 0; + border-color: var(--color-accent); + border-width: 1px 0; + transition: background-color 0.1s; +} +.tsd-description .tsd-signatures .tsd-signature { + border-width: 1px; +} + +ul.tsd-parameter-list, +ul.tsd-type-parameter-list { + list-style: square; + margin: 0; + padding-left: 20px; +} +ul.tsd-parameter-list > li.tsd-parameter-signature, +ul.tsd-type-parameter-list > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; +} +ul.tsd-parameter-list h5, +ul.tsd-type-parameter-list h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; +} +.tsd-sources { + margin-top: 1rem; + font-size: 0.875em; +} +.tsd-sources a { + color: var(--color-text-aside); + text-decoration: underline; +} +.tsd-sources ul { + list-style: none; + padding: 0; +} + +.tsd-page-toolbar { + position: sticky; + z-index: 1; + top: 0; + left: 0; + width: 100%; + color: var(--color-text); + background: var(--color-background-secondary); + border-bottom: 1px var(--color-accent) solid; + transition: transform 0.3s ease-in-out; +} +.tsd-page-toolbar a { + color: var(--color-text); + text-decoration: none; +} +.tsd-page-toolbar a.title { + font-weight: bold; +} +.tsd-page-toolbar a.title:hover { + text-decoration: underline; +} +.tsd-page-toolbar .tsd-toolbar-contents { + display: flex; + justify-content: space-between; + height: 2.5rem; + margin: 0 auto; +} +.tsd-page-toolbar .table-cell { + position: relative; + white-space: nowrap; + line-height: 40px; +} +.tsd-page-toolbar .table-cell:first-child { + width: 100%; +} +.tsd-page-toolbar .tsd-toolbar-icon { + box-sizing: border-box; + line-height: 0; + padding: 12px 0; +} + +.tsd-widget { + display: inline-block; + overflow: hidden; + opacity: 0.8; + height: 40px; + transition: + opacity 0.1s, + background-color 0.2s; + vertical-align: bottom; + cursor: pointer; +} +.tsd-widget:hover { + opacity: 0.9; +} +.tsd-widget.active { + opacity: 1; + background-color: var(--color-accent); +} +.tsd-widget.no-caption { + width: 40px; +} +.tsd-widget.no-caption:before { + margin: 0; +} + +.tsd-widget.options, +.tsd-widget.menu { + display: none; +} +input[type="checkbox"] + .tsd-widget:before { + background-position: -120px 0; +} +input[type="checkbox"]:checked + .tsd-widget:before { + background-position: -160px 0; +} + +img { + max-width: 100%; +} + +.tsd-anchor-icon { + display: inline-flex; + align-items: center; + margin-left: 0.5rem; + vertical-align: middle; + color: var(--color-text); +} + +.tsd-anchor-icon svg { + width: 1em; + height: 1em; + visibility: hidden; +} + +.tsd-anchor-link:hover > .tsd-anchor-icon svg { + visibility: visible; +} + +.deprecated { + text-decoration: line-through !important; +} + +.warning { + padding: 1rem; + color: var(--color-warning-text); + background: var(--color-background-warning); +} + +.tsd-kind-project { + color: var(--color-ts-project); +} +.tsd-kind-module { + color: var(--color-ts-module); +} +.tsd-kind-namespace { + color: var(--color-ts-namespace); +} +.tsd-kind-enum { + color: var(--color-ts-enum); +} +.tsd-kind-enum-member { + color: var(--color-ts-enum-member); +} +.tsd-kind-variable { + color: var(--color-ts-variable); +} +.tsd-kind-function { + color: var(--color-ts-function); +} +.tsd-kind-class { + color: var(--color-ts-class); +} +.tsd-kind-interface { + color: var(--color-ts-interface); +} +.tsd-kind-constructor { + color: var(--color-ts-constructor); +} +.tsd-kind-property { + color: var(--color-ts-property); +} +.tsd-kind-method { + color: var(--color-ts-method); +} +.tsd-kind-call-signature { + color: var(--color-ts-call-signature); +} +.tsd-kind-index-signature { + color: var(--color-ts-index-signature); +} +.tsd-kind-constructor-signature { + color: var(--color-ts-constructor-signature); +} +.tsd-kind-parameter { + color: var(--color-ts-parameter); +} +.tsd-kind-type-literal { + color: var(--color-ts-type-literal); +} +.tsd-kind-type-parameter { + color: var(--color-ts-type-parameter); +} +.tsd-kind-accessor { + color: var(--color-ts-accessor); +} +.tsd-kind-get-signature { + color: var(--color-ts-get-signature); +} +.tsd-kind-set-signature { + color: var(--color-ts-set-signature); +} +.tsd-kind-type-alias { + color: var(--color-ts-type-alias); +} + +/* if we have a kind icon, don't color the text by kind */ +.tsd-kind-icon ~ span { + color: var(--color-text); +} + +* { + scrollbar-width: thin; + scrollbar-color: var(--color-accent) var(--color-icon-background); +} + +*::-webkit-scrollbar { + width: 0.75rem; +} + +*::-webkit-scrollbar-track { + background: var(--color-icon-background); +} + +*::-webkit-scrollbar-thumb { + background-color: var(--color-accent); + border-radius: 999rem; + border: 0.25rem solid var(--color-icon-background); +} + +/* mobile */ +@media (max-width: 769px) { + .tsd-widget.options, + .tsd-widget.menu { + display: inline-block; + } + + .container-main { + display: flex; + } + html .col-content { + float: none; + max-width: 100%; + width: 100%; + } + html .col-sidebar { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + width: 75vw; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-sidebar > *:last-child { + padding-bottom: 20px; + } + html .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu .col-sidebar { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu .col-sidebar { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu .col-sidebar { + visibility: visible; + transform: translate(0, 0); + display: flex; + flex-direction: column; + gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } +} + +/* one sidebar */ +@media (min-width: 770px) { + .container-main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); + grid-template-areas: "sidebar content"; + margin: 2rem auto; + } + + .col-sidebar { + grid-area: sidebar; + } + .col-content { + grid-area: content; + padding: 0 1rem; + } +} +@media (min-width: 770px) and (max-width: 1399px) { + .col-sidebar { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + padding-top: 1rem; + } + .site-menu { + margin-top: 1rem; + } +} + +/* two sidebars */ +@media (min-width: 1200px) { + .container-main { + grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); + grid-template-areas: "sidebar content toc"; + } + + .col-sidebar { + display: contents; + } + + .page-menu { + grid-area: toc; + padding-left: 1rem; + } + .site-menu { + grid-area: sidebar; + } + + .site-menu { + margin-top: 1rem 0; + } + + .page-menu, + .site-menu { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + } +} diff --git a/docs/classes/Color.html b/docs/classes/Color.html new file mode 100644 index 0000000..e01d476 --- /dev/null +++ b/docs/classes/Color.html @@ -0,0 +1,11 @@ +Color | @devlander/colors

Constructors

Properties

Methods

Constructors

  • Parameters

    • color: string | HexDecimalObject

    Returns Color

Properties

color: HexDecimalObject

Methods

  • Parameters

    • factor: number

    Returns HexDecimalObject

  • Parameters

    • factor: number
    • secondaryColor: HexDecimalObject

    Returns Color

  • Parameters

    • factor: number

    Returns Color

  • Returns HexDecimalObject

  • Returns string

  • Returns string

  • Parameters

    • factor: number

    Returns Color

  • Returns string

\ No newline at end of file diff --git a/docs/enums/ColorNames.html b/docs/enums/ColorNames.html new file mode 100644 index 0000000..1bdee1c --- /dev/null +++ b/docs/enums/ColorNames.html @@ -0,0 +1,145 @@ +ColorNames | @devlander/colors

Enumeration ColorNames

Enumeration Members

AliceBlue +AntiqueWhite +Aqua +Aquamarine +Azure +Beige +Bisque +Black +BlanchedAlmond +Blue +BlueViolet +Brown +BurlyWood +CadetBlue +Chartreuse +Chocolate +Coral +CornflowerBlue +Cornsilk +Crimson +Cyan +DarkBlue +DarkCyan +DarkGoldenRod +DarkGray +DarkGreen +DarkGrey +DarkKhaki +DarkMagenta +DarkOliveGreen +DarkOrange +DarkOrchid +DarkRed +DarkSalmon +DarkSeaGreen +DarkSlateBlue +DarkSlateGray +DarkTurquoise +DarkViolet +DeepPink +DeepSkyBlue +DimGray +DimGrey +DodgerBlue +FireBrick +FloralWhite +ForestGreen +Fuchsia +Gainsboro +GhostWhite +Gold +GoldenRod +Gray +Green +GreenYellow +HoneyDew +HotPink +IndianRed +Indigo +Ivory +Khaki +Lavender +LavenderBlush +LawnGreen +LemonChiffon +LightBlue +LightCoral +LightCyan +LightGoldenRodYellow +LightGray +LightGreen +LightGrey +LightPink +LightSalmon +LightSeaGreen +LightSkyBlue +LightSlateGray +LightSteelBlue +LightYellow +Lime +LimeGreen +Linen +Magenta +Maroon +MediumAquaMarine +MediumBlue +MediumOrchid +MediumPurple +MediumSeaGreen +MediumSlateBlue +MediumSpringGreen +MediumTurquoise +MediumVioletRed +MidnightBlue +MintCream +MistyRose +Moccasin +NavajoWhite +Navy +OldLace +Olive +OliveDrab +Orange +OrangeRed +Orchid +PaleGoldenRod +PaleGreen +PaleTurquoise +PaleVioletRed +PapayaWhip +PeachPuff +Peru +Pink +Plum +PowderBlue +Purple +RebeccaPurple +Red +RosyBrown +RoyalBlue +SaddleBrown +Salmon +SandyBrown +SeaGreen +SeaShell +Sienna +Silver +SkyBlue +SlateBlue +SlateGray +Snow +SpringGreen +SteelBlue +Tan +Teal +Thistle +Tomato +Turquoise +Violet +Wheat +White +WhiteSmoke +Yellow +YellowGreen +

Enumeration Members

AliceBlue: "aliceblue"
AntiqueWhite: "antiquewhite"
Aqua: "aqua"
Aquamarine: "aquamarine"
Azure: "azure"
Beige: "beige"
Bisque: "bisque"
Black: "black"
BlanchedAlmond: "blanchedalmond"
Blue: "blue"
BlueViolet: "blueviolet"
Brown: "brown"
BurlyWood: "burlywood"
CadetBlue: "cadetblue"
Chartreuse: "chartreuse"
Chocolate: "chocolate"
Coral: "coral"
CornflowerBlue: "cornflowerblue"
Cornsilk: "cornsilk"
Crimson: "crimson"
Cyan: "cyan"
DarkBlue: "darkblue"
DarkCyan: "darkcyan"
DarkGoldenRod: "darkgoldenrod"
DarkGray: "darkgray"
DarkGreen: "darkgreen"
DarkGrey: "darkgrey"
DarkKhaki: "darkkhaki"
DarkMagenta: "darkmagenta"
DarkOliveGreen: "darkolivegreen"
DarkOrange: "darkorange"
DarkOrchid: "darkorchid"
DarkRed: "darkred"
DarkSalmon: "darksalmon"
DarkSeaGreen: "darkseagreen"
DarkSlateBlue: "darkslateblue"
DarkSlateGray: "darkslategray"
DarkTurquoise: "darkturquoise"
DarkViolet: "darkviolet"
DeepPink: "deeppink"
DeepSkyBlue: "deepskyblue"
DimGray: "dimgray"
DimGrey: "dimgrey"
DodgerBlue: "dodgerblue"
FireBrick: "firebrick"
FloralWhite: "floralwhite"
ForestGreen: "forestgreen"
Fuchsia: "fuchsia"
Gainsboro: "gainsboro"
GhostWhite: "ghostwhite"
Gold: "gold"
GoldenRod: "goldenrod"
Gray: "gray"
Green: "green"
GreenYellow: "greenyellow"
HoneyDew: "honeydew"
HotPink: "hotpink"
IndianRed: "indianred"
Indigo: "indigo"
Ivory: "ivory"
Khaki: "khaki"
Lavender: "lavender"
LavenderBlush: "lavenderblush"
LawnGreen: "lawngreen"
LemonChiffon: "lemonchiffon"
LightBlue: "lightblue"
LightCoral: "lightcoral"
LightCyan: "lightcyan"
LightGoldenRodYellow: "lightgoldenrodyellow"
LightGray: "lightgray"
LightGreen: "lightgreen"
LightGrey: "lightgrey"
LightPink: "lightpink"
LightSalmon: "lightsalmon"
LightSeaGreen: "lightseagreen"
LightSkyBlue: "lightskyblue"
LightSlateGray: "lightslategray"
LightSteelBlue: "lightsteelblue"
LightYellow: "lightyellow"
Lime: "lime"
LimeGreen: "limegreen"
Linen: "linen"
Magenta: "magenta"
Maroon: "maroon"
MediumAquaMarine: "mediumaquamarine"
MediumBlue: "mediumblue"
MediumOrchid: "mediumorchid"
MediumPurple: "mediumpurple"
MediumSeaGreen: "mediumseagreen"
MediumSlateBlue: "mediumslateblue"
MediumSpringGreen: "mediumspringgreen"
MediumTurquoise: "mediumturquoise"
MediumVioletRed: "mediumvioletred"
MidnightBlue: "midnightblue"
MintCream: "mintcream"
MistyRose: "mistyrose"
Moccasin: "moccasin"
NavajoWhite: "navajowhite"
Navy: "navy"
OldLace: "oldlace"
Olive: "olive"
OliveDrab: "olivedrab"
Orange: "orange"
OrangeRed: "orangered"
Orchid: "orchid"
PaleGoldenRod: "palegoldenrod"
PaleGreen: "palegreen"
PaleTurquoise: "paleturquoise"
PaleVioletRed: "palevioletred"
PapayaWhip: "papayawhip"
PeachPuff: "peachpuff"
Peru: "peru"
Pink: "pink"
Plum: "plum"
PowderBlue: "powderblue"
Purple: "purple"
RebeccaPurple: "rebeccapurple"
Red: "red"
RosyBrown: "rosybrown"
RoyalBlue: "royalblue"
SaddleBrown: "saddlebrown"
Salmon: "salmon"
SandyBrown: "sandybrown"
SeaGreen: "seagreen"
SeaShell: "seashell"
Sienna: "sienna"
Silver: "silver"
SkyBlue: "skyblue"
SlateBlue: "slateblue"
SlateGray: "slategray"
Snow: "snow"
SpringGreen: "springgreen"
SteelBlue: "steelblue"
Tan: "tan"
Teal: "teal"
Thistle: "thistle"
Tomato: "tomato"
Turquoise: "turquoise"
Violet: "violet"
Wheat: "wheat"
White: "white"
WhiteSmoke: "whitesmoke"
Yellow: "yellow"
YellowGreen: "yellowgreen"
\ No newline at end of file diff --git a/docs/functions/RGBAToHexAlpha.html b/docs/functions/RGBAToHexAlpha.html new file mode 100644 index 0000000..5950b4b --- /dev/null +++ b/docs/functions/RGBAToHexAlpha.html @@ -0,0 +1,8 @@ +RGBAToHexAlpha | @devlander/colors

Function RGBAToHexAlpha

  • Converts an RGBA or RGB string to a hexadecimal color value with optional alpha channel.

    +

    Parameters

    • rgba: string

      The RGBA or RGB string to convert.

      +
    • forceRemoveAlpha: boolean = false

      Whether to remove the alpha channel from the resulting hexadecimal color value. Default is false.

      +

    Returns string

    The hexadecimal color value.

    +

    Throws

    Error if the input RGBA/RGB string is invalid.

    +

    Example

    console.log(RGBAToHexAlpha('rgba(255, 0, 0, 1)')); // Output: '#ff0000ff'
    console.log(RGBAToHexAlpha('rgb(255, 0, 0)')); // Output: '#ff0000'
    console.log(RGBAToHexAlpha('rgba(255, 0, 0, 0.5)'));// Output: '#ff000080'
    console.log(RGBAToHexAlpha('rgba(255, 0, 0, 0.5)', true)); // Output: '#ff0000' +
    +
\ No newline at end of file diff --git a/docs/functions/adjustColor.html b/docs/functions/adjustColor.html new file mode 100644 index 0000000..9b4c10b --- /dev/null +++ b/docs/functions/adjustColor.html @@ -0,0 +1 @@ +adjustColor | @devlander/colors

Function adjustColor

  • Parameters

    • colorValue: string
    • alphaValue: AlphaValue
    • mode: ThemeType
    • Optional cssColorNames: string[]

    Returns string

\ No newline at end of file diff --git a/docs/functions/applyAlphaToColor.html b/docs/functions/applyAlphaToColor.html new file mode 100644 index 0000000..a6ca416 --- /dev/null +++ b/docs/functions/applyAlphaToColor.html @@ -0,0 +1 @@ +applyAlphaToColor | @devlander/colors

Function applyAlphaToColor

  • Parameters

    • color: {
          a?: number;
          b: number;
          g: number;
          r: number;
      }
      • Optional a?: number
      • b: number
      • g: number
      • r: number
    • alphaValue: number

    Returns {
        a: number;
        b: number;
        g: number;
        r: number;
    }

    • a: number
    • b: number
    • g: number
    • r: number
\ No newline at end of file diff --git a/docs/functions/blendColors.html b/docs/functions/blendColors.html new file mode 100644 index 0000000..75a005a --- /dev/null +++ b/docs/functions/blendColors.html @@ -0,0 +1 @@ +blendColors | @devlander/colors

Function blendColors

  • Parameters

    • color1: HexDecimalObject
    • color2: {
          b: number;
          g: number;
          r: number;
      }
      • b: number
      • g: number
      • r: number
    • alphaScale: number

    Returns HexDecimalObject

\ No newline at end of file diff --git a/docs/functions/canBeConvertedIntoColor.html b/docs/functions/canBeConvertedIntoColor.html new file mode 100644 index 0000000..beabc0f --- /dev/null +++ b/docs/functions/canBeConvertedIntoColor.html @@ -0,0 +1 @@ +canBeConvertedIntoColor | @devlander/colors

Function canBeConvertedIntoColor

  • Parameters

    • colorValue: string
    • cssColorNames: string[] = ...

    Returns boolean

\ No newline at end of file diff --git a/docs/functions/darkenColor.html b/docs/functions/darkenColor.html new file mode 100644 index 0000000..5741145 --- /dev/null +++ b/docs/functions/darkenColor.html @@ -0,0 +1,7 @@ +darkenColor | @devlander/colors

Function darkenColor

  • Darkens an RGB color by a given factor.

    +

    Parameters

    • color: {
          b: number;
          g: number;
          r: number;
      }

      An object containing r, g, and b values.

      +
      • b: number
      • g: number
      • r: number
    • factor: number

      The factor by which to darken the color. The value should be between 0 and 1.

      +

    Returns {
        b: number;
        g: number;
        r: number;
    }

    An object containing the darkened r, g, and b values.

    +
    • b: number
    • g: number
    • r: number

    Example

    // Darken a light red color by 10%
    console.log(darkenColor({ r: 255, g: 100, b: 100 }, 0.1)); // { r: 230, g: 90, b: 90 }

    // Darken a green color by 20%
    console.log(darkenColor({ r: 0, g: 200, b: 0 }, 0.2)); // { r: 0, g: 160, b: 0 }

    // Darken a blue color by 30%
    console.log(darkenColor({ r: 0, g: 0, b: 255 }, 0.3)); // { r: 0, g: 0, b: 178 }

    // Darken a nearly black color by 10%
    console.log(darkenColor({ r: 10, g: 10, b: 10 }, 0.1)); // { r: 9, g: 9, b: 9 }

    // Darken a medium gray color by 50%
    console.log(darkenColor({ r: 128, g: 128, b: 128 }, 0.5)); // { r: 64, g: 64, b: 64 } +
    +
\ No newline at end of file diff --git a/docs/functions/formatDecimalObjectToRgba.html b/docs/functions/formatDecimalObjectToRgba.html new file mode 100644 index 0000000..049e399 --- /dev/null +++ b/docs/functions/formatDecimalObjectToRgba.html @@ -0,0 +1,11 @@ +formatDecimalObjectToRgba | @devlander/colors

Function formatDecimalObjectToRgba

  • Formats a HexDecimalObject to an RGBA string.

    +

    Parameters

    • decimalObject: HexDecimalObject

      The object containing the red, green, blue, and optionally alpha components.

      +
    • Optional parameterA: string

      Optional alpha parameter as a string. If provided and numeric, it overrides the alpha value in the object.

      +

    Returns string

    The formatted RGBA string.

    +

    Example

    // Returns 'rgba(255, 255, 255, 0.5)'
    formatDecimalObjectToRgba({ r: 255, g: 255, b: 255, a: 1 }, '0.5'); +
    +

    Example

    // Returns 'rgb(255, 255, 255)'
    formatDecimalObjectToRgba({ r: 255, g: 255, b: 255 }); +
    +

    Example

    // Returns 'rgba(255, 99, 71, 0.6)' (alpha rounded to one decimal place)
    formatDecimalObjectToRgba({ r: 255, g: 99, b: 71, a: 0.645343434232323 }); +
    +
\ No newline at end of file diff --git a/docs/functions/hexToDecimal.html b/docs/functions/hexToDecimal.html new file mode 100644 index 0000000..56da033 --- /dev/null +++ b/docs/functions/hexToDecimal.html @@ -0,0 +1,6 @@ +hexToDecimal | @devlander/colors

Function hexToDecimal

  • Converts a hexadecimal string to a decimal number.

    +

    Parameters

    • hex: string

      The hexadecimal string to convert.

      +

    Returns number

    The decimal number.

    +

    Example

    console.log(hexToDecimal('ff')); // 255
    console.log(hexToDecimal('0a')); // 10 +
    +
\ No newline at end of file diff --git a/docs/functions/hexToRgb.html b/docs/functions/hexToRgb.html new file mode 100644 index 0000000..0449d4f --- /dev/null +++ b/docs/functions/hexToRgb.html @@ -0,0 +1,6 @@ +hexToRgb | @devlander/colors

Function hexToRgb

  • Converts a hexadecimal color code to an RGB or RGBA color string.

    +

    Parameters

    • hex: string

      The hexadecimal color code to convert.

      +

    Returns string

    The RGB or RGBA color string.

    +

    Example

    console.log(hexToRgb('#ff0000')); // 'rgb(255, 0, 0)'
    console.log(hexToRgb('#ff000080')); // 'rgba(255, 0, 0, 0.5)' +
    +
\ No newline at end of file diff --git a/docs/functions/hexToRgba.html b/docs/functions/hexToRgba.html new file mode 100644 index 0000000..b3eaf55 --- /dev/null +++ b/docs/functions/hexToRgba.html @@ -0,0 +1,5 @@ +hexToRgba | @devlander/colors

Function hexToRgba

  • Converts a CSS hex color value to an RGB or RGBA color value.

    +

    Parameters

    • hex: string

      The hex value to convert. ('123456', '#123456', '123', '#123')

      +
    • alpha: string | number = 1

      An optional alpha value to apply. ('0.5', '0.25', 0.5, 0.25)

      +

    Returns string

    An RGB or RGBA color value. ('rgb(11, 22, 33)', 'rgba(11, 22, 33, 0.5)')

    +
\ No newline at end of file diff --git a/docs/functions/hexesToDecimals.html b/docs/functions/hexesToDecimals.html new file mode 100644 index 0000000..8fddbbf --- /dev/null +++ b/docs/functions/hexesToDecimals.html @@ -0,0 +1,7 @@ +hexesToDecimals | @devlander/colors

Function hexesToDecimals

  • Converts a HexObject or hex string to a HexDecimalObject by converting each hex value to its decimal equivalent. +If the alpha (a) value is not provided, it defaults to 1.

    +

    Parameters

    • params: ParamsForHexesToDecimals

      The object containing hex values for r, g, b, and optionally a, or a hex string.

      +

    Returns HexDecimalObject

    An object containing decimal values for r, g, b, and optionally a.

    +

    Example

    const hexObj = { r: 'ff', g: '00', b: '00', a: '80' };
    console.log(hexesToDecimals(hexObj)); // { r: 255, g: 0, b: 0, a: 0.5 }

    const hexString = '#ff000080';
    console.log(hexesToDecimals(hexString)); // { r: 255, g: 0, b: 0, a: 0.5 }

    const shortHexString = '#f008';
    console.log(hexesToDecimals(shortHexString)); // { r: 255, g: 0, b: 0, a: 0.53 } +
    +
\ No newline at end of file diff --git a/docs/functions/hslToRgb.html b/docs/functions/hslToRgb.html new file mode 100644 index 0000000..769e04d --- /dev/null +++ b/docs/functions/hslToRgb.html @@ -0,0 +1,6 @@ +hslToRgb | @devlander/colors

Function hslToRgb

  • Converts HSL (Hue, Saturation, Lightness) color values to RGB (Red, Green, Blue) color values.

    +

    Parameters

    • h: number

      The hue value (0-360).

      +
    • s: number

      The saturation value (0-100).

      +
    • l: number

      The lightness value (0-100).

      +

    Returns [number, number, number]

    An array containing the RGB color values.

    +
\ No newline at end of file diff --git a/docs/functions/isHexColor.html b/docs/functions/isHexColor.html new file mode 100644 index 0000000..c96bfe3 --- /dev/null +++ b/docs/functions/isHexColor.html @@ -0,0 +1,8 @@ +isHexColor | @devlander/colors

Function isHexColor

  • Validates whether a given string is a valid hexadecimal color code. +The function ensures that the input string matches the format of either +a 3, 4, 6, or 8-digit hexadecimal number, optionally prefixed with a #.

    +

    Parameters

    • hex: string

      The input string to be validated as a hexadecimal color code.

      +

    Returns boolean

    true if the input string is a valid hexadecimal color code, otherwise false.

    +

    Example

    console.log(isHexColor('#ff0000')); // true
    console.log(isHexColor('#FFF')); // true
    console.log(isHexColor('#12345678')); // true
    console.log(isHexColor('ff0000')); // true
    console.log(isHexColor('#12345')); // false
    console.log(isHexColor('#gggggg')); // false
    console.log(isHexColor(null)); // false
    console.log(isHexColor(123 as any)); // false +
    +
\ No newline at end of file diff --git a/docs/functions/isRgbaOutOfRange.html b/docs/functions/isRgbaOutOfRange.html new file mode 100644 index 0000000..81766de --- /dev/null +++ b/docs/functions/isRgbaOutOfRange.html @@ -0,0 +1,6 @@ +isRgbaOutOfRange | @devlander/colors

Function isRgbaOutOfRange

  • Checks if the RGBA value is out of range.

    +

    Parameters

    • rgba: HexDecimalObject

      The RGBA object to validate.

      +

    Returns boolean

      +
    • True if the value is out of range, false otherwise.
    • +
    +
\ No newline at end of file diff --git a/docs/functions/isValidAlphaHexCode.html b/docs/functions/isValidAlphaHexCode.html new file mode 100644 index 0000000..e26f70e --- /dev/null +++ b/docs/functions/isValidAlphaHexCode.html @@ -0,0 +1,6 @@ +isValidAlphaHexCode | @devlander/colors

Function isValidAlphaHexCode

  • Checks if a hex code is a valid alpha hex code.

    +

    Parameters

    • hexCode: string

      The hex code to validate.

      +

    Returns boolean

      +
    • True if the hex code is valid, false otherwise.
    • +
    +
\ No newline at end of file diff --git a/docs/functions/isValidHex.html b/docs/functions/isValidHex.html new file mode 100644 index 0000000..601e4ac --- /dev/null +++ b/docs/functions/isValidHex.html @@ -0,0 +1,11 @@ +isValidHex | @devlander/colors

Function isValidHex

  • Validates whether a given string is a valid hexadecimal color code. +The function ensures that the input string matches the format of either +a 3, 6, or 8-digit hexadecimal number, optionally prefixed with a #.

    +

    Parameters

    • hex: string

      The input string to be validated as a hexadecimal color code.

      +

    Returns boolean

    true if the input string is a valid hexadecimal color code, otherwise false.

    +

    Example

    console.log(isValidHex('#ff0000')); // true
    console.log(isValidHex('ff0000')); // true
    console.log(isValidHex('#FFF')); // true
    console.log(isValidHex('FFF')); // true
    console.log(isValidHex('#12345678')); // true
    console.log(isValidHex('12345678')); // true
    console.log(isValidHex('#12345')); // false
    console.log(isValidHex('#gggggg')); // false
    console.log(isValidHex(null)); // false
    console.log(isValidHex(123 as any)); // false +
    +

    Remarks

    The isValidHex function is used in various scenarios where hexadecimal color validation is needed, +such as in functions like hexToBinary and hexToRgba. It ensures that only valid hexadecimal +color codes are processed, preventing errors and unexpected behavior.

    +
\ No newline at end of file diff --git a/docs/functions/isValidRgb.html b/docs/functions/isValidRgb.html new file mode 100644 index 0000000..bfce1fa --- /dev/null +++ b/docs/functions/isValidRgb.html @@ -0,0 +1,4 @@ +isValidRgb | @devlander/colors

Function isValidRgb

  • Checks if the provided string is a valid RGB color format.

    +

    Parameters

    • rgb: string

      The string to validate as RGB (e.g., "rgb(255, 0, 128)").

      +

    Returns boolean

    True if the string is a valid RGB format, false otherwise.

    +
\ No newline at end of file diff --git a/docs/functions/isValidRgba.html b/docs/functions/isValidRgba.html new file mode 100644 index 0000000..65887c4 --- /dev/null +++ b/docs/functions/isValidRgba.html @@ -0,0 +1 @@ +isValidRgba | @devlander/colors

Function isValidRgba

  • Parameters

    • rgba: string

    Returns boolean

\ No newline at end of file diff --git a/docs/functions/lightenColor.html b/docs/functions/lightenColor.html new file mode 100644 index 0000000..79be84b --- /dev/null +++ b/docs/functions/lightenColor.html @@ -0,0 +1,7 @@ +lightenColor | @devlander/colors

Function lightenColor

  • Lightens an RGB color by a given factor.

    +

    Parameters

    • color: {
          b: number;
          g: number;
          r: number;
      }

      An object containing r, g, and b values.

      +
      • b: number
      • g: number
      • r: number
    • factor: number

      The factor by which to lighten the color. The value should be between 0 and 1.

      +

    Returns {
        b: number;
        g: number;
        r: number;
    }

    An object containing the lightened r, g, and b values.

    +
    • b: number
    • g: number
    • r: number

    Example

    // Lighten a dark red color by 10%
    console.log(lightenColor({ r: 100, g: 0, b: 0 }, 0.1)); // { r: 115, g: 0, b: 0 }

    // Lighten a green color by 20%
    console.log(lightenColor({ r: 0, g: 100, b: 0 }, 0.2)); // { r: 0, g: 120, b: 0 }

    // Lighten a blue color by 30%
    console.log(lightenColor({ r: 0, g: 0, b: 100 }, 0.3)); // { r: 0, g: 0, b: 130 }

    // Lighten a nearly white color by 10%
    console.log(lightenColor({ r: 245, g: 245, b: 245 }, 0.1)); // { r: 255, g: 255, b: 255 }

    // Lighten a medium gray color by 50%
    console.log(lightenColor({ r: 128, g: 128, b: 128 }, 0.5)); // { r: 192, g: 192, b: 192 } +
    +
\ No newline at end of file diff --git a/docs/functions/log.html b/docs/functions/log.html new file mode 100644 index 0000000..001225a --- /dev/null +++ b/docs/functions/log.html @@ -0,0 +1 @@ +log | @devlander/colors
  • Parameters

    • message: string

    Returns void

\ No newline at end of file diff --git a/docs/functions/parseColor.html b/docs/functions/parseColor.html new file mode 100644 index 0000000..c0cb49a --- /dev/null +++ b/docs/functions/parseColor.html @@ -0,0 +1,5 @@ +parseColor | @devlander/colors

Function parseColor

  • Parses a color value into a HexDecimalObject representing RGB(A) values.

    +

    Parameters

    • colorValue: string

      The color value to parse (e.g., hex, rgb, rgba string).

      +

    Returns HexDecimalObject

    A HexDecimalObject representing the parsed RGB(A) values.

    +

    Throws

    Error if the color value is invalid or cannot be converted.

    +
\ No newline at end of file diff --git a/docs/functions/parseHex.html b/docs/functions/parseHex.html new file mode 100644 index 0000000..0bd26e1 --- /dev/null +++ b/docs/functions/parseHex.html @@ -0,0 +1 @@ +parseHex | @devlander/colors

Function parseHex

  • Parameters

    • hexString: string

    Returns HexObject

\ No newline at end of file diff --git a/docs/functions/parseRgbString.html b/docs/functions/parseRgbString.html new file mode 100644 index 0000000..7970741 --- /dev/null +++ b/docs/functions/parseRgbString.html @@ -0,0 +1,4 @@ +parseRgbString | @devlander/colors

Function parseRgbString

  • Parses an RGB or RGBA string and returns an object with the red, green, blue, and optionally alpha components.

    +

    Parameters

    • color: string

      The RGB or RGBA string to parse (e.g., "rgb(255, 255, 255)" or "rgba(255, 255, 255, 0.5)").

      +

    Returns null | HexDecimalObject

    The RGB components or null if the input is invalid.

    +
\ No newline at end of file diff --git a/docs/functions/toHexColor.html b/docs/functions/toHexColor.html new file mode 100644 index 0000000..edf96d2 --- /dev/null +++ b/docs/functions/toHexColor.html @@ -0,0 +1 @@ +toHexColor | @devlander/colors

Function toHexColor

  • Parameters

    • color: {
          b: number;
          g: number;
          r: number;
      }
      • b: number
      • g: number
      • r: number

    Returns string

\ No newline at end of file diff --git a/docs/functions/toRgbString.html b/docs/functions/toRgbString.html new file mode 100644 index 0000000..a98f327 --- /dev/null +++ b/docs/functions/toRgbString.html @@ -0,0 +1,4 @@ +toRgbString | @devlander/colors

Function toRgbString

  • Converts a HexDecimalObject to an RGB or RGBA string.

    +

    Parameters

    • color: HexDecimalObject

      The color object to convert.

      +

    Returns string

    The RGB or RGBA string.

    +
\ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..a46d606 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,54 @@ +@devlander/colors

@devlander/colors

Colors


+Devlander Colors Npm Package + + +
+ + +
+ + +
+ + + Join Devlander on Discord + + +
+ + + npm downloads + +
+ + + Join the discussion on Github + +
+ + + Join Devlander on Twitch + +
+ + + Follow Landon Johnson On Twitter + +
+ + +

wakatime +

+
+ +

In house colors package used across project

+
    +
  • Discord: Join the Devlander community here.
  • +
  • npm downloads: Get our package @devlander/colors.
  • +
  • GitHub Discussions: Engage in discussions and get support here.
  • +
  • Twitch: Catch our live coding sessions here.
  • +
  • Twitter: Follow Landon Johnson @landonwjohnson.
  • +
  • Wakatime stats: Track our progress here.
  • +
+

Engage and Contribute

We welcome contributions, feedback, and suggestions! Join our discussions on GitHub, or connect with us on Discord and Twitter. Your input helps us improve the Devlander Colors Package for the developer community.

+

Become a Sponsor!

\ No newline at end of file diff --git a/docs/interfaces/AdjustColorFunc.html b/docs/interfaces/AdjustColorFunc.html new file mode 100644 index 0000000..dcb0a17 --- /dev/null +++ b/docs/interfaces/AdjustColorFunc.html @@ -0,0 +1 @@ +AdjustColorFunc | @devlander/colors

Interface AdjustColorFunc

interface AdjustColorFunc ((colorValue, alphaValue, mode, cssColorNames?) => string)
  • Parameters

    • colorValue: string
    • alphaValue: AlphaValue
    • mode: ThemeType
    • Optional cssColorNames: string[]

    Returns string

\ No newline at end of file diff --git a/docs/interfaces/HexObject.html b/docs/interfaces/HexObject.html new file mode 100644 index 0000000..c9e2ebb --- /dev/null +++ b/docs/interfaces/HexObject.html @@ -0,0 +1,5 @@ +HexObject | @devlander/colors

Interface HexObject

interface HexObject {
    a: string;
    b: string;
    g: string;
    r: string;
}

Properties

a +b +g +r +

Properties

a: string
b: string
g: string
r: string
\ No newline at end of file diff --git a/docs/interfaces/RgbWithAHexObject.html b/docs/interfaces/RgbWithAHexObject.html new file mode 100644 index 0000000..e0f948a --- /dev/null +++ b/docs/interfaces/RgbWithAHexObject.html @@ -0,0 +1,5 @@ +RgbWithAHexObject | @devlander/colors

Interface RgbWithAHexObject

interface RgbWithAHexObject {
    a?: string;
    b: string;
    g: string;
    r: string;
}

Hierarchy

Properties

a? +b +g +r +

Properties

a?: string
b: string
g: string
r: string
\ No newline at end of file diff --git a/docs/modules.html b/docs/modules.html new file mode 100644 index 0000000..114b8ae --- /dev/null +++ b/docs/modules.html @@ -0,0 +1,32 @@ +@devlander/colors
\ No newline at end of file diff --git a/docs/variables/cssColors.html b/docs/variables/cssColors.html new file mode 100644 index 0000000..be3f697 --- /dev/null +++ b/docs/variables/cssColors.html @@ -0,0 +1 @@ +cssColors | @devlander/colors

Variable cssColorsConst

cssColors: Record<ColorNames, ColorItem> = ...
\ No newline at end of file diff --git a/package.json b/package.json index dc1cfe9..be67149 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,8 @@ { "name": "@devlander/colors", "description": "Color utility package used between packages", - "version": "0.0.1", + "version": "0.0.3", "browser": "dist/umd/index.js", - "private": true, "main": "dist/cjs/index.js", "types": "typings/index.d.ts", "module": "dist/esm/index.js", @@ -11,7 +10,6 @@ "scripts": { "prebuild": "yarn cache clean --force", "build:index": "node ./external-modules/auto-export.js", - "increment-version": "yarn version patch", "build:esm": "tsc", "test": "jest", "test:failed": "jest --onlyFailures", @@ -23,7 +21,7 @@ "timeout": "delay 5", "docs": "typedoc --out ./docs ./src", "push-main": "git add -A && yarn run timeout && git commit -m 'updated build' && yarn run timeout && git push origin main", - "start-publish": "yarn run lint && yarn run build && yarn run increment-version && npm publish", + "start-publish": "yarn run lint && yarn run build && npm publish", "prepare": "yarn run build" }, "repository": { diff --git a/src/__tests__/adjustColor.test.ts b/src/__tests__/adjustColor.test.ts index 0617cf1..c317b72 100644 --- a/src/__tests__/adjustColor.test.ts +++ b/src/__tests__/adjustColor.test.ts @@ -1,47 +1,49 @@ import { adjustColor } from "../adjustColor"; import { AlphaValue } from "../types/alpha-value.type"; -describe('adjustColor', () => { - it('should return the input color if it is a valid CSS color name', () => { - const result = adjustColor('transparent', 0.5 as AlphaValue, 'light'); - expect(result).toBe('transparent'); +describe("adjustColor", () => { + it("should return the input color if it is a valid CSS color name", () => { + const result = adjustColor("transparent", 0.5 as AlphaValue, "light"); + expect(result).toBe("transparent"); }); - it('should return default color if alphaValue is out of range', () => { - const result = adjustColor('#FFFFFF', -1 as AlphaValue, 'light'); - expect(result).toBe('#FF0000'); + it("should return default color if alphaValue is out of range", () => { + const result = adjustColor("#FFFFFF", -1 as AlphaValue, "light"); + expect(result).toBe("#FF0000"); }); - it('should lighten the color in light mode', () => { - const result = adjustColor('#000000', 0.5 as AlphaValue, 'light'); + it("should lighten the color in light mode", () => { + const result = adjustColor("#000000", 0.5 as AlphaValue, "light"); expect(result).toMatch(/^#[0-9A-F]{6}$/i); // Regex to match hex color }); - it('should darken the color in dark mode', () => { - const result = adjustColor('#FFFFFF', 0.5 as AlphaValue, 'dark'); + it("should darken the color in dark mode", () => { + const result = adjustColor("#FFFFFF", 0.5 as AlphaValue, "dark"); expect(result).toMatch(/^#[0-9A-F]{6}$/i); // Regex to match hex color }); - it('should return default color for invalid color format', () => { - const result = adjustColor('invalidColor', 0.5 as AlphaValue, 'light'); - expect(result).toBe('#FF0000'); + it("should return default color for invalid color format", () => { + const result = adjustColor("invalidColor", 0.5 as AlphaValue, "light"); + expect(result).toBe("#FF0000"); }); - it('should apply alpha to RGB color', () => { - const result = adjustColor('rgb(0, 0, 0)', 0.5 as AlphaValue, 'light'); + it("should apply alpha to RGB color", () => { + const result = adjustColor("rgb(0, 0, 0)", 0.5 as AlphaValue, "light"); expect(result).toMatch(/^rgba\(\d{1,3}, \d{1,3}, \d{1,3}, 0(\.\d+)?\)$/i); // Regex to match RGBA color }); - it('should apply alpha to RGBA color', () => { - const result = adjustColor('rgba(0, 0, 0, 1)', 0.5 as AlphaValue, 'light'); + it("should apply alpha to RGBA color", () => { + const result = adjustColor("rgba(0, 0, 0, 1)", 0.5 as AlphaValue, "light"); expect(result).toMatch(/^rgba\(\d{1,3}, \d{1,3}, \d{1,3}, 0(\.\d+)?\)$/i); // Regex to match RGBA color }); - it('should handle exceptions and return default color', () => { - jest.spyOn(console, 'log').mockImplementation(() => {}); // Mock console.log - const result = adjustColor('#12345G', 0.5 as AlphaValue, 'light'); - expect(result).toBe('#FF0000'); - expect(console.log).toHaveBeenCalledWith(expect.stringContaining('Error adjusting color with value')); + it("should handle exceptions and return default color", () => { + jest.spyOn(console, "log").mockImplementation(() => {}); // Mock console.log + const result = adjustColor("#12345G", 0.5 as AlphaValue, "light"); + expect(result).toBe("#FF0000"); + expect(console.log).toHaveBeenCalledWith( + expect.stringContaining("Error adjusting color with value"), + ); (console.log as jest.Mock).mockRestore(); }); }); diff --git a/src/__tests__/applyAlphaToColor.test.ts b/src/__tests__/applyAlphaToColor.test.ts index bd29b00..7c66e9c 100644 --- a/src/__tests__/applyAlphaToColor.test.ts +++ b/src/__tests__/applyAlphaToColor.test.ts @@ -1,21 +1,60 @@ import { applyAlphaToColor } from "../applyAlphaToColor"; -describe('applyAlphaToColor', () => { - test('adds alpha value to RGB color object', () => { - expect(applyAlphaToColor({ r: 255, g: 0, b: 0 }, 0.5)).toEqual({ r: 255, g: 0, b: 0, a: 0.5 }); - expect(applyAlphaToColor({ r: 0, g: 255, b: 0 }, 0.75)).toEqual({ r: 0, g: 255, b: 0, a: 0.75 }); - expect(applyAlphaToColor({ r: 0, g: 0, b: 255 }, 1)).toEqual({ r: 0, g: 0, b: 255, a: 1 }); - }); - - test('replaces existing alpha value with new alpha value', () => { - expect(applyAlphaToColor({ r: 255, g: 0, b: 0, a: 0.3 }, 0.8)).toEqual({ r: 255, g: 0, b: 0, a: 0.8 }); - expect(applyAlphaToColor({ r: 0, g: 255, b: 0, a: 0.4 }, 0.9)).toEqual({ r: 0, g: 255, b: 0, a: 0.9 }); - }); - - test('handles edge cases for alpha value', () => { - expect(applyAlphaToColor({ r: 128, g: 128, b: 128 }, 0)).toEqual({ r: 128, g: 128, b: 128, a: 0 }); - expect(applyAlphaToColor({ r: 128, g: 128, b: 128 }, 1)).toEqual({ r: 128, g: 128, b: 128, a: 1 }); - expect(applyAlphaToColor({ r: 128, g: 128, b: 128 }, 0.1)).toEqual({ r: 128, g: 128, b: 128, a: 0.1 }); +describe("applyAlphaToColor", () => { + test("adds alpha value to RGB color object", () => { + expect(applyAlphaToColor({ r: 255, g: 0, b: 0 }, 0.5)).toEqual({ + r: 255, + g: 0, + b: 0, + a: 0.5, + }); + expect(applyAlphaToColor({ r: 0, g: 255, b: 0 }, 0.75)).toEqual({ + r: 0, + g: 255, + b: 0, + a: 0.75, + }); + expect(applyAlphaToColor({ r: 0, g: 0, b: 255 }, 1)).toEqual({ + r: 0, + g: 0, + b: 255, + a: 1, + }); + }); + + test("replaces existing alpha value with new alpha value", () => { + expect(applyAlphaToColor({ r: 255, g: 0, b: 0, a: 0.3 }, 0.8)).toEqual({ + r: 255, + g: 0, + b: 0, + a: 0.8, + }); + expect(applyAlphaToColor({ r: 0, g: 255, b: 0, a: 0.4 }, 0.9)).toEqual({ + r: 0, + g: 255, + b: 0, + a: 0.9, + }); + }); + + test("handles edge cases for alpha value", () => { + expect(applyAlphaToColor({ r: 128, g: 128, b: 128 }, 0)).toEqual({ + r: 128, + g: 128, + b: 128, + a: 0, + }); + expect(applyAlphaToColor({ r: 128, g: 128, b: 128 }, 1)).toEqual({ + r: 128, + g: 128, + b: 128, + a: 1, + }); + expect(applyAlphaToColor({ r: 128, g: 128, b: 128 }, 0.1)).toEqual({ + r: 128, + g: 128, + b: 128, + a: 0.1, }); }); - \ No newline at end of file +}); diff --git a/src/__tests__/blendColors.test.ts b/src/__tests__/blendColors.test.ts index 1feee37..5554867 100644 --- a/src/__tests__/blendColors.test.ts +++ b/src/__tests__/blendColors.test.ts @@ -1,20 +1,33 @@ import { blendColors } from "../blendColors"; -describe('blendColors', () => { - test('blends two colors based on the given alpha scale', () => { - expect(blendColors({ r: 255, g: 0, b: 0 }, { r: 0, g: 0, b: 255 }, 0.5)).toEqual({ r: 128, g: 0, b: 128 }); - expect(blendColors({ r: 0, g: 255, b: 0 }, { r: 255, g: 0, b: 0 }, 0.75)).toEqual({ r: 64, g: 191, b: 0 }); - expect(blendColors({ r: 0, g: 0, b: 255 }, { r: 255, g: 255, b: 0 }, 0.25)).toEqual({ r: 191, g: 191, b: 64 }); - }); - - test('handles alpha scale of 0 and 1', () => { - expect(blendColors({ r: 255, g: 0, b: 0 }, { r: 0, g: 0, b: 255 }, 0)).toEqual({ r: 0, g: 0, b: 255 }); - expect(blendColors({ r: 255, g: 0, b: 0 }, { r: 0, g: 0, b: 255 }, 1)).toEqual({ r: 255, g: 0, b: 0 }); - }); - - test('handles edge cases for alpha scale', () => { - expect(blendColors({ r: 128, g: 128, b: 128 }, { r: 0, g: 0, b: 0 }, 0.5)).toEqual({ r: 64, g: 64, b: 64 }); - expect(blendColors({ r: 128, g: 128, b: 128 }, { r: 255, g: 255, b: 255 }, 0.5)).toEqual({ r: 192, g: 192, b: 192 }); - }); +describe("blendColors", () => { + test("blends two colors based on the given alpha scale", () => { + expect( + blendColors({ r: 255, g: 0, b: 0 }, { r: 0, g: 0, b: 255 }, 0.5), + ).toEqual({ r: 128, g: 0, b: 128 }); + expect( + blendColors({ r: 0, g: 255, b: 0 }, { r: 255, g: 0, b: 0 }, 0.75), + ).toEqual({ r: 64, g: 191, b: 0 }); + expect( + blendColors({ r: 0, g: 0, b: 255 }, { r: 255, g: 255, b: 0 }, 0.25), + ).toEqual({ r: 191, g: 191, b: 64 }); }); - \ No newline at end of file + + test("handles alpha scale of 0 and 1", () => { + expect( + blendColors({ r: 255, g: 0, b: 0 }, { r: 0, g: 0, b: 255 }, 0), + ).toEqual({ r: 0, g: 0, b: 255 }); + expect( + blendColors({ r: 255, g: 0, b: 0 }, { r: 0, g: 0, b: 255 }, 1), + ).toEqual({ r: 255, g: 0, b: 0 }); + }); + + test("handles edge cases for alpha scale", () => { + expect( + blendColors({ r: 128, g: 128, b: 128 }, { r: 0, g: 0, b: 0 }, 0.5), + ).toEqual({ r: 64, g: 64, b: 64 }); + expect( + blendColors({ r: 128, g: 128, b: 128 }, { r: 255, g: 255, b: 255 }, 0.5), + ).toEqual({ r: 192, g: 192, b: 192 }); + }); +}); diff --git a/src/__tests__/canBeConvertedToColor.test.ts b/src/__tests__/canBeConvertedToColor.test.ts index 1c81d8d..feb5958 100644 --- a/src/__tests__/canBeConvertedToColor.test.ts +++ b/src/__tests__/canBeConvertedToColor.test.ts @@ -1,39 +1,41 @@ import { canBeConvertedIntoColor } from "../canBeConvertedToColor"; -describe('canBeConvertedIntoColor', () => { - test('should return true for valid CSS color names', () => { - expect(canBeConvertedIntoColor('transparent')).toBe(true); - expect(canBeConvertedIntoColor('blue', ['blue', 'transparent'])).toBe(true); +describe("canBeConvertedIntoColor", () => { + test("should return true for valid CSS color names", () => { + expect(canBeConvertedIntoColor("transparent")).toBe(true); + expect(canBeConvertedIntoColor("blue", ["blue", "transparent"])).toBe(true); }); - test('should return true for valid hex colors', () => { - expect(canBeConvertedIntoColor('#000')).toBe(true); - expect(canBeConvertedIntoColor('#000000')).toBe(true); - expect(canBeConvertedIntoColor('#ABC')).toBe(true); - expect(canBeConvertedIntoColor('#ABCDEF')).toBe(true); + test("should return true for valid hex colors", () => { + expect(canBeConvertedIntoColor("#000")).toBe(true); + expect(canBeConvertedIntoColor("#000000")).toBe(true); + expect(canBeConvertedIntoColor("#ABC")).toBe(true); + expect(canBeConvertedIntoColor("#ABCDEF")).toBe(true); }); - test('should return true for valid rgb colors', () => { - expect(canBeConvertedIntoColor('rgb(255, 255, 255)')).toBe(true); - expect(canBeConvertedIntoColor('rgb(0, 0, 0)')).toBe(true); - expect(canBeConvertedIntoColor('rgb(123, 45, 67)')).toBe(true); + test("should return true for valid rgb colors", () => { + expect(canBeConvertedIntoColor("rgb(255, 255, 255)")).toBe(true); + expect(canBeConvertedIntoColor("rgb(0, 0, 0)")).toBe(true); + expect(canBeConvertedIntoColor("rgb(123, 45, 67)")).toBe(true); }); - test('should return true for valid rgba colors', () => { - expect(canBeConvertedIntoColor('rgba(255, 255, 255, 1)')).toBe(true); - expect(canBeConvertedIntoColor('rgba(0, 0, 0, 0)')).toBe(true); - expect(canBeConvertedIntoColor('rgba(123, 45, 67, 0.5)')).toBe(true); + test("should return true for valid rgba colors", () => { + expect(canBeConvertedIntoColor("rgba(255, 255, 255, 1)")).toBe(true); + expect(canBeConvertedIntoColor("rgba(0, 0, 0, 0)")).toBe(true); + expect(canBeConvertedIntoColor("rgba(123, 45, 67, 0.5)")).toBe(true); }); - test('should return false for invalid colors', () => { - expect(canBeConvertedIntoColor('notacolor')).toBe(false); - expect(canBeConvertedIntoColor('#12345')).toBe(false); - expect(canBeConvertedIntoColor('rgb(256, 0, 0)')).toBe(false); - expect(canBeConvertedIntoColor('rgba(255, 255, 255, 1.5)')).toBe(false); + test("should return false for invalid colors", () => { + expect(canBeConvertedIntoColor("notacolor")).toBe(false); + expect(canBeConvertedIntoColor("#12345")).toBe(false); + expect(canBeConvertedIntoColor("rgb(256, 0, 0)")).toBe(false); + expect(canBeConvertedIntoColor("rgba(255, 255, 255, 1.5)")).toBe(false); }); - test('should handle custom CSS color names', () => { - expect(canBeConvertedIntoColor('customColor', ['customColor'])).toBe(true); - expect(canBeConvertedIntoColor('anotherColor', ['anotherColor', 'customColor'])).toBe(true); + test("should handle custom CSS color names", () => { + expect(canBeConvertedIntoColor("customColor", ["customColor"])).toBe(true); + expect( + canBeConvertedIntoColor("anotherColor", ["anotherColor", "customColor"]), + ).toBe(true); }); }); diff --git a/src/__tests__/color.test.ts b/src/__tests__/color.test.ts index 35f5f39..3bffb4a 100644 --- a/src/__tests__/color.test.ts +++ b/src/__tests__/color.test.ts @@ -1,49 +1,49 @@ import { Color } from "../color"; import { HexDecimalObject } from "../types/hex-decimal-object.interface"; -describe('Color class', () => { - test('should initialize with a hex string and convert to RGB', () => { - const color = new Color('#ff6464'); +describe("Color class", () => { + test("should initialize with a hex string and convert to RGB", () => { + const color = new Color("#ff6464"); expect(color.getColor()).toEqual({ r: 255, g: 100, b: 100 }); }); - test('should initialize with an RGB object', () => { + test("should initialize with an RGB object", () => { const color = new Color({ r: 255, g: 100, b: 100 }); expect(color.getColor()).toEqual({ r: 255, g: 100, b: 100 }); }); - test('should darken the color', () => { - const color = new Color('#ff6464'); + test("should darken the color", () => { + const color = new Color("#ff6464"); color.darken(0.1); expect(color.getColor()).toEqual({ r: 230, g: 90, b: 90 }); }); - test('should lighten the color', () => { - const color = new Color('#ff6464'); + test("should lighten the color", () => { + const color = new Color("#ff6464"); color.lighten(0.1); expect(color.getColor()).toEqual({ r: 255, g: 116, b: 116 }); }); - test('should apply alpha to the color', () => { - const color = new Color('#ff6464'); + test("should apply alpha to the color", () => { + const color = new Color("#ff6464"); color.alpha(0.5); expect(color.getColor()).toEqual({ r: 255, g: 100, b: 100, a: 0.5 }); }); - test('should blend the color with another color', () => { - const color = new Color('#ff6464'); + test("should blend the color with another color", () => { + const color = new Color("#ff6464"); const secondaryColor: HexDecimalObject = { r: 0, g: 0, b: 255 }; color.blend(0.5, secondaryColor); expect(color.getColor()).toEqual({ r: 128, g: 50, b: 178 }); }); - test('should return the color in RGB string format', () => { - const color = new Color('#ff6464'); - expect(color.rgb()).toBe('rgb(255, 100, 100)'); + test("should return the color in RGB string format", () => { + const color = new Color("#ff6464"); + expect(color.rgb()).toBe("rgb(255, 100, 100)"); }); - test('should return the color in hex string format', () => { - const color = new Color('#ff6464'); - expect(color.hex()).toBe('#FF6464'); + test("should return the color in hex string format", () => { + const color = new Color("#ff6464"); + expect(color.hex()).toBe("#FF6464"); }); }); diff --git a/src/__tests__/colorTestCases.test.ts b/src/__tests__/colorTestCases.test.ts new file mode 100644 index 0000000..f74170e --- /dev/null +++ b/src/__tests__/colorTestCases.test.ts @@ -0,0 +1,321 @@ +import { HexDecimalObject } from "../types/rgb.type"; + +export type ColorInputType = "hex" | "rgb" | "rgba" | "invalid"; +export type ColorOutputType = "HexDecimalObject" | "Error" | "boolean"; + +export interface ColorTestCase { + name: string; + input: string; + expected?: HexDecimalObject | boolean; + expectedError?: string; + typeInput: ColorInputType; + typeOutput: ColorOutputType; +} + +// Unique hex colors test cases +const uniqueHexColors = [ + "#B20A28", + "#009655", + "#D5EDD5", + "#008149", + "#361849", + "#51246D", + "#1B88BF", + "#fff", + "#65676B", + "#222220", + "#4A4A4A", + "#828282", + "#F4F5E6", + "#ED6322", + "#0063AD", + "#000", + "#4BB543", + "#E07116", + "#fcfcfc", + "#1E1E1E", + "#E1E1E1", + "#0C0C0C", +]; + +// Valid RGB strings test cases +const validRgbStrings = [ + "rgb(255, 0, 128)", + "rgb(0, 128, 255)", + "rgb(100, 100, 100)", + "rgb(0,0,0)", + "rgb(255, 255, 255)", +]; + +// Valid RGBA strings test cases +const validRgbaStrings = [ + "rgba(255, 0, 128, 0.5)", + "rgba(0, 128, 255, 0.5)", + "rgba(100, 100, 100, 0.5)", + "rgba(0,0,0,0.5)", + "rgba(255, 255, 255, 0.5)", +]; + +// Generate RGB test cases +const generateRgbTestCases = (): ColorTestCase[] => { + const cases: ColorTestCase[] = [ + { + name: "handles edge case with no spaces", + input: "rgb(0,0,0)", + expected: true, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles edge case with maximum values", + input: "rgb(255, 255, 255)", + expected: true, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles out of range value - case 1", + input: "rgb(256, 255, 255)", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles out of range value - case 2", + input: "rgb(255, 256, 255)", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles out of range value - case 3", + input: "rgb(255, 255, 256)", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles negative value", + input: "rgb(-1, 0, 128)", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles missing closing parenthesis", + input: "rgb(255, 0, 128", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles wrong format", + input: "rgba(255, 0, 128)", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles missing component", + input: "rgb(255, 0)", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles extra alpha component", + input: "rgb(255, 0, 128, 0.5)", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles trailing comma", + input: "rgb(255, 0, 128,)", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles empty string", + input: "", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles missing parentheses and numbers", + input: "rgb", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles empty parentheses", + input: "rgb()", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles non-numeric component", + input: "rgb(255, 0, 128, extra)", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles newline between components", + input: "rgb(255, 0, 128,\n)", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + { + name: "handles extra characters after valid format", + input: "rgb(255, 0, 128) extra", + expected: false, + typeInput: "rgb", + typeOutput: "boolean", + }, + ]; + + return [ + ...validRgbStrings.map((color) => ({ + name: `validates correctly formatted RGB string ${color}`, + input: color, + expected: true, + typeInput: "rgb" as ColorInputType, + typeOutput: "boolean" as ColorOutputType, + })), + ...cases, + ]; +}; + +// Generate RGBA test cases +const generateRgbaTestCases = (): ColorTestCase[] => { + return validRgbaStrings.map((color) => ({ + name: `validates correctly formatted RGBA string ${color}`, + input: color, + expected: true, + typeInput: "rgba" as ColorInputType, + typeOutput: "boolean" as ColorOutputType, + })); +}; + +export const colorTestCases: ColorTestCase[] = [ + { + name: "should return parsed RGB object for valid hex color", + input: "#ff0000", + expected: { r: 255, g: 0, b: 0 }, + typeInput: "hex", + typeOutput: "HexDecimalObject", + }, + { + name: "should return parsed RGBA object for valid hex color with alpha", + input: "#ff000080", + expected: { r: 255, g: 0, b: 0, a: 0.5 }, + typeInput: "hex", + typeOutput: "HexDecimalObject", + }, + { + name: "handles case when alpha value is 100%", + input: "#ffffffff", + expected: { r: 255, g: 255, b: 255, a: 1.0 }, + typeInput: "hex", + typeOutput: "HexDecimalObject", + }, + { + name: "should return parsed RGB object for valid rgb color", + input: "rgb(255, 0, 0)", + expected: { r: 255, g: 0, b: 0 }, + typeInput: "rgb", + typeOutput: "HexDecimalObject", + }, + { + name: "should return parsed RGBA object for valid rgba color", + input: "rgba(255, 0, 0, 0.5)", + expected: { r: 255, g: 0, b: 0, a: 0.5 }, + typeInput: "rgba", + typeOutput: "HexDecimalObject", + }, + { + name: "should throw error for invalid color format", + input: "invalid-color", + expectedError: "Invalid color format", + typeInput: "invalid", + typeOutput: "Error", + }, + { + name: "should return parsed RGB object for valid RGB string with spaces", + input: "rgb( 255 , 0 , 0 )", + expected: { r: 255, g: 0, b: 0 }, + typeInput: "rgb", + typeOutput: "HexDecimalObject", + }, + { + name: "should return parsed RGB object for valid RGB string with percentages", + input: "rgb(100%, 0%, 0%)", + expected: { r: 255, g: 0, b: 0 }, + typeInput: "rgb", + typeOutput: "HexDecimalObject", + }, + { + name: "should return parsed RGBA object for valid RGBA string with spaces", + input: "rgba( 255 , 0 , 0 , 0.5 )", + expected: { r: 255, g: 0, b: 0, a: 0.5 }, + typeInput: "rgba", + typeOutput: "HexDecimalObject", + }, + { + name: "should return parsed RGBA object for valid RGBA string with percentages", + input: "rgba(100%, 0%, 0%, 0.5)", + expected: { r: 255, g: 0, b: 0, a: 0.5 }, + typeInput: "rgba", + typeOutput: "HexDecimalObject", + }, + { + name: "should return parsed RGB object for valid RGB string without spaces", + input: "rgb(255,0,0)", + expected: { r: 255, g: 0, b: 0 }, + typeInput: "rgb", + typeOutput: "HexDecimalObject", + }, + { + name: "should return parsed RGBA object for valid RGBA string without spaces", + input: "rgba(255,0,0,0.5)", + expected: { r: 255, g: 0, b: 0, a: 0.5 }, + typeInput: "rgba", + typeOutput: "HexDecimalObject", + }, + { + name: "should throw error for invalid RGB string", + input: "rgb(255, 255, 255, 1)", + expectedError: "Invalid color format", + typeInput: "rgb", + typeOutput: "Error", + }, + { + name: "should throw error for invalid RGBA string", + input: "rgba(255, 255, 255)", + expectedError: "Invalid color format", + typeInput: "rgba", + typeOutput: "Error", + }, + { + name: "should throw error for completely invalid string", + input: "invalid string", + expectedError: "Invalid color format", + typeInput: "invalid", + typeOutput: "Error", + }, + ...uniqueHexColors.map((color) => ({ + name: `should return parsed RGB object for hex color ${color}`, + input: color, + expected: true, + typeInput: "hex" as ColorInputType, + typeOutput: "boolean" as ColorOutputType, + })), + ...generateRgbTestCases(), + ...generateRgbaTestCases(), +]; diff --git a/src/__tests__/colorTestCasesFunctions.test.ts b/src/__tests__/colorTestCasesFunctions.test.ts new file mode 100644 index 0000000..61e9944 --- /dev/null +++ b/src/__tests__/colorTestCasesFunctions.test.ts @@ -0,0 +1,98 @@ +import { + ColorInputType, + ColorOutputType, + ColorTestCase, + colorTestCases, +} from "./colorTestCases.test"; + +export const getTestCasesByType = ( + inputTypes: ColorInputType[], + outputTypes: ColorOutputType[], +): ColorTestCase[] => { + return colorTestCases.filter( + (testCase) => + inputTypes.includes(testCase.typeInput) && + outputTypes.includes(testCase.typeOutput), + ); +}; + +export const getTestCasesByInputType = ( + inputTypes: ColorInputType[], +): ColorTestCase[] => { + return colorTestCases.filter((testCase) => + inputTypes.includes(testCase.typeInput), + ); +}; + +export const getTestCasesByOutputType = ( + outputTypes: ColorOutputType[], +): ColorTestCase[] => { + return colorTestCases.filter((testCase) => + outputTypes.includes(testCase.typeOutput), + ); +}; + +// Tests for the getTestCasesByType, getTestCasesByInputType, getTestCasesByOutputType functions +describe("getTestCasesByType", () => { + test("should return test cases for specified input and output types", () => { + const inputTypes: ColorInputType[] = ["hex"]; + const outputTypes: ColorOutputType[] = ["boolean"]; + const expected: ColorTestCase[] = colorTestCases.filter( + (testCase) => + inputTypes.includes(testCase.typeInput) && + outputTypes.includes(testCase.typeOutput), + ); + + const result = getTestCasesByType(inputTypes, outputTypes); + expect(result).toEqual(expected); + }); + + test("should return empty array if no match found", () => { + const inputTypes: ColorInputType[] = ["invalid"]; + const outputTypes: ColorOutputType[] = ["HexDecimalObject"]; + const expected: ColorTestCase[] = []; + + const result = getTestCasesByType(inputTypes, outputTypes); + expect(result).toEqual(expected); + }); +}); + +describe("getTestCasesByInputType", () => { + test("should return test cases for specified input types", () => { + const inputTypes: ColorInputType[] = ["hex"]; + const expected: ColorTestCase[] = colorTestCases.filter((testCase) => + inputTypes.includes(testCase.typeInput), + ); + + const result = getTestCasesByInputType(inputTypes); + expect(result).toEqual(expected); + }); + + test("should return empty array if no match found", () => { + const inputTypes: ColorInputType[] = ["nonexistent" as any]; + const expected: ColorTestCase[] = []; + + const result = getTestCasesByInputType(inputTypes); + expect(result).toEqual(expected); + }); +}); + +describe("getTestCasesByOutputType", () => { + test("should return test cases for specified output types", () => { + const outputTypes: ColorOutputType[] = ["boolean"]; + const expected: ColorTestCase[] = colorTestCases.filter((testCase) => + outputTypes.includes(testCase.typeOutput), + ); + + const result = getTestCasesByOutputType(outputTypes); + expect(result).toEqual(expected); + }); + + test("should return empty array if no match found", () => { + const outputTypes: ColorOutputType[] = ["nonexistent" as any]; + const expected: ColorTestCase[] = []; + + const result = getTestCasesByOutputType(outputTypes); + expect(result).toEqual(expected); + }); +}); diff --git a/src/__tests__/darkenColor.test.ts b/src/__tests__/darkenColor.test.ts index 95c2333..2ac1654 100644 --- a/src/__tests__/darkenColor.test.ts +++ b/src/__tests__/darkenColor.test.ts @@ -1,20 +1,52 @@ -import { darkenColor } from '../darkenColor'; +import { darkenColor } from "../darkenColor"; -describe('darkenColor', () => { - test('darkens the RGB color by the given factor', () => { - expect(darkenColor({ r: 255, g: 100, b: 100 }, 0.1)).toEqual({ r: 230, g: 90, b: 90 }); - expect(darkenColor({ r: 100, g: 255, b: 100 }, 0.2)).toEqual({ r: 80, g: 204, b: 80 }); - expect(darkenColor({ r: 100, g: 100, b: 255 }, 0.3)).toEqual({ r: 70, g: 70, b: 179 }); +describe("darkenColor", () => { + test("darkens the RGB color by the given factor", () => { + expect(darkenColor({ r: 255, g: 100, b: 100 }, 0.1)).toEqual({ + r: 230, + g: 90, + b: 90, + }); + expect(darkenColor({ r: 100, g: 255, b: 100 }, 0.2)).toEqual({ + r: 80, + g: 204, + b: 80, + }); + expect(darkenColor({ r: 100, g: 100, b: 255 }, 0.3)).toEqual({ + r: 70, + g: 70, + b: 179, + }); }); - test('does not reduce RGB values below 0', () => { - expect(darkenColor({ r: 20, g: 20, b: 20 }, 0.5)).toEqual({ r: 10, g: 10, b: 10 }); - expect(darkenColor({ r: 50, g: 100, b: 200 }, 1)).toEqual({ r: 0, g: 0, b: 0 }); + test("does not reduce RGB values below 0", () => { + expect(darkenColor({ r: 20, g: 20, b: 20 }, 0.5)).toEqual({ + r: 10, + g: 10, + b: 10, + }); + expect(darkenColor({ r: 50, g: 100, b: 200 }, 1)).toEqual({ + r: 0, + g: 0, + b: 0, + }); }); - test('handles edge cases for darkening factor', () => { - expect(darkenColor({ r: 255, g: 255, b: 255 }, 0)).toEqual({ r: 255, g: 255, b: 255 }); - expect(darkenColor({ r: 128, g: 128, b: 128 }, 0.5)).toEqual({ r: 64, g: 64, b: 64 }); - expect(darkenColor({ r: 64, g: 64, b: 64 }, 0.25)).toEqual({ r: 48, g: 48, b: 48 }); + test("handles edge cases for darkening factor", () => { + expect(darkenColor({ r: 255, g: 255, b: 255 }, 0)).toEqual({ + r: 255, + g: 255, + b: 255, + }); + expect(darkenColor({ r: 128, g: 128, b: 128 }, 0.5)).toEqual({ + r: 64, + g: 64, + b: 64, + }); + expect(darkenColor({ r: 64, g: 64, b: 64 }, 0.25)).toEqual({ + r: 48, + g: 48, + b: 48, + }); }); }); diff --git a/src/__tests__/formatDecimalObjectToRgba.test.ts b/src/__tests__/formatDecimalObjectToRgba.test.ts index 3d26118..71f46f5 100644 --- a/src/__tests__/formatDecimalObjectToRgba.test.ts +++ b/src/__tests__/formatDecimalObjectToRgba.test.ts @@ -1,31 +1,40 @@ -import { formatDecimalObjectToRgba } from '../formatDecimalObjectToRgba'; -import { HexDecimalObject } from '../types/hex-decimal-object.interface'; +import { formatDecimalObjectToRgba } from "../formatDecimalObjectToRgba"; +import { HexDecimalObject } from "../types/hex-decimal-object.interface"; -describe('formatDecimalObjectToRgba', () => { - test('formats HexDecimalObject to RGBA string with provided alpha parameter', () => { +describe("formatDecimalObjectToRgba", () => { + test("formats HexDecimalObject to RGBA string with provided alpha parameter", () => { const color: HexDecimalObject = { r: 255, g: 255, b: 255, a: 1 }; - expect(formatDecimalObjectToRgba(color, '0.5')).toBe('rgba(255, 255, 255, 0.5)'); + expect(formatDecimalObjectToRgba(color, "0.5")).toBe( + "rgba(255, 255, 255, 0.5)", + ); }); - test('formats HexDecimalObject to RGB string when no alpha is provided', () => { + test("formats HexDecimalObject to RGB string when no alpha is provided", () => { const color: HexDecimalObject = { r: 255, g: 255, b: 255 }; - expect(formatDecimalObjectToRgba(color)).toBe('rgb(255, 255, 255)'); + expect(formatDecimalObjectToRgba(color)).toBe("rgb(255, 255, 255)"); }); - test('formats HexDecimalObject to RGBA string with existing alpha value', () => { - const color: HexDecimalObject = { r: 255, g: 99, b: 71, a: 0.645343434232323 }; - expect(formatDecimalObjectToRgba(color)).toBe('rgba(255, 99, 71, 0.6)'); + test("formats HexDecimalObject to RGBA string with existing alpha value", () => { + const color: HexDecimalObject = { + r: 255, + g: 99, + b: 71, + a: 0.645343434232323, + }; + expect(formatDecimalObjectToRgba(color)).toBe("rgba(255, 99, 71, 0.6)"); }); - test('formats HexDecimalObject to RGBA string with provided numeric alpha parameter', () => { + test("formats HexDecimalObject to RGBA string with provided numeric alpha parameter", () => { const color: HexDecimalObject = { r: 255, g: 99, b: 71, a: 1 }; - expect(formatDecimalObjectToRgba(color, '0.3')).toBe('rgba(255, 99, 71, 0.3)'); + expect(formatDecimalObjectToRgba(color, "0.3")).toBe( + "rgba(255, 99, 71, 0.3)", + ); }); - test('handles invalid alpha parameter gracefully', () => { + test("handles invalid alpha parameter gracefully", () => { const color: HexDecimalObject = { r: 255, g: 255, b: 255, a: 1 }; - expect(formatDecimalObjectToRgba(color, 'invalid')).toBe('rgba(255, 255, 255, 1)'); + expect(formatDecimalObjectToRgba(color, "invalid")).toBe( + "rgba(255, 255, 255, 1)", + ); }); - - }); diff --git a/src/__tests__/hexToDecimals.test.ts b/src/__tests__/hexToDecimals.test.ts index ed5df14..3182449 100644 --- a/src/__tests__/hexToDecimals.test.ts +++ b/src/__tests__/hexToDecimals.test.ts @@ -1,68 +1,35 @@ -import { hexesToDecimals, hexToDecimal } from '../hexToDecimals'; -import { RgbWithAHexObject } from '../hexToDecimals'; -import { HexObject } from '../parseHex'; -import { HexDecimalObject } from '../types/hex-decimal-object.interface'; - -describe('hexToDecimal', () => { - test('converts hex to decimal', () => { - expect(hexToDecimal('ff')).toBe(255); - expect(hexToDecimal('0a')).toBe(10); - expect(hexToDecimal('00')).toBe(0); - expect(hexToDecimal('80')).toBe(128); +import { hexesToDecimals, hexToDecimal } from "../hexToDecimals"; +import { ColorTestCase } from "./colorTestCases.test"; +import { getTestCasesByType } from "./colorTestCasesFunctions.test"; + +const runTests = (func: (input: any) => any, testCases: ColorTestCase[]) => { + testCases.forEach((testCase) => { + if (testCase.expectedError) { + test(testCase.name, () => { + expect(() => func(testCase.input)).toThrow(testCase.expectedError); + }); + } else { + test(testCase.name, () => { + const result = func(testCase.input); + expect(result).toEqual(testCase.expected); + }); + } + }); +}; + +describe("hexToDecimal", () => { + test("converts hex to decimal", () => { + expect(hexToDecimal("ff")).toBe(255); + expect(hexToDecimal("0a")).toBe(10); + expect(hexToDecimal("00")).toBe(0); + expect(hexToDecimal("80")).toBe(128); }); }); -describe('hexesToDecimals', () => { - test('converts hex values to decimal values including alpha', () => { - const hexObj: HexObject = { r: 'ff', g: '00', b: '00', a: '80' }; - const expected: HexDecimalObject = { r: 255, g: 0, b: 0, a: 0.5 }; - expect(hexesToDecimals(hexObj)).toEqual(expected); - }); - - test('converts hex values to decimal values without alpha', () => { - const hexObj: RgbWithAHexObject = { r: 'ff', g: '00', b: '00' }; - const expected: HexDecimalObject = { r: 255, g: 0, b: 0, a: 1 }; - expect(hexesToDecimals(hexObj)).toEqual(expected); - }); - - test('handles case when alpha value is not provided', () => { - const hexObj: RgbWithAHexObject = { r: 'ff', g: 'ff', b: 'ff' }; - const expected: HexDecimalObject = { r: 255, g: 255, b: 255, a: 1 }; - expect(hexesToDecimals(hexObj)).toEqual(expected); - }); - - test('handles case when alpha value is 100%', () => { - const hexObj: RgbWithAHexObject = { r: 'ff', g: 'ff', b: 'ff', a: 'ff' }; - const expected: HexDecimalObject = { r: 255, g: 255, b: 255, a: 1.0 }; - expect(hexesToDecimals(hexObj)).toEqual(expected); - }); - - test('parses and converts hex string to decimal values', () => { - const hexString = '#ff000080'; - const expected: HexDecimalObject = { r: 255, g: 0, b: 0, a: 0.5 }; - expect(hexesToDecimals(hexString)).toEqual(expected); - }); - - test('parses and converts hex string without alpha to decimal values', () => { - const hexString = '#ff0000'; - const expected: HexDecimalObject = { r: 255, g: 0, b: 0, a: 1 }; - expect(hexesToDecimals(hexString)).toEqual(expected); - }); - - test('handles invalid hex string gracefully', () => { - const hexString = '#gggggg'; - expect(() => hexesToDecimals(hexString)).toThrow('Invalid hex color'); - }); - - test('handles short hex string format', () => { - const hexString = '#f00'; - const expected: HexDecimalObject = { r: 255, g: 0, b: 0, a: 1 }; - expect(hexesToDecimals(hexString)).toEqual(expected); - }); +describe("hexesToDecimals", () => { + const hexTestCases = getTestCasesByType(["hex"], ["HexDecimalObject"]); - test('handles short hex string with alpha format', () => { - const hexString = '#f008'; - const expected: HexDecimalObject = { r: 255, g: 0, b: 0, a: 0.53 }; - expect(hexesToDecimals(hexString)).toEqual(expected); + describe("Hex to Decimals Tests", () => { + runTests(hexesToDecimals, hexTestCases); }); }); diff --git a/src/__tests__/hexToRgb.test.ts b/src/__tests__/hexToRgb.test.ts index 24d2ff6..23ba035 100644 --- a/src/__tests__/hexToRgb.test.ts +++ b/src/__tests__/hexToRgb.test.ts @@ -1,6 +1,5 @@ import { hexToRgb } from "../hexToRgb"; - const uniqueHexColors = [ "#B20A28", "#009655", diff --git a/src/__tests__/isHexColor.test.ts b/src/__tests__/isHexColor.test.ts index 885455d..f6564db 100644 --- a/src/__tests__/isHexColor.test.ts +++ b/src/__tests__/isHexColor.test.ts @@ -1,54 +1,54 @@ import { isHexColor } from "../isHexColor"; -describe('isHexColor', () => { - test('should return true for valid 6-digit hexadecimal color code', () => { - expect(isHexColor('#ff0000')).toBe(true); +describe("isHexColor", () => { + test("should return true for valid 6-digit hexadecimal color code", () => { + expect(isHexColor("#ff0000")).toBe(true); }); - test('should return true for valid 3-digit hexadecimal color code', () => { - expect(isHexColor('#FFF')).toBe(true); + test("should return true for valid 3-digit hexadecimal color code", () => { + expect(isHexColor("#FFF")).toBe(true); }); - test('should return true for valid 8-digit hexadecimal color code', () => { - expect(isHexColor('#12345678')).toBe(true); + test("should return true for valid 8-digit hexadecimal color code", () => { + expect(isHexColor("#12345678")).toBe(true); }); - test('should return true for valid 6-digit hexadecimal color code without #', () => { - expect(isHexColor('ff0000')).toBe(true); + test("should return true for valid 6-digit hexadecimal color code without #", () => { + expect(isHexColor("ff0000")).toBe(true); }); - test('should return false for 5-digit hexadecimal color code', () => { - expect(isHexColor('#12345')).toBe(false); + test("should return false for 5-digit hexadecimal color code", () => { + expect(isHexColor("#12345")).toBe(false); }); - test('should return false for invalid characters in hexadecimal color code', () => { - expect(isHexColor('#gggggg')).toBe(false); + test("should return false for invalid characters in hexadecimal color code", () => { + expect(isHexColor("#gggggg")).toBe(false); }); - test('should return false for null input', () => { + test("should return false for null input", () => { expect(isHexColor(null as any)).toBe(false); }); - test('should return false for numeric input', () => { + test("should return false for numeric input", () => { expect(isHexColor(123 as any)).toBe(false); }); - test('should return false for non-hexadecimal string', () => { - expect(isHexColor('hello')).toBe(false); + test("should return false for non-hexadecimal string", () => { + expect(isHexColor("hello")).toBe(false); }); - test('should return true for valid 4-digit hexadecimal color code', () => { - expect(isHexColor('#1a2B')).toBe(true); + test("should return true for valid 4-digit hexadecimal color code", () => { + expect(isHexColor("#1a2B")).toBe(true); }); - test('should return false for empty string', () => { - expect(isHexColor('')).toBe(false); + test("should return false for empty string", () => { + expect(isHexColor("")).toBe(false); }); - test('should return false for strings with invalid length', () => { - expect(isHexColor('#1234')).toBe(true); // This is actually a valid test case for 4-digit hex - expect(isHexColor('#123')).toBe(true); // This is a valid 3-digit hex - expect(isHexColor('#12')).toBe(false); - expect(isHexColor('#123456789')).toBe(false); + test("should return false for strings with invalid length", () => { + expect(isHexColor("#1234")).toBe(true); // This is actually a valid test case for 4-digit hex + expect(isHexColor("#123")).toBe(true); // This is a valid 3-digit hex + expect(isHexColor("#12")).toBe(false); + expect(isHexColor("#123456789")).toBe(false); }); }); diff --git a/src/__tests__/isRgbaOutOfRange.test.ts b/src/__tests__/isRgbaOutOfRange.test.ts new file mode 100644 index 0000000..619c460 --- /dev/null +++ b/src/__tests__/isRgbaOutOfRange.test.ts @@ -0,0 +1,73 @@ +import { isRgbaOutOfRange } from "../isRgbaOutOfRange"; +import { HexDecimalObject } from "../types/hex-decimal-object.interface"; + +describe("isRgbaOutOfRange", () => { + it("should return false for valid RGBA values", () => { + const validColors: HexDecimalObject[] = [ + { r: 0, g: 0, b: 0, a: 0 }, + { r: 255, g: 255, b: 255, a: 1 }, + { r: 123, g: 123, b: 123, a: 0.5 }, + { r: 200, g: 100, b: 50 }, + ]; + + validColors.forEach((color) => { + expect(isRgbaOutOfRange(color)).toBe(false); + }); + }); + + it("should return true for invalid R values", () => { + const invalidColors: HexDecimalObject[] = [ + { r: -1, g: 0, b: 0, a: 0 }, + { r: 256, g: 0, b: 0, a: 0 }, + ]; + + invalidColors.forEach((color) => { + expect(isRgbaOutOfRange(color)).toBe(true); + }); + }); + + it("should return true for invalid G values", () => { + const invalidColors: HexDecimalObject[] = [ + { r: 0, g: -1, b: 0, a: 0 }, + { r: 0, g: 256, b: 0, a: 0 }, + ]; + + invalidColors.forEach((color) => { + expect(isRgbaOutOfRange(color)).toBe(true); + }); + }); + + it("should return true for invalid B values", () => { + const invalidColors: HexDecimalObject[] = [ + { r: 0, g: 0, b: -1, a: 0 }, + { r: 0, g: 0, b: 256, a: 0 }, + ]; + + invalidColors.forEach((color) => { + expect(isRgbaOutOfRange(color)).toBe(true); + }); + }); + + it("should return true for invalid A values", () => { + const invalidColors: HexDecimalObject[] = [ + { r: 0, g: 0, b: 0, a: -0.1 }, + { r: 0, g: 0, b: 0, a: 1.1 }, + ]; + + invalidColors.forEach((color) => { + expect(isRgbaOutOfRange(color)).toBe(true); + }); + }); + + it("should return false for valid colors without alpha", () => { + const validColors: HexDecimalObject[] = [ + { r: 100, g: 150, b: 200 }, + { r: 0, g: 0, b: 0 }, + { r: 255, g: 255, b: 255 }, + ]; + + validColors.forEach((color) => { + expect(isRgbaOutOfRange(color)).toBe(false); + }); + }); +}); diff --git a/src/__tests__/isValidAlphaHexCode.test.ts b/src/__tests__/isValidAlphaHexCode.test.ts new file mode 100644 index 0000000..0f9968c --- /dev/null +++ b/src/__tests__/isValidAlphaHexCode.test.ts @@ -0,0 +1,31 @@ +import { isValidAlphaHexCode } from "../isValidAlphaHexCode"; + +describe("isValidAlphaHexCode", () => { + it("should return true for valid alpha hex codes", () => { + const validHexCodes = [ + "#FFAABBCC", + "#01234567", + "#89ABCDEF", + "#abcdef12", + "#12345678", + ]; + + validHexCodes.forEach((hexCode) => { + expect(isValidAlphaHexCode(hexCode)).toBe(true); + }); + }); + + it("should return false for invalid alpha hex codes", () => { + const invalidHexCodes = [ + "#FFAABB", // Only 6 characters + "#FFAABBCCDD", // 10 characters + "FFAABBCC", // Missing # + "#GGAABBCC", // Invalid characters + "#FFAABBCCG", // Extra invalid character at end + ]; + + invalidHexCodes.forEach((hexCode) => { + expect(isValidAlphaHexCode(hexCode)).toBe(false); + }); + }); +}); diff --git a/src/__tests__/isValidHex.test.ts b/src/__tests__/isValidHex.test.ts index 887e8df..277a86d 100644 --- a/src/__tests__/isValidHex.test.ts +++ b/src/__tests__/isValidHex.test.ts @@ -1,57 +1,57 @@ import { isValidHex } from "../isValidHex"; -describe('isValidHex', () => { - test('should return true for valid 6-digit hexadecimal color code with #', () => { - expect(isValidHex('#ff0000')).toBe(true); +describe("isValidHex", () => { + test("should return true for valid 6-digit hexadecimal color code with #", () => { + expect(isValidHex("#ff0000")).toBe(true); }); - test('should return true for valid 6-digit hexadecimal color code without #', () => { - expect(isValidHex('ff0000')).toBe(true); + test("should return true for valid 6-digit hexadecimal color code without #", () => { + expect(isValidHex("ff0000")).toBe(true); }); - test('should return true for valid 3-digit hexadecimal color code with #', () => { - expect(isValidHex('#FFF')).toBe(true); + test("should return true for valid 3-digit hexadecimal color code with #", () => { + expect(isValidHex("#FFF")).toBe(true); }); - test('should return true for valid 3-digit hexadecimal color code without #', () => { - expect(isValidHex('FFF')).toBe(true); + test("should return true for valid 3-digit hexadecimal color code without #", () => { + expect(isValidHex("FFF")).toBe(true); }); - test('should return true for valid 8-digit hexadecimal color code with #', () => { - expect(isValidHex('#12345678')).toBe(true); + test("should return true for valid 8-digit hexadecimal color code with #", () => { + expect(isValidHex("#12345678")).toBe(true); }); - test('should return true for valid 8-digit hexadecimal color code without #', () => { - expect(isValidHex('12345678')).toBe(true); + test("should return true for valid 8-digit hexadecimal color code without #", () => { + expect(isValidHex("12345678")).toBe(true); }); - test('should return false for 5-digit hexadecimal color code', () => { - expect(isValidHex('#12345')).toBe(false); + test("should return false for 5-digit hexadecimal color code", () => { + expect(isValidHex("#12345")).toBe(false); }); - test('should return false for invalid characters in hexadecimal color code', () => { - expect(isValidHex('#gggggg')).toBe(false); + test("should return false for invalid characters in hexadecimal color code", () => { + expect(isValidHex("#gggggg")).toBe(false); }); - test('should return false for null input', () => { + test("should return false for null input", () => { expect(isValidHex(null as any)).toBe(false); }); - test('should return false for numeric input', () => { + test("should return false for numeric input", () => { expect(isValidHex(123 as any)).toBe(false); }); - test('should return false for non-hexadecimal string', () => { - expect(isValidHex('hello')).toBe(false); + test("should return false for non-hexadecimal string", () => { + expect(isValidHex("hello")).toBe(false); }); - test('should return false for empty string', () => { - expect(isValidHex('')).toBe(false); + test("should return false for empty string", () => { + expect(isValidHex("")).toBe(false); }); - test('should return false for strings with invalid length', () => { - expect(isValidHex('#1234')).toBe(false); - expect(isValidHex('#1234567')).toBe(false); - expect(isValidHex('#123456789')).toBe(false); + test("should return false for strings with invalid length", () => { + expect(isValidHex("#1234")).toBe(false); + expect(isValidHex("#1234567")).toBe(false); + expect(isValidHex("#123456789")).toBe(false); }); }); diff --git a/src/__tests__/isValidRgb.test.ts b/src/__tests__/isValidRgb.test.ts index 6862a06..799df22 100644 --- a/src/__tests__/isValidRgb.test.ts +++ b/src/__tests__/isValidRgb.test.ts @@ -1,33 +1,33 @@ import { isValidRgb } from "../isValidRgb"; +import { + ColorInputType, + ColorOutputType, + ColorTestCase, +} from "./colorTestCases.test"; +import { getTestCasesByType } from "./colorTestCasesFunctions.test"; -describe("isValidRgb", () => { - test("validates correctly formatted RGB strings", () => { - expect(isValidRgb("rgb(255, 0, 128)")).toBe(true); - expect(isValidRgb("rgb(0, 128, 255)")).toBe(true); - expect(isValidRgb("rgb(100, 100, 100)")).toBe(true); +const runTests = (func: (input: any) => any, testCases: ColorTestCase[]) => { + testCases.forEach((testCase) => { + if (testCase.expectedError) { + test(testCase.name, () => { + expect(() => func(testCase.input)).toThrow(testCase.expectedError); + }); + } else { + test(testCase.name, () => { + const result = func(testCase.input); + expect(result).toEqual(testCase.expected); + }); + } }); +}; - test("handles edge cases", () => { - expect(isValidRgb("rgb(0,0,0)")).toBe(true); // No spaces - expect(isValidRgb("rgb(255, 255, 255)")).toBe(true); // Maximum values - expect(isValidRgb("rgb(256, 255, 255)")).toBe(false); // Out of range - expect(isValidRgb("rgb(255, 256, 255)")).toBe(false); // Out of range - expect(isValidRgb("rgb(255, 255, 256)")).toBe(false); // Out of range - expect(isValidRgb("rgb(-1, 0, 128)")).toBe(false); // Negative value - expect(isValidRgb("rgb(255, 0, 128")).toBe(false); // Missing closing parenthesis - expect(isValidRgb("rgba(255, 0, 128)")).toBe(false); // Wrong format - expect(isValidRgb("rgb(255, 0)")).toBe(false); // Missing a component - expect(isValidRgb("rgb(255, 0, 128, 0.5)")).toBe(false); // Extra alpha component - expect(isValidRgb("rgb(255, 0, 128,)")).toBe(false); // Trailing comma - expect(isValidRgb("rgb(255, 0, 128")).toBe(false); // Missing closing parenthesis - }); +describe("isValidRgb", () => { + // Get RGB test cases + const rgbInputTypes: ColorInputType[] = ["rgb"]; + const rgbOutputTypes: ColorOutputType[] = ["boolean"]; // Adjust based on the expected output type + const rgbTestCases = getTestCasesByType(rgbInputTypes, rgbOutputTypes); - test("handles invalid input gracefully", () => { - expect(isValidRgb("")).toBe(false); // Empty string - expect(isValidRgb("rgb")).toBe(false); // Missing parentheses and numbers - expect(isValidRgb("rgb()")).toBe(false); // Empty parentheses - expect(isValidRgb("rgb(255, 0, 128, extra)")).toBe(false); // Non-numeric component - expect(isValidRgb("rgb(255, 0, 128," + "\n" + ")")).toBe(false); // Newline between components - expect(isValidRgb("rgb(255, 0, 128) extra")).toBe(false); // Extra characters after valid format + describe("Valid RGB Tests", () => { + runTests(isValidRgb, rgbTestCases); }); }); diff --git a/src/__tests__/parseColor.test.ts b/src/__tests__/parseColor.test.ts index 225e5bb..030f4be 100644 --- a/src/__tests__/parseColor.test.ts +++ b/src/__tests__/parseColor.test.ts @@ -1,35 +1,41 @@ import { parseColor } from "../parseColor"; +import { ColorTestCase } from "./colorTestCases.test"; +import { getTestCasesByType } from "./colorTestCasesFunctions.test"; -describe('parseColor', () => { - test('should return parsed RGB object for valid hex color', () => { - const result = parseColor('#ff0000'); - expect(result).toEqual({ r: 255, g: 0, b: 0 }); +const runTests = (func: (color: string) => any, testCases: ColorTestCase[]) => { + testCases.forEach((testCase) => { + if (testCase.expectedError) { + test(testCase.name, () => { + expect(() => func(testCase.input)).toThrow(testCase.expectedError); + }); + } else { + test(testCase.name, () => { + const result = func(testCase.input); + expect(result).toEqual(testCase.expected); + }); + } }); +}; - test('should return parsed RGBA object for valid hex color with alpha', () => { - const result = parseColor('#ff000080'); - expect(result).toEqual({ r: 255, g: 0, b: 0, a: 0.5 }); - }); +describe("parseColor", () => { + const hexTestCases = getTestCasesByType(["hex"], ["HexDecimalObject"]); + const rgbTestCases = getTestCasesByType(["rgb"], ["HexDecimalObject"]); + const rgbaTestCases = getTestCasesByType(["rgba"], ["HexDecimalObject"]); + const invalidTestCases = getTestCasesByType(["invalid"], ["Error"]); - test('should return parsed RGB object for valid rgb color', () => { - const result = parseColor('rgb(255, 0, 0)'); - expect(result).toEqual({ r: 255, g: 0, b: 0 }); + describe("Hex Tests", () => { + runTests(parseColor, hexTestCases); }); - test('should return parsed RGBA object for valid rgba color', () => { - const result = parseColor('rgba(255, 0, 0, 0.5)'); - expect(result).toEqual({ r: 255, g: 0, b: 0, a: 0.5 }); + describe("RGB Tests", () => { + runTests(parseColor, rgbTestCases); }); - test('should throw error for invalid color format', () => { - expect(() => parseColor('invalid-color')).toThrow('Invalid color format'); + describe("RGBA Tests", () => { + runTests(parseColor, rgbaTestCases); }); - test('should throw error and log when parsing fails', () => { - const consoleErrorMock = jest.spyOn(console, 'error').mockImplementation(() => {}); - expect(() => parseColor('#gggggg')).toThrow(); - expect(consoleErrorMock).toHaveBeenCalled(); - - consoleErrorMock.mockRestore(); + describe("Invalid Tests", () => { + runTests(parseColor, invalidTestCases); }); }); diff --git a/src/__tests__/parseRgbString.test.ts b/src/__tests__/parseRgbString.test.ts index 47d17fd..86e4dd9 100644 --- a/src/__tests__/parseRgbString.test.ts +++ b/src/__tests__/parseRgbString.test.ts @@ -1,38 +1,31 @@ import { parseRgbString } from "../parseRgbString"; - -describe('parseRgbString', () => { - it('should return parsed RGB object for valid RGB string', () => { - const result = parseRgbString('rgb(255, 255, 255)'); - expect(result).toEqual({ r: 255, g: 255, b: 255 }); - }); - - it('should return parsed RGBA object for valid RGBA string', () => { - const result = parseRgbString('rgba(255, 255, 255, 0.5)'); - expect(result).toEqual({ r: 255, g: 255, b: 255, a: 0.5 }); - }); - - it('should return null for invalid RGB string', () => { - const result = parseRgbString('rgb(255, 255, 255, 1)'); - expect(result).toBeNull(); +import { ColorTestCase } from "./colorTestCases.test"; +import { getTestCasesByType } from "./colorTestCasesFunctions.test"; + +const runTests = (func: (input: any) => any, testCases: ColorTestCase[]) => { + testCases.forEach((testCase) => { + if (testCase.expectedError) { + test(testCase.name, () => { + expect(() => func(testCase.input)).toThrow(testCase.expectedError); + }); + } else { + test(testCase.name, () => { + const result = func(testCase.input); + expect(result).toEqual(testCase.expected); + }); + } }); +}; - it('should return null for invalid RGBA string', () => { - const result = parseRgbString('rgba(255, 255, 255)'); - expect(result).toBeNull(); - }); +describe("parseRgbString", () => { + const rgbTestCases = getTestCasesByType(["rgb"], ["HexDecimalObject"]); + const rgbaTestCases = getTestCasesByType(["rgba"], ["HexDecimalObject"]); - it('should return null for completely invalid string', () => { - const result = parseRgbString('invalid string'); - expect(result).toBeNull(); + describe("RGB Tests", () => { + runTests(parseRgbString, rgbTestCases); }); - it('should handle errors and return null', () => { - jest.spyOn(console, 'error').mockImplementation(() => {}); // Mock console.error - - const result = parseRgbString('rgb(255, 255, not-a-number)'); - expect(result).toBeNull(); - expect(console.error).toHaveBeenCalledWith(expect.stringContaining('Error parsing RGB string')); - - (console.error as jest.Mock).mockRestore(); + describe("RGBA Tests", () => { + runTests(parseRgbString, rgbaTestCases); }); }); diff --git a/src/__tests__/rgbaToHexAlpha.test.ts b/src/__tests__/rgbaToHexAlpha.test.ts index 97efce4..2914565 100644 --- a/src/__tests__/rgbaToHexAlpha.test.ts +++ b/src/__tests__/rgbaToHexAlpha.test.ts @@ -1,43 +1,45 @@ import { RGBAToHexAlpha } from "../rgbaToHexAlpha"; -describe('RGBAToHexAlpha', () => { - test('should convert rgba to hex with alpha', () => { - expect(RGBAToHexAlpha('rgba(255, 0, 0, 1)')).toBe('#ff0000ff'); +describe("RGBAToHexAlpha", () => { + test("should convert rgba to hex with alpha", () => { + expect(RGBAToHexAlpha("rgba(255, 0, 0, 1)")).toBe("#ff0000ff"); }); - test('should convert rgb to hex without alpha', () => { - expect(RGBAToHexAlpha('rgb(255, 0, 0)')).toBe('#ff0000'); + test("should convert rgb to hex without alpha", () => { + expect(RGBAToHexAlpha("rgb(255, 0, 0)")).toBe("#ff0000"); }); - test('should convert rgba to hex with alpha and round alpha value', () => { - expect(RGBAToHexAlpha('rgba(255, 0, 0, 0.5)')).toBe('#ff000080'); + test("should convert rgba to hex with alpha and round alpha value", () => { + expect(RGBAToHexAlpha("rgba(255, 0, 0, 0.5)")).toBe("#ff000080"); }); - test('should convert rgba to hex and remove alpha when forceRemoveAlpha is true', () => { - expect(RGBAToHexAlpha('rgba(255, 0, 0, 0.5)', true)).toBe('#ff0000'); + test("should convert rgba to hex and remove alpha when forceRemoveAlpha is true", () => { + expect(RGBAToHexAlpha("rgba(255, 0, 0, 0.5)", true)).toBe("#ff0000"); }); - test('should throw error for invalid rgba input', () => { - expect(() => RGBAToHexAlpha('invalid input')).toThrow('Invalid RGBA/RGB input'); + test("should throw error for invalid rgba input", () => { + expect(() => RGBAToHexAlpha("invalid input")).toThrow( + "Invalid RGBA/RGB input", + ); }); - test('should handle rgba with missing alpha channel', () => { - expect(RGBAToHexAlpha('rgba(255, 0, 0)')).toBe('#ff0000'); + test("should handle rgba with missing alpha channel", () => { + expect(RGBAToHexAlpha("rgba(255, 0, 0)")).toBe("#ff0000"); }); - test('should handle rgb input with spaces', () => { - expect(RGBAToHexAlpha('rgb( 255 , 0 , 0 )')).toBe('#ff0000'); + test("should handle rgb input with spaces", () => { + expect(RGBAToHexAlpha("rgb( 255 , 0 , 0 )")).toBe("#ff0000"); }); - test('should handle rgba input with spaces and alpha', () => { - expect(RGBAToHexAlpha('rgba( 255 , 0 , 0 , 0.5 )')).toBe('#ff000080'); + test("should handle rgba input with spaces and alpha", () => { + expect(RGBAToHexAlpha("rgba( 255 , 0 , 0 , 0.5 )")).toBe("#ff000080"); }); - test('should handle rgb input with decimal values', () => { - expect(RGBAToHexAlpha('rgb(255.0, 0.0, 0.0)')).toBe('#ff0000'); + test("should handle rgb input with decimal values", () => { + expect(RGBAToHexAlpha("rgb(255.0, 0.0, 0.0)")).toBe("#ff0000"); }); - test('should handle rgba input with decimal values for alpha', () => { - expect(RGBAToHexAlpha('rgba(255.0, 0.0, 0.0, 0.5)')).toBe('#ff000080'); + test("should handle rgba input with decimal values for alpha", () => { + expect(RGBAToHexAlpha("rgba(255.0, 0.0, 0.0, 0.5)")).toBe("#ff000080"); }); }); diff --git a/src/__tests__/toHexColor.test.ts b/src/__tests__/toHexColor.test.ts index 4b0b83e..138d379 100644 --- a/src/__tests__/toHexColor.test.ts +++ b/src/__tests__/toHexColor.test.ts @@ -2,8 +2,7 @@ import { cssColors } from "../cssColors"; import { toHexColor } from "../toHexColor"; import { ColorNames } from "../types/color-names"; -describe('toHexColor', () => { - +describe("toHexColor", () => { Object.keys(cssColors).forEach((colorName) => { const color = cssColors[colorName as ColorNames]; test(`converts ${colorName} RGB to hex color string`, () => { @@ -11,20 +10,20 @@ describe('toHexColor', () => { }); }); - test('converts RGB color to hex color string', () => { - expect(toHexColor({ r: 255, g: 0, b: 0 })).toBe('#FF0000'); - expect(toHexColor({ r: 0, g: 255, b: 0 })).toBe('#00FF00'); - expect(toHexColor({ r: 0, g: 0, b: 255 })).toBe('#0000FF'); + test("converts RGB color to hex color string", () => { + expect(toHexColor({ r: 255, g: 0, b: 0 })).toBe("#FF0000"); + expect(toHexColor({ r: 0, g: 255, b: 0 })).toBe("#00FF00"); + expect(toHexColor({ r: 0, g: 0, b: 255 })).toBe("#0000FF"); }); - test('pads single digit hex values with zero', () => { - expect(toHexColor({ r: 15, g: 15, b: 15 })).toBe('#0F0F0F'); - expect(toHexColor({ r: 1, g: 1, b: 1 })).toBe('#010101'); - expect(toHexColor({ r: 255, g: 255, b: 255 })).toBe('#FFFFFF'); + test("pads single digit hex values with zero", () => { + expect(toHexColor({ r: 15, g: 15, b: 15 })).toBe("#0F0F0F"); + expect(toHexColor({ r: 1, g: 1, b: 1 })).toBe("#010101"); + expect(toHexColor({ r: 255, g: 255, b: 255 })).toBe("#FFFFFF"); }); - test('handles mixed value ranges correctly', () => { - expect(toHexColor({ r: 128, g: 64, b: 32 })).toBe('#804020'); - expect(toHexColor({ r: 10, g: 100, b: 200 })).toBe('#0A64C8'); + test("handles mixed value ranges correctly", () => { + expect(toHexColor({ r: 128, g: 64, b: 32 })).toBe("#804020"); + expect(toHexColor({ r: 10, g: 100, b: 200 })).toBe("#0A64C8"); }); }); diff --git a/src/__tests__/toRgbString.test.ts b/src/__tests__/toRgbString.test.ts index 30e3172..e630df7 100644 --- a/src/__tests__/toRgbString.test.ts +++ b/src/__tests__/toRgbString.test.ts @@ -1,44 +1,44 @@ import { toRgbString } from "../toRgbString"; import { HexDecimalObject } from "../types/hex-decimal-object.interface"; -describe('toRgbString', () => { - test('should convert a color object without alpha to an RGB string', () => { +describe("toRgbString", () => { + test("should convert a color object without alpha to an RGB string", () => { const color: HexDecimalObject = { r: 255, g: 0, b: 0 }; const result = toRgbString(color); - expect(result).toBe('rgb(255, 0, 0)'); + expect(result).toBe("rgb(255, 0, 0)"); }); - test('should convert a color object with alpha to an RGBA string', () => { + test("should convert a color object with alpha to an RGBA string", () => { const color: HexDecimalObject = { r: 255, g: 0, b: 0, a: 0.5 }; const result = toRgbString(color); - expect(result).toBe('rgba(255, 0, 0, 0.5)'); + expect(result).toBe("rgba(255, 0, 0, 0.5)"); }); - test('should round the alpha value to one decimal place', () => { + test("should round the alpha value to one decimal place", () => { const color: HexDecimalObject = { r: 255, g: 0, b: 0, a: 0.123 }; const result = toRgbString(color); - expect(result).toBe('rgba(255, 0, 0, 0.1)'); + expect(result).toBe("rgba(255, 0, 0, 0.1)"); }); - test('should round the alpha value correctly for different inputs', () => { + test("should round the alpha value correctly for different inputs", () => { const color1: HexDecimalObject = { r: 255, g: 0, b: 0, a: 0.666 }; const color2: HexDecimalObject = { r: 0, g: 255, b: 0, a: 0.999 }; const color3: HexDecimalObject = { r: 0, g: 0, b: 255, a: 0.333 }; - - expect(toRgbString(color1)).toBe('rgba(255, 0, 0, 0.7)'); - expect(toRgbString(color2)).toBe('rgba(0, 255, 0, 1)'); - expect(toRgbString(color3)).toBe('rgba(0, 0, 255, 0.3)'); + + expect(toRgbString(color1)).toBe("rgba(255, 0, 0, 0.7)"); + expect(toRgbString(color2)).toBe("rgba(0, 255, 0, 1)"); + expect(toRgbString(color3)).toBe("rgba(0, 0, 255, 0.3)"); }); - test('should handle full transparency', () => { + test("should handle full transparency", () => { const color: HexDecimalObject = { r: 255, g: 0, b: 0, a: 0 }; const result = toRgbString(color); - expect(result).toBe('rgba(255, 0, 0, 0)'); + expect(result).toBe("rgba(255, 0, 0, 0)"); }); - test('should handle full opacity', () => { + test("should handle full opacity", () => { const color: HexDecimalObject = { r: 255, g: 0, b: 0, a: 1 }; const result = toRgbString(color); - expect(result).toBe('rgba(255, 0, 0, 1)'); + expect(result).toBe("rgba(255, 0, 0, 1)"); }); }); diff --git a/src/adjustColor.ts b/src/adjustColor.ts index afbb7e3..d192474 100644 --- a/src/adjustColor.ts +++ b/src/adjustColor.ts @@ -1,14 +1,12 @@ import { applyAlphaToColor } from "./applyAlphaToColor"; import { canBeConvertedIntoColor } from "./canBeConvertedToColor"; -import { hexToRgb } from "./hexToRgb"; -import { hexToRgba } from "./hexToRgba"; + import { lightenColor } from "./lightenColor"; import { darkenColor } from "./darkenColor"; import { toHexColor } from "./toHexColor"; import { toRgbString } from "./toRgbString"; import { blendColors } from "./blendColors"; import { parseRgbString } from "./parseRgbString"; -import { HexObject, parseHex } from "./parseHex"; import { isValidHex } from "./isValidHex"; import { isValidRgb } from "./isValidRgb"; import { isValidRgba } from "./isValidRgba"; @@ -16,36 +14,40 @@ import { AlphaValue } from "./types/alpha-value.type"; import { ThemeType } from "./types/theme.type"; import { HexDecimalObject } from "./types/hex-decimal-object.interface"; import { hexesToDecimals, RgbWithAHexObject } from "./hexToDecimals"; +import { parseHex } from "./parseHex"; +import { NumberRange1To100 } from "./types/number-range-hundred.type"; export interface AdjustColorFunc { ( colorValue: string, - alphaValue: AlphaValue, + alphaValue: NumberRange1To100, mode: ThemeType, - cssColorNames?: string[] + cssColorNames?: string[], ): string; } -const defaultCssColorNames = ['transparent']; +const defaultCssColorNames = ["transparent"]; export const log = (message: string): void => { - if (typeof console !== 'undefined' && typeof console.log === 'function') { + if (typeof console !== "undefined" && typeof console.log === "function") { console.log(message); } }; export const adjustColor: AdjustColorFunc = ( colorValue: string, - alphaValue: AlphaValue, + alphaValue: NumberRange1To100, mode: ThemeType, - cssColorNames = defaultCssColorNames + cssColorNames = defaultCssColorNames, ): string => { try { if (cssColorNames.includes(colorValue)) return colorValue; if (alphaValue < 0 || alphaValue > 1) { - log('Alpha value should be between 0.0 and 1.0. Returning default color.'); - return '#FF0000'; // Default color (Red in this case) + log( + "Alpha value should be between 0.0 and 1.0. Returning default color.", + ); + return "#FF0000"; // Default color (Red in this case) } if (canBeConvertedIntoColor(colorValue)) { @@ -66,28 +68,41 @@ export const adjustColor: AdjustColorFunc = ( throw new Error("Failed to parse color"); } - const brightnessFactor = mode === 'light' ? 0.2 : -0.2; - color = mode === 'light' ? lightenColor(color, brightnessFactor) : darkenColor(color, brightnessFactor); + const brightnessFactor = mode === "light" ? 0.2 : -0.2; + color = + mode === "light" + ? lightenColor(color, brightnessFactor) + : darkenColor(color, brightnessFactor); const alphaScale = alphaValue; if (isValidHex(colorValue)) { - const mixedColor = blendColors(color, { r: 255, g: 255, b: 255 }, alphaScale); + const mixedColor = blendColors( + color, + { r: 255, g: 255, b: 255 }, + alphaScale, + ); return toHexColor(mixedColor); } else { const colorWithAlpha = applyAlphaToColor(color, alphaScale); return toRgbString(colorWithAlpha); } } else { - log(`Failed to convert ${colorValue} into a color. Returning default color.`); - return '#FF0000'; // Default color (Red in this case) + log( + `Failed to convert ${colorValue} into a color. Returning default color.`, + ); + return "#FF0000"; // Default color (Red in this case) } } catch (error) { if (error instanceof Error) { - log(`Error adjusting color with value: ${colorValue}. Returning default color. Error: ${error.message}`); + log( + `Error adjusting color with value: ${colorValue}. Returning default color. Error: ${error.message}`, + ); } else { - log(`Error adjusting color with value: ${colorValue}. Returning default color. Unknown error.`); + log( + `Error adjusting color with value: ${colorValue}. Returning default color. Unknown error.`, + ); } - return '#FF0000'; // Default color (Red in this case) + return "#FF0000"; // Default color (Red in this case) } }; diff --git a/src/applyAlphaToColor.ts b/src/applyAlphaToColor.ts index b6261be..a7edc95 100644 --- a/src/applyAlphaToColor.ts +++ b/src/applyAlphaToColor.ts @@ -2,5 +2,5 @@ export const applyAlphaToColor = ( color: { r: number; g: number; b: number; a?: number }, alphaValue: number, ): { r: number; g: number; b: number; a: number } => { - return { ...color, a: alphaValue } -} + return { ...color, a: alphaValue }; +}; diff --git a/src/blendColors.ts b/src/blendColors.ts index 67bec50..9457d83 100644 --- a/src/blendColors.ts +++ b/src/blendColors.ts @@ -1,14 +1,14 @@ import { HexDecimalObject } from "./types/hex-decimal-object.interface"; +import { NumberRange1To100 } from "./types/number-range-hundred.type"; export const blendColors = ( - color1: HexDecimalObject, - color2: { r: number; g: number; b: number }, - alphaScale: number, - ): HexDecimalObject=> { - return { - r: Math.round(color1.r * alphaScale + color2.r * (1 - alphaScale)), - g: Math.round(color1.g * alphaScale + color2.g * (1 - alphaScale)), - b: Math.round(color1.b * alphaScale + color2.b * (1 - alphaScale)), - } - } - \ No newline at end of file + color1: HexDecimalObject, + color2: { r: number; g: number; b: number }, + alphaScale: NumberRange1To100, +): HexDecimalObject => { + return { + r: Math.round(color1.r * alphaScale + color2.r * (1 - alphaScale)), + g: Math.round(color1.g * alphaScale + color2.g * (1 - alphaScale)), + b: Math.round(color1.b * alphaScale + color2.b * (1 - alphaScale)), + }; +}; diff --git a/src/canBeConvertedToColor.ts b/src/canBeConvertedToColor.ts index c28cbdb..2007fb3 100644 --- a/src/canBeConvertedToColor.ts +++ b/src/canBeConvertedToColor.ts @@ -1,9 +1,13 @@ -import { isHexColor } from './isHexColor'; -import { isValidHex } from './isValidHex'; -import { isValidRgb } from './isValidRgb'; -import { isValidRgba } from './isValidRgba'; +import { isValidHex } from "./isValidHex"; +import { isValidRgb } from "./isValidRgb"; +import { isValidRgba } from "./isValidRgba"; -export const canBeConvertedIntoColor = (colorValue: string, cssColorNames = ['transparent']): boolean => { +export const canBeConvertedIntoColor = ( + colorValue: string, + cssColorNames = ["transparent"], +): boolean => { if (cssColorNames.includes(colorValue)) return true; - return isValidHex(colorValue) || isValidRgb(colorValue) || isValidRgba(colorValue); + return ( + isValidHex(colorValue) || isValidRgb(colorValue) || isValidRgba(colorValue) + ); }; diff --git a/src/color.ts b/src/color.ts index b2c3486..1288ce1 100644 --- a/src/color.ts +++ b/src/color.ts @@ -1,19 +1,19 @@ -import { darkenColor } from './darkenColor'; -import { lightenColor } from './lightenColor'; -import { blendColors } from './blendColors'; -import { applyAlphaToColor } from './applyAlphaToColor'; -import { toHexColor } from './toHexColor'; -import { toRgbString } from './toRgbString'; -import { HexDecimalObject } from './types/hex-decimal-object.interface'; -import { hexToDecimal } from './hexToDecimals'; +import { darkenColor } from "./darkenColor"; +import { lightenColor } from "./lightenColor"; +import { blendColors } from "./blendColors"; +import { applyAlphaToColor } from "./applyAlphaToColor"; +import { toHexColor } from "./toHexColor"; +import { toRgbString } from "./toRgbString"; +import { HexDecimalObject } from "./types/hex-decimal-object.interface"; +import { hexToDecimal } from "./hexToDecimals"; export class Color { private color: HexDecimalObject; constructor(color: string | HexDecimalObject) { - if (typeof color === 'string') { + if (typeof color === "string") { // Parse the string into RGB (assume it's in the format '#RRGGBB' or '#RRGGBBAA') - const hex = color.replace('#', ''); + const hex = color.replace("#", ""); this.color = { r: hexToDecimal(hex.substring(0, 2)), g: hexToDecimal(hex.substring(2, 4)), diff --git a/src/colorCodes.txt b/src/colorCodes.txt new file mode 100644 index 0000000..1179625 --- /dev/null +++ b/src/colorCodes.txt @@ -0,0 +1,1110 @@ +Color.Name,Hex.Code,Dec.Code,X.Code,HSL.Code,CMYK.Code +black (Safe 16 SVG Hex3),#000000,"rgb(0, 0, 0)","rgb(0%, 0%, 0%)","hsl(0, 0%, 0%)","cmyk(0%, 0%, 0%, 100%)" +gray1,#030303,"rgb(3, 3, 3)","rgb(1%, 1%, 1%)","hsl(0, 0%, 1%)","cmyk(0%, 0%, 0%, 99%)" +gray2,#050505,"rgb(5, 5, 5)","rgb(2%, 2%, 2%)","hsl(0, 0%, 2%)","cmyk(0%, 0%, 0%, 98%)" +gray3,#080808,"rgb(8, 8, 8)","rgb(3%, 3%, 3%)","hsl(0, 0%, 3%)","cmyk(0%, 0%, 0%, 97%)" +gray4,#0A0A0A,"rgb(10, 10, 10)","rgb(4%, 4%, 4%)","hsl(0, 0%, 4%)","cmyk(0%, 0%, 0%, 96%)" +gray5,#0D0D0D,"rgb(13, 13, 13)","rgb(5%, 5%, 5%)","hsl(0, 0%, 5%)","cmyk(0%, 0%, 0%, 95%)" +gray6,#0F0F0F,"rgb(15, 15, 15)","rgb(6%, 6%, 6%)","hsl(0, 0%, 6%)","cmyk(0%, 0%, 0%, 94%)" +gray7,#121212,"rgb(18, 18, 18)","rgb(7%, 7%, 7%)","hsl(0, 0%, 7%)","cmyk(0%, 0%, 0%, 93%)" +gray8,#141414,"rgb(20, 20, 20)","rgb(8%, 8%, 8%)","hsl(0, 0%, 8%)","cmyk(0%, 0%, 0%, 92%)" +gray9,#171717,"rgb(23, 23, 23)","rgb(9%, 9%, 9%)","hsl(0, 0%, 9%)","cmyk(0%, 0%, 0%, 91%)" +gray10,#1A1A1A,"rgb(26, 26, 26)","rgb(10%, 10%, 10%)","hsl(0, 0%, 10%)","cmyk(0%, 0%, 0%, 90%)" +gray11,#1C1C1C,"rgb(28, 28, 28)","rgb(11%, 11%, 11%)","hsl(0, 0%, 11%)","cmyk(0%, 0%, 0%, 89%)" +gray12,#1F1F1F,"rgb(31, 31, 31)","rgb(12%, 12%, 12%)","hsl(0, 0%, 12%)","cmyk(0%, 0%, 0%, 88%)" +gray13,#212121,"rgb(33, 33, 33)","rgb(13%, 13%, 13%)","hsl(0, 0%, 13%)","cmyk(0%, 0%, 0%, 87%)" +gray14,#242424,"rgb(36, 36, 36)","rgb(14%, 14%, 14%)","hsl(0, 0%, 14%)","cmyk(0%, 0%, 0%, 86%)" +gray15,#262626,"rgb(38, 38, 38)","rgb(15%, 15%, 15%)","hsl(0, 0%, 15%)","cmyk(0%, 0%, 0%, 85%)" +gray16,#292929,"rgb(41, 41, 41)","rgb(16%, 16%, 16%)","hsl(0, 0%, 16%)","cmyk(0%, 0%, 0%, 84%)" +gray17,#2B2B2B,"rgb(43, 43, 43)","rgb(17%, 17%, 17%)","hsl(0, 0%, 17%)","cmyk(0%, 0%, 0%, 83%)" +gray18,#2E2E2E,"rgb(46, 46, 46)","rgb(18%, 18%, 18%)","hsl(0, 0%, 18%)","cmyk(0%, 0%, 0%, 82%)" +gray19,#303030,"rgb(48, 48, 48)","rgb(19%, 19%, 19%)","hsl(0, 0%, 19%)","cmyk(0%, 0%, 0%, 81%)" +gray20 (Safe Hex3),#333333,"rgb(51, 51, 51)","rgb(20%, 20%, 20%)","hsl(0, 0%, 20%)","cmyk(0%, 0%, 0%, 80%)" +gray21,#363636,"rgb(54, 54, 54)","rgb(21%, 21%, 21%)","hsl(0, 0%, 21%)","cmyk(0%, 0%, 0%, 79%)" +gray22,#383838,"rgb(56, 56, 56)","rgb(22%, 22%, 22%)","hsl(0, 0%, 22%)","cmyk(0%, 0%, 0%, 78%)" +gray23,#3B3B3B,"rgb(59, 59, 59)","rgb(23%, 23%, 23%)","hsl(0, 0%, 23%)","cmyk(0%, 0%, 0%, 77%)" +gray24,#3D3D3D,"rgb(61, 61, 61)","rgb(24%, 24%, 24%)","hsl(0, 0%, 24%)","cmyk(0%, 0%, 0%, 76%)" +gray25,#404040,"rgb(64, 64, 64)","rgb(25%, 25%, 25%)","hsl(0, 0%, 25%)","cmyk(0%, 0%, 0%, 75%)" +gray26,#424242,"rgb(66, 66, 66)","rgb(26%, 26%, 26%)","hsl(0, 0%, 26%)","cmyk(0%, 0%, 0%, 74%)" +gray27,#454545,"rgb(69, 69, 69)","rgb(27%, 27%, 27%)","hsl(0, 0%, 27%)","cmyk(0%, 0%, 0%, 73%)" +gray28,#474747,"rgb(71, 71, 71)","rgb(28%, 28%, 28%)","hsl(0, 0%, 28%)","cmyk(0%, 0%, 0%, 72%)" +gray29,#4A4A4A,"rgb(74, 74, 74)","rgb(29%, 29%, 29%)","hsl(0, 0%, 29%)","cmyk(0%, 0%, 0%, 71%)" +gray30,#4D4D4D,"rgb(77, 77, 77)","rgb(30%, 30%, 30%)","hsl(0, 0%, 30%)","cmyk(0%, 0%, 0%, 70%)" +gray31,#4F4F4F,"rgb(79, 79, 79)","rgb(31%, 31%, 31%)","hsl(0, 0%, 31%)","cmyk(0%, 0%, 0%, 69%)" +gray32,#525252,"rgb(82, 82, 82)","rgb(32%, 32%, 32%)","hsl(0, 0%, 32%)","cmyk(0%, 0%, 0%, 68%)" +gray33 (Hex3),#555555,"rgb(85, 85, 85)","rgb(33%, 33%, 33%)","hsl(0, 0%, 33%)","cmyk(0%, 0%, 0%, 67%)" +gray34,#575757,"rgb(87, 87, 87)","rgb(34%, 34%, 34%)","hsl(0, 0%, 34%)","cmyk(0%, 0%, 0%, 66%)" +gray35,#595959,"rgb(89, 89, 89)",,"rgb(35%, 35%, 35%)","hsl(0, 0%, 35%)","cmyk(0%, 0%, 0%, 65%)" +gray36,#5C5C5C,"rgb(92, 92, 92)","rgb(36%, 36%, 36%)","hsl(0, 0%, 36%)","cmyk(0%, 0%, 0%, 64%)" +gray37,#5E5E5E,"rgb(94, 94, 94)","rgb(37%, 37%, 37%)","hsl(0, 0%, 37%)","cmyk(0%, 0%, 0%, 63%)" +gray38,#616161,"rgb(97, 97, 97)","rgb(38%, 38%, 38%)","hsl(0, 0%, 38%)","cmyk(0%, 0%, 0%, 62%)" +gray39,#636363,"rgb(99, 99, 99)","rgb(39%, 39%, 39%)","hsl(0, 0%, 39%)","cmyk(0%, 0%, 0%, 61%)" +gray40 (Safe Hex3),#666666,"rgb(102, 102, 102)","rgb(40%, 40%, 40%)","hsl(0, 0%, 40%)","cmyk(0%, 0%, 0%, 60%)" +dimgray (SVG),#696969,"rgb(105, 105, 105)","rgb(41%, 41%, 41%)","hsl(0, 0%, 41%)","cmyk(0%, 0%, 0%, 59%)" +dimgrey (SVG),#696969,"rgb(105, 105, 105)","rgb(41%, 41%, 41%)","hsl(0, 0%, 41%)","cmyk(0%, 0%, 0%, 59%)" +gray42,#6B6B6B,"rgb(107, 107, 107)","rgb(42%, 42%, 42%)","hsl(0, 0%, 42%)","cmyk(0%, 0%, 0%, 58%)" +gray43,#6E6E6E,"rgb(110, 110, 110)","rgb(43%, 43%, 43%)","hsl(0, 0%, 43%)","cmyk(0%, 0%, 0%, 57%)" +gray44,#707070,"rgb(112, 112, 112)","rgb(44%, 44%, 44%)","hsl(0, 0%, 44%)","cmyk(0%, 0%, 0%, 56%)" +gray45,#737373,"rgb(115, 115, 115)","rgb(45%, 45%, 45%)","hsl(0, 0%, 45%)","cmyk(0%, 0%, 0%, 55%)" +gray46,#757575,"rgb(117, 117, 117)","rgb(46%, 46%, 46%)","hsl(0, 0%, 46%)","cmyk(0%, 0%, 0%, 54%)" +gray47,#787878,"rgb(120, 120, 120)","rgb(47%, 47%, 47%)","hsl(0, 0%, 47%)","cmyk(0%, 0%, 0%, 53%)" +gray48,#7A7A7A,"rgb(122, 122, 122)","rgb(48%, 48%, 48%)","hsl(0, 0%, 48%)","cmyk(0%, 0%, 0%, 52%)" +gray49,#7D7D7D,"rgb(125, 125, 125)","rgb(49%, 49%, 49%)","hsl(0, 0%, 49%)","cmyk(0%, 0%, 0%, 51%)" +grey (16 SVG),#808080,"rgb(128, 128, 128)","rgb(50%, 50%, 50%)","hsl(0, 0%, 50%)","cmyk(0%, 0%, 0%, 50%)" +gray50,#7F7F7F,"rgb(127, 127, 127)","rgb(50%, 50%, 50%)","hsl(0, 0%, 50%)","cmyk(0%, 0%, 0%, 50%)" +gray (16 SVG),#808080,"rgb(128, 128, 128)","rgb(50%, 50%, 50%)","hsl(0, 0%, 50%)","cmyk(0%, 0%, 0%, 50%)" +gray51,#828282,"rgb(130, 130, 130)","rgb(51%, 51%, 51%)","hsl(0, 0%, 51%)","cmyk(0%, 0%, 0%, 49%)" +gray52,#858585,"rgb(133, 133, 133)","rgb(52%, 52%, 52%)","hsl(0, 0%, 52%)","cmyk(0%, 0%, 0%, 48%)" +gray53,#878787,"rgb(135, 135, 135)","rgb(53%, 53%, 53%)","hsl(0, 0%, 53%)","cmyk(0%, 0%, 0%, 47%)" +gray54,#8A8A8A,"rgb(138, 138, 138)","rgb(54%, 54%, 54%)","hsl(0, 0%, 54%)","cmyk(0%, 0%, 0%, 46%)" +gray55,#8C8C8C,"rgb(140, 140, 140)","rgb(55%, 55%, 55%)","hsl(0, 0%, 55%)","cmyk(0%, 0%, 0%, 45%)" +gray56,#8F8F8F,"rgb(143, 143, 143)","rgb(56%, 56%, 56%)","hsl(0, 0%, 56%)","cmyk(0%, 0%, 0%, 44%)" +gray57,#919191,"rgb(145, 145, 145)","rgb(57%, 57%, 57%)","hsl(0, 0%, 57%)","cmyk(0%, 0%, 0%, 43%)" +gray58,#949494,"rgb(148, 148, 148)","rgb(58%, 58%, 58%)","hsl(0, 0%, 58%)","cmyk(0%, 0%, 0%, 42%)" +gray59,#969696,"rgb(150, 150, 150)","rgb(59%, 59%, 59%)","hsl(0, 0%, 59%)","cmyk(0%, 0%, 0%, 41%)" +gray60 (Safe Hex3),#999999,"rgb(153, 153, 153)","rgb(60%, 60%, 60%)","hsl(0, 0%, 60%)","cmyk(0%, 0%, 0%, 40%)" +gray61,#9C9C9C,"rgb(156, 156, 156)","rgb(61%, 61%, 61%)","hsl(0, 0%, 61%)","cmyk(0%, 0%, 0%, 39%)" +gray62,#9E9E9E,"rgb(158, 158, 158)","rgb(62%, 62%, 62%)","hsl(0, 0%, 62%)","cmyk(0%, 0%, 0%, 38%)" +gray63,#A1A1A1,"rgb(161, 161, 161)","rgb(63%, 63%, 63%)","hsl(0, 0%, 63%)","cmyk(0%, 0%, 0%, 37%)" +gray64,#A3A3A3,"rgb(163, 163, 163)","rgb(64%, 64%, 64%)","hsl(0, 0%, 64%)","cmyk(0%, 0%, 0%, 36%)" +gray65,#A6A6A6,"rgb(166, 166, 166)","rgb(65%, 65%, 65%)","hsl(0, 0%, 65%)","cmyk(0%, 0%, 0%, 35%)" +darkgrey (SVG),#A9A9A9,"rgb(169, 169, 169)","rgb(66%, 66%, 66%)","hsl(0, 0%, 66%)","cmyk(0%, 0%, 0%, 34%)" +gray66,#A8A8A8,"rgb(168, 168, 168)","rgb(66%, 66%, 66%)","hsl(0, 0%, 66%)","cmyk(0%, 0%, 0%, 34%)" +darkgray (SVG),#A9A9A9,"rgb(169, 169, 169)","rgb(66%, 66%, 66%)","hsl(0, 0%, 66%)","cmyk(0%, 0%, 0%, 34%)" +gray67,#ABABAB,"rgb(171, 171, 171)","rgb(67%, 67%, 67%)","hsl(0, 0%, 67%)","cmyk(0%, 0%, 0%, 33%)" +sgilight gray (Hex3),#AAAAAA,"rgb(170, 170, 170)","rgb(67%, 67%, 67%)","hsl(0, 0%, 67%)","cmyk(0%, 0%, 0%, 33%)" +gray68,#ADADAD,"rgb(173, 173, 173)","rgb(68%, 68%, 68%)","hsl(0, 0%, 68%)","cmyk(0%, 0%, 0%, 32%)" +gray69,#B0B0B0,"rgb(176, 176, 176)","rgb(69%, 69%, 69%)","hsl(0, 0%, 69%)","cmyk(0%, 0%, 0%, 31%)" +gray70,#B3B3B3,"rgb(179, 179, 179)","rgb(70%, 70%, 70%)","hsl(0, 0%, 70%)","cmyk(0%, 0%, 0%, 30%)" +gray71,#B5B5B5,"rgb(181, 181, 181)","rgb(71%, 71%, 71%)","hsl(0, 0%, 71%)","cmyk(0%, 0%, 0%, 29%)" +gray72,#B8B8B8,"rgb(184, 184, 184)","rgb(72%, 72%, 72%)","hsl(0, 0%, 72%)","cmyk(0%, 0%, 0%, 28%)" +gray73,#BABABA,"rgb(186, 186, 186)","rgb(73%, 73%, 73%)","hsl(0, 0%, 73%)","cmyk(0%, 0%, 0%, 27%)" +gray74,#BDBDBD,"rgb(189, 189, 189)","rgb(74%, 74%, 74%)","hsl(0, 0%, 74%)","cmyk(0%, 0%, 0%, 26%)" +silver (16 SVG),#C0C0C0,"rgb(192, 192, 192)","rgb(75%, 75%, 75%)","hsl(0, 0%, 75%)","cmyk(0%, 0%, 0%, 25%)" +gray,#BEBEBE,"rgb(190, 190, 190)","rgb(75%, 75%, 75%)","hsl(0, 0%, 75%)","cmyk(0%, 0%, 0%, 25%)" +gray75,#BFBFBF,"rgb(191, 191, 191)","rgb(75%, 75%, 75%)","hsl(0, 0%, 75%)","cmyk(0%, 0%, 0%, 25%)" +gray76,#C2C2C2,"rgb(194, 194, 194)","rgb(76%, 76%, 76%)","hsl(0, 0%, 76%)","cmyk(0%, 0%, 0%, 24%)" +gray77,#C4C4C4,"rgb(196, 196, 196)","rgb(77%, 77%, 77%)","hsl(0, 0%, 77%)","cmyk(0%, 0%, 0%, 23%)" +gray78,#C7C7C7,"rgb(199, 199, 199)","rgb(78%, 78%, 78%)","hsl(0, 0%, 78%)","cmyk(0%, 0%, 0%, 22%)" +gray79,#C9C9C9,"rgb(201, 201, 201)","rgb(79%, 79%, 79%)","hsl(0, 0%, 79%)","cmyk(0%, 0%, 0%, 21%)" +verylight grey,#CDCDCD,"rgb(205, 205, 205)","rgb(80%, 80%, 80%)","hsl(0, 0%, 80%)","cmyk(0%, 0%, 0%, 20%)" +gray80 (Safe Hex3),#CCCCCC,"rgb(204, 204, 204)","rgb(80%, 80%, 80%)","hsl(0, 0%, 80%)","cmyk(0%, 0%, 0%, 20%)" +gray81,#CFCFCF,"rgb(207, 207, 207)","rgb(81%, 81%, 81%)","hsl(0, 0%, 81%)","cmyk(0%, 0%, 0%, 19%)" +gray82,#D1D1D1,"rgb(209, 209, 209)","rgb(82%, 82%, 82%)","hsl(0, 0%, 82%)","cmyk(0%, 0%, 0%, 18%)" +gray83,#D4D4D4,"rgb(212, 212, 212)","rgb(83%, 83%, 83%)","hsl(0, 0%, 83%)","cmyk(0%, 0%, 0%, 17%)" +lightgrey (SVG),#D3D3D3,"rgb(211, 211, 211)","rgb(83%, 83%, 83%)","hsl(0, 0%, 83%)","cmyk(0%, 0%, 0%, 17%)" +lightgray (SVG),#D3D3D3,"rgb(211, 211, 211)","rgb(83%, 83%, 83%)","hsl(0, 0%, 83%)","cmyk(0%, 0%, 0%, 17%)" +gray84,#D6D6D6,"rgb(214, 214, 214)","rgb(84%, 84%, 84%)","hsl(0, 0%, 84%)","cmyk(0%, 0%, 0%, 16%)" +gray85,#D9D9D9,"rgb(217, 217, 217)","rgb(85%, 85%, 85%)","hsl(0, 0%, 85%)","cmyk(0%, 0%, 0%, 15%)" +gainsboro (SVG),#DCDCDC,"rgb(220, 220, 220)","rgb(86%, 86%, 86%)","hsl(0, 0%, 86%)","cmyk(0%, 0%, 0%, 14%)" +gray86,#DBDBDB,"rgb(219, 219, 219)","rgb(86%, 86%, 86%)","hsl(0, 0%, 86%)","cmyk(0%, 0%, 0%, 14%)" +gray87,#DEDEDE,"rgb(222, 222, 222)","rgb(87%, 87%, 87%)","hsl(0, 0%, 87%)","cmyk(0%, 0%, 0%, 13%)" +gray88,#E0E0E0,"rgb(224, 224, 224)","rgb(88%, 88%, 88%)","hsl(0, 0%, 88%)","cmyk(0%, 0%, 0%, 12%)" +gray89,#E3E3E3,"rgb(227, 227, 227)","rgb(89%, 89%, 89%)","hsl(0, 0%, 89%)","cmyk(0%, 0%, 0%, 11%)" +gray90,#E5E5E5,"rgb(229, 229, 229)","rgb(90%, 90%, 90%)","hsl(0, 0%, 90%)","cmyk(0%, 0%, 0%, 10%)" +gray91,#E8E8E8,"rgb(232, 232, 232)","rgb(91%, 91%, 91%)","hsl(0, 0%, 91%)","cmyk(0%, 0%, 0%, 9%)" +gray92,#EBEBEB,"rgb(235, 235, 235)","rgb(92%, 92%, 92%)","hsl(0, 0%, 92%)","cmyk(0%, 0%, 0%, 8%)" +gray93,#EDEDED,"rgb(237, 237, 237)","rgb(93%, 93%, 93%)","hsl(0, 0%, 93%)","cmyk(0%, 0%, 0%, 7%)" +gray94,#F0F0F0,"rgb(240, 240, 240)","rgb(94%, 94%, 94%)","hsl(0, 0%, 94%)","cmyk(0%, 0%, 0%, 6%)" +gray95,#F2F2F2,"rgb(242, 242, 242)","rgb(95%, 95%, 95%)","hsl(0, 0%, 95%)","cmyk(0%, 0%, 0%, 5%)" +whitesmoke (SVG),#F5F5F5,"rgb(245, 245, 245)","rgb(96%, 96%, 96%)","hsl(0, 0%, 96%)","cmyk(0%, 0%, 0%, 4%)" +gray97,#F7F7F7,"rgb(247, 247, 247)","rgb(97%, 97%, 97%)","hsl(0, 0%, 97%)","cmyk(0%, 0%, 0%, 3%)" +gray98,#FAFAFA,"rgb(250, 250, 250)","rgb(98%, 98%, 98%)","hsl(0, 0%, 98%)","cmyk(0%, 0%, 0%, 2%)" +gray99,#FCFCFC,"rgb(252, 252, 252)","rgb(99%, 99%, 99%)","hsl(0, 0%, 99%)","cmyk(0%, 0%, 0%, 1%)" +white (Safe 16 SVG Hex3),#FFFFFF,"rgb(255, 255, 255)","rgb(100%, 100%, 100%)","hsl(0, 0%, 100%)","cmyk(0%, 0%, 0%, 0%)" +snow4,#8B8989,"rgb(139, 137, 137)","rgb(55%, 54%, 54%)","hsl(0, 1%, 54%)","cmyk(0%, 1%, 1%, 45%)" +snow3,#CDC9C9,"rgb(205, 201, 201)","rgb(80%, 79%, 79%)","hsl(0, 4%, 80%)","cmyk(0%, 2%, 2%, 20%)" +snow2,#EEE9E9,"rgb(238, 233, 233)","rgb(93%, 91%, 91%)","hsl(0, 13%, 92%)","cmyk(0%, 2%, 2%, 7%)" +rosybrown4,#8B6969,"rgb(139, 105, 105)","rgb(55%, 41%, 41%)","hsl(0, 14%, 48%)","cmyk(0%, 24%, 24%, 45%)" +dustyrose,#856363,"rgb(133, 99, 99)","rgb(52%, 39%, 39%)","hsl(0, 15%, 45%)","cmyk(0%, 26%, 26%, 48%)" +salmon5,#6F4242,"rgb(111, 66, 66)","rgb(44%, 26%, 26%)","hsl(0, 25%, 35%)","cmyk(0%, 41%, 41%, 56%)" +rosybrown (SVG),#BC8F8F,"rgb(188, 143, 143)","rgb(74%, 56%, 56%)","hsl(0, 25%, 65%)","cmyk(0%, 24%, 24%, 26%)" +rosybrown3,#CD9B9B,"rgb(205, 155, 155)","rgb(80%, 61%, 61%)","hsl(0, 33%, 71%)","cmyk(0%, 24%, 24%, 20%)" +indianred4,#8B3A3A,"rgb(139, 58, 58)","rgb(55%, 23%, 23%)","hsl(0, 41%, 39%)","cmyk(0%, 58%, 58%, 45%)" +sgisalmon,#C67171,"rgb(198, 113, 113)","rgb(78%, 44%, 44%)","hsl(0, 43%, 61%)","cmyk(0%, 43%, 43%, 22%)" +brown,#802A2A,"rgb(128, 42, 42)","rgb(50%, 16%, 16%)","hsl(0, 51%, 33%)","cmyk(0%, 67%, 67%, 50%)" +indianred (SVG),#CD5C5C,"rgb(205, 92, 92)","rgb(80%, 36%, 36%)","hsl(0, 53%, 58%)","cmyk(0%, 55%, 55%, 20%)" +indianred3,#CD5555,"rgb(205, 85, 85)","rgb(80%, 33%, 33%)","hsl(0, 55%, 57%)","cmyk(0%, 59%, 59%, 20%)" +brown (SVG),#A52A2A,"rgb(165, 42, 42)","rgb(65%, 16%, 16%)","hsl(0, 59%, 41%)","cmyk(0%, 75%, 75%, 35%)" +brown4,#8B2323,"rgb(139, 35, 35)","rgb(55%, 14%, 14%)","hsl(0, 60%, 34%)","cmyk(0%, 75%, 75%, 45%)" +firebrick5,#8E2323,"rgb(142, 35, 35)","rgb(56%, 14%, 14%)","hsl(0, 60%, 35%)","cmyk(0%, 75%, 75%, 44%)" +brown,#A62A2A,"rgb(166, 42, 42)","rgb(65%, 16%, 16%)","hsl(0, 60%, 41%)","cmyk(0%, 75%, 75%, 35%)" +brown3,#CD3333,"rgb(205, 51, 51)","rgb(80%, 20%, 20%)","hsl(0, 61%, 50%)","cmyk(0%, 75%, 75%, 20%)" +orange,#CC3232,"rgb(204, 50, 50)","rgb(80%, 20%, 20%)","hsl(0, 61%, 50%)","cmyk(0%, 75%, 75%, 20%)" +rosybrown2,#EEB4B4,"rgb(238, 180, 180)","rgb(93%, 71%, 71%)","hsl(0, 63%, 82%)","cmyk(0%, 24%, 24%, 7%)" +strawberry,#BE2625,"rgb(190, 38, 37)","rgb(75%, 15%, 15%)","hsl(0, 67%, 45%)","cmyk(0%, 80%, 81%, 25%)" +firebrick4,#8B1A1A,"rgb(139, 26, 26)","rgb(55%, 10%, 10%)","hsl(0, 68%, 32%)","cmyk(0%, 81%, 81%, 45%)" +firebrick (SVG),#B22222,"rgb(178, 34, 34)","rgb(70%, 13%, 13%)","hsl(0, 68%, 42%)","cmyk(0%, 81%, 81%, 30%)" +firebrick3,#CD2626,"rgb(205, 38, 38)","rgb(80%, 15%, 15%)","hsl(0, 69%, 48%)","cmyk(0%, 81%, 81%, 20%)" +brownmadder,#DB2929,"rgb(219, 41, 41)","rgb(86%, 16%, 16%)","hsl(0, 71%, 51%)","cmyk(0%, 81%, 81%, 14%)" +scarlet,#8C1717,"rgb(140, 23, 23)","rgb(55%, 9%, 9%)","hsl(0, 72%, 32%)","cmyk(0%, 84%, 84%, 45%)" +lightcoral (SVG),#F08080,"rgb(240, 128, 128)","rgb(94%, 50%, 50%)","hsl(0, 79%, 72%)","cmyk(0%, 47%, 47%, 6%)" +indianred2,#EE6363,"rgb(238, 99, 99)","rgb(93%, 39%, 39%)","hsl(0, 80%, 66%)","cmyk(0%, 58%, 58%, 7%)" +brown2,#EE3B3B,"rgb(238, 59, 59)","rgb(93%, 23%, 23%)","hsl(0, 84%, 58%)","cmyk(0%, 75%, 75%, 7%)" +firebrick2,#EE2C2C,"rgb(238, 44, 44)","rgb(93%, 17%, 17%)","hsl(0, 85%, 55%)","cmyk(0%, 82%, 82%, 7%)" +darkcherryred (Safe Hex3),#330000,"rgb(51, 0, 0)","rgb(20%, 0%, 0%)","hsl(0, 100%, 10%)","cmyk(0%, 100%, 100%, 80%)" +bloodred (Safe Hex3),#660000,"rgb(102, 0, 0)","rgb(40%, 0%, 0%)","hsl(0, 100%, 20%)","cmyk(0%, 100%, 100%, 60%)" +maroon (16 SVG),#800000,"rgb(128, 0, 0)","rgb(50%, 0%, 0%)","hsl(0, 100%, 25%)","cmyk(0%, 100%, 100%, 50%)" +darkred (SVG),#8B0000,"rgb(139, 0, 0)","rgb(55%, 0%, 0%)","hsl(0, 100%, 27%)","cmyk(0%, 100%, 100%, 45%)" +red3,#CD0000,"rgb(205, 0, 0)","rgb(80%, 0%, 0%)","hsl(0, 100%, 40%)","cmyk(0%, 100%, 100%, 20%)" +red2 (Hex3),#EE0000,"rgb(238, 0, 0)","rgb(93%, 0%, 0%)","hsl(0, 100%, 47%)","cmyk(0%, 100%, 100%, 7%)" +red (Safe 16 SVG Hex3),#FF0000,"rgb(255, 0, 0)","rgb(100%, 0%, 0%)","hsl(0, 100%, 50%)","cmyk(0%, 100%, 100%, 0%)" +firebrick1,#FF3030,"rgb(255, 48, 48)","rgb(100%, 19%, 19%)","hsl(0, 100%, 59%)","cmyk(0%, 81%, 81%, 0%)" +novascotia salmon (Safe Hex3),#FF3333,"rgb(255, 51, 51)","rgb(100%, 20%, 20%)","hsl(0, 100%, 60%)","cmyk(0%, 80%, 80%, 0%)" +orangered4,#FF4040,"rgb(255, 64, 64)","rgb(100%, 25%, 25%)","hsl(0, 100%, 63%)","cmyk(0%, 75%, 75%, 0%)" +seattle salmon (Safe Hex3),#FF6666,"rgb(255, 102, 102)","rgb(100%, 40%, 40%)","hsl(0, 100%, 70%)","cmyk(0%, 60%, 60%, 0%)" +indianred1,#FF6A6A,"rgb(255, 106, 106)","rgb(100%, 42%, 42%)","hsl(0, 100%, 71%)","cmyk(0%, 58%, 58%, 0%)" +rosybrown1,#FFC1C1,"rgb(255, 193, 193)","rgb(100%, 76%, 76%)","hsl(0, 100%, 88%)","cmyk(0%, 24%, 24%, 0%)" +flatpink (Safe Hex3),#FFCCCC,"rgb(255, 204, 204)","rgb(100%, 80%, 80%)","hsl(0, 100%, 90%)","cmyk(0%, 20%, 20%, 0%)" +snow (SVG),#FFFAFA,"rgb(255, 250, 250)","rgb(100%, 98%, 98%)","hsl(0, 100%, 99%)","cmyk(0%, 2%, 2%, 0%)" +bing cherry,#A02422,"rgb(160, 36, 34)","rgb(63%, 14%, 13%)","hsl(1, 65%, 38%)","cmyk(0%, 77%, 79%, 37%)" +bacon,#C65D57,"rgb(198, 93, 87)","rgb(78%, 36%, 34%)","hsl(3, 49%, 56%)","cmyk(0%, 53%, 56%, 22%)" +chili,#D44942,"rgb(212, 73, 66)","rgb(83%, 29%, 26%)","hsl(3, 63%, 55%)","cmyk(0%, 66%, 69%, 17%)" +watermelon pulp,#F2473F,"rgb(242, 71, 63)","rgb(95%, 28%, 25%)","hsl(3, 87%, 60%)","cmyk(0%, 71%, 74%, 5%)" +cadmiumreddeep,#E3170D,"rgb(227, 23, 13)","rgb(89%, 9%, 5%)","hsl(3, 89%, 47%)","cmyk(0%, 90%, 94%, 11%)" +red delicious apple,#9D1309,"rgb(157, 19, 9)","rgb(62%, 7%, 4%)","hsl(4, 89%, 33%)","cmyk(0%, 88%, 94%, 38%)" +mistyrose3,#CDB7B5,"rgb(205, 183, 181)","rgb(80%, 72%, 71%)","hsl(5, 19%, 76%)","cmyk(0%, 11%, 12%, 20%)" +cola,#AF4035,"rgb(175, 64, 53)","rgb(69%, 25%, 21%)","hsl(5, 54%, 45%)","cmyk(0%, 63%, 70%, 31%)" +piglet snout,#ECC3BF,"rgb(236, 195, 191)","rgb(93%, 76%, 75%)","hsl(5, 54%, 84%)","cmyk(0%, 17%, 19%, 7%)" +gummi red,#FC1501,"rgb(252, 21, 1)","rgb(99%, 8%, 0%)","hsl(5, 99%, 50%)","cmyk(0%, 92%, 100%, 1%)" +bloodorange (Hex3),#CC1100,"rgb(204, 17, 0)","rgb(80%, 7%, 0%)","hsl(5, 100%, 40%)","cmyk(0%, 92%, 100%, 20%)" +mistyrose2,#EED5D2,"rgb(238, 213, 210)","rgb(93%, 84%, 82%)","hsl(6, 45%, 88%)","cmyk(0%, 11%, 12%, 7%)" +salmon (SVG),#FA8072,"rgb(250, 128, 114)","rgb(98%, 50%, 45%)","hsl(6, 93%, 71%)","cmyk(0%, 49%, 54%, 2%)" +mistyrose (SVG),#FFE4E1,"rgb(255, 228, 225)","rgb(100%, 89%, 88%)","hsl(6, 100%, 94%)","cmyk(0%, 11%, 12%, 0%)" +mistyrose4,#8B7D7B,"rgb(139, 125, 123)","rgb(55%, 49%, 48%)","hsl(7, 6%, 51%)","cmyk(0%, 10%, 12%, 45%)" +fuji apple,#D66F62,"rgb(214, 111, 98)","rgb(84%, 44%, 38%)","hsl(7, 59%, 61%)","cmyk(0%, 48%, 54%, 16%)" +red roof,#C75D4D,"rgb(199, 93, 77)","rgb(78%, 36%, 30%)","hsl(8, 52%, 54%)","cmyk(0%, 53%, 61%, 22%)" +orangered,#FF2400,"rgb(255, 36, 0)","rgb(100%, 14%, 0%)","hsl(8, 100%, 50%)","cmyk(0%, 86%, 100%, 0%)" +burntumber,#8A3324,"rgb(138, 51, 36)","rgb(54%, 20%, 14%)","hsl(9, 59%, 34%)","cmyk(0%, 63%, 74%, 46%)" +tomato3,#CD4F39,"rgb(205, 79, 57)","rgb(80%, 31%, 22%)","hsl(9, 60%, 51%)","cmyk(0%, 61%, 72%, 20%)" +tomato2,#EE5C42,"rgb(238, 92, 66)","rgb(93%, 36%, 26%)","hsl(9, 83%, 60%)","cmyk(0%, 61%, 72%, 7%)" +safety cone,#FF5333,"rgb(255, 83, 51)","rgb(100%, 33%, 20%)","hsl(9, 100%, 60%)","cmyk(0%, 67%, 80%, 0%)" +tomato (SVG),#FF6347,"rgb(255, 99, 71)","rgb(100%, 39%, 28%)","hsl(9, 100%, 64%)","cmyk(0%, 61%, 72%, 0%)" +manatee gray,#B0A6A4,"rgb(176, 166, 164)","rgb(69%, 65%, 64%)","hsl(10, 7%, 67%)","cmyk(0%, 6%, 7%, 31%)" +coral4,#8B3E2F,"rgb(139, 62, 47)","rgb(55%, 24%, 18%)","hsl(10, 49%, 36%)","cmyk(0%, 55%, 66%, 45%)" +tomato4,#8B3626,"rgb(139, 54, 38)","rgb(55%, 21%, 15%)","hsl(10, 57%, 35%)","cmyk(0%, 61%, 73%, 45%)" +coral3,#CD5B45,"rgb(205, 91, 69)","rgb(80%, 36%, 27%)","hsl(10, 58%, 54%)","cmyk(0%, 56%, 66%, 20%)" +coral2,#EE6A50,"rgb(238, 106, 80)","rgb(93%, 42%, 31%)","hsl(10, 82%, 62%)","cmyk(0%, 55%, 66%, 7%)" +coral1,#FF7256,"rgb(255, 114, 86)","rgb(100%, 45%, 34%)","hsl(10, 100%, 67%)","cmyk(0%, 55%, 66%, 0%)" +jonathan apple,#B3432B,"rgb(179, 67, 43)","rgb(70%, 26%, 17%)","hsl(11, 61%, 44%)","cmyk(0%, 63%, 76%, 30%)" +englishred,#D43D1A,"rgb(212, 61, 26)","rgb(83%, 24%, 10%)","hsl(11, 78%, 47%)","cmyk(0%, 71%, 88%, 17%)" +pummelo pulp,#F5785A,"rgb(245, 120, 90)","rgb(96%, 47%, 35%)","hsl(12, 89%, 66%)","cmyk(0%, 51%, 63%, 4%)" +nectarine (Safe Hex3),#FF3300,"rgb(255, 51, 0)","rgb(100%, 20%, 0%)","hsl(12, 100%, 50%)","cmyk(0%, 80%, 100%, 0%)" +greenishumber,#FF3D0D,"rgb(255, 61, 13)","rgb(100%, 24%, 5%)","hsl(12, 100%, 53%)","cmyk(0%, 76%, 95%, 0%)" +salmon4,#8B4C39,"rgb(139, 76, 57)","rgb(55%, 30%, 22%)","hsl(14, 42%, 38%)","cmyk(0%, 45%, 59%, 45%)" +salmon3,#CD7054,"rgb(205, 112, 84)","rgb(80%, 44%, 33%)","hsl(14, 55%, 57%)","cmyk(0%, 45%, 59%, 20%)" +chili powder,#C73F17,"rgb(199, 63, 23)","rgb(78%, 25%, 9%)","hsl(14, 79%, 44%)","cmyk(0%, 68%, 88%, 22%)" +salmon2,#EE8262,"rgb(238, 130, 98)","rgb(93%, 51%, 38%)","hsl(14, 80%, 66%)","cmyk(0%, 45%, 59%, 7%)" +salmon1,#FF8C69,"rgb(255, 140, 105)","rgb(100%, 55%, 41%)","hsl(14, 100%, 71%)","cmyk(0%, 45%, 59%, 0%)" +sandstone,#A78D84,"rgb(167, 141, 132)","rgb(65%, 55%, 52%)","hsl(15, 17%, 59%)","cmyk(0%, 16%, 21%, 35%)" +darksalmon (SVG),#E9967A,"rgb(233, 150, 122)","rgb(91%, 59%, 48%)","hsl(15, 72%, 70%)","cmyk(0%, 36%, 48%, 9%)" +fleshochre,#FF5721,"rgb(255, 87, 33)","rgb(100%, 34%, 13%)","hsl(15, 100%, 56%)","cmyk(0%, 66%, 87%, 0%)" +sepia,#5E2612,"rgb(94, 38, 18)","rgb(37%, 15%, 7%)","hsl(16, 68%, 22%)","cmyk(0%, 60%, 81%, 63%)" +soylent red,#E04006,"rgb(224, 64, 6)","rgb(88%, 25%, 2%)","hsl(16, 95%, 45%)","cmyk(0%, 71%, 97%, 12%)" +brown1,#8B2500,"rgb(139, 37, 0)","rgb(55%, 15%, 0%)","hsl(16, 100%, 27%)","cmyk(0%, 73%, 100%, 45%)" +orangered3,#CD3700,"rgb(205, 55, 0)","rgb(80%, 22%, 0%)","hsl(16, 100%, 40%)","cmyk(0%, 73%, 100%, 20%)" +orangered2,#EE4000,"rgb(238, 64, 0)","rgb(93%, 25%, 0%)","hsl(16, 100%, 47%)","cmyk(0%, 73%, 100%, 7%)" +orangered (SVG),#FF4500,"rgb(255, 69, 0)","rgb(100%, 27%, 0%)","hsl(16, 100%, 50%)","cmyk(0%, 73%, 100%, 0%)" +coral (SVG),#FF7F50,"rgb(255, 127, 80)","rgb(100%, 50%, 31%)","hsl(16, 100%, 66%)","cmyk(0%, 50%, 69%, 0%)" +light salmon4,#8B5742,"rgb(139, 87, 66)","rgb(55%, 34%, 26%)","hsl(17, 36%, 40%)","cmyk(0%, 37%, 53%, 45%)" +light salmon3,#CD8162,"rgb(205, 129, 98)","rgb(80%, 51%, 38%)","hsl(17, 52%, 59%)","cmyk(0%, 37%, 52%, 20%)" +light salmon2,#EE9572,"rgb(238, 149, 114)","rgb(93%, 58%, 45%)","hsl(17, 78%, 69%)","cmyk(0%, 37%, 52%, 7%)" +kidney bean,#B13E0F,"rgb(177, 62, 15)","rgb(69%, 24%, 6%)","hsl(17, 84%, 38%)","cmyk(0%, 65%, 92%, 31%)" +maroon5,#691F01,"rgb(105, 31, 1)","rgb(41%, 12%, 0%)","hsl(17, 98%, 21%)","cmyk(0%, 70%, 99%, 59%)" +lightsalmon (SVG),#FFA07A,"rgb(255, 160, 122)","rgb(100%, 63%, 48%)","hsl(17, 100%, 74%)","cmyk(0%, 37%, 52%, 0%)" +verydarkbrown,#5C4033,"rgb(92, 64, 51)","rgb(36%, 25%, 20%)","hsl(19, 29%, 28%)","cmyk(0%, 30%, 45%, 64%)" +feldspar,#D19275,"rgb(209, 146, 117)","rgb(82%, 57%, 46%)","hsl(19, 50%, 64%)","cmyk(0%, 30%, 44%, 18%)" +sienna (SVG),#A0522D,"rgb(160, 82, 45)","rgb(63%, 32%, 18%)","hsl(19, 56%, 40%)","cmyk(0%, 49%, 72%, 37%)" +sienna3,#CD6839,"rgb(205, 104, 57)","rgb(80%, 41%, 22%)","hsl(19, 60%, 51%)","cmyk(0%, 49%, 72%, 20%)" +burntsienna,#8A360F,"rgb(138, 54, 15)","rgb(54%, 21%, 6%)","hsl(19, 80%, 30%)","cmyk(0%, 61%, 89%, 46%)" +sienna2,#EE7942,"rgb(238, 121, 66)","rgb(93%, 47%, 26%)","hsl(19, 83%, 60%)","cmyk(0%, 49%, 72%, 7%)" +orange5,#FF7D40,"rgb(255, 125, 64)","rgb(100%, 49%, 25%)","hsl(19, 100%, 63%)","cmyk(0%, 51%, 75%, 0%)" +sienna1,#FF8247,"rgb(255, 130, 71)","rgb(100%, 51%, 28%)","hsl(19, 100%, 64%)","cmyk(0%, 49%, 72%, 0%)" +sienna4,#8B4726,"rgb(139, 71, 38)","rgb(55%, 28%, 15%)","hsl(20, 57%, 35%)","cmyk(0%, 49%, 73%, 45%)" +tan,#DB9370,"rgb(219, 147, 112)","rgb(86%, 58%, 44%)","hsl(20, 60%, 65%)","cmyk(0%, 33%, 49%, 14%)" +brownochre,#87421F,"rgb(135, 66, 31)","rgb(53%, 26%, 12%)","hsl(20, 63%, 33%)","cmyk(0%, 51%, 77%, 47%)" +chocolate (Safe Hex3),#993300,"rgb(153, 51, 0)","rgb(60%, 20%, 0%)","hsl(20, 100%, 30%)","cmyk(0%, 67%, 100%, 40%)" +orange crush,#F87531,"rgb(248, 117, 49)","rgb(97%, 46%, 19%)","hsl(21, 93%, 58%)","cmyk(0%, 53%, 80%, 3%)" +ivoryblack,#292421,"rgb(41, 36, 33)","rgb(16%, 14%, 13%)","hsl(22, 11%, 15%)","cmyk(0%, 12%, 20%, 84%)" +darktan,#97694F,"rgb(151, 105, 79)","rgb(59%, 41%, 31%)","hsl(22, 31%, 45%)","cmyk(0%, 30%, 48%, 41%)" +vandykebrown,#5E2605,"rgb(94, 38, 5)","rgb(37%, 15%, 2%)","hsl(22, 90%, 19%)","cmyk(0%, 60%, 95%, 63%)" +apricot,#FBA16C,"rgb(251, 161, 108)","rgb(98%, 63%, 42%)","hsl(22, 95%, 70%)","cmyk(0%, 36%, 57%, 2%)" +cadmiumorange,#FF6103,"rgb(255, 97, 3)","rgb(100%, 38%, 1%)","hsl(22, 100%, 51%)","cmyk(0%, 62%, 99%, 0%)" +marsorange,#964514,"rgb(150, 69, 20)","rgb(59%, 27%, 8%)","hsl(23, 76%, 33%)","cmyk(0%, 54%, 87%, 41%)" +mandarianorange,#E47833,"rgb(228, 120, 51)","rgb(89%, 47%, 20%)","hsl(23, 77%, 55%)","cmyk(0%, 47%, 78%, 11%)" +oregon salmon (Hex3),#FF7722,"rgb(255, 119, 34)","rgb(100%, 47%, 13%)","hsl(23, 100%, 57%)","cmyk(0%, 53%, 87%, 0%)" +semisweet chocolate1,#6B4226,"rgb(107, 66, 38)","rgb(42%, 26%, 15%)","hsl(24, 48%, 28%)","cmyk(0%, 38%, 64%, 58%)" +bakerschocolate,#5C3317,"rgb(92, 51, 23)","rgb(36%, 20%, 9%)","hsl(24, 60%, 23%)","cmyk(0%, 45%, 75%, 64%)" +deepochre,#733D1A,"rgb(115, 61, 26)","rgb(45%, 24%, 10%)","hsl(24, 63%, 28%)","cmyk(0%, 47%, 77%, 55%)" +orange (Safe Hex3),#FF6600,"rgb(255, 102, 0)","rgb(100%, 40%, 0%)","hsl(24, 100%, 50%)","cmyk(0%, 60%, 100%, 0%)" +tangerine,#FF7216,"rgb(255, 114, 22)","rgb(100%, 45%, 9%)","hsl(24, 100%, 54%)","cmyk(0%, 55%, 91%, 0%)" +peach (Hex3),#FF9955,"rgb(255, 153, 85)","rgb(100%, 60%, 33%)","hsl(24, 100%, 67%)","cmyk(0%, 40%, 67%, 0%)" +medium wood,#A68064,"rgb(166, 128, 100)","rgb(65%, 50%, 39%)","hsl(25, 27%, 52%)","cmyk(0%, 23%, 40%, 35%)" +darkwood,#855E42,"rgb(133, 94, 66)","rgb(52%, 37%, 26%)","hsl(25, 34%, 39%)","cmyk(0%, 29%, 50%, 48%)" +light wood,#E9C2A6,"rgb(233, 194, 166)","rgb(91%, 76%, 65%)","hsl(25, 60%, 78%)","cmyk(0%, 17%, 29%, 9%)" +chocolate3,#CD661D,"rgb(205, 102, 29)","rgb(80%, 40%, 11%)","hsl(25, 75%, 46%)","cmyk(0%, 50%, 86%, 20%)" +chocolate (SVG),#D2691E,"rgb(210, 105, 30)","rgb(82%, 41%, 12%)","hsl(25, 75%, 47%)","cmyk(0%, 50%, 86%, 18%)" +saddlebrown (SVG),#8B4513,"rgb(139, 69, 19)","rgb(55%, 27%, 7%)","hsl(25, 76%, 31%)","cmyk(0%, 50%, 86%, 45%)" +chocolate2,#EE7621,"rgb(238, 118, 33)","rgb(93%, 46%, 13%)","hsl(25, 86%, 53%)","cmyk(0%, 50%, 86%, 7%)" +chocolate1,#FF7F24,"rgb(255, 127, 36)","rgb(100%, 50%, 14%)","hsl(25, 100%, 57%)","cmyk(0%, 50%, 86%, 0%)" +seashell (SVG),#FFF5EE,"rgb(255, 245, 238)","rgb(100%, 96%, 93%)","hsl(25, 100%, 97%)","cmyk(0%, 4%, 7%, 0%)" +seashell3,#CDC5BF,"rgb(205, 197, 191)","rgb(80%, 77%, 75%)","hsl(26, 12%, 78%)","cmyk(0%, 4%, 7%, 20%)" +seashell2,#EEE5DE,"rgb(238, 229, 222)","rgb(93%, 90%, 87%)","hsl(26, 32%, 90%)","cmyk(0%, 4%, 7%, 7%)" +coconut shell,#BC7642,"rgb(188, 118, 66)","rgb(74%, 46%, 26%)","hsl(26, 48%, 50%)","cmyk(0%, 37%, 65%, 26%)" +sign brown,#603311,"rgb(96, 51, 17)","rgb(38%, 20%, 7%)","hsl(26, 70%, 22%)","cmyk(0%, 47%, 82%, 62%)" +marsyellow,#E3701A,"rgb(227, 112, 26)","rgb(89%, 44%, 10%)","hsl(26, 79%, 50%)","cmyk(0%, 51%, 89%, 11%)" +rawsienna,#C76114,"rgb(199, 97, 20)","rgb(78%, 38%, 8%)","hsl(26, 82%, 43%)","cmyk(0%, 51%, 90%, 22%)" +cantaloupe pulp,#FA9A50,"rgb(250, 154, 80)","rgb(98%, 60%, 31%)","hsl(26, 94%, 65%)","cmyk(0%, 38%, 68%, 2%)" +seashell4,#8B8682,"rgb(139, 134, 130)","rgb(55%, 53%, 51%)","hsl(27, 4%, 53%)","cmyk(0%, 4%, 6%, 45%)" +tan (Hex3),#EE8833,"rgb(238, 136, 51)","rgb(93%, 53%, 20%)","hsl(27, 85%, 57%)","cmyk(0%, 43%, 79%, 7%)" +desert sand,#FEE8D6,"rgb(254, 232, 214)","rgb(100%, 91%, 84%)","hsl(27, 95%, 92%)","cmyk(0%, 9%, 16%, 0%)" +titanium,#B6AFA9,"rgb(182, 175, 169)","rgb(71%, 69%, 66%)","hsl(28, 8%, 69%)","cmyk(0%, 4%, 7%, 29%)" +peachpuff4,#8B7765,"rgb(139, 119, 101)","rgb(55%, 47%, 40%)","hsl(28, 16%, 47%)","cmyk(0%, 14%, 27%, 45%)" +peachpuff3,#CDAF95,"rgb(205, 175, 149)","rgb(80%, 69%, 58%)","hsl(28, 36%, 69%)","cmyk(0%, 15%, 27%, 20%)" +peachpuff2,#EECBAD,"rgb(238, 203, 173)","rgb(93%, 80%, 68%)","hsl(28, 66%, 81%)","cmyk(0%, 15%, 27%, 7%)" +sandybrown (SVG),#F4A460,"rgb(244, 164, 96)","rgb(96%, 64%, 38%)","hsl(28, 87%, 67%)","cmyk(0%, 33%, 61%, 4%)" +peachpuff (SVG),#FFDAB9,"rgb(255, 218, 185)","rgb(100%, 85%, 73%)","hsl(28, 100%, 86%)","cmyk(0%, 15%, 27%, 0%)" +tan4,#8B5A2B,"rgb(139, 90, 43)","rgb(55%, 35%, 17%)","hsl(29, 53%, 36%)","cmyk(0%, 35%, 69%, 45%)" +copper,#B87333,"rgb(184, 115, 51)","rgb(72%, 45%, 20%)","hsl(29, 57%, 46%)","cmyk(0%, 38%, 72%, 28%)" +tan2,#EE9A49,"rgb(238, 154, 73)","rgb(93%, 60%, 29%)","hsl(29, 83%, 61%)","cmyk(0%, 35%, 69%, 7%)" +coffee,#AA5303,"rgb(170, 83, 3)","rgb(67%, 33%, 1%)","hsl(29, 97%, 34%)","cmyk(0%, 51%, 98%, 33%)" +tan1,#FFA54F,"rgb(255, 165, 79)","rgb(100%, 65%, 31%)","hsl(29, 100%, 65%)","cmyk(0%, 35%, 69%, 0%)" +espresso,#E7C6A5,"rgb(231, 198, 165)","rgb(91%, 78%, 65%)","hsl(30, 58%, 78%)","cmyk(0%, 14%, 29%, 9%)" +peru (SVG),#CD853F,"rgb(205, 133, 63)","rgb(80%, 52%, 25%)","hsl(30, 59%, 53%)","cmyk(0%, 35%, 69%, 20%)" +gold6,#CD7F32,"rgb(205, 127, 50)","rgb(80%, 50%, 20%)","hsl(30, 61%, 50%)","cmyk(0%, 38%, 76%, 20%)" +gold5,#CC7F32,"rgb(204, 127, 50)","rgb(80%, 50%, 20%)","hsl(30, 61%, 50%)","cmyk(0%, 38%, 75%, 20%)" +linen (SVG),#FAF0E6,"rgb(250, 240, 230)","rgb(98%, 94%, 90%)","hsl(30, 67%, 94%)","cmyk(0%, 4%, 8%, 2%)" +ochre (Hex3),#CC7722,"rgb(204, 119, 34)","rgb(80%, 47%, 13%)","hsl(30, 71%, 47%)","cmyk(0%, 42%, 83%, 20%)" +darkorange4,#8B4500,"rgb(139, 69, 0)","rgb(55%, 27%, 0%)","hsl(30, 100%, 27%)","cmyk(0%, 50%, 100%, 45%)" +darkorange3,#CD6600,"rgb(205, 102, 0)","rgb(80%, 40%, 0%)","hsl(30, 100%, 40%)","cmyk(0%, 50%, 100%, 20%)" +darkorange2,#EE7600,"rgb(238, 118, 0)","rgb(93%, 46%, 0%)","hsl(30, 100%, 47%)","cmyk(0%, 50%, 100%, 7%)" +orange,#FF8000,"rgb(255, 128, 0)","rgb(100%, 50%, 0%)","hsl(30, 100%, 50%)","cmyk(0%, 50%, 100%, 0%)" +darkorange1,#FF7F00,"rgb(255, 127, 0)","rgb(100%, 50%, 0%)","hsl(30, 100%, 50%)","cmyk(0%, 50%, 100%, 0%)" +sand (Safe Hex3),#FFCC99,"rgb(255, 204, 153)","rgb(100%, 80%, 60%)","hsl(30, 100%, 80%)","cmyk(0%, 20%, 40%, 0%)" +mocha latte,#C9AF94,"rgb(201, 175, 148)","rgb(79%, 69%, 58%)","hsl(31, 33%, 68%)","cmyk(0%, 13%, 26%, 21%)" +cafe americano,#362819,"rgb(54, 40, 25)","rgb(21%, 16%, 10%)","hsl(31, 37%, 15%)","cmyk(0%, 26%, 54%, 79%)" +cafe au lait,#B67C3D,"rgb(182, 124, 61)","rgb(71%, 49%, 24%)","hsl(31, 50%, 48%)","cmyk(0%, 32%, 66%, 29%)" +goldochre,#C77826,"rgb(199, 120, 38)","rgb(78%, 47%, 15%)","hsl(31, 68%, 46%)","cmyk(0%, 40%, 81%, 22%)" +melon,#E3A869,"rgb(227, 168, 105)","rgb(89%, 66%, 41%)","hsl(31, 69%, 65%)","cmyk(0%, 26%, 54%, 11%)" +yellowochre,#E38217,"rgb(227, 130, 23)","rgb(89%, 51%, 9%)","hsl(31, 82%, 49%)","cmyk(0%, 43%, 90%, 11%)" +cinnamon,#7B3F00,"rgb(123, 63, 0)","rgb(48%, 25%, 0%)","hsl(31, 100%, 24%)","cmyk(0%, 49%, 100%, 52%)" +bisque3,#CDB79E,"rgb(205, 183, 158)","rgb(80%, 72%, 62%)","hsl(32, 32%, 71%)","cmyk(0%, 11%, 23%, 20%)" +latte,#9F703A,"rgb(159, 112, 58)","rgb(62%, 44%, 23%)","hsl(32, 47%, 43%)","cmyk(0%, 30%, 64%, 38%)" +pistachio shell,#EBCEAC,"rgb(235, 206, 172)","rgb(92%, 81%, 67%)","hsl(32, 61%, 80%)","cmyk(0%, 12%, 27%, 8%)" +newtan,#EBC79E,"rgb(235, 199, 158)","rgb(92%, 78%, 62%)","hsl(32, 66%, 77%)","cmyk(0%, 15%, 33%, 8%)" +light copper,#EDC393,"rgb(237, 195, 147)","rgb(93%, 76%, 58%)","hsl(32, 71%, 75%)","cmyk(0%, 18%, 38%, 7%)" +pecan,#E18E2E,"rgb(225, 142, 46)","rgb(88%, 56%, 18%)","hsl(32, 75%, 53%)","cmyk(0%, 37%, 80%, 12%)" +crema,#C76E06,"rgb(199, 110, 6)","rgb(78%, 43%, 2%)","hsl(32, 94%, 40%)","cmyk(0%, 45%, 97%, 22%)" +sign orange,#DD7500,"rgb(221, 117, 0)","rgb(87%, 46%, 0%)","hsl(32, 100%, 43%)","cmyk(0%, 47%, 100%, 13%)" +darkorange5,#FF8600,"rgb(255, 134, 0)","rgb(100%, 53%, 0%)","hsl(32, 100%, 50%)","cmyk(0%, 47%, 100%, 0%)" +antiquewhite3,#CDC0B0,"rgb(205, 192, 176)","rgb(80%, 75%, 69%)","hsl(33, 22%, 75%)","cmyk(0%, 6%, 14%, 20%)" +burlywood4,#8B7355,"rgb(139, 115, 85)","rgb(55%, 45%, 33%)","hsl(33, 24%, 44%)","cmyk(0%, 17%, 39%, 45%)" +bisque2,#EED5B7,"rgb(238, 213, 183)","rgb(93%, 84%, 72%)","hsl(33, 62%, 83%)","cmyk(0%, 11%, 23%, 7%)" +cashew,#DFAE74,"rgb(223, 174, 116)","rgb(87%, 68%, 45%)","hsl(33, 63%, 66%)","cmyk(0%, 22%, 48%, 13%)" +carrot,#ED9121,"rgb(237, 145, 33)","rgb(93%, 57%, 13%)","hsl(33, 85%, 53%)","cmyk(0%, 39%, 86%, 7%)" +darkorange (SVG),#FF8C00,"rgb(255, 140, 0)","rgb(100%, 55%, 0%)","hsl(33, 100%, 50%)","cmyk(0%, 45%, 100%, 0%)" +bisque (SVG),#FFE4C4,"rgb(255, 228, 196)","rgb(100%, 89%, 77%)","hsl(33, 100%, 88%)","cmyk(0%, 11%, 23%, 0%)" +antiquewhite1,#FFEFDB,"rgb(255, 239, 219)","rgb(100%, 94%, 86%)","hsl(33, 100%, 93%)","cmyk(0%, 6%, 14%, 0%)" +bisque4,#8B7D6B,"rgb(139, 125, 107)","rgb(55%, 49%, 42%)","hsl(34, 13%, 48%)","cmyk(0%, 10%, 23%, 45%)" +beige dark,#A39480,"rgb(163, 148, 128)","rgb(64%, 58%, 50%)","hsl(34, 16%, 57%)","cmyk(0%, 9%, 21%, 36%)" +burlywood3,#CDAA7D,"rgb(205, 170, 125)","rgb(80%, 67%, 49%)","hsl(34, 44%, 65%)","cmyk(0%, 17%, 39%, 20%)" +tan (SVG),#D2B48C,"rgb(210, 180, 140)","rgb(82%, 71%, 55%)","hsl(34, 44%, 69%)","cmyk(0%, 14%, 33%, 18%)" +antiquewhite2,#EEDFCC,"rgb(238, 223, 204)","rgb(93%, 87%, 80%)","hsl(34, 50%, 87%)","cmyk(0%, 6%, 14%, 7%)" +almond,#C48E48,"rgb(196, 142, 72)","rgb(77%, 56%, 28%)","hsl(34, 51%, 53%)","cmyk(0%, 28%, 63%, 23%)" +burlywood (SVG),#DEB887,"rgb(222, 184, 135)","rgb(87%, 72%, 53%)","hsl(34, 57%, 70%)","cmyk(0%, 17%, 39%, 13%)" +brick,#9C661F,"rgb(156, 102, 31)","rgb(61%, 40%, 12%)","hsl(34, 67%, 37%)","cmyk(0%, 35%, 80%, 39%)" +burlywood2,#EEC591,"rgb(238, 197, 145)","rgb(93%, 77%, 57%)","hsl(34, 73%, 75%)","cmyk(0%, 17%, 39%, 7%)" +antiquewhite (SVG),#FAEBD7,"rgb(250, 235, 215)","rgb(98%, 92%, 84%)","hsl(34, 78%, 91%)","cmyk(0%, 6%, 14%, 2%)" +cool copper,#D98719,"rgb(217, 135, 25)","rgb(85%, 53%, 10%)","hsl(34, 79%, 47%)","cmyk(0%, 38%, 88%, 15%)" +eggshell,#FCE6C9,"rgb(252, 230, 201)","rgb(99%, 90%, 79%)","hsl(34, 89%, 89%)","cmyk(0%, 9%, 20%, 1%)" +cadmiumyellow,#FF9912,"rgb(255, 153, 18)","rgb(100%, 60%, 7%)","hsl(34, 100%, 54%)","cmyk(0%, 40%, 93%, 0%)" +burlywood1,#FFD39B,"rgb(255, 211, 155)","rgb(100%, 83%, 61%)","hsl(34, 100%, 80%)","cmyk(0%, 17%, 39%, 0%)" +antiquewhite4,#8B8378,"rgb(139, 131, 120)","rgb(55%, 51%, 47%)","hsl(35, 8%, 51%)","cmyk(0%, 6%, 14%, 45%)" +cappuccino,#B28647,"rgb(178, 134, 71)","rgb(70%, 53%, 28%)","hsl(35, 43%, 49%)","cmyk(0%, 25%, 60%, 30%)" +rawumber,#734A12,"rgb(115, 74, 18)","rgb(45%, 29%, 7%)","hsl(35, 73%, 26%)","cmyk(0%, 36%, 84%, 55%)" +navajowhite4,#8B795E,"rgb(139, 121, 94)","rgb(55%, 47%, 37%)","hsl(36, 19%, 46%)","cmyk(0%, 13%, 32%, 45%)" +navajowhite3,#CDB38B,"rgb(205, 179, 139)","rgb(80%, 70%, 55%)","hsl(36, 40%, 67%)","cmyk(0%, 13%, 32%, 20%)" +navajowhite2,#EECFA1,"rgb(238, 207, 161)","rgb(93%, 81%, 63%)","hsl(36, 69%, 78%)","cmyk(0%, 13%, 32%, 7%)" +kumquat,#DC8909,"rgb(220, 137, 9)","rgb(86%, 54%, 4%)","hsl(36, 92%, 45%)","cmyk(0%, 38%, 96%, 14%)" +bread,#FCD59C,"rgb(252, 213, 156)","rgb(99%, 84%, 61%)","hsl(36, 94%, 80%)","cmyk(0%, 15%, 38%, 1%)" +peach,#FEF0DB,"rgb(254, 240, 219)","rgb(100%, 94%, 86%)","hsl(36, 95%, 93%)","cmyk(0%, 6%, 14%, 0%)" +cinnamon (Hex3),#AA6600,"rgb(170, 102, 0)","rgb(67%, 40%, 0%)","hsl(36, 100%, 33%)","cmyk(0%, 40%, 100%, 33%)" +aureolineyellow,#FFA824,"rgb(255, 168, 36)","rgb(100%, 66%, 14%)","hsl(36, 100%, 57%)","cmyk(0%, 34%, 86%, 0%)" +cheddar,#FFC469,"rgb(255, 196, 105)","rgb(100%, 77%, 41%)","hsl(36, 100%, 71%)","cmyk(0%, 23%, 59%, 0%)" +navajowhite (SVG),#FFDEAD,"rgb(255, 222, 173)","rgb(100%, 87%, 68%)","hsl(36, 100%, 84%)","cmyk(0%, 13%, 32%, 0%)" +blanchedalmond (SVG),#FFEBCD,"rgb(255, 235, 205)","rgb(100%, 92%, 80%)","hsl(36, 100%, 90%)","cmyk(0%, 8%, 20%, 0%)" +bronzeii,#A67D3D,"rgb(166, 125, 61)","rgb(65%, 49%, 24%)","hsl(37, 46%, 45%)","cmyk(0%, 25%, 63%, 35%)" +beach sand,#EED6AF,"rgb(238, 214, 175)","rgb(93%, 84%, 69%)","hsl(37, 65%, 81%)","cmyk(0%, 10%, 26%, 7%)" +papayawhip (SVG),#FFEFD5,"rgb(255, 239, 213)","rgb(100%, 94%, 84%)","hsl(37, 100%, 92%)","cmyk(0%, 6%, 16%, 0%)" +naplesyellowdeep,#FFA812,"rgb(255, 168, 18)","rgb(100%, 66%, 7%)","hsl(38, 100%, 54%)","cmyk(0%, 34%, 93%, 0%)" +moccasin (SVG),#FFE4B5,"rgb(255, 228, 181)","rgb(100%, 89%, 71%)","hsl(38, 100%, 85%)","cmyk(0%, 11%, 29%, 0%)" +wheat4,#8B7E66,"rgb(139, 126, 102)","rgb(55%, 49%, 40%)","hsl(39, 15%, 47%)","cmyk(0%, 9%, 27%, 45%)" +bronze,#8C7853,"rgb(140, 120, 83)","rgb(55%, 47%, 33%)","hsl(39, 26%, 44%)","cmyk(0%, 14%, 41%, 45%)" +wheat3,#CDBA96,"rgb(205, 186, 150)","rgb(80%, 73%, 59%)","hsl(39, 35%, 70%)","cmyk(0%, 9%, 27%, 20%)" +wheat2,#EED8AE,"rgb(238, 216, 174)","rgb(93%, 85%, 68%)","hsl(39, 65%, 81%)","cmyk(0%, 9%, 27%, 7%)" +wheat (SVG),#F5DEB3,"rgb(245, 222, 179)","rgb(96%, 87%, 70%)","hsl(39, 77%, 83%)","cmyk(0%, 9%, 27%, 4%)" +oldlace (SVG),#FDF5E6,"rgb(253, 245, 230)","rgb(99%, 96%, 90%)","hsl(39, 85%, 95%)","cmyk(0%, 3%, 9%, 1%)" +orange4,#8B5A00,"rgb(139, 90, 0)","rgb(55%, 35%, 0%)","hsl(39, 100%, 27%)","cmyk(0%, 35%, 100%, 45%)" +orange3,#CD8500,"rgb(205, 133, 0)","rgb(80%, 52%, 0%)","hsl(39, 100%, 40%)","cmyk(0%, 35%, 100%, 20%)" +orange2,#EE9A00,"rgb(238, 154, 0)","rgb(93%, 60%, 0%)","hsl(39, 100%, 47%)","cmyk(0%, 35%, 100%, 7%)" +orange (SVG),#FFA500,"rgb(255, 165, 0)","rgb(100%, 65%, 0%)","hsl(39, 100%, 50%)","cmyk(0%, 35%, 100%, 0%)" +wheat1,#FFE7BA,"rgb(255, 231, 186)","rgb(100%, 91%, 73%)","hsl(39, 100%, 86%)","cmyk(0%, 9%, 27%, 0%)" +orange candy,#D5B77A,"rgb(213, 183, 122)","rgb(84%, 72%, 48%)","hsl(40, 52%, 66%)","cmyk(0%, 14%, 43%, 16%)" +sienna,#8E6B23,"rgb(142, 107, 35)","rgb(56%, 42%, 14%)","hsl(40, 60%, 35%)","cmyk(0%, 25%, 75%, 44%)" +organic tea,#AC7F24,"rgb(172, 127, 36)","rgb(67%, 50%, 14%)","hsl(40, 65%, 41%)","cmyk(0%, 26%, 79%, 33%)" +gold7 (Hex3),#FFAA00,"rgb(255, 170, 0)","rgb(100%, 67%, 0%)","hsl(40, 100%, 50%)","cmyk(0%, 33%, 100%, 0%)" +cadmium yellowlight,#FFB00F,"rgb(255, 176, 15)","rgb(100%, 69%, 6%)","hsl(40, 100%, 53%)","cmyk(0%, 31%, 94%, 0%)" +floralwhite (SVG),#FFFAF0,"rgb(255, 250, 240)","rgb(100%, 98%, 94%)","hsl(40, 100%, 97%)","cmyk(0%, 2%, 6%, 0%)" +dark wheat,#E8C782,"rgb(232, 199, 130)","rgb(91%, 78%, 51%)","hsl(41, 69%, 71%)","cmyk(0%, 14%, 44%, 9%)" +pyridiumorange,#F0A804,"rgb(240, 168, 4)","rgb(94%, 66%, 2%)","hsl(42, 97%, 48%)","cmyk(0%, 30%, 98%, 6%)" +packer gold,#FCB514,"rgb(252, 181, 20)","rgb(99%, 71%, 8%)","hsl(42, 97%, 53%)","cmyk(0%, 28%, 92%, 1%)" +honey,#FEE5AC,"rgb(254, 229, 172)","rgb(100%, 90%, 67%)","hsl(42, 98%, 84%)","cmyk(0%, 10%, 32%, 0%)" +darkgoldenrod1,#FFB90F,"rgb(255, 185, 15)","rgb(100%, 73%, 6%)","hsl(42, 100%, 53%)","cmyk(0%, 27%, 94%, 0%)" +canvas,#9D8851,"rgb(157, 136, 81)","rgb(62%, 53%, 32%)","hsl(43, 32%, 47%)","cmyk(0%, 13%, 48%, 38%)" +goldenrod (SVG),#DAA520,"rgb(218, 165, 32)","rgb(85%, 65%, 13%)","hsl(43, 74%, 49%)","cmyk(0%, 24%, 85%, 15%)" +goldenrod4,#8B6914,"rgb(139, 105, 20)","rgb(55%, 41%, 8%)","hsl(43, 75%, 31%)","cmyk(0%, 24%, 86%, 45%)" +goldenrod3,#CD9B1D,"rgb(205, 155, 29)","rgb(80%, 61%, 11%)","hsl(43, 75%, 46%)","cmyk(0%, 24%, 86%, 20%)" +goldenrod2,#EEB422,"rgb(238, 180, 34)","rgb(93%, 71%, 13%)","hsl(43, 86%, 53%)","cmyk(0%, 24%, 86%, 7%)" +darkgoldenrod4,#8B6508,"rgb(139, 101, 8)","rgb(55%, 40%, 3%)","hsl(43, 89%, 29%)","cmyk(0%, 27%, 94%, 45%)" +darkgoldenrod (SVG),#B8860B,"rgb(184, 134, 11)","rgb(72%, 53%, 4%)","hsl(43, 89%, 38%)","cmyk(0%, 27%, 94%, 28%)" +darkgoldenrod3,#CD950C,"rgb(205, 149, 12)","rgb(80%, 58%, 5%)","hsl(43, 89%, 43%)","cmyk(0%, 27%, 94%, 20%)" +darkgoldenrod2,#EEAD0E,"rgb(238, 173, 14)","rgb(93%, 68%, 5%)","hsl(43, 89%, 49%)","cmyk(0%, 27%, 94%, 7%)" +goldenrod1,#FFC125,"rgb(255, 193, 37)","rgb(100%, 76%, 15%)","hsl(43, 100%, 57%)","cmyk(0%, 24%, 85%, 0%)" +semisweet chocolate2,#E6B426,"rgb(230, 180, 38)","rgb(90%, 71%, 15%)","hsl(44, 79%, 53%)","cmyk(0%, 22%, 83%, 10%)" +golden delicious apple,#EDCB62,"rgb(237, 203, 98)","rgb(93%, 80%, 38%)","hsl(45, 79%, 66%)","cmyk(0%, 14%, 59%, 7%)" +beer,#E5BC3B,"rgb(229, 188, 59)","rgb(90%, 74%, 23%)","hsl(46, 77%, 56%)","cmyk(0%, 18%, 74%, 10%)" +bartlett pear,#CDAB2D,"rgb(205, 171, 45)","rgb(80%, 67%, 18%)","hsl(47, 64%, 49%)","cmyk(0%, 17%, 78%, 20%)" +mustard (Hex3),#FFCC11,"rgb(255, 204, 17)","rgb(100%, 80%, 7%)","hsl(47, 100%, 53%)","cmyk(0%, 20%, 93%, 0%)" +stainless steel,#E0DFDB,"rgb(224, 223, 219)","rgb(88%, 87%, 86%)","hsl(48, 7%, 87%)","cmyk(0%, 0%, 2%, 12%)" +cornsilk (SVG),#FFF8DC,"rgb(255, 248, 220)","rgb(100%, 97%, 86%)","hsl(48, 100%, 93%)","cmyk(0%, 3%, 14%, 0%)" +ash,#C6C3B5,"rgb(198, 195, 181)","rgb(78%, 76%, 71%)","hsl(49, 13%, 74%)","cmyk(0%, 2%, 9%, 22%)" +cornsilk3,#CDC8B1,"rgb(205, 200, 177)","rgb(80%, 78%, 69%)","hsl(49, 22%, 75%)","cmyk(0%, 2%, 14%, 20%)" +cornsilk2,#EEE8CD,"rgb(238, 232, 205)","rgb(93%, 91%, 80%)","hsl(49, 49%, 87%)","cmyk(0%, 3%, 14%, 7%)" +oldgold,#CFB53B,"rgb(207, 181, 59)","rgb(81%, 71%, 23%)","hsl(49, 61%, 52%)","cmyk(0%, 13%, 71%, 19%)" +sign yellow,#FCD116,"rgb(252, 209, 22)","rgb(99%, 82%, 9%)","hsl(49, 97%, 54%)","cmyk(0%, 17%, 91%, 1%)" +buttermilk,#FEF1B5,"rgb(254, 241, 181)","rgb(100%, 95%, 71%)","hsl(49, 97%, 85%)","cmyk(0%, 5%, 29%, 0%)" +light goldenrod4,#8B814C,"rgb(139, 129, 76)","rgb(55%, 51%, 30%)","hsl(50, 29%, 42%)","cmyk(0%, 7%, 45%, 45%)" +light goldenrod3,#CDBE70,"rgb(205, 190, 112)","rgb(80%, 75%, 44%)","hsl(50, 48%, 62%)","cmyk(0%, 7%, 45%, 20%)" +light goldenrod2,#EEDC82,"rgb(238, 220, 130)","rgb(93%, 86%, 51%)","hsl(50, 76%, 72%)","cmyk(0%, 8%, 45%, 7%)" +pineapple,#FCDC3B,"rgb(252, 220, 59)","rgb(99%, 86%, 23%)","hsl(50, 97%, 61%)","cmyk(0%, 13%, 77%, 1%)" +light goldenrod1,#FFEC8B,"rgb(255, 236, 139)","rgb(100%, 93%, 55%)","hsl(50, 100%, 77%)","cmyk(0%, 7%, 45%, 0%)" +cornsilk4,#8B8878,"rgb(139, 136, 120)","rgb(55%, 53%, 47%)","hsl(51, 8%, 51%)","cmyk(0%, 2%, 14%, 45%)" +sgibrightgray,#C5C1AA,"rgb(197, 193, 170)","rgb(77%, 76%, 67%)","hsl(51, 19%, 72%)","cmyk(0%, 2%, 14%, 23%)" +banana,#E3CF57,"rgb(227, 207, 87)","rgb(89%, 81%, 34%)","hsl(51, 71%, 62%)","cmyk(0%, 9%, 62%, 11%)" +light goldenrod,#EEDD82,"rgb(238, 221, 130)","rgb(93%, 87%, 51%)","hsl(51, 76%, 72%)","cmyk(0%, 7%, 45%, 7%)" +gold4,#8B7500,"rgb(139, 117, 0)","rgb(55%, 46%, 0%)","hsl(51, 100%, 27%)","cmyk(0%, 16%, 100%, 45%)" +gold3,#CDAD00,"rgb(205, 173, 0)","rgb(80%, 68%, 0%)","hsl(51, 100%, 40%)","cmyk(0%, 16%, 100%, 20%)" +gold2,#EEC900,"rgb(238, 201, 0)","rgb(93%, 79%, 0%)","hsl(51, 100%, 47%)","cmyk(0%, 16%, 100%, 7%)" +gold (SVG),#FFD700,"rgb(255, 215, 0)","rgb(100%, 84%, 0%)","hsl(51, 100%, 50%)","cmyk(0%, 16%, 100%, 0%)" +brass,#B5A642,"rgb(181, 166, 66)","rgb(71%, 65%, 26%)","hsl(52, 47%, 48%)","cmyk(0%, 8%, 64%, 29%)" +gummi yellow,#FBDB0C,"rgb(251, 219, 12)","rgb(98%, 86%, 5%)","hsl(52, 97%, 52%)","cmyk(0%, 13%, 95%, 2%)" +cream city brick,#E2DDB5,"rgb(226, 221, 181)","rgb(89%, 87%, 71%)","hsl(53, 44%, 80%)","cmyk(0%, 2%, 20%, 11%)" +grapefruit,#F3E88E,"rgb(243, 232, 142)","rgb(95%, 91%, 56%)","hsl(53, 81%, 75%)","cmyk(0%, 5%, 42%, 5%)" +cadmiumlemon,#FFE303,"rgb(255, 227, 3)","rgb(100%, 89%, 1%)","hsl(53, 100%, 51%)","cmyk(0%, 11%, 99%, 0%)" +lemonchiffon3,#CDC9A5,"rgb(205, 201, 165)","rgb(80%, 79%, 65%)","hsl(54, 29%, 73%)","cmyk(0%, 2%, 20%, 20%)" +lemonchiffon2,#EEE9BF,"rgb(238, 233, 191)","rgb(93%, 91%, 75%)","hsl(54, 58%, 84%)","cmyk(0%, 2%, 20%, 7%)" +lemon,#D6C537,"rgb(214, 197, 55)","rgb(84%, 77%, 22%)","hsl(54, 66%, 53%)","cmyk(0%, 8%, 74%, 16%)" +khaki (SVG),#F0E68C,"rgb(240, 230, 140)","rgb(94%, 90%, 55%)","hsl(54, 77%, 75%)","cmyk(0%, 4%, 42%, 6%)" +corn,#FBEC5D,"rgb(251, 236, 93)","rgb(98%, 93%, 36%)","hsl(54, 95%, 67%)","cmyk(0%, 6%, 63%, 2%)" +yolk,#FFE600,"rgb(255, 230, 0)","rgb(100%, 90%, 0%)","hsl(54, 100%, 50%)","cmyk(0%, 10%, 100%, 0%)" +lemonchiffon (SVG),#FFFACD,"rgb(255, 250, 205)","rgb(100%, 98%, 80%)","hsl(54, 100%, 90%)","cmyk(0%, 2%, 20%, 0%)" +tank,#615E3F,"rgb(97, 94, 63)","rgb(38%, 37%, 25%)","hsl(55, 21%, 31%)","cmyk(0%, 3%, 35%, 62%)" +khaki4,#8B864E,"rgb(139, 134, 78)","rgb(55%, 53%, 31%)","hsl(55, 28%, 43%)","cmyk(0%, 4%, 44%, 45%)" +khaki3,#CDC673,"rgb(205, 198, 115)","rgb(80%, 78%, 45%)","hsl(55, 47%, 63%)","cmyk(0%, 3%, 44%, 20%)" +palegoldenrod (SVG),#EEE8AA,"rgb(238, 232, 170)","rgb(93%, 91%, 67%)","hsl(55, 67%, 80%)","cmyk(0%, 3%, 29%, 7%)" +khaki2,#EEE685,"rgb(238, 230, 133)","rgb(93%, 90%, 52%)","hsl(55, 76%, 73%)","cmyk(0%, 3%, 44%, 7%)" +khaki1,#FFF68F,"rgb(255, 246, 143)","rgb(100%, 96%, 56%)","hsl(55, 100%, 78%)","cmyk(0%, 4%, 44%, 0%)" +lemonchiffon4,#8B8970,"rgb(139, 137, 112)","rgb(55%, 54%, 44%)","hsl(56, 11%, 49%)","cmyk(0%, 1%, 19%, 45%)" +darkkhaki (SVG),#BDB76B,"rgb(189, 183, 107)","rgb(74%, 72%, 42%)","hsl(56, 38%, 58%)","cmyk(0%, 3%, 43%, 26%)" +yellow perch,#E0D873,"rgb(224, 216, 115)","rgb(88%, 85%, 45%)","hsl(56, 64%, 66%)","cmyk(0%, 4%, 49%, 12%)" +anjou pear,#BAAF07,"rgb(186, 175, 7)","rgb(73%, 69%, 3%)","hsl(56, 93%, 38%)","cmyk(0%, 6%, 96%, 27%)" +coconut,#FFFCCF,"rgb(255, 252, 207)","rgb(100%, 99%, 81%)","hsl(56, 100%, 91%)","cmyk(0%, 1%, 19%, 0%)" +fog,#CBCAB6,"rgb(203, 202, 182)","rgb(80%, 79%, 71%)","hsl(57, 17%, 75%)","cmyk(0%, 0%, 10%, 20%)" +yellow candy,#EEEB8D,"rgb(238, 235, 141)","rgb(93%, 92%, 55%)","hsl(58, 74%, 74%)","cmyk(0%, 1%, 41%, 7%)" +pickle,#7B7922,"rgb(123, 121, 34)","rgb(48%, 47%, 13%)","hsl(59, 57%, 31%)","cmyk(0%, 2%, 72%, 52%)" +green grape,#CECC15,"rgb(206, 204, 21)","rgb(81%, 80%, 8%)","hsl(59, 81%, 45%)","cmyk(0%, 1%, 90%, 19%)" +blackberry,#3A3A38,"rgb(58, 58, 56)","rgb(23%, 23%, 22%)","hsl(60, 2%, 22%)","cmyk(0%, 0%, 3%, 77%)" +ivory4,#8B8B83,"rgb(139, 139, 131)","rgb(55%, 55%, 51%)","hsl(60, 3%, 53%)","cmyk(0%, 0%, 6%, 45%)" +light yellow4,#8B8B7A,"rgb(139, 139, 122)","rgb(55%, 55%, 48%)","hsl(60, 7%, 51%)","cmyk(0%, 0%, 12%, 45%)" +warmgrey,#808069,"rgb(128, 128, 105)","rgb(50%, 50%, 41%)","hsl(60, 10%, 46%)","cmyk(0%, 0%, 18%, 50%)" +ivory3,#CDCDC1,"rgb(205, 205, 193)","rgb(80%, 80%, 76%)","hsl(60, 11%, 78%)","cmyk(0%, 0%, 6%, 20%)" +light yellow3,#CDCDB4,"rgb(205, 205, 180)","rgb(80%, 80%, 71%)","hsl(60, 20%, 75%)","cmyk(0%, 0%, 12%, 20%)" +wheat,#D8D8BF,"rgb(216, 216, 191)","rgb(85%, 85%, 75%)","hsl(60, 24%, 80%)","cmyk(0%, 0%, 12%, 15%)" +darkolivegreen,#4F4F2F,"rgb(79, 79, 47)","rgb(31%, 31%, 18%)","hsl(60, 25%, 25%)","cmyk(0%, 0%, 41%, 69%)" +khaki,#9F9F5F,"rgb(159, 159, 95)","rgb(62%, 62%, 37%)","hsl(60, 25%, 50%)","cmyk(0%, 0%, 40%, 38%)" +ivory2,#EEEEE0,"rgb(238, 238, 224)","rgb(93%, 93%, 88%)","hsl(60, 29%, 91%)","cmyk(0%, 0%, 6%, 7%)" +ganegreen (Hex3),#777733,"rgb(119, 119, 51)","rgb(47%, 47%, 20%)","hsl(60, 40%, 33%)","cmyk(0%, 0%, 57%, 53%)" +sgiolivedrab,#8E8E38,"rgb(142, 142, 56)","rgb(56%, 56%, 22%)","hsl(60, 43%, 39%)","cmyk(0%, 0%, 61%, 44%)" +light yellow2,#EEEED1,"rgb(238, 238, 209)","rgb(93%, 93%, 82%)","hsl(60, 46%, 88%)","cmyk(0%, 0%, 12%, 7%)" +beige (SVG),#F5F5DC,"rgb(245, 245, 220)","rgb(96%, 96%, 86%)","hsl(60, 56%, 91%)","cmyk(0%, 0%, 10%, 4%)" +medium goldenrod,#EAEAAE,"rgb(234, 234, 174)","rgb(92%, 92%, 68%)","hsl(60, 59%, 80%)","cmyk(0%, 0%, 26%, 8%)" +goldenrod,#DBDB70,"rgb(219, 219, 112)","rgb(86%, 86%, 44%)","hsl(60, 60%, 65%)","cmyk(0%, 0%, 49%, 14%)" +brightgold,#D9D919,"rgb(217, 217, 25)","rgb(85%, 85%, 10%)","hsl(60, 79%, 47%)","cmyk(0%, 0%, 88%, 15%)" +lightgoldenrodyellow (SVG),#FAFAD2,"rgb(250, 250, 210)","rgb(98%, 98%, 82%)","hsl(60, 80%, 90%)","cmyk(0%, 0%, 16%, 2%)" +olive (16 SVG),#808000,"rgb(128, 128, 0)","rgb(50%, 50%, 0%)","hsl(60, 100%, 25%)","cmyk(0%, 0%, 100%, 50%)" +yellow4,#8B8B00,"rgb(139, 139, 0)","rgb(55%, 55%, 0%)","hsl(60, 100%, 27%)","cmyk(0%, 0%, 100%, 45%)" +yellow3,#CDCD00,"rgb(205, 205, 0)","rgb(80%, 80%, 0%)","hsl(60, 100%, 40%)","cmyk(0%, 0%, 100%, 20%)" +ralphyellow (Safe Hex3),#CCCC00,"rgb(204, 204, 0)","rgb(80%, 80%, 0%)","hsl(60, 100%, 40%)","cmyk(0%, 0%, 100%, 20%)" +yellow2 (Hex3),#EEEE00,"rgb(238, 238, 0)","rgb(93%, 93%, 0%)","hsl(60, 100%, 47%)","cmyk(0%, 0%, 100%, 7%)" +yellow (Safe 16 SVG Hex3),#FFFF00,"rgb(255, 255, 0)","rgb(100%, 100%, 0%)","hsl(60, 100%, 50%)","cmyk(0%, 0%, 100%, 0%)" +papaya,#FFFF7E,"rgb(255, 255, 126)","rgb(100%, 100%, 49%)","hsl(60, 100%, 75%)","cmyk(0%, 0%, 51%, 0%)" +popcornyellow (Hex3),#FFFFAA,"rgb(255, 255, 170)","rgb(100%, 100%, 67%)","hsl(60, 100%, 83%)","cmyk(0%, 0%, 33%, 0%)" +bone (Safe Hex3),#FFFFCC,"rgb(255, 255, 204)","rgb(100%, 100%, 80%)","hsl(60, 100%, 90%)","cmyk(0%, 0%, 20%, 0%)" +lightyellow (SVG),#FFFFE0,"rgb(255, 255, 224)","rgb(100%, 100%, 88%)","hsl(60, 100%, 94%)","cmyk(0%, 0%, 12%, 0%)" +ivory (SVG),#FFFFF0,"rgb(255, 255, 240)","rgb(100%, 100%, 94%)","hsl(60, 100%, 97%)","cmyk(0%, 0%, 6%, 0%)" +soylent yellow,#F4F776,"rgb(244, 247, 118)","rgb(96%, 97%, 46%)","hsl(61, 89%, 72%)","cmyk(1%, 0%, 52%, 3%)" +fire truck green,#CDD704,"rgb(205, 215, 4)","rgb(80%, 84%, 2%)","hsl(63, 96%, 43%)","cmyk(5%, 0%, 98%, 16%)" +avocado,#98A148,"rgb(152, 161, 72)","rgb(60%, 63%, 28%)","hsl(66, 38%, 46%)","cmyk(6%, 0%, 55%, 37%)" +celery,#CFD784,"rgb(207, 215, 132)","rgb(81%, 84%, 52%)","hsl(66, 51%, 68%)","cmyk(4%, 0%, 39%, 16%)" +pear,#D1E231,"rgb(209, 226, 49)","rgb(82%, 89%, 19%)","hsl(66, 75%, 54%)","cmyk(8%, 0%, 78%, 11%)" +wasabi sauce,#AEBB51,"rgb(174, 187, 81)","rgb(68%, 73%, 32%)","hsl(67, 44%, 53%)","cmyk(7%, 0%, 57%, 27%)" +battleship,#D0D2C4,"rgb(208, 210, 196)","rgb(82%, 82%, 77%)","hsl(69, 13%, 80%)","cmyk(1%, 0%, 7%, 18%)" +kermit,#A2BC13,"rgb(162, 188, 19)","rgb(64%, 74%, 7%)","hsl(69, 82%, 41%)","cmyk(14%, 0%, 90%, 26%)" +key lime pie,#B3C95A,"rgb(179, 201, 90)","rgb(70%, 79%, 35%)","hsl(72, 51%, 57%)","cmyk(11%, 0%, 55%, 21%)" +breadfruit,#859C27,"rgb(133, 156, 39)","rgb(52%, 61%, 15%)","hsl(72, 60%, 38%)","cmyk(15%, 0%, 75%, 39%)" +iceberg lettuce,#CDE472,"rgb(205, 228, 114)","rgb(80%, 89%, 45%)","hsl(72, 68%, 67%)","cmyk(10%, 0%, 50%, 11%)" +titaniumwhite,#FCFFF0,"rgb(252, 255, 240)","rgb(99%, 100%, 94%)","hsl(72, 100%, 97%)","cmyk(1%, 0%, 6%, 0%)" +safety vest,#C8F526,"rgb(200, 245, 38)","rgb(78%, 96%, 15%)","hsl(73, 91%, 55%)","cmyk(18%, 0%, 84%, 4%)" +jack pine,#414F12,"rgb(65, 79, 18)","rgb(25%, 31%, 7%)","hsl(74, 63%, 19%)","cmyk(18%, 0%, 77%, 69%)" +chromeoxidegreen,#668014,"rgb(102, 128, 20)","rgb(40%, 50%, 8%)","hsl(74, 73%, 29%)","cmyk(20%, 0%, 84%, 50%)" +goldgreen (Hex3),#AADD00,"rgb(170, 221, 0)","rgb(67%, 87%, 0%)","hsl(74, 100%, 43%)","cmyk(23%, 0%, 100%, 13%)" +chartreuse verte,#BCE937,"rgb(188, 233, 55)","rgb(74%, 91%, 22%)","hsl(75, 80%, 56%)","cmyk(19%, 0%, 76%, 9%)" +watermelon rind,#54632C,"rgb(84, 99, 44)","rgb(33%, 39%, 17%)","hsl(76, 38%, 28%)","cmyk(15%, 0%, 56%, 61%)" +martini olive,#8BA446,"rgb(139, 164, 70)","rgb(55%, 64%, 27%)","hsl(76, 40%, 46%)","cmyk(15%, 0%, 57%, 36%)" +sweet potato vine,#A2C93A,"rgb(162, 201, 58)","rgb(64%, 79%, 23%)","hsl(76, 57%, 51%)","cmyk(19%, 0%, 71%, 21%)" +limepulp,#D4ED91,"rgb(212, 237, 145)","rgb(83%, 93%, 57%)","hsl(76, 72%, 75%)","cmyk(11%, 0%, 39%, 7%)" +cat eye,#BEE554,"rgb(190, 229, 84)","rgb(75%, 90%, 33%)","hsl(76, 74%, 61%)","cmyk(17%, 0%, 63%, 10%)" +jolly green,#9CCB19,"rgb(156, 203, 25)","rgb(61%, 80%, 10%)","hsl(76, 78%, 45%)","cmyk(23%, 0%, 88%, 20%)" +avacado,#A2C257,"rgb(162, 194, 87)","rgb(64%, 76%, 34%)","hsl(78, 47%, 55%)","cmyk(16%, 0%, 55%, 24%)" +chrome,#E8F1D4,"rgb(232, 241, 212)","rgb(91%, 95%, 83%)","hsl(79, 51%, 89%)","cmyk(4%, 0%, 12%, 5%)" +olivedrab4,#698B22,"rgb(105, 139, 34)","rgb(41%, 55%, 13%)","hsl(79, 61%, 34%)","cmyk(24%, 0%, 76%, 45%)" +pea,#79973F,"rgb(121, 151, 63)","rgb(47%, 59%, 25%)","hsl(80, 41%, 42%)","cmyk(20%, 0%, 58%, 41%)" +olivedrab (SVG),#6B8E23,"rgb(107, 142, 35)","rgb(42%, 56%, 14%)","hsl(80, 60%, 35%)","cmyk(25%, 0%, 75%, 44%)" +yellowgreen2,#99CC32,"rgb(153, 204, 50)","rgb(60%, 80%, 20%)","hsl(80, 61%, 50%)","cmyk(25%, 0%, 75%, 20%)" +yellowgreen (SVG),#9ACD32,"rgb(154, 205, 50)","rgb(60%, 80%, 20%)","hsl(80, 61%, 50%)","cmyk(25%, 0%, 76%, 20%)" +olivedrab2,#B3EE3A,"rgb(179, 238, 58)","rgb(70%, 93%, 23%)","hsl(80, 84%, 58%)","cmyk(25%, 0%, 76%, 7%)" +olivedrab1,#C0FF3E,"rgb(192, 255, 62)","rgb(75%, 100%, 24%)","hsl(80, 100%, 62%)","cmyk(25%, 0%, 76%, 0%)" +melonrindgreen,#DFFFA5,"rgb(223, 255, 165)","rgb(87%, 100%, 65%)","hsl(81, 100%, 82%)","cmyk(13%, 0%, 35%, 0%)" +darkolivegreen (SVG),#556B2F,"rgb(85, 107, 47)","rgb(33%, 42%, 18%)","hsl(82, 39%, 30%)","cmyk(21%, 0%, 56%, 58%)" +darkolivegreen4,#6E8B3D,"rgb(110, 139, 61)","rgb(43%, 55%, 24%)","hsl(82, 39%, 39%)","cmyk(21%, 0%, 56%, 45%)" +darkolivegreen3,#A2CD5A,"rgb(162, 205, 90)","rgb(64%, 80%, 35%)","hsl(82, 53%, 58%)","cmyk(21%, 0%, 56%, 20%)" +darkolivegreen2,#BCEE68,"rgb(188, 238, 104)","rgb(74%, 93%, 41%)","hsl(82, 80%, 67%)","cmyk(21%, 0%, 56%, 7%)" +darkolivegreen1,#CAFF70,"rgb(202, 255, 112)","rgb(79%, 100%, 44%)","hsl(82, 100%, 72%)","cmyk(21%, 0%, 56%, 0%)" +greenyellow (SVG),#ADFF2F,"rgb(173, 255, 47)","rgb(68%, 100%, 18%)","hsl(84, 100%, 59%)","cmyk(32%, 0%, 82%, 0%)" +terreverte,#385E0F,"rgb(56, 94, 15)","rgb(22%, 37%, 6%)","hsl(89, 72%, 21%)","cmyk(40%, 0%, 84%, 63%)" +lizard,#5A6351,"rgb(90, 99, 81)","rgb(35%, 39%, 32%)","hsl(90, 10%, 35%)","cmyk(9%, 0%, 18%, 61%)" +cactus,#636F57,"rgb(99, 111, 87)","rgb(39%, 44%, 34%)","hsl(90, 12%, 39%)","cmyk(11%, 0%, 22%, 56%)" +fenway grass,#526F35,"rgb(82, 111, 53)","rgb(32%, 44%, 21%)","hsl(90, 35%, 32%)","cmyk(26%, 0%, 52%, 56%)" +romaine lettuce,#3B5323,"rgb(59, 83, 35)","rgb(23%, 33%, 14%)","hsl(90, 41%, 23%)","cmyk(29%, 0%, 58%, 67%)" +pea,#78AB46,"rgb(120, 171, 70)","rgb(47%, 67%, 27%)","hsl(90, 42%, 47%)","cmyk(30%, 0%, 59%, 33%)" +kakapo,#4A7023,"rgb(74, 112, 35)","rgb(29%, 44%, 14%)","hsl(90, 52%, 29%)","cmyk(34%, 0%, 69%, 56%)" +chartreuse4,#458B00,"rgb(69, 139, 0)","rgb(27%, 55%, 0%)","hsl(90, 100%, 27%)","cmyk(50%, 0%, 100%, 45%)" +chartreuse3,#66CD00,"rgb(102, 205, 0)","rgb(40%, 80%, 0%)","hsl(90, 100%, 40%)","cmyk(50%, 0%, 100%, 20%)" +chartreuse2,#76EE00,"rgb(118, 238, 0)","rgb(46%, 93%, 0%)","hsl(90, 100%, 47%)","cmyk(50%, 0%, 100%, 7%)" +lawngreen (SVG),#7CFC00,"rgb(124, 252, 0)","rgb(49%, 99%, 0%)","hsl(90, 100%, 49%)","cmyk(51%, 0%, 100%, 1%)" +chartreuse (SVG),#7FFF00,"rgb(127, 255, 0)","rgb(50%, 100%, 0%)","hsl(90, 100%, 50%)","cmyk(50%, 0%, 100%, 0%)" +kiwi,#7F9A65,"rgb(127, 154, 101)","rgb(50%, 60%, 40%)","hsl(91, 21%, 50%)","cmyk(18%, 0%, 34%, 40%)" +soylent green,#8BA870,"rgb(139, 168, 112)","rgb(55%, 66%, 44%)","hsl(91, 24%, 55%)","cmyk(17%, 0%, 33%, 34%)" +mint candy,#9CBA7F,"rgb(156, 186, 127)","rgb(61%, 73%, 50%)","hsl(91, 30%, 61%)","cmyk(16%, 0%, 32%, 27%)" +wet moss,#3D5229,"rgb(61, 82, 41)","rgb(24%, 32%, 16%)","hsl(91, 33%, 24%)","cmyk(26%, 0%, 50%, 68%)" +green apple,#629632,"rgb(98, 150, 50)","rgb(38%, 59%, 20%)","hsl(91, 50%, 39%)","cmyk(35%, 0%, 67%, 41%)" +tree moss,#659D32,"rgb(101, 157, 50)","rgb(40%, 62%, 20%)","hsl(91, 52%, 41%)","cmyk(36%, 0%, 68%, 38%)" +limerind,#324F17,"rgb(50, 79, 23)","rgb(20%, 31%, 9%)","hsl(91, 55%, 20%)","cmyk(37%, 0%, 71%, 69%)" +flight jacket,#7F8778,"rgb(127, 135, 120)","rgb(50%, 53%, 47%)","hsl(92, 6%, 50%)","cmyk(6%, 0%, 11%, 47%)" +broccoli,#586949,"rgb(88, 105, 73)","rgb(35%, 41%, 29%)","hsl(92, 18%, 35%)","cmyk(16%, 0%, 30%, 59%)" +palm,#608341,"rgb(96, 131, 65)","rgb(38%, 51%, 25%)","hsl(92, 34%, 38%)","cmyk(27%, 0%, 50%, 49%)" +green mist,#BCED91,"rgb(188, 237, 145)","rgb(74%, 93%, 57%)","hsl(92, 72%, 75%)","cmyk(21%, 0%, 39%, 7%)" +holly,#488214,"rgb(72, 130, 20)","rgb(28%, 51%, 8%)","hsl(92, 73%, 29%)","cmyk(45%, 0%, 85%, 49%)" +od green,#46523C,"rgb(70, 82, 60)","rgb(27%, 32%, 24%)","hsl(93, 15%, 28%)","cmyk(15%, 0%, 27%, 68%)" +green hornet,#6A8455,"rgb(106, 132, 85)","rgb(42%, 52%, 33%)","hsl(93, 22%, 43%)","cmyk(20%, 0%, 36%, 48%)" +camo1,#CFDBC5,"rgb(207, 219, 197)","rgb(81%, 86%, 77%)","hsl(93, 23%, 82%)","cmyk(5%, 0%, 10%, 14%)" +mtn dew bottle,#577A3A,"rgb(87, 122, 58)","rgb(34%, 48%, 23%)","hsl(93, 36%, 35%)","cmyk(29%, 0%, 52%, 52%)" +green pepper,#397D02,"rgb(57, 125, 2)","rgb(22%, 49%, 1%)","hsl(93, 97%, 25%)","cmyk(54%, 0%, 98%, 51%)" +seaweed roll,#748269,"rgb(116, 130, 105)","rgb(45%, 51%, 41%)","hsl(94, 11%, 46%)","cmyk(11%, 0%, 19%, 49%)" +neon green,#83F52C,"rgb(131, 245, 44)","rgb(51%, 96%, 17%)","hsl(94, 91%, 57%)","cmyk(47%, 0%, 82%, 4%)" +forestgreen2,#567E3A,"rgb(86, 126, 58)","rgb(34%, 49%, 23%)","hsl(95, 37%, 36%)","cmyk(32%, 0%, 54%, 51%)" +camo3,#9DB68C,"rgb(157, 182, 140)","rgb(62%, 71%, 55%)","hsl(96, 22%, 63%)","cmyk(14%, 0%, 23%, 29%)" +lichen,#C0D9AF,"rgb(192, 217, 175)","rgb(75%, 85%, 69%)","hsl(96, 36%, 77%)","cmyk(12%, 0%, 19%, 15%)" +guacamole,#A6D785,"rgb(166, 215, 133)","rgb(65%, 84%, 52%)","hsl(96, 51%, 68%)","cmyk(23%, 0%, 38%, 16%)" +cinnabargreen,#61B329,"rgb(97, 179, 41)","rgb(38%, 70%, 16%)","hsl(96, 63%, 43%)","cmyk(46%, 0%, 77%, 30%)" +green goo,#77896C,"rgb(119, 137, 108)","rgb(47%, 54%, 42%)","hsl(97, 12%, 48%)","cmyk(13%, 0%, 21%, 46%)" +pond scum,#687E5A,"rgb(104, 126, 90)","rgb(41%, 49%, 35%)","hsl(97, 17%, 42%)","cmyk(17%, 0%, 29%, 51%)" +douglas fir,#3F602B,"rgb(63, 96, 43)","rgb(25%, 38%, 17%)","hsl(97, 38%, 27%)","cmyk(34%, 0%, 55%, 62%)" +royal palm,#3F6826,"rgb(63, 104, 38)","rgb(25%, 41%, 15%)","hsl(97, 46%, 28%)","cmyk(39%, 0%, 63%, 59%)" +green quartz,#8AA37B,"rgb(138, 163, 123)","rgb(54%, 64%, 48%)","hsl(98, 18%, 56%)","cmyk(15%, 0%, 25%, 36%)" +green cheese,#8FA880,"rgb(143, 168, 128)","rgb(56%, 66%, 50%)","hsl(98, 19%, 58%)","cmyk(15%, 0%, 24%, 34%)" +seaweed,#646F5E,"rgb(100, 111, 94)","rgb(39%, 44%, 37%)","hsl(99, 8%, 40%)","cmyk(10%, 0%, 15%, 56%)" +noble fir,#476A34,"rgb(71, 106, 52)","rgb(28%, 42%, 20%)","hsl(99, 34%, 31%)","cmyk(33%, 0%, 51%, 58%)" +green LED,#5DFC0A,"rgb(93, 252, 10)","rgb(36%, 99%, 4%)","hsl(99, 98%, 51%)","cmyk(63%, 0%, 96%, 1%)" +spinach,#435D36,"rgb(67, 93, 54)","rgb(26%, 36%, 21%)","hsl(100, 27%, 29%)","cmyk(28%, 0%, 42%, 64%)" +greenyellow,#93DB70,"rgb(147, 219, 112)","rgb(58%, 86%, 44%)","hsl(100, 60%, 65%)","cmyk(33%, 0%, 49%, 14%)" +olive3b,#3B5E2B,"rgb(59, 94, 43)","rgb(23%, 37%, 17%)","hsl(101, 37%, 27%)","cmyk(37%, 0%, 54%, 63%)" +frog,#84BE6A,"rgb(132, 190, 106)","rgb(52%, 75%, 42%)","hsl(101, 39%, 58%)","cmyk(31%, 0%, 44%, 25%)" +kelly,#4CBB17,"rgb(76, 187, 23)","rgb(30%, 73%, 9%)","hsl(101, 78%, 41%)","cmyk(59%, 0%, 88%, 27%)" +park ranger,#484D46,"rgb(72, 77, 70)","rgb(28%, 30%, 27%)","hsl(103, 5%, 29%)","cmyk(6%, 0%, 9%, 70%)" +circuit board,#3A6629,"rgb(58, 102, 41)","rgb(23%, 40%, 16%)","hsl(103, 43%, 28%)","cmyk(43%, 0%, 60%, 60%)" +Nerf green,#49E20E,"rgb(73, 226, 14)","rgb(29%, 89%, 5%)","hsl(103, 88%, 47%)","cmyk(68%, 0%, 94%, 11%)" +sapgreen,#308014,"rgb(48, 128, 20)","rgb(19%, 50%, 8%)","hsl(104, 73%, 29%)","cmyk(63%, 0%, 84%, 50%)" +cantaloupe,#9CA998,"rgb(156, 169, 152)","rgb(61%, 66%, 60%)","hsl(106, 9%, 63%)","cmyk(8%, 0%, 10%, 34%)" +leaf,#55AE3A,"rgb(85, 174, 58)","rgb(33%, 68%, 23%)","hsl(106, 50%, 45%)","cmyk(51%, 0%, 67%, 32%)" +green moth,#7BBF6A,"rgb(123, 191, 106)","rgb(48%, 75%, 42%)","hsl(108, 40%, 58%)","cmyk(36%, 0%, 45%, 25%)" +grass,#4DBD33,"rgb(77, 189, 51)","rgb(30%, 74%, 20%)","hsl(109, 58%, 47%)","cmyk(59%, 0%, 73%, 26%)" +mint ice cream,#C5E3BF,"rgb(197, 227, 191)","rgb(77%, 89%, 75%)","hsl(110, 39%, 82%)","cmyk(13%, 0%, 16%, 11%)" +green grass of home,#395D33,"rgb(57, 93, 51)","rgb(22%, 36%, 20%)","hsl(111, 29%, 28%)","cmyk(39%, 0%, 45%, 64%)" +snake,#596C56,"rgb(89, 108, 86)","rgb(35%, 42%, 34%)","hsl(112, 11%, 38%)","cmyk(18%, 0%, 20%, 58%)" +camo2,#A9C9A4,"rgb(169, 201, 164)","rgb(66%, 79%, 64%)","hsl(112, 26%, 72%)","cmyk(16%, 0%, 18%, 21%)" +100 euro,#86C67C,"rgb(134, 198, 124)","rgb(53%, 78%, 49%)","hsl(112, 39%, 63%)","cmyk(32%, 0%, 37%, 22%)" +night vision,#7BCC70,"rgb(123, 204, 112)","rgb(48%, 80%, 44%)","hsl(113, 47%, 62%)","cmyk(40%, 0%, 45%, 20%)" +green soap,#8CDD81,"rgb(140, 221, 129)","rgb(55%, 87%, 51%)","hsl(113, 58%, 69%)","cmyk(37%, 0%, 42%, 13%)" +putting,#699864,"rgb(105, 152, 100)","rgb(41%, 60%, 39%)","hsl(114, 21%, 49%)","cmyk(31%, 0%, 34%, 40%)" +green lantern,#3D8B37,"rgb(61, 139, 55)","rgb(24%, 55%, 22%)","hsl(116, 43%, 38%)","cmyk(56%, 0%, 60%, 45%)" +tea leaves,#5F755E,"rgb(95, 117, 94)","rgb(37%, 46%, 37%)","hsl(117, 11%, 41%)","cmyk(19%, 0%, 20%, 54%)" +new $20,#B7C8B6,"rgb(183, 200, 182)","rgb(72%, 78%, 71%)","hsl(117, 14%, 75%)","cmyk(8%, 0%, 9%, 22%)" +green algae,#63AB62,"rgb(99, 171, 98)","rgb(39%, 67%, 38%)","hsl(119, 30%, 53%)","cmyk(42%, 0%, 43%, 33%)" +wales,#4AC948,"rgb(74, 201, 72)","rgb(29%, 79%, 28%)","hsl(119, 54%, 54%)","cmyk(63%, 0%, 64%, 21%)" +honeydew4,#838B83,"rgb(131, 139, 131)","rgb(51%, 55%, 51%)","hsl(120, 3%, 53%)","cmyk(6%, 0%, 6%, 45%)" +honeydew3,#C1CDC1,"rgb(193, 205, 193)","rgb(76%, 80%, 76%)","hsl(120, 11%, 78%)","cmyk(6%, 0%, 6%, 20%)" +darkseagreen4,#698B69,"rgb(105, 139, 105)","rgb(41%, 55%, 41%)","hsl(120, 14%, 48%)","cmyk(24%, 0%, 24%, 45%)" +darkgreen,#2F4F2F,"rgb(47, 79, 47)","rgb(18%, 31%, 18%)","hsl(120, 25%, 25%)","cmyk(41%, 0%, 41%, 69%)" +medium seagreen,#426F42,"rgb(66, 111, 66)","rgb(26%, 44%, 26%)","hsl(120, 25%, 35%)","cmyk(41%, 0%, 41%, 56%)" +palegreen4,#548B54,"rgb(84, 139, 84)","rgb(33%, 55%, 33%)","hsl(120, 25%, 44%)","cmyk(40%, 0%, 40%, 45%)" +darkseagreen (SVG),#8FBC8F,"rgb(143, 188, 143)","rgb(56%, 74%, 56%)","hsl(120, 25%, 65%)","cmyk(24%, 0%, 24%, 26%)" +honeydew2,#E0EEE0,"rgb(224, 238, 224)","rgb(88%, 93%, 88%)","hsl(120, 29%, 91%)","cmyk(6%, 0%, 6%, 7%)" +darkseagreen3,#9BCD9B,"rgb(155, 205, 155)","rgb(61%, 80%, 61%)","hsl(120, 33%, 71%)","cmyk(24%, 0%, 24%, 20%)" +sgichartreuse,#71C671,"rgb(113, 198, 113)","rgb(44%, 78%, 44%)","hsl(120, 43%, 61%)","cmyk(43%, 0%, 43%, 22%)" +palegreen3,#7CCD7C,"rgb(124, 205, 124)","rgb(49%, 80%, 49%)","hsl(120, 45%, 65%)","cmyk(40%, 0%, 40%, 20%)" +huntergreen,#215E21,"rgb(33, 94, 33)","rgb(13%, 37%, 13%)","hsl(120, 48%, 25%)","cmyk(65%, 0%, 65%, 63%)" +forestgreen (SVG),#228B22,"rgb(34, 139, 34)","rgb(13%, 55%, 13%)","hsl(120, 61%, 34%)","cmyk(76%, 0%, 76%, 45%)" +limegreen (SVG),#32CD32,"rgb(50, 205, 50)","rgb(20%, 80%, 20%)","hsl(120, 61%, 50%)","cmyk(76%, 0%, 76%, 20%)" +darkseagreen2,#B4EEB4,"rgb(180, 238, 180)","rgb(71%, 93%, 71%)","hsl(120, 63%, 82%)","cmyk(24%, 0%, 24%, 7%)" +light green (SVG),#90EE90,"rgb(144, 238, 144)","rgb(56%, 93%, 56%)","hsl(120, 73%, 75%)","cmyk(39%, 0%, 39%, 7%)" +palegreen (SVG),#98FB98,"rgb(152, 251, 152)","rgb(60%, 98%, 60%)","hsl(120, 93%, 79%)","cmyk(39%, 0%, 39%, 2%)" +pinegreen (Safe Hex3),#003300,"rgb(0, 51, 0)","rgb(0%, 20%, 0%)","hsl(120, 100%, 10%)","cmyk(100%, 0%, 100%, 80%)" +dumpster,#004F00,"rgb(0, 79, 0)","rgb(0%, 31%, 0%)","hsl(120, 100%, 15%)","cmyk(100%, 0%, 100%, 69%)" +darkgreen (SVG),#006400,"rgb(0, 100, 0)","rgb(0%, 39%, 0%)","hsl(120, 100%, 20%)","cmyk(100%, 0%, 100%, 61%)" +green (16 SVG),#008000,"rgb(0, 128, 0)","rgb(0%, 50%, 0%)","hsl(120, 100%, 25%)","cmyk(100%, 0%, 100%, 50%)" +green4,#008B00,"rgb(0, 139, 0)","rgb(0%, 55%, 0%)","hsl(120, 100%, 27%)","cmyk(100%, 0%, 100%, 45%)" +irish flag (Safe Hex3),#009900,"rgb(0, 153, 0)","rgb(0%, 60%, 0%)","hsl(120, 100%, 30%)","cmyk(100%, 0%, 100%, 40%)" +green3,#00CD00,"rgb(0, 205, 0)","rgb(0%, 80%, 0%)","hsl(120, 100%, 40%)","cmyk(100%, 0%, 100%, 20%)" +green2 (Hex3),#00EE00,"rgb(0, 238, 0)","rgb(0%, 93%, 0%)","hsl(120, 100%, 47%)","cmyk(100%, 0%, 100%, 7%)" +lime (Safe 16 SVG Hex3),#00FF00,"rgb(0, 255, 0)","rgb(0%, 100%, 0%)","hsl(120, 100%, 50%)","cmyk(100%, 0%, 100%, 0%)" +parrotgreen (Safe Hex3),#33FF33,"rgb(51, 255, 51)","rgb(20%, 100%, 20%)","hsl(120, 100%, 60%)","cmyk(80%, 0%, 80%, 0%)" +wasabi (Safe Hex3),#66FF66,"rgb(102, 255, 102)","rgb(40%, 100%, 40%)","hsl(120, 100%, 70%)","cmyk(60%, 0%, 60%, 0%)" +palegreen1,#9AFF9A,"rgb(154, 255, 154)","rgb(60%, 100%, 60%)","hsl(120, 100%, 80%)","cmyk(40%, 0%, 40%, 0%)" +darkseagreen1,#C1FFC1,"rgb(193, 255, 193)","rgb(76%, 100%, 76%)","hsl(120, 100%, 88%)","cmyk(24%, 0%, 24%, 0%)" +offwhitegreen (Safe Hex3),#CCFFCC,"rgb(204, 255, 204)","rgb(80%, 100%, 80%)","hsl(120, 100%, 90%)","cmyk(20%, 0%, 20%, 0%)" +honeydew (SVG),#F0FFF0,"rgb(240, 255, 240)","rgb(94%, 100%, 94%)","hsl(120, 100%, 97%)","cmyk(6%, 0%, 6%, 0%)" +green MM,#4BB74C,"rgb(75, 183, 76)","rgb(29%, 72%, 30%)","hsl(121, 43%, 51%)","cmyk(59%, 0%, 58%, 28%)" +viridianlight,#6EFF70,"rgb(110, 255, 112)","rgb(43%, 100%, 44%)","hsl(121, 100%, 72%)","cmyk(57%, 0%, 56%, 0%)" +cobaltgreen,#3D9140,"rgb(61, 145, 64)","rgb(24%, 57%, 25%)","hsl(122, 41%, 40%)","cmyk(58%, 0%, 56%, 43%)" +shamrock shake,#B2D0B4,"rgb(178, 208, 180)","rgb(70%, 82%, 71%)","hsl(124, 24%, 76%)","cmyk(14%, 0%, 13%, 18%)" +gummi green,#24D330,"rgb(36, 211, 48)","rgb(14%, 83%, 19%)","hsl(124, 71%, 48%)","cmyk(83%, 0%, 77%, 17%)" +fraser fir,#4D6B50,"rgb(77, 107, 80)","rgb(30%, 42%, 31%)","hsl(126, 16%, 36%)","cmyk(28%, 0%, 25%, 58%)" +emerald,#5B9C64,"rgb(91, 156, 100)","rgb(36%, 61%, 39%)","hsl(128, 26%, 48%)","cmyk(42%, 0%, 36%, 39%)" +green taxi,#3F9E4D,"rgb(63, 158, 77)","rgb(25%, 62%, 30%)","hsl(129, 43%, 43%)","cmyk(60%, 0%, 51%, 38%)" +green stamp,#517B58,"rgb(81, 123, 88)","rgb(32%, 48%, 35%)","hsl(130, 21%, 40%)","cmyk(34%, 0%, 28%, 52%)" +permanent green,#0AC92B,"rgb(10, 201, 43)","rgb(4%, 79%, 17%)","hsl(130, 91%, 41%)","cmyk(95%, 0%, 79%, 21%)" +mint green,#BDFCC9,"rgb(189, 252, 201)","rgb(74%, 99%, 79%)","hsl(131, 91%, 86%)","cmyk(25%, 0%, 20%, 1%)" +obsidian,#3D5B43,"rgb(61, 91, 67)","rgb(24%, 36%, 26%)","hsl(132, 20%, 30%)","cmyk(33%, 0%, 26%, 64%)" +pool table,#31B94D,"rgb(49, 185, 77)","rgb(19%, 73%, 30%)","hsl(132, 58%, 46%)","cmyk(74%, 0%, 58%, 27%)" +bottle green,#1DA237,"rgb(29, 162, 55)","rgb(11%, 64%, 22%)","hsl(132, 70%, 37%)","cmyk(82%, 0%, 66%, 36%)" +springgreen (Safe Hex3),#00FF33,"rgb(0, 255, 51)","rgb(0%, 100%, 20%)","hsl(132, 100%, 50%)","cmyk(100%, 0%, 80%, 0%)" +eton blue,#96C8A2,"rgb(150, 200, 162)","rgb(59%, 78%, 64%)","hsl(134, 31%, 69%)","cmyk(25%, 0%, 19%, 22%)" +clover,#3EA055,"rgb(62, 160, 85)","rgb(24%, 63%, 33%)","hsl(134, 44%, 44%)","cmyk(61%, 0%, 47%, 37%)" +scotland pound,#487153,"rgb(72, 113, 83)","rgb(28%, 44%, 33%)","hsl(136, 22%, 36%)","cmyk(36%, 0%, 27%, 56%)" +celtics,#00611C,"rgb(0, 97, 28)","rgb(0%, 38%, 11%)","hsl(137, 100%, 19%)","cmyk(100%, 0%, 71%, 62%)" +truegreen,#00AF33,"rgb(0, 175, 51)","rgb(0%, 69%, 20%)","hsl(137, 100%, 34%)","cmyk(100%, 0%, 71%, 31%)" +england pound,#688571,"rgb(104, 133, 113)","rgb(41%, 52%, 44%)","hsl(139, 12%, 46%)","cmyk(22%, 0%, 15%, 48%)" +LCD back,#91B49C,"rgb(145, 180, 156)","rgb(57%, 71%, 61%)","hsl(139, 19%, 64%)","cmyk(19%, 0%, 13%, 29%)" +Coke bottle,#79A888,"rgb(121, 168, 136)","rgb(47%, 66%, 53%)","hsl(139, 21%, 57%)","cmyk(28%, 0%, 19%, 34%)" +vanilla mint,#B4D7BF,"rgb(180, 215, 191)","rgb(71%, 84%, 75%)","hsl(139, 30%, 77%)","cmyk(16%, 0%, 11%, 16%)" +old money,#337147,"rgb(51, 113, 71)","rgb(20%, 44%, 28%)","hsl(139, 38%, 32%)","cmyk(55%, 0%, 37%, 56%)" +aquaman,#37BC61,"rgb(55, 188, 97)","rgb(22%, 74%, 38%)","hsl(139, 55%, 48%)","cmyk(71%, 0%, 48%, 26%)" +aquamarine,#70DB93,"rgb(112, 219, 147)","rgb(44%, 86%, 58%)","hsl(140, 60%, 65%)","cmyk(49%, 0%, 33%, 14%)" +shamrock,#40664D,"rgb(64, 102, 77)","rgb(25%, 40%, 30%)","hsl(141, 23%, 33%)","cmyk(37%, 0%, 25%, 60%)" +pastel green,#92CCA6,"rgb(146, 204, 166)","rgb(57%, 80%, 65%)","hsl(141, 36%, 69%)","cmyk(28%, 0%, 19%, 20%)" +green line,#329555,"rgb(50, 149, 85)","rgb(20%, 58%, 33%)","hsl(141, 50%, 39%)","cmyk(66%, 0%, 43%, 42%)" +banker's lamp,#0E8C3A,"rgb(14, 140, 58)","rgb(5%, 55%, 23%)","hsl(141, 82%, 30%)","cmyk(90%, 0%, 59%, 45%)" +pumice,#78A489,"rgb(120, 164, 137)","rgb(47%, 64%, 54%)","hsl(143, 19%, 56%)","cmyk(27%, 0%, 16%, 36%)" +green party,#3E6B4F,"rgb(62, 107, 79)","rgb(24%, 42%, 31%)","hsl(143, 27%, 33%)","cmyk(42%, 0%, 26%, 58%)" +cucumber,#2C5D3F,"rgb(44, 93, 63)","rgb(17%, 36%, 25%)","hsl(143, 36%, 27%)","cmyk(53%, 0%, 32%, 64%)" +blue fern,#759B84,"rgb(117, 155, 132)","rgb(46%, 61%, 52%)","hsl(144, 16%, 53%)","cmyk(25%, 0%, 15%, 39%)" +park bench,#2E6444,"rgb(46, 100, 68)","rgb(18%, 39%, 27%)","hsl(144, 37%, 29%)","cmyk(54%, 0%, 32%, 61%)" +neonavocado (Safe Hex3),#00FF66,"rgb(0, 255, 102)","rgb(0%, 100%, 40%)","hsl(144, 100%, 50%)","cmyk(100%, 0%, 60%, 0%)" +seagreen (SVG),#2E8B57,"rgb(46, 139, 87)","rgb(18%, 55%, 34%)","hsl(146, 50%, 36%)","cmyk(67%, 0%, 37%, 45%)" +seagreen2,#4EEE94,"rgb(78, 238, 148)","rgb(31%, 93%, 58%)","hsl(146, 82%, 62%)","cmyk(67%, 0%, 38%, 7%)" +emeraldgreen,#00C957,"rgb(0, 201, 87)","rgb(0%, 79%, 34%)","hsl(146, 100%, 39%)","cmyk(100%, 0%, 57%, 21%)" +seagreen1,#54FF9F,"rgb(84, 255, 159)","rgb(33%, 100%, 62%)","hsl(146, 100%, 66%)","cmyk(67%, 0%, 38%, 0%)" +moon,#DBE6E0,"rgb(219, 230, 224)","rgb(86%, 90%, 88%)","hsl(147, 18%, 88%)","cmyk(5%, 0%, 3%, 10%)" +octopus,#34925E,"rgb(52, 146, 94)","rgb(20%, 57%, 37%)","hsl(147, 47%, 39%)","cmyk(64%, 0%, 36%, 43%)" +mediumseagreen (SVG),#3CB371,"rgb(60, 179, 113)","rgb(24%, 70%, 44%)","hsl(147, 50%, 47%)","cmyk(66%, 0%, 37%, 30%)" +seagreen3,#43CD80,"rgb(67, 205, 128)","rgb(26%, 80%, 50%)","hsl(147, 58%, 53%)","cmyk(67%, 0%, 38%, 20%)" +isle royale greenstone,#426352,"rgb(66, 99, 82)","rgb(26%, 39%, 32%)","hsl(149, 20%, 32%)","cmyk(33%, 0%, 17%, 61%)" +fisherman's float,#607C6E,"rgb(96, 124, 110)","rgb(38%, 49%, 43%)","hsl(150, 13%, 43%)","cmyk(23%, 0%, 11%, 51%)" +go,#43D58C,"rgb(67, 213, 140)","rgb(26%, 84%, 55%)","hsl(150, 63%, 55%)","cmyk(69%, 0%, 34%, 16%)" +starbucks (Safe Hex3),#006633,"rgb(0, 102, 51)","rgb(0%, 40%, 20%)","hsl(150, 100%, 20%)","cmyk(100%, 0%, 50%, 60%)" +springgreen4,#008B45,"rgb(0, 139, 69)","rgb(0%, 55%, 27%)","hsl(150, 100%, 27%)","cmyk(100%, 0%, 50%, 45%)" +springgreen3,#00CD66,"rgb(0, 205, 102)","rgb(0%, 80%, 40%)","hsl(150, 100%, 40%)","cmyk(100%, 0%, 50%, 20%)" +springgreen2,#00EE76,"rgb(0, 238, 118)","rgb(0%, 93%, 46%)","hsl(150, 100%, 47%)","cmyk(100%, 0%, 50%, 7%)" +springgreen (SVG),#00FF7F,"rgb(0, 255, 127)","rgb(0%, 100%, 50%)","hsl(150, 100%, 50%)","cmyk(100%, 0%, 50%, 0%)" +mintcream (SVG),#F5FFFA,"rgb(245, 255, 250)","rgb(96%, 100%, 98%)","hsl(150, 100%, 98%)","cmyk(4%, 0%, 2%, 0%)" +lampblack,#2E473B,"rgb(46, 71, 59)","rgb(18%, 28%, 23%)","hsl(151, 21%, 23%)","cmyk(35%, 0%, 17%, 72%)" +fresh green,#5EDA9E,"rgb(94, 218, 158)","rgb(37%, 85%, 62%)","hsl(151, 63%, 61%)","cmyk(57%, 0%, 28%, 15%)" +brushed aluminum,#B6C5BE,"rgb(182, 197, 190)","rgb(71%, 77%, 75%)","hsl(152, 11%, 74%)","cmyk(8%, 0%, 4%, 23%)" +packer green,#213D30,"rgb(33, 61, 48)","rgb(13%, 24%, 19%)","hsl(152, 30%, 18%)","cmyk(46%, 0%, 21%, 76%)" +ooze,#3E7A5E,"rgb(62, 122, 94)","rgb(24%, 48%, 37%)","hsl(152, 33%, 36%)","cmyk(49%, 0%, 23%, 52%)" +army men,#327556,"rgb(50, 117, 86)","rgb(20%, 46%, 34%)","hsl(152, 40%, 33%)","cmyk(57%, 0%, 26%, 54%)" +green visor,#4D7865,"rgb(77, 120, 101)","rgb(30%, 47%, 40%)","hsl(153, 22%, 39%)","cmyk(36%, 0%, 16%, 53%)" +green bark,#597368,"rgb(89, 115, 104)","rgb(35%, 45%, 41%)","hsl(155, 13%, 40%)","cmyk(23%, 0%, 10%, 55%)" +emeraldgreen2,#28AE7B,"rgb(40, 174, 123)","rgb(16%, 68%, 48%)","hsl(157, 63%, 42%)","cmyk(77%, 0%, 29%, 32%)" +mediumspringgreen (SVG),#00FA9A,"rgb(0, 250, 154)","rgb(0%, 98%, 60%)","hsl(157, 100%, 49%)","cmyk(100%, 0%, 38%, 2%)" +seagreen,#238E68,"rgb(35, 142, 104)","rgb(14%, 56%, 41%)","hsl(159, 60%, 35%)","cmyk(75%, 0%, 27%, 44%)" +bluegrass,#4C7064,"rgb(76, 112, 100)","rgb(30%, 44%, 39%)","hsl(160, 19%, 37%)","cmyk(32%, 0%, 11%, 56%)" +aquamarine4,#458B74,"rgb(69, 139, 116)","rgb(27%, 55%, 45%)","hsl(160, 34%, 41%)","cmyk(50%, 0%, 17%, 45%)" +mediumaquamarine (SVG),#66CDAA,"rgb(102, 205, 170)","rgb(40%, 80%, 67%)","hsl(160, 51%, 60%)","cmyk(50%, 0%, 17%, 20%)" +medium aquamarine2,#32CC99,"rgb(50, 204, 153)","rgb(20%, 80%, 60%)","hsl(160, 61%, 50%)","cmyk(75%, 0%, 25%, 20%)" +medium aquamarine3,#32CD99,"rgb(50, 205, 153)","rgb(20%, 80%, 60%)","hsl(160, 61%, 50%)","cmyk(76%, 0%, 25%, 20%)" +aquamarine2,#76EEC6,"rgb(118, 238, 198)","rgb(46%, 93%, 78%)","hsl(160, 78%, 70%)","cmyk(50%, 0%, 17%, 7%)" +seagreen (Hex3),#00FFAA,"rgb(0, 255, 170)","rgb(0%, 100%, 67%)","hsl(160, 100%, 50%)","cmyk(100%, 0%, 33%, 0%)" +aquamarine (SVG),#7FFFD4,"rgb(127, 255, 212)","rgb(50%, 100%, 83%)","hsl(160, 100%, 75%)","cmyk(50%, 0%, 17%, 0%)" +indigo2,#218868,"rgb(33, 136, 104)","rgb(13%, 53%, 41%)","hsl(161, 61%, 33%)","cmyk(76%, 0%, 24%, 47%)" +coldgrey,#808A87,"rgb(128, 138, 135)","rgb(50%, 54%, 53%)","hsl(162, 4%, 52%)","cmyk(7%, 0%, 2%, 46%)" +garden hose,#138F6A,"rgb(19, 143, 106)","rgb(7%, 56%, 42%)","hsl(162, 77%, 32%)","cmyk(87%, 0%, 26%, 44%)" +turquoiseblue,#00C78C,"rgb(0, 199, 140)","rgb(0%, 78%, 55%)","hsl(162, 100%, 39%)","cmyk(100%, 0%, 30%, 22%)" +green card,#D0FAEE,"rgb(208, 250, 238)","rgb(82%, 98%, 93%)","hsl(163, 81%, 90%)","cmyk(17%, 0%, 5%, 2%)" +blue green algae,#3B8471,"rgb(59, 132, 113)","rgb(23%, 52%, 44%)","hsl(164, 38%, 37%)","cmyk(55%, 0%, 14%, 48%)" +electric turquoise,#49E9BD,"rgb(73, 233, 189)","rgb(29%, 91%, 74%)","hsl(164, 78%, 60%)","cmyk(69%, 0%, 19%, 9%)" +6 ball,#1B6453,"rgb(27, 100, 83)","rgb(11%, 39%, 33%)","hsl(166, 57%, 25%)","cmyk(73%, 0%, 17%, 61%)" +cooler,#284942,"rgb(40, 73, 66)","rgb(16%, 29%, 26%)","hsl(167, 29%, 22%)","cmyk(45%, 0%, 10%, 71%)" +turquoise,#0FDDAF,"rgb(15, 221, 175)","rgb(6%, 87%, 69%)","hsl(167, 87%, 46%)","cmyk(93%, 0%, 21%, 13%)" +sign green,#006B54,"rgb(0, 107, 84)","rgb(0%, 42%, 33%)","hsl(167, 100%, 21%)","cmyk(100%, 0%, 21%, 58%)" +green ash,#668E86,"rgb(102, 142, 134)","rgb(40%, 56%, 53%)","hsl(168, 16%, 48%)","cmyk(28%, 0%, 6%, 44%)" +greencopper,#527F76,"rgb(82, 127, 118)","rgb(32%, 50%, 46%)","hsl(168, 22%, 41%)","cmyk(35%, 0%, 7%, 50%)" +liberty,#A4DCD1,"rgb(164, 220, 209)","rgb(64%, 86%, 82%)","hsl(168, 44%, 75%)","cmyk(25%, 0%, 5%, 14%)" +masters jacket,#174038,"rgb(23, 64, 56)","rgb(9%, 25%, 22%)","hsl(168, 47%, 17%)","cmyk(64%, 0%, 13%, 75%)" +emerald city,#20BF9F,"rgb(32, 191, 159)","rgb(13%, 75%, 62%)","hsl(168, 71%, 44%)","cmyk(83%, 0%, 17%, 25%)" +light teal (Safe Hex3),#00FFCC,"rgb(0, 255, 204)","rgb(0%, 100%, 80%)","hsl(168, 100%, 50%)","cmyk(100%, 0%, 20%, 0%)" +darkgreencopper,#4A766E,"rgb(74, 118, 110)","rgb(29%, 46%, 43%)","hsl(169, 23%, 38%)","cmyk(37%, 0%, 7%, 54%)" +green scrubs,#4F8E83,"rgb(79, 142, 131)","rgb(31%, 56%, 51%)","hsl(170, 29%, 43%)","cmyk(44%, 0%, 8%, 44%)" +mediterranean,#3E766D,"rgb(62, 118, 109)","rgb(24%, 46%, 43%)","hsl(170, 31%, 35%)","cmyk(47%, 0%, 8%, 54%)" +green gables,#3E766D,"rgb(62, 118, 109)","rgb(24%, 46%, 43%)","hsl(170, 31%, 35%)","cmyk(47%, 0%, 8%, 54%)" +blue lagoon,#4CB7A5,"rgb(76, 183, 165)","rgb(30%, 72%, 65%)","hsl(170, 43%, 51%)","cmyk(58%, 0%, 10%, 28%)" +aquarium,#2FAA96,"rgb(47, 170, 150)","rgb(18%, 67%, 59%)","hsl(170, 57%, 43%)","cmyk(72%, 0%, 12%, 33%)" +mint blue,#DBFEF8,"rgb(219, 254, 248)","rgb(86%, 100%, 97%)","hsl(170, 95%, 93%)","cmyk(14%, 0%, 2%, 0%)" +blue ice,#DAF4F0,"rgb(218, 244, 240)","rgb(85%, 96%, 94%)","hsl(171, 54%, 91%)","cmyk(11%, 0%, 2%, 4%)" +malachite,#108070,"rgb(16, 128, 112)","rgb(6%, 50%, 44%)","hsl(171, 78%, 28%)","cmyk(88%, 0%, 13%, 50%)" +atlantic green,#2A8E82,"rgb(42, 142, 130)","rgb(16%, 56%, 51%)","hsl(173, 54%, 36%)","cmyk(70%, 0%, 8%, 44%)" +army uniform,#353F3E,"rgb(53, 63, 62)","rgb(21%, 25%, 24%)","hsl(174, 9%, 23%)","cmyk(16%, 0%, 2%, 75%)" +pacific green,#36DBCA,"rgb(54, 219, 202)","rgb(21%, 86%, 79%)","hsl(174, 70%, 54%)","cmyk(75%, 0%, 8%, 14%)" +turquoise (SVG),#40E0D0,"rgb(64, 224, 208)","rgb(25%, 88%, 82%)","hsl(174, 72%, 56%)","cmyk(71%, 0%, 7%, 12%)" +wavecrest,#99CDC9,"rgb(153, 205, 201)","rgb(60%, 80%, 79%)","hsl(175, 34%, 70%)","cmyk(25%, 0%, 2%, 20%)" +natural turquoise,#45C3B8,"rgb(69, 195, 184)","rgb(27%, 76%, 72%)","hsl(175, 51%, 52%)","cmyk(65%, 0%, 6%, 24%)" +manganeseblue,#03A89E,"rgb(3, 168, 158)","rgb(1%, 66%, 62%)","hsl(176, 96%, 34%)","cmyk(98%, 0%, 6%, 34%)" +green agate,#457371,"rgb(69, 115, 113)","rgb(27%, 45%, 44%)","hsl(177, 25%, 36%)","cmyk(40%, 0%, 2%, 55%)" +lightseagreen (SVG),#20B2AA,"rgb(32, 178, 170)","rgb(13%, 70%, 67%)","hsl(177, 70%, 41%)","cmyk(82%, 0%, 4%, 30%)" +mouthwash,#01C5BB,"rgb(1, 197, 187)","rgb(0%, 77%, 73%)","hsl(177, 99%, 39%)","cmyk(99%, 0%, 5%, 23%)" +mediumturquoise (SVG),#48D1CC,"rgb(72, 209, 204)","rgb(28%, 82%, 80%)","hsl(178, 60%, 55%)","cmyk(66%, 0%, 2%, 18%)" +cool mint,#90FEFB,"rgb(144, 254, 251)","rgb(56%, 100%, 98%)","hsl(178, 98%, 78%)","cmyk(43%, 0%, 1%, 0%)" +sea green,#068481,"rgb(6, 132, 129)","rgb(2%, 52%, 51%)","hsl(179, 91%, 27%)","cmyk(95%, 0%, 2%, 48%)" +azure4,#838B8B,"rgb(131, 139, 139)","rgb(51%, 55%, 55%)","hsl(180, 3%, 53%)","cmyk(6%, 0%, 0%, 45%)" +light cyan4,#7A8B8B,"rgb(122, 139, 139)","rgb(48%, 55%, 55%)","hsl(180, 7%, 51%)","cmyk(12%, 0%, 0%, 45%)" +azure3,#C1CDCD,"rgb(193, 205, 205)","rgb(76%, 80%, 80%)","hsl(180, 11%, 78%)","cmyk(6%, 0%, 0%, 20%)" +paleturquoise4,#668B8B,"rgb(102, 139, 139)","rgb(40%, 55%, 55%)","hsl(180, 15%, 47%)","cmyk(27%, 0%, 0%, 45%)" +light cyan3,#B4CDCD,"rgb(180, 205, 205)","rgb(71%, 80%, 80%)","hsl(180, 20%, 75%)","cmyk(12%, 0%, 0%, 20%)" +darkslategray (SVG),#2F4F4F,"rgb(47, 79, 79)","rgb(18%, 31%, 31%)","hsl(180, 25%, 25%)","cmyk(41%, 0%, 0%, 69%)" +darkslategrey (SVG),#2F4F4F,"rgb(47, 79, 79)","rgb(18%, 31%, 31%)","hsl(180, 25%, 25%)","cmyk(41%, 0%, 0%, 69%)" +cadetblue,#5F9F9F,"rgb(95, 159, 159)","rgb(37%, 62%, 62%)","hsl(180, 25%, 50%)","cmyk(40%, 0%, 0%, 38%)" +light blue,#C0D9D9,"rgb(192, 217, 217)","rgb(75%, 85%, 85%)","hsl(180, 25%, 80%)","cmyk(12%, 0%, 0%, 15%)" +darkslategray4,#528B8B,"rgb(82, 139, 139)","rgb(32%, 55%, 55%)","hsl(180, 26%, 43%)","cmyk(41%, 0%, 0%, 45%)" +azure2,#E0EEEE,"rgb(224, 238, 238)","rgb(88%, 93%, 93%)","hsl(180, 29%, 91%)","cmyk(6%, 0%, 0%, 7%)" +paleturquoise3,#96CDCD,"rgb(150, 205, 205)","rgb(59%, 80%, 80%)","hsl(180, 35%, 70%)","cmyk(27%, 0%, 0%, 20%)" +sgiteal,#388E8E,"rgb(56, 142, 142)","rgb(22%, 56%, 56%)","hsl(180, 43%, 39%)","cmyk(61%, 0%, 0%, 44%)" +darkslategray3,#79CDCD,"rgb(121, 205, 205)","rgb(47%, 80%, 80%)","hsl(180, 46%, 64%)","cmyk(41%, 0%, 0%, 20%)" +light cyan2,#D1EEEE,"rgb(209, 238, 238)","rgb(82%, 93%, 93%)","hsl(180, 46%, 88%)","cmyk(12%, 0%, 0%, 7%)" +light blue,#8FD8D8,"rgb(143, 216, 216)","rgb(56%, 85%, 85%)","hsl(180, 48%, 70%)","cmyk(34%, 0%, 0%, 15%)" +aqua (Safe Hex3),#66CCCC,"rgb(102, 204, 204)","rgb(40%, 80%, 80%)","hsl(180, 50%, 60%)","cmyk(50%, 0%, 0%, 20%)" +turquoise,#ADEAEA,"rgb(173, 234, 234)","rgb(68%, 92%, 92%)","hsl(180, 59%, 80%)","cmyk(26%, 0%, 0%, 8%)" +medium turquoise,#70DBDB,"rgb(112, 219, 219)","rgb(44%, 86%, 86%)","hsl(180, 60%, 65%)","cmyk(49%, 0%, 0%, 14%)" +paleturquoise2,#AEEEEE,"rgb(174, 238, 238)","rgb(68%, 93%, 93%)","hsl(180, 65%, 81%)","cmyk(27%, 0%, 0%, 7%)" +paleturquoise (SVG),#AFEEEE,"rgb(175, 238, 238)","rgb(69%, 93%, 93%)","hsl(180, 65%, 81%)","cmyk(26%, 0%, 0%, 7%)" +darkslategray2,#8DEEEE,"rgb(141, 238, 238)","rgb(55%, 93%, 93%)","hsl(180, 74%, 74%)","cmyk(41%, 0%, 0%, 7%)" +metallic mint,#37FDFC,"rgb(55, 253, 252)","rgb(22%, 99%, 99%)","hsl(180, 98%, 60%)","cmyk(78%, 0%, 0%, 1%)" +teal (16 SVG),#008080,"rgb(0, 128, 128)","rgb(0%, 50%, 50%)","hsl(180, 100%, 25%)","cmyk(100%, 0%, 0%, 50%)" +darkcyan (SVG),#008B8B,"rgb(0, 139, 139)","rgb(0%, 55%, 55%)","hsl(180, 100%, 27%)","cmyk(100%, 0%, 0%, 45%)" +cyan3,#00CDCD,"rgb(0, 205, 205)","rgb(0%, 80%, 80%)","hsl(180, 100%, 40%)","cmyk(100%, 0%, 0%, 20%)" +cyan2 (Hex3),#00EEEE,"rgb(0, 238, 238)","rgb(0%, 93%, 93%)","hsl(180, 100%, 47%)","cmyk(100%, 0%, 0%, 7%)" +aqua (Safe 16 SVG Hex3),#00FFFF,"rgb(0, 255, 255)","rgb(0%, 100%, 100%)","hsl(180, 100%, 50%)","cmyk(100%, 0%, 0%, 0%)" +cyan (Safe 16=aqua SVG Hex3),#00FFFF,"rgb(0, 255, 255)","rgb(0%, 100%, 100%)","hsl(180, 100%, 50%)","cmyk(100%, 0%, 0%, 0%)" +darkslategray1,#97FFFF,"rgb(151, 255, 255)","rgb(59%, 100%, 100%)","hsl(180, 100%, 80%)","cmyk(41%, 0%, 0%, 0%)" +paleturquoise1 (Hex3),#BBFFFF,"rgb(187, 255, 255)","rgb(73%, 100%, 100%)","hsl(180, 100%, 87%)","cmyk(27%, 0%, 0%, 0%)" +lightcyan (SVG),#E0FFFF,"rgb(224, 255, 255)","rgb(88%, 100%, 100%)","hsl(180, 100%, 94%)","cmyk(12%, 0%, 0%, 0%)" +azure (SVG),#F0FFFF,"rgb(240, 255, 255)","rgb(94%, 100%, 100%)","hsl(180, 100%, 97%)","cmyk(6%, 0%, 0%, 0%)" +darkturquoise (SVG),#00CED1,"rgb(0, 206, 209)","rgb(0%, 81%, 82%)","hsl(181, 100%, 41%)","cmyk(100%, 1%, 0%, 18%)" +cadetblue (SVG),#5F9EA0,"rgb(95, 158, 160)","rgb(37%, 62%, 63%)","hsl(182, 25%, 50%)","cmyk(41%, 1%, 0%, 37%)" +turquoise4,#00868B,"rgb(0, 134, 139)","rgb(0%, 53%, 55%)","hsl(182, 100%, 27%)","cmyk(100%, 4%, 0%, 45%)" +turquoise3,#00C5CD,"rgb(0, 197, 205)","rgb(0%, 77%, 80%)","hsl(182, 100%, 40%)","cmyk(100%, 4%, 0%, 20%)" +turquoise2,#00E5EE,"rgb(0, 229, 238)","rgb(0%, 90%, 93%)","hsl(182, 100%, 47%)","cmyk(100%, 4%, 0%, 7%)" +turquoise1,#00F5FF,"rgb(0, 245, 255)","rgb(0%, 96%, 100%)","hsl(182, 100%, 50%)","cmyk(100%, 4%, 0%, 0%)" +swimming pool,#67E6EC,"rgb(103, 230, 236)","rgb(40%, 90%, 93%)","hsl(183, 78%, 66%)","cmyk(56%, 3%, 0%, 7%)" +fenway monster,#4A777A,"rgb(74, 119, 122)","rgb(29%, 47%, 48%)","hsl(184, 24%, 38%)","cmyk(39%, 2%, 0%, 52%)" +teal LED,#05EDFF,"rgb(5, 237, 255)","rgb(2%, 93%, 100%)","hsl(184, 100%, 51%)","cmyk(98%, 7%, 0%, 0%)" +cadetblue4,#53868B,"rgb(83, 134, 139)","rgb(33%, 53%, 55%)","hsl(185, 25%, 44%)","cmyk(40%, 4%, 0%, 45%)" +old copper,#73B1B7,"rgb(115, 177, 183)","rgb(45%, 69%, 72%)","hsl(185, 32%, 58%)","cmyk(37%, 3%, 0%, 28%)" +indiglo,#05E9FF,"rgb(5, 233, 255)","rgb(2%, 91%, 100%)","hsl(185, 100%, 51%)","cmyk(98%, 9%, 0%, 0%)" +cadetblue3,#7AC5CD,"rgb(122, 197, 205)","rgb(48%, 77%, 80%)","hsl(186, 45%, 64%)","cmyk(40%, 4%, 0%, 20%)" +cadetblue2,#8EE5EE,"rgb(142, 229, 238)","rgb(56%, 90%, 93%)","hsl(186, 74%, 75%)","cmyk(40%, 4%, 0%, 7%)" +cerulean,#05B8CC,"rgb(5, 184, 204)","rgb(2%, 72%, 80%)","hsl(186, 95%, 41%)","cmyk(98%, 10%, 0%, 20%)" +cadetblue1,#98F5FF,"rgb(152, 245, 255)","rgb(60%, 96%, 100%)","hsl(186, 100%, 80%)","cmyk(40%, 4%, 0%, 0%)" +powderblue (SVG),#B0E0E6,"rgb(176, 224, 230)","rgb(69%, 88%, 90%)","hsl(187, 52%, 80%)","cmyk(23%, 3%, 0%, 10%)" +pastel blue,#C1F0F6,"rgb(193, 240, 246)","rgb(76%, 94%, 96%)","hsl(187, 75%, 86%)","cmyk(22%, 2%, 0%, 4%)" +nypd blue,#39B7CD,"rgb(57, 183, 205)","rgb(22%, 72%, 80%)","hsl(189, 60%, 51%)","cmyk(72%, 11%, 0%, 20%)" +lindsay eyes,#65909A,"rgb(101, 144, 154)","rgb(40%, 56%, 60%)","hsl(191, 21%, 50%)","cmyk(34%, 6%, 0%, 40%)" +diamond blue,#0EBFE9,"rgb(14, 191, 233)","rgb(5%, 75%, 91%)","hsl(192, 89%, 48%)","cmyk(94%, 18%, 0%, 9%)" +robin's egg,#C3E4ED,"rgb(195, 228, 237)","rgb(76%, 89%, 93%)","hsl(193, 54%, 85%)","cmyk(18%, 4%, 0%, 7%)" +light blue4,#68838B,"rgb(104, 131, 139)","rgb(41%, 51%, 55%)","hsl(194, 14%, 48%)","cmyk(25%, 6%, 0%, 45%)" +surf,#63D1F4,"rgb(99, 209, 244)","rgb(39%, 82%, 96%)","hsl(194, 87%, 67%)","cmyk(59%, 14%, 0%, 4%)" +light blue3,#9AC0CD,"rgb(154, 192, 205)","rgb(60%, 75%, 80%)","hsl(195, 34%, 70%)","cmyk(25%, 6%, 0%, 20%)" +lake michigan,#50A6C2,"rgb(80, 166, 194)","rgb(31%, 65%, 76%)","hsl(195, 48%, 54%)","cmyk(59%, 14%, 0%, 24%)" +lightblue (SVG),#ADD8E6,"rgb(173, 216, 230)","rgb(68%, 85%, 90%)","hsl(195, 53%, 79%)","cmyk(25%, 6%, 0%, 10%)" +light blue2,#B2DFEE,"rgb(178, 223, 238)","rgb(70%, 87%, 93%)","hsl(195, 64%, 82%)","cmyk(25%, 6%, 0%, 7%)" +deepskyblue4,#00688B,"rgb(0, 104, 139)","rgb(0%, 41%, 55%)","hsl(195, 100%, 27%)","cmyk(100%, 25%, 0%, 45%)" +deepskyblue3,#009ACD,"rgb(0, 154, 205)","rgb(0%, 60%, 80%)","hsl(195, 100%, 40%)","cmyk(100%, 25%, 0%, 20%)" +skyblue5 (Safe Hex3),#0099CC,"rgb(0, 153, 204)","rgb(0%, 60%, 80%)","hsl(195, 100%, 40%)","cmyk(100%, 25%, 0%, 20%)" +deepskyblue2,#00B2EE,"rgb(0, 178, 238)","rgb(0%, 70%, 93%)","hsl(195, 100%, 47%)","cmyk(100%, 25%, 0%, 7%)" +deepskyblue (SVG),#00BFFF,"rgb(0, 191, 255)","rgb(0%, 75%, 100%)","hsl(195, 100%, 50%)","cmyk(100%, 25%, 0%, 0%)" +light blue1,#BFEFFF,"rgb(191, 239, 255)","rgb(75%, 94%, 100%)","hsl(195, 100%, 87%)","cmyk(25%, 6%, 0%, 0%)" +peacock,#33A1C9,"rgb(51, 161, 201)","rgb(20%, 63%, 79%)","hsl(196, 60%, 49%)","cmyk(75%, 20%, 0%, 21%)" +LCD dark,#507786,"rgb(80, 119, 134)","rgb(31%, 47%, 53%)","hsl(197, 25%, 42%)","cmyk(40%, 11%, 0%, 47%)" +skyblue (SVG),#87CEEB,"rgb(135, 206, 235)","rgb(53%, 81%, 92%)","hsl(197, 71%, 73%)","cmyk(43%, 12%, 0%, 8%)" +summersky,#38B0DE,"rgb(56, 176, 222)","rgb(22%, 69%, 87%)","hsl(197, 72%, 55%)","cmyk(75%, 21%, 0%, 13%)" +police strobe,#0BB5FF,"rgb(11, 181, 255)","rgb(4%, 71%, 100%)","hsl(198, 100%, 52%)","cmyk(96%, 29%, 0%, 0%)" +caribbean,#42C0FB,"rgb(66, 192, 251)","rgb(26%, 75%, 98%)","hsl(199, 96%, 62%)","cmyk(74%, 24%, 0%, 2%)" +blue shark,#6996AD,"rgb(105, 150, 173)","rgb(41%, 59%, 68%)","hsl(200, 29%, 55%)","cmyk(39%, 13%, 0%, 32%)" +carolina blue,#539DC2,"rgb(83, 157, 194)","rgb(33%, 62%, 76%)","hsl(200, 48%, 54%)","cmyk(57%, 19%, 0%, 24%)" +steelblue,#236B8E,"rgb(35, 107, 142)","rgb(14%, 42%, 56%)","hsl(200, 60%, 35%)","cmyk(75%, 25%, 0%, 44%)" +skyblue6,#3299CC,"rgb(50, 153, 204)","rgb(20%, 60%, 80%)","hsl(200, 61%, 50%)","cmyk(75%, 25%, 0%, 20%)" +topaz,#0198E1,"rgb(1, 152, 225)","rgb(0%, 60%, 88%)","hsl(200, 99%, 44%)","cmyk(100%, 32%, 0%, 12%)" +blue line,#33A1DE,"rgb(51, 161, 222)","rgb(20%, 63%, 87%)","hsl(201, 72%, 54%)","cmyk(77%, 27%, 0%, 13%)" +light skyblue4,#607B8B,"rgb(96, 123, 139)","rgb(38%, 48%, 55%)","hsl(202, 18%, 46%)","cmyk(31%, 12%, 0%, 45%)" +pacific blue,#35586C,"rgb(53, 88, 108)","rgb(21%, 35%, 42%)","hsl(202, 34%, 32%)","cmyk(51%, 19%, 0%, 58%)" +blue sponge,#5D92B1,"rgb(93, 146, 177)","rgb(36%, 57%, 69%)","hsl(202, 35%, 53%)","cmyk(47%, 18%, 0%, 31%)" +light skyblue3,#8DB6CD,"rgb(141, 182, 205)","rgb(55%, 71%, 80%)","hsl(202, 39%, 68%)","cmyk(31%, 11%, 0%, 20%)" +liz eyes,#325C74,"rgb(50, 92, 116)","rgb(20%, 36%, 45%)","hsl(202, 40%, 33%)","cmyk(57%, 21%, 0%, 55%)" +light skyblue2,#A4D3EE,"rgb(164, 211, 238)","rgb(64%, 83%, 93%)","hsl(202, 69%, 79%)","cmyk(31%, 11%, 0%, 7%)" +blue mist,#82CFFD,"rgb(130, 207, 253)","rgb(51%, 81%, 99%)","hsl(202, 97%, 75%)","cmyk(49%, 18%, 0%, 1%)" +neon blue,#67C8FF,"rgb(103, 200, 255)","rgb(40%, 78%, 100%)","hsl(202, 100%, 70%)","cmyk(60%, 22%, 0%, 0%)" +light skyblue1,#B0E2FF,"rgb(176, 226, 255)","rgb(69%, 89%, 100%)","hsl(202, 100%, 85%)","cmyk(31%, 11%, 0%, 0%)" +lightskyblue (SVG),#87CEFA,"rgb(135, 206, 250)","rgb(53%, 81%, 98%)","hsl(203, 92%, 75%)","cmyk(46%, 18%, 0%, 2%)" +skyblue3,#6CA6CD,"rgb(108, 166, 205)","rgb(42%, 65%, 80%)","hsl(204, 49%, 61%)","cmyk(47%, 19%, 0%, 20%)" +skyblue4,#4A708B,"rgb(74, 112, 139)","rgb(29%, 44%, 55%)","hsl(205, 31%, 42%)","cmyk(47%, 19%, 0%, 45%)" +cerulean blue,#9BC4E2,"rgb(155, 196, 226)","rgb(61%, 77%, 89%)","hsl(205, 55%, 75%)","cmyk(31%, 13%, 0%, 11%)" +skyblue2,#7EC0EE,"rgb(126, 192, 238)","rgb(49%, 75%, 93%)","hsl(205, 77%, 71%)","cmyk(47%, 19%, 0%, 7%)" +skyblue1,#87CEFF,"rgb(135, 206, 255)","rgb(53%, 81%, 100%)","hsl(205, 100%, 76%)","cmyk(47%, 19%, 0%, 0%)" +malta blue,#517693,"rgb(81, 118, 147)","rgb(32%, 46%, 58%)","hsl(206, 29%, 45%)","cmyk(45%, 20%, 0%, 42%)" +lake huron,#5D7B93,"rgb(93, 123, 147)","rgb(36%, 48%, 58%)","hsl(207, 22%, 47%)","cmyk(37%, 16%, 0%, 42%)" +blue whale,#42647F,"rgb(66, 100, 127)","rgb(26%, 39%, 50%)","hsl(207, 32%, 38%)","cmyk(48%, 21%, 0%, 50%)" +steelblue (SVG),#4682B4,"rgb(70, 130, 180)","rgb(27%, 51%, 71%)","hsl(207, 44%, 49%)","cmyk(61%, 28%, 0%, 29%)" +steelblue3,#4F94CD,"rgb(79, 148, 205)","rgb(31%, 58%, 80%)","hsl(207, 56%, 56%)","cmyk(61%, 28%, 0%, 20%)" +steelblue2,#5CACEE,"rgb(92, 172, 238)","rgb(36%, 67%, 93%)","hsl(207, 81%, 65%)","cmyk(61%, 28%, 0%, 7%)" +steelblue1,#63B8FF,"rgb(99, 184, 255)","rgb(39%, 72%, 100%)","hsl(207, 100%, 69%)","cmyk(61%, 28%, 0%, 0%)" +blue dog,#525C65,"rgb(82, 92, 101)","rgb(32%, 36%, 40%)","hsl(208, 10%, 36%)","cmyk(19%, 9%, 0%, 60%)" +steelblue4,#36648B,"rgb(54, 100, 139)","rgb(21%, 39%, 55%)","hsl(208, 44%, 38%)","cmyk(61%, 28%, 0%, 45%)" +tropical blue,#62B1F6,"rgb(98, 177, 246)","rgb(38%, 69%, 96%)","hsl(208, 89%, 67%)","cmyk(60%, 28%, 0%, 4%)" +blue ice,#74BBFB,"rgb(116, 187, 251)","rgb(45%, 73%, 98%)","hsl(208, 94%, 72%)","cmyk(54%, 25%, 0%, 2%)" +aliceblue (SVG),#F0F8FF,"rgb(240, 248, 255)","rgb(94%, 97%, 100%)","hsl(208, 100%, 97%)","cmyk(6%, 3%, 0%, 0%)" +aquamarine,#4E78A0,"rgb(78, 120, 160)","rgb(31%, 47%, 63%)","hsl(209, 34%, 47%)","cmyk(51%, 25%, 0%, 37%)" +indigo dye,#0D4F8B,"rgb(13, 79, 139)","rgb(5%, 31%, 55%)","hsl(209, 83%, 30%)","cmyk(91%, 43%, 0%, 45%)" +slategrey (SVG),#708090,"rgb(112, 128, 144)","rgb(44%, 50%, 56%)","hsl(210, 13%, 50%)","cmyk(22%, 11%, 0%, 44%)" +slategray (SVG),#708090,"rgb(112, 128, 144)","rgb(44%, 50%, 56%)","hsl(210, 13%, 50%)","cmyk(22%, 11%, 0%, 44%)" +lightslategrey (SVG Hex3),#778899,"rgb(119, 136, 153)","rgb(47%, 53%, 60%)","hsl(210, 14%, 53%)","cmyk(22%, 11%, 0%, 40%)" +lightslategray (SVG Hex3),#778899,"rgb(119, 136, 153)","rgb(47%, 53%, 60%)","hsl(210, 14%, 53%)","cmyk(22%, 11%, 0%, 40%)" +lake erie,#6183A6,"rgb(97, 131, 166)","rgb(38%, 51%, 65%)","hsl(210, 28%, 52%)","cmyk(42%, 21%, 0%, 35%)" +slategray3,#9FB6CD,"rgb(159, 182, 205)","rgb(62%, 71%, 80%)","hsl(210, 32%, 71%)","cmyk(22%, 11%, 0%, 20%)" +sgilight blue,#7D9EC0,"rgb(125, 158, 192)","rgb(49%, 62%, 75%)","hsl(210, 35%, 62%)","cmyk(35%, 18%, 0%, 25%)" +dodgerblue4,#104E8B,"rgb(16, 78, 139)","rgb(6%, 31%, 55%)","hsl(210, 79%, 30%)","cmyk(88%, 44%, 0%, 45%)" +dodgerblue3,#1874CD,"rgb(24, 116, 205)","rgb(9%, 45%, 80%)","hsl(210, 79%, 45%)","cmyk(88%, 43%, 0%, 20%)" +dodgerblue2,#1C86EE,"rgb(28, 134, 238)","rgb(11%, 53%, 93%)","hsl(210, 86%, 52%)","cmyk(88%, 44%, 0%, 7%)" +la maison bleue,#60AFFE,"rgb(96, 175, 254)","rgb(38%, 69%, 100%)","hsl(210, 99%, 69%)","cmyk(62%, 31%, 0%, 0%)" +slateblue,#007FFF,"rgb(0, 127, 255)","rgb(0%, 50%, 100%)","hsl(210, 100%, 50%)","cmyk(100%, 50%, 0%, 0%)" +dodgerblue (SVG),#1E90FF,"rgb(30, 144, 255)","rgb(12%, 56%, 100%)","hsl(210, 100%, 56%)","cmyk(88%, 44%, 0%, 0%)" +slategray4,#6C7B8B,"rgb(108, 123, 139)","rgb(42%, 48%, 55%)","hsl(211, 13%, 48%)","cmyk(22%, 12%, 0%, 45%)" +heather blue,#B7C3D0,"rgb(183, 195, 208)","rgb(72%, 76%, 82%)","hsl(211, 21%, 77%)","cmyk(12%, 6%, 0%, 18%)" +seurat blue,#739AC5,"rgb(115, 154, 197)","rgb(45%, 60%, 77%)","hsl(211, 41%, 61%)","cmyk(42%, 22%, 0%, 23%)" +blueberry,#75A1D0,"rgb(117, 161, 208)","rgb(46%, 63%, 82%)","hsl(211, 49%, 64%)","cmyk(44%, 23%, 0%, 18%)" +slategray2,#B9D3EE,"rgb(185, 211, 238)","rgb(73%, 83%, 93%)","hsl(211, 61%, 83%)","cmyk(22%, 11%, 0%, 7%)" +blue bucket,#499DF5,"rgb(73, 157, 245)","rgb(29%, 62%, 96%)","hsl(211, 90%, 62%)","cmyk(70%, 36%, 0%, 4%)" +slategray1,#C6E2FF,"rgb(198, 226, 255)","rgb(78%, 89%, 100%)","hsl(211, 100%, 89%)","cmyk(22%, 11%, 0%, 0%)" +greek roof,#3B6AA0,"rgb(59, 106, 160)","rgb(23%, 42%, 63%)","hsl(212, 46%, 43%)","cmyk(63%, 34%, 0%, 37%)" +cat eye,#7AA9DD,"rgb(122, 169, 221)","rgb(48%, 66%, 87%)","hsl(212, 59%, 67%)","cmyk(45%, 24%, 0%, 13%)" +picasso blue,#0276FD,"rgb(2, 118, 253)","rgb(1%, 46%, 99%)","hsl(212, 98%, 50%)","cmyk(99%, 53%, 0%, 1%)" +sign blue,#003F87,"rgb(0, 63, 135)","rgb(0%, 25%, 53%)","hsl(212, 100%, 26%)","cmyk(100%, 53%, 0%, 47%)" +light steelblue4,#6E7B8B,"rgb(110, 123, 139)","rgb(43%, 48%, 55%)","hsl(213, 12%, 49%)","cmyk(21%, 12%, 0%, 45%)" +lake superior,#506987,"rgb(80, 105, 135)","rgb(31%, 41%, 53%)","hsl(213, 26%, 42%)","cmyk(41%, 22%, 0%, 47%)" +light steelblue3,#A2B5CD,"rgb(162, 181, 205)","rgb(64%, 71%, 80%)","hsl(213, 30%, 72%)","cmyk(21%, 12%, 0%, 20%)" +denim,#4372AA,"rgb(67, 114, 170)","rgb(26%, 45%, 67%)","hsl(213, 43%, 46%)","cmyk(61%, 33%, 0%, 33%)" +blue spider,#26466D,"rgb(38, 70, 109)","rgb(15%, 27%, 43%)","hsl(213, 48%, 29%)","cmyk(65%, 36%, 0%, 57%)" +peafowl,#1D7CF2,"rgb(29, 124, 242)","rgb(11%, 49%, 95%)","hsl(213, 89%, 53%)","cmyk(88%, 49%, 0%, 5%)" +blue tuna,#687C97,"rgb(104, 124, 151)","rgb(41%, 49%, 59%)","hsl(214, 18%, 50%)","cmyk(31%, 18%, 0%, 41%)" +blue corn,#344152,"rgb(52, 65, 82)","rgb(20%, 25%, 32%)","hsl(214, 22%, 26%)","cmyk(37%, 21%, 0%, 68%)" +blue stone,#50729F,"rgb(80, 114, 159)","rgb(31%, 45%, 62%)","hsl(214, 33%, 47%)","cmyk(50%, 28%, 0%, 38%)" +blue bird,#4973AB,"rgb(73, 115, 171)","rgb(29%, 45%, 67%)","hsl(214, 40%, 48%)","cmyk(57%, 33%, 0%, 33%)" +lightsteelblue (SVG),#B0C4DE,"rgb(176, 196, 222)","rgb(69%, 77%, 87%)","hsl(214, 41%, 78%)","cmyk(21%, 12%, 0%, 13%)" +mailbox,#3063A5,"rgb(48, 99, 165)","rgb(19%, 39%, 65%)","hsl(214, 55%, 42%)","cmyk(71%, 40%, 0%, 35%)" +light steelblue2,#BCD2EE,"rgb(188, 210, 238)","rgb(74%, 82%, 93%)","hsl(214, 60%, 84%)","cmyk(21%, 12%, 0%, 7%)" +forget me nots,#7EB6FF,"rgb(126, 182, 255)","rgb(49%, 71%, 100%)","hsl(214, 100%, 75%)","cmyk(51%, 29%, 0%, 0%)" +light steelblue1,#CAE1FF,"rgb(202, 225, 255)","rgb(79%, 88%, 100%)","hsl(214, 100%, 90%)","cmyk(21%, 12%, 0%, 0%)" +lake ontario,#4D71A3,"rgb(77, 113, 163)","rgb(30%, 44%, 64%)","hsl(215, 36%, 47%)","cmyk(53%, 31%, 0%, 36%)" +blue angels,#2B4F81,"rgb(43, 79, 129)","rgb(17%, 31%, 51%)","hsl(215, 50%, 34%)","cmyk(67%, 39%, 0%, 49%)" +blue ridge mtns,#4981CE,"rgb(73, 129, 206)","rgb(29%, 51%, 81%)","hsl(215, 58%, 55%)","cmyk(65%, 37%, 0%, 19%)" +blue cow,#88ACE0,"rgb(136, 172, 224)","rgb(53%, 67%, 88%)","hsl(215, 59%, 71%)","cmyk(39%, 23%, 0%, 12%)" +chemical suit,#5993E5,"rgb(89, 147, 229)","rgb(35%, 58%, 90%)","hsl(215, 73%, 62%)","cmyk(61%, 36%, 0%, 10%)" +big blue bus,#3A66A7,"rgb(58, 102, 167)","rgb(23%, 40%, 65%)","hsl(216, 48%, 44%)","cmyk(65%, 39%, 0%, 35%)" +parrot,#3579DC,"rgb(53, 121, 220)","rgb(21%, 47%, 86%)","hsl(216, 70%, 54%)","cmyk(76%, 45%, 0%, 14%)" +blue pill,#5190ED,"rgb(81, 144, 237)","rgb(32%, 56%, 93%)","hsl(216, 81%, 62%)","cmyk(66%, 39%, 0%, 7%)" +blue jeans,#42526C,"rgb(66, 82, 108)","rgb(26%, 32%, 42%)","hsl(217, 24%, 34%)","cmyk(39%, 24%, 0%, 58%)" +pollock blue,#4D6FAC,"rgb(77, 111, 172)","rgb(30%, 44%, 67%)","hsl(219, 38%, 49%)","cmyk(55%, 35%, 0%, 33%)" +YInMn blue,#2E5090,"rgb(46, 80, 144)","rgb(18%, 31%, 56%)","hsl(219, 52%, 37%)","cmyk(68%, 44%, 0%, 44%)" +st louis blues,#2C5197,"rgb(44, 81, 151)","rgb(17%, 32%, 59%)","hsl(219, 55%, 38%)","cmyk(71%, 46%, 0%, 41%)" +cornflowerblue (SVG),#6495ED,"rgb(100, 149, 237)","rgb(39%, 58%, 93%)","hsl(219, 79%, 66%)","cmyk(58%, 37%, 0%, 7%)" +neptune,#6D9BF1,"rgb(109, 155, 241)","rgb(43%, 61%, 95%)","hsl(219, 82%, 69%)","cmyk(55%, 36%, 0%, 5%)" +natural gas,#5B90F6,"rgb(91, 144, 246)","rgb(36%, 56%, 96%)","hsl(219, 90%, 66%)","cmyk(63%, 41%, 0%, 4%)" +ulysses butterfly,#1464F4,"rgb(20, 100, 244)","rgb(8%, 39%, 96%)","hsl(219, 91%, 52%)","cmyk(92%, 59%, 0%, 4%)" +blue train,#3A5894,"rgb(58, 88, 148)","rgb(23%, 35%, 58%)","hsl(220, 44%, 40%)","cmyk(61%, 41%, 0%, 42%)" +darkturquoise,#7093DB,"rgb(112, 147, 219)","rgb(44%, 58%, 86%)","hsl(220, 60%, 65%)","cmyk(49%, 33%, 0%, 14%)" +alaska sky,#1B3F8B,"rgb(27, 63, 139)","rgb(11%, 25%, 55%)","hsl(221, 67%, 33%)","cmyk(81%, 55%, 0%, 45%)" +blueberry fresh,#5971AD,"rgb(89, 113, 173)","rgb(35%, 44%, 68%)","hsl(223, 34%, 51%)","cmyk(49%, 35%, 0%, 32%)" +ty nant,#0147FA,"rgb(1, 71, 250)","rgb(0%, 28%, 98%)","hsl(223, 99%, 49%)","cmyk(100%, 72%, 0%, 2%)" +cobalt,#3D59AB,"rgb(61, 89, 171)","rgb(24%, 35%, 67%)","hsl(225, 47%, 45%)","cmyk(64%, 48%, 0%, 33%)" +royalblue4,#27408B,"rgb(39, 64, 139)","rgb(15%, 25%, 55%)","hsl(225, 56%, 35%)","cmyk(72%, 54%, 0%, 45%)" +royalblue3,#3A5FCD,"rgb(58, 95, 205)","rgb(23%, 37%, 80%)","hsl(225, 60%, 52%)","cmyk(72%, 54%, 0%, 20%)" +royalblue (SVG),#4169E1,"rgb(65, 105, 225)","rgb(25%, 41%, 88%)","hsl(225, 73%, 57%)","cmyk(71%, 53%, 0%, 12%)" +royalblue2,#436EEE,"rgb(67, 110, 238)","rgb(26%, 43%, 93%)","hsl(225, 83%, 60%)","cmyk(72%, 54%, 0%, 7%)" +cichlid,#003EFF,"rgb(0, 62, 255)","rgb(0%, 24%, 100%)","hsl(225, 100%, 50%)","cmyk(100%, 76%, 0%, 0%)" +royalblue1,#4876FF,"rgb(72, 118, 255)","rgb(28%, 46%, 100%)","hsl(225, 100%, 64%)","cmyk(72%, 54%, 0%, 0%)" +aluminum,#A9ACB6,"rgb(169, 172, 182)","rgb(66%, 67%, 71%)","hsl(226, 8%, 69%)","cmyk(7%, 5%, 0%, 29%)" +delft,#22316C,"rgb(34, 49, 108)","rgb(13%, 19%, 42%)","hsl(228, 52%, 28%)","cmyk(69%, 55%, 0%, 58%)" +blue velvet,#162252,"rgb(22, 34, 82)","rgb(9%, 13%, 32%)","hsl(228, 58%, 20%)","cmyk(73%, 59%, 0%, 68%)" +blue grapes,#3B4990,"rgb(59, 73, 144)","rgb(23%, 29%, 56%)","hsl(230, 42%, 40%)","cmyk(59%, 49%, 0%, 44%)" +pabst blue,#283A90,"rgb(40, 58, 144)","rgb(16%, 23%, 56%)","hsl(230, 57%, 36%)","cmyk(72%, 60%, 0%, 44%)" +dolphin,#6F7285,"rgb(111, 114, 133)","rgb(44%, 45%, 52%)","hsl(232, 9%, 48%)","cmyk(17%, 14%, 0%, 48%)" +nikko blue,#838EDE,"rgb(131, 142, 222)","rgb(51%, 56%, 87%)","hsl(233, 58%, 69%)","cmyk(41%, 36%, 0%, 13%)" +silver,#E6E8FA,"rgb(230, 232, 250)","rgb(90%, 91%, 98%)","hsl(234, 67%, 94%)","cmyk(8%, 7%, 0%, 2%)" +blue nile,#7D7F94,"rgb(125, 127, 148)","rgb(49%, 50%, 58%)","hsl(235, 10%, 54%)","cmyk(16%, 14%, 0%, 42%)" +stained glass,#2E37FE,"rgb(46, 55, 254)","rgb(18%, 22%, 100%)","hsl(237, 99%, 59%)","cmyk(82%, 78%, 0%, 0%)" +midnightblue,#2F2F4F,"rgb(47, 47, 79)","rgb(18%, 18%, 31%)","hsl(240, 25%, 25%)","cmyk(41%, 41%, 0%, 69%)" +cornflowerblue,#42426F,"rgb(66, 66, 111)","rgb(26%, 26%, 44%)","hsl(240, 25%, 35%)","cmyk(41%, 41%, 0%, 56%)" +light steelblue,#8F8FBC,"rgb(143, 143, 188)","rgb(56%, 56%, 74%)","hsl(240, 25%, 65%)","cmyk(24%, 24%, 0%, 26%)" +richblue,#5959AB,"rgb(89, 89, 171)","rgb(35%, 35%, 67%)","hsl(240, 33%, 51%)","cmyk(48%, 48%, 0%, 33%)" +sgislate blue,#7171C6,"rgb(113, 113, 198)","rgb(44%, 44%, 78%)","hsl(240, 43%, 61%)","cmyk(43%, 43%, 0%, 22%)" +quartz,#D9D9F3,"rgb(217, 217, 243)","rgb(85%, 85%, 95%)","hsl(240, 52%, 90%)","cmyk(11%, 11%, 0%, 5%)" +navyblue,#23238E,"rgb(35, 35, 142)","rgb(14%, 14%, 56%)","hsl(240, 60%, 35%)","cmyk(75%, 75%, 0%, 44%)" +medium blue,#3232CC,"rgb(50, 50, 204)","rgb(20%, 20%, 80%)","hsl(240, 61%, 50%)","cmyk(75%, 75%, 0%, 20%)" +medium blue2,#3232CD,"rgb(50, 50, 205)","rgb(20%, 20%, 80%)","hsl(240, 61%, 50%)","cmyk(76%, 76%, 0%, 20%)" +midnightblue (SVG),#191970,"rgb(25, 25, 112)","rgb(10%, 10%, 44%)","hsl(240, 64%, 27%)","cmyk(78%, 78%, 0%, 56%)" +lavender (SVG),#E6E6FA,"rgb(230, 230, 250)","rgb(90%, 90%, 98%)","hsl(240, 67%, 94%)","cmyk(8%, 8%, 0%, 2%)" +midnightblue2 (Safe Hex3),#000033,"rgb(0, 0, 51)","rgb(0%, 0%, 20%)","hsl(240, 100%, 10%)","cmyk(100%, 100%, 0%, 80%)" +navy (16 SVG),#000080,"rgb(0, 0, 128)","rgb(0%, 0%, 50%)","hsl(240, 100%, 25%)","cmyk(100%, 100%, 0%, 50%)" +darkblue (SVG),#00008B,"rgb(0, 0, 139)","rgb(0%, 0%, 55%)","hsl(240, 100%, 27%)","cmyk(100%, 100%, 0%, 45%)" +newmidnightblue,#00009C,"rgb(0, 0, 156)","rgb(0%, 0%, 61%)","hsl(240, 100%, 31%)","cmyk(100%, 100%, 0%, 39%)" +mediumblue (SVG),#0000CD,"rgb(0, 0, 205)","rgb(0%, 0%, 80%)","hsl(240, 100%, 40%)","cmyk(100%, 100%, 0%, 20%)" +blue2 (Hex3),#0000EE,"rgb(0, 0, 238)","rgb(0%, 0%, 93%)","hsl(240, 100%, 47%)","cmyk(100%, 100%, 0%, 7%)" +blue (Safe 16 SVG Hex3),#0000FF,"rgb(0, 0, 255)","rgb(0%, 0%, 100%)","hsl(240, 100%, 50%)","cmyk(100%, 100%, 0%, 0%)" +royalblue (Safe Hex3),#3333FF,"rgb(51, 51, 255)","rgb(20%, 20%, 100%)","hsl(240, 100%, 60%)","cmyk(80%, 80%, 0%, 0%)" +neonblue,#4D4DFF,"rgb(77, 77, 255)","rgb(30%, 30%, 100%)","hsl(240, 100%, 65%)","cmyk(70%, 70%, 0%, 0%)" +cobalt (Safe Hex3),#6666FF,"rgb(102, 102, 255)","rgb(40%, 40%, 100%)","hsl(240, 100%, 70%)","cmyk(60%, 60%, 0%, 0%)" +periwinkle (Hex3),#AAAAFF,"rgb(170, 170, 255)","rgb(67%, 67%, 100%)","hsl(240, 100%, 83%)","cmyk(33%, 33%, 0%, 0%)" +offwhiteblue (Safe Hex3),#CCCCFF,"rgb(204, 204, 255)","rgb(80%, 80%, 100%)","hsl(240, 100%, 90%)","cmyk(20%, 20%, 0%, 0%)" +ghostwhite (SVG),#F8F8FF,"rgb(248, 248, 255)","rgb(97%, 97%, 100%)","hsl(240, 100%, 99%)","cmyk(3%, 3%, 0%, 0%)" +curacao,#5B59BA,"rgb(91, 89, 186)","rgb(36%, 35%, 73%)","hsl(241, 41%, 54%)","cmyk(51%, 52%, 0%, 27%)" +ultramarine,#120A8F,"rgb(18, 10, 143)","rgb(7%, 4%, 56%)","hsl(244, 87%, 30%)","cmyk(87%, 93%, 0%, 44%)" +presidential blue,#302B54,"rgb(48, 43, 84)","rgb(19%, 17%, 33%)","hsl(247, 32%, 25%)","cmyk(43%, 49%, 0%, 67%)" +darkslateblue (SVG),#483D8B,"rgb(72, 61, 139)","rgb(28%, 24%, 55%)","hsl(248, 39%, 39%)","cmyk(48%, 56%, 0%, 45%)" +slateblue4,#473C8B,"rgb(71, 60, 139)","rgb(28%, 24%, 55%)","hsl(248, 40%, 39%)","cmyk(49%, 57%, 0%, 45%)" +dress blue,#3B3178,"rgb(59, 49, 120)","rgb(23%, 19%, 47%)","hsl(248, 42%, 33%)","cmyk(51%, 59%, 0%, 53%)" +slateblue (SVG),#6A5ACD,"rgb(106, 90, 205)","rgb(42%, 35%, 80%)","hsl(248, 53%, 58%)","cmyk(48%, 56%, 0%, 20%)" +slateblue3,#6959CD,"rgb(105, 89, 205)","rgb(41%, 35%, 80%)","hsl(248, 54%, 58%)","cmyk(49%, 57%, 0%, 20%)" +slateblue2,#7A67EE,"rgb(122, 103, 238)","rgb(48%, 40%, 93%)","hsl(248, 80%, 67%)","cmyk(49%, 57%, 0%, 7%)" +slateblue1,#836FFF,"rgb(131, 111, 255)","rgb(51%, 44%, 100%)","hsl(248, 100%, 72%)","cmyk(49%, 56%, 0%, 0%)" +light slateblue,#8470FF,"rgb(132, 112, 255)","rgb(52%, 44%, 100%)","hsl(248, 100%, 72%)","cmyk(48%, 56%, 0%, 0%)" +mediumslateblue (SVG),#7B68EE,"rgb(123, 104, 238)","rgb(48%, 41%, 93%)","hsl(249, 80%, 67%)","cmyk(48%, 56%, 0%, 7%)" +cornflower (Safe Hex3),#3300FF,"rgb(51, 0, 255)","rgb(20%, 0%, 100%)","hsl(252, 100%, 50%)","cmyk(80%, 100%, 0%, 0%)" +medium purple4,#5D478B,"rgb(93, 71, 139)","rgb(36%, 28%, 55%)","hsl(259, 32%, 41%)","cmyk(33%, 49%, 0%, 45%)" +medium purple2,#9F79EE,"rgb(159, 121, 238)","rgb(62%, 47%, 93%)","hsl(259, 77%, 70%)","cmyk(33%, 49%, 0%, 7%)" +medium purple3,#8968CD,"rgb(137, 104, 205)","rgb(54%, 41%, 80%)","hsl(260, 50%, 61%)","cmyk(33%, 49%, 0%, 20%)" +mediumpurple (SVG),#9370DB,"rgb(147, 112, 219)","rgb(58%, 44%, 86%)","hsl(260, 60%, 65%)","cmyk(33%, 49%, 0%, 14%)" +medium purple1,#AB82FF,"rgb(171, 130, 255)","rgb(67%, 51%, 100%)","hsl(260, 100%, 75%)","cmyk(33%, 49%, 0%, 0%)" +blue safe (Safe Hex3),#6600FF,"rgb(102, 0, 255)","rgb(40%, 0%, 100%)","hsl(264, 100%, 50%)","cmyk(60%, 100%, 0%, 0%)" +blue deep,#380474,"rgb(56, 4, 116)","rgb(22%, 2%, 45%)","hsl(268, 93%, 24%)","cmyk(52%, 97%, 0%, 55%)" +indigo,#2E0854,"rgb(46, 8, 84)","rgb(18%, 3%, 33%)","hsl(270, 83%, 18%)","cmyk(45%, 90%, 0%, 67%)" +medium slateblue2,#7F00FF,"rgb(127, 0, 255)","rgb(50%, 0%, 100%)","hsl(270, 100%, 50%)","cmyk(50%, 100%, 0%, 0%)" +purple4,#551A8B,"rgb(85, 26, 139)","rgb(33%, 10%, 55%)","hsl(271, 68%, 32%)","cmyk(39%, 81%, 0%, 45%)" +purple3,#7D26CD,"rgb(125, 38, 205)","rgb(49%, 15%, 80%)","hsl(271, 69%, 48%)","cmyk(39%, 81%, 0%, 20%)" +blueviolet (SVG),#8A2BE2,"rgb(138, 43, 226)","rgb(54%, 17%, 89%)","hsl(271, 76%, 53%)","cmyk(39%, 81%, 0%, 11%)" +purple2,#912CEE,"rgb(145, 44, 238)","rgb(57%, 17%, 93%)","hsl(271, 85%, 55%)","cmyk(39%, 82%, 0%, 7%)" +purple1,#9B30FF,"rgb(155, 48, 255)","rgb(61%, 19%, 100%)","hsl(271, 100%, 59%)","cmyk(39%, 81%, 0%, 0%)" +garden plum,#71637D,"rgb(113, 99, 125)","rgb(44%, 39%, 49%)","hsl(272, 12%, 44%)","cmyk(10%, 21%, 0%, 51%)" +purple rain,#694489,"rgb(105, 68, 137)","rgb(41%, 27%, 54%)","hsl(272, 34%, 40%)","cmyk(23%, 50%, 0%, 46%)" +indigo (SVG),#4B0082,"rgb(75, 0, 130)","rgb(29%, 0%, 51%)","hsl(275, 100%, 25%)","cmyk(42%, 100%, 0%, 49%)" +violet flower,#BF5FFF,"rgb(191, 95, 255)","rgb(75%, 37%, 100%)","hsl(276, 100%, 69%)","cmyk(25%, 63%, 0%, 0%)" +purple,#A020F0,"rgb(160, 32, 240)","rgb(63%, 13%, 94%)","hsl(277, 87%, 53%)","cmyk(33%, 87%, 0%, 6%)" +purple rose,#5E2D79,"rgb(94, 45, 121)","rgb(37%, 18%, 47%)","hsl(279, 46%, 33%)","cmyk(22%, 63%, 0%, 53%)" +indigo tile,#72587F,"rgb(114, 88, 127)","rgb(45%, 35%, 50%)","hsl(280, 18%, 42%)","cmyk(10%, 31%, 0%, 50%)" +purple candy,#BDA0CB,"rgb(189, 160, 203)","rgb(74%, 63%, 80%)","hsl(280, 29%, 71%)","cmyk(7%, 21%, 0%, 20%)" +darkslateblue,#6B238E,"rgb(107, 35, 142)","rgb(42%, 14%, 56%)","hsl(280, 60%, 35%)","cmyk(25%, 75%, 0%, 44%)" +darkorchid4,#68228B,"rgb(104, 34, 139)","rgb(41%, 13%, 55%)","hsl(280, 61%, 34%)","cmyk(25%, 76%, 0%, 45%)" +darkorchid (SVG),#9932CC,"rgb(153, 50, 204)","rgb(60%, 20%, 80%)","hsl(280, 61%, 50%)","cmyk(25%, 75%, 0%, 20%)" +darkorchid3,#9A32CD,"rgb(154, 50, 205)","rgb(60%, 20%, 80%)","hsl(280, 61%, 50%)","cmyk(25%, 76%, 0%, 20%)" +darkorchid,#9932CD,"rgb(153, 50, 205)","rgb(60%, 20%, 80%)","hsl(280, 61%, 50%)","cmyk(25%, 76%, 0%, 20%)" +darkorchid2,#B23AEE,"rgb(178, 58, 238)","rgb(70%, 23%, 93%)","hsl(280, 84%, 58%)","cmyk(25%, 76%, 0%, 7%)" +concord grape,#660198,"rgb(102, 1, 152)","rgb(40%, 0%, 60%)","hsl(280, 99%, 30%)","cmyk(33%, 99%, 0%, 40%)" +purple6 (Hex3),#AA00FF,"rgb(170, 0, 255)","rgb(67%, 0%, 100%)","hsl(280, 100%, 50%)","cmyk(33%, 100%, 0%, 0%)" +darkorchid1,#BF3EFF,"rgb(191, 62, 255)","rgb(75%, 24%, 100%)","hsl(280, 100%, 62%)","cmyk(25%, 76%, 0%, 0%)" +wild violet,#820BBB,"rgb(130, 11, 187)","rgb(51%, 4%, 73%)","hsl(281, 89%, 39%)","cmyk(30%, 94%, 0%, 27%)" +darkviolet (SVG),#9400D3,"rgb(148, 0, 211)","rgb(58%, 0%, 83%)","hsl(282, 100%, 41%)","cmyk(30%, 100%, 0%, 17%)" +zincwhite,#FDF8FF,"rgb(253, 248, 255)","rgb(99%, 97%, 100%)","hsl(283, 100%, 99%)","cmyk(1%, 3%, 0%, 0%)" +ultramarine violet,#5C246E,"rgb(92, 36, 110)","rgb(36%, 14%, 43%)","hsl(285, 51%, 29%)","cmyk(16%, 67%, 0%, 57%)" +medium orchid4,#7A378B,"rgb(122, 55, 139)","rgb(48%, 22%, 55%)","hsl(288, 43%, 38%)","cmyk(12%, 60%, 0%, 45%)" +medium orchid3,#B452CD,"rgb(180, 82, 205)","rgb(71%, 32%, 80%)","hsl(288, 55%, 56%)","cmyk(12%, 60%, 0%, 20%)" +mediumorchid (SVG),#BA55D3,"rgb(186, 85, 211)","rgb(73%, 33%, 83%)","hsl(288, 59%, 58%)","cmyk(12%, 60%, 0%, 17%)" +medium orchid2,#D15FEE,"rgb(209, 95, 238)","rgb(82%, 37%, 93%)","hsl(288, 81%, 65%)","cmyk(12%, 60%, 0%, 7%)" +grape (Safe Hex3),#CC00FF,"rgb(204, 0, 255)","rgb(80%, 0%, 100%)","hsl(288, 100%, 50%)","cmyk(20%, 100%, 0%, 0%)" +medium orchid1,#E066FF,"rgb(224, 102, 255)","rgb(88%, 40%, 100%)","hsl(288, 100%, 70%)","cmyk(12%, 60%, 0%, 0%)" +eggplant,#816687,"rgb(129, 102, 135)","rgb(51%, 40%, 53%)","hsl(289, 14%, 46%)","cmyk(4%, 24%, 0%, 47%)" +violet,#8F5E99,"rgb(143, 94, 153)","rgb(56%, 37%, 60%)","hsl(290, 24%, 48%)","cmyk(7%, 39%, 0%, 40%)" +cobaltvioletdeep,#91219E,"rgb(145, 33, 158)","rgb(57%, 13%, 62%)","hsl(294, 65%, 37%)","cmyk(8%, 79%, 0%, 38%)" +lavender field,#754C78,"rgb(117, 76, 120)","rgb(46%, 30%, 47%)","hsl(296, 22%, 38%)","cmyk(2%, 37%, 0%, 53%)" +turnip,#A74CAB,"rgb(167, 76, 171)","rgb(65%, 30%, 67%)","hsl(297, 38%, 48%)","cmyk(2%, 56%, 0%, 33%)" +thistle4,#8B7B8B,"rgb(139, 123, 139)","rgb(55%, 48%, 55%)","hsl(300, 6%, 51%)","cmyk(0%, 12%, 0%, 45%)" +plum4,#8B668B,"rgb(139, 102, 139)","rgb(55%, 40%, 55%)","hsl(300, 15%, 47%)","cmyk(0%, 27%, 0%, 45%)" +thistle3,#CDB5CD,"rgb(205, 181, 205)","rgb(80%, 71%, 80%)","hsl(300, 19%, 76%)","cmyk(0%, 12%, 0%, 20%)" +thistle (SVG),#D8BFD8,"rgb(216, 191, 216)","rgb(85%, 75%, 85%)","hsl(300, 24%, 80%)","cmyk(0%, 12%, 0%, 15%)" +violet,#4F2F4F,"rgb(79, 47, 79)","rgb(31%, 18%, 31%)","hsl(300, 25%, 25%)","cmyk(0%, 41%, 0%, 69%)" +blueviolet,#9F5F9F,"rgb(159, 95, 159)","rgb(62%, 37%, 62%)","hsl(300, 25%, 50%)","cmyk(0%, 40%, 0%, 38%)" +lavender (Safe Hex3),#CC99CC,"rgb(204, 153, 204)","rgb(80%, 60%, 80%)","hsl(300, 33%, 70%)","cmyk(0%, 25%, 0%, 20%)" +plum3,#CD96CD,"rgb(205, 150, 205)","rgb(80%, 59%, 80%)","hsl(300, 35%, 70%)","cmyk(0%, 27%, 0%, 20%)" +sgibeet,#8E388E,"rgb(142, 56, 142)","rgb(56%, 22%, 56%)","hsl(300, 43%, 39%)","cmyk(0%, 61%, 0%, 44%)" +thistle2,#EED2EE,"rgb(238, 210, 238)","rgb(93%, 82%, 93%)","hsl(300, 45%, 88%)","cmyk(0%, 12%, 0%, 7%)" +plum (SVG),#DDA0DD,"rgb(221, 160, 221)","rgb(87%, 63%, 87%)","hsl(300, 47%, 75%)","cmyk(0%, 28%, 0%, 13%)" +corfu pink,#ECC8EC,"rgb(236, 200, 236)","rgb(93%, 78%, 93%)","hsl(300, 49%, 85%)","cmyk(0%, 15%, 0%, 7%)" +plum2,#EAADEA,"rgb(234, 173, 234)","rgb(92%, 68%, 92%)","hsl(300, 59%, 80%)","cmyk(0%, 26%, 0%, 8%)" +orchid,#DB70DB,"rgb(219, 112, 219)","rgb(86%, 44%, 86%)","hsl(300, 60%, 65%)","cmyk(0%, 49%, 0%, 14%)" +plum2,#EEAEEE,"rgb(238, 174, 238)","rgb(93%, 68%, 93%)","hsl(300, 65%, 81%)","cmyk(0%, 27%, 0%, 7%)" +violet (SVG),#EE82EE,"rgb(238, 130, 238)","rgb(93%, 51%, 93%)","hsl(300, 76%, 72%)","cmyk(0%, 45%, 0%, 7%)" +purple (16 SVG),#800080,"rgb(128, 0, 128)","rgb(50%, 0%, 50%)","hsl(300, 100%, 25%)","cmyk(0%, 100%, 0%, 50%)" +darkmagenta (SVG),#8B008B,"rgb(139, 0, 139)","rgb(55%, 0%, 55%)","hsl(300, 100%, 27%)","cmyk(0%, 100%, 0%, 45%)" +truepurple (Safe Hex3),#990099,"rgb(153, 0, 153)","rgb(60%, 0%, 60%)","hsl(300, 100%, 30%)","cmyk(0%, 100%, 0%, 40%)" +magenta3,#CD00CD,"rgb(205, 0, 205)","rgb(80%, 0%, 80%)","hsl(300, 100%, 40%)","cmyk(0%, 100%, 0%, 20%)" +magenta2 (Hex3),#EE00EE,"rgb(238, 0, 238)","rgb(93%, 0%, 93%)","hsl(300, 100%, 47%)","cmyk(0%, 100%, 0%, 7%)" +magenta (Safe 16=fuchsia SVG Hex3),#FF00FF,"rgb(255, 0, 255)","rgb(100%, 0%, 100%)","hsl(300, 100%, 50%)","cmyk(0%, 100%, 0%, 0%)" +fuchsia (Safe 16 SVG Hex3),#FF00FF,"rgb(255, 0, 255)","rgb(100%, 0%, 100%)","hsl(300, 100%, 50%)","cmyk(0%, 100%, 0%, 0%)" +plum1 (Hex3),#FFBBFF,"rgb(255, 187, 255)","rgb(100%, 73%, 100%)","hsl(300, 100%, 87%)","cmyk(0%, 27%, 0%, 0%)" +thistle1,#FFE1FF,"rgb(255, 225, 255)","rgb(100%, 88%, 100%)","hsl(300, 100%, 94%)","cmyk(0%, 12%, 0%, 0%)" +orchid4,#8B4789,"rgb(139, 71, 137)","rgb(55%, 28%, 54%)","hsl(302, 32%, 41%)","cmyk(0%, 49%, 1%, 45%)" +orchid3,#CD69C9,"rgb(205, 105, 201)","rgb(80%, 41%, 79%)","hsl(302, 50%, 61%)","cmyk(0%, 49%, 2%, 20%)" +orchid (SVG),#DA70D6,"rgb(218, 112, 214)","rgb(85%, 44%, 84%)","hsl(302, 59%, 65%)","cmyk(0%, 49%, 2%, 15%)" +orchid1,#FF83FA,"rgb(255, 131, 250)","rgb(100%, 51%, 98%)","hsl(302, 100%, 76%)","cmyk(0%, 49%, 2%, 0%)" +orchid2,#EE7AE9,"rgb(238, 122, 233)","rgb(93%, 48%, 91%)","hsl(303, 77%, 71%)","cmyk(0%, 49%, 2%, 7%)" +purple ink,#9C6B98,"rgb(156, 107, 152)","rgb(61%, 42%, 60%)","hsl(305, 20%, 52%)","cmyk(0%, 31%, 3%, 39%)" +darkpurple,#871F78,"rgb(135, 31, 120)","rgb(53%, 12%, 47%)","hsl(309, 63%, 33%)","cmyk(0%, 77%, 11%, 47%)" +pink glass,#D3BECF,"rgb(211, 190, 207)","rgb(83%, 75%, 81%)","hsl(311, 19%, 79%)","cmyk(0%, 10%, 2%, 17%)" +purple fish,#B272A6,"rgb(178, 114, 166)","rgb(70%, 45%, 65%)","hsl(311, 29%, 57%)","cmyk(0%, 36%, 7%, 30%)" +blue corn chips,#584E56,"rgb(88, 78, 86)","rgb(35%, 31%, 34%)","hsl(312, 6%, 33%)","cmyk(0%, 11%, 2%, 65%)" +rose (Safe Hex3),#FF00CC,"rgb(255, 0, 204)","rgb(100%, 0%, 80%)","hsl(312, 100%, 50%)","cmyk(0%, 100%, 20%, 0%)" +sea urchin,#683A5E,"rgb(104, 58, 94)","rgb(41%, 23%, 37%)","hsl(313, 28%, 32%)","cmyk(0%, 44%, 10%, 59%)" +thistle,#B5509C,"rgb(181, 80, 156)","rgb(71%, 31%, 61%)","hsl(315, 41%, 51%)","cmyk(0%, 56%, 14%, 29%)" +pink candy,#DCA2CD,"rgb(220, 162, 205)","rgb(86%, 64%, 80%)","hsl(316, 45%, 75%)","cmyk(0%, 26%, 7%, 14%)" +maroon6,#8E236B,"rgb(142, 35, 107)","rgb(56%, 14%, 42%)","hsl(320, 60%, 35%)","cmyk(0%, 75%, 25%, 44%)" +violetred,#CC3299,"rgb(204, 50, 153)","rgb(80%, 20%, 60%)","hsl(320, 61%, 50%)","cmyk(0%, 75%, 25%, 20%)" +harold's crayon,#B62084,"rgb(182, 32, 132)","rgb(71%, 13%, 52%)","hsl(320, 70%, 42%)","cmyk(0%, 82%, 27%, 29%)" +fuchsia2 (Hex3),#FF00AA,"rgb(255, 0, 170)","rgb(100%, 0%, 67%)","hsl(320, 100%, 50%)","cmyk(0%, 100%, 33%, 0%)" +spicypink,#FF1CAE,"rgb(255, 28, 174)","rgb(100%, 11%, 68%)","hsl(321, 100%, 55%)","cmyk(0%, 89%, 32%, 0%)" +maroon4,#8B1C62,"rgb(139, 28, 98)","rgb(55%, 11%, 38%)","hsl(322, 66%, 33%)","cmyk(0%, 80%, 29%, 45%)" +maroon3,#CD2990,"rgb(205, 41, 144)","rgb(80%, 16%, 56%)","hsl(322, 67%, 48%)","cmyk(0%, 80%, 30%, 20%)" +violetred,#D02090,"rgb(208, 32, 144)","rgb(82%, 13%, 56%)","hsl(322, 73%, 47%)","cmyk(0%, 85%, 31%, 18%)" +mediumvioletred (SVG),#C71585,"rgb(199, 21, 133)","rgb(78%, 8%, 52%)","hsl(322, 81%, 43%)","cmyk(0%, 89%, 33%, 22%)" +maroon2,#EE30A7,"rgb(238, 48, 167)","rgb(93%, 19%, 65%)","hsl(322, 85%, 56%)","cmyk(0%, 80%, 30%, 7%)" +maroon1,#FF34B3,"rgb(255, 52, 179)","rgb(100%, 20%, 70%)","hsl(322, 100%, 60%)","cmyk(0%, 80%, 30%, 0%)" +neonpink,#FF6EC7,"rgb(255, 110, 199)","rgb(100%, 43%, 78%)","hsl(323, 100%, 72%)","cmyk(0%, 57%, 22%, 0%)" +dog tongue,#F6A4D5,"rgb(246, 164, 213)","rgb(96%, 64%, 84%)","hsl(324, 82%, 80%)","cmyk(0%, 33%, 13%, 4%)" +cotton candy,#F7B3DA,"rgb(247, 179, 218)","rgb(97%, 70%, 85%)","hsl(326, 81%, 84%)","cmyk(0%, 28%, 12%, 3%)" +grape,#543948,"rgb(84, 57, 72)","rgb(33%, 22%, 28%)","hsl(327, 19%, 28%)","cmyk(0%, 32%, 14%, 67%)" +barney,#D4318C,"rgb(212, 49, 140)","rgb(83%, 19%, 55%)","hsl(327, 65%, 51%)","cmyk(0%, 77%, 34%, 17%)" +deeppink4,#8B0A50,"rgb(139, 10, 80)","rgb(55%, 4%, 31%)","hsl(327, 87%, 29%)","cmyk(0%, 93%, 42%, 45%)" +deeppink3,#CD1076,"rgb(205, 16, 118)","rgb(80%, 6%, 46%)","hsl(328, 86%, 43%)","cmyk(0%, 92%, 42%, 20%)" +deeppink2,#EE1289,"rgb(238, 18, 137)","rgb(93%, 7%, 54%)","hsl(328, 87%, 50%)","cmyk(0%, 92%, 42%, 7%)" +deeppink (SVG),#FF1493,"rgb(255, 20, 147)","rgb(100%, 8%, 58%)","hsl(328, 100%, 54%)","cmyk(0%, 92%, 42%, 0%)" +amethyst,#9D6B84,"rgb(157, 107, 132)","rgb(62%, 42%, 52%)","hsl(330, 20%, 52%)","cmyk(0%, 32%, 16%, 38%)" +hotpink4,#8B3A62,"rgb(139, 58, 98)","rgb(55%, 23%, 38%)","hsl(330, 41%, 39%)","cmyk(0%, 58%, 29%, 45%)" +raspberry,#872657,"rgb(135, 38, 87)","rgb(53%, 15%, 34%)","hsl(330, 56%, 34%)","cmyk(0%, 72%, 36%, 47%)" +carnation,#DE85B1,"rgb(222, 133, 177)","rgb(87%, 52%, 69%)","hsl(330, 57%, 70%)","cmyk(0%, 40%, 20%, 13%)" +deeppurple,#551033,"rgb(85, 16, 51)","rgb(33%, 6%, 20%)","hsl(330, 68%, 20%)","cmyk(0%, 81%, 40%, 67%)" +orangered,#FF007F,"rgb(255, 0, 127)","rgb(100%, 0%, 50%)","hsl(330, 100%, 50%)","cmyk(0%, 100%, 50%, 0%)" +hotpink (SVG),#FF69B4,"rgb(255, 105, 180)","rgb(100%, 41%, 71%)","hsl(330, 100%, 71%)","cmyk(0%, 59%, 29%, 0%)" +hotpink1,#FF6EB4,"rgb(255, 110, 180)","rgb(100%, 43%, 71%)","hsl(331, 100%, 72%)","cmyk(0%, 57%, 29%, 0%)" +20 pound,#A46582,"rgb(164, 101, 130)","rgb(64%, 40%, 51%)","hsl(332, 26%, 52%)","cmyk(0%, 38%, 21%, 36%)" +hotpink2,#EE6AA7,"rgb(238, 106, 167)","rgb(93%, 42%, 65%)","hsl(332, 80%, 67%)","cmyk(0%, 55%, 30%, 7%)" +cranberry,#B6316C,"rgb(182, 49, 108)","rgb(71%, 19%, 42%)","hsl(333, 58%, 45%)","cmyk(0%, 73%, 41%, 29%)" +violetred4,#8B2252,"rgb(139, 34, 82)","rgb(55%, 13%, 32%)","hsl(333, 61%, 34%)","cmyk(0%, 76%, 41%, 45%)" +violetred3,#CD3278,"rgb(205, 50, 120)","rgb(80%, 20%, 47%)","hsl(333, 61%, 50%)","cmyk(0%, 76%, 41%, 20%)" +violetred2,#EE3A8C,"rgb(238, 58, 140)","rgb(93%, 23%, 55%)","hsl(333, 84%, 58%)","cmyk(0%, 76%, 41%, 7%)" +violetred1,#FF3E96,"rgb(255, 62, 150)","rgb(100%, 24%, 59%)","hsl(333, 100%, 62%)","cmyk(0%, 76%, 41%, 0%)" +hotpink3,#CD6090,"rgb(205, 96, 144)","rgb(80%, 38%, 56%)","hsl(334, 52%, 59%)","cmyk(0%, 53%, 30%, 20%)" +plum pudding,#862A51,"rgb(134, 42, 81)","rgb(53%, 16%, 32%)","hsl(335, 52%, 35%)","cmyk(0%, 69%, 40%, 47%)" +broadwaypink (Safe Hex3),#FF0066,"rgb(255, 0, 102)","rgb(100%, 0%, 40%)","hsl(336, 100%, 50%)","cmyk(0%, 100%, 60%, 0%)" +lavenderblush4,#8B8386,"rgb(139, 131, 134)","rgb(55%, 51%, 53%)","hsl(337, 3%, 53%)","cmyk(0%, 6%, 4%, 45%)" +pink jeep,#E0427F,"rgb(224, 66, 127)","rgb(88%, 26%, 50%)","hsl(337, 72%, 57%)","cmyk(0%, 71%, 43%, 12%)" +bubble gum,#FF92BB,"rgb(255, 146, 187)","rgb(100%, 57%, 73%)","hsl(337, 100%, 79%)","cmyk(0%, 43%, 27%, 0%)" +smyrna purple,#A2627A,"rgb(162, 98, 122)","rgb(64%, 38%, 48%)","hsl(338, 26%, 51%)","cmyk(0%, 40%, 25%, 36%)" +maroonb0,#B03060,"rgb(176, 48, 96)","rgb(69%, 19%, 38%)","hsl(338, 57%, 44%)","cmyk(0%, 73%, 45%, 31%)" +lavenderblush2,#EEE0E5,"rgb(238, 224, 229)","rgb(93%, 88%, 90%)","hsl(339, 29%, 91%)","cmyk(0%, 6%, 4%, 7%)" +lavenderblush3,#CDC1C5,"rgb(205, 193, 197)","rgb(80%, 76%, 77%)","hsl(340, 11%, 78%)","cmyk(0%, 6%, 4%, 20%)" +palevioletred3,#CD6889,"rgb(205, 104, 137)","rgb(80%, 41%, 54%)","hsl(340, 50%, 61%)","cmyk(0%, 49%, 33%, 20%)" +palevioletred (SVG),#DB7093,"rgb(219, 112, 147)","rgb(86%, 44%, 58%)","hsl(340, 60%, 65%)","cmyk(0%, 49%, 33%, 14%)" +pink shell,#F6CCDA,"rgb(246, 204, 218)","rgb(96%, 80%, 85%)","hsl(340, 70%, 88%)","cmyk(0%, 17%, 11%, 4%)" +palevioletred1,#FF82AB,"rgb(255, 130, 171)","rgb(100%, 51%, 67%)","hsl(340, 100%, 75%)","cmyk(0%, 49%, 33%, 0%)" +lavenderblush (SVG),#FFF0F5,"rgb(255, 240, 245)","rgb(100%, 94%, 96%)","hsl(340, 100%, 97%)","cmyk(0%, 6%, 4%, 0%)" +palevioletred4,#8B475D,"rgb(139, 71, 93)","rgb(55%, 28%, 36%)","hsl(341, 32%, 41%)","cmyk(0%, 49%, 33%, 45%)" +palevioletred2,#EE799F,"rgb(238, 121, 159)","rgb(93%, 47%, 62%)","hsl(341, 77%, 70%)","cmyk(0%, 49%, 33%, 7%)" +strawberry smoothie,#EAB5C5,"rgb(234, 181, 197)","rgb(92%, 71%, 77%)","hsl(342, 56%, 81%)","cmyk(0%, 23%, 16%, 8%)" +bunny eye,#A5435C,"rgb(165, 67, 92)","rgb(65%, 26%, 36%)","hsl(345, 42%, 45%)","cmyk(0%, 59%, 44%, 35%)" +pink4,#8B636C,"rgb(139, 99, 108)","rgb(55%, 39%, 42%)","hsl(347, 17%, 47%)","cmyk(0%, 29%, 22%, 45%)" +pink3,#CD919E,"rgb(205, 145, 158)","rgb(80%, 57%, 62%)","hsl(347, 38%, 69%)","cmyk(0%, 29%, 23%, 20%)" +pink2,#EEA9B8,"rgb(238, 169, 184)","rgb(93%, 66%, 72%)","hsl(347, 67%, 80%)","cmyk(0%, 29%, 23%, 7%)" +pink1,#FFB5C5,"rgb(255, 181, 197)","rgb(100%, 71%, 77%)","hsl(347, 100%, 85%)","cmyk(0%, 29%, 23%, 0%)" +crimson (SVG),#DC143C,"rgb(220, 20, 60)","rgb(86%, 8%, 24%)","hsl(348, 83%, 47%)","cmyk(0%, 91%, 73%, 14%)" +cranberry jello,#F54D70,"rgb(245, 77, 112)","rgb(96%, 30%, 44%)","hsl(348, 89%, 63%)","cmyk(0%, 69%, 54%, 4%)" +bright red (Safe Hex3),#FF0033,"rgb(255, 0, 51)","rgb(100%, 0%, 20%)","hsl(348, 100%, 50%)","cmyk(0%, 100%, 80%, 0%)" +pink cloud,#F6A8B6,"rgb(246, 168, 182)","rgb(96%, 66%, 71%)","hsl(349, 81%, 81%)","cmyk(0%, 32%, 26%, 4%)" +permanent redviolet,#DB2645,"rgb(219, 38, 69)","rgb(86%, 15%, 27%)","hsl(350, 72%, 50%)","cmyk(0%, 83%, 68%, 14%)" +pink (SVG),#FFC0CB,"rgb(255, 192, 203)","rgb(100%, 75%, 80%)","hsl(350, 100%, 88%)","cmyk(0%, 25%, 20%, 0%)" +tongue,#E79EA9,"rgb(231, 158, 169)","rgb(91%, 62%, 66%)","hsl(351, 60%, 76%)","cmyk(0%, 32%, 27%, 9%)" +light pink2,#EEA2AD,"rgb(238, 162, 173)","rgb(93%, 64%, 68%)","hsl(351, 69%, 78%)","cmyk(0%, 32%, 27%, 7%)" +bordeaux,#99182C,"rgb(153, 24, 44)","rgb(60%, 9%, 17%)","hsl(351, 73%, 35%)","cmyk(0%, 84%, 71%, 40%)" +geraniumlake,#E31230,"rgb(227, 18, 48)","rgb(89%, 7%, 19%)","hsl(351, 85%, 48%)","cmyk(0%, 92%, 79%, 11%)" +peachpuff,#FFADB9,"rgb(255, 173, 185)","rgb(100%, 68%, 73%)","hsl(351, 100%, 84%)","cmyk(0%, 32%, 27%, 0%)" +lightpink (SVG),#FFB6C1,"rgb(255, 182, 193)","rgb(100%, 71%, 76%)","hsl(351, 100%, 86%)","cmyk(0%, 29%, 24%, 0%)" +light pink4,#8B5F65,"rgb(139, 95, 101)","rgb(55%, 37%, 40%)","hsl(352, 19%, 46%)","cmyk(0%, 32%, 27%, 45%)" +black beauty plum,#422C2F,"rgb(66, 44, 47)","rgb(26%, 17%, 18%)","hsl(352, 20%, 22%)","cmyk(0%, 33%, 29%, 74%)" +light pink3,#CD8C95,"rgb(205, 140, 149)","rgb(80%, 55%, 58%)","hsl(352, 39%, 68%)","cmyk(0%, 32%, 27%, 20%)" +ham,#DB9EA6,"rgb(219, 158, 166)","rgb(86%, 62%, 65%)","hsl(352, 46%, 74%)","cmyk(0%, 28%, 24%, 14%)" +light pink1,#FFAEB9,"rgb(255, 174, 185)","rgb(100%, 68%, 73%)","hsl(352, 100%, 84%)","cmyk(0%, 32%, 27%, 0%)" +apple,#CC4E5C,"rgb(204, 78, 92)","rgb(80%, 31%, 36%)","hsl(353, 55%, 55%)","cmyk(0%, 62%, 55%, 20%)" +passion fruit,#55141C,"rgb(85, 20, 28)","rgb(33%, 8%, 11%)","hsl(353, 62%, 21%)","cmyk(0%, 76%, 67%, 67%)" +braeburn apple,#BB2A3C,"rgb(187, 42, 60)","rgb(73%, 16%, 24%)","hsl(353, 63%, 45%)","cmyk(0%, 78%, 68%, 27%)" +ruby red,#C82536,"rgb(200, 37, 54)","rgb(78%, 15%, 21%)","hsl(354, 69%, 46%)","cmyk(0%, 81%, 73%, 22%)" +sign red,#AF1E2D,"rgb(175, 30, 45)","rgb(69%, 12%, 18%)","hsl(354, 71%, 40%)","cmyk(0%, 83%, 74%, 31%)" +red coat,#B81324,"rgb(184, 19, 36)","rgb(72%, 7%, 14%)","hsl(354, 81%, 40%)","cmyk(0%, 90%, 80%, 28%)" +alizarin crimson,#E32636,"rgb(227, 38, 54)","rgb(89%, 15%, 21%)","hsl(355, 77%, 52%)","cmyk(0%, 83%, 76%, 11%)" +raspberry red,#FA1D2F,"rgb(250, 29, 47)","rgb(98%, 11%, 18%)","hsl(355, 96%, 55%)","cmyk(0%, 88%, 81%, 2%)" +bermuda sand,#F6C9CC,"rgb(246, 201, 204)","rgb(96%, 79%, 80%)","hsl(356, 71%, 88%)","cmyk(0%, 18%, 17%, 4%)" +indianred,#B0171F,"rgb(176, 23, 31)","rgb(69%, 9%, 12%)","hsl(357, 77%, 39%)","cmyk(0%, 87%, 82%, 31%)" +cherry,#EB5E66,"rgb(235, 94, 102)","rgb(92%, 37%, 40%)","hsl(357, 78%, 65%)","cmyk(0%, 60%, 57%, 8%)" +conch,#D0A9AA,"rgb(208, 169, 170)","rgb(82%, 66%, 67%)","hsl(358, 29%, 74%)","cmyk(0%, 19%, 18%, 18%)" +venetianred,#D41A1F,"rgb(212, 26, 31)","rgb(83%, 10%, 12%)","hsl(358, 78%, 47%)","cmyk(0%, 88%, 85%, 17%)" +pomegranate,#F64D54,"rgb(246, 77, 84)","rgb(96%, 30%, 33%)","hsl(358, 90%, 63%)","cmyk(0%, 69%, 66%, 4%)" +cadmiumredlight,#FF030D,"rgb(255, 3, 13)","rgb(100%, 1%, 5%)","hsl(358, 100%, 51%)","cmyk(0%, 99%, 95%, 0%)" +burntsienna,#551011,"rgb(85, 16, 17)","rgb(33%, 6%, 7%)","hsl(359, 68%, 20%)","cmyk(0%, 81%, 80%, 67%)" +madderlakedeep,#E32E30,"rgb(227, 46, 48)","rgb(89%, 18%, 19%)","hsl(359, 76%, 54%)","cmyk(0%, 80%, 79%, 11%)" +rosemadder,#E33638,"rgb(227, 54, 56)","rgb(89%, 21%, 22%)","hsl(359, 76%, 55%)","cmyk(0%, 76%, 75%, 11%)" +burgundy,#9E0508,"rgb(158, 5, 8)","rgb(62%, 2%, 3%)","hsl(359, 94%, 32%)","cmyk(0%, 97%, 95%, 38%)" +hematite,#E35152,"rgb(227, 81, 82)","rgb(89%, 32%, 32%)","hsl(360, 72%, 60%)","cmyk(0%, 64%, 64%, 11%)" \ No newline at end of file diff --git a/src/cssColors.ts b/src/cssColors.ts index 175c450..fa0f7a0 100644 --- a/src/cssColors.ts +++ b/src/cssColors.ts @@ -1,149 +1,221 @@ -import { ColorItem } from './types/color-item.interface'; -import { ColorNames } from './types/color-names'; +import { ColorItem } from "./types/color-item.interface"; +import { ColorNames } from "./types/color-names"; export const cssColors: Record = { - [ColorNames.AliceBlue]: { rgb: { r: 240, g: 248, b: 255 }, hex: '#F0F8FF' }, - [ColorNames.AntiqueWhite]: { rgb: { r: 250, g: 235, b: 215 }, hex: '#FAEBD7' }, - [ColorNames.Aqua]: { rgb: { r: 0, g: 255, b: 255 }, hex: '#00FFFF' }, - [ColorNames.Aquamarine]: { rgb: { r: 127, g: 255, b: 212 }, hex: '#7FFFD4' }, - [ColorNames.Azure]: { rgb: { r: 240, g: 255, b: 255 }, hex: '#F0FFFF' }, - [ColorNames.Beige]: { rgb: { r: 245, g: 245, b: 220 }, hex: '#F5F5DC' }, - [ColorNames.Bisque]: { rgb: { r: 255, g: 228, b: 196 }, hex: '#FFE4C4' }, - [ColorNames.Black]: { rgb: { r: 0, g: 0, b: 0 }, hex: '#000000' }, - [ColorNames.BlanchedAlmond]: { rgb: { r: 255, g: 235, b: 205 }, hex: '#FFEBCD' }, - [ColorNames.Blue]: { rgb: { r: 0, g: 0, b: 255 }, hex: '#0000FF' }, - [ColorNames.BlueViolet]: { rgb: { r: 138, g: 43, b: 226 }, hex: '#8A2BE2' }, - [ColorNames.Brown]: { rgb: { r: 165, g: 42, b: 42 }, hex: '#A52A2A' }, - [ColorNames.BurlyWood]: { rgb: { r: 222, g: 184, b: 135 }, hex: '#DEB887' }, - [ColorNames.CadetBlue]: { rgb: { r: 95, g: 158, b: 160 }, hex: '#5F9EA0' }, - [ColorNames.Chartreuse]: { rgb: { r: 127, g: 255, b: 0 }, hex: '#7FFF00' }, - [ColorNames.Chocolate]: { rgb: { r: 210, g: 105, b: 30 }, hex: '#D2691E' }, - [ColorNames.Coral]: { rgb: { r: 255, g: 127, b: 80 }, hex: '#FF7F50' }, - [ColorNames.CornflowerBlue]: { rgb: { r: 100, g: 149, b: 237 }, hex: '#6495ED' }, - [ColorNames.Cornsilk]: { rgb: { r: 255, g: 248, b: 220 }, hex: '#FFF8DC' }, - [ColorNames.Crimson]: { rgb: { r: 220, g: 20, b: 60 }, hex: '#DC143C' }, - [ColorNames.Cyan]: { rgb: { r: 0, g: 255, b: 255 }, hex: '#00FFFF' }, - [ColorNames.DarkBlue]: { rgb: { r: 0, g: 0, b: 139 }, hex: '#00008B' }, - [ColorNames.DarkCyan]: { rgb: { r: 0, g: 139, b: 139 }, hex: '#008B8B' }, - [ColorNames.DarkGoldenRod]: { rgb: { r: 184, g: 134, b: 11 }, hex: '#B8860B' }, - [ColorNames.DarkGray]: { rgb: { r: 169, g: 169, b: 169 }, hex: '#A9A9A9' }, - [ColorNames.DarkGreen]: { rgb: { r: 0, g: 100, b: 0 }, hex: '#006400' }, - [ColorNames.DarkGrey]: { rgb: { r: 169, g: 169, b: 169 }, hex: '#A9A9A9' }, - [ColorNames.DarkKhaki]: { rgb: { r: 189, g: 183, b: 107 }, hex: '#BDB76B' }, - [ColorNames.DarkMagenta]: { rgb: { r: 139, g: 0, b: 139 }, hex: '#8B008B' }, - [ColorNames.DarkOliveGreen]: { rgb: { r: 85, g: 107, b: 47 }, hex: '#556B2F' }, - [ColorNames.DarkOrange]: { rgb: { r: 255, g: 140, b: 0 }, hex: '#FF8C00' }, - [ColorNames.DarkOrchid]: { rgb: { r: 153, g: 50, b: 204 }, hex: '#9932CC' }, - [ColorNames.DarkRed]: { rgb: { r: 139, g: 0, b: 0 }, hex: '#8B0000' }, - [ColorNames.DarkSalmon]: { rgb: { r: 233, g: 150, b: 122 }, hex: '#E9967A' }, - [ColorNames.DarkSeaGreen]: { rgb: { r: 143, g: 188, b: 143 }, hex: '#8FBC8F' }, - [ColorNames.DarkSlateBlue]: { rgb: { r: 72, g: 61, b: 139 }, hex: '#483D8B' }, - [ColorNames.DarkSlateGray]: { rgb: { r: 47, g: 79, b: 79 }, hex: '#2F4F4F' }, - [ColorNames.DarkTurquoise]: { rgb: { r: 0, g: 206, b: 209 }, hex: '#00CED1' }, - [ColorNames.DarkViolet]: { rgb: { r: 148, g: 0, b: 211 }, hex: '#9400D3' }, - [ColorNames.DeepPink]: { rgb: { r: 255, g: 20, b: 147 }, hex: '#FF1493' }, - [ColorNames.DeepSkyBlue]: { rgb: { r: 0, g: 191, b: 255 }, hex: '#00BFFF' }, - [ColorNames.DimGray]: { rgb: { r: 105, g: 105, b: 105 }, hex: '#696969' }, - [ColorNames.DimGrey]: { rgb: { r: 105, g: 105, b: 105 }, hex: '#696969' }, - [ColorNames.DodgerBlue]: { rgb: { r: 30, g: 144, b: 255 }, hex: '#1E90FF' }, - [ColorNames.FireBrick]: { rgb: { r: 178, g: 34, b: 34 }, hex: '#B22222' }, - [ColorNames.FloralWhite]: { rgb: { r: 255, g: 250, b: 240 }, hex: '#FFFAF0' }, - [ColorNames.ForestGreen]: { rgb: { r: 34, g: 139, b: 34 }, hex: '#228B22' }, - [ColorNames.Fuchsia]: { rgb: { r: 255, g: 0, b: 255 }, hex: '#FF00FF' }, - [ColorNames.Gainsboro]: { rgb: { r: 220, g: 220, b: 220 }, hex: '#DCDCDC' }, - [ColorNames.GhostWhite]: { rgb: { r: 248, g: 248, b: 255 }, hex: '#F8F8FF' }, - [ColorNames.Gold]: { rgb: { r: 255, g: 215, b: 0 }, hex: '#FFD700' }, - [ColorNames.GoldenRod]: { rgb: { r: 218, g: 165, b: 32 }, hex: '#DAA520' }, - [ColorNames.Gray]: { rgb: { r: 128, g: 128, b: 128 }, hex: '#808080' }, - [ColorNames.Green]: { rgb: { r: 0, g: 128, b: 0 }, hex: '#008000' }, - [ColorNames.GreenYellow]: { rgb: { r: 173, g: 255, b: 47 }, hex: '#ADFF2F' }, - [ColorNames.HoneyDew]: { rgb: { r: 240, g: 255, b: 240 }, hex: '#F0FFF0' }, - [ColorNames.HotPink]: { rgb: { r: 255, g: 105, b: 180 }, hex: '#FF69B4' }, - [ColorNames.IndianRed]: { rgb: { r: 205, g: 92, b: 92 }, hex: '#CD5C5C' }, - [ColorNames.Indigo]: { rgb: { r: 75, g: 0, b: 130 }, hex: '#4B0082' }, - [ColorNames.Ivory]: { rgb: { r: 255, g: 255, b: 240 }, hex: '#FFFFF0' }, - [ColorNames.Khaki]: { rgb: { r: 240, g: 230, b: 140 }, hex: '#F0E68C' }, - [ColorNames.Lavender]: { rgb: { r: 230, g: 230, b: 250 }, hex: '#E6E6FA' }, - [ColorNames.LavenderBlush]: { rgb: { r: 255, g: 240, b: 245 }, hex: '#FFF0F5' }, - [ColorNames.LawnGreen]: { rgb: { r: 124, g: 252, b: 0 }, hex: '#7CFC00' }, - [ColorNames.LemonChiffon]: { rgb: { r: 255, g: 250, b: 205 }, hex: '#FFFACD' }, - [ColorNames.LightBlue]: { rgb: { r: 173, g: 216, b: 230 }, hex: '#ADD8E6' }, - [ColorNames.LightCoral]: { rgb: { r: 240, g: 128, b: 128 }, hex: '#F08080' }, - [ColorNames.LightCyan]: { rgb: { r: 224, g: 255, b: 255 }, hex: '#E0FFFF' }, - [ColorNames.LightGoldenRodYellow]: { rgb: { r: 250, g: 250, b: 210 }, hex: '#FAFAD2' }, - [ColorNames.LightGray]: { rgb: { r: 211, g: 211, b: 211 }, hex: '#D3D3D3' }, - [ColorNames.LightGreen]: { rgb: { r: 144, g: 238, b: 144 }, hex: '#90EE90' }, - [ColorNames.LightGrey]: { rgb: { r: 211, g: 211, b: 211 }, hex: '#D3D3D3' }, - [ColorNames.LightPink]: { rgb: { r: 255, g: 182, b: 193 }, hex: '#FFB6C1' }, - [ColorNames.LightSalmon]: { rgb: { r: 255, g: 160, b: 122 }, hex: '#FFA07A' }, - [ColorNames.LightSeaGreen]: { rgb: { r: 32, g: 178, b: 170 }, hex: '#20B2AA' }, - [ColorNames.LightSkyBlue]: { rgb: { r: 135, g: 206, b: 250 }, hex: '#87CEFA' }, - [ColorNames.LightSlateGray]: { rgb: { r: 119, g: 136, b: 153 }, hex: '#778899' }, - [ColorNames.LightSteelBlue]: { rgb: { r: 176, g: 196, b: 222 }, hex: '#B0C4DE' }, - [ColorNames.LightYellow]: { rgb: { r: 255, g: 255, b: 224 }, hex: '#FFFFE0' }, - [ColorNames.Lime]: { rgb: { r: 0, g: 255, b: 0 }, hex: '#00FF00' }, - [ColorNames.LimeGreen]: { rgb: { r: 50, g: 205, b: 50 }, hex: '#32CD32' }, - [ColorNames.Linen]: { rgb: { r: 250, g: 240, b: 230 }, hex: '#FAF0E6' }, - [ColorNames.Magenta]: { rgb: { r: 255, g: 0, b: 255 }, hex: '#FF00FF' }, - [ColorNames.Maroon]: { rgb: { r: 128, g: 0, b: 0 }, hex: '#800000' }, - [ColorNames.MediumAquaMarine]: { rgb: { r: 102, g: 205, b: 170 }, hex: '#66CDAA' }, - [ColorNames.MediumBlue]: { rgb: { r: 0, g: 0, b: 205 }, hex: '#0000CD' }, - [ColorNames.MediumOrchid]: { rgb: { r: 186, g: 85, b: 211 }, hex: '#BA55D3' }, - [ColorNames.MediumPurple]: { rgb: { r: 147, g: 112, b: 219 }, hex: '#9370DB' }, - [ColorNames.MediumSeaGreen]: { rgb: { r: 60, g: 179, b: 113 }, hex: '#3CB371' }, - [ColorNames.MediumSlateBlue]: { rgb: { r: 123, g: 104, b: 238 }, hex: '#7B68EE' }, - [ColorNames.MediumSpringGreen]: { rgb: { r: 0, g: 250, b: 154 }, hex: '#00FA9A' }, - [ColorNames.MediumTurquoise]: { rgb: { r: 72, g: 209, b: 204 }, hex: '#48D1CC' }, - [ColorNames.MediumVioletRed]: { rgb: { r: 199, g: 21, b: 133 }, hex: '#C71585' }, - [ColorNames.MidnightBlue]: { rgb: { r: 25, g: 25, b: 112 }, hex: '#191970' }, - [ColorNames.MintCream]: { rgb: { r: 245, g: 255, b: 250 }, hex: '#F5FFFA' }, - [ColorNames.MistyRose]: { rgb: { r: 255, g: 228, b: 225 }, hex: '#FFE4E1' }, - [ColorNames.Moccasin]: { rgb: { r: 255, g: 228, b: 181 }, hex: '#FFE4B5' }, - [ColorNames.NavajoWhite]: { rgb: { r: 255, g: 222, b: 173 }, hex: '#FFDEAD' }, - [ColorNames.Navy]: { rgb: { r: 0, g: 0, b: 128 }, hex: '#000080' }, - [ColorNames.OldLace]: { rgb: { r: 253, g: 245, b: 230 }, hex: '#FDF5E6' }, - [ColorNames.Olive]: { rgb: { r: 128, g: 128, b: 0 }, hex: '#808000' }, - [ColorNames.OliveDrab]: { rgb: { r: 107, g: 142, b: 35 }, hex: '#6B8E23' }, - [ColorNames.Orange]: { rgb: { r: 255, g: 165, b: 0 }, hex: '#FFA500' }, - [ColorNames.OrangeRed]: { rgb: { r: 255, g: 69, b: 0 }, hex: '#FF4500' }, - [ColorNames.Orchid]: { rgb: { r: 218, g: 112, b: 214 }, hex: '#DA70D6' }, - [ColorNames.PaleGoldenRod]: { rgb: { r: 238, g: 232, b: 170 }, hex: '#EEE8AA' }, - [ColorNames.PaleGreen]: { rgb: { r: 152, g: 251, b: 152 }, hex: '#98FB98' }, - [ColorNames.PaleTurquoise]: { rgb: { r: 175, g: 238, b: 238 }, hex: '#AFEEEE' }, - [ColorNames.PaleVioletRed]: { rgb: { r: 219, g: 112, b: 147 }, hex: '#DB7093' }, - [ColorNames.PapayaWhip]: { rgb: { r: 255, g: 239, b: 213 }, hex: '#FFEFD5' }, - [ColorNames.PeachPuff]: { rgb: { r: 255, g: 218, b: 185 }, hex: '#FFDAB9' }, - [ColorNames.Peru]: { rgb: { r: 205, g: 133, b: 63 }, hex: '#CD853F' }, - [ColorNames.Pink]: { rgb: { r: 255, g: 192, b: 203 }, hex: '#FFC0CB' }, - [ColorNames.Plum]: { rgb: { r: 221, g: 160, b: 221 }, hex: '#DDA0DD' }, - [ColorNames.PowderBlue]: { rgb: { r: 176, g: 224, b: 230 }, hex: '#B0E0E6' }, - [ColorNames.Purple]: { rgb: { r: 128, g: 0, b: 128 }, hex: '#800080' }, - [ColorNames.RebeccaPurple]: { rgb: { r: 102, g: 51, b: 153 }, hex: '#663399' }, - [ColorNames.Red]: { rgb: { r: 255, g: 0, b: 0 }, hex: '#FF0000' }, - [ColorNames.RosyBrown]: { rgb: { r: 188, g: 143, b: 143 }, hex: '#BC8F8F' }, - [ColorNames.RoyalBlue]: { rgb: { r: 65, g: 105, b: 225 }, hex: '#4169E1' }, - [ColorNames.SaddleBrown]: { rgb: { r: 139, g: 69, b: 19 }, hex: '#8B4513' }, - [ColorNames.Salmon]: { rgb: { r: 250, g: 128, b: 114 }, hex: '#FA8072' }, - [ColorNames.SandyBrown]: { rgb: { r: 244, g: 164, b: 96 }, hex: '#F4A460' }, - [ColorNames.SeaGreen]: { rgb: { r: 46, g: 139, b: 87 }, hex: '#2E8B57' }, - [ColorNames.SeaShell]: { rgb: { r: 255, g: 245, b: 238 }, hex: '#FFF5EE' }, - [ColorNames.Sienna]: { rgb: { r: 160, g: 82, b: 45 }, hex: '#A0522D' }, - [ColorNames.Silver]: { rgb: { r: 192, g: 192, b: 192 }, hex: '#C0C0C0' }, - [ColorNames.SkyBlue]: { rgb: { r: 135, g: 206, b: 235 }, hex: '#87CEEB' }, - [ColorNames.SlateBlue]: { rgb: { r: 106, g: 90, b: 205 }, hex: '#6A5ACD' }, - [ColorNames.SlateGray]: { rgb: { r: 112, g: 128, b: 144 }, hex: '#708090' }, - [ColorNames.Snow]: { rgb: { r: 255, g: 250, b: 250 }, hex: '#FFFAFA' }, - [ColorNames.SpringGreen]: { rgb: { r: 0, g: 255, b: 127 }, hex: '#00FF7F' }, - [ColorNames.SteelBlue]: { rgb: { r: 70, g: 130, b: 180 }, hex: '#4682B4' }, - [ColorNames.Tan]: { rgb: { r: 210, g: 180, b: 140 }, hex: '#D2B48C' }, - [ColorNames.Teal]: { rgb: { r: 0, g: 128, b: 128 }, hex: '#008080' }, - [ColorNames.Thistle]: { rgb: { r: 216, g: 191, b: 216 }, hex: '#D8BFD8' }, - [ColorNames.Tomato]: { rgb: { r: 255, g: 99, b: 71 }, hex: '#FF6347' }, - [ColorNames.Turquoise]: { rgb: { r: 64, g: 224, b: 208 }, hex: '#40E0D0' }, - [ColorNames.Violet]: { rgb: { r: 238, g: 130, b: 238 }, hex: '#EE82EE' }, - [ColorNames.Wheat]: { rgb: { r: 245, g: 222, b: 179 }, hex: '#F5DEB3' }, - [ColorNames.White]: { rgb: { r: 255, g: 255, b: 255 }, hex: '#FFFFFF' }, - [ColorNames.WhiteSmoke]: { rgb: { r: 245, g: 245, b: 245 }, hex: '#F5F5F5' }, - [ColorNames.Yellow]: { rgb: { r: 255, g: 255, b: 0 }, hex: '#FFFF00' }, - [ColorNames.YellowGreen]: { rgb: { r: 154, g: 205, b: 50 }, hex: '#9ACD32' }, + [ColorNames.AliceBlue]: { rgb: { r: 240, g: 248, b: 255 }, hex: "#F0F8FF" }, + [ColorNames.AntiqueWhite]: { + rgb: { r: 250, g: 235, b: 215 }, + hex: "#FAEBD7", + }, + [ColorNames.Aqua]: { rgb: { r: 0, g: 255, b: 255 }, hex: "#00FFFF" }, + [ColorNames.Aquamarine]: { rgb: { r: 127, g: 255, b: 212 }, hex: "#7FFFD4" }, + [ColorNames.Azure]: { rgb: { r: 240, g: 255, b: 255 }, hex: "#F0FFFF" }, + [ColorNames.Beige]: { rgb: { r: 245, g: 245, b: 220 }, hex: "#F5F5DC" }, + [ColorNames.Bisque]: { rgb: { r: 255, g: 228, b: 196 }, hex: "#FFE4C4" }, + [ColorNames.Black]: { rgb: { r: 0, g: 0, b: 0 }, hex: "#000000" }, + [ColorNames.BlanchedAlmond]: { + rgb: { r: 255, g: 235, b: 205 }, + hex: "#FFEBCD", + }, + [ColorNames.Blue]: { rgb: { r: 0, g: 0, b: 255 }, hex: "#0000FF" }, + [ColorNames.BlueViolet]: { rgb: { r: 138, g: 43, b: 226 }, hex: "#8A2BE2" }, + [ColorNames.Brown]: { rgb: { r: 165, g: 42, b: 42 }, hex: "#A52A2A" }, + [ColorNames.BurlyWood]: { rgb: { r: 222, g: 184, b: 135 }, hex: "#DEB887" }, + [ColorNames.CadetBlue]: { rgb: { r: 95, g: 158, b: 160 }, hex: "#5F9EA0" }, + [ColorNames.Chartreuse]: { rgb: { r: 127, g: 255, b: 0 }, hex: "#7FFF00" }, + [ColorNames.Chocolate]: { rgb: { r: 210, g: 105, b: 30 }, hex: "#D2691E" }, + [ColorNames.Coral]: { rgb: { r: 255, g: 127, b: 80 }, hex: "#FF7F50" }, + [ColorNames.CornflowerBlue]: { + rgb: { r: 100, g: 149, b: 237 }, + hex: "#6495ED", + }, + [ColorNames.Cornsilk]: { rgb: { r: 255, g: 248, b: 220 }, hex: "#FFF8DC" }, + [ColorNames.Crimson]: { rgb: { r: 220, g: 20, b: 60 }, hex: "#DC143C" }, + [ColorNames.Cyan]: { rgb: { r: 0, g: 255, b: 255 }, hex: "#00FFFF" }, + [ColorNames.DarkBlue]: { rgb: { r: 0, g: 0, b: 139 }, hex: "#00008B" }, + [ColorNames.DarkCyan]: { rgb: { r: 0, g: 139, b: 139 }, hex: "#008B8B" }, + [ColorNames.DarkGoldenRod]: { + rgb: { r: 184, g: 134, b: 11 }, + hex: "#B8860B", + }, + [ColorNames.DarkGray]: { rgb: { r: 169, g: 169, b: 169 }, hex: "#A9A9A9" }, + [ColorNames.DarkGreen]: { rgb: { r: 0, g: 100, b: 0 }, hex: "#006400" }, + [ColorNames.DarkGrey]: { rgb: { r: 169, g: 169, b: 169 }, hex: "#A9A9A9" }, + [ColorNames.DarkKhaki]: { rgb: { r: 189, g: 183, b: 107 }, hex: "#BDB76B" }, + [ColorNames.DarkMagenta]: { rgb: { r: 139, g: 0, b: 139 }, hex: "#8B008B" }, + [ColorNames.DarkOliveGreen]: { + rgb: { r: 85, g: 107, b: 47 }, + hex: "#556B2F", + }, + [ColorNames.DarkOrange]: { rgb: { r: 255, g: 140, b: 0 }, hex: "#FF8C00" }, + [ColorNames.DarkOrchid]: { rgb: { r: 153, g: 50, b: 204 }, hex: "#9932CC" }, + [ColorNames.DarkRed]: { rgb: { r: 139, g: 0, b: 0 }, hex: "#8B0000" }, + [ColorNames.DarkSalmon]: { rgb: { r: 233, g: 150, b: 122 }, hex: "#E9967A" }, + [ColorNames.DarkSeaGreen]: { + rgb: { r: 143, g: 188, b: 143 }, + hex: "#8FBC8F", + }, + [ColorNames.DarkSlateBlue]: { rgb: { r: 72, g: 61, b: 139 }, hex: "#483D8B" }, + [ColorNames.DarkSlateGray]: { rgb: { r: 47, g: 79, b: 79 }, hex: "#2F4F4F" }, + [ColorNames.DarkTurquoise]: { rgb: { r: 0, g: 206, b: 209 }, hex: "#00CED1" }, + [ColorNames.DarkViolet]: { rgb: { r: 148, g: 0, b: 211 }, hex: "#9400D3" }, + [ColorNames.DeepPink]: { rgb: { r: 255, g: 20, b: 147 }, hex: "#FF1493" }, + [ColorNames.DeepSkyBlue]: { rgb: { r: 0, g: 191, b: 255 }, hex: "#00BFFF" }, + [ColorNames.DimGray]: { rgb: { r: 105, g: 105, b: 105 }, hex: "#696969" }, + [ColorNames.DimGrey]: { rgb: { r: 105, g: 105, b: 105 }, hex: "#696969" }, + [ColorNames.DodgerBlue]: { rgb: { r: 30, g: 144, b: 255 }, hex: "#1E90FF" }, + [ColorNames.FireBrick]: { rgb: { r: 178, g: 34, b: 34 }, hex: "#B22222" }, + [ColorNames.FloralWhite]: { rgb: { r: 255, g: 250, b: 240 }, hex: "#FFFAF0" }, + [ColorNames.ForestGreen]: { rgb: { r: 34, g: 139, b: 34 }, hex: "#228B22" }, + [ColorNames.Fuchsia]: { rgb: { r: 255, g: 0, b: 255 }, hex: "#FF00FF" }, + [ColorNames.Gainsboro]: { rgb: { r: 220, g: 220, b: 220 }, hex: "#DCDCDC" }, + [ColorNames.GhostWhite]: { rgb: { r: 248, g: 248, b: 255 }, hex: "#F8F8FF" }, + [ColorNames.Gold]: { rgb: { r: 255, g: 215, b: 0 }, hex: "#FFD700" }, + [ColorNames.GoldenRod]: { rgb: { r: 218, g: 165, b: 32 }, hex: "#DAA520" }, + [ColorNames.Gray]: { rgb: { r: 128, g: 128, b: 128 }, hex: "#808080" }, + [ColorNames.Green]: { rgb: { r: 0, g: 128, b: 0 }, hex: "#008000" }, + [ColorNames.GreenYellow]: { rgb: { r: 173, g: 255, b: 47 }, hex: "#ADFF2F" }, + [ColorNames.HoneyDew]: { rgb: { r: 240, g: 255, b: 240 }, hex: "#F0FFF0" }, + [ColorNames.HotPink]: { rgb: { r: 255, g: 105, b: 180 }, hex: "#FF69B4" }, + [ColorNames.IndianRed]: { rgb: { r: 205, g: 92, b: 92 }, hex: "#CD5C5C" }, + [ColorNames.Indigo]: { rgb: { r: 75, g: 0, b: 130 }, hex: "#4B0082" }, + [ColorNames.Ivory]: { rgb: { r: 255, g: 255, b: 240 }, hex: "#FFFFF0" }, + [ColorNames.Khaki]: { rgb: { r: 240, g: 230, b: 140 }, hex: "#F0E68C" }, + [ColorNames.Lavender]: { rgb: { r: 230, g: 230, b: 250 }, hex: "#E6E6FA" }, + [ColorNames.LavenderBlush]: { + rgb: { r: 255, g: 240, b: 245 }, + hex: "#FFF0F5", + }, + [ColorNames.LawnGreen]: { rgb: { r: 124, g: 252, b: 0 }, hex: "#7CFC00" }, + [ColorNames.LemonChiffon]: { + rgb: { r: 255, g: 250, b: 205 }, + hex: "#FFFACD", + }, + [ColorNames.LightBlue]: { rgb: { r: 173, g: 216, b: 230 }, hex: "#ADD8E6" }, + [ColorNames.LightCoral]: { rgb: { r: 240, g: 128, b: 128 }, hex: "#F08080" }, + [ColorNames.LightCyan]: { rgb: { r: 224, g: 255, b: 255 }, hex: "#E0FFFF" }, + [ColorNames.LightGoldenRodYellow]: { + rgb: { r: 250, g: 250, b: 210 }, + hex: "#FAFAD2", + }, + [ColorNames.LightGray]: { rgb: { r: 211, g: 211, b: 211 }, hex: "#D3D3D3" }, + [ColorNames.LightGreen]: { rgb: { r: 144, g: 238, b: 144 }, hex: "#90EE90" }, + [ColorNames.LightGrey]: { rgb: { r: 211, g: 211, b: 211 }, hex: "#D3D3D3" }, + [ColorNames.LightPink]: { rgb: { r: 255, g: 182, b: 193 }, hex: "#FFB6C1" }, + [ColorNames.LightSalmon]: { rgb: { r: 255, g: 160, b: 122 }, hex: "#FFA07A" }, + [ColorNames.LightSeaGreen]: { + rgb: { r: 32, g: 178, b: 170 }, + hex: "#20B2AA", + }, + [ColorNames.LightSkyBlue]: { + rgb: { r: 135, g: 206, b: 250 }, + hex: "#87CEFA", + }, + [ColorNames.LightSlateGray]: { + rgb: { r: 119, g: 136, b: 153 }, + hex: "#778899", + }, + [ColorNames.LightSteelBlue]: { + rgb: { r: 176, g: 196, b: 222 }, + hex: "#B0C4DE", + }, + [ColorNames.LightYellow]: { rgb: { r: 255, g: 255, b: 224 }, hex: "#FFFFE0" }, + [ColorNames.Lime]: { rgb: { r: 0, g: 255, b: 0 }, hex: "#00FF00" }, + [ColorNames.LimeGreen]: { rgb: { r: 50, g: 205, b: 50 }, hex: "#32CD32" }, + [ColorNames.Linen]: { rgb: { r: 250, g: 240, b: 230 }, hex: "#FAF0E6" }, + [ColorNames.Magenta]: { rgb: { r: 255, g: 0, b: 255 }, hex: "#FF00FF" }, + [ColorNames.Maroon]: { rgb: { r: 128, g: 0, b: 0 }, hex: "#800000" }, + [ColorNames.MediumAquaMarine]: { + rgb: { r: 102, g: 205, b: 170 }, + hex: "#66CDAA", + }, + [ColorNames.MediumBlue]: { rgb: { r: 0, g: 0, b: 205 }, hex: "#0000CD" }, + [ColorNames.MediumOrchid]: { rgb: { r: 186, g: 85, b: 211 }, hex: "#BA55D3" }, + [ColorNames.MediumPurple]: { + rgb: { r: 147, g: 112, b: 219 }, + hex: "#9370DB", + }, + [ColorNames.MediumSeaGreen]: { + rgb: { r: 60, g: 179, b: 113 }, + hex: "#3CB371", + }, + [ColorNames.MediumSlateBlue]: { + rgb: { r: 123, g: 104, b: 238 }, + hex: "#7B68EE", + }, + [ColorNames.MediumSpringGreen]: { + rgb: { r: 0, g: 250, b: 154 }, + hex: "#00FA9A", + }, + [ColorNames.MediumTurquoise]: { + rgb: { r: 72, g: 209, b: 204 }, + hex: "#48D1CC", + }, + [ColorNames.MediumVioletRed]: { + rgb: { r: 199, g: 21, b: 133 }, + hex: "#C71585", + }, + [ColorNames.MidnightBlue]: { rgb: { r: 25, g: 25, b: 112 }, hex: "#191970" }, + [ColorNames.MintCream]: { rgb: { r: 245, g: 255, b: 250 }, hex: "#F5FFFA" }, + [ColorNames.MistyRose]: { rgb: { r: 255, g: 228, b: 225 }, hex: "#FFE4E1" }, + [ColorNames.Moccasin]: { rgb: { r: 255, g: 228, b: 181 }, hex: "#FFE4B5" }, + [ColorNames.NavajoWhite]: { rgb: { r: 255, g: 222, b: 173 }, hex: "#FFDEAD" }, + [ColorNames.Navy]: { rgb: { r: 0, g: 0, b: 128 }, hex: "#000080" }, + [ColorNames.OldLace]: { rgb: { r: 253, g: 245, b: 230 }, hex: "#FDF5E6" }, + [ColorNames.Olive]: { rgb: { r: 128, g: 128, b: 0 }, hex: "#808000" }, + [ColorNames.OliveDrab]: { rgb: { r: 107, g: 142, b: 35 }, hex: "#6B8E23" }, + [ColorNames.Orange]: { rgb: { r: 255, g: 165, b: 0 }, hex: "#FFA500" }, + [ColorNames.OrangeRed]: { rgb: { r: 255, g: 69, b: 0 }, hex: "#FF4500" }, + [ColorNames.Orchid]: { rgb: { r: 218, g: 112, b: 214 }, hex: "#DA70D6" }, + [ColorNames.PaleGoldenRod]: { + rgb: { r: 238, g: 232, b: 170 }, + hex: "#EEE8AA", + }, + [ColorNames.PaleGreen]: { rgb: { r: 152, g: 251, b: 152 }, hex: "#98FB98" }, + [ColorNames.PaleTurquoise]: { + rgb: { r: 175, g: 238, b: 238 }, + hex: "#AFEEEE", + }, + [ColorNames.PaleVioletRed]: { + rgb: { r: 219, g: 112, b: 147 }, + hex: "#DB7093", + }, + [ColorNames.PapayaWhip]: { rgb: { r: 255, g: 239, b: 213 }, hex: "#FFEFD5" }, + [ColorNames.PeachPuff]: { rgb: { r: 255, g: 218, b: 185 }, hex: "#FFDAB9" }, + [ColorNames.Peru]: { rgb: { r: 205, g: 133, b: 63 }, hex: "#CD853F" }, + [ColorNames.Pink]: { rgb: { r: 255, g: 192, b: 203 }, hex: "#FFC0CB" }, + [ColorNames.Plum]: { rgb: { r: 221, g: 160, b: 221 }, hex: "#DDA0DD" }, + [ColorNames.PowderBlue]: { rgb: { r: 176, g: 224, b: 230 }, hex: "#B0E0E6" }, + [ColorNames.Purple]: { rgb: { r: 128, g: 0, b: 128 }, hex: "#800080" }, + [ColorNames.RebeccaPurple]: { + rgb: { r: 102, g: 51, b: 153 }, + hex: "#663399", + }, + [ColorNames.Red]: { rgb: { r: 255, g: 0, b: 0 }, hex: "#FF0000" }, + [ColorNames.RosyBrown]: { rgb: { r: 188, g: 143, b: 143 }, hex: "#BC8F8F" }, + [ColorNames.RoyalBlue]: { rgb: { r: 65, g: 105, b: 225 }, hex: "#4169E1" }, + [ColorNames.SaddleBrown]: { rgb: { r: 139, g: 69, b: 19 }, hex: "#8B4513" }, + [ColorNames.Salmon]: { rgb: { r: 250, g: 128, b: 114 }, hex: "#FA8072" }, + [ColorNames.SandyBrown]: { rgb: { r: 244, g: 164, b: 96 }, hex: "#F4A460" }, + [ColorNames.SeaGreen]: { rgb: { r: 46, g: 139, b: 87 }, hex: "#2E8B57" }, + [ColorNames.SeaShell]: { rgb: { r: 255, g: 245, b: 238 }, hex: "#FFF5EE" }, + [ColorNames.Sienna]: { rgb: { r: 160, g: 82, b: 45 }, hex: "#A0522D" }, + [ColorNames.Silver]: { rgb: { r: 192, g: 192, b: 192 }, hex: "#C0C0C0" }, + [ColorNames.SkyBlue]: { rgb: { r: 135, g: 206, b: 235 }, hex: "#87CEEB" }, + [ColorNames.SlateBlue]: { rgb: { r: 106, g: 90, b: 205 }, hex: "#6A5ACD" }, + [ColorNames.SlateGray]: { rgb: { r: 112, g: 128, b: 144 }, hex: "#708090" }, + [ColorNames.Snow]: { rgb: { r: 255, g: 250, b: 250 }, hex: "#FFFAFA" }, + [ColorNames.SpringGreen]: { rgb: { r: 0, g: 255, b: 127 }, hex: "#00FF7F" }, + [ColorNames.SteelBlue]: { rgb: { r: 70, g: 130, b: 180 }, hex: "#4682B4" }, + [ColorNames.Tan]: { rgb: { r: 210, g: 180, b: 140 }, hex: "#D2B48C" }, + [ColorNames.Teal]: { rgb: { r: 0, g: 128, b: 128 }, hex: "#008080" }, + [ColorNames.Thistle]: { rgb: { r: 216, g: 191, b: 216 }, hex: "#D8BFD8" }, + [ColorNames.Tomato]: { rgb: { r: 255, g: 99, b: 71 }, hex: "#FF6347" }, + [ColorNames.Turquoise]: { rgb: { r: 64, g: 224, b: 208 }, hex: "#40E0D0" }, + [ColorNames.Violet]: { rgb: { r: 238, g: 130, b: 238 }, hex: "#EE82EE" }, + [ColorNames.Wheat]: { rgb: { r: 245, g: 222, b: 179 }, hex: "#F5DEB3" }, + [ColorNames.White]: { rgb: { r: 255, g: 255, b: 255 }, hex: "#FFFFFF" }, + [ColorNames.WhiteSmoke]: { rgb: { r: 245, g: 245, b: 245 }, hex: "#F5F5F5" }, + [ColorNames.Yellow]: { rgb: { r: 255, g: 255, b: 0 }, hex: "#FFFF00" }, + [ColorNames.YellowGreen]: { rgb: { r: 154, g: 205, b: 50 }, hex: "#9ACD32" }, }; diff --git a/src/darkenColor.ts b/src/darkenColor.ts index a0168d2..2becf46 100644 --- a/src/darkenColor.ts +++ b/src/darkenColor.ts @@ -23,13 +23,12 @@ * ``` */ export const darkenColor = ( - color: { r: number; g: number; b: number }, - factor: number - ): { r: number; g: number; b: number } => { - return { - r: Math.max(0, Math.round(color.r - factor * color.r)), - g: Math.max(0, Math.round(color.g - factor * color.g)), - b: Math.max(0, Math.round(color.b - factor * color.b)) - }; + color: { r: number; g: number; b: number }, + factor: number, +): { r: number; g: number; b: number } => { + return { + r: Math.max(0, Math.round(color.r - factor * color.r)), + g: Math.max(0, Math.round(color.g - factor * color.g)), + b: Math.max(0, Math.round(color.b - factor * color.b)), }; - \ No newline at end of file +}; diff --git a/src/formatDecimalObjectToRgba.ts b/src/formatDecimalObjectToRgba.ts index e488928..7c01aca 100644 --- a/src/formatDecimalObjectToRgba.ts +++ b/src/formatDecimalObjectToRgba.ts @@ -1,6 +1,6 @@ -import { isNumeric } from '@devlander/utils'; -import { HexDecimalObject } from './types/hex-decimal-object.interface'; -import { toRgbString } from './toRgbString'; +import { isNumeric } from "@devlander/utils"; +import { HexDecimalObject } from "./types/hex-decimal-object.interface"; +import { toRgbString } from "./toRgbString"; /** * Formats a HexDecimalObject to an RGBA string. @@ -33,7 +33,7 @@ export const formatDecimalObjectToRgba = ( : parsedA; return toRgbString({ r, g, b, a }); } catch (error) { - console.error('Error formatting decimal object to RGBA string:', error); + console.error("Error formatting decimal object to RGBA string:", error); return toRgbString({ r: 0, g: 0, b: 0, a: 1 }); } }; diff --git a/src/hexToDecimals.ts b/src/hexToDecimals.ts index 78ba750..868de0c 100644 --- a/src/hexToDecimals.ts +++ b/src/hexToDecimals.ts @@ -1,6 +1,6 @@ -import { isObject, isString } from '@devlander/utils'; -import { HexObject, parseHex } from './parseHex'; -import { HexDecimalObject } from './types/hex-decimal-object.interface'; +import { isObject, isString } from "@devlander/utils"; +import { HexObject, parseHex } from "./parseHex"; +import { HexDecimalObject } from "./types/hex-decimal-object.interface"; /** * Converts a hexadecimal string to a decimal number. @@ -40,12 +40,14 @@ type ParamsForHexesToDecimals = string | RgbWithAHexObject; * * const hexString = '#ff000080'; * console.log(hexesToDecimals(hexString)); // { r: 255, g: 0, b: 0, a: 0.5 } - * + * * const shortHexString = '#f008'; * console.log(hexesToDecimals(shortHexString)); // { r: 255, g: 0, b: 0, a: 0.53 } * ``` */ -export const hexesToDecimals = (params: ParamsForHexesToDecimals): HexDecimalObject => { +export const hexesToDecimals = ( + params: ParamsForHexesToDecimals, +): HexDecimalObject => { let hexObject: RgbWithAHexObject; if (isObject(params) && !isString(params)) { @@ -53,7 +55,7 @@ export const hexesToDecimals = (params: ParamsForHexesToDecimals): HexDecimalObj r: params.r, g: params.g, b: params.b, - a: "a" in params ? params.a : 'ff' + a: "a" in params ? params.a : "ff", }; } else { hexObject = parseHex(params as string); @@ -66,7 +68,7 @@ export const hexesToDecimals = (params: ParamsForHexesToDecimals): HexDecimalObj b: hexToDecimal(b), }; - if (a !== undefined && a !== 'ff') { + if (a !== undefined && a !== "ff") { result.a = +(hexToDecimal(a) / 255).toFixed(2); } else { result.a = 1; @@ -81,7 +83,7 @@ export const hexesToDecimals = (params: ParamsForHexesToDecimals): HexDecimalObj * @returns The validated HexDecimalObject. */ const validateHexDecimalObject = (obj: HexDecimalObject): HexDecimalObject => { - const keys: (keyof HexDecimalObject)[] = ['r', 'g', 'b', 'a']; + const keys: (keyof HexDecimalObject)[] = ["r", "g", "b", "a"]; keys.forEach((key) => { if (obj[key] !== undefined && isNaN(obj[key] as number)) { obj[key] = 1; diff --git a/src/hexToRgb.ts b/src/hexToRgb.ts index 0a593b1..ee2a6be 100644 --- a/src/hexToRgb.ts +++ b/src/hexToRgb.ts @@ -1,7 +1,7 @@ // @devlander/utils src/hexToRgba -import { hexToRgba } from './hexToRgba' -import { isValidHex } from './isValidHex' -import { toRgbString } from './toRgbString' +import { hexToRgba } from "./hexToRgba"; +import { isValidHex } from "./isValidHex"; +import { toRgbString } from "./toRgbString"; /** * Converts a hexadecimal color code to an RGB or RGBA color string. * @param hex - The hexadecimal color code to convert. @@ -15,19 +15,18 @@ import { toRgbString } from './toRgbString' */ export const hexToRgb = (hex: string): string => { if (!isValidHex(hex)) { - throw new Error('Invalid hex color') + throw new Error("Invalid hex color"); } - hex = hex.charAt(0) === '#' ? hex.slice(1) : hex - const bigint = parseInt(hex, 16) - const r = (bigint >> 16) & 255 - const g = (bigint >> 8) & 255 - const b = bigint & 255 + hex = hex.charAt(0) === "#" ? hex.slice(1) : hex; + const bigint = parseInt(hex, 16); + const r = (bigint >> 16) & 255; + const g = (bigint >> 8) & 255; + const b = bigint & 255; if (hex.length === 8) { - const a = ((bigint >> 24) & 255) / 255 - return hexToRgba(hex, a) - } - - return toRgbString({ r, g, b }); + const a = ((bigint >> 24) & 255) / 255; + return hexToRgba(hex, a); + } -} \ No newline at end of file + return toRgbString({ r, g, b }); +}; diff --git a/src/hexToRgba.ts b/src/hexToRgba.ts index 0872b79..5300346 100644 --- a/src/hexToRgba.ts +++ b/src/hexToRgba.ts @@ -1,8 +1,8 @@ -import { isNumeric } from '@devlander/utils'; -import { hexToDecimal } from './hexToDecimals'; -import { isValidHex } from './isValidHex'; -import { parseHex } from './parseHex'; -import { toRgbString } from './toRgbString'; +import { isNumeric } from "@devlander/utils"; +import { hexToDecimal } from "./hexToDecimals"; +import { isValidHex } from "./isValidHex"; +import { parseHex } from "./parseHex"; +import { toRgbString } from "./toRgbString"; /** * Converts a CSS hex color value to an RGB or RGBA color value. @@ -12,15 +12,15 @@ import { toRgbString } from './toRgbString'; */ export function hexToRgba(hex: string, alpha: string | number = 1): string { if (!isValidHex(hex)) { - throw new Error('Invalid hex color'); + throw new Error("Invalid hex color"); } - const hashlessHex = hex.replace(/^#/, ''); + const hashlessHex = hex.replace(/^#/, ""); const { r, g, b } = parseHex(hashlessHex); // Validate the parsed hex values if (!r || !g || !b || r.length !== 2 || g.length !== 2 || b.length !== 2) { - throw new TypeError('Invalid color components'); + throw new TypeError("Invalid color components"); } const red = hexToDecimal(r); @@ -30,15 +30,15 @@ export function hexToRgba(hex: string, alpha: string | number = 1): string { let alphaValue: number; // Check alpha value - if (typeof alpha === 'number') { + if (typeof alpha === "number") { if (alpha < 0 || alpha > 1) { - throw new Error('Invalid alpha value'); + throw new Error("Invalid alpha value"); } alphaValue = alpha; } else if (isNumeric(alpha)) { alphaValue = parseFloat(alpha); if (alphaValue < 0 || alphaValue > 1) { - throw new Error('Invalid alpha value'); + throw new Error("Invalid alpha value"); } } else { alphaValue = 1; @@ -48,6 +48,6 @@ export function hexToRgba(hex: string, alpha: string | number = 1): string { r: red, g: green, b: blue, - a: alphaValue + a: alphaValue, }); } diff --git a/src/hslToRgb.ts b/src/hslToRgb.ts index c1223cf..b4d3dd6 100644 --- a/src/hslToRgb.ts +++ b/src/hslToRgb.ts @@ -10,45 +10,45 @@ export const hslToRgb = ( s: number, l: number, ): [number, number, number] => { - s /= 100 - l /= 100 + s /= 100; + l /= 100; - const c = (1 - Math.abs(2 * l - 1)) * s - const x = c * (1 - Math.abs(((h / 60) % 2) - 1)) - const m = l - c / 2 - let r = 0 - let g = 0 - let b = 0 + const c = (1 - Math.abs(2 * l - 1)) * s; + const x = c * (1 - Math.abs(((h / 60) % 2) - 1)); + const m = l - c / 2; + let r = 0; + let g = 0; + let b = 0; if (0 <= h && h < 60) { - r = c - g = x - b = 0 + r = c; + g = x; + b = 0; } else if (60 <= h && h < 120) { - r = x - g = c - b = 0 + r = x; + g = c; + b = 0; } else if (120 <= h && h < 180) { - r = 0 - g = c - b = x + r = 0; + g = c; + b = x; } else if (180 <= h && h < 240) { - r = 0 - g = x - b = c + r = 0; + g = x; + b = c; } else if (240 <= h && h < 300) { - r = x - g = 0 - b = c + r = x; + g = 0; + b = c; } else if (300 <= h && h < 360) { - r = c - g = 0 - b = x + r = c; + g = 0; + b = x; } - r = Math.round((r + m) * 255) - g = Math.round((g + m) * 255) - b = Math.round((b + m) * 255) + r = Math.round((r + m) * 255); + g = Math.round((g + m) * 255); + b = Math.round((b + m) * 255); - return [r, g, b] -} + return [r, g, b]; +}; diff --git a/src/index.ts b/src/index.ts index 22ae03b..fe59f16 100644 --- a/src/index.ts +++ b/src/index.ts @@ -30,10 +30,6 @@ export * from "./darkenColor"; * TSDoc for formatDecimalObjectToRgba */ export * from "./formatDecimalObjectToRgba"; -/** - * TSDoc for generateColorFrom[TODO] - */ -export * from "./generateColorFrom[TODO]"; /** * TSDoc for hexToDecimals */ @@ -54,6 +50,14 @@ export * from "./hslToRgb"; * TSDoc for isHexColor */ export * from "./isHexColor"; +/** + * TSDoc for isRgbaOutOfRange + */ +export * from "./isRgbaOutOfRange"; +/** + * TSDoc for isValidAlphaHexCode + */ +export * from "./isValidAlphaHexCode"; /** * TSDoc for isValidHex */ diff --git a/src/isHexColor.ts b/src/isHexColor.ts index e7a95fa..f2f6be2 100644 --- a/src/isHexColor.ts +++ b/src/isHexColor.ts @@ -19,13 +19,13 @@ * ``` */ export const isHexColor = (hex: string): boolean => { - if (typeof hex !== 'string') { - console.log(`Invalid type for hex: ${typeof hex}`) - return false + if (typeof hex !== "string") { + console.log(`Invalid type for hex: ${typeof hex}`); + return false; } const hexPattern = - /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/ - const isValid = hexPattern.test(hex) - console.log(`Testing hex: ${hex}, Result: ${isValid}`) - return isValid -} + /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/; + const isValid = hexPattern.test(hex); + console.log(`Testing hex: ${hex}, Result: ${isValid}`); + return isValid; +}; diff --git a/src/isRgbaOutOfRange.ts b/src/isRgbaOutOfRange.ts new file mode 100644 index 0000000..2a0f421 --- /dev/null +++ b/src/isRgbaOutOfRange.ts @@ -0,0 +1,21 @@ +import { HexDecimalObject } from "./types/hex-decimal-object.interface"; + +/** + * Checks if the RGBA value is out of range. + * @param rgba - The RGBA object to validate. + * @returns {boolean} - True if the value is out of range, false otherwise. + */ +export function isRgbaOutOfRange(rgba: HexDecimalObject): boolean { + const { r, g, b, a } = rgba; + + // Check if r, g, b are within 0-255 + if (r < 0 || r > 255) return true; + if (g < 0 || g > 255) return true; + if (b < 0 || b > 255) return true; + + // Check if a (if provided) is within 0-1 + if (a !== undefined && (a < 0 || a > 1)) return true; + + // If none of the conditions are met, the value is not out of range + return false; +} diff --git a/src/isValidAlphaHexCode.ts b/src/isValidAlphaHexCode.ts new file mode 100644 index 0000000..6c2da73 --- /dev/null +++ b/src/isValidAlphaHexCode.ts @@ -0,0 +1,10 @@ +/** + * Checks if a hex code is a valid alpha hex code. + * @param hexCode - The hex code to validate. + * @returns {boolean} - True if the hex code is valid, false otherwise. + */ +export function isValidAlphaHexCode(hexCode: string): boolean { + // Regular expression to match a valid alpha hex code + const alphaHexPattern = /^#([A-Fa-f0-9]{8})$/; + return alphaHexPattern.test(hexCode); +} diff --git a/src/isValidHex.ts b/src/isValidHex.ts index 2a8f9a9..c2bce53 100644 --- a/src/isValidHex.ts +++ b/src/isValidHex.ts @@ -27,7 +27,7 @@ */ export const isValidHex = (hex: string): boolean => { console.log(`Testing hex: ${hex}`); // Debugging log - if (typeof hex !== 'string') return false; + if (typeof hex !== "string") return false; const hexPattern = /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/; const result = hexPattern.test(hex); console.log(`Result for ${hex}: ${result}`); // Debugging log diff --git a/src/isValidRgb.ts b/src/isValidRgb.ts index 575e2ec..59084b0 100644 --- a/src/isValidRgb.ts +++ b/src/isValidRgb.ts @@ -1,21 +1,30 @@ +import { isRgbaOutOfRange } from "./isRgbaOutOfRange"; + /** * Checks if the provided string is a valid RGB color format. * @param rgb The string to validate as RGB (e.g., "rgb(255, 0, 128)"). * @returns True if the string is a valid RGB format, false otherwise. */ + export const isValidRgb = (rgb: string): boolean => { try { const rgbRegex = /^rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)$/; const match = rgb.match(rgbRegex); - + if (!match) { return false; } const [, r, g, b] = match.map(Number); + const rgbObj = { + r: r, + g: g, + b: b, + }; + + const valid = !isRgbaOutOfRange(rgbObj); - // Check if components are within valid range - return r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255; + return valid; } catch (error) { console.error(`Error validating RGB string: ${rgb}`, error); return false; diff --git a/src/isValidRgba.ts b/src/isValidRgba.ts index dc68797..f24dbaa 100644 --- a/src/isValidRgba.ts +++ b/src/isValidRgba.ts @@ -1,13 +1,36 @@ +import { isRgbaOutOfRange } from "./isRgbaOutOfRange"; +import { HexDecimalObject } from "./types/hex-decimal-object.interface"; + +/** + * Checks if the provided string is a valid RGBA color format. + * @param rgba The string to validate as RGBA (e.g., "rgba(255,0,128,0.5)" or "rgba(255%, 0%, 50%, 0.5)"). + * @returns True if the string is a valid RGBA format, false otherwise. + */ export const isValidRgba = (rgba: string): boolean => { - try { - const rgbaRegex = /^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; - const match = rgba.match(rgbaRegex); - if (!match) return false; - const [, r, g, b, a] = match.map(Number); - return r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255 && (!a || (a >= 0 && a <= 1)); - } catch (error) { - console.error(`Error validating RGBA string: ${error}`); - return false; - } - }; - \ No newline at end of file + try { + // Regex to match RGBA format, including percentages + const rgbaRegex = + /^rgba?\(\s*((?:\d{1,3}%?\s*,\s*){2})(?:\d{1,3}%?\s*,\s*)\d{1,3}%?\s*(?:,\s*([+-]?\d*\.?\d+)\s*)?\)$/; + const match = rgba.match(rgbaRegex); + + if (!match) return false; + + // Extract RGBA values + const parseValue = (value: string) => { + const numValue = Number(value.replace("%", "")); + return value.includes("%") ? numValue * 2.55 : numValue; // Convert percentage to 0-255 range + }; + + const r = parseValue(match[1].trim()); + const g = parseValue(match[2].trim()); + const b = parseValue(match[3].trim()); + const a = match[4] !== undefined ? Number(match[4]) : undefined; + + const rgbaObj: HexDecimalObject = { r, g, b, a }; + + return !isRgbaOutOfRange(rgbaObj); + } catch (error) { + console.error(`Error validating RGBA string: ${rgba}`, error); + return false; + } +}; diff --git a/src/lightenColor.ts b/src/lightenColor.ts index 1668e7e..3be156a 100644 --- a/src/lightenColor.ts +++ b/src/lightenColor.ts @@ -23,13 +23,12 @@ * ``` */ export const lightenColor = ( - color: { r: number; g: number; b: number }, - factor: number - ): { r: number; g: number; b: number } => { - return { - r: Math.min(255, Math.round(color.r + factor * (255 - color.r))), - g: Math.min(255, Math.round(color.g + factor * (255 - color.g))), - b: Math.min(255, Math.round(color.b + factor * (255 - color.b))) - }; + color: { r: number; g: number; b: number }, + factor: number, +): { r: number; g: number; b: number } => { + return { + r: Math.min(255, Math.round(color.r + factor * (255 - color.r))), + g: Math.min(255, Math.round(color.g + factor * (255 - color.g))), + b: Math.min(255, Math.round(color.b + factor * (255 - color.b))), }; - \ No newline at end of file +}; diff --git a/src/parseColor.ts b/src/parseColor.ts index b370670..b703e4c 100644 --- a/src/parseColor.ts +++ b/src/parseColor.ts @@ -6,6 +6,9 @@ import { isValidRgba } from "./isValidRgba"; import { parseRgbString } from "./parseRgbString"; import { parseHex } from "./parseHex"; import { HexDecimalObject } from "./types/hex-decimal-object.interface"; +import { isRgbaOutOfRange } from "./isRgbaOutOfRange"; + +export type ColorFormatType = "hex" | "rgba" | "rgb" | "alphaHex" | undefined; /** * Parses a color value into a HexDecimalObject representing RGB(A) values. @@ -17,7 +20,6 @@ export const parseColor = (colorValue: string): HexDecimalObject => { if (!canBeConvertedIntoColor(colorValue)) { throw new Error("Invalid color format"); } - try { let result: HexDecimalObject | null = null; @@ -25,25 +27,39 @@ export const parseColor = (colorValue: string): HexDecimalObject => { const hexObject = parseHex(colorValue); result = hexesToDecimals(hexObject as RgbWithAHexObject); } else if (isValidRgb(colorValue)) { - result = hexesToDecimals(colorValue); + const rgbObject = parseRgbString(colorValue); + result = rgbObject; } else if (isValidRgba(colorValue)) { - const hexObject = parseRgbString(colorValue); - result = hexesToDecimals(hexObject as any); + const rgbaObject = parseRgbString(colorValue); + result = rgbaObject; } if (result) { - return result; + if (!isRgbaOutOfRange(result)) { + return result; + } + return { + r: 0, + g: 0, + b: 0, + a: 1, + }; } else { // Default to black if parsing fails return { r: 0, g: 0, b: 0, - a: 1 + a: 1, }; } } catch (error) { console.error(`Error parsing color value: ${colorValue}`, error); - throw error; + return { + r: 0, + g: 0, + b: 0, + a: 1, + }; } }; diff --git a/src/parseHex.ts b/src/parseHex.ts index fc722a6..21ec3ab 100644 --- a/src/parseHex.ts +++ b/src/parseHex.ts @@ -1,46 +1,47 @@ -import { isHexColor } from './isHexColor' +import { isHexColor } from "./isHexColor"; export interface HexObject { - r: string - g: string - b: string - a: string + r: string; + g: string; + b: string; + a: string; } export const parseHex = (hexString: string): HexObject => { - if (!hexString || typeof hexString !== 'string') { - throw new Error('Invalid hex color') + if (!hexString || typeof hexString !== "string") { + throw new Error("Invalid hex color"); } - const hashlessHex = hexString.replace(/^#/, '') + const hashlessHex = hexString.replace(/^#/, ""); if (!isHexColor(`#${hashlessHex}`)) { - throw new Error('Invalid hex color') + throw new Error("Invalid hex color"); } - const isShort = hashlessHex.length === 3 || hashlessHex.length === 4 - const expandHex = (shortHex: string): string => shortHex.repeat(2) + const isShort = hashlessHex.length === 3 || hashlessHex.length === 4; + const expandHex = (shortHex: string): string => shortHex.repeat(2); if (![3, 4, 6, 8].includes(hashlessHex.length)) { - throw new Error('Invalid hex color length') + throw new Error("Invalid hex color length"); } const twoDigitHexR = isShort ? expandHex(hashlessHex.slice(0, 1)) - : hexString.slice(0, 2) + : hexString.slice(0, 2); const twoDigitHexG = isShort ? expandHex(hexString.slice(1, 2)) - : hexString.slice(2, 4) + : hexString.slice(2, 4); const twoDigitHexB = isShort ? expandHex(hexString.slice(2, 3)) - : hexString.slice(4, 6) + : hexString.slice(4, 6); const twoDigitHexA = - (isShort ? expandHex(hexString.slice(3, 4)) : hexString.slice(6, 8)) || 'ff' + (isShort ? expandHex(hexString.slice(3, 4)) : hexString.slice(6, 8)) || + "ff"; return { r: twoDigitHexR, g: twoDigitHexG, b: twoDigitHexB, a: twoDigitHexA, - } -} + }; +}; diff --git a/src/parseRgbString.ts b/src/parseRgbString.ts index 3231649..b324218 100644 --- a/src/parseRgbString.ts +++ b/src/parseRgbString.ts @@ -5,33 +5,43 @@ import { HexDecimalObject } from "./types/hex-decimal-object.interface"; /** * Parses an RGB or RGBA string and returns an object with the red, green, blue, and optionally alpha components. * - * @param {string} color - The RGB or RGBA string to parse (e.g., "rgb(255, 255, 255)" or "rgba(255, 255, 255, 0.5)"). + * @param {string} color - The RGB or RGBA string to parse (e.g., "rgb(255, 255, 255)", "rgba(255, 255, 255, 0.5)", "rgb(100%, 0%, 0%)", or "rgba(100%, 0%, 0%, 0.5)"). * @returns {HexDecimalObject | null} The RGB components or null if the input is invalid. */ export const parseRgbString = (color: string): HexDecimalObject | null => { try { let result: RegExpExecArray | null = null; + const percentageToDecimal = (percent: string): number => { + return Math.round(parseFloat(percent) * 2.55); // Convert percentage to 0-255 range + }; + if (isValidRgb(color)) { - const rgbRegex = /^rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)$/; + const rgbRegex = + /^rgb\(\s*(\d{1,3}%?)\s*,\s*(\d{1,3}%?)\s*,\s*(\d{1,3}%?)\s*\)$/; result = rgbRegex.exec(color); } else if (isValidRgba(color)) { - const rgbaRegex = /^rgba\((\d{1,3}), (\d{1,3}), (\d{1,3}), (0|1|0?\.\d+)\)$/; + const rgbaRegex = + /^rgba\(\s*(\d{1,3}%?)\s*,\s*(\d{1,3}%?)\s*,\s*(\d{1,3}%?)\s*,\s*(0|1|0?\.\d+)\s*\)$/; result = rgbaRegex.exec(color); } if (result) { - const [r, g, b, a] = result.slice(1).map(Number); + const [r, g, b, a] = result + .slice(1) + .map((value) => + value.endsWith("%") ? percentageToDecimal(value) : Number(value), + ); const colorObject: HexDecimalObject = { r, g, b }; if (a !== undefined) { - colorObject.a = a; // Leave alpha as it is + colorObject.a = Number(a); // Leave alpha as it is } return colorObject; } return null; } catch (error) { - console.error('Error parsing RGB string:', error); + console.error("Error parsing RGB string:", error); return null; } }; diff --git a/src/rgbaToHexAlpha.ts b/src/rgbaToHexAlpha.ts index 5cc2fe0..f89f487 100644 --- a/src/rgbaToHexAlpha.ts +++ b/src/rgbaToHexAlpha.ts @@ -13,12 +13,15 @@ * console.log(RGBAToHexAlpha('rgba(255, 0, 0, 0.5)', true)); // Output: '#ff0000' * ``` */ -export const RGBAToHexAlpha = (rgba: string, forceRemoveAlpha = false): string => { +export const RGBAToHexAlpha = ( + rgba: string, + forceRemoveAlpha = false, +): string => { // Extracts numbers from the rgba/rgb string const numbers = rgba.match(/\d+\.?\d*/g)?.map(Number); if (!numbers) { - throw new Error('Invalid RGBA/RGB input'); + throw new Error("Invalid RGBA/RGB input"); } // Convert the RGBA values to hex @@ -27,7 +30,7 @@ export const RGBAToHexAlpha = (rgba: string, forceRemoveAlpha = false): string = if (idx === 3) num = Math.round(num * 255); const hex = num.toString(16); - return hex.length === 1 ? '0' + hex : hex; + return hex.length === 1 ? "0" + hex : hex; }); // If forceRemoveAlpha is true, remove the alpha value @@ -35,5 +38,5 @@ export const RGBAToHexAlpha = (rgba: string, forceRemoveAlpha = false): string = hexValues.pop(); } - return '#' + hexValues.join(''); + return "#" + hexValues.join(""); }; diff --git a/src/toHexColor.ts b/src/toHexColor.ts index 2d9b763..c80660d 100644 --- a/src/toHexColor.ts +++ b/src/toHexColor.ts @@ -1,8 +1,8 @@ export const toHexColor = (color: { - r: number - g: number - b: number + r: number; + g: number; + b: number; }): string => { - const toHexComponent = (comp: number) => comp.toString(16).padStart(2, '0') - return `#${toHexComponent(color.r)}${toHexComponent(color.g)}${toHexComponent(color.b)}`.toUpperCase() -} + const toHexComponent = (comp: number) => comp.toString(16).padStart(2, "0"); + return `#${toHexComponent(color.r)}${toHexComponent(color.g)}${toHexComponent(color.b)}`.toUpperCase(); +}; diff --git a/src/types/alpha-value.type.ts b/src/types/alpha-value.type.ts index 6f4184c..12944df 100644 --- a/src/types/alpha-value.type.ts +++ b/src/types/alpha-value.type.ts @@ -1,2 +1,14 @@ -export type AlphaValue = 0 | - 0.0 | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 | 1.0 | 1 +export type AlphaValue = + | 0 + | 0.0 + | 0.1 + | 0.2 + | 0.3 + | 0.4 + | 0.5 + | 0.6 + | 0.7 + | 0.8 + | 0.9 + | 1.0 + | 1; diff --git a/src/types/color-input.type.ts b/src/types/color-input.type.ts new file mode 100644 index 0000000..28df705 --- /dev/null +++ b/src/types/color-input.type.ts @@ -0,0 +1 @@ +export type ColorInputType = "hex" | "rgb" | "rgba" | "invalid"; diff --git a/src/types/color-item.interface.ts b/src/types/color-item.interface.ts index 2873e31..d0c88c1 100644 --- a/src/types/color-item.interface.ts +++ b/src/types/color-item.interface.ts @@ -1,6 +1,16 @@ import { Rgb } from "./rgb.type"; +export interface Rgba { + r: number; + g: number; + b: number; + a: number; +} + export interface ColorItem { - rgb: Rgb; - hex: string; - } \ No newline at end of file + rgb: Rgb; + cmyk?: string; + rgba?: Rgba; + hex?: string; + hexAlpha?: string; +} diff --git a/src/types/color-names.ts b/src/types/color-names.ts index 6d761d0..266f164 100644 --- a/src/types/color-names.ts +++ b/src/types/color-names.ts @@ -1,147 +1,146 @@ export enum ColorNames { - AliceBlue = 'aliceblue', - AntiqueWhite = 'antiquewhite', - Aqua = 'aqua', - Aquamarine = 'aquamarine', - Azure = 'azure', - Beige = 'beige', - Bisque = 'bisque', - Black = 'black', - BlanchedAlmond = 'blanchedalmond', - Blue = 'blue', - BlueViolet = 'blueviolet', - Brown = 'brown', - BurlyWood = 'burlywood', - CadetBlue = 'cadetblue', - Chartreuse = 'chartreuse', - Chocolate = 'chocolate', - Coral = 'coral', - CornflowerBlue = 'cornflowerblue', - Cornsilk = 'cornsilk', - Crimson = 'crimson', - Cyan = 'cyan', - DarkBlue = 'darkblue', - DarkCyan = 'darkcyan', - DarkGoldenRod = 'darkgoldenrod', - DarkGray = 'darkgray', - DarkGreen = 'darkgreen', - DarkGrey = 'darkgrey', - DarkKhaki = 'darkkhaki', - DarkMagenta = 'darkmagenta', - DarkOliveGreen = 'darkolivegreen', - DarkOrange = 'darkorange', - DarkOrchid = 'darkorchid', - DarkRed = 'darkred', - DarkSalmon = 'darksalmon', - DarkSeaGreen = 'darkseagreen', - DarkSlateBlue = 'darkslateblue', - DarkSlateGray = 'darkslategray', - DarkTurquoise = 'darkturquoise', - DarkViolet = 'darkviolet', - DeepPink = 'deeppink', - DeepSkyBlue = 'deepskyblue', - DimGray = 'dimgray', - DimGrey = 'dimgrey', - DodgerBlue = 'dodgerblue', - FireBrick = 'firebrick', - FloralWhite = 'floralwhite', - ForestGreen = 'forestgreen', - Fuchsia = 'fuchsia', - Gainsboro = 'gainsboro', - GhostWhite = 'ghostwhite', - Gold = 'gold', - GoldenRod = 'goldenrod', - Gray = 'gray', - Green = 'green', - GreenYellow = 'greenyellow', - HoneyDew = 'honeydew', - HotPink = 'hotpink', - IndianRed = 'indianred', - Indigo = 'indigo', - Ivory = 'ivory', - Khaki = 'khaki', - Lavender = 'lavender', - LavenderBlush = 'lavenderblush', - LawnGreen = 'lawngreen', - LemonChiffon = 'lemonchiffon', - LightBlue = 'lightblue', - LightCoral = 'lightcoral', - LightCyan = 'lightcyan', - LightGoldenRodYellow = 'lightgoldenrodyellow', - LightGray = 'lightgray', - LightGreen = 'lightgreen', - LightGrey = 'lightgrey', - LightPink = 'lightpink', - LightSalmon = 'lightsalmon', - LightSeaGreen = 'lightseagreen', - LightSkyBlue = 'lightskyblue', - LightSlateGray = 'lightslategray', - LightSteelBlue = 'lightsteelblue', - LightYellow = 'lightyellow', - Lime = 'lime', - LimeGreen = 'limegreen', - Linen = 'linen', - Magenta = 'magenta', - Maroon = 'maroon', - MediumAquaMarine = 'mediumaquamarine', - MediumBlue = 'mediumblue', - MediumOrchid = 'mediumorchid', - MediumPurple = 'mediumpurple', - MediumSeaGreen = 'mediumseagreen', - MediumSlateBlue = 'mediumslateblue', - MediumSpringGreen = 'mediumspringgreen', - MediumTurquoise = 'mediumturquoise', - MediumVioletRed = 'mediumvioletred', - MidnightBlue = 'midnightblue', - MintCream = 'mintcream', - MistyRose = 'mistyrose', - Moccasin = 'moccasin', - NavajoWhite = 'navajowhite', - Navy = 'navy', - OldLace = 'oldlace', - Olive = 'olive', - OliveDrab = 'olivedrab', - Orange = 'orange', - OrangeRed = 'orangered', - Orchid = 'orchid', - PaleGoldenRod = 'palegoldenrod', - PaleGreen = 'palegreen', - PaleTurquoise = 'paleturquoise', - PaleVioletRed = 'palevioletred', - PapayaWhip = 'papayawhip', - PeachPuff = 'peachpuff', - Peru = 'peru', - Pink = 'pink', - Plum = 'plum', - PowderBlue = 'powderblue', - Purple = 'purple', - RebeccaPurple = 'rebeccapurple', - Red = 'red', - RosyBrown = 'rosybrown', - RoyalBlue = 'royalblue', - SaddleBrown = 'saddlebrown', - Salmon = 'salmon', - SandyBrown = 'sandybrown', - SeaGreen = 'seagreen', - SeaShell = 'seashell', - Sienna = 'sienna', - Silver = 'silver', - SkyBlue = 'skyblue', - SlateBlue = 'slateblue', - SlateGray = 'slategray', - Snow = 'snow', - SpringGreen = 'springgreen', - SteelBlue = 'steelblue', - Tan = 'tan', - Teal = 'teal', - Thistle = 'thistle', - Tomato = 'tomato', - Turquoise = 'turquoise', - Violet = 'violet', - Wheat = 'wheat', - White = 'white', - WhiteSmoke = 'whitesmoke', - Yellow = 'yellow', - YellowGreen = 'yellowgreen', - } - \ No newline at end of file + AliceBlue = "aliceblue", + AntiqueWhite = "antiquewhite", + Aqua = "aqua", + Aquamarine = "aquamarine", + Azure = "azure", + Beige = "beige", + Bisque = "bisque", + Black = "black", + BlanchedAlmond = "blanchedalmond", + Blue = "blue", + BlueViolet = "blueviolet", + Brown = "brown", + BurlyWood = "burlywood", + CadetBlue = "cadetblue", + Chartreuse = "chartreuse", + Chocolate = "chocolate", + Coral = "coral", + CornflowerBlue = "cornflowerblue", + Cornsilk = "cornsilk", + Crimson = "crimson", + Cyan = "cyan", + DarkBlue = "darkblue", + DarkCyan = "darkcyan", + DarkGoldenRod = "darkgoldenrod", + DarkGray = "darkgray", + DarkGreen = "darkgreen", + DarkGrey = "darkgrey", + DarkKhaki = "darkkhaki", + DarkMagenta = "darkmagenta", + DarkOliveGreen = "darkolivegreen", + DarkOrange = "darkorange", + DarkOrchid = "darkorchid", + DarkRed = "darkred", + DarkSalmon = "darksalmon", + DarkSeaGreen = "darkseagreen", + DarkSlateBlue = "darkslateblue", + DarkSlateGray = "darkslategray", + DarkTurquoise = "darkturquoise", + DarkViolet = "darkviolet", + DeepPink = "deeppink", + DeepSkyBlue = "deepskyblue", + DimGray = "dimgray", + DimGrey = "dimgrey", + DodgerBlue = "dodgerblue", + FireBrick = "firebrick", + FloralWhite = "floralwhite", + ForestGreen = "forestgreen", + Fuchsia = "fuchsia", + Gainsboro = "gainsboro", + GhostWhite = "ghostwhite", + Gold = "gold", + GoldenRod = "goldenrod", + Gray = "gray", + Green = "green", + GreenYellow = "greenyellow", + HoneyDew = "honeydew", + HotPink = "hotpink", + IndianRed = "indianred", + Indigo = "indigo", + Ivory = "ivory", + Khaki = "khaki", + Lavender = "lavender", + LavenderBlush = "lavenderblush", + LawnGreen = "lawngreen", + LemonChiffon = "lemonchiffon", + LightBlue = "lightblue", + LightCoral = "lightcoral", + LightCyan = "lightcyan", + LightGoldenRodYellow = "lightgoldenrodyellow", + LightGray = "lightgray", + LightGreen = "lightgreen", + LightGrey = "lightgrey", + LightPink = "lightpink", + LightSalmon = "lightsalmon", + LightSeaGreen = "lightseagreen", + LightSkyBlue = "lightskyblue", + LightSlateGray = "lightslategray", + LightSteelBlue = "lightsteelblue", + LightYellow = "lightyellow", + Lime = "lime", + LimeGreen = "limegreen", + Linen = "linen", + Magenta = "magenta", + Maroon = "maroon", + MediumAquaMarine = "mediumaquamarine", + MediumBlue = "mediumblue", + MediumOrchid = "mediumorchid", + MediumPurple = "mediumpurple", + MediumSeaGreen = "mediumseagreen", + MediumSlateBlue = "mediumslateblue", + MediumSpringGreen = "mediumspringgreen", + MediumTurquoise = "mediumturquoise", + MediumVioletRed = "mediumvioletred", + MidnightBlue = "midnightblue", + MintCream = "mintcream", + MistyRose = "mistyrose", + Moccasin = "moccasin", + NavajoWhite = "navajowhite", + Navy = "navy", + OldLace = "oldlace", + Olive = "olive", + OliveDrab = "olivedrab", + Orange = "orange", + OrangeRed = "orangered", + Orchid = "orchid", + PaleGoldenRod = "palegoldenrod", + PaleGreen = "palegreen", + PaleTurquoise = "paleturquoise", + PaleVioletRed = "palevioletred", + PapayaWhip = "papayawhip", + PeachPuff = "peachpuff", + Peru = "peru", + Pink = "pink", + Plum = "plum", + PowderBlue = "powderblue", + Purple = "purple", + RebeccaPurple = "rebeccapurple", + Red = "red", + RosyBrown = "rosybrown", + RoyalBlue = "royalblue", + SaddleBrown = "saddlebrown", + Salmon = "salmon", + SandyBrown = "sandybrown", + SeaGreen = "seagreen", + SeaShell = "seashell", + Sienna = "sienna", + Silver = "silver", + SkyBlue = "skyblue", + SlateBlue = "slateblue", + SlateGray = "slategray", + Snow = "snow", + SpringGreen = "springgreen", + SteelBlue = "steelblue", + Tan = "tan", + Teal = "teal", + Thistle = "thistle", + Tomato = "tomato", + Turquoise = "turquoise", + Violet = "violet", + Wheat = "wheat", + White = "white", + WhiteSmoke = "whitesmoke", + Yellow = "yellow", + YellowGreen = "yellowgreen", +} diff --git a/src/types/hex-decimal-object.interface.ts b/src/types/hex-decimal-object.interface.ts index cb3ab61..c255df4 100644 --- a/src/types/hex-decimal-object.interface.ts +++ b/src/types/hex-decimal-object.interface.ts @@ -1,8 +1,8 @@ import { Rgb } from "./rgb.type"; -export interface HexDecimalObject extends Rgb{ - r: number; - g: number; - b: number; - a?: number; - } \ No newline at end of file +export interface HexDecimalObject extends Rgb { + r: number; + g: number; + b: number; + a?: number; +} diff --git a/src/types/number-range-hundred.type.ts b/src/types/number-range-hundred.type.ts new file mode 100644 index 0000000..230f572 --- /dev/null +++ b/src/types/number-range-hundred.type.ts @@ -0,0 +1,11 @@ +export type NumberRange1To100 = + | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 + | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 + | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 + | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 + | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 + | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 + | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 + | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 + | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 + | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100; diff --git a/src/types/rgb.type.ts b/src/types/rgb.type.ts index 86cd56d..d88bb05 100644 --- a/src/types/rgb.type.ts +++ b/src/types/rgb.type.ts @@ -1,6 +1,9 @@ export interface Rgb { - r: number; - g: number; - b: number; - }; - \ No newline at end of file + r: number; + g: number; + b: number; +} + +export interface HexDecimalObject extends Rgb { + a?: number; +} diff --git a/src/types/theme.type.ts b/src/types/theme.type.ts index cb93805..be52c7a 100644 --- a/src/types/theme.type.ts +++ b/src/types/theme.type.ts @@ -1 +1 @@ -export type ThemeType = 'dark' | 'light' \ No newline at end of file +export type ThemeType = "dark" | "light"; diff --git a/typings/__tests__/colorTestCases.test.d.ts b/typings/__tests__/colorTestCases.test.d.ts new file mode 100644 index 0000000..2685efc --- /dev/null +++ b/typings/__tests__/colorTestCases.test.d.ts @@ -0,0 +1,12 @@ +import { HexDecimalObject } from "../types/rgb.type"; +export type ColorInputType = "hex" | "rgb" | "rgba" | "invalid"; +export type ColorOutputType = "HexDecimalObject" | "Error" | "boolean"; +export interface ColorTestCase { + name: string; + input: string; + expected?: HexDecimalObject | boolean; + expectedError?: string; + typeInput: ColorInputType; + typeOutput: ColorOutputType; +} +export declare const colorTestCases: ColorTestCase[]; diff --git a/typings/__tests__/colorTestCasesFunctions.test.d.ts b/typings/__tests__/colorTestCasesFunctions.test.d.ts new file mode 100644 index 0000000..373790b --- /dev/null +++ b/typings/__tests__/colorTestCasesFunctions.test.d.ts @@ -0,0 +1,4 @@ +import { ColorInputType, ColorOutputType, ColorTestCase } from "./colorTestCases.test"; +export declare const getTestCasesByType: (inputTypes: ColorInputType[], outputTypes: ColorOutputType[]) => ColorTestCase[]; +export declare const getTestCasesByInputType: (inputTypes: ColorInputType[]) => ColorTestCase[]; +export declare const getTestCasesByOutputType: (outputTypes: ColorOutputType[]) => ColorTestCase[]; diff --git a/typings/__tests__/isRgbaOutOfRange.test.d.ts b/typings/__tests__/isRgbaOutOfRange.test.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/typings/__tests__/isRgbaOutOfRange.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/typings/__tests__/isValidAlphaHexCode.test.d.ts b/typings/__tests__/isValidAlphaHexCode.test.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/typings/__tests__/isValidAlphaHexCode.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/typings/__tests__/isValidRgb.test.d.ts b/typings/__tests__/isValidRgb.test.d.ts index 3d2471f..cb0ff5c 100644 --- a/typings/__tests__/isValidRgb.test.d.ts +++ b/typings/__tests__/isValidRgb.test.d.ts @@ -1 +1 @@ -export declare const isValidRgb: (rgb: string) => boolean; +export {}; diff --git a/typings/__tests__/isValidRgba.test.d.ts b/typings/__tests__/isValidRgba.test.d.ts index e69de29..cb0ff5c 100644 --- a/typings/__tests__/isValidRgba.test.d.ts +++ b/typings/__tests__/isValidRgba.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/typings/color.d.ts b/typings/color.d.ts index 119c391..dcb40e9 100644 --- a/typings/color.d.ts +++ b/typings/color.d.ts @@ -1,4 +1,4 @@ -import { HexDecimalObject } from './types/hex-decimal-object.interface'; +import { HexDecimalObject } from "./types/hex-decimal-object.interface"; export declare class Color { private color; constructor(color: string | HexDecimalObject); diff --git a/typings/cssColors.d.ts b/typings/cssColors.d.ts index 669fd7c..887bb21 100644 --- a/typings/cssColors.d.ts +++ b/typings/cssColors.d.ts @@ -1,3 +1,3 @@ -import { ColorItem } from './types/color-item.interface'; -import { ColorNames } from './types/color-names'; +import { ColorItem } from "./types/color-item.interface"; +import { ColorNames } from "./types/color-names"; export declare const cssColors: Record; diff --git a/typings/formatDecimalObjectToRgba.d.ts b/typings/formatDecimalObjectToRgba.d.ts index bccb08f..676ff16 100644 --- a/typings/formatDecimalObjectToRgba.d.ts +++ b/typings/formatDecimalObjectToRgba.d.ts @@ -1,4 +1,4 @@ -import { HexDecimalObject } from './types/hex-decimal-object.interface'; +import { HexDecimalObject } from "./types/hex-decimal-object.interface"; /** * Formats a HexDecimalObject to an RGBA string. * diff --git a/typings/generateColorFrom[TODO].d.ts b/typings/generateColorFrom[TODO].d.ts deleted file mode 100644 index e69de29..0000000 diff --git a/typings/hexToDecimals.d.ts b/typings/hexToDecimals.d.ts index 8f86a2b..0d73dbe 100644 --- a/typings/hexToDecimals.d.ts +++ b/typings/hexToDecimals.d.ts @@ -1,5 +1,5 @@ -import { HexObject } from './parseHex'; -import { HexDecimalObject } from './types/hex-decimal-object.interface'; +import { HexObject } from "./parseHex"; +import { HexDecimalObject } from "./types/hex-decimal-object.interface"; /** * Converts a hexadecimal string to a decimal number. * @param hex - The hexadecimal string to convert. @@ -18,11 +18,12 @@ export interface RgbWithAHexObject extends Partial { b: string; a?: string; } +type ParamsForHexesToDecimals = string | RgbWithAHexObject; /** - * Converts a HexObject to a HexDecimalObject by converting each hex value to its decimal equivalent. - * If the alpha (a) value is not provided, it returns an object without the alpha value. + * Converts a HexObject or hex string to a HexDecimalObject by converting each hex value to its decimal equivalent. + * If the alpha (a) value is not provided, it defaults to 1. * - * @param hexObj - The object containing hex values for r, g, b, and optionally a. + * @param params - The object containing hex values for r, g, b, and optionally a, or a hex string. * @returns An object containing decimal values for r, g, b, and optionally a. * * @example @@ -30,8 +31,12 @@ export interface RgbWithAHexObject extends Partial { * const hexObj = { r: 'ff', g: '00', b: '00', a: '80' }; * console.log(hexesToDecimals(hexObj)); // { r: 255, g: 0, b: 0, a: 0.5 } * - * const hexObjWithoutA = { r: 'ff', g: '00', b: '00' }; - * console.log(hexesToDecimals(hexObjWithoutA)); // { r: 255, g: 0, b: 0 } + * const hexString = '#ff000080'; + * console.log(hexesToDecimals(hexString)); // { r: 255, g: 0, b: 0, a: 0.5 } + * + * const shortHexString = '#f008'; + * console.log(hexesToDecimals(shortHexString)); // { r: 255, g: 0, b: 0, a: 0.53 } * ``` */ -export declare const hexesToDecimals: ({ r, g, b, a }: RgbWithAHexObject) => HexDecimalObject; +export declare const hexesToDecimals: (params: ParamsForHexesToDecimals) => HexDecimalObject; +export {}; diff --git a/typings/hexToRgba.d.ts b/typings/hexToRgba.d.ts index 0c46e91..e5aa1c6 100644 --- a/typings/hexToRgba.d.ts +++ b/typings/hexToRgba.d.ts @@ -1,13 +1,7 @@ /** * Converts a CSS hex color value to an RGB or RGBA color value. * @param hex - The hex value to convert. ('123456', '#123456', '123', '#123') - * @param alpha - An optional alpha value to apply. ('0.5', '0.25') + * @param alpha - An optional alpha value to apply. ('0.5', '0.25', 0.5, 0.25) * @returns An RGB or RGBA color value. ('rgb(11, 22, 33)', 'rgba(11, 22, 33, 0.5)') - * - * @example - * ```typescript - * console.log(hexToRgba('#ff0000')); // 'rgba(255, 0, 0, 1)' - * console.log(hexToRgba('#ff0000', 0.5)); // 'rgba(255, 0, 0, 0.5)' - * ``` */ export declare function hexToRgba(hex: string, alpha?: string | number): string; diff --git a/typings/index.d.ts b/typings/index.d.ts index 8862a66..a6f1516 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -30,10 +30,6 @@ export * from "./darkenColor"; * TSDoc for formatDecimalObjectToRgba */ export * from "./formatDecimalObjectToRgba"; -/** - * TSDoc for generateColorFrom[TODO] - */ -export * from "./generateColorFrom[TODO]"; /** * TSDoc for hexToDecimals */ @@ -54,6 +50,14 @@ export * from "./hslToRgb"; * TSDoc for isHexColor */ export * from "./isHexColor"; +/** + * TSDoc for isRgbaOutOfRange + */ +export * from "./isRgbaOutOfRange"; +/** + * TSDoc for isValidAlphaHexCode + */ +export * from "./isValidAlphaHexCode"; /** * TSDoc for isValidHex */ diff --git a/typings/isRgbaOutOfRange.d.ts b/typings/isRgbaOutOfRange.d.ts new file mode 100644 index 0000000..e8c76cb --- /dev/null +++ b/typings/isRgbaOutOfRange.d.ts @@ -0,0 +1,7 @@ +import { HexDecimalObject } from "./types/hex-decimal-object.interface"; +/** + * Checks if the RGBA value is out of range. + * @param rgba - The RGBA object to validate. + * @returns {boolean} - True if the value is out of range, false otherwise. + */ +export declare function isRgbaOutOfRange(rgba: HexDecimalObject): boolean; diff --git a/typings/isValidAlphaHexCode.d.ts b/typings/isValidAlphaHexCode.d.ts new file mode 100644 index 0000000..6cf5ba7 --- /dev/null +++ b/typings/isValidAlphaHexCode.d.ts @@ -0,0 +1,6 @@ +/** + * Checks if a hex code is a valid alpha hex code. + * @param hexCode - The hex code to validate. + * @returns {boolean} - True if the hex code is valid, false otherwise. + */ +export declare function isValidAlphaHexCode(hexCode: string): boolean; diff --git a/typings/isValidRgba.d.ts b/typings/isValidRgba.d.ts index f9b8358..16ab59d 100644 --- a/typings/isValidRgba.d.ts +++ b/typings/isValidRgba.d.ts @@ -1 +1,6 @@ +/** + * Checks if the provided string is a valid RGBA color format. + * @param rgba The string to validate as RGBA (e.g., "rgba(255,0,128,0.5)" or "rgba(255%, 0%, 50%, 0.5)"). + * @returns True if the string is a valid RGBA format, false otherwise. + */ export declare const isValidRgba: (rgba: string) => boolean; diff --git a/typings/parseColor.d.ts b/typings/parseColor.d.ts index b8174b0..5c0d270 100644 --- a/typings/parseColor.d.ts +++ b/typings/parseColor.d.ts @@ -1,4 +1,5 @@ import { HexDecimalObject } from "./types/hex-decimal-object.interface"; +export type ColorFormatType = "hex" | "rgba" | "rgb" | "alphaHex" | undefined; /** * Parses a color value into a HexDecimalObject representing RGB(A) values. * @param colorValue The color value to parse (e.g., hex, rgb, rgba string). diff --git a/typings/parseRgbString.d.ts b/typings/parseRgbString.d.ts index a08bbcf..840fea4 100644 --- a/typings/parseRgbString.d.ts +++ b/typings/parseRgbString.d.ts @@ -2,7 +2,7 @@ import { HexDecimalObject } from "./types/hex-decimal-object.interface"; /** * Parses an RGB or RGBA string and returns an object with the red, green, blue, and optionally alpha components. * - * @param {string} color - The RGB or RGBA string to parse (e.g., "rgb(255, 255, 255)" or "rgba(255, 255, 255, 0.5)"). + * @param {string} color - The RGB or RGBA string to parse (e.g., "rgb(255, 255, 255)", "rgba(255, 255, 255, 0.5)", "rgb(100%, 0%, 0%)", or "rgba(100%, 0%, 0%, 0.5)"). * @returns {HexDecimalObject | null} The RGB components or null if the input is invalid. */ export declare const parseRgbString: (color: string) => HexDecimalObject | null; diff --git a/typings/types/color-input.type.d.ts b/typings/types/color-input.type.d.ts new file mode 100644 index 0000000..28df705 --- /dev/null +++ b/typings/types/color-input.type.d.ts @@ -0,0 +1 @@ +export type ColorInputType = "hex" | "rgb" | "rgba" | "invalid"; diff --git a/typings/types/color-item.interface.d.ts b/typings/types/color-item.interface.d.ts index 0a46725..071e61d 100644 --- a/typings/types/color-item.interface.d.ts +++ b/typings/types/color-item.interface.d.ts @@ -1,5 +1,14 @@ import { Rgb } from "./rgb.type"; +export interface Rgba { + r: number; + g: number; + b: number; + a: number; +} export interface ColorItem { rgb: Rgb; - hex: string; + cmyk?: string; + rgba?: Rgba; + hex?: string; + hexAlpha?: string; } diff --git a/typings/types/rgb.type.d.ts b/typings/types/rgb.type.d.ts index 3496da9..172927f 100644 --- a/typings/types/rgb.type.d.ts +++ b/typings/types/rgb.type.d.ts @@ -3,3 +3,6 @@ export interface Rgb { g: number; b: number; } +export interface HexDecimalObject extends Rgb { + a?: number; +} diff --git a/typings/types/theme.type.d.ts b/typings/types/theme.type.d.ts index 3e7f995..be52c7a 100644 --- a/typings/types/theme.type.d.ts +++ b/typings/types/theme.type.d.ts @@ -1 +1 @@ -export type ThemeType = 'dark' | 'light'; +export type ThemeType = "dark" | "light";