├── icon.ico ├── dist ├── extension.js.LICENSE.txt ├── extension.js └── extension.js.map ├── src ├── test │ ├── suite │ │ ├── extension.test.ts │ │ └── index.ts │ └── runTest.ts ├── extension.ts ├── color.d.ts └── color.js ├── .eslintrc.json ├── tsconfig.json ├── webpack.config.js ├── package.json ├── README.md └── vsc-extension-quickstart.md /icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krispy-snacc/vscode-color-picker/HEAD/icon.ico -------------------------------------------------------------------------------- /dist/extension.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /** 2 | * parse-css-color 3 | * @version v0.1.2 4 | * @link http://github.com/noeldelgado/parse-css-color/ 5 | * @license MIT 6 | */ 7 | -------------------------------------------------------------------------------- /src/test/suite/extension.test.ts: -------------------------------------------------------------------------------- 1 | import * as assert from 'assert'; 2 | 3 | // You can import and use all API from the 'vscode' module 4 | // as well as import your extension to test it 5 | import * as vscode from 'vscode'; 6 | // import * as myExtension from '../../extension'; 7 | 8 | suite('Extension Test Suite', () => { 9 | vscode.window.showInformationMessage('Start all tests.'); 10 | 11 | test('Sample test', () => { 12 | assert.strictEqual(-1, [1, 2, 3].indexOf(5)); 13 | assert.strictEqual(-1, [1, 2, 3].indexOf(0)); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "parserOptions": { 5 | "ecmaVersion": 6, 6 | "sourceType": "module" 7 | }, 8 | "plugins": [ 9 | "@typescript-eslint" 10 | ], 11 | "rules": { 12 | "@typescript-eslint/naming-convention": "warn", 13 | "@typescript-eslint/semi": "warn", 14 | "curly": "warn", 15 | "eqeqeq": "warn", 16 | "no-throw-literal": "warn", 17 | "semi": "off" 18 | }, 19 | "ignorePatterns": [ 20 | "out", 21 | "dist", 22 | "**/*.d.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "ES2020", 5 | "lib": [ 6 | "ES2020" 7 | ], 8 | "sourceMap": true, 9 | "rootDir": "src", 10 | "strict": false /* enable all strict type-checking options */ 11 | /* Additional Checks */ 12 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 13 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 14 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 15 | }, 16 | "exclude": [ 17 | "node_modules", 18 | ".vscode-test" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | 3 | import { runTests } from '@vscode/test-electron'; 4 | 5 | async function main() { 6 | try { 7 | // The folder containing the Extension Manifest package.json 8 | // Passed to `--extensionDevelopmentPath` 9 | const extensionDevelopmentPath = path.resolve(__dirname, '../../'); 10 | 11 | // The path to test runner 12 | // Passed to --extensionTestsPath 13 | const extensionTestsPath = path.resolve(__dirname, './suite/index'); 14 | 15 | // Download VS Code, unzip it and run the integration test 16 | await runTests({ extensionDevelopmentPath, extensionTestsPath }); 17 | } catch (err) { 18 | console.error('Failed to run tests'); 19 | process.exit(1); 20 | } 21 | } 22 | 23 | main(); 24 | -------------------------------------------------------------------------------- /src/test/suite/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | import * as Mocha from 'mocha'; 3 | import * as glob from 'glob'; 4 | 5 | export function run(): Promise { 6 | // Create the mocha test 7 | const mocha = new Mocha({ 8 | ui: 'tdd', 9 | color: true 10 | }); 11 | 12 | const testsRoot = path.resolve(__dirname, '..'); 13 | 14 | return new Promise((c, e) => { 15 | glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { 16 | if (err) { 17 | return e(err); 18 | } 19 | 20 | // Add files to the test suite 21 | files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); 22 | 23 | try { 24 | // Run the mocha test 25 | mocha.run(failures => { 26 | if (failures > 0) { 27 | e(new Error(`${failures} tests failed.`)); 28 | } else { 29 | c(); 30 | } 31 | }); 32 | } catch (err) { 33 | console.error(err); 34 | e(err); 35 | } 36 | }); 37 | }); 38 | } 39 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | //@ts-check 2 | 3 | 'use strict'; 4 | 5 | const path = require('path'); 6 | 7 | //@ts-check 8 | /** @typedef {import('webpack').Configuration} WebpackConfig **/ 9 | 10 | /** @type WebpackConfig */ 11 | const extensionConfig = { 12 | target: 'node', // vscode extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ 13 | mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') 14 | 15 | entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ 16 | output: { 17 | // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ 18 | path: path.resolve(__dirname, 'dist'), 19 | filename: 'extension.js', 20 | libraryTarget: 'commonjs2' 21 | }, 22 | externals: { 23 | vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ 24 | // modules added here also need to be added in the .vscodeignore file 25 | }, 26 | resolve: { 27 | // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader 28 | extensions: ['.ts', '.js'] 29 | }, 30 | module: { 31 | rules: [ 32 | { 33 | test: /\.ts$/, 34 | exclude: /node_modules/, 35 | use: [ 36 | { 37 | loader: 'ts-loader' 38 | } 39 | ] 40 | } 41 | ] 42 | }, 43 | devtool: 'nosources-source-map', 44 | infrastructureLogging: { 45 | level: "log", // enables logging required for problem matchers 46 | }, 47 | }; 48 | module.exports = [ extensionConfig ]; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-color-picker", 3 | "displayName": "vscode-color-picker", 4 | "icon":"https://i.imgur.com/Pe85vxw.png", 5 | "publisher": "AntiAntiSepticeye", 6 | "description": "let's you use vscode's css color picker in other documents", 7 | "version": "0.0.3", 8 | "engines": { 9 | "vscode": "^1.62.0" 10 | }, 11 | "categories": [ 12 | "Other" 13 | ], 14 | "activationEvents": [ 15 | "*" 16 | ], 17 | "main": "./dist/extension.js", 18 | "contributes": { 19 | "configuration": { 20 | "title": "vscode-color-picker", 21 | "properties": { 22 | "vscode-color-picker.languages": { 23 | "type": "array", 24 | "default": ["python", "javascript", "typescript"], 25 | "description": "Set languages to be detected by the extension" 26 | } 27 | } 28 | } 29 | }, 30 | "capabilities": { 31 | "colorProvider": "true" 32 | }, 33 | "scripts": { 34 | "vscode:prepublish": "npm run package", 35 | "compile": "webpack", 36 | "watch": "webpack --watch", 37 | "package": "webpack --mode production --devtool hidden-source-map", 38 | "compile-tests": "tsc -p . --outDir out", 39 | "watch-tests": "tsc -p . -w --outDir out", 40 | "pretest": "npm run compile-tests && npm run compile && npm run lint", 41 | "lint": "eslint src --ext ts", 42 | "test": "node ./out/test/runTest.js" 43 | }, 44 | "devDependencies": { 45 | "@types/glob": "^7.1.4", 46 | "@types/mocha": "^9.0.0", 47 | "@types/node": "14.x", 48 | "@types/vscode": "^1.62.0", 49 | "@typescript-eslint/eslint-plugin": "^5.1.0", 50 | "@typescript-eslint/parser": "^5.1.0", 51 | "@vscode/test-electron": "^1.6.2", 52 | "eslint": "^8.1.0", 53 | "glob": "^7.1.7", 54 | "mocha": "^9.1.3", 55 | "ts-loader": "^9.2.5", 56 | "typescript": "^4.4.4", 57 | "webpack": "^5.52.1", 58 | "webpack-cli": "^4.8.0" 59 | }, 60 | "dependencies": { 61 | "parse-css-color": "^0.1.2" 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This extension is now deprecated as the functionality is now already built into vscode 2 | 3 | # vscode-color-picker README 4 | 5 | A simple Color picker for vscode that lets you use vscode's css color picker in other documents 6 | 7 | ![color-picker-preview](https://i.imgur.com/dG1tnN3.png, "color-picker-preview") 8 | 9 | - To make it work for your preferred language, just add a `vscode-color-picker.languages` entry in settings.json, with VSCode's identifier string for the language, in the list. For ex. 10 | ```json 11 | "vscode-color-picker.languages": [ 12 | "python", 13 | "javascript", 14 | "typescript" 15 | ], 16 | ... 17 | ``` 18 | and then make sure to reload the window for the service to be intialized properly. 19 | 20 | ## Frequently Asked Questions 21 | 22 | ### How do i stop it from running in languages i don't want it in? 23 | 24 | Just remove the language entry from `vscode-color-picker.languages` in settings.json. 25 | 26 | ### What are the languages i can add to the extension? 27 | 28 | A list of VSCode's language identefiers is avaialable [here](https://code.visualstudio.com/docs/languages/identifiers). 29 | 30 | ### What types of strings are recognized colors? 31 | 32 | The currently supported formats are Hsl, Rgb, Hsla, Rgba and Hex. 33 | Format for Rgb: `rgb(, , )` 34 | Example of Rgb format: `rgb(0, 255, 255)` 35 | 36 | Format for Rgba: `rgba(, , , )` 37 | Example of Rgba format: `rgb(0, 255, 255, 0.5)` 38 | 39 | Format for Hsl: `hsl(, %, %)` 40 | Example of Hsl format: `hsl(180, 100%, 50%)` 41 | 42 | Format for Hsla: `hsl(, %, %, )` 43 | Example of Hsla format: `hsl(180, 100%, 50%, 0.5)` 44 | 45 | Format for Hex: `#` 46 | Example of Hex format: `#00ffff` 47 | 48 | Format for Hexa: `#` 49 | Example of Hexa format: `#00ffff77` 50 | -------------------------------------------------------------------------------- /vsc-extension-quickstart.md: -------------------------------------------------------------------------------- 1 | # Welcome to your VS Code Extension 2 | 3 | ## What's in the folder 4 | 5 | * This folder contains all of the files necessary for your extension. 6 | * `package.json` - this is the manifest file in which you declare your extension and command. 7 | * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. 8 | * `src/extension.ts` - this is the main file where you will provide the implementation of your command. 9 | * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. 10 | * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. 11 | 12 | ## Setup 13 | 14 | - install the recommended extensions (amodio.tsl-problem-matcher and dbaeumer.vscode-eslint) 15 | 16 | 17 | ## Get up and running straight away 18 | 19 | * Press `F5` to open a new window with your extension loaded. 20 | * Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. 21 | * Set breakpoints in your code inside `src/extension.ts` to debug your extension. 22 | * Find output from your extension in the debug console. 23 | 24 | ## Make changes 25 | 26 | * You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. 27 | * You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. 28 | 29 | 30 | ## Explore the API 31 | 32 | * You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. 33 | 34 | ## Run tests 35 | 36 | * Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. 37 | * Press `F5` to run the tests in a new window with your extension loaded. 38 | * See the output of the test result in the debug console. 39 | * Make changes to `src/test/suite/extension.test.ts` or create new test files inside the `test/suite` folder. 40 | * The provided test runner will only consider files matching the name pattern `**.test.ts`. 41 | * You can create folders inside the `test` folder to structure your tests any way you want. 42 | 43 | ## Go further 44 | 45 | * Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). 46 | * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace. 47 | * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). 48 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import Color from './color'; 3 | import parse from 'parse-css-color'; 4 | 5 | interface Match { 6 | color: vscode.Color; 7 | type: string; 8 | length: number; 9 | range: vscode.Range; 10 | } 11 | 12 | function parseColorString(color: string) { 13 | 14 | try { 15 | const p = parse(color); 16 | if(!p) { throw new Error('invalid color string'); } 17 | if(p.type === "rgb") { 18 | const r = p.values[0] as number; 19 | const g = p.values[1] as number; 20 | const b = p.values[2] as number; 21 | const a = p.alpha as number; 22 | 23 | return new vscode.Color(r/255, g/255, b/255, a); 24 | } else { 25 | const h = p.values[0] as number; 26 | const s = p.values[1] as number; 27 | const l = p.values[2] as number; 28 | const a = p.alpha as number; 29 | const { r, g, b } = Color.fromHsl(h, s, l).toRgb(); 30 | 31 | return new vscode.Color(r/255, g/255, b/255, a); 32 | } 33 | 34 | } catch(e) { 35 | console.log(e); 36 | return null; 37 | } 38 | 39 | } 40 | 41 | 42 | function getPos(text: string, index: number): vscode.Position { 43 | 44 | const nMatches = Array.from(text.slice(0, index).matchAll(/\n/g)); 45 | 46 | const lineNumber = nMatches.length; 47 | 48 | const characterIndex = index - nMatches[lineNumber-1].index; 49 | 50 | 51 | return new vscode.Position( 52 | lineNumber, 53 | characterIndex - 1 54 | ); 55 | } 56 | 57 | 58 | class Matcher { 59 | 60 | 61 | static getMatches(text: string): Match[] { 62 | const matches = text.matchAll(/(#(?:[\da-f]{3,4}){2}|rgb\((?:\d{1,3},\s*){2}\d{1,3}\)|rgba\((?:\d{1,3},\s*){3}\d*\.?\d+\)|hsl\(\d{1,3}(?:,\s*\d{1,3}%){2}\)|hsla\(\d{1,3}(?:,\s*\d{1,3}%){2},\s*\d*\.?\d+\))/gi); 63 | return Array.from(matches).map(match => { 64 | const t = match[0]; 65 | const length = t.length; 66 | let type: string; 67 | if(t.startsWith('hsl(')) { type = "hsl"; } 68 | else if(t.startsWith('hsla(')) { type = "hsla"; } 69 | else if(t.startsWith('rgb(')) { type = "rgb"; } 70 | else if(t.startsWith('rgba(')) { type = "rgba"; } 71 | else if(t.startsWith('#')) { type = "hex"; } 72 | 73 | const range = new vscode.Range( 74 | getPos(text, match.index), 75 | getPos(text, match.index + t.length) 76 | ); 77 | 78 | const col = parseColorString(t); 79 | 80 | 81 | if(col) { 82 | return { 83 | color: col, 84 | type, 85 | length, 86 | range 87 | } as Match; 88 | } 89 | }); 90 | 91 | 92 | 93 | } 94 | } 95 | 96 | 97 | 98 | class Picker { 99 | 100 | constructor() { 101 | let subscriptions: vscode.Disposable[] = []; 102 | vscode.workspace.onDidChangeTextDocument(this._onDidChangeTextDocument, this, subscriptions); 103 | vscode.workspace.onDidChangeConfiguration(this._onDidChangeConfiguration, this, subscriptions); 104 | this.register(); 105 | } 106 | 107 | 108 | private get languages() { 109 | return vscode.workspace.getConfiguration('vscode-color-picker').get('languages') as Array; 110 | } 111 | 112 | private _onDidChangeTextDocument(e: vscode.TextDocumentChangeEvent) { 113 | const editor = vscode.window.activeTextEditor; 114 | const document = e.document; 115 | const text = document.getText(); 116 | } 117 | 118 | private _onDidChangeConfiguration() { 119 | 120 | } 121 | 122 | private register() { 123 | this.languages.forEach(language => { 124 | vscode.languages.registerColorProvider(language, { 125 | 126 | provideDocumentColors(document: vscode.TextDocument, token: vscode.CancellationToken) { 127 | 128 | const matches = Matcher.getMatches(document.getText()); 129 | 130 | return matches.map((match, i,) => new vscode.ColorInformation( 131 | match.range, 132 | match.color 133 | )); 134 | 135 | }, 136 | provideColorPresentations(color, context, token) { 137 | let c = Color.fromRgb(color.red * 255, color.green * 255, color.blue * 255); 138 | c.alpha = color.alpha; 139 | let hex = c.toString('hex'); 140 | let hsl = c.toString('hsl'); 141 | let colString = context.document.getText(context.range); 142 | let t = colString; 143 | 144 | 145 | const presentationHex = new vscode.ColorPresentation(c.toString('hex')); 146 | const presentationHexa = new vscode.ColorPresentation(c.toString('hexa')); 147 | const presentationHsl = new vscode.ColorPresentation(c.toString('hsl')); 148 | const presentationHsla = new vscode.ColorPresentation(c.toString('hsla')); 149 | const presentationRgb = new vscode.ColorPresentation(c.toString('rgb')); 150 | const presentationRgba = new vscode.ColorPresentation(c.toString('rgba')); 151 | 152 | let hasAlpha = false; 153 | if(t.startsWith('#') && (t.length === 9)) { 154 | hasAlpha = true; 155 | } 156 | if(t.startsWith('hsla')) { 157 | hasAlpha = true; 158 | } 159 | if(t.startsWith('rgba')) { 160 | hasAlpha = true; 161 | } 162 | if(color.alpha !== 1) { 163 | hasAlpha = true; 164 | } 165 | 166 | let withAlpha = [ 167 | presentationHexa, 168 | presentationHsla, 169 | presentationRgba 170 | ]; 171 | 172 | let withoutAlpha = [ 173 | presentationHex, 174 | presentationHsl, 175 | presentationRgb 176 | ]; 177 | 178 | 179 | return hasAlpha ? withAlpha : withoutAlpha; 180 | } 181 | }); 182 | }); 183 | } 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | dispose() {} 199 | } 200 | 201 | 202 | 203 | export function activate(context: vscode.ExtensionContext) { 204 | const picker = new Picker(); 205 | context.subscriptions.push(picker); 206 | } 207 | 208 | // this method is called when your extension is deactivated 209 | export function deactivate() {} 210 | -------------------------------------------------------------------------------- /src/color.d.ts: -------------------------------------------------------------------------------- 1 | 2 | interface SchemeOptions { 3 | 4 | } 5 | interface monochromeOptions extends SchemeOptions { 6 | /** results - Number of results to return. 7 | * Min - 3 8 | * Default - 3 9 | */ 10 | results: Number; 11 | } 12 | 13 | interface splitComplementaryOptions extends SchemeOptions { 14 | /** angle - angle to shift hue by for calculating the return colors. 15 | * Range - [ 0 - 360 ] 16 | */ 17 | angle: Number; 18 | } 19 | 20 | interface doubleComplementaryOptions extends SchemeOptions { 21 | /** angle - angle to shift hue by for calculating the return colors. 22 | * Range - [ 0 - 360 ] 23 | */ 24 | angle: Number; 25 | } 26 | 27 | interface tetradicOptions extends SchemeOptions { 28 | /** angle - angle to shift hue by for calculating the return colors. 29 | * Range - [ 0 - 360 ] 30 | */ 31 | angle: Number; 32 | } 33 | 34 | interface analogousOptions extends SchemeOptions { 35 | /** angle - angle to shift hue by for calculating the return colors. 36 | * Range - [ 0 - 360 ] 37 | */ 38 | angle: Number; 39 | } 40 | 41 | interface HSL { 42 | /** hue */ 43 | h: Number; 44 | /** saturation */ 45 | s: Number; 46 | /** luminance */ 47 | l: Number; 48 | } 49 | 50 | interface HSV { 51 | /** hue */ 52 | h: Number; 53 | /** saturation */ 54 | s: Number; 55 | /** value */ 56 | v: Number; 57 | } 58 | 59 | interface RGB { 60 | /** red */ 61 | r: number; 62 | /** green */ 63 | g: number; 64 | /** blue */ 65 | b: number; 66 | } 67 | 68 | interface CMYK { 69 | /** cyan */ 70 | c: Number; 71 | /** magenta */ 72 | m: Number; 73 | /** yellow */ 74 | y: Number; 75 | /** black */ 76 | k: Number; 77 | } 78 | 79 | export class Color { 80 | 81 | constructor(r: Number, g:Number, b:Number); 82 | 83 | public alpha: number; 84 | //#region color schemes 85 | 86 | /** returns a color scheme Number[] array of the given color (alias for Color.createScheme) */ 87 | static getScheme(color: Color, name: string, options?: SchemeOptions) : Color[]; 88 | 89 | /** returns an array of colors of the color pallette of the color */ 90 | getScheme(name: string, options?: Object) : Color[]; 91 | 92 | /** creates and returns a color scheme Number[] array of the given color */ 93 | static createScheme(color: Color, name: string, options?: SchemeOptions) : Color[]; 94 | 95 | /** returns a monochrome color scheme Number[] array of the given color */ 96 | static monochromatic(color: Color, options: monochromeOptions) : Color[]; 97 | 98 | /** returns a monochrome color scheme Number[] array of the color */ 99 | monochromatic(options: monochromeOptions) : Color[]; 100 | 101 | /** returns complementary color of the given color */ 102 | static complementary(color: Color) : Color; 103 | 104 | /** returns complementary color of the color */ 105 | complementary() : Color; 106 | 107 | /** returns a Color[3] array splitComplementary colors of the given color */ 108 | static splitComplementary(color: Color, options: splitComplementaryOptions) : Color[]; 109 | 110 | /** returns a Color[3] array of splitComplementary colors of the color */ 111 | splitComplementary(options: splitComplementaryOptions) : Color[]; 112 | 113 | /** returns a Color[4] array doubleComplementary colors of the given color */ 114 | static doubleComplementary(color: Color, options: doubleComplementaryOptions) : Color[]; 115 | 116 | /** returns a Color[4] array of doubleComplementary colors of the color */ 117 | doubleComplementary(options: doubleComplementaryOptions) : Color[]; 118 | 119 | /** returns a Color[4] array square colors of the given color */ 120 | static square(color: Color) : Color[]; 121 | 122 | /** returns a Color[4] array of square colors of the color */ 123 | square() : Color[]; 124 | 125 | /** returns a Color[4] array tetradic colors of the given color */ 126 | static tetradic(color: Color, options: tetradicOptions) : Color[]; 127 | 128 | /** returns a Color[4] array of tetradic colors of the color */ 129 | tetradic(options: tetradicOptions) : Color[]; 130 | 131 | /** returns a Color[3] array triadic colors of the given color */ 132 | static triadic(color: Color) : Color[]; 133 | 134 | /** returns a Color[3] array of triadic colors of the color */ 135 | triadic() : Color[]; 136 | 137 | /** returns a Color[3] array analogous colors of the given color */ 138 | static analogous(color: Color, options: analogousOptions) : Color[]; 139 | 140 | /** returns a Color[3] array of analogous colors of the color */ 141 | analogous(options: analogousOptions) : Color[]; 142 | 143 | 144 | //#endregion 145 | 146 | //#region from and to methods 147 | 148 | /** returns a color using a hex code */ 149 | static fromHex(hex: string) : Color; 150 | 151 | /** returns a color using red, green and blue values */ 152 | static fromRgb(r: Number, g: Number, b: Number) : Color; 153 | 154 | /** returns a color using a hue, saturation and luminance values */ 155 | static fromHsl(hue: Number, sat: Number, lum: Number) : Color; 156 | 157 | /** returns a color using a hue, saturation and value values */ 158 | static fromHsv(hue: Number, sat: Number, val: Number) : Color; 159 | 160 | /** returns a color using css string (only available for dom) */ 161 | static fromCssString(colorString: string) : Color; 162 | 163 | /** returns a color's hex value as string */ 164 | static toHex(color: Color) : string; 165 | 166 | /** returns an object with hsl values of the color */ 167 | static toHsl(color: Color) : HSL; 168 | 169 | /** returns an object with hsv values of the color */ 170 | static toHsv(color: Color) : HSV; 171 | 172 | /** returns an object with rgb values of the color */ 173 | static toRgb(color: Color) : RGB; 174 | 175 | /** returns a random color */ 176 | static random() : Color; 177 | 178 | /** returns an object with hsl values of the color */ 179 | toHsl() : HSL; 180 | 181 | /** returns an object with hsv values of the color */ 182 | toHsv() : HSV; 183 | 184 | /** returns an object with rgb values of the color */ 185 | toRgb() : RGB; 186 | 187 | /** returns an object with cmyk value of the color */ 188 | toCmyk() : CMYK; 189 | 190 | /** returns a color's hex value as string */ 191 | toHex() : string; 192 | 193 | 194 | 195 | //#endregion 196 | 197 | //#region mix methods 198 | 199 | /** returns the color desaturated by the given amount */ 200 | static desaturate(color: Color, amount: Number) : Color; 201 | 202 | /** returns the color desaturated by the given amount */ 203 | desaturate(amount: Number) : Color; 204 | 205 | /** returns the color saturateed by the given amount */ 206 | static saturate(color: Color, amount: Number) : Color; 207 | 208 | /** returns the color saturated by the given amount */ 209 | saturate(amount: Number) : Color; 210 | 211 | /** returns the greyscale color */ 212 | static greyscale() : Color; 213 | 214 | /** returns the color desaturated by the given amount */ 215 | greyscale() : Color; 216 | 217 | 218 | /** returns the color lightened by the given amount */ 219 | static lighten(color: Color, amount: Number) : Color; 220 | 221 | /** returns the color lightened by the given amount */ 222 | lighten(amount: Number) : Color; 223 | 224 | /** returns the color darkened by the given amount */ 225 | static darken(color: Color, amount: Number) : Color; 226 | 227 | /** returns the color darkened by the given amount */ 228 | darken(amount: Number) : Color; 229 | 230 | /** returns the color brightened by the given amount */ 231 | static brighten(color: Color, amount: Number) : Color; 232 | 233 | /** returns the color brightened by the given amount */ 234 | brighten(amount: Number) : Color; 235 | 236 | /** returns the color with hue shifted by the given amount */ 237 | static shiftHue(color: Color, amount: Number) : Color; 238 | 239 | /** returns the color with hue shifted by the given amount */ 240 | shiftHue(amount: Number) : Color; 241 | 242 | /** Multiplies two colors and returns a new color */ 243 | static multiply(color1: Color, color2: Color) : Color; 244 | 245 | /** Multiplies two colors and returns a new color */ 246 | multiply(color: Color) : Color; 247 | 248 | 249 | /** Mix two colors and returns a new color */ 250 | static mix(color1: Color, color2: Color, amount: Number) : Color; 251 | 252 | /** Mix two colors and returns a new color */ 253 | mix(color: Color, amount: Number) : Color; 254 | 255 | 256 | /** lerps two colors and returns a new color */ 257 | static lerp(color1: Color, color2: Color, t: Number) : Color; 258 | 259 | /** lerps with the color and returns a new color */ 260 | lerp(color: Color, t: Number) : Color; 261 | 262 | 263 | /** adds two colors and returns a new color */ 264 | static add(color1: Color, color2: Color) : Color; 265 | 266 | /** adds with the color and returns a new color */ 267 | add(color: Color) : Color; 268 | 269 | 270 | //#endregion 271 | 272 | /** returns a string representation of the color */ 273 | toString(type: "hex" | "rgb" | "hsl" | "hsv" | "cmyk" | "hsla" | "rgba" | "hexa"): string; 274 | 275 | /** returns a number representation of the color */ 276 | valueOf(): Number; 277 | 278 | } 279 | 280 | 281 | 282 | export default Color; 283 | 284 | -------------------------------------------------------------------------------- /dist/extension.js: -------------------------------------------------------------------------------- 1 | /*! For license information please see extension.js.LICENSE.txt */ 2 | (()=>{"use strict";var t={874:t=>{t.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},531:t=>{const e=new RegExp("[^#a-f\\d]","gi"),r=new RegExp("^#?[a-f\\d]{3}[a-f\\d]?$|^#?[a-f\\d]{6}([a-f\\d]{2})?$","i");t.exports=(t,a={})=>{if("string"!=typeof t||e.test(t)||!r.test(t))throw new TypeError("Expected a valid hex string");let n=1;8===(t=t.replace(/^#/,"")).length&&(n=Number.parseInt(t.slice(6,8),16)/255,t=t.slice(0,6)),4===t.length&&(n=Number.parseInt(t.slice(3,4).repeat(2),16)/255,t=t.slice(0,3)),3===t.length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]);const o=Number.parseInt(t,16),s=o>>16,i=o>>8&255,u=255&o,f="number"==typeof a.alpha?a.alpha:n;return"array"===a.format?[s,i,u,f]:"css"===a.format?`rgb(${s} ${i} ${u}${1===f?"":` / ${Number((100*f).toFixed(2))}%`})`:{red:s,green:i,blue:u,alpha:f}}},197:(t,e,r)=>{r.r(e),r.d(e,{default:()=>D});var a=r(874),n=r.n(a),o=r(531),s=r.n(o),i=new RegExp(/^#([a-f0-9]{3,4}|[a-f0-9]{4}(?:[a-f0-9]{2}){1,2})\b$/,"i");const u="-?\\d*(?:\\.\\d+)",f=`(${u}?)`,c=`(${u}?%)`,l=`(${u}?%?)`,g=`^\n hsla?\\(\n \\s*(-?\\d*(?:\\.\\d+)?(?:deg|rad|turn)?)\\s*,\n \\s*${c}\\s*,\n \\s*${c}\\s*\n (?:,\\s*${l}\\s*)?\n \\)\n $\n`.replace(/\n|\s/g,"");var m=new RegExp(g);const h=`^\n hsla?\\(\n \\s*(-?\\d*(?:\\.\\d+)?(?:deg|rad|turn)?)\\s*\n \\s+${c}\n \\s+${c}\n \\s*(?:\\s*\\/\\s*${l}\\s*)?\n \\)\n $\n`.replace(/\n|\s/g,"");var d=new RegExp(h);const H=`^\n rgba?\\(\n \\s*${f}\\s*,\n \\s*${f}\\s*,\n \\s*${f}\\s*\n (?:,\\s*${l}\\s*)?\n \\)\n $\n`.replace(/\n|\s/g,"");var x=new RegExp(H);const E=`^\n rgba?\\(\n \\s*${c}\\s*,\n \\s*${c}\\s*,\n \\s*${c}\\s*\n (?:,\\s*${l}\\s*)?\n \\)\n $\n`.replace(/\n|\s/g,"");var b=new RegExp(E);const p=`^\n rgba?\\(\n \\s*${f}\n \\s+${f}\n \\s+${f}\n \\s*(?:\\s*\\/\\s*${l}\\s*)?\n \\)\n$\n`.replace(/\n|\s/g,"");var R=new RegExp(p);const M=`^\n rgba?\\(\n \\s*${c}\n \\s+${c}\n \\s+${c}\n \\s*(?:\\s*\\/\\s*${l}\\s*)?\n \\)\n$\n`.replace(/\n|\s/g,"");var L=new RegExp(M),A=new RegExp(/^transparent$/,"i");const y=(t,e,r)=>Math.min(Math.max(e,t),r),I=t=>{let e=t;return"number"!=typeof e&&(e=e.endsWith("%")?255*parseFloat(e)/100:parseFloat(e)),y(Math.round(e),0,255)},w=t=>y(parseFloat(t),0,100);function O(t){let e=t;return"number"!=typeof e&&(e=e.endsWith("%")?parseFloat(e)/100:parseFloat(e)),y(e,0,1)}function S([,t,e,r,a=1]){return{type:"rgb",values:[t,e,r].map(I),alpha:O(null===a?1:a)}}const D=t=>{if("string"!=typeof t)return null;const e=i.exec(t);if(e)return function(t){const[e,r,a,n]=s()(t,{format:"array"});return S([null,e,r,a,n])}(e[0]);const r=d.exec(t)||m.exec(t);if(r)return function([,t,e,r,a=1]){let n=t;return n=n.endsWith("turn")?360*parseFloat(n)/1:n.endsWith("rad")?Math.round(180*parseFloat(n)/Math.PI):parseFloat(n),{type:"hsl",values:[n,w(e),w(r)],alpha:O(null===a?1:a)}}(r);const a=R.exec(t)||L.exec(t)||x.exec(t)||b.exec(t);if(a)return S(a);if(A.exec(t))return S([null,0,0,0,0]);const o=n()[t.toLowerCase()];return o?S([null,o[0],o[1],o[2],1]):null}},857:(t,e,r)=>{function a(t,e){if(typeof t!=e)throw new TypeError(`required type ${e} got ${typeof t}`);return t}function n(t,e){if(!t instanceof e)throw new TypeError(`required type ${e} got ${typeof t}`);return t}function o(t){return isNaN(t)?0:t}function s(t){return{angle:t&&t.angle?t.angle:15,results:t&&t.results?t.results:3}}function i(t,e,r){return void 0!==r&&te?e:t}function u(t,e){for(t+=e;t>=360;)t-=360;for(;t<0;)t+=360;return t}r.r(e),r.d(e,{default:()=>c});class f{#t;#e;#r;static Colors=class{static get BLACK(){return f.fromHex("#000000")}static get SILVER(){return f.fromHex("#c0c0c0")}static get GRAY(){return f.fromHex("#808080")}static get WHITE(){return f.fromHex("#ffffff")}static get MAROON(){return f.fromHex("#800000")}static get RED(){return f.fromHex("#ff0000")}static get PURPLE(){return f.fromHex("#800080")}static get FUCHSIA(){return f.fromHex("#ff00ff")}static get GREEN(){return f.fromHex("#008000")}static get LIME(){return f.fromHex("#00ff00")}static get OLIVE(){return f.fromHex("#808000")}static get YELLOW(){return f.fromHex("#ffff00")}static get NAVY(){return f.fromHex("#000080")}static get BLUE(){return f.fromHex("#0000ff")}static get TEAL(){return f.fromHex("#008080")}static get AQUA(){return f.fromHex("#00ffff")}static get ORANGE(){return f.fromHex("#ffa500")}static get ALICEBLUE(){return f.fromHex("#f0f8ff")}static get ANTIQUEWHITE(){return f.fromHex("#faebd7")}static get AQUAMARINE(){return f.fromHex("#7fffd4")}static get AZURE(){return f.fromHex("#f0ffff")}static get BEIGE(){return f.fromHex("#f5f5dc")}static get BISQUE(){return f.fromHex("#ffe4c4")}static get BLANCHEDALMOND(){return f.fromHex("#ffebcd")}static get BLUEVIOLET(){return f.fromHex("#8a2be2")}static get BROWN(){return f.fromHex("#a52a2a")}static get BURLYWOOD(){return f.fromHex("#deb887")}static get CADETBLUE(){return f.fromHex("#5f9ea0")}static get CHARTREUSE(){return f.fromHex("#7fff00")}static get CHOCOLATE(){return f.fromHex("#d2691e")}static get CORAL(){return f.fromHex("#ff7f50")}static get CORNFLOWERBLUE(){return f.fromHex("#6495ed")}static get CORNSILK(){return f.fromHex("#fff8dc")}static get CRIMSON(){return f.fromHex("#dc143c")}static get CYAN(){return f.fromHex("#00ffff")}static get DARKBLUE(){return f.fromHex("#00008b")}static get DARKCYAN(){return f.fromHex("#008b8b")}static get DARKGOLDENROD(){return f.fromHex("#b8860b")}static get DARKGRAY(){return f.fromHex("#a9a9a9")}static get DARKGREEN(){return f.fromHex("#006400")}static get DARKGREY(){return f.fromHex("#a9a9a9")}static get DARKKHAKI(){return f.fromHex("#bdb76b")}static get DARKMAGENTA(){return f.fromHex("#8b008b")}static get DARKOLIVEGREEN(){return f.fromHex("#556b2f")}static get DARKORANGE(){return f.fromHex("#ff8c00")}static get DARKORCHID(){return f.fromHex("#9932cc")}static get DARKRED(){return f.fromHex("#8b0000")}static get DARKSALMON(){return f.fromHex("#e9967a")}static get DARKSEAGREEN(){return f.fromHex("#8fbc8f")}static get DARKSLATEBLUE(){return f.fromHex("#483d8b")}static get DARKSLATEGRAY(){return f.fromHex("#2f4f4f")}static get DARKSLATEGREY(){return f.fromHex("#2f4f4f")}static get DARKTURQUOISE(){return f.fromHex("#00ced1")}static get DARKVIOLET(){return f.fromHex("#9400d3")}static get DEEPPINK(){return f.fromHex("#ff1493")}static get DEEPSKYBLUE(){return f.fromHex("#00bfff")}static get DIMGRAY(){return f.fromHex("#696969")}static get DIMGREY(){return f.fromHex("#696969")}static get DODGERBLUE(){return f.fromHex("#1e90ff")}static get FIREBRICK(){return f.fromHex("#b22222")}static get FLORALWHITE(){return f.fromHex("#fffaf0")}static get FORESTGREEN(){return f.fromHex("#228b22")}static get GAINSBORO(){return f.fromHex("#dcdcdc")}static get GHOSTWHITE(){return f.fromHex("#f8f8ff")}static get GOLD(){return f.fromHex("#ffd700")}static get GOLDENROD(){return f.fromHex("#daa520")}static get GREENYELLOW(){return f.fromHex("#adff2f")}static get GREY(){return f.fromHex("#808080")}static get HONEYDEW(){return f.fromHex("#f0fff0")}static get HOTPINK(){return f.fromHex("#ff69b4")}static get INDIANRED(){return f.fromHex("#cd5c5c")}static get INDIGO(){return f.fromHex("#4b0082")}static get IVORY(){return f.fromHex("#fffff0")}static get KHAKI(){return f.fromHex("#f0e68c")}static get LAVENDER(){return f.fromHex("#e6e6fa")}static get LAVENDERBLUSH(){return f.fromHex("#fff0f5")}static get LAWNGREEN(){return f.fromHex("#7cfc00")}static get LEMONCHIFFON(){return f.fromHex("#fffacd")}static get LIGHTBLUE(){return f.fromHex("#add8e6")}static get LIGHTCORAL(){return f.fromHex("#f08080")}static get LIGHTCYAN(){return f.fromHex("#e0ffff")}static get LIGHTGOLDENRODYELLOW(){return f.fromHex("#fafad2")}static get LIGHTGRAY(){return f.fromHex("#d3d3d3")}static get LIGHTGREEN(){return f.fromHex("#90ee90")}static get LIGHTGREY(){return f.fromHex("#d3d3d3")}static get LIGHTPINK(){return f.fromHex("#ffb6c1")}static get LIGHTSALMON(){return f.fromHex("#ffa07a")}static get LIGHTSEAGREEN(){return f.fromHex("#20b2aa")}static get LIGHTSKYBLUE(){return f.fromHex("#87cefa")}static get LIGHTSLATEGRAY(){return f.fromHex("#778899")}static get LIGHTSLATEGREY(){return f.fromHex("#778899")}static get LIGHTSTEELBLUE(){return f.fromHex("#b0c4de")}static get LIGHTYELLOW(){return f.fromHex("#ffffe0")}static get LIMEGREEN(){return f.fromHex("#32cd32")}static get LINEN(){return f.fromHex("#faf0e6")}static get MAGENTA(){return f.fromHex("#ff00ff")}static get FUCHSIA(){return f.fromHex("#ff00ff")}static get MEDIUMAQUAMARINE(){return f.fromHex("#66cdaa")}static get MEDIUMBLUE(){return f.fromHex("#0000cd")}static get MEDIUMORCHID(){return f.fromHex("#ba55d3")}static get MEDIUMPURPLE(){return f.fromHex("#9370db")}static get MEDIUMSEAGREEN(){return f.fromHex("#3cb371")}static get MEDIUMSLATEBLUE(){return f.fromHex("#7b68ee")}static get MEDIUMSPRINGGREEN(){return f.fromHex("#00fa9a")}static get MEDIUMTURQUOISE(){return f.fromHex("#48d1cc")}static get MEDIUMVIOLETRED(){return f.fromHex("#c71585")}static get MIDNIGHTBLUE(){return f.fromHex("#191970")}static get MINTCREAM(){return f.fromHex("#f5fffa")}static get MISTYROSE(){return f.fromHex("#ffe4e1")}static get MOCCASIN(){return f.fromHex("#ffe4b5")}static get NAVAJOWHITE(){return f.fromHex("#ffdead")}static get OLDLACE(){return f.fromHex("#fdf5e6")}static get OLIVEDRAB(){return f.fromHex("#6b8e23")}static get ORANGERED(){return f.fromHex("#ff4500")}static get ORCHID(){return f.fromHex("#da70d6")}static get PALEGOLDENROD(){return f.fromHex("#eee8aa")}static get PALEGREEN(){return f.fromHex("#98fb98")}static get PALETURQUOISE(){return f.fromHex("#afeeee")}static get PALEVIOLETRED(){return f.fromHex("#db7093")}static get PAPAYAWHIP(){return f.fromHex("#ffefd5")}static get PEACHPUFF(){return f.fromHex("#ffdab9")}static get PERU(){return f.fromHex("#cd853f")}static get PINK(){return f.fromHex("#ffc0cb")}static get PLUM(){return f.fromHex("#dda0dd")}static get POWDERBLUE(){return f.fromHex("#b0e0e6")}static get ROSYBROWN(){return f.fromHex("#bc8f8f")}static get ROYALBLUE(){return f.fromHex("#4169e1")}static get SADDLEBROWN(){return f.fromHex("#8b4513")}static get SALMON(){return f.fromHex("#fa8072")}static get SANDYBROWN(){return f.fromHex("#f4a460")}static get SEAGREEN(){return f.fromHex("#2e8b57")}static get SEASHELL(){return f.fromHex("#fff5ee")}static get SIENNA(){return f.fromHex("#a0522d")}static get SKYBLUE(){return f.fromHex("#87ceeb")}static get SLATEBLUE(){return f.fromHex("#6a5acd")}static get SLATEGRAY(){return f.fromHex("#708090")}static get SLATEGREY(){return f.fromHex("#708090")}static get SNOW(){return f.fromHex("#fffafa")}static get SPRINGGREEN(){return f.fromHex("#00ff7f")}static get STEELBLUE(){return f.fromHex("#4682b4")}static get TAN(){return f.fromHex("#d2b48c")}static get THISTLE(){return f.fromHex("#d8bfd8")}static get TOMATO(){return f.fromHex("#ff6347")}static get TURQUOISE(){return f.fromHex("#40e0d0")}static get VIOLET(){return f.fromHex("#ee82ee")}static get WHEAT(){return f.fromHex("#f5deb3")}static get WHITESMOKE(){return f.fromHex("#f5f5f5")}static get YELLOWGREEN(){return f.fromHex("#9acd32")}static get REBECCAPURPLE(){return f.fromHex("#663399")}};getScheme(t,e){return f.createScheme(this,t,e)}static getScheme(t,e,r){return f.createScheme(t,e,r)}static monochromatic(t,e){n(t,f);let r=s(e).results||3,a=f.toHsv(t),o=a.h,u=a.s,c=a.v/100,l=[],g=1/r;for(;r--;)l.push(f.fromHsv(o,u,i(100*c,100,0))),c=(c-g)%1;return l}monochromatic(t){return f.monochromatic(this,t)}static complementary(t){n(t,f);let e=f.toHsl(t),r=e.h,a=e.s,o=e.l;return f.fromHsl(u(r,180),a,o)}complementary(){return f.complementary(this)}static splitComplementary(t,e){n(t,f);let r=f.toHsl(t),a=s(e).angle||15,o=r.h,i=r.s,c=r.l;return[t,f.fromHsl(u(o,180+a),i,c),f.fromHsl(u(o,180-a),i,c)]}splitComplementary(t){return f.splitComplementary(this,t)}static doubleComplementary(t,e){n(t,f);let r=f.toHsl(t),a=s(e).angle||15,o=r.h,i=r.s,c=r.l;return[t,f.fromHsl(u(o,180),i,c),f.fromHsl(u(o,a),i,c),f.fromHsl(u(o,180+a),i,c)]}doubleComplementary(t){return f.doubleComplementary(this,t)}static square(t){n(t,f);let e=f.toHsl(t),r=e.h,a=e.s,o=e.l;const s=[t];for(let t=1;t<4;t++)r=u(r,90),s.push(f.fromHsl(r,a,o));return s}square(){return f.square(this)}static tetradic(t,e){n(t,f);let r=f.toHsl(t),a=s(e).angle,o=r.h,i=r.s,c=r.l;return[t,f.fromHsl(u(o,180),i,c),f.fromHsl(u(o,180-a),i,c),f.fromHsl(u(o,-a),i,c)]}tetradic(t){return f.tetradic(this,t)}static triadic(t){n(t,f);let e=f.toHsl(t),r=e.h,a=e.s,o=e.l;return[t,f.fromHsl(u(r,120),a,o),f.fromHsl(u(r,240),a,o)]}triadic(){return f.triadic(this)}static analogous(t,e){n(t,f);let r=f.toHsl(t),a=s(e).angle,o=r.h,i=r.s,c=r.l;return[t,f.fromHsl(u(o,-a),i,c),f.fromHsl(u(o,+a),i,c)]}analogous(t){return f.analogous(this,t)}static materialPalette(t,e){var r=s(e),a=r.baseLight,n="self"!==r.baseDark&&r.baseDark?r.baseDark:this.multiply(t,t);return{50:f.mix(a,t,10),100:f.mix(a,t,30),200:f.mix(a,t,50),300:f.mix(a,t,70),400:f.mix(a,t,85),500:f.mix(a,t,100),600:f.mix(n,t,92),700:f.mix(n,t,83),800:f.mix(n,t,74),900:f.mix(n,t,65),A100:f.lighten(f.saturate(f.mix(n,t,15),80),65),A200:f.lighten(f.saturate(f.mix(n,t,15),80),55),A400:f.lighten(f.saturate(f.mix(a,t,100),55),10),A700:f.lighten(f.saturate(f.mix(n,t,83),65),10)}}materialPalette(t){return f.materialPalette(this,t)}static createScheme(t,e,r){switch(e.toLowerCase()){case"analogous":case"analog":return f.analogous(t);case"triadic":case"triad":return f.triadic(t);case"tetradic":case"tetra":return f.tetradic(t);case"monochromatic":case"monochrome":case"mono":return f.monochromatic(t,r);case"complementary":case"complement":case"comp":return f.complementary(t);case"double-complementary":case"double-complement":case"double":return f.doubleComplementary(t);case"split-complementary":case"split-complement":case"split":return f.splitComplementary(t);case"square":return f.square(t);case"material":return f.materialPalette(t)}}constructor(t,e,r){if(!(0<=t&&t<=255&&0<=e&&e<=255&&0<=r&&r<=255))throw new Error("Color values out of bounds (0 - 255)");this.#t=o(a(t,"number")),this.#e=o(a(e,"number")),this.#r=o(a(r,"number")),this.alpha=1}static saturate(t,e){s(t),a(e,"number");let r=t.toHsl(),n=r.h,o=i(r.s+e,100,0),u=r.l;return f.fromHsl(n,o,u)}saturate(t){return f.saturate(this,t)}static desaturate(t,e){s(t),a(e,"number");let r=t.toHsl(),n=r.h,o=i(r.s-e,100,0),u=r.l;return f.fromHsl(n,o,u)}desaturate(t){return f.desaturate(this,t)}static grayscale(t){return f.desaturate(t,100)}grayscale(){return f.greyscale(this,100)}static greyscale(t){return f.desaturate(t,100)}greyscale(){return f.greyscale(this,100)}static lighten(t,e){n(t,f),a(e,"number");const r=t.toHsl();let o=r.h,s=r.s,u=i(r.l+e,100,0);return f.fromHsl(o,s,u)}lighten(t){return f.lighten(this,t)}static darken(t,e){return f.lighten(t,-e)}darken(t){return f.darken(this,t)}static brighten(t,e){let r=t.toRgb();return r.r=Math.max(0,Math.min(255,r.r-Math.round(-e/100*255))),r.g=Math.max(0,Math.min(255,r.g-Math.round(-e/100*255))),r.b=Math.max(0,Math.min(255,r.b-Math.round(-e/100*255))),new f(r.r,r.g,r.b)}brighten(t){return f.brighten(this,t)}static shiftHue(t,e){n(t,f),a(e,Number);let{h:r,s:o,l:s}=t.toHsl();return r=u(r,e),f.fromHsl(r,o,s)}shiftHue(t){return f.shiftHue(this,t)}static multiply(t,e){n(t,f),n(e,f);let{r1:r,g1:a,b1:o}=t.toRgb(),{r2:s,g2:i,b2:u}=e.toRgb();return f.fromRgb(r*s/255,a*i/255,o*u/255)}multiply(t){return f.multiply(this,t)}static mix(t,e,r=50){n(t,f),n(t,f),a(r,"number");const o=t.toRgb(),s=e.toRgb(),u=i(r,100,0)/100,c=Math.round((s.r-o.r)*u+o.r),l=Math.round((s.g-o.g)*u+o.g),g=Math.round((s.b-o.b)*u+o.b);return f.fromRgb(c,l,g)}mix(t,e){return f.mix(this,t,e)}static lerp(t,e,r=.5){a(r,"number"),n(t,f),n(e,f),r=i(r,1,0);let o=t.toRgb(),s=e.toRgb(),u=o.r/255,c=o.g/255,l=o.b/255,g=s.r/255,m=s.g/255,h=s.b/255;return f.fromRgb(255*(u+(g-u)*r),255*(c+(m-c)*r),255*(l+(h-l)*r))}lerp(t,e){return f.lerp(this,t,e)}static add(t,e){n(t,f),n(e,f);let r=t.toRgb(),a=e.toRgb(),o=r.r,s=r.g,i=r.b,u=a.r,c=a.g,l=a.b;return f.fromRgb(Math.round((o+u)/2),Math.round((s+c)/2),Math.round((i+l)/2))}add(t){return f.add(this,t)}static fromHex(t){if(!t.match(/^#?(?:[0-9a-fA-F]{3}){1,2}$/i))throw new Error('Invalid Hex code: "'+t+'"');let e="0x00",r="0x00",a="0x00";return 4==t.length?(e="0x"+t[1]+t[1],r="0x"+t[2]+t[2],a="0x"+t[3]+t[3]):3==t.length?(e="0x"+t[0]+t[0],r="0x"+t[1]+t[1],a="0x"+t[2]+t[2]):7==t.length?(e="0x"+t[1]+t[2],r="0x"+t[3]+t[4],a="0x"+t[5]+t[6]):6==t.length&&(e="0x"+t[0]+t[1],r="0x"+t[2]+t[3],a="0x"+t[4]+t[5]),new f(parseInt(e,16),parseInt(r,16),parseInt(a,16))}static fromRgb(t,e,r){return new f(t,e,r)}static fromHsl(t,e,r){if(t=a(t,"number"),e=a(e,"number"),r=a(r,"number"),!(0<=t&&t<=360))throw new Error("HSL color values out of range, hue (0 - 360)");if(!(0<=e&&e<=100))throw new Error("HSL color values out of range, sat (0 - 100)");if(!(0<=r&&r<=100))throw new Error("HSL color values out of range, lum (0 - 100)");e/=100,r/=100;let n=(1-Math.abs(2*r-1))*e,o=n*(1-Math.abs(t/60%2-1)),s=r-n/2,i=0,u=0,c=0;0<=t&&t<60?(i=n,u=o,c=0):60<=t&&t<120?(i=o,u=n,c=0):120<=t&&t<180?(i=0,u=n,c=o):180<=t&&t<240?(i=0,u=o,c=n):240<=t&&t<300?(i=o,u=0,c=n):300<=t&&t<=360&&(i=n,u=0,c=o);const l=Math.round(255*(i+s)),g=Math.round(255*(u+s)),m=Math.round(255*(c+s));return new f(l,g,m)}static fromHsv(t,e,r){if(t=a(t,"number"),e=a(e,"number"),r=a(r,"number"),!(0<=t&&t<=360))throw new Error("HSL color values out of range, hue (0 - 360)");if(!(0<=e&&e<=100))throw new Error("HSL color values out of range, sat (0 - 100)");if(!(0<=r&&r<=100))throw new Error("HSL color values out of range, lum (0 - 100)");let n=(r/=100)*(e/=100),o=n*(1-Math.abs(t/60%2-1)),s=r-n,i=0,u=0,c=0;return 0<=t&&t<60?(i=n,u=o,c=0):60<=t&&t<120?(i=o,u=n,c=0):120<=t&&t<180?(i=0,u=n,c=o):180<=t&&t<240?(i=0,u=o,c=n):240<=t&&t<300?(i=o,u=0,c=n):300<=t&&t<=360&&(i=n,u=0,c=o),new f(255*(i+s),255*(u+s),255*(c+s))}static fromCssString(t){a(t,"string");var e=document.createElement("canvas").getContext("2d");e.fillStyle=t;const r=e.fillStyle;if(!r)throw new Error("Invalid Color string");return f.fromHex(r)}static fromName(t){t=a(t,"string");const e=this.Colors[t.toUpperCase()];if(!e)throw new Error("Invalid Color name");return e}static toHex(t){t=n(t,f);let e=Math.round(t.#t).toString(16),r=Math.round(t.#e).toString(16),a=Math.round(t.#r).toString(16);return 1==e.length&&(e="0"+e),1==r.length&&(r="0"+r),1==a.length&&(a="0"+a),"#"+e+r+a}static toHsl(t){let e=0,r=0,a=0,s=(t=n(t,f)).#t/255,i=t.#e/255,u=t.#r/255,c=Math.min(Math.min(s,i),u),l=Math.max(Math.max(s,i),u),g=l-c;return e=0===g?0:l===s?(i-u)/g%6:l===i?(u-s)/g+2:(s-i)/g+4,e=Math.round(60*e),e<0&&(e+=360),a=(l+c)/2,r=0===g?0:g/(1-Math.abs(2*a-1)),r=parseFloat(Math.abs(100*r)),a=parseFloat(Math.abs(100*a)),{h:o(e),s:o(r),l:o(a)}}static toHsv(t){let e=0,r=0,a=0,n=t.#t/255,s=t.#e/255,i=t.#r/255,u=Math.min(Math.min(n,s),i),f=Math.max(Math.max(n,s),i),c=f-u;return e=0===c?0:f===n?(s-i)/c%6:f===s?(i-n)/c+2:(n-s)/c+4,e=Math.round(60*e),e<0&&(e+=360),0!==f&&(r=c/f*100),a=100*f,{h:o(e),s:o(r),v:o(a)}}static toRgb(t){return n(t,f),{r:t.#t,g:t.#e,b:t.#r}}static toCmyk(t){n(t,f);let{r:e,g:r,b:a}=t.toRgb(),s=1-e/255,i=1-r/255,u=1-a/255,c=Math.min(s,Math.min(i,u));return s=(s-c)/(1-c),i=(i-c)/(1-c),u=(u-c)/(1-c),s=o(Math.round(1e4*s)/100),i=o(Math.round(1e4*i)/100),u=o(Math.round(1e4*u)/100),c=o(Math.round(1e4*c)/100),{c:s,m:i,y:u,k:c}}toHsl(){return f.toHsl(this)}toHsv(){return f.toHsv(this)}toHex(){return f.toHex(this)}toRgb(){return f.toRgb(this)}toCmyk(){return f.toCmyk(this)}static random(){const t=Math.floor(255*Math.random()),e=Math.floor(255*Math.random()),r=Math.floor(255*Math.random());return new f(t,e,r)}toString(t="hex"){a(t,"string");const e=this.toRgb(),r=this.toHsl();switch(t.toLowerCase()){case"hex":return this.toHex();case"hexa":let t=Math.round(255*this.alpha).toString(16);return 1===t.length&&(t="0"+t),this.toHex()+t;case"rgb":return`rgb(${Math.round(e.r)}, ${Math.round(e.g)}, ${Math.round(e.b)})`;case"rgba":return`rgba(${Math.round(e.r)}, ${Math.round(e.g)}, ${Math.round(e.b)}, ${this.alpha})`;case"hsl":return`hsl(${Math.round(r.h)}, ${Math.round(r.s)}%, ${Math.round(r.l)}%)`;case"hsla":return`hsla(${Math.round(r.h)}, ${Math.round(r.s)}%, ${Math.round(r.l)}%, ${this.alpha})`;case"hsv":const a=this.toHsv();return`hsv(${Math.round(a.h)}, ${Math.round(a.s)}%, ${Math.round(a.v)}%)`;case"cmyk":const n=this.toCmyk();return`cmyk(${Math.round(n.c)}%, ${Math.round(n.m)}%, ${Math.round(n.y)}%, ${Math.round(n.k)}%)`}}valueOf(){return parseInt("0x"+this.toHex().slice(1))}}const c=f},496:t=>{t.exports=require("vscode")}},e={};function r(a){var n=e[a];if(void 0!==n)return n.exports;var o=e[a]={exports:{}};return t[a](o,o.exports,r),o.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var a in e)r.o(e,a)&&!r.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var a={};(()=>{var t=a;Object.defineProperty(t,"__esModule",{value:!0}),t.deactivate=t.activate=void 0;const e=r(496),n=r(857),o=r(197);function s(t,r){const a=Array.from(t.slice(0,r).matchAll(/\n/g)),n=a.length,o=r-a[n-1].index;return new e.Position(n,o-1)}class i{constructor(){let t=[];e.workspace.onDidChangeTextDocument(this._onDidChangeTextDocument,this,t),e.workspace.onDidChangeConfiguration(this._onDidChangeConfiguration,this,t),this.register()}get languages(){return e.workspace.getConfiguration("vscode-color-picker").get("languages")}_onDidChangeTextDocument(t){e.window.activeTextEditor,t.document.getText()}_onDidChangeConfiguration(){}register(){this.languages.forEach((t=>{e.languages.registerColorProvider(t,{provideDocumentColors:(t,r)=>class{static getMatches(t){const r=t.matchAll(/(#(?:[\da-f]{3,4}){2}|rgb\((?:\d{1,3},\s*){2}\d{1,3}\)|rgba\((?:\d{1,3},\s*){3}\d*\.?\d+\)|hsl\(\d{1,3}(?:,\s*\d{1,3}%){2}\)|hsla\(\d{1,3}(?:,\s*\d{1,3}%){2},\s*\d*\.?\d+\))/gi);return Array.from(r).map((r=>{const a=r[0],i=a.length;let u;a.startsWith("hsl(")?u="hsl":a.startsWith("hsla(")?u="hsla":a.startsWith("rgb(")?u="rgb":a.startsWith("rgba(")?u="rgba":a.startsWith("#")&&(u="hex");const f=new e.Range(s(t,r.index),s(t,r.index+a.length)),c=function(t){try{const r=(0,o.default)(t);if(!r)throw new Error("invalid color string");if("rgb"===r.type){const t=r.values[0],a=r.values[1],n=r.values[2],o=r.alpha;return new e.Color(t/255,a/255,n/255,o)}{const t=r.values[0],a=r.values[1],o=r.values[2],s=r.alpha,{r:i,g:u,b:f}=n.default.fromHsl(t,a,o).toRgb();return new e.Color(i/255,u/255,f/255,s)}}catch(t){return console.log(t),null}}(a);if(c)return{color:c,type:u,length:i,range:f}}))}}.getMatches(t.getText()).map(((t,r)=>new e.ColorInformation(t.range,t.color))),provideColorPresentations(t,r,a){let o=n.default.fromRgb(255*t.red,255*t.green,255*t.blue);o.alpha=t.alpha,o.toString("hex"),o.toString("hsl");let s=r.document.getText(r.range);const i=new e.ColorPresentation(o.toString("hex")),u=new e.ColorPresentation(o.toString("hexa")),f=new e.ColorPresentation(o.toString("hsl")),c=new e.ColorPresentation(o.toString("hsla")),l=new e.ColorPresentation(o.toString("rgb")),g=new e.ColorPresentation(o.toString("rgba"));let m=!1;return s.startsWith("#")&&9===s.length&&(m=!0),s.startsWith("hsla")&&(m=!0),s.startsWith("rgba")&&(m=!0),1!==t.alpha&&(m=!0),m?[u,c,g]:[i,f,l]}})}))}dispose(){}}t.activate=function(t){const e=new i;t.subscriptions.push(e)},t.deactivate=function(){}})(),module.exports=a})(); -------------------------------------------------------------------------------- /src/color.js: -------------------------------------------------------------------------------- 1 | "use-strict" 2 | 3 | 4 | 5 | 6 | /** 7 | * 8 | * @param {Any} value 9 | * @param {type} type 10 | */ 11 | function tc(value, type) { 12 | if(!(typeof value == type)) throw new TypeError(`required type ${type} got ${typeof value}`); 13 | return value 14 | } 15 | 16 | function ic(value, type) { 17 | if(! value instanceof type) throw new TypeError(`required type ${type} got ${typeof value}`); 18 | return value 19 | } 20 | 21 | function nc(value) { 22 | if(isNaN(value)) return 0; 23 | return value; 24 | } 25 | 26 | function oc(options) { 27 | const new_options = { 28 | angle: options ? (options.angle ? options.angle : 15) : 15, 29 | results: options ? (options.results ? options.results : 3) : 3, 30 | } 31 | return new_options 32 | } 33 | 34 | function clmp(value, max, min) { 35 | if(min !== undefined && value < min) { 36 | return min; 37 | } 38 | if(value > max) { 39 | return max; 40 | } 41 | return value; 42 | } 43 | 44 | function shift(h, angle){ 45 | h += angle; 46 | while (h >= 360.0) h -= 360.0; 47 | while (h < 0.0) h += 360.0; 48 | return h; 49 | } 50 | 51 | class Color { 52 | 53 | 54 | 55 | #red; 56 | #green; 57 | #blue; 58 | 59 | //#region color names 60 | 61 | static Colors = class { 62 | static get BLACK() { return Color.fromHex("#000000"); } 63 | static get SILVER() { return Color.fromHex("#c0c0c0"); } 64 | static get GRAY() { return Color.fromHex("#808080"); } 65 | static get WHITE() { return Color.fromHex("#ffffff"); } 66 | static get MAROON() { return Color.fromHex("#800000"); } 67 | static get RED() { return Color.fromHex("#ff0000"); } 68 | static get PURPLE() { return Color.fromHex("#800080"); } 69 | static get FUCHSIA() { return Color.fromHex("#ff00ff"); } 70 | static get GREEN() { return Color.fromHex("#008000"); } 71 | static get LIME() { return Color.fromHex("#00ff00"); } 72 | static get OLIVE() { return Color.fromHex("#808000"); } 73 | static get YELLOW() { return Color.fromHex("#ffff00"); } 74 | static get NAVY() { return Color.fromHex("#000080"); } 75 | static get BLUE() { return Color.fromHex("#0000ff"); } 76 | static get TEAL() { return Color.fromHex("#008080"); } 77 | static get AQUA() { return Color.fromHex("#00ffff"); } 78 | static get ORANGE() { return Color.fromHex("#ffa500"); } 79 | static get ALICEBLUE() { return Color.fromHex("#f0f8ff"); } 80 | static get ANTIQUEWHITE() { return Color.fromHex("#faebd7"); } 81 | static get AQUAMARINE() { return Color.fromHex("#7fffd4"); } 82 | static get AZURE() { return Color.fromHex("#f0ffff"); } 83 | static get BEIGE() { return Color.fromHex("#f5f5dc"); } 84 | static get BISQUE() { return Color.fromHex("#ffe4c4"); } 85 | static get BLANCHEDALMOND() { return Color.fromHex("#ffebcd"); } 86 | static get BLUEVIOLET() { return Color.fromHex("#8a2be2"); } 87 | static get BROWN() { return Color.fromHex("#a52a2a"); } 88 | static get BURLYWOOD() { return Color.fromHex("#deb887"); } 89 | static get CADETBLUE() { return Color.fromHex("#5f9ea0"); } 90 | static get CHARTREUSE() { return Color.fromHex("#7fff00"); } 91 | static get CHOCOLATE() { return Color.fromHex("#d2691e"); } 92 | static get CORAL() { return Color.fromHex("#ff7f50"); } 93 | static get CORNFLOWERBLUE() { return Color.fromHex("#6495ed"); } 94 | static get CORNSILK() { return Color.fromHex("#fff8dc"); } 95 | static get CRIMSON() { return Color.fromHex("#dc143c"); } 96 | static get CYAN() { return Color.fromHex("#00ffff"); } 97 | static get DARKBLUE() { return Color.fromHex("#00008b"); } 98 | static get DARKCYAN() { return Color.fromHex("#008b8b"); } 99 | static get DARKGOLDENROD() { return Color.fromHex("#b8860b"); } 100 | static get DARKGRAY() { return Color.fromHex("#a9a9a9"); } 101 | static get DARKGREEN() { return Color.fromHex("#006400"); } 102 | static get DARKGREY() { return Color.fromHex("#a9a9a9"); } 103 | static get DARKKHAKI() { return Color.fromHex("#bdb76b"); } 104 | static get DARKMAGENTA() { return Color.fromHex("#8b008b"); } 105 | static get DARKOLIVEGREEN() { return Color.fromHex("#556b2f"); } 106 | static get DARKORANGE() { return Color.fromHex("#ff8c00"); } 107 | static get DARKORCHID() { return Color.fromHex("#9932cc"); } 108 | static get DARKRED() { return Color.fromHex("#8b0000"); } 109 | static get DARKSALMON() { return Color.fromHex("#e9967a"); } 110 | static get DARKSEAGREEN() { return Color.fromHex("#8fbc8f"); } 111 | static get DARKSLATEBLUE() { return Color.fromHex("#483d8b"); } 112 | static get DARKSLATEGRAY() { return Color.fromHex("#2f4f4f"); } 113 | static get DARKSLATEGREY() { return Color.fromHex("#2f4f4f"); } 114 | static get DARKTURQUOISE() { return Color.fromHex("#00ced1"); } 115 | static get DARKVIOLET() { return Color.fromHex("#9400d3"); } 116 | static get DEEPPINK() { return Color.fromHex("#ff1493"); } 117 | static get DEEPSKYBLUE() { return Color.fromHex("#00bfff"); } 118 | static get DIMGRAY() { return Color.fromHex("#696969"); } 119 | static get DIMGREY() { return Color.fromHex("#696969"); } 120 | static get DODGERBLUE() { return Color.fromHex("#1e90ff"); } 121 | static get FIREBRICK() { return Color.fromHex("#b22222"); } 122 | static get FLORALWHITE() { return Color.fromHex("#fffaf0"); } 123 | static get FORESTGREEN() { return Color.fromHex("#228b22"); } 124 | static get GAINSBORO() { return Color.fromHex("#dcdcdc"); } 125 | static get GHOSTWHITE() { return Color.fromHex("#f8f8ff"); } 126 | static get GOLD() { return Color.fromHex("#ffd700"); } 127 | static get GOLDENROD() { return Color.fromHex("#daa520"); } 128 | static get GREENYELLOW() { return Color.fromHex("#adff2f"); } 129 | static get GREY() { return Color.fromHex("#808080"); } 130 | static get HONEYDEW() { return Color.fromHex("#f0fff0"); } 131 | static get HOTPINK() { return Color.fromHex("#ff69b4"); } 132 | static get INDIANRED() { return Color.fromHex("#cd5c5c"); } 133 | static get INDIGO() { return Color.fromHex("#4b0082"); } 134 | static get IVORY() { return Color.fromHex("#fffff0"); } 135 | static get KHAKI() { return Color.fromHex("#f0e68c"); } 136 | static get LAVENDER() { return Color.fromHex("#e6e6fa"); } 137 | static get LAVENDERBLUSH() { return Color.fromHex("#fff0f5"); } 138 | static get LAWNGREEN() { return Color.fromHex("#7cfc00"); } 139 | static get LEMONCHIFFON() { return Color.fromHex("#fffacd"); } 140 | static get LIGHTBLUE() { return Color.fromHex("#add8e6"); } 141 | static get LIGHTCORAL() { return Color.fromHex("#f08080"); } 142 | static get LIGHTCYAN() { return Color.fromHex("#e0ffff"); } 143 | static get LIGHTGOLDENRODYELLOW() { return Color.fromHex("#fafad2"); } 144 | static get LIGHTGRAY() { return Color.fromHex("#d3d3d3"); } 145 | static get LIGHTGREEN() { return Color.fromHex("#90ee90"); } 146 | static get LIGHTGREY() { return Color.fromHex("#d3d3d3"); } 147 | static get LIGHTPINK() { return Color.fromHex("#ffb6c1"); } 148 | static get LIGHTSALMON() { return Color.fromHex("#ffa07a"); } 149 | static get LIGHTSEAGREEN() { return Color.fromHex("#20b2aa"); } 150 | static get LIGHTSKYBLUE() { return Color.fromHex("#87cefa"); } 151 | static get LIGHTSLATEGRAY() { return Color.fromHex("#778899"); } 152 | static get LIGHTSLATEGREY() { return Color.fromHex("#778899"); } 153 | static get LIGHTSTEELBLUE() { return Color.fromHex("#b0c4de"); } 154 | static get LIGHTYELLOW() { return Color.fromHex("#ffffe0"); } 155 | static get LIMEGREEN() { return Color.fromHex("#32cd32"); } 156 | static get LINEN() { return Color.fromHex("#faf0e6"); } 157 | static get MAGENTA() { return Color.fromHex("#ff00ff"); } 158 | static get FUCHSIA() { return Color.fromHex("#ff00ff"); } 159 | static get MEDIUMAQUAMARINE() { return Color.fromHex("#66cdaa"); } 160 | static get MEDIUMBLUE() { return Color.fromHex("#0000cd"); } 161 | static get MEDIUMORCHID() { return Color.fromHex("#ba55d3"); } 162 | static get MEDIUMPURPLE() { return Color.fromHex("#9370db"); } 163 | static get MEDIUMSEAGREEN() { return Color.fromHex("#3cb371"); } 164 | static get MEDIUMSLATEBLUE() { return Color.fromHex("#7b68ee"); } 165 | static get MEDIUMSPRINGGREEN() { return Color.fromHex("#00fa9a"); } 166 | static get MEDIUMTURQUOISE() { return Color.fromHex("#48d1cc"); } 167 | static get MEDIUMVIOLETRED() { return Color.fromHex("#c71585"); } 168 | static get MIDNIGHTBLUE() { return Color.fromHex("#191970"); } 169 | static get MINTCREAM() { return Color.fromHex("#f5fffa"); } 170 | static get MISTYROSE() { return Color.fromHex("#ffe4e1"); } 171 | static get MOCCASIN() { return Color.fromHex("#ffe4b5"); } 172 | static get NAVAJOWHITE() { return Color.fromHex("#ffdead"); } 173 | static get OLDLACE() { return Color.fromHex("#fdf5e6"); } 174 | static get OLIVEDRAB() { return Color.fromHex("#6b8e23"); } 175 | static get ORANGERED() { return Color.fromHex("#ff4500"); } 176 | static get ORCHID() { return Color.fromHex("#da70d6"); } 177 | static get PALEGOLDENROD() { return Color.fromHex("#eee8aa"); } 178 | static get PALEGREEN() { return Color.fromHex("#98fb98"); } 179 | static get PALETURQUOISE() { return Color.fromHex("#afeeee"); } 180 | static get PALEVIOLETRED() { return Color.fromHex("#db7093"); } 181 | static get PAPAYAWHIP() { return Color.fromHex("#ffefd5"); } 182 | static get PEACHPUFF() { return Color.fromHex("#ffdab9"); } 183 | static get PERU() { return Color.fromHex("#cd853f"); } 184 | static get PINK() { return Color.fromHex("#ffc0cb"); } 185 | static get PLUM() { return Color.fromHex("#dda0dd"); } 186 | static get POWDERBLUE() { return Color.fromHex("#b0e0e6"); } 187 | static get ROSYBROWN() { return Color.fromHex("#bc8f8f"); } 188 | static get ROYALBLUE() { return Color.fromHex("#4169e1"); } 189 | static get SADDLEBROWN() { return Color.fromHex("#8b4513"); } 190 | static get SALMON() { return Color.fromHex("#fa8072"); } 191 | static get SANDYBROWN() { return Color.fromHex("#f4a460"); } 192 | static get SEAGREEN() { return Color.fromHex("#2e8b57"); } 193 | static get SEASHELL() { return Color.fromHex("#fff5ee"); } 194 | static get SIENNA() { return Color.fromHex("#a0522d"); } 195 | static get SKYBLUE() { return Color.fromHex("#87ceeb"); } 196 | static get SLATEBLUE() { return Color.fromHex("#6a5acd"); } 197 | static get SLATEGRAY() { return Color.fromHex("#708090"); } 198 | static get SLATEGREY() { return Color.fromHex("#708090"); } 199 | static get SNOW() { return Color.fromHex("#fffafa"); } 200 | static get SPRINGGREEN() { return Color.fromHex("#00ff7f"); } 201 | static get STEELBLUE() { return Color.fromHex("#4682b4"); } 202 | static get TAN() { return Color.fromHex("#d2b48c"); } 203 | static get THISTLE() { return Color.fromHex("#d8bfd8"); } 204 | static get TOMATO() { return Color.fromHex("#ff6347"); } 205 | static get TURQUOISE() { return Color.fromHex("#40e0d0"); } 206 | static get VIOLET() { return Color.fromHex("#ee82ee"); } 207 | static get WHEAT() { return Color.fromHex("#f5deb3"); } 208 | static get WHITESMOKE() { return Color.fromHex("#f5f5f5"); } 209 | static get YELLOWGREEN() { return Color.fromHex("#9acd32"); } 210 | static get REBECCAPURPLE() { return Color.fromHex("#663399"); } 211 | 212 | 213 | } 214 | 215 | //#endregion color names 216 | 217 | //#region scheme 218 | 219 | getScheme(name, options) { 220 | return Color.createScheme(this, name, options) 221 | } 222 | 223 | static getScheme(color, name, options) { 224 | return Color.createScheme(color, name, options) 225 | } 226 | 227 | /** 228 | * 229 | * @param {Color} color 230 | * @param {Object} options 231 | * @returns Color[] 232 | */ 233 | static monochromatic(color, options){ 234 | ic(color, Color); 235 | let results = oc(options).results || 3; 236 | let hsv = Color.toHsv(color); 237 | let h = hsv.h, 238 | s = hsv.s, 239 | v = hsv.v / 100; 240 | let result = []; 241 | let mod = 1 / results; 242 | 243 | 244 | while (results--) { 245 | result.push(Color.fromHsv(h, s, clmp(v * 100, 100, 0))); 246 | v = (v - mod) % 1; 247 | } 248 | 249 | return result; 250 | } 251 | 252 | monochromatic(options) { 253 | return Color.monochromatic(this, options); 254 | } 255 | 256 | /** 257 | * 258 | * @param {Color} color 259 | * @returns Color 260 | */ 261 | static complementary(color){ 262 | ic(color, Color); 263 | let hsl = Color.toHsl(color); 264 | let h = hsl.h, 265 | s = hsl.s, 266 | l = hsl.l; 267 | 268 | return Color.fromHsl(shift(h, 180), s, l) 269 | 270 | } 271 | 272 | complementary() { 273 | return Color.complementary(this); 274 | } 275 | 276 | /** 277 | * 278 | * @param {Color} color 279 | * @param {Object} options 280 | * @returns Color[3] 281 | */ 282 | static splitComplementary(color, options){ 283 | ic(color, Color); 284 | let hsl = Color.toHsl(color); 285 | let angle = oc(options).angle || 15; 286 | let h = hsl.h, 287 | s = hsl.s, 288 | l = hsl.l; 289 | 290 | const result = [ 291 | color, 292 | Color.fromHsl(shift(h, 180 + angle), s, l), 293 | Color.fromHsl(shift(h, 180 - angle), s, l), 294 | ] 295 | 296 | return result; 297 | 298 | } 299 | 300 | splitComplementary(options) { 301 | return Color.splitComplementary(this, options); 302 | } 303 | 304 | /** 305 | * 306 | * @param {Color} color 307 | * @param {Object} options 308 | * @returns Color[4] 309 | */ 310 | static doubleComplementary(color, options) { 311 | ic(color, Color); 312 | let hsl = Color.toHsl(color); 313 | let angle = oc(options).angle || 15; 314 | let h = hsl.h, 315 | s = hsl.s, 316 | l = hsl.l; 317 | const result = [ 318 | color, 319 | Color.fromHsl(shift(h, 180), s, l), 320 | Color.fromHsl(shift(h, angle), s, l), 321 | Color.fromHsl(shift(h, 180 + angle), s, l), 322 | ] 323 | return result 324 | } 325 | 326 | doubleComplementary(options) { 327 | return Color.doubleComplementary(this, options) 328 | } 329 | 330 | /** 331 | * 332 | * @param {Color} color 333 | * @returns Color[4] 334 | */ 335 | static square(color) { 336 | ic(color, Color); 337 | let hsl = Color.toHsl(color); 338 | let h = hsl.h, 339 | s = hsl.s, 340 | l = hsl.l; 341 | const result = [ color ] 342 | 343 | for (let i = 1; i < 4; i++) { 344 | h = shift(h, 90); 345 | result.push(Color.fromHsl(h, s, l)); 346 | } 347 | 348 | return result 349 | } 350 | 351 | square() { 352 | return Color.square(this) 353 | } 354 | 355 | /** 356 | * 357 | * @param {Color} color 358 | * @param {Object} options 359 | * @returns Color[4] 360 | */ 361 | static tetradic(color, options) { 362 | ic(color, Color); 363 | let hsl = Color.toHsl(color); 364 | let angle = oc(options).angle; 365 | let h = hsl.h, 366 | s = hsl.s, 367 | l = hsl.l; 368 | return [ 369 | color, 370 | Color.fromHsl(shift(h, 180), s, l), 371 | Color.fromHsl(shift(h, 180 - angle), s, l), 372 | Color.fromHsl(shift(h, -angle), s, l) 373 | ] 374 | } 375 | 376 | tetradic(options) { 377 | return Color.tetradic(this, options) 378 | } 379 | 380 | 381 | /** 382 | * 383 | * @param {Color} color 384 | * @returns Color[3] 385 | */ 386 | static triadic(color) { 387 | ic(color, Color); 388 | let hsl = Color.toHsl(color); 389 | let h = hsl.h, 390 | s = hsl.s, 391 | l = hsl.l; 392 | return [ 393 | color, 394 | Color.fromHsl(shift(h, 120), s, l), 395 | Color.fromHsl(shift(h, 240), s, l) 396 | ] 397 | } 398 | 399 | triadic() { 400 | return Color.triadic(this) 401 | } 402 | 403 | /** 404 | * 405 | * @param {Color} color 406 | * @param {Object} options 407 | * @returns Color[3] 408 | */ 409 | static analogous(color, options) { 410 | ic(color, Color); 411 | let hsl = Color.toHsl(color); 412 | let angle = oc(options).angle; 413 | let h = hsl.h, 414 | s = hsl.s, 415 | l = hsl.l; 416 | return [ 417 | color, 418 | Color.fromHsl(shift(h, -angle), s, l), 419 | Color.fromHsl(shift(h, +angle), s, l) 420 | ] 421 | } 422 | 423 | analogous(options) { 424 | return Color.analogous(this, options) 425 | } 426 | 427 | static materialPalette(color, options) { 428 | var opt = oc(options); 429 | var baseLight = opt.baseLight; 430 | var baseDark = opt.baseDark === "self" || !opt.baseDark ? this.multiply(color, color) : opt.baseDark; 431 | 432 | return { 433 | "50": Color.mix(baseLight, color, 10), 434 | "100": Color.mix(baseLight, color, 30), 435 | "200": Color.mix(baseLight, color, 50), 436 | "300": Color.mix(baseLight, color, 70), 437 | "400": Color.mix(baseLight, color, 85), 438 | "500": Color.mix(baseLight, color, 100), 439 | "600": Color.mix(baseDark, color, 92), 440 | "700": Color.mix(baseDark, color, 83), 441 | "800": Color.mix(baseDark, color, 74), 442 | "900": Color.mix(baseDark, color, 65), 443 | 444 | "A100": Color.lighten(Color.saturate(Color.mix(baseDark, color, 15), 80), 65), 445 | "A200": Color.lighten(Color.saturate(Color.mix(baseDark, color, 15), 80), 55), 446 | "A400": Color.lighten(Color.saturate(Color.mix(baseLight, color, 100), 55), 10), 447 | "A700": Color.lighten(Color.saturate(Color.mix(baseDark, color, 83), 65), 10) 448 | }; 449 | } 450 | 451 | materialPalette(options) { 452 | return Color.materialPalette(this, options); 453 | } 454 | 455 | 456 | 457 | /** 458 | * 459 | * @param {Color} color 460 | * @param {string} name 461 | * @param {object} options 462 | * @returns 463 | */ 464 | static createScheme(color, name, options){ 465 | switch (name.toLowerCase()) { 466 | case "analogous": 467 | case "analog": return Color.analogous(color); 468 | 469 | case "triadic": 470 | case "triad": return Color.triadic(color); 471 | 472 | case "tetradic": 473 | case "tetra": return Color.tetradic(color); 474 | 475 | case "monochromatic": 476 | case "monochrome": 477 | case "mono": return Color.monochromatic(color, options); 478 | 479 | case "complementary": 480 | case "complement": 481 | case "comp": return Color.complementary(color); 482 | 483 | case "double-complementary": 484 | case "double-complement": 485 | case "double": return Color.doubleComplementary(color); 486 | 487 | case "split-complementary": 488 | case "split-complement": 489 | case "split": return Color.splitComplementary(color); 490 | 491 | case "square": return Color.square(color); 492 | case "material": return Color.materialPalette(color); 493 | } 494 | } 495 | 496 | //#endregion 497 | 498 | /** 499 | * 500 | * @param {Number} r 501 | * @param {Number} g 502 | * @param {Number} b 503 | */ 504 | constructor(r, g, b) { 505 | if( !(( 0 <= r && r <= 255 ) && ( 0 <= g && g <= 255 ) && ( 0 <= b && b <= 255 )) ) throw new Error('Color values out of bounds (0 - 255)') 506 | this.#red = nc(tc(r, "number")); 507 | this.#green = nc(tc(g, "number")); 508 | this.#blue = nc(tc(b, "number")); 509 | this.alpha = 1; 510 | 511 | } 512 | 513 | //#region mix methods 514 | /** 515 | * 516 | * @param {Color} color 517 | * @param {Number} amount 518 | * @returns Color 519 | */ 520 | static saturate(color, amount) { 521 | oc(color, Color); 522 | tc(amount, "number") 523 | let hsl = color.toHsl(); 524 | let h = hsl.h; 525 | let s = clmp(hsl.s + amount, 100, 0); 526 | let l = hsl.l; 527 | return Color.fromHsl(h, s, l); 528 | } 529 | 530 | /** 531 | * 532 | * @param {Number} amount 533 | * @returns Color 534 | */ 535 | saturate(amount) { 536 | return Color.saturate(this, amount); 537 | } 538 | /** 539 | * 540 | * @param {Color} color 541 | * @param {Number} amount 542 | * @returns Color 543 | */ 544 | static desaturate(color, amount) { 545 | oc(color, Color); 546 | tc(amount, "number") 547 | let hsl = color.toHsl(); 548 | let h = hsl.h; 549 | let s = clmp(hsl.s - amount, 100, 0); 550 | let l = hsl.l; 551 | return Color.fromHsl(h, s, l); 552 | } 553 | 554 | /** 555 | * 556 | * @param {Number} amount 557 | * @returns Color 558 | */ 559 | desaturate(amount) { 560 | return Color.desaturate(this, amount); 561 | } 562 | 563 | /** 564 | * 565 | * @param {Color} color 566 | * @returns Color 567 | */ 568 | static grayscale(color) { 569 | return Color.desaturate(color, 100); 570 | } 571 | 572 | /** 573 | * 574 | * @returns Color 575 | */ 576 | grayscale() { 577 | return Color.greyscale(this, 100); 578 | } 579 | 580 | /** 581 | * 582 | * @param {Color} color 583 | * @returns Color 584 | */ 585 | static greyscale(color) { 586 | return Color.desaturate(color, 100); 587 | } 588 | 589 | /** 590 | * 591 | * @returns Color 592 | */ 593 | greyscale() { 594 | return Color.greyscale(this, 100); 595 | } 596 | 597 | /** 598 | * 599 | * @param {Color} color 600 | * @param {Number} amount 601 | * @returns Color 602 | */ 603 | static lighten(color, amount) { 604 | ic(color, Color) 605 | tc(amount, "number") 606 | 607 | const hsl = color.toHsl(); 608 | let h = hsl.h; 609 | let s = hsl.s; 610 | let l = clmp(hsl.l + amount, 100, 0); 611 | 612 | return Color.fromHsl(h, s, l); 613 | } 614 | /** @param {Number} amount */ 615 | lighten(amount) { return Color.lighten(this, amount) } 616 | 617 | /** 618 | * 619 | * @param {Color} color 620 | * @param {Number} amount 621 | * @returns Color 622 | */ 623 | static darken(color, amount) { 624 | return Color.lighten(color, -amount); 625 | } 626 | /** @param { Number } amount */ 627 | darken(amount) { return Color.darken(this, amount) } 628 | 629 | 630 | /** 631 | * 632 | * @param {Color} color 633 | * @param {Number} amount 634 | * @returns Color 635 | */ 636 | static brighten(color, amount) { 637 | let rgb = color.toRgb(); 638 | 639 | rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * - (amount / 100)))); 640 | rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * - (amount / 100)))); 641 | rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * - (amount / 100)))); 642 | 643 | return new Color(rgb.r, rgb.g, rgb.b); 644 | } 645 | 646 | /** 647 | * 648 | * @param {Number} amount 649 | * @returns Color 650 | */ 651 | brighten(amount) { 652 | return Color.brighten(this, amount); 653 | } 654 | 655 | 656 | 657 | /** @param {Color} color @param {Number} angle */ 658 | static shiftHue(color, angle) { 659 | ic(color, Color); 660 | tc(angle, Number) 661 | let { h, s, l } = color.toHsl(); 662 | h = shift(h, angle) 663 | return Color.fromHsl(h, s, l); 664 | } 665 | /** @param {Number} angle */ 666 | shiftHue(angle) { return Color.shiftHue(this, angle) } 667 | 668 | 669 | 670 | /** @param {Color} color1 @param {Color} color2 */ 671 | static multiply(color1, color2) { 672 | ic(color1, Color); 673 | ic(color2, Color); 674 | let { r1, g1, b1 } = color1.toRgb(); 675 | let { r2, g2, b2 } = color2.toRgb(); 676 | 677 | return Color.fromRgb((r1 * r2) / 255, (g1 * g2) / 255, (b1 * b2) / 255); 678 | } 679 | /** @param {Number} angle */ 680 | multiply(color) { return Color.multiply(this, color) } 681 | 682 | 683 | /** @param {Color} color1 @param {Color} color2 @param {Number} amount */ 684 | static mix(color1, color2, amount=50) { 685 | ic(color1, Color); 686 | ic(color1, Color); 687 | tc(amount, "number") 688 | 689 | const rgb1 = color1.toRgb(); 690 | const rgb2 = color2.toRgb(); 691 | 692 | const p = clmp(amount, 100, 0) / 100; 693 | 694 | const r = Math.round(((rgb2.r - rgb1.r) * p) + rgb1.r); 695 | const g = Math.round(((rgb2.g - rgb1.g) * p) + rgb1.g); 696 | const b = Math.round(((rgb2.b - rgb1.b) * p) + rgb1.b); 697 | 698 | return Color.fromRgb(r, g, b); 699 | } 700 | 701 | 702 | /** @param {Color} color1 @param {Color} color2 @param {Number} amount */ 703 | mix(color, amount) { 704 | return Color.mix(this, color, amount); 705 | } 706 | 707 | /** @param {Color} color1 @param {Color} color2 @param {Number} amount */ 708 | static lerp(color1, color2, t=0.5) { 709 | tc(t, "number"); 710 | ic(color1, Color); 711 | ic(color2, Color); 712 | t = clmp(t, 1, 0); 713 | let rgb1 = color1.toRgb(); 714 | let rgb2 = color2.toRgb(); 715 | 716 | let r1 = rgb1.r / 255; 717 | let g1 = rgb1.g / 255; 718 | let b1 = rgb1.b / 255; 719 | 720 | let r2 = rgb2.r / 255; 721 | let g2 = rgb2.g / 255; 722 | let b2 = rgb2.b / 255; 723 | 724 | return Color.fromRgb( 725 | (r1 + (r2 - r1) * t) * 255, 726 | (g1 + (g2 - g1) * t) * 255, 727 | (b1 + (b2 - b1) * t) * 255 728 | ); 729 | } 730 | 731 | /** @param {Color} color @param {Number} amount */ 732 | lerp(color, t) { 733 | return Color.lerp(this, color, t); 734 | } 735 | 736 | 737 | /**@param {Color} color1 @param {Color} color2 */ 738 | static add(color1, color2) { 739 | ic(color1, Color); 740 | ic(color2, Color); 741 | 742 | let rgb1 = color1.toRgb(); 743 | let rgb2 = color2.toRgb(); 744 | 745 | let r1 = rgb1.r; 746 | let g1 = rgb1.g; 747 | let b1 = rgb1.b; 748 | 749 | let r2 = rgb2.r; 750 | let g2 = rgb2.g; 751 | let b2 = rgb2.b; 752 | 753 | return Color.fromRgb( 754 | Math.round((r1 + r2) / 2), 755 | Math.round((g1 + g2) / 2), 756 | Math.round((b1 + b2) / 2), 757 | ) 758 | 759 | } 760 | 761 | /** @param {Color} color */ 762 | add(color) { 763 | return Color.add(this, color); 764 | } 765 | //#endregion 766 | 767 | 768 | //#region from methods 769 | 770 | /** 771 | * 772 | * @param {string} hex 773 | * @returns Color 774 | */ 775 | static fromHex(hex) { 776 | if(!hex.match(/^#?(?:[0-9a-fA-F]{3}){1,2}$/i)) throw new Error('Invalid Hex code: "' + hex + '"'); 777 | let r="0x00"; 778 | let g="0x00"; 779 | let b="0x00"; 780 | if(hex.length == 4) 781 | { 782 | r = "0x" + hex[1] + hex[1]; 783 | g = "0x" + hex[2] + hex[2]; 784 | b = "0x" + hex[3] + hex[3]; 785 | } 786 | else if (hex.length == 3) 787 | { 788 | r = "0x" + hex[0] + hex[0]; 789 | g = "0x" + hex[1] + hex[1]; 790 | b = "0x" + hex[2] + hex[2]; 791 | } 792 | else if(hex.length == 7) 793 | { 794 | r = "0x" + hex[1] + hex[2]; 795 | g = "0x" + hex[3] + hex[4]; 796 | b = "0x" + hex[5] + hex[6]; 797 | } 798 | else if(hex.length == 6) 799 | { 800 | r = "0x" + hex[0] + hex[1]; 801 | g = "0x" + hex[2] + hex[3]; 802 | b = "0x" + hex[4] + hex[5]; 803 | } 804 | 805 | const color = new Color( parseInt(r, 16), parseInt(g, 16), parseInt(b, 16) ); 806 | return color; 807 | 808 | } 809 | 810 | /** 811 | * 812 | * @param {Number} r 813 | * @param {Number} g 814 | * @param {Number} b 815 | * @returns Color 816 | */ 817 | static fromRgb(r, g, b) { 818 | return new Color(r, g, b) 819 | } 820 | 821 | /** 822 | * 823 | * @param {Number} hue 824 | * @param {Number} sat 825 | * @param {Number} lum 826 | * @returns Color 827 | */ 828 | static fromHsl(hue, sat, lum) { 829 | hue = tc(hue, "number") 830 | sat = tc(sat, "number") 831 | lum = tc(lum, "number") 832 | if(!( 0 <= hue && hue <= 360 )) throw new Error('HSL color values out of range, hue (0 - 360)') 833 | if(!( 0 <= sat && sat <= 100 )) throw new Error('HSL color values out of range, sat (0 - 100)') 834 | if(!( 0 <= lum && lum <= 100 )) throw new Error('HSL color values out of range, lum (0 - 100)') 835 | 836 | sat /= 100; 837 | lum /= 100; 838 | 839 | let c = (1 - Math.abs(2 * lum - 1)) * sat; 840 | let x = c * (1 - Math.abs((hue / 60) % 2 - 1)); 841 | let m = lum - c/2; 842 | let r=0; 843 | let g=0; 844 | let b=0; 845 | 846 | if (0 <= hue && hue < 60) { 847 | r = c; g = x; b = 0; 848 | } else if (60 <= hue && hue < 120) { 849 | r = x; g = c; b = 0; 850 | } else if (120 <= hue && hue < 180) { 851 | r = 0; g = c; b = x; 852 | } else if (180 <= hue && hue < 240) { 853 | r = 0; g = x; b = c; 854 | } else if (240 <= hue && hue < 300) { 855 | r = x; g = 0; b = c; 856 | } else if (300 <= hue && hue <= 360) { 857 | r = c; g = 0; b = x; 858 | } 859 | 860 | const red = Math.round((r + m) * 255); 861 | const green = Math.round((g + m) * 255); 862 | const blue = Math.round((b + m) * 255); 863 | 864 | const color = new Color(red, green, blue); 865 | 866 | return color; 867 | } 868 | 869 | /** 870 | * 871 | * @param {Number} hue 872 | * @param {Number} sat 873 | * @param {Number} lum 874 | * @returns Color 875 | */ 876 | static fromHsv(hue, sat, val) { 877 | hue = tc(hue, "number") 878 | sat = tc(sat, "number") 879 | val = tc(val, "number") 880 | if(!( 0 <= hue && hue <= 360 )) throw new Error('HSL color values out of range, hue (0 - 360)') 881 | if(!( 0 <= sat && sat <= 100 )) throw new Error('HSL color values out of range, sat (0 - 100)') 882 | if(!( 0 <= val && val <= 100 )) throw new Error('HSL color values out of range, lum (0 - 100)') 883 | 884 | sat /= 100; 885 | val /= 100; 886 | let c = val * sat; 887 | let x = c * ( 1 - Math.abs( (hue/60) % 2 - 1 ) ); 888 | let m = val - c; 889 | 890 | let r=0; 891 | let g=0; 892 | let b=0; 893 | 894 | if(0 <= hue && hue < 60) 895 | { 896 | r = c; 897 | g = x; 898 | b = 0; 899 | } 900 | 901 | else if(60 <= hue && hue < 120) 902 | { 903 | r = x; 904 | g = c; 905 | b = 0; 906 | } 907 | 908 | else if(120 <= hue && hue < 180) 909 | { 910 | r = 0; 911 | g = c; 912 | b = x; 913 | } 914 | 915 | else if(180 <= hue && hue < 240) 916 | { 917 | r = 0; 918 | g = x; 919 | b = c; 920 | } 921 | 922 | else if(240 <= hue && hue < 300) 923 | { 924 | r = x; 925 | g = 0; 926 | b = c; 927 | } 928 | 929 | else if(300 <= hue && hue <= 360) 930 | { 931 | r = c; 932 | g = 0; 933 | b = x; 934 | } 935 | 936 | const red = ((r + m) * 255); 937 | const green = ((g + m) * 255); 938 | const blue = ((b + m) * 255); 939 | 940 | const color = new Color(red, green, blue); 941 | 942 | return color; 943 | 944 | } 945 | 946 | /** 947 | * 948 | * @param {string} colorString 949 | * @returns Color 950 | */ 951 | static fromCssString(colorString) { 952 | tc(colorString, "string") 953 | var ctx = document.createElement("canvas").getContext("2d"); 954 | ctx.fillStyle = colorString; 955 | const value = ctx.fillStyle; 956 | if(!value) throw new Error("Invalid Color string"); 957 | return Color.fromHex(value); 958 | } 959 | 960 | /** 961 | * 962 | * @param {string} colorName 963 | * @returns {ThisType} 964 | */ 965 | static fromName(colorName) { 966 | colorName = tc(colorName, "string") 967 | const color = this.Colors[colorName.toUpperCase()]; 968 | if(!color) throw new Error('Invalid Color name'); 969 | return color; 970 | } 971 | 972 | //#endregion 973 | 974 | //#region to methods 975 | 976 | /** 977 | * @typedef {Object} hsl 978 | * @property {Number} h - hue 979 | * @property {Number} s - saturation 980 | * @property {Number} l - luminance 981 | */ 982 | /** 983 | * @param {Color} color 984 | * @returns string 985 | */ 986 | static toHex(color) { 987 | color = ic(color, Color); 988 | let r = Math.round(color.#red).toString(16); 989 | let g = Math.round(color.#green).toString(16); 990 | let b = Math.round(color.#blue).toString(16); 991 | 992 | if (r.length == 1){ 993 | r = "0" + r; 994 | } 995 | if (g.length == 1){ 996 | g = "0" + g; 997 | } 998 | if (b.length == 1){ 999 | b = "0" + b; 1000 | } 1001 | 1002 | 1003 | return "#" + r + g + b; 1004 | } 1005 | 1006 | /** 1007 | * 1008 | * @param {Color} color 1009 | * @returns Number[] 1010 | */ 1011 | static toHsl(color) { 1012 | color = ic(color, Color); 1013 | 1014 | let h = 0; 1015 | let s = 0; 1016 | let l = 0; 1017 | 1018 | let r = color.#red / 255; 1019 | let g = color.#green / 255; 1020 | let b = color.#blue / 255; 1021 | 1022 | let cmin = Math.min(Math.min(r, g), b); 1023 | let cmax = Math.max(Math.max(r, g), b); 1024 | let delta = cmax - cmin; 1025 | 1026 | if (delta === 0) 1027 | { 1028 | h = 0; 1029 | } 1030 | 1031 | else if (cmax === r) 1032 | { 1033 | h = ((g - b) / delta) % 6; 1034 | } 1035 | 1036 | else if (cmax === g) 1037 | { 1038 | h = (b - r) / delta + 2; 1039 | } 1040 | 1041 | else 1042 | { 1043 | h = (r - g) / delta + 4; 1044 | } 1045 | 1046 | h = Math.round(h * 60); 1047 | 1048 | if (h < 0) 1049 | { 1050 | h += 360; 1051 | } 1052 | 1053 | l = (cmax + cmin) / 2; 1054 | s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1)); 1055 | s = parseFloat(Math.abs(s * 100)); 1056 | l = parseFloat(Math.abs(l * 100)); 1057 | 1058 | return { h:nc(h), s:nc(s), l:nc(l) }; 1059 | 1060 | } 1061 | 1062 | 1063 | 1064 | /** 1065 | * @typedef {Object} hsv 1066 | * @property {Number} h - hue 1067 | * @property {Number} s - saturation 1068 | * @property {Number} v - value 1069 | */ 1070 | /** 1071 | * @param {Color} color 1072 | * @returns { hsv } 1073 | */ 1074 | static toHsv(color) { 1075 | let h = 0; 1076 | let s = 0; 1077 | let v = 0; 1078 | 1079 | let r = color.#red / 255; 1080 | let g = color.#green / 255; 1081 | let b = color.#blue / 255; 1082 | 1083 | let cmin = Math.min(Math.min(r, g), b); 1084 | let cmax = Math.max(Math.max(r, g), b); 1085 | let delta = cmax - cmin; 1086 | 1087 | if (delta === 0) 1088 | { 1089 | h = 0; 1090 | } 1091 | 1092 | else if (cmax === r) 1093 | { 1094 | h = ((g - b) / delta) % 6; 1095 | } 1096 | 1097 | else if (cmax === g) 1098 | { 1099 | h = (b - r) / delta + 2; 1100 | } 1101 | 1102 | else 1103 | { 1104 | h = (r - g) / delta + 4; 1105 | } 1106 | 1107 | h = Math.round(h * 60); 1108 | 1109 | if (h < 0) 1110 | { 1111 | h += 360; 1112 | } 1113 | 1114 | if(cmax !== 0) 1115 | { 1116 | s = (delta/cmax) * 100; 1117 | } 1118 | 1119 | v = cmax * 100; 1120 | return { h:nc(h), s:nc(s), v:nc(v) }; 1121 | 1122 | } 1123 | 1124 | 1125 | /** 1126 | * @typedef {Object} rgb 1127 | * @property {Number} r - red 1128 | * @property {Number} g - green 1129 | * @property {Number} b - blue 1130 | */ 1131 | /** 1132 | * 1133 | * @param {Color} color 1134 | * @returns { rgb } 1135 | */ 1136 | static toRgb(color) { 1137 | ic(color, Color); 1138 | return { r: color.#red, g: color.#green, b: color.#blue }; 1139 | } 1140 | 1141 | /** 1142 | * @typedef {Object} cmyk 1143 | * @property {Number} c - cyan 1144 | * @property {Number} m - magenta 1145 | * @property {Number} y - yellow 1146 | * @property {Number} k - black 1147 | */ 1148 | /** 1149 | * 1150 | * @param {Color} color 1151 | * @returns { cmyk } 1152 | */ 1153 | static toCmyk(color) { 1154 | ic(color, Color); 1155 | let { r, g, b } = color.toRgb(); 1156 | let c = 1 - (r / 255); 1157 | let m = 1 - (g / 255); 1158 | let y = 1 - (b / 255); 1159 | let k = Math.min(c, Math.min(m, y)); 1160 | 1161 | c = (c - k) / (1 - k); 1162 | m = (m - k) / (1 - k); 1163 | y = (y - k) / (1 - k); 1164 | 1165 | c = nc(Math.round(c * 10000) / 100); 1166 | m = nc(Math.round(m * 10000) / 100); 1167 | y = nc(Math.round(y * 10000) / 100); 1168 | k = nc(Math.round(k * 10000) / 100); 1169 | 1170 | return { c, m, y, k }; 1171 | } 1172 | 1173 | //#endregion 1174 | 1175 | //#region to methods (instance) 1176 | 1177 | /** 1178 | * @typedef {Object} hsl 1179 | * @property {Number} h - hue 1180 | * @property {Number} s - saturation 1181 | * @property {Number} l - luminance 1182 | */ 1183 | /** @returns { hsl } */ 1184 | toHsl() { 1185 | return Color.toHsl(this); 1186 | } 1187 | 1188 | /** 1189 | * @typedef {Object} hsv 1190 | * @property {Number} h - hue 1191 | * @property {Number} s - saturation 1192 | * @property {Number} v - value 1193 | */ 1194 | /** @returns { hsv } */ 1195 | toHsv() { 1196 | return Color.toHsv(this); 1197 | } 1198 | 1199 | /** @returns string */ 1200 | toHex() { 1201 | return Color.toHex(this); 1202 | } 1203 | 1204 | /** 1205 | * @returns {rgb} 1206 | */ 1207 | toRgb() { 1208 | return Color.toRgb(this); 1209 | } 1210 | 1211 | /** 1212 | * @returns {cmyk} 1213 | */ 1214 | toCmyk() { 1215 | return Color.toCmyk(this); 1216 | } 1217 | 1218 | 1219 | 1220 | //#endregion 1221 | 1222 | static random() { 1223 | const r = Math.floor(Math.random() * 255) 1224 | const g = Math.floor(Math.random() * 255) 1225 | const b = Math.floor(Math.random() * 255) 1226 | return new Color(r,g,b) 1227 | } 1228 | 1229 | toString(type="hex") { 1230 | tc(type, "string"); 1231 | const rgb = this.toRgb(); 1232 | const hsl = this.toHsl(); 1233 | switch(type.toLowerCase()) { 1234 | case "hex": 1235 | return this.toHex(); 1236 | 1237 | case "hexa": 1238 | let a = Math.round(this.alpha * 255).toString(16); 1239 | if(a.length === 1) { a = "0" + a; }; 1240 | return this.toHex() + a; 1241 | 1242 | case "rgb": 1243 | return `rgb(${Math.round(rgb.r)}, ${Math.round(rgb.g)}, ${Math.round(rgb.b)})` ; 1244 | 1245 | 1246 | case "rgba": 1247 | return `rgba(${Math.round(rgb.r)}, ${Math.round(rgb.g)}, ${Math.round(rgb.b)}, ${this.alpha})` ; 1248 | 1249 | case "hsl": 1250 | return `hsl(${Math.round(hsl.h)}, ${Math.round(hsl.s)}%, ${Math.round(hsl.l)}%)` ; 1251 | 1252 | 1253 | case "hsla": 1254 | return `hsla(${Math.round(hsl.h)}, ${Math.round(hsl.s)}%, ${Math.round(hsl.l)}%, ${this.alpha})` ; 1255 | 1256 | case "hsv": 1257 | const hsv = this.toHsv(); 1258 | return `hsv(${Math.round(hsv.h)}, ${Math.round(hsv.s)}%, ${Math.round(hsv.v)}%)` ; 1259 | 1260 | case "cmyk": 1261 | const cmyk = this.toCmyk(); 1262 | return `cmyk(${Math.round(cmyk.c)}%, ${Math.round(cmyk.m)}%, ${Math.round(cmyk.y)}%, ${Math.round(cmyk.k)}%)` ; 1263 | 1264 | default: 1265 | "Can't convert Color to given string type"; 1266 | 1267 | } 1268 | } 1269 | 1270 | valueOf() { 1271 | return parseInt("0x" + this.toHex().slice(1)); 1272 | } 1273 | 1274 | } 1275 | 1276 | 1277 | export default Color; 1278 | // module.exports = Color; -------------------------------------------------------------------------------- /dist/extension.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.js","mappings":"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","sources":["webpack://vscode-color-picker/./node_modules/color-name/index.js","webpack://vscode-color-picker/./node_modules/hex-rgb/index.js","webpack://vscode-color-picker/./node_modules/parse-css-color/dist/index.esm.js","webpack://vscode-color-picker/./src/color.js","webpack://vscode-color-picker/external commonjs \"vscode\"","webpack://vscode-color-picker/webpack/bootstrap","webpack://vscode-color-picker/webpack/runtime/compat get default export","webpack://vscode-color-picker/webpack/runtime/define property getters","webpack://vscode-color-picker/webpack/runtime/hasOwnProperty shorthand","webpack://vscode-color-picker/webpack/runtime/make namespace object","webpack://vscode-color-picker/./src/extension.ts"],"sourcesContent":["'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","'use strict';\n\nconst hexCharacters = 'a-f\\\\d';\nconst match3or4Hex = `#?[${hexCharacters}]{3}[${hexCharacters}]?`;\nconst match6or8Hex = `#?[${hexCharacters}]{6}([${hexCharacters}]{2})?`;\nconst nonHexChars = new RegExp(`[^#${hexCharacters}]`, 'gi');\nconst validHexSize = new RegExp(`^${match3or4Hex}$|^${match6or8Hex}$`, 'i');\n\nmodule.exports = (hex, options = {}) => {\n\tif (typeof hex !== 'string' || nonHexChars.test(hex) || !validHexSize.test(hex)) {\n\t\tthrow new TypeError('Expected a valid hex string');\n\t}\n\n\thex = hex.replace(/^#/, '');\n\tlet alphaFromHex = 1;\n\n\tif (hex.length === 8) {\n\t\talphaFromHex = Number.parseInt(hex.slice(6, 8), 16) / 255;\n\t\thex = hex.slice(0, 6);\n\t}\n\n\tif (hex.length === 4) {\n\t\talphaFromHex = Number.parseInt(hex.slice(3, 4).repeat(2), 16) / 255;\n\t\thex = hex.slice(0, 3);\n\t}\n\n\tif (hex.length === 3) {\n\t\thex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n\t}\n\n\tconst number = Number.parseInt(hex, 16);\n\tconst red = number >> 16;\n\tconst green = (number >> 8) & 255;\n\tconst blue = number & 255;\n\tconst alpha = typeof options.alpha === 'number' ? options.alpha : alphaFromHex;\n\n\tif (options.format === 'array') {\n\t\treturn [red, green, blue, alpha];\n\t}\n\n\tif (options.format === 'css') {\n\t\tconst alphaString = alpha === 1 ? '' : ` / ${Number((alpha * 100).toFixed(2))}%`;\n\t\treturn `rgb(${red} ${green} ${blue}${alphaString})`;\n\t}\n\n\treturn {red, green, blue, alpha};\n};\n","import colorName from 'color-name';\nimport hex2Rgb from 'hex-rgb';\n\nconst pattern = /^#([a-f0-9]{3,4}|[a-f0-9]{4}(?:[a-f0-9]{2}){1,2})\\b$/;\nvar hexRe = new RegExp(pattern, 'i');\n\nconst float = '-?\\\\d*(?:\\\\.\\\\d+)';\n\nconst number = `(${float}?)`;\nconst percentage = `(${float}?%)`;\nconst numberOrPercentage = `(${float}?%?)`;\n\nconst pattern$1 = `^\n hsla?\\\\(\n \\\\s*(-?\\\\d*(?:\\\\.\\\\d+)?(?:deg|rad|turn)?)\\\\s*,\n \\\\s*${percentage}\\\\s*,\n \\\\s*${percentage}\\\\s*\n (?:,\\\\s*${numberOrPercentage}\\\\s*)?\n \\\\)\n $\n`.replace(/\\n|\\s/g, '');\n\nvar hsl3Re = new RegExp(pattern$1);\n\nconst pattern$2 = `^\n hsla?\\\\(\n \\\\s*(-?\\\\d*(?:\\\\.\\\\d+)?(?:deg|rad|turn)?)\\\\s*\n \\\\s+${percentage}\n \\\\s+${percentage}\n \\\\s*(?:\\\\s*\\\\/\\\\s*${numberOrPercentage}\\\\s*)?\n \\\\)\n $\n`.replace(/\\n|\\s/g, '');\n\nvar hsl4Re = new RegExp(pattern$2);\n\nconst pattern$3 = `^\n rgba?\\\\(\n \\\\s*${number}\\\\s*,\n \\\\s*${number}\\\\s*,\n \\\\s*${number}\\\\s*\n (?:,\\\\s*${numberOrPercentage}\\\\s*)?\n \\\\)\n $\n`.replace(/\\n|\\s/g, '');\n\nvar rgb3NumberRe = new RegExp(pattern$3);\n\nconst pattern$4 = `^\n rgba?\\\\(\n \\\\s*${percentage}\\\\s*,\n \\\\s*${percentage}\\\\s*,\n \\\\s*${percentage}\\\\s*\n (?:,\\\\s*${numberOrPercentage}\\\\s*)?\n \\\\)\n $\n`.replace(/\\n|\\s/g, '');\n\nvar rgb3PercentageRe = new RegExp(pattern$4);\n\nconst pattern$5 = `^\n rgba?\\\\(\n \\\\s*${number}\n \\\\s+${number}\n \\\\s+${number}\n \\\\s*(?:\\\\s*\\\\/\\\\s*${numberOrPercentage}\\\\s*)?\n \\\\)\n$\n`.replace(/\\n|\\s/g, '');\n\nvar rgb4NumberRe = new RegExp(pattern$5);\n\nconst pattern$6 = `^\n rgba?\\\\(\n \\\\s*${percentage}\n \\\\s+${percentage}\n \\\\s+${percentage}\n \\\\s*(?:\\\\s*\\\\/\\\\s*${numberOrPercentage}\\\\s*)?\n \\\\)\n$\n`.replace(/\\n|\\s/g, '');\n\nvar rgb4PercentageRe = new RegExp(pattern$6);\n\nconst pattern$7 = /^transparent$/;\nvar transparentRe = new RegExp(pattern$7, 'i');\n\nconst clamp = (num, min, max) => Math.min(Math.max(min, num), max);\n\n/* 500 => 255, -10 => 0, 128 => 128 */\nconst parseRGB = (num) => {\n let n = num;\n if (typeof n !== 'number') n = n.endsWith('%') ? (parseFloat(n) * 255) / 100 : parseFloat(n);\n return clamp(Math.round(n), 0, 255);\n};\n\n/* 200 => 100, -100 => 0, 50 => 50 */\nconst parsePercentage = (percentage) => clamp(parseFloat(percentage), 0, 100);\n\n/* '50%' => 5.0, 200 => 1, -10 => 0 */\nfunction parseAlpha(alpha) {\n let a = alpha;\n if (typeof a !== 'number') a = a.endsWith('%') ? parseFloat(a) / 100 : parseFloat(a);\n return clamp(a, 0, 1);\n}\n\nfunction getHEX(hex) {\n const [r, g, b, a] = hex2Rgb(hex, { format: 'array' });\n return getRGB([null, ...[r, g, b, a]]);\n}\n\nfunction getHSL([, h, s, l, a = 1]) {\n let hh = h;\n if (hh.endsWith('turn')) {\n hh = (parseFloat(hh) * 360) / 1;\n } else if (hh.endsWith('rad')) {\n hh = Math.round((parseFloat(hh) * 180) / Math.PI);\n } else {\n hh = parseFloat(hh);\n }\n return {\n type: 'hsl',\n values: [hh, parsePercentage(s), parsePercentage(l)],\n alpha: parseAlpha(a === null ? 1 : a)\n };\n}\n\nfunction getRGB([, r, g, b, a = 1]) {\n return {\n type: 'rgb',\n values: [r, g, b].map(parseRGB),\n alpha: parseAlpha(a === null ? 1 : a)\n };\n}\n\n/**\n * parse-css-color\n * @version v0.1.2\n * @link http://github.com/noeldelgado/parse-css-color/\n * @license MIT\n */\n\nconst parseCSSColor = (str) => {\n if (typeof str !== 'string') return null;\n\n const hex = hexRe.exec(str);\n if (hex) return getHEX(hex[0]);\n\n const hsl = hsl4Re.exec(str) || hsl3Re.exec(str);\n if (hsl) return getHSL(hsl);\n\n const rgb =\n rgb4NumberRe.exec(str) ||\n rgb4PercentageRe.exec(str) ||\n rgb3NumberRe.exec(str) ||\n rgb3PercentageRe.exec(str);\n if (rgb) return getRGB(rgb);\n\n if (transparentRe.exec(str)) return getRGB([null, 0, 0, 0, 0]);\n\n const cn = colorName[str.toLowerCase()];\n if (cn) return getRGB([null, cn[0], cn[1], cn[2], 1]);\n\n return null;\n};\n\nexport default parseCSSColor;\n","\"use-strict\"\r\n\r\n\r\n\r\n\r\n/**\r\n * \r\n * @param {Any} value \r\n * @param {type} type \r\n */\r\nfunction tc(value, type) {\r\n if(!(typeof value == type)) throw new TypeError(`required type ${type} got ${typeof value}`);\r\n return value\r\n}\r\n\r\nfunction ic(value, type) {\r\n if(! value instanceof type) throw new TypeError(`required type ${type} got ${typeof value}`);\r\n return value\r\n}\r\n\r\nfunction nc(value) {\r\n if(isNaN(value)) return 0;\r\n return value;\r\n}\r\n\r\nfunction oc(options) {\r\n const new_options = {\r\n angle: options ? (options.angle ? options.angle : 15) : 15,\r\n results: options ? (options.results ? options.results : 3) : 3,\r\n }\r\n return new_options\r\n}\r\n\r\nfunction clmp(value, max, min) {\r\n if(min !== undefined && value < min) {\r\n return min;\r\n }\r\n if(value > max) {\r\n return max;\r\n }\r\n return value;\r\n}\r\n\r\nfunction shift(h, angle){\r\n h += angle;\r\n while (h >= 360.0) h -= 360.0;\r\n while (h < 0.0) h += 360.0;\r\n return h;\r\n}\r\n\r\nclass Color {\r\n\r\n \r\n \r\n #red;\r\n #green;\r\n #blue;\r\n\r\n //#region color names\r\n\r\n static Colors = class {\r\n static get BLACK() { return Color.fromHex(\"#000000\"); }\r\n static get SILVER() { return Color.fromHex(\"#c0c0c0\"); }\r\n static get GRAY() { return Color.fromHex(\"#808080\"); }\r\n static get WHITE() { return Color.fromHex(\"#ffffff\"); }\r\n static get MAROON() { return Color.fromHex(\"#800000\"); }\r\n static get RED() { return Color.fromHex(\"#ff0000\"); }\r\n static get PURPLE() { return Color.fromHex(\"#800080\"); }\r\n static get FUCHSIA() { return Color.fromHex(\"#ff00ff\"); }\r\n static get GREEN() { return Color.fromHex(\"#008000\"); }\r\n static get LIME() { return Color.fromHex(\"#00ff00\"); }\r\n static get OLIVE() { return Color.fromHex(\"#808000\"); }\r\n static get YELLOW() { return Color.fromHex(\"#ffff00\"); }\r\n static get NAVY() { return Color.fromHex(\"#000080\"); }\r\n static get BLUE() { return Color.fromHex(\"#0000ff\"); }\r\n static get TEAL() { return Color.fromHex(\"#008080\"); }\r\n static get AQUA() { return Color.fromHex(\"#00ffff\"); }\r\n static get ORANGE() { return Color.fromHex(\"#ffa500\"); }\r\n static get ALICEBLUE() { return Color.fromHex(\"#f0f8ff\"); }\r\n static get ANTIQUEWHITE() { return Color.fromHex(\"#faebd7\"); }\r\n static get AQUAMARINE() { return Color.fromHex(\"#7fffd4\"); }\r\n static get AZURE() { return Color.fromHex(\"#f0ffff\"); }\r\n static get BEIGE() { return Color.fromHex(\"#f5f5dc\"); }\r\n static get BISQUE() { return Color.fromHex(\"#ffe4c4\"); }\r\n static get BLANCHEDALMOND() { return Color.fromHex(\"#ffebcd\"); }\r\n static get BLUEVIOLET() { return Color.fromHex(\"#8a2be2\"); }\r\n static get BROWN() { return Color.fromHex(\"#a52a2a\"); }\r\n static get BURLYWOOD() { return Color.fromHex(\"#deb887\"); }\r\n static get CADETBLUE() { return Color.fromHex(\"#5f9ea0\"); }\r\n static get CHARTREUSE() { return Color.fromHex(\"#7fff00\"); }\r\n static get CHOCOLATE() { return Color.fromHex(\"#d2691e\"); }\r\n static get CORAL() { return Color.fromHex(\"#ff7f50\"); }\r\n static get CORNFLOWERBLUE() { return Color.fromHex(\"#6495ed\"); }\r\n static get CORNSILK() { return Color.fromHex(\"#fff8dc\"); }\r\n static get CRIMSON() { return Color.fromHex(\"#dc143c\"); }\r\n static get CYAN() { return Color.fromHex(\"#00ffff\"); }\r\n static get DARKBLUE() { return Color.fromHex(\"#00008b\"); }\r\n static get DARKCYAN() { return Color.fromHex(\"#008b8b\"); }\r\n static get DARKGOLDENROD() { return Color.fromHex(\"#b8860b\"); }\r\n static get DARKGRAY() { return Color.fromHex(\"#a9a9a9\"); }\r\n static get DARKGREEN() { return Color.fromHex(\"#006400\"); }\r\n static get DARKGREY() { return Color.fromHex(\"#a9a9a9\"); }\r\n static get DARKKHAKI() { return Color.fromHex(\"#bdb76b\"); }\r\n static get DARKMAGENTA() { return Color.fromHex(\"#8b008b\"); }\r\n static get DARKOLIVEGREEN() { return Color.fromHex(\"#556b2f\"); }\r\n static get DARKORANGE() { return Color.fromHex(\"#ff8c00\"); }\r\n static get DARKORCHID() { return Color.fromHex(\"#9932cc\"); }\r\n static get DARKRED() { return Color.fromHex(\"#8b0000\"); }\r\n static get DARKSALMON() { return Color.fromHex(\"#e9967a\"); }\r\n static get DARKSEAGREEN() { return Color.fromHex(\"#8fbc8f\"); }\r\n static get DARKSLATEBLUE() { return Color.fromHex(\"#483d8b\"); }\r\n static get DARKSLATEGRAY() { return Color.fromHex(\"#2f4f4f\"); }\r\n static get DARKSLATEGREY() { return Color.fromHex(\"#2f4f4f\"); }\r\n static get DARKTURQUOISE() { return Color.fromHex(\"#00ced1\"); }\r\n static get DARKVIOLET() { return Color.fromHex(\"#9400d3\"); }\r\n static get DEEPPINK() { return Color.fromHex(\"#ff1493\"); }\r\n static get DEEPSKYBLUE() { return Color.fromHex(\"#00bfff\"); }\r\n static get DIMGRAY() { return Color.fromHex(\"#696969\"); }\r\n static get DIMGREY() { return Color.fromHex(\"#696969\"); }\r\n static get DODGERBLUE() { return Color.fromHex(\"#1e90ff\"); }\r\n static get FIREBRICK() { return Color.fromHex(\"#b22222\"); }\r\n static get FLORALWHITE() { return Color.fromHex(\"#fffaf0\"); }\r\n static get FORESTGREEN() { return Color.fromHex(\"#228b22\"); }\r\n static get GAINSBORO() { return Color.fromHex(\"#dcdcdc\"); }\r\n static get GHOSTWHITE() { return Color.fromHex(\"#f8f8ff\"); }\r\n static get GOLD() { return Color.fromHex(\"#ffd700\"); }\r\n static get GOLDENROD() { return Color.fromHex(\"#daa520\"); }\r\n static get GREENYELLOW() { return Color.fromHex(\"#adff2f\"); }\r\n static get GREY() { return Color.fromHex(\"#808080\"); }\r\n static get HONEYDEW() { return Color.fromHex(\"#f0fff0\"); }\r\n static get HOTPINK() { return Color.fromHex(\"#ff69b4\"); }\r\n static get INDIANRED() { return Color.fromHex(\"#cd5c5c\"); }\r\n static get INDIGO() { return Color.fromHex(\"#4b0082\"); }\r\n static get IVORY() { return Color.fromHex(\"#fffff0\"); }\r\n static get KHAKI() { return Color.fromHex(\"#f0e68c\"); }\r\n static get LAVENDER() { return Color.fromHex(\"#e6e6fa\"); }\r\n static get LAVENDERBLUSH() { return Color.fromHex(\"#fff0f5\"); }\r\n static get LAWNGREEN() { return Color.fromHex(\"#7cfc00\"); }\r\n static get LEMONCHIFFON() { return Color.fromHex(\"#fffacd\"); }\r\n static get LIGHTBLUE() { return Color.fromHex(\"#add8e6\"); }\r\n static get LIGHTCORAL() { return Color.fromHex(\"#f08080\"); }\r\n static get LIGHTCYAN() { return Color.fromHex(\"#e0ffff\"); }\r\n static get LIGHTGOLDENRODYELLOW() { return Color.fromHex(\"#fafad2\"); }\r\n static get LIGHTGRAY() { return Color.fromHex(\"#d3d3d3\"); }\r\n static get LIGHTGREEN() { return Color.fromHex(\"#90ee90\"); }\r\n static get LIGHTGREY() { return Color.fromHex(\"#d3d3d3\"); }\r\n static get LIGHTPINK() { return Color.fromHex(\"#ffb6c1\"); }\r\n static get LIGHTSALMON() { return Color.fromHex(\"#ffa07a\"); }\r\n static get LIGHTSEAGREEN() { return Color.fromHex(\"#20b2aa\"); }\r\n static get LIGHTSKYBLUE() { return Color.fromHex(\"#87cefa\"); }\r\n static get LIGHTSLATEGRAY() { return Color.fromHex(\"#778899\"); }\r\n static get LIGHTSLATEGREY() { return Color.fromHex(\"#778899\"); }\r\n static get LIGHTSTEELBLUE() { return Color.fromHex(\"#b0c4de\"); }\r\n static get LIGHTYELLOW() { return Color.fromHex(\"#ffffe0\"); }\r\n static get LIMEGREEN() { return Color.fromHex(\"#32cd32\"); }\r\n static get LINEN() { return Color.fromHex(\"#faf0e6\"); }\r\n static get MAGENTA() { return Color.fromHex(\"#ff00ff\"); }\r\n static get FUCHSIA() { return Color.fromHex(\"#ff00ff\"); }\r\n static get MEDIUMAQUAMARINE() { return Color.fromHex(\"#66cdaa\"); }\r\n static get MEDIUMBLUE() { return Color.fromHex(\"#0000cd\"); }\r\n static get MEDIUMORCHID() { return Color.fromHex(\"#ba55d3\"); }\r\n static get MEDIUMPURPLE() { return Color.fromHex(\"#9370db\"); }\r\n static get MEDIUMSEAGREEN() { return Color.fromHex(\"#3cb371\"); }\r\n static get MEDIUMSLATEBLUE() { return Color.fromHex(\"#7b68ee\"); }\r\n static get MEDIUMSPRINGGREEN() { return Color.fromHex(\"#00fa9a\"); }\r\n static get MEDIUMTURQUOISE() { return Color.fromHex(\"#48d1cc\"); }\r\n static get MEDIUMVIOLETRED() { return Color.fromHex(\"#c71585\"); }\r\n static get MIDNIGHTBLUE() { return Color.fromHex(\"#191970\"); }\r\n static get MINTCREAM() { return Color.fromHex(\"#f5fffa\"); }\r\n static get MISTYROSE() { return Color.fromHex(\"#ffe4e1\"); }\r\n static get MOCCASIN() { return Color.fromHex(\"#ffe4b5\"); }\r\n static get NAVAJOWHITE() { return Color.fromHex(\"#ffdead\"); }\r\n static get OLDLACE() { return Color.fromHex(\"#fdf5e6\"); }\r\n static get OLIVEDRAB() { return Color.fromHex(\"#6b8e23\"); }\r\n static get ORANGERED() { return Color.fromHex(\"#ff4500\"); }\r\n static get ORCHID() { return Color.fromHex(\"#da70d6\"); }\r\n static get PALEGOLDENROD() { return Color.fromHex(\"#eee8aa\"); }\r\n static get PALEGREEN() { return Color.fromHex(\"#98fb98\"); }\r\n static get PALETURQUOISE() { return Color.fromHex(\"#afeeee\"); }\r\n static get PALEVIOLETRED() { return Color.fromHex(\"#db7093\"); }\r\n static get PAPAYAWHIP() { return Color.fromHex(\"#ffefd5\"); }\r\n static get PEACHPUFF() { return Color.fromHex(\"#ffdab9\"); }\r\n static get PERU() { return Color.fromHex(\"#cd853f\"); }\r\n static get PINK() { return Color.fromHex(\"#ffc0cb\"); }\r\n static get PLUM() { return Color.fromHex(\"#dda0dd\"); }\r\n static get POWDERBLUE() { return Color.fromHex(\"#b0e0e6\"); }\r\n static get ROSYBROWN() { return Color.fromHex(\"#bc8f8f\"); }\r\n static get ROYALBLUE() { return Color.fromHex(\"#4169e1\"); }\r\n static get SADDLEBROWN() { return Color.fromHex(\"#8b4513\"); }\r\n static get SALMON() { return Color.fromHex(\"#fa8072\"); }\r\n static get SANDYBROWN() { return Color.fromHex(\"#f4a460\"); }\r\n static get SEAGREEN() { return Color.fromHex(\"#2e8b57\"); }\r\n static get SEASHELL() { return Color.fromHex(\"#fff5ee\"); }\r\n static get SIENNA() { return Color.fromHex(\"#a0522d\"); }\r\n static get SKYBLUE() { return Color.fromHex(\"#87ceeb\"); }\r\n static get SLATEBLUE() { return Color.fromHex(\"#6a5acd\"); }\r\n static get SLATEGRAY() { return Color.fromHex(\"#708090\"); }\r\n static get SLATEGREY() { return Color.fromHex(\"#708090\"); }\r\n static get SNOW() { return Color.fromHex(\"#fffafa\"); }\r\n static get SPRINGGREEN() { return Color.fromHex(\"#00ff7f\"); }\r\n static get STEELBLUE() { return Color.fromHex(\"#4682b4\"); }\r\n static get TAN() { return Color.fromHex(\"#d2b48c\"); }\r\n static get THISTLE() { return Color.fromHex(\"#d8bfd8\"); }\r\n static get TOMATO() { return Color.fromHex(\"#ff6347\"); }\r\n static get TURQUOISE() { return Color.fromHex(\"#40e0d0\"); }\r\n static get VIOLET() { return Color.fromHex(\"#ee82ee\"); }\r\n static get WHEAT() { return Color.fromHex(\"#f5deb3\"); }\r\n static get WHITESMOKE() { return Color.fromHex(\"#f5f5f5\"); }\r\n static get YELLOWGREEN() { return Color.fromHex(\"#9acd32\"); }\r\n static get REBECCAPURPLE() { return Color.fromHex(\"#663399\"); }\r\n \r\n \r\n }\r\n \r\n //#endregion color names\r\n\r\n //#region scheme\r\n\r\n getScheme(name, options) {\r\n return Color.createScheme(this, name, options)\r\n }\r\n\r\n static getScheme(color, name, options) {\r\n return Color.createScheme(color, name, options)\r\n }\r\n\r\n /**\r\n * \r\n * @param {Color} color \r\n * @param {Object} options \r\n * @returns Color[]\r\n */\r\n static monochromatic(color, options){\r\n ic(color, Color);\r\n let results = oc(options).results || 3;\r\n let hsv = Color.toHsv(color);\r\n let h = hsv.h,\r\n s = hsv.s,\r\n v = hsv.v / 100;\r\n let result = [];\r\n let mod = 1 / results;\r\n\r\n\r\n while (results--) {\r\n result.push(Color.fromHsv(h, s, clmp(v * 100, 100, 0)));\r\n v = (v - mod) % 1;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n monochromatic(options) {\r\n return Color.monochromatic(this, options);\r\n }\r\n\r\n /**\r\n * \r\n * @param {Color} color \r\n * @returns Color\r\n */\r\n static complementary(color){\r\n ic(color, Color);\r\n let hsl = Color.toHsl(color);\r\n let h = hsl.h,\r\n s = hsl.s,\r\n l = hsl.l;\r\n \r\n return Color.fromHsl(shift(h, 180), s, l)\r\n\r\n }\r\n\r\n complementary() {\r\n return Color.complementary(this);\r\n }\r\n\r\n /**\r\n * \r\n * @param {Color} color \r\n * @param {Object} options\r\n * @returns Color[3]\r\n */\r\n static splitComplementary(color, options){\r\n ic(color, Color);\r\n let hsl = Color.toHsl(color);\r\n let angle = oc(options).angle || 15;\r\n let h = hsl.h,\r\n s = hsl.s,\r\n l = hsl.l;\r\n \r\n const result = [\r\n color,\r\n Color.fromHsl(shift(h, 180 + angle), s, l),\r\n Color.fromHsl(shift(h, 180 - angle), s, l),\r\n ]\r\n\r\n return result;\r\n\r\n }\r\n\r\n splitComplementary(options) {\r\n return Color.splitComplementary(this, options);\r\n }\r\n\r\n /**\r\n * \r\n * @param {Color} color \r\n * @param {Object} options\r\n * @returns Color[4]\r\n */\r\n static doubleComplementary(color, options) {\r\n ic(color, Color);\r\n let hsl = Color.toHsl(color);\r\n let angle = oc(options).angle || 15;\r\n let h = hsl.h,\r\n s = hsl.s,\r\n l = hsl.l;\r\n const result = [\r\n color,\r\n Color.fromHsl(shift(h, 180), s, l),\r\n Color.fromHsl(shift(h, angle), s, l),\r\n Color.fromHsl(shift(h, 180 + angle), s, l),\r\n ]\r\n return result\r\n }\r\n\r\n doubleComplementary(options) {\r\n return Color.doubleComplementary(this, options)\r\n }\r\n\r\n /**\r\n * \r\n * @param {Color} color \r\n * @returns Color[4]\r\n */\r\n static square(color) {\r\n ic(color, Color);\r\n let hsl = Color.toHsl(color);\r\n let h = hsl.h,\r\n s = hsl.s,\r\n l = hsl.l;\r\n const result = [ color ]\r\n\r\n for (let i = 1; i < 4; i++) {\r\n h = shift(h, 90);\r\n result.push(Color.fromHsl(h, s, l));\r\n }\r\n\r\n return result\r\n }\r\n\r\n square() {\r\n return Color.square(this)\r\n }\r\n\r\n /**\r\n * \r\n * @param {Color} color \r\n * @param {Object} options\r\n * @returns Color[4]\r\n */\r\n static tetradic(color, options) {\r\n ic(color, Color);\r\n let hsl = Color.toHsl(color);\r\n let angle = oc(options).angle;\r\n let h = hsl.h,\r\n s = hsl.s,\r\n l = hsl.l;\r\n return [\r\n color, \r\n Color.fromHsl(shift(h, 180), s, l),\r\n Color.fromHsl(shift(h, 180 - angle), s, l),\r\n Color.fromHsl(shift(h, -angle), s, l)\r\n ]\r\n }\r\n\r\n tetradic(options) {\r\n return Color.tetradic(this, options)\r\n }\r\n\r\n\r\n /**\r\n * \r\n * @param {Color} color \r\n * @returns Color[3]\r\n */\r\n static triadic(color) {\r\n ic(color, Color);\r\n let hsl = Color.toHsl(color);\r\n let h = hsl.h,\r\n s = hsl.s,\r\n l = hsl.l;\r\n return [\r\n color, \r\n Color.fromHsl(shift(h, 120), s, l),\r\n Color.fromHsl(shift(h, 240), s, l)\r\n ]\r\n }\r\n\r\n triadic() {\r\n return Color.triadic(this)\r\n }\r\n\r\n /**\r\n * \r\n * @param {Color} color \r\n * @param {Object} options\r\n * @returns Color[3]\r\n */\r\n static analogous(color, options) {\r\n ic(color, Color);\r\n let hsl = Color.toHsl(color);\r\n let angle = oc(options).angle;\r\n let h = hsl.h,\r\n s = hsl.s,\r\n l = hsl.l;\r\n return [\r\n color, \r\n Color.fromHsl(shift(h, -angle), s, l),\r\n Color.fromHsl(shift(h, +angle), s, l)\r\n ]\r\n }\r\n\r\n analogous(options) {\r\n return Color.analogous(this, options)\r\n }\r\n\r\n static materialPalette(color, options) {\r\n var opt = oc(options);\r\n var baseLight = opt.baseLight;\r\n var baseDark = opt.baseDark === \"self\" || !opt.baseDark ? this.multiply(color, color) : opt.baseDark;\r\n\r\n return {\r\n \"50\": Color.mix(baseLight, color, 10),\r\n \"100\": Color.mix(baseLight, color, 30),\r\n \"200\": Color.mix(baseLight, color, 50),\r\n \"300\": Color.mix(baseLight, color, 70),\r\n \"400\": Color.mix(baseLight, color, 85),\r\n \"500\": Color.mix(baseLight, color, 100),\r\n \"600\": Color.mix(baseDark, color, 92),\r\n \"700\": Color.mix(baseDark, color, 83),\r\n \"800\": Color.mix(baseDark, color, 74),\r\n \"900\": Color.mix(baseDark, color, 65),\r\n\r\n \"A100\": Color.lighten(Color.saturate(Color.mix(baseDark, color, 15), 80), 65),\r\n \"A200\": Color.lighten(Color.saturate(Color.mix(baseDark, color, 15), 80), 55),\r\n \"A400\": Color.lighten(Color.saturate(Color.mix(baseLight, color, 100), 55), 10),\r\n \"A700\": Color.lighten(Color.saturate(Color.mix(baseDark, color, 83), 65), 10)\r\n };\r\n }\r\n\r\n materialPalette(options) {\r\n return Color.materialPalette(this, options);\r\n }\r\n\r\n\r\n \r\n /**\r\n * \r\n * @param {Color} color \r\n * @param {string} name \r\n * @param {object} options \r\n * @returns \r\n */\r\n static createScheme(color, name, options){\r\n switch (name.toLowerCase()) {\r\n case \"analogous\":\r\n case \"analog\": return Color.analogous(color);\r\n\r\n case \"triadic\":\r\n case \"triad\": return Color.triadic(color);\r\n\r\n case \"tetradic\":\r\n case \"tetra\": return Color.tetradic(color);\r\n\r\n case \"monochromatic\":\r\n case \"monochrome\":\r\n case \"mono\": return Color.monochromatic(color, options);\r\n\r\n case \"complementary\":\r\n case \"complement\":\r\n case \"comp\": return Color.complementary(color);\r\n\r\n case \"double-complementary\":\r\n case \"double-complement\":\r\n case \"double\": return Color.doubleComplementary(color);\r\n\r\n case \"split-complementary\":\r\n case \"split-complement\":\r\n case \"split\": return Color.splitComplementary(color);\r\n\r\n case \"square\": return Color.square(color);\r\n case \"material\": return Color.materialPalette(color);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n /**\r\n * \r\n * @param {Number} r \r\n * @param {Number} g \r\n * @param {Number} b \r\n */\r\n constructor(r, g, b) {\r\n if( !(( 0 <= r && r <= 255 ) && ( 0 <= g && g <= 255 ) && ( 0 <= b && b <= 255 )) ) throw new Error('Color values out of bounds (0 - 255)')\r\n this.#red = nc(tc(r, \"number\"));\r\n this.#green = nc(tc(g, \"number\"));\r\n this.#blue = nc(tc(b, \"number\"));\r\n this.alpha = 1;\r\n\r\n }\r\n\r\n //#region mix methods\r\n /**\r\n * \r\n * @param {Color} color \r\n * @param {Number} amount \r\n * @returns Color\r\n */\r\n static saturate(color, amount) {\r\n oc(color, Color);\r\n tc(amount, \"number\")\r\n let hsl = color.toHsl();\r\n let h = hsl.h;\r\n let s = clmp(hsl.s + amount, 100, 0);\r\n let l = hsl.l;\r\n return Color.fromHsl(h, s, l);\r\n }\r\n\r\n /**\r\n * \r\n * @param {Number} amount \r\n * @returns Color \r\n */\r\n saturate(amount) {\r\n return Color.saturate(this, amount);\r\n }\r\n /**\r\n * \r\n * @param {Color} color \r\n * @param {Number} amount \r\n * @returns Color\r\n */\r\n static desaturate(color, amount) {\r\n oc(color, Color);\r\n tc(amount, \"number\")\r\n let hsl = color.toHsl();\r\n let h = hsl.h;\r\n let s = clmp(hsl.s - amount, 100, 0);\r\n let l = hsl.l;\r\n return Color.fromHsl(h, s, l);\r\n }\r\n\r\n /**\r\n * \r\n * @param {Number} amount \r\n * @returns Color \r\n */\r\n desaturate(amount) {\r\n return Color.desaturate(this, amount);\r\n }\r\n \r\n /**\r\n * \r\n * @param {Color} color \r\n * @returns Color \r\n */\r\n static grayscale(color) {\r\n return Color.desaturate(color, 100);\r\n }\r\n\r\n /**\r\n * \r\n * @returns Color \r\n */\r\n grayscale() {\r\n return Color.greyscale(this, 100);\r\n }\r\n\r\n /**\r\n * \r\n * @param {Color} color \r\n * @returns Color \r\n */\r\n static greyscale(color) {\r\n return Color.desaturate(color, 100);\r\n }\r\n\r\n /**\r\n * \r\n * @returns Color \r\n */\r\n greyscale() {\r\n return Color.greyscale(this, 100);\r\n }\r\n\r\n /**\r\n * \r\n * @param {Color} color \r\n * @param {Number} amount\r\n * @returns Color \r\n */\r\n static lighten(color, amount) {\r\n ic(color, Color)\r\n tc(amount, \"number\")\r\n\r\n const hsl = color.toHsl();\r\n let h = hsl.h;\r\n let s = hsl.s;\r\n let l = clmp(hsl.l + amount, 100, 0);\r\n\r\n return Color.fromHsl(h, s, l);\r\n }\r\n /** @param {Number} amount */\r\n lighten(amount) { return Color.lighten(this, amount) }\r\n \r\n /**\r\n * \r\n * @param {Color} color \r\n * @param {Number} amount\r\n * @returns Color \r\n */\r\n static darken(color, amount) {\r\n return Color.lighten(color, -amount);\r\n }\r\n /** @param { Number } amount */\r\n darken(amount) { return Color.darken(this, amount) }\r\n\r\n\r\n /**\r\n * \r\n * @param {Color} color \r\n * @param {Number} amount \r\n * @returns Color \r\n */\r\n static brighten(color, amount) {\r\n let rgb = color.toRgb();\r\n \r\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * - (amount / 100))));\r\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * - (amount / 100))));\r\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * - (amount / 100))));\r\n\r\n return new Color(rgb.r, rgb.g, rgb.b);\r\n }\r\n\r\n /**\r\n * \r\n * @param {Number} amount \r\n * @returns Color\r\n */\r\n brighten(amount) {\r\n return Color.brighten(this, amount);\r\n }\r\n\r\n\r\n\r\n /** @param {Color} color @param {Number} angle */\r\n static shiftHue(color, angle) {\r\n ic(color, Color);\r\n tc(angle, Number)\r\n let { h, s, l } = color.toHsl();\r\n h = shift(h, angle)\r\n return Color.fromHsl(h, s, l);\r\n }\r\n /** @param {Number} angle */\r\n shiftHue(angle) { return Color.shiftHue(this, angle) }\r\n \r\n \r\n\r\n /** @param {Color} color1 @param {Color} color2 */\r\n static multiply(color1, color2) {\r\n ic(color1, Color);\r\n ic(color2, Color);\r\n let { r1, g1, b1 } = color1.toRgb();\r\n let { r2, g2, b2 } = color2.toRgb();\r\n\r\n return Color.fromRgb((r1 * r2) / 255, (g1 * g2) / 255, (b1 * b2) / 255);\r\n }\r\n /** @param {Number} angle */\r\n multiply(color) { return Color.multiply(this, color) }\r\n \r\n\r\n /** @param {Color} color1 @param {Color} color2 @param {Number} amount */\r\n static mix(color1, color2, amount=50) {\r\n ic(color1, Color);\r\n ic(color1, Color);\r\n tc(amount, \"number\")\r\n \r\n const rgb1 = color1.toRgb();\r\n const rgb2 = color2.toRgb();\r\n\r\n const p = clmp(amount, 100, 0) / 100;\r\n\r\n const r = Math.round(((rgb2.r - rgb1.r) * p) + rgb1.r);\r\n const g = Math.round(((rgb2.g - rgb1.g) * p) + rgb1.g);\r\n const b = Math.round(((rgb2.b - rgb1.b) * p) + rgb1.b);\r\n\r\n return Color.fromRgb(r, g, b);\r\n }\r\n \r\n\r\n /** @param {Color} color1 @param {Color} color2 @param {Number} amount */\r\n mix(color, amount) {\r\n return Color.mix(this, color, amount);\r\n }\r\n\r\n /** @param {Color} color1 @param {Color} color2 @param {Number} amount */\r\n static lerp(color1, color2, t=0.5) {\r\n tc(t, \"number\");\r\n ic(color1, Color);\r\n ic(color2, Color);\r\n t = clmp(t, 1, 0);\r\n let rgb1 = color1.toRgb();\r\n let rgb2 = color2.toRgb();\r\n \r\n let r1 = rgb1.r / 255;\r\n let g1 = rgb1.g / 255;\r\n let b1 = rgb1.b / 255;\r\n \r\n let r2 = rgb2.r / 255;\r\n let g2 = rgb2.g / 255;\r\n let b2 = rgb2.b / 255;\r\n\r\n return Color.fromRgb(\r\n (r1 + (r2 - r1) * t) * 255,\r\n (g1 + (g2 - g1) * t) * 255,\r\n (b1 + (b2 - b1) * t) * 255\r\n );\r\n }\r\n\r\n /** @param {Color} color @param {Number} amount */\r\n lerp(color, t) {\r\n return Color.lerp(this, color, t);\r\n }\r\n\r\n\r\n /**@param {Color} color1 @param {Color} color2 */\r\n static add(color1, color2) {\r\n ic(color1, Color);\r\n ic(color2, Color);\r\n \r\n let rgb1 = color1.toRgb();\r\n let rgb2 = color2.toRgb();\r\n \r\n let r1 = rgb1.r;\r\n let g1 = rgb1.g;\r\n let b1 = rgb1.b;\r\n \r\n let r2 = rgb2.r;\r\n let g2 = rgb2.g;\r\n let b2 = rgb2.b;\r\n\r\n return Color.fromRgb(\r\n Math.round((r1 + r2) / 2),\r\n Math.round((g1 + g2) / 2),\r\n Math.round((b1 + b2) / 2),\r\n )\r\n\r\n }\r\n \r\n /** @param {Color} color */\r\n add(color) {\r\n return Color.add(this, color);\r\n }\r\n //#endregion\r\n\r\n\r\n //#region from methods\r\n\r\n /**\r\n * \r\n * @param {string} hex\r\n * @returns Color\r\n */\r\n static fromHex(hex) {\r\n if(!hex.match(/^#?(?:[0-9a-fA-F]{3}){1,2}$/i)) throw new Error('Invalid Hex code: \"' + hex + '\"');\r\n let r=\"0x00\";\r\n let g=\"0x00\";\r\n let b=\"0x00\";\r\n if(hex.length == 4)\r\n {\r\n r = \"0x\" + hex[1] + hex[1];\r\n g = \"0x\" + hex[2] + hex[2];\r\n b = \"0x\" + hex[3] + hex[3];\r\n }\r\n else if (hex.length == 3) \r\n {\r\n r = \"0x\" + hex[0] + hex[0];\r\n g = \"0x\" + hex[1] + hex[1];\r\n b = \"0x\" + hex[2] + hex[2];\r\n }\r\n else if(hex.length == 7)\r\n {\r\n r = \"0x\" + hex[1] + hex[2];\r\n g = \"0x\" + hex[3] + hex[4];\r\n b = \"0x\" + hex[5] + hex[6];\r\n }\r\n else if(hex.length == 6)\r\n {\r\n r = \"0x\" + hex[0] + hex[1];\r\n g = \"0x\" + hex[2] + hex[3];\r\n b = \"0x\" + hex[4] + hex[5];\r\n }\r\n \r\n const color = new Color( parseInt(r, 16), parseInt(g, 16), parseInt(b, 16) ); \r\n return color;\r\n\r\n }\r\n\r\n /**\r\n * \r\n * @param {Number} r \r\n * @param {Number} g \r\n * @param {Number} b \r\n * @returns Color\r\n */\r\n static fromRgb(r, g, b) {\r\n return new Color(r, g, b)\r\n }\r\n\r\n /**\r\n * \r\n * @param {Number} hue \r\n * @param {Number} sat \r\n * @param {Number} lum \r\n * @returns Color\r\n */\r\n static fromHsl(hue, sat, lum) {\r\n hue = tc(hue, \"number\")\r\n sat = tc(sat, \"number\")\r\n lum = tc(lum, \"number\")\r\n if(!( 0 <= hue && hue <= 360 )) throw new Error('HSL color values out of range, hue (0 - 360)')\r\n if(!( 0 <= sat && sat <= 100 )) throw new Error('HSL color values out of range, sat (0 - 100)')\r\n if(!( 0 <= lum && lum <= 100 )) throw new Error('HSL color values out of range, lum (0 - 100)')\r\n\r\n sat /= 100;\r\n lum /= 100;\r\n\r\n let c = (1 - Math.abs(2 * lum - 1)) * sat;\r\n let x = c * (1 - Math.abs((hue / 60) % 2 - 1));\r\n let m = lum - c/2;\r\n let r=0;\r\n let g=0;\r\n let b=0;\r\n\r\n if (0 <= hue && hue < 60) {\r\n r = c; g = x; b = 0;\r\n } else if (60 <= hue && hue < 120) {\r\n r = x; g = c; b = 0;\r\n } else if (120 <= hue && hue < 180) {\r\n r = 0; g = c; b = x;\r\n } else if (180 <= hue && hue < 240) {\r\n r = 0; g = x; b = c;\r\n } else if (240 <= hue && hue < 300) {\r\n r = x; g = 0; b = c;\r\n } else if (300 <= hue && hue <= 360) {\r\n r = c; g = 0; b = x;\r\n }\r\n \r\n const red = Math.round((r + m) * 255);\r\n const green = Math.round((g + m) * 255);\r\n const blue = Math.round((b + m) * 255);\r\n\r\n const color = new Color(red, green, blue);\r\n \r\n return color;\r\n }\r\n\r\n /**\r\n * \r\n * @param {Number} hue \r\n * @param {Number} sat \r\n * @param {Number} lum \r\n * @returns Color\r\n */\r\n static fromHsv(hue, sat, val) {\r\n hue = tc(hue, \"number\")\r\n sat = tc(sat, \"number\")\r\n val = tc(val, \"number\")\r\n if(!( 0 <= hue && hue <= 360 )) throw new Error('HSL color values out of range, hue (0 - 360)')\r\n if(!( 0 <= sat && sat <= 100 )) throw new Error('HSL color values out of range, sat (0 - 100)')\r\n if(!( 0 <= val && val <= 100 )) throw new Error('HSL color values out of range, lum (0 - 100)')\r\n\r\n sat /= 100;\r\n val /= 100;\r\n let c = val * sat;\r\n let x = c * ( 1 - Math.abs( (hue/60) % 2 - 1 ) );\r\n let m = val - c;\r\n\r\n let r=0;\r\n let g=0;\r\n let b=0;\r\n\r\n if(0 <= hue && hue < 60)\r\n {\r\n r = c;\r\n g = x;\r\n b = 0;\r\n }\r\n \r\n else if(60 <= hue && hue < 120)\r\n {\r\n r = x;\r\n g = c;\r\n b = 0;\r\n }\r\n \r\n else if(120 <= hue && hue < 180)\r\n {\r\n r = 0;\r\n g = c;\r\n b = x;\r\n }\r\n \r\n else if(180 <= hue && hue < 240)\r\n {\r\n r = 0;\r\n g = x;\r\n b = c;\r\n }\r\n \r\n else if(240 <= hue && hue < 300)\r\n {\r\n r = x;\r\n g = 0;\r\n b = c;\r\n }\r\n \r\n else if(300 <= hue && hue <= 360)\r\n {\r\n r = c;\r\n g = 0;\r\n b = x;\r\n }\r\n\r\n const red = ((r + m) * 255);\r\n const green = ((g + m) * 255);\r\n const blue = ((b + m) * 255);\r\n \r\n const color = new Color(red, green, blue);\r\n\r\n return color;\r\n\r\n }\r\n\r\n /**\r\n * \r\n * @param {string} colorString \r\n * @returns Color \r\n */\r\n static fromCssString(colorString) {\r\n tc(colorString, \"string\")\r\n var ctx = document.createElement(\"canvas\").getContext(\"2d\");\r\n ctx.fillStyle = colorString;\r\n const value = ctx.fillStyle;\r\n if(!value) throw new Error(\"Invalid Color string\");\r\n return Color.fromHex(value);\r\n }\r\n\r\n /**\r\n * \r\n * @param {string} colorName \r\n * @returns {ThisType} \r\n */\r\n static fromName(colorName) {\r\n colorName = tc(colorName, \"string\")\r\n const color = this.Colors[colorName.toUpperCase()];\r\n if(!color) throw new Error('Invalid Color name');\r\n return color;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region to methods\r\n\r\n /**\r\n * @typedef {Object} hsl\r\n * @property {Number} h - hue\r\n * @property {Number} s - saturation\r\n * @property {Number} l - luminance\r\n */\r\n /**\r\n * @param {Color} color \r\n * @returns string\r\n */\r\n static toHex(color) {\r\n color = ic(color, Color);\r\n let r = Math.round(color.#red).toString(16);\r\n let g = Math.round(color.#green).toString(16);\r\n let b = Math.round(color.#blue).toString(16);\r\n\r\n if (r.length == 1){\r\n r = \"0\" + r;\r\n }\r\n if (g.length == 1){\r\n g = \"0\" + g;\r\n }\r\n if (b.length == 1){\r\n b = \"0\" + b; \r\n }\r\n\r\n\r\n return \"#\" + r + g + b;\r\n }\r\n\r\n /**\r\n * \r\n * @param {Color} color\r\n * @returns Number[] \r\n */\r\n static toHsl(color) {\r\n color = ic(color, Color);\r\n\r\n let h = 0;\r\n let s = 0;\r\n let l = 0;\r\n\r\n let r = color.#red / 255;\r\n let g = color.#green / 255;\r\n let b = color.#blue / 255;\r\n\r\n let cmin = Math.min(Math.min(r, g), b);\r\n let cmax = Math.max(Math.max(r, g), b);\r\n let delta = cmax - cmin;\r\n\r\n if (delta === 0)\r\n {\r\n h = 0;\r\n }\r\n \r\n else if (cmax === r)\r\n {\r\n h = ((g - b) / delta) % 6;\r\n }\r\n\r\n else if (cmax === g)\r\n {\r\n h = (b - r) / delta + 2;\r\n }\r\n\r\n else\r\n {\r\n h = (r - g) / delta + 4;\r\n }\r\n \r\n h = Math.round(h * 60);\r\n \r\n if (h < 0)\r\n {\r\n h += 360; \r\n }\r\n\r\n l = (cmax + cmin) / 2;\r\n s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\r\n s = parseFloat(Math.abs(s * 100));\r\n l = parseFloat(Math.abs(l * 100));\r\n\r\n return { h:nc(h), s:nc(s), l:nc(l) };\r\n\r\n }\r\n \r\n\r\n\r\n /**\r\n * @typedef {Object} hsv\r\n * @property {Number} h - hue\r\n * @property {Number} s - saturation\r\n * @property {Number} v - value\r\n */\r\n /**\r\n * @param {Color} color \r\n * @returns { hsv }\r\n */\r\n static toHsv(color) {\r\n let h = 0;\r\n let s = 0;\r\n let v = 0;\r\n\r\n let r = color.#red / 255;\r\n let g = color.#green / 255;\r\n let b = color.#blue / 255;\r\n\r\n let cmin = Math.min(Math.min(r, g), b);\r\n let cmax = Math.max(Math.max(r, g), b);\r\n let delta = cmax - cmin;\r\n\r\n if (delta === 0)\r\n {\r\n h = 0;\r\n }\r\n \r\n else if (cmax === r)\r\n {\r\n h = ((g - b) / delta) % 6;\r\n }\r\n\r\n else if (cmax === g)\r\n {\r\n h = (b - r) / delta + 2;\r\n }\r\n\r\n else\r\n {\r\n h = (r - g) / delta + 4;\r\n }\r\n \r\n h = Math.round(h * 60);\r\n \r\n if (h < 0)\r\n {\r\n h += 360; \r\n }\r\n\r\n if(cmax !== 0) \r\n {\r\n s = (delta/cmax) * 100;\r\n }\r\n\r\n v = cmax * 100;\r\n return { h:nc(h), s:nc(s), v:nc(v) }; \r\n\r\n }\r\n \r\n \r\n /**\r\n * @typedef {Object} rgb\r\n * @property {Number} r - red\r\n * @property {Number} g - green\r\n * @property {Number} b - blue\r\n */\r\n /**\r\n * \r\n * @param {Color} color \r\n * @returns { rgb }\r\n */\r\n static toRgb(color) {\r\n ic(color, Color);\r\n return { r: color.#red, g: color.#green, b: color.#blue };\r\n }\r\n \r\n /**\r\n * @typedef {Object} cmyk\r\n * @property {Number} c - cyan\r\n * @property {Number} m - magenta\r\n * @property {Number} y - yellow\r\n * @property {Number} k - black\r\n */\r\n /**\r\n * \r\n * @param {Color} color \r\n * @returns { cmyk }\r\n */\r\n static toCmyk(color) {\r\n ic(color, Color);\r\n let { r, g, b } = color.toRgb();\r\n let c = 1 - (r / 255);\r\n let m = 1 - (g / 255);\r\n let y = 1 - (b / 255);\r\n let k = Math.min(c, Math.min(m, y));\r\n \r\n c = (c - k) / (1 - k);\r\n m = (m - k) / (1 - k);\r\n y = (y - k) / (1 - k);\r\n \r\n c = nc(Math.round(c * 10000) / 100);\r\n m = nc(Math.round(m * 10000) / 100);\r\n y = nc(Math.round(y * 10000) / 100);\r\n k = nc(Math.round(k * 10000) / 100);\r\n\r\n return { c, m, y, k };\r\n }\r\n\r\n //#endregion\r\n\r\n //#region to methods (instance)\r\n\r\n /**\r\n * @typedef {Object} hsl\r\n * @property {Number} h - hue\r\n * @property {Number} s - saturation\r\n * @property {Number} l - luminance\r\n */\r\n /** @returns { hsl } */\r\n toHsl() {\r\n return Color.toHsl(this);\r\n }\r\n\r\n /**\r\n * @typedef {Object} hsv\r\n * @property {Number} h - hue\r\n * @property {Number} s - saturation\r\n * @property {Number} v - value\r\n */\r\n /** @returns { hsv } */\r\n toHsv() {\r\n return Color.toHsv(this);\r\n }\r\n\r\n /** @returns string */\r\n toHex() {\r\n return Color.toHex(this);\r\n }\r\n\r\n /**\r\n * @returns {rgb}\r\n */\r\n toRgb() {\r\n return Color.toRgb(this);\r\n }\r\n\r\n /**\r\n * @returns {cmyk}\r\n */\r\n toCmyk() {\r\n return Color.toCmyk(this);\r\n }\r\n\r\n \r\n\r\n //#endregion\r\n\r\n static random() {\r\n const r = Math.floor(Math.random() * 255)\r\n const g = Math.floor(Math.random() * 255) \r\n const b = Math.floor(Math.random() * 255)\r\n return new Color(r,g,b)\r\n }\r\n\r\n toString(type=\"hex\") {\r\n tc(type, \"string\");\r\n const rgb = this.toRgb();\r\n const hsl = this.toHsl();\r\n switch(type.toLowerCase()) {\r\n case \"hex\":\r\n return this.toHex();\r\n \r\n case \"hexa\":\r\n let a = Math.round(this.alpha * 255).toString(16);\r\n if(a.length === 1) { a = \"0\" + a; };\r\n return this.toHex() + a;\r\n \r\n case \"rgb\":\r\n return `rgb(${Math.round(rgb.r)}, ${Math.round(rgb.g)}, ${Math.round(rgb.b)})` ;\r\n \r\n \r\n case \"rgba\":\r\n return `rgba(${Math.round(rgb.r)}, ${Math.round(rgb.g)}, ${Math.round(rgb.b)}, ${this.alpha})` ;\r\n \r\n case \"hsl\":\r\n return `hsl(${Math.round(hsl.h)}, ${Math.round(hsl.s)}%, ${Math.round(hsl.l)}%)` ;\r\n \r\n \r\n case \"hsla\":\r\n return `hsla(${Math.round(hsl.h)}, ${Math.round(hsl.s)}%, ${Math.round(hsl.l)}%, ${this.alpha})` ;\r\n \r\n case \"hsv\":\r\n const hsv = this.toHsv();\r\n return `hsv(${Math.round(hsv.h)}, ${Math.round(hsv.s)}%, ${Math.round(hsv.v)}%)` ;\r\n \r\n case \"cmyk\":\r\n const cmyk = this.toCmyk();\r\n return `cmyk(${Math.round(cmyk.c)}%, ${Math.round(cmyk.m)}%, ${Math.round(cmyk.y)}%, ${Math.round(cmyk.k)}%)` ;\r\n \r\n default:\r\n \"Can't convert Color to given string type\";\r\n \r\n }\r\n }\r\n\r\n valueOf() {\r\n return parseInt(\"0x\" + this.toHex().slice(1));\r\n }\r\n\r\n}\r\n\r\n\r\nexport default Color;\r\n// module.exports = Color;","module.exports = require(\"vscode\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import * as vscode from 'vscode';\nimport Color from './color';\nimport parse from 'parse-css-color';\n\ninterface Match {\n\tcolor: vscode.Color;\n\ttype: string;\n\tlength: number;\n\trange: vscode.Range;\n}\n\nfunction parseColorString(color: string) {\n\t\n\ttry {\n\t\tconst p = parse(color);\n\t\tif(!p) { throw new Error('invalid color string'); }\n\t\tif(p.type === \"rgb\") {\n\t\t\tconst r = p.values[0] as number;\n\t\t\tconst g = p.values[1] as number;\n\t\t\tconst b = p.values[2] as number;\n\t\t\tconst a = p.alpha as number;\n\t\n\t\t\treturn new vscode.Color(r/255, g/255, b/255, a);\n\t\t} else {\n\t\t\tconst h = p.values[0] as number;\n\t\t\tconst s = p.values[1] as number;\n\t\t\tconst l = p.values[2] as number;\n\t\t\tconst a = p.alpha as number;\n\t\t\tconst { r, g, b } = Color.fromHsl(h, s, l).toRgb();\n\n\t\t\treturn new vscode.Color(r/255, g/255, b/255, a);\n\t\t}\n\n\t} catch(e) {\n\t\tconsole.log(e);\n\t\treturn null;\n\t}\n\n}\n\n\nfunction getPos(text: string, index: number): vscode.Position {\n\t\n\tconst nMatches = Array.from(text.slice(0, index).matchAll(/\\n/g));\n\n\tconst lineNumber = nMatches.length;\n\n\tconst characterIndex = index - nMatches[lineNumber-1].index;\n\t\n\n\treturn new vscode.Position(\n\t\tlineNumber,\n\t\tcharacterIndex - 1\n\t);\n}\n\n\nclass Matcher {\n\t\n\t\n\tstatic getMatches(text: string): Match[] {\n\t\tconst matches = text.matchAll(/(#(?:[\\da-f]{3,4}){2}|rgb\\((?:\\d{1,3},\\s*){2}\\d{1,3}\\)|rgba\\((?:\\d{1,3},\\s*){3}\\d*\\.?\\d+\\)|hsl\\(\\d{1,3}(?:,\\s*\\d{1,3}%){2}\\)|hsla\\(\\d{1,3}(?:,\\s*\\d{1,3}%){2},\\s*\\d*\\.?\\d+\\))/gi);\n\t\treturn Array.from(matches).map(match => {\n\t\t\tconst t = match[0];\n\t\t\tconst length = t.length;\n\t\t\tlet type: string;\n\t\t\t\tif(t.startsWith('hsl(')) { type = \"hsl\"; }\n\t\t\t\telse if(t.startsWith('hsla(')) { type = \"hsla\"; }\n\t\t\t\telse if(t.startsWith('rgb(')) { type = \"rgb\"; }\n\t\t\t\telse if(t.startsWith('rgba(')) { type = \"rgba\"; }\n\t\t\t\telse if(t.startsWith('#')) { type = \"hex\"; }\n\n\t\t\tconst range = new vscode.Range(\n\t\t\t\tgetPos(text, match.index),\n\t\t\t\tgetPos(text, match.index + t.length)\n\t\t\t);\n\n\t\t\tconst col = parseColorString(t); \n\t\t\t\n\n\t\t\tif(col) {\n\t\t\t\treturn {\n\t\t\t\t\tcolor: col,\n\t\t\t\t\ttype,\n\t\t\t\t\tlength,\n\t\t\t\t\trange\n\t\t\t\t} as Match;\n\t\t\t}\n\t\t});\n\n\n\t\t\n\t}\n}\n\n\n\nclass Picker {\n\n\tconstructor() {\n\t\tlet subscriptions: vscode.Disposable[] = [];\n vscode.workspace.onDidChangeTextDocument(this._onDidChangeTextDocument, this, subscriptions);\n vscode.workspace.onDidChangeConfiguration(this._onDidChangeConfiguration, this, subscriptions);\n\t\tthis.register();\n\t}\n\n\n\tprivate get languages() {\n\t\treturn vscode.workspace.getConfiguration('vscode-color-picker').get('languages') as Array;\n\t}\n\n private _onDidChangeTextDocument(e: vscode.TextDocumentChangeEvent) {\n\t\tconst editor = vscode.window.activeTextEditor;\n\t\tconst document = e.document;\n\t\tconst text = document.getText();\n }\n\n\tprivate _onDidChangeConfiguration() {\n\n\t}\n\n\tprivate register() {\n\t\tthis.languages.forEach(language => {\n\t\t\tvscode.languages.registerColorProvider(language, {\n\n\t\t\t\tprovideDocumentColors(document: vscode.TextDocument, token: vscode.CancellationToken) {\n\t\t\t\t\t\n\t\t\t\t\tconst matches = Matcher.getMatches(document.getText());\n\t\t\t\t\t\n\t\t\t\t\treturn matches.map((match, i,) => new vscode.ColorInformation(\n\t\t\t\t\t\t\tmatch.range,\n\t\t\t\t\t\t\tmatch.color\n\t\t\t\t\t\t));\n\n\t\t\t\t},\n\t\t\t\tprovideColorPresentations(color, context, token) {\n\t\t\t\t\tlet c = Color.fromRgb(color.red * 255, color.green * 255, color.blue * 255);\n\t\t\t\t\tc.alpha = color.alpha;\n\t\t\t\t\tlet hex = c.toString('hex');\n\t\t\t\t\tlet hsl = c.toString('hsl');\n\t\t\t\t\tlet colString = context.document.getText(context.range);\n\t\t\t\t\tlet t = colString;\n\n\n\t\t\t\t\tconst presentationHex = new vscode.ColorPresentation(c.toString('hex'));\n\t\t\t\t\tconst presentationHexa = new vscode.ColorPresentation(c.toString('hexa'));\n\t\t\t\t\tconst presentationHsl = new vscode.ColorPresentation(c.toString('hsl'));\n\t\t\t\t\tconst presentationHsla = new vscode.ColorPresentation(c.toString('hsla'));\n\t\t\t\t\tconst presentationRgb = new vscode.ColorPresentation(c.toString('rgb'));\n\t\t\t\t\tconst presentationRgba = new vscode.ColorPresentation(c.toString('rgba'));\n\n\t\t\t\t\tlet hasAlpha = false;\n\t\t\t\t\tif(t.startsWith('#') && (t.length === 9)) {\n\t\t\t\t\t\thasAlpha = true;\n\t\t\t\t\t}\n\t\t\t\t\tif(t.startsWith('hsla')) {\n\t\t\t\t\t\thasAlpha = true;\n\t\t\t\t\t}\n\t\t\t\t\tif(t.startsWith('rgba')) {\n\t\t\t\t\t\thasAlpha = true;\n\t\t\t\t\t}\n\t\t\t\t\tif(color.alpha !== 1) {\n\t\t\t\t\t\thasAlpha = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet withAlpha = [\n\t\t\t\t\t\tpresentationHexa,\n\t\t\t\t\t\tpresentationHsla,\n\t\t\t\t\t\tpresentationRgba\n\t\t\t\t\t];\n\n\t\t\t\t\tlet withoutAlpha = [\n\t\t\t\t\t\tpresentationHex,\n\t\t\t\t\t\tpresentationHsl,\n\t\t\t\t\t\tpresentationRgb\n\t\t\t\t\t];\n\n\n\t\t\t\t\treturn hasAlpha ? withAlpha : withoutAlpha;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\tdispose() {}\n}\n\n\n\nexport function activate(context: vscode.ExtensionContext) {\n\tconst picker = new Picker();\n\tcontext.subscriptions.push(picker);\n}\n\n// this method is called when your extension is deactivated\nexport function deactivate() {}\n"],"names":["module","exports","nonHexChars","RegExp","validHexSize","hex","options","test","TypeError","alphaFromHex","replace","length","Number","parseInt","slice","repeat","number","red","green","blue","alpha","format","toFixed","hexRe","float","percentage","numberOrPercentage","pattern$1","hsl3Re","pattern$2","hsl4Re","pattern$3","rgb3NumberRe","pattern$4","rgb3PercentageRe","pattern$5","rgb4NumberRe","pattern$6","rgb4PercentageRe","transparentRe","clamp","num","min","max","Math","parseRGB","n","endsWith","parseFloat","round","parsePercentage","parseAlpha","a","getRGB","r","g","b","type","values","map","str","exec","getHEX","hsl","h","s","l","hh","PI","getHSL","rgb","cn","toLowerCase","tc","value","ic","nc","isNaN","oc","angle","results","clmp","undefined","shift","Color","static","BLACK","fromHex","SILVER","GRAY","WHITE","MAROON","RED","PURPLE","FUCHSIA","GREEN","LIME","OLIVE","YELLOW","NAVY","BLUE","TEAL","AQUA","ORANGE","ALICEBLUE","ANTIQUEWHITE","AQUAMARINE","AZURE","BEIGE","BISQUE","BLANCHEDALMOND","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","DARKSLATEGREY","DARKTURQUOISE","DARKVIOLET","DEEPPINK","DEEPSKYBLUE","DIMGRAY","DIMGREY","DODGERBLUE","FIREBRICK","FLORALWHITE","FORESTGREEN","GAINSBORO","GHOSTWHITE","GOLD","GOLDENROD","GREENYELLOW","GREY","HONEYDEW","HOTPINK","INDIANRED","INDIGO","IVORY","KHAKI","LAVENDER","LAVENDERBLUSH","LAWNGREEN","LEMONCHIFFON","LIGHTBLUE","LIGHTCORAL","LIGHTCYAN","LIGHTGOLDENRODYELLOW","LIGHTGRAY","LIGHTGREEN","LIGHTGREY","LIGHTPINK","LIGHTSALMON","LIGHTSEAGREEN","LIGHTSKYBLUE","LIGHTSLATEGRAY","LIGHTSLATEGREY","LIGHTSTEELBLUE","LIGHTYELLOW","LIMEGREEN","LINEN","MAGENTA","MEDIUMAQUAMARINE","MEDIUMBLUE","MEDIUMORCHID","MEDIUMPURPLE","MEDIUMSEAGREEN","MEDIUMSLATEBLUE","MEDIUMSPRINGGREEN","MEDIUMTURQUOISE","MEDIUMVIOLETRED","MIDNIGHTBLUE","MINTCREAM","MISTYROSE","MOCCASIN","NAVAJOWHITE","OLDLACE","OLIVEDRAB","ORANGERED","ORCHID","PALEGOLDENROD","PALEGREEN","PALETURQUOISE","PALEVIOLETRED","PAPAYAWHIP","PEACHPUFF","PERU","PINK","PLUM","POWDERBLUE","ROSYBROWN","ROYALBLUE","SADDLEBROWN","SALMON","SANDYBROWN","SEAGREEN","SEASHELL","SIENNA","SKYBLUE","SLATEBLUE","SLATEGRAY","SLATEGREY","SNOW","SPRINGGREEN","STEELBLUE","TAN","THISTLE","TOMATO","TURQUOISE","VIOLET","WHEAT","WHITESMOKE","YELLOWGREEN","REBECCAPURPLE","getScheme","name","createScheme","this","color","hsv","toHsv","v","result","mod","push","fromHsv","monochromatic","toHsl","fromHsl","complementary","splitComplementary","doubleComplementary","i","square","tetradic","triadic","analogous","opt","baseLight","baseDark","multiply","mix","lighten","saturate","materialPalette","constructor","Error","amount","desaturate","grayscale","greyscale","darken","toRgb","brighten","shiftHue","color1","color2","r1","g1","b1","r2","g2","b2","fromRgb","rgb1","rgb2","p","t","lerp","add","match","hue","sat","lum","c","abs","x","m","val","colorString","ctx","document","createElement","getContext","fillStyle","colorName","Colors","toUpperCase","toString","cmin","cmax","delta","y","k","toHex","toCmyk","floor","random","cmyk","valueOf","require","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","getPos","text","index","nMatches","Array","from","matchAll","lineNumber","characterIndex","vscode","Position","Picker","subscriptions","workspace","onDidChangeTextDocument","_onDidChangeTextDocument","onDidChangeConfiguration","_onDidChangeConfiguration","register","languages","getConfiguration","e","window","activeTextEditor","getText","forEach","language","registerColorProvider","provideDocumentColors","token","matches","startsWith","range","Range","col","console","log","parseColorString","getMatches","ColorInformation","provideColorPresentations","context","presentationHex","ColorPresentation","presentationHexa","presentationHsl","presentationHsla","presentationRgb","presentationRgba","hasAlpha","dispose","picker"],"sourceRoot":""} --------------------------------------------------------------------------------