@thednp/color-picker 1.0.1 → 2.0.0-alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. package/.eslintrc.cjs +199 -0
  2. package/.lgtm.yml +9 -0
  3. package/.prettierrc.json +15 -0
  4. package/.stylelintrc.json +236 -0
  5. package/LICENSE +0 -0
  6. package/README.md +54 -72
  7. package/compile.js +48 -0
  8. package/cypress/downloads/downloads.htm +0 -0
  9. package/cypress/e2e/color-palette.cy.ts +128 -0
  10. package/cypress/e2e/color-picker.cy.ts +920 -0
  11. package/cypress/fixtures/colorNamesFrench.js +3 -0
  12. package/cypress/fixtures/componentLabelsFrench.js +21 -0
  13. package/cypress/fixtures/format.js +3 -0
  14. package/cypress/fixtures/getCEMarkup.js +29 -0
  15. package/cypress/fixtures/getMarkup.js +28 -0
  16. package/cypress/fixtures/getRandomInt.js +6 -0
  17. package/cypress/fixtures/sampleWebcolors.js +18 -0
  18. package/cypress/fixtures/testSample.js +8 -0
  19. package/cypress/plugins/esbuild-istanbul.ts +50 -0
  20. package/cypress/plugins/tsCompile.ts +34 -0
  21. package/cypress/support/commands.ts +0 -0
  22. package/cypress/support/e2e.ts +21 -0
  23. package/cypress/test.html +23 -0
  24. package/cypress.config.ts +29 -0
  25. package/dist/css/color-picker.css +14 -38
  26. package/dist/css/color-picker.min.css +2 -2
  27. package/dist/css/color-picker.rtl.css +14 -38
  28. package/dist/css/color-picker.rtl.min.css +2 -2
  29. package/dist/js/color-picker.cjs +8 -0
  30. package/dist/js/color-picker.cjs.map +1 -0
  31. package/dist/js/color-picker.d.ts +278 -0
  32. package/dist/js/color-picker.js +5 -3570
  33. package/dist/js/color-picker.js.map +1 -0
  34. package/dist/js/color-picker.mjs +2631 -0
  35. package/dist/js/color-picker.mjs.map +1 -0
  36. package/dts.config.ts +15 -0
  37. package/package.json +64 -74
  38. package/src/scss/_variables.scss +0 -1
  39. package/src/scss/color-picker.rtl.scss +4 -0
  40. package/src/scss/color-picker.scss +74 -38
  41. package/src/ts/colorPalette.ts +89 -0
  42. package/src/{js/color-picker.js → ts/index.ts} +489 -486
  43. package/src/ts/interface/colorPickerLabels.ts +20 -0
  44. package/src/ts/interface/colorPickerOptions.ts +11 -0
  45. package/src/ts/interface/paletteOptions.ts +6 -0
  46. package/src/ts/util/colorNames.ts +21 -0
  47. package/src/{js/util/colorPickerLabels.js → ts/util/colorPickerLabels.ts} +4 -2
  48. package/src/ts/util/getColorControls.ts +90 -0
  49. package/src/{js/util/getColorForm.js → ts/util/getColorForm.ts} +28 -18
  50. package/src/{js/util/getColorMenu.js → ts/util/getColorMenu.ts} +21 -30
  51. package/src/ts/util/isValidJSON.ts +19 -0
  52. package/src/{js/util/setMarkup.js → ts/util/setMarkup.ts} +57 -48
  53. package/src/{js/util/vHidden.js → ts/util/vHidden.ts} +0 -0
  54. package/tsconfig.json +29 -0
  55. package/vite.config.ts +34 -0
  56. package/dist/js/color-esm.js +0 -1164
  57. package/dist/js/color-esm.min.js +0 -2
  58. package/dist/js/color-palette-esm.js +0 -1235
  59. package/dist/js/color-palette-esm.min.js +0 -2
  60. package/dist/js/color-palette.js +0 -1243
  61. package/dist/js/color-palette.min.js +0 -2
  62. package/dist/js/color-picker-element-esm.js +0 -3718
  63. package/dist/js/color-picker-element-esm.min.js +0 -2
  64. package/dist/js/color-picker-element.js +0 -3726
  65. package/dist/js/color-picker-element.min.js +0 -2
  66. package/dist/js/color-picker-esm.js +0 -3565
  67. package/dist/js/color-picker-esm.min.js +0 -2
  68. package/dist/js/color-picker.min.js +0 -2
  69. package/dist/js/color.js +0 -1172
  70. package/dist/js/color.min.js +0 -2
  71. package/src/js/color-palette.js +0 -75
  72. package/src/js/color-picker-element.js +0 -107
  73. package/src/js/color.js +0 -1104
  74. package/src/js/index.js +0 -8
  75. package/src/js/util/colorNames.js +0 -6
  76. package/src/js/util/getColorControls.js +0 -103
  77. package/src/js/util/isValidJSON.js +0 -13
  78. package/src/js/util/nonColors.js +0 -5
  79. package/src/js/util/roundPart.js +0 -9
  80. package/src/js/util/setCSSProperties.js +0 -12
  81. package/src/js/util/tabindex.js +0 -3
  82. package/src/js/util/toggleCEAttr.js +0 -70
  83. package/src/js/util/version.js +0 -5
  84. package/src/js/version.js +0 -5
  85. package/types/cp.d.ts +0 -558
  86. package/types/index.d.ts +0 -44
  87. package/types/source/source.ts +0 -4
  88. package/types/source/types.d.ts +0 -92
@@ -0,0 +1,3 @@
1
+ const colorNamesFrench = 'blanc,noir,gris,rouge,orange,brun,or,olive,jaune,citron,vert,sarcelle,cyan,bleu,violet,magenta,rose';
2
+
3
+ export default colorNamesFrench;
@@ -0,0 +1,21 @@
1
+ const componentLabelsFrench = {
2
+ pickerLabel: "Couleur Sélection",
3
+ appearanceLabel: "Apparence de la couleur",
4
+ valueLabel: "Valeur de couleur",
5
+ toggleLabel: "Sélectionner la couleur",
6
+ presetsLabel: "Préréglages de couleur",
7
+ defaultsLabel: "Couleur par défaut",
8
+ formatLabel: "Format",
9
+ alphaLabel: "Alpha",
10
+ hexLabel: "Hexadécimal",
11
+ hueLabel: "Nuance",
12
+ whitenessLabel: "Blancheur",
13
+ blacknessLabel: "Noirceur",
14
+ saturationLabel: "Saturation",
15
+ lightnessLabel: "Légèreté",
16
+ redLabel: "Rouge",
17
+ greenLabel: "Vert",
18
+ blueLabel: "Bleu",
19
+ };
20
+
21
+ export default componentLabelsFrench;
@@ -0,0 +1,3 @@
1
+ const FORMAT = ['hsl', 'rgb', 'hwb', 'hex'];
2
+
3
+ export default FORMAT;
@@ -0,0 +1,29 @@
1
+ import ColorPickerElement from '../../src/js/color-picker-element';
2
+
3
+ import getRandomInt from './getRandomInt';
4
+ import testSample from './testSample';
5
+ import FORMAT from './format';
6
+ import colorNamesFrench from './colorNamesFrench';
7
+ import componentLabelsFrench from './componentLabelsFrench';
8
+
9
+ export default function getCEMarkup(body) {
10
+ const id = getRandomInt(0,9999);
11
+ const format = FORMAT[getRandomInt(0,3)];
12
+ const sample = testSample[getRandomInt(0,2)];
13
+ const value = sample[format];
14
+
15
+ // const cpe = document.createElement('color-picker');
16
+ const cpe = new ColorPickerElement();
17
+ cpe.setAttribute('data-id', `cpe-${format}-${id}`);
18
+ cpe.setAttribute('data-format', format);
19
+ cpe.setAttribute('data-value', value);
20
+ cpe.setAttribute('data-component-labels', JSON.stringify(componentLabelsFrench));
21
+ cpe.setAttribute('data-color-labels', colorNamesFrench);
22
+ cpe.setAttribute('data-color-keywords', 'red,gree,blue');
23
+ cpe.setAttribute('data-color-presets', '#330000,#990000,#ff0000,#ff6666,#ffcccc,#003333,#009999,#00ffff,#66ffff,#ccffff');
24
+
25
+ if (body) {
26
+ body.append(cpe);
27
+ }
28
+ return {value, id, format};
29
+ }
@@ -0,0 +1,28 @@
1
+ import testSample from "./testSample";
2
+ import getRandomInt from "./getRandomInt";
3
+
4
+ export default function getMarkup(body, id, format) {
5
+ const set = testSample[getRandomInt(0,3)];
6
+ const value = set[format];
7
+
8
+ const label = document.createElement('label');
9
+ label.setAttribute('for', `color-picker-${id}`);
10
+ label.innerText = `Color Picker Test`;
11
+
12
+ const cpWrapper = document.createElement('div');
13
+ cpWrapper.className = 'color-picker';
14
+
15
+ const input = document.createElement('input');
16
+ input.type = 'text';
17
+ input.id = `color-picker-${id}`;
18
+ input.className = 'btn-appearance color-preview';
19
+ input.setAttribute('value', value);
20
+ input.setAttribute('autocomplete', "off");
21
+ input.setAttribute('spellcheck', "false");
22
+ input.setAttribute('data-format', format);
23
+ cpWrapper.append(input);
24
+ if (body) {
25
+ body.append(label, cpWrapper);
26
+ }
27
+ return {set, value};
28
+ }
@@ -0,0 +1,6 @@
1
+ export default function getRandomInt(min, max) {
2
+ min = Math.ceil(min);
3
+ max = Math.round(max);
4
+ // The maximum is exclusive and the minimum is inclusive
5
+ return Math.round(Math.random() * (max - min) + min);
6
+ }
@@ -0,0 +1,18 @@
1
+ const sampleWebcolors = [
2
+ {name:"white",rgb:"rgb(255, 255, 255)",hex:"#ffffff",hsl:"hsl(0, 0%, 100%)",hsl4:"hsl(0deg 0% 100%)",hwb:"hwb(0deg 100% 0%)",hsv:{h:0,s:0,v:1,a:1}},
3
+ {name:"black",rgb:"rgb(0, 0, 0)",hex:"#000000",hsl:"hsl(0, 0%, 0%)",hsl4:"hsl(0deg 0% 0%)",hwb:"hwb(0deg 0% 100%)",hsv:{h:0,s:0,v:0,a:1}},
4
+ {name:"yellow",rgb:"rgb(255, 255, 0)",hex:"#ffff00",hsl:"hsl(60, 100%, 50%)",hsl4:"hsl(60deg 100% 50%)",hwb:"hwb(60deg 0% 0%)",hsv: {h: 0.167, s: 1, v: 1, a: 1}},
5
+ {name:"green",rgb:"rgb(0, 128, 0)",hex:"#008000",hsl:"hsl(120, 100%, 25%)",hsl4:"hsl(120deg 100% 25%)",hwb:"hwb(120deg 0% 50%)",hsv: {h: 0.333, s: 1, v: 0.502, a: 1}},
6
+ {name:"red",rgb:"rgb(255, 0, 0)",hex:"#ff0000",hsl:"hsl(0, 100%, 50%)",hsl4:"hsl(0deg 100% 50%)",hwb:"hwb(0deg 0% 0%)",hsv:{h:0,s:1,v:1,a:1}},
7
+ {name:"pink",rgb:"rgb(255, 192, 203)",hex:"#ffc0cb",hsl:"hsl(350, 100%, 88%)",hsl4:"hsl(350deg 100% 88%)",hwb:"hwb(350deg 75% 0%)",hsv:{h:0.971,s:0.247,v:1,a:1}},
8
+ {name:"brown",rgb:"rgb(165, 42, 42)",hex:"#a52a2a",hsl:"hsl(0, 59%, 41%)",hsl4:"hsl(0deg 59% 41%)",hwb:"hwb(0deg 16% 35%)",hsv:{h:0,s:0.745,v:0.647,a:1}},
9
+ {name:"orange",rgb:"rgb(255, 165, 0)",hex:"#ffa500",hsl:"hsl(39, 100%, 50%)",hsl4:"hsl(39deg 100% 50%)",hwb:"hwb(39deg 0% 0%)",hsv:{h:0.108,s:1,v:1,a:1}},
10
+ {name:"darkorange",rgb:"rgb(255, 140, 0)",hex:"#ff8c00",hsl:"hsl(33, 100%, 50%)",hsl4:"hsl(33deg 100% 50%)",hwb:"hwb(33deg 0% 0%)",hsv:{h:0.092,s:1,v:1,a:1}},
11
+ {name:"cyan",rgb:"rgb(0, 255, 255)",hex:"#00ffff",hsl:"hsl(180, 100%, 50%)",hsl4:"hsl(180deg 100% 50%)",hwb:"hwb(180deg 0% 0%)",hsv:{h:0.5,s:1,v:1,a:1}},
12
+ {name:"yellow",rgb:"rgb(255, 255, 0)",hex:"#ffff00",hsl:"hsl(60, 100%, 50%)",hsl4:"hsl(60deg 100% 50%)",hwb:"hwb(60deg 0% 0%)",hsv:{h:0.167,s:1,v:1,a:1}},
13
+ {name:"navy",rgb:"rgb(0, 0, 128)",hex:"#000080",hsl:"hsl(240, 100%, 25%)",hsl4:"hsl(240deg 100% 25%)",hwb:"hwb(240deg 0% 50%)",hsv:{h:0.667,s:1,v:0.502,a:1}},
14
+ {name:"orchid",rgb:"rgb(218, 112, 214)",hex:"#da70d6",hsl:"hsl(302, 59%, 65%)",hsl4:"hsl(302deg 59% 65%)",hwb:"hwb(302deg 44% 15%)",hsv:{h: 0.84, s: 0.486, v: 0.855, a: 1}},
15
+ {name:"indigo",rgb:"rgb(75, 0, 130)",hex:"#4b0082",hsl:"hsl(275, 100%, 25%)",hsl4:"hsl(275deg 100% 25%)",hwb:"hwb(275deg 0% 49%)",hsv:{h: 0.763, s: 1, v: 0.51, a: 1}},
16
+ ];
17
+
18
+ export default sampleWebcolors;
@@ -0,0 +1,8 @@
1
+ const testSample = [
2
+ {name: 'red', hex: '#f00', rgb: 'rgb(255, 0, 0)', hsl: 'hsl(0, 100%, 50%)', hwb: 'hwb(0deg 0% 0%)'},
3
+ {name: 'lime', hex: '#0f0', rgb: 'rgb(0, 255, 0)', hsl: 'hsl(120, 100%, 50%)', hwb: 'hwb(120deg 0% 0%)'},
4
+ {name: 'blue', hex: '#00f', rgb: 'rgb(0, 0, 255)', hsl: 'hsl(240, 100%, 50%)', hwb: 'hwb(240deg 0% 0%)'},
5
+ {name: 'pink', hex: '#f0f', rgb: 'rgb(255, 0, 255)', hsl: 'hsl(300, 100%, 50%)', hwb: 'hwb(300deg 0% 0%)'},
6
+ ];
7
+
8
+ export default testSample;
@@ -0,0 +1,50 @@
1
+ // sources
2
+ // * https://github.com/enketo/enketo-express/blob/master/tools/esbuild-plugin-istanbul.js
3
+ 'use strict';
4
+ import esbuild from 'esbuild';
5
+ import { promises } from 'fs';
6
+ import { createInstrumenter } from 'istanbul-lib-instrument';
7
+ import { extname, sep } from 'path';
8
+ import tsCompile from './tsCompile';
9
+
10
+ // import Cypress settings
11
+ const sourceFolder = 'src';
12
+ const [name] = process.cwd().split(sep).slice(-1);
13
+
14
+ const sourceFilter = `${name}${sep}${sourceFolder}`;
15
+ const instrumenter = createInstrumenter({
16
+ compact: false,
17
+ esModules: true,
18
+ preserveComments: true,
19
+ autoWrap: true,
20
+ });
21
+
22
+ const createEsbuildIstanbulPlugin = (): esbuild.Plugin => {
23
+ return {
24
+ name: 'istanbul',
25
+ setup(build: esbuild.PluginBuild) {
26
+ build.onLoad(
27
+ { filter: /\.(ts|tsx)$/ },
28
+ async ({ path }: esbuild.OnLoadArgs): Promise<{ contents: string } & Record<string, any>> => {
29
+
30
+ if (!path.includes(sourceFilter)) {
31
+ // console.log("> compiling typescript %s for output build", path);
32
+ const contents = await promises.readFile(path, 'utf8');
33
+ return {
34
+ contents: ['.ts', '.tsx'].includes(extname(path)) ? tsCompile(path).outputText : contents,
35
+ };
36
+ }
37
+
38
+ // console.log("🧡 instrumenting %s for output coverage", path);
39
+ const { outputText, sourceMap } = tsCompile(path);
40
+
41
+ return {
42
+ contents: instrumenter.instrumentSync(outputText, path, sourceMap),
43
+ };
44
+ },
45
+ );
46
+ },
47
+ };
48
+ };
49
+
50
+ export default createEsbuildIstanbulPlugin;
@@ -0,0 +1,34 @@
1
+ // compile.ts
2
+ import TypeScript from 'typescript';
3
+ import { basename } from 'path';
4
+ import { RawSourceMap } from 'source-map';
5
+ import { readFileSync } from 'fs';
6
+
7
+ export default function tsCompile(
8
+ path: string,
9
+ ops?: Partial<TypeScript.TranspileOptions>,
10
+ ): TypeScript.TranspileOutput & { sourceMap: RawSourceMap } {
11
+ // Default options -- you could also perform a merge, or use the project tsconfig.json
12
+ const options: TypeScript.TranspileOptions = Object.assign(
13
+ {
14
+ compilerOptions: {
15
+ allowJs: true,
16
+ esModuleInterop: true,
17
+ removeComments: false,
18
+ target: 99, // ESNext
19
+ allowSyntheticDefaultImports: true,
20
+ isolatedModules: true,
21
+ noEmitHelpers: true,
22
+ sourceMap: true,
23
+ } as Partial<TypeScript.CompilerOptions>,
24
+ },
25
+ ops,
26
+ );
27
+ const contents = readFileSync(path, { encoding: 'utf8' });
28
+ const { outputText, sourceMapText } = TypeScript.transpileModule(contents, options);
29
+ const sourceMap: RawSourceMap = JSON.parse(sourceMapText || '');
30
+ sourceMap.file = basename(path);
31
+ sourceMap.sources = [basename(path)];
32
+
33
+ return { outputText, sourceMap, sourceMapText };
34
+ }
File without changes
@@ -0,0 +1,21 @@
1
+ // ***********************************************************
2
+ // This example support/index.js is processed and
3
+ // loaded automatically before your test files.
4
+ //
5
+ // This is a great place to put global configuration and
6
+ // behavior that modifies Cypress.
7
+ //
8
+ // You can change the location of this file or turn off
9
+ // automatically serving support files with the
10
+ // 'supportFile' configuration option.
11
+ //
12
+ // You can read more here:
13
+ // https://on.cypress.io/configuration
14
+ // ***********************************************************
15
+
16
+ // Import commands.js using ES2015 syntax:
17
+ // require('./commands')
18
+ import './commands'
19
+
20
+ // Alternatively you can use CommonJS syntax:
21
+ import '@cypress/code-coverage/support'
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>ColorPicker Testing Page</title>
6
+ <meta name="description" content="A modern and fully featured color picker web component">
7
+ <meta name="keywords" content="color, picker, colorpicker, web component, hwb, hex, rgb, hsl, hsv">
8
+ <link id="styles" rel="stylesheet" href="../dist/css/color-picker.css">
9
+ <style>
10
+ body { padding: 65vh 0 65vh 0; margin: 0 auto; width: 60vw; font-family: sans-serif }
11
+ color-picker, .color-picker {
12
+ margin: 0 0 2.5rem;
13
+ --dropdown-transition: none;
14
+ --btn-transition: none;
15
+ --options-transition: none;
16
+ }
17
+ label { margin: 0.5rem 0;display: block;}
18
+ body > a { position: absolute; top: 50%; left: 1rem; /* color: white !important clip: 0px 0px 0px 0px; height:0; width: 0 */ }
19
+ </style>
20
+ </head>
21
+ <body>
22
+ </body>
23
+ </html>
@@ -0,0 +1,29 @@
1
+ import { defineConfig } from "cypress";
2
+ import createBundler from "@bahmutov/cypress-esbuild-preprocessor";
3
+ import createEsbuildIstanbulPlugin from "./cypress/plugins/esbuild-istanbul";
4
+
5
+ async function setupNodeEvents(
6
+ on: Cypress.PluginEvents,
7
+ config: Cypress.PluginConfigOptions
8
+ ): Promise<Cypress.PluginConfigOptions> {
9
+ await require("@cypress/code-coverage/task")(on, config);
10
+
11
+ on(
12
+ "file:preprocessor",
13
+ createBundler({
14
+ plugins: [createEsbuildIstanbulPlugin()],
15
+ })
16
+ );
17
+
18
+ // Make sure to return the config object as it might have been modified by the plugin.
19
+ return config;
20
+ }
21
+
22
+ export default defineConfig({
23
+ e2e: {
24
+ specPattern: "cypress/e2e/**/*.{js,jsx,ts,tsx}",
25
+ supportFile: "cypress/support/e2e.ts",
26
+ video: false,
27
+ setupNodeEvents,
28
+ },
29
+ });
@@ -1,10 +1,9 @@
1
1
  /*!
2
- * ColorPicker v1.0.1 (http://thednp.github.io/color-picker)
3
- * Copyright 2022 © thednp
4
- * Licensed under MIT (https://github.com/thednp/color-picker/blob/master/LICENSE)
2
+ * ColorPicker v2.0.0-alpha1 (http://thednp.github.io/color-picker)
3
+ * Copyright 2023 © thednp
4
+ * Licensed under MIT (MIT/blob/main/LICENSE)
5
5
  */
6
6
  /* :host */
7
- color-picker,
8
7
  .color-picker {
9
8
  position: relative;
10
9
  display: flex;
@@ -42,7 +41,6 @@ color-picker,
42
41
  --visual-shadow: 0 0 0 1px var(--white-15) inset;
43
42
  }
44
43
 
45
- color-picker:focus,
46
44
  .color-picker:focus {
47
45
  outline: none;
48
46
  }
@@ -69,6 +67,7 @@ color-picker:focus,
69
67
 
70
68
  .color-dropdown.menu {
71
69
  right: 0;
70
+ max-height: 230px;
72
71
  }
73
72
 
74
73
  .open .color-dropdown.top {
@@ -127,8 +126,7 @@ color-picker:focus,
127
126
  /* color-preview */
128
127
  .color-preview {
129
128
  box-shadow: 0 0 0 1px rgba(120, 120, 120, 0.33) inset;
130
- direction: ltr;
131
- /* color value can never be rtl */
129
+ direction: ltr; /* color value can never be rtl */
132
130
  }
133
131
 
134
132
  .txt-dark .color-preview {
@@ -188,8 +186,6 @@ color-picker:focus,
188
186
  .txt-light .menu-toggle {
189
187
  background: var(--black-50);
190
188
  }
191
-
192
- .txt-light .menu-toggle:focus,
193
189
  .txt-light .menu-toggle:focus {
194
190
  background: var(--black-75);
195
191
  }
@@ -197,8 +193,6 @@ color-picker:focus,
197
193
  .txt-dark .menu-toggle {
198
194
  background: var(--white-33);
199
195
  }
200
-
201
- .txt-dark .menu-toggle:focus,
202
196
  .txt-dark .menu-toggle:focus {
203
197
  background: var(--white-50);
204
198
  }
@@ -241,8 +235,7 @@ color-picker:focus,
241
235
  /* color-defaults */
242
236
  .color-defaults {
243
237
  display: none;
244
- flex-wrap: wrap;
245
- flex-flow: column;
238
+ flex-flow: column wrap;
246
239
  margin: 0;
247
240
  list-style: none;
248
241
  padding-inline: 0;
@@ -253,10 +246,6 @@ color-picker:focus,
253
246
  display: flex;
254
247
  }
255
248
 
256
- .color-dropdown.menu {
257
- max-height: 230px;
258
- }
259
-
260
249
  .color-defaults .color-option {
261
250
  padding: 0.25rem 0.5rem;
262
251
  color: inherit;
@@ -311,8 +300,7 @@ color-picker:focus,
311
300
  }
312
301
 
313
302
  .multiline + .color-defaults {
314
- flex-direction: row;
315
- flex-wrap: wrap;
303
+ flex-flow: row wrap;
316
304
  }
317
305
  .multiline + .color-defaults .color-option {
318
306
  padding: 0.25rem 0.33rem;
@@ -326,18 +314,14 @@ color-picker:focus,
326
314
  overflow: hidden;
327
315
  text-indent: 2.1rem;
328
316
  }
329
-
330
- .color-options .color-option:active,
331
- .color-options .color-option:focus {
317
+ .color-options .color-option:active, .color-options .color-option:focus {
332
318
  outline: none;
319
+ box-shadow: 0 0 0 4px rgba(125, 125, 125, 0.75) inset;
333
320
  }
334
321
 
335
322
  .color-options .color-option::before {
336
323
  position: absolute;
337
- top: 0;
338
- right: 0;
339
- bottom: 0;
340
- left: 0;
324
+ inset: 0;
341
325
  }
342
326
 
343
327
  .color-options .color-option:hover::before,
@@ -348,12 +332,7 @@ color-picker:focus,
348
332
  mix-blend-mode: difference;
349
333
  }
350
334
 
351
- .color-options .color-option:active,
352
- .color-options .color-option:focus {
353
- box-shadow: 0 0 0 4px rgba(125, 125, 125, 0.75) inset;
354
- }
355
-
356
- .color-options .color-option.active:after {
335
+ .color-options .color-option.active::after {
357
336
  position: absolute;
358
337
  top: 50%;
359
338
  left: 50%;
@@ -364,19 +343,18 @@ color-picker:focus,
364
343
  border-radius: 4px;
365
344
  }
366
345
 
367
- .txt-dark .color-options .color-option.active:after {
346
+ .txt-dark .color-options .color-option.active::after {
368
347
  box-shadow: 0 0 0 4px var(--white-90);
369
348
  }
370
349
 
371
- .txt-light .color-options .color-option.active:after {
350
+ .txt-light .color-options .color-option.active::after {
372
351
  box-shadow: 0 0 0 4px var(--black-90);
373
352
  }
374
353
 
375
354
  /* color-form */
376
355
  .color-form {
377
356
  display: flex;
378
- flex-direction: row;
379
- flex-wrap: wrap;
357
+ flex-flow: row wrap;
380
358
  align-items: center;
381
359
  padding: 0.25rem 0 0;
382
360
  font: 12px sans-serif;
@@ -439,7 +417,6 @@ color-picker:focus,
439
417
  .visual-control {
440
418
  height: 230px;
441
419
  }
442
-
443
420
  .visual-control1 {
444
421
  width: 230px;
445
422
  }
@@ -448,7 +425,6 @@ color-picker:focus,
448
425
  .visual-control {
449
426
  height: 300px;
450
427
  }
451
-
452
428
  .visual-control1 {
453
429
  width: 300px;
454
430
  }
@@ -1,2 +1,2 @@
1
- /* ColorPicker v1.0.1 | thednp © 2022 | MIT-License */
2
- color-picker,.color-picker{position:relative;display:flex;--white-15: rgba(255, 255, 255, 0.15);--white-25: rgba(255, 255, 255, 0.25);--white-33: rgba(255, 255, 255, 0.33);--white-50: rgba(255, 255, 255, 0.5);--white-75: rgba(255, 255, 255, 0.75);--white-90: rgba(255, 255, 255, 0.9);--black-15: rgba(0, 0, 0, 0.15);--black-25: rgba(0, 0, 0, 0.25);--black-33: rgba(0, 0, 0, 0.33);--black-50: rgba(0, 0, 0, 0.5);--black-75: rgba(0, 0, 0, 0.75);--black-90: rgba(0, 0, 0, 0.9);--dropdown-transition: transform 0.33s ease, opacity 0.33s ease;--btn-transition: box-shadow 0.33s ease, border 0.33s ease;--options-transition: height 0.33s ease;--dropdown-bg: var(--black-75);--dropdown-color: var(--white-75);--dropdown-shadow: 0 6px 12px var(--black-33);--dropdown-scrollbar-bg: var(--white-33);--dropdown-scrollbar-bg-hover: var(--white-50);--knob-bg: #000;--knob-border: 1px solid var(--white-90);--knob-shadow-hover: 0 0 0 6px var(--white-50);--knob-shadow-active: 0 0 0 6px var(--white-90);--input-border: 1px solid var(--white-15);--input-border-hover: 1px solid var(--white-33);--input-bg-hover: var(--black-15);--option-color-hover: var(--black-75);--option-bg-hover: var(--white-50);--option-color-active: var(--black-75);--option-bg-active: var(--white-90);--visual-shadow: 0 0 0 1px var(--white-15) inset}color-picker:focus,.color-picker:focus{outline:none}.color-dropdown{position:absolute;z-index:50;display:none;flex-direction:column;width:min-content;padding:.5rem;color:var(--dropdown-color);background:var(--dropdown-bg);border-radius:.5rem;box-shadow:var(--dropdown-shadow);opacity:0;transition:var(--dropdown-transition)}.color-dropdown.picker{left:0}.color-dropdown.menu{right:0}.open .color-dropdown.top{top:auto;bottom:100%}.color-dropdown.bottom{top:100%}.open .color-dropdown.top,.open .color-dropdown.bottom{display:flex}.color-dropdown.show{opacity:1}.color-dropdown.show.top{transform:translate(0, -5px)}.color-dropdown.show.bottom{transform:translate(0, 5px)}.color-controls{display:none;flex-wrap:wrap;justify-content:space-between;width:max-content}.btn-appearance{width:100%;height:1.5rem;padding:.6rem 1rem;font-size:1rem;line-height:1.5;border:0;border-radius:.25rem;outline:none;appearance:none;transition:var(--btn-transition)}.btn-appearance:focus,.btn-appearance:hover{box-shadow:0 0 0 3px var(--black-15)}.color-preview{box-shadow:0 0 0 1px rgba(120,120,120,.33) inset;direction:ltr}.txt-dark .color-preview{color:var(--white-75)}.txt-dark .color-preview:focus{box-shadow:0 0 0 1px #fff inset,0 0 0 3px var(--black-15)}.txt-dark .color-preview::placeholder{color:var(--white-50)}.txt-light .color-preview{color:var(--black-75)}.txt-light .color-preview:focus{color:var(--black-75);box-shadow:0 0 0 1px #000 inset,0 0 0 3px var(--black-15)}.txt-light .color-preview::placeholder{color:var(--black-50)}.picker-toggle{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0);border:0}.open .picker-toggle{z-index:-1}.menu-toggle{position:absolute;top:0;right:0;display:flex;width:3rem;height:100%;padding:0 .25rem;cursor:pointer;border:0;border-radius:0 .25rem .25rem 0}.txt-light .menu-toggle{background:var(--black-50)}.txt-light .menu-toggle:focus,.txt-light .menu-toggle:focus{background:var(--black-75)}.txt-dark .menu-toggle{background:var(--white-33)}.txt-dark .menu-toggle:focus,.txt-dark .menu-toggle:focus{background:var(--white-50)}.menu-toggle svg{width:auto;height:100%}.scrollable{overflow-x:hidden;overflow-y:auto;scrollbar-width:thin}.scrollable::-webkit-scrollbar{width:.5rem}.scrollable::-webkit-scrollbar-track{background-color:rgba(0,0,0,0)}.scrollable::-webkit-scrollbar-thumb{width:.5rem;background-color:rgba(0,0,0,0);background-clip:content-box;border:0}.scrollable:hover::-webkit-scrollbar-thumb{background-color:var(--dropdown-scrollbar-bg)}.scrollable::-webkit-scrollbar-thumb:hover{background-color:var(--dropdown-scrollbar-bg-hover)}.color-defaults{display:none;flex-wrap:wrap;flex-flow:column;margin:0;list-style:none;padding-inline:0}.color-dropdown.menu .color-defaults,.color-dropdown.picker .color-controls{display:flex}.color-dropdown.menu{max-height:230px}.color-defaults .color-option{padding:.25rem .5rem;color:inherit}.color-option{cursor:pointer}.color-defaults .color-option:focus,.color-defaults .color-option:hover{color:var(--option-color-hover);background:var(--option-bg-hover);outline:none}.color-defaults .color-option:active,.color-defaults .color-option.active{color:var(--option-color-active);background:var(--option-bg-active)}.color-options{--grid-item-size: 2rem;--grid-fit: 5;--grid-gap: .25rem;--grid-height: auto;--grid-hover-height: auto;display:grid;padding:0;margin:0;list-style:none;grid-template-columns:repeat(var(--grid-fit), var(--grid-item-size));grid-template-rows:repeat(auto-fill, var(--grid-item-size));gap:var(--grid-gap)}.color-options.scrollable{height:var(--grid-height);margin:0 -0.5rem 0 0;overflow-y:scroll;transition:var(--options-transition)}.color-options.scrollable:hover{height:var(--grid-hover-height)}.color-options+.color-defaults{margin-top:.25rem}.multiline+.color-defaults{flex-direction:row;flex-wrap:wrap}.multiline+.color-defaults .color-option{padding:.25rem .33rem;font-size:12px}.color-options .color-option{position:relative;width:var(--grid-item-size);height:var(--grid-item-size);overflow:hidden;text-indent:2.1rem}.color-options .color-option:active,.color-options .color-option:focus{outline:none}.color-options .color-option::before{position:absolute;top:0;right:0;bottom:0;left:0}.color-options .color-option:hover::before,.color-options .color-option:active::before,.color-options .color-option:focus::before{content:"";border:3px solid var(--white-75);mix-blend-mode:difference}.color-options .color-option:active,.color-options .color-option:focus{box-shadow:0 0 0 4px rgba(125,125,125,.75) inset}.color-options .color-option.active:after{position:absolute;top:50%;left:50%;width:4px;height:4px;margin:-2px 0 0 -2px;content:"";border-radius:4px}.txt-dark .color-options .color-option.active:after{box-shadow:0 0 0 4px var(--white-90)}.txt-light .color-options .color-option.active:after{box-shadow:0 0 0 4px var(--black-90)}.color-form{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;padding:.25rem 0 0;font:12px sans-serif}.color-form.hex{max-width:initial}.color-form>*{flex:1 0 0%;width:17.5%;max-width:17.5%}.color-form label{width:7.5%;max-width:7.5%;text-align:center}.color-input{color:inherit;text-align:right;background:rgba(0,0,0,0);border:var(--input-border);outline:none}.color-input.hex{width:92.5%;max-width:92.5%}.color-input:active,.color-input:focus{background:var(--input-bg-hover);border:var(--input-border-hover)}.visual-control{height:150px;touch-action:none;box-shadow:var(--visual-shadow)}.visual-control1{width:150px}.visual-control2,.visual-control3{width:21px;cursor:ns-resize}@media(min-width: 578px){.visual-control{height:230px}.visual-control1{width:230px}}@media(min-width: 1200px){.visual-control{height:300px}.visual-control1{width:300px}}.color-control{position:relative;display:inline-block}.color-slider{left:0;width:calc(100% - 2px);cursor:ns-resize}.color-control+.color-control{margin-left:.5rem}.knob{position:absolute;top:0;left:0;height:7px;touch-action:none;user-select:none;background-color:var(--knob-bg);border:var(--knob-border);border-radius:5px;outline:none;will-change:transform}.knob:hover{box-shadow:var(--knob-shadow-hover)}.knob:focus,.knob:active{z-index:1;box-shadow:var(--knob-shadow-active)}.color-pointer{width:7px;background-color:rgba(0,0,0,0);border:0}.txt-dark .color-pointer{box-shadow:0 0 0 5px var(--white-50)}.txt-light .color-pointer{box-shadow:0 0 0 5px var(--black-50)}.txt-dark .color-pointer:hover{box-shadow:0 0 0 5px var(--white-75)}.txt-light .color-pointer:hover{box-shadow:0 0 0 5px var(--black-75)}.txt-dark .color-pointer:focus,.txt-dark .color-pointer:active{box-shadow:0 0 0 5px var(--white-90)}.txt-light .color-pointer:focus,.txt-light .color-pointer:active{box-shadow:0 0 0 5px var(--black-90)}.v-hidden{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}
1
+ /* ColorPicker v2.0.0-alpha1 | thednp © 2023 | MIT-License */
2
+ .color-picker{position:relative;display:flex;--white-15: rgba(255, 255, 255, 0.15);--white-25: rgba(255, 255, 255, 0.25);--white-33: rgba(255, 255, 255, 0.33);--white-50: rgba(255, 255, 255, 0.5);--white-75: rgba(255, 255, 255, 0.75);--white-90: rgba(255, 255, 255, 0.9);--black-15: rgba(0, 0, 0, 0.15);--black-25: rgba(0, 0, 0, 0.25);--black-33: rgba(0, 0, 0, 0.33);--black-50: rgba(0, 0, 0, 0.5);--black-75: rgba(0, 0, 0, 0.75);--black-90: rgba(0, 0, 0, 0.9);--dropdown-transition: transform 0.33s ease, opacity 0.33s ease;--btn-transition: box-shadow 0.33s ease, border 0.33s ease;--options-transition: height 0.33s ease;--dropdown-bg: var(--black-75);--dropdown-color: var(--white-75);--dropdown-shadow: 0 6px 12px var(--black-33);--dropdown-scrollbar-bg: var(--white-33);--dropdown-scrollbar-bg-hover: var(--white-50);--knob-bg: #000;--knob-border: 1px solid var(--white-90);--knob-shadow-hover: 0 0 0 6px var(--white-50);--knob-shadow-active: 0 0 0 6px var(--white-90);--input-border: 1px solid var(--white-15);--input-border-hover: 1px solid var(--white-33);--input-bg-hover: var(--black-15);--option-color-hover: var(--black-75);--option-bg-hover: var(--white-50);--option-color-active: var(--black-75);--option-bg-active: var(--white-90);--visual-shadow: 0 0 0 1px var(--white-15) inset}.color-picker:focus{outline:none}.color-dropdown{position:absolute;z-index:50;display:none;flex-direction:column;width:min-content;padding:.5rem;color:var(--dropdown-color);background:var(--dropdown-bg);border-radius:.5rem;box-shadow:var(--dropdown-shadow);opacity:0;transition:var(--dropdown-transition)}.color-dropdown.picker{left:0}.color-dropdown.menu{right:0;max-height:230px}.open .color-dropdown.top{top:auto;bottom:100%}.color-dropdown.bottom{top:100%}.open .color-dropdown.top,.open .color-dropdown.bottom{display:flex}.color-dropdown.show{opacity:1}.color-dropdown.show.top{transform:translate(0, -5px)}.color-dropdown.show.bottom{transform:translate(0, 5px)}.color-controls{display:none;flex-wrap:wrap;justify-content:space-between;width:max-content}.btn-appearance{width:100%;height:1.5rem;padding:.6rem 1rem;font-size:1rem;line-height:1.5;border:0;border-radius:.25rem;outline:none;appearance:none;transition:var(--btn-transition)}.btn-appearance:focus,.btn-appearance:hover{box-shadow:0 0 0 3px var(--black-15)}.color-preview{box-shadow:0 0 0 1px rgba(120,120,120,.33) inset;direction:ltr}.txt-dark .color-preview{color:var(--white-75)}.txt-dark .color-preview:focus{box-shadow:0 0 0 1px #fff inset,0 0 0 3px var(--black-15)}.txt-dark .color-preview::placeholder{color:var(--white-50)}.txt-light .color-preview{color:var(--black-75)}.txt-light .color-preview:focus{color:var(--black-75);box-shadow:0 0 0 1px #000 inset,0 0 0 3px var(--black-15)}.txt-light .color-preview::placeholder{color:var(--black-50)}.picker-toggle{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0);border:0}.open .picker-toggle{z-index:-1}.menu-toggle{position:absolute;top:0;right:0;display:flex;width:3rem;height:100%;padding:0 .25rem;cursor:pointer;border:0;border-radius:0 .25rem .25rem 0}.txt-light .menu-toggle{background:var(--black-50)}.txt-light .menu-toggle:focus{background:var(--black-75)}.txt-dark .menu-toggle{background:var(--white-33)}.txt-dark .menu-toggle:focus{background:var(--white-50)}.menu-toggle svg{width:auto;height:100%}.scrollable{overflow-x:hidden;overflow-y:auto;scrollbar-width:thin}.scrollable::-webkit-scrollbar{width:.5rem}.scrollable::-webkit-scrollbar-track{background-color:rgba(0,0,0,0)}.scrollable::-webkit-scrollbar-thumb{width:.5rem;background-color:rgba(0,0,0,0);background-clip:content-box;border:0}.scrollable:hover::-webkit-scrollbar-thumb{background-color:var(--dropdown-scrollbar-bg)}.scrollable::-webkit-scrollbar-thumb:hover{background-color:var(--dropdown-scrollbar-bg-hover)}.color-defaults{display:none;flex-flow:column wrap;margin:0;list-style:none;padding-inline:0}.color-dropdown.menu .color-defaults,.color-dropdown.picker .color-controls{display:flex}.color-defaults .color-option{padding:.25rem .5rem;color:inherit}.color-option{cursor:pointer}.color-defaults .color-option:focus,.color-defaults .color-option:hover{color:var(--option-color-hover);background:var(--option-bg-hover);outline:none}.color-defaults .color-option:active,.color-defaults .color-option.active{color:var(--option-color-active);background:var(--option-bg-active)}.color-options{--grid-item-size: 2rem;--grid-fit: 5;--grid-gap: .25rem;--grid-height: auto;--grid-hover-height: auto;display:grid;padding:0;margin:0;list-style:none;grid-template-columns:repeat(var(--grid-fit), var(--grid-item-size));grid-template-rows:repeat(auto-fill, var(--grid-item-size));gap:var(--grid-gap)}.color-options.scrollable{height:var(--grid-height);margin:0 -0.5rem 0 0;overflow-y:scroll;transition:var(--options-transition)}.color-options.scrollable:hover{height:var(--grid-hover-height)}.color-options+.color-defaults{margin-top:.25rem}.multiline+.color-defaults{flex-flow:row wrap}.multiline+.color-defaults .color-option{padding:.25rem .33rem;font-size:12px}.color-options .color-option{position:relative;width:var(--grid-item-size);height:var(--grid-item-size);overflow:hidden;text-indent:2.1rem}.color-options .color-option:active,.color-options .color-option:focus{outline:none;box-shadow:0 0 0 4px rgba(125,125,125,.75) inset}.color-options .color-option::before{position:absolute;inset:0}.color-options .color-option:hover::before,.color-options .color-option:active::before,.color-options .color-option:focus::before{content:"";border:3px solid var(--white-75);mix-blend-mode:difference}.color-options .color-option.active::after{position:absolute;top:50%;left:50%;width:4px;height:4px;margin:-2px 0 0 -2px;content:"";border-radius:4px}.txt-dark .color-options .color-option.active::after{box-shadow:0 0 0 4px var(--white-90)}.txt-light .color-options .color-option.active::after{box-shadow:0 0 0 4px var(--black-90)}.color-form{display:flex;flex-flow:row wrap;align-items:center;padding:.25rem 0 0;font:12px sans-serif}.color-form.hex{max-width:initial}.color-form>*{flex:1 0 0%;width:17.5%;max-width:17.5%}.color-form label{width:7.5%;max-width:7.5%;text-align:center}.color-input{color:inherit;text-align:right;background:rgba(0,0,0,0);border:var(--input-border);outline:none}.color-input.hex{width:92.5%;max-width:92.5%}.color-input:active,.color-input:focus{background:var(--input-bg-hover);border:var(--input-border-hover)}.visual-control{height:150px;touch-action:none;box-shadow:var(--visual-shadow)}.visual-control1{width:150px}.visual-control2,.visual-control3{width:21px;cursor:ns-resize}@media(min-width: 578px){.visual-control{height:230px}.visual-control1{width:230px}}@media(min-width: 1200px){.visual-control{height:300px}.visual-control1{width:300px}}.color-control{position:relative;display:inline-block}.color-slider{left:0;width:calc(100% - 2px);cursor:ns-resize}.color-control+.color-control{margin-left:.5rem}.knob{position:absolute;top:0;left:0;height:7px;touch-action:none;user-select:none;background-color:var(--knob-bg);border:var(--knob-border);border-radius:5px;outline:none;will-change:transform}.knob:hover{box-shadow:var(--knob-shadow-hover)}.knob:focus,.knob:active{z-index:1;box-shadow:var(--knob-shadow-active)}.color-pointer{width:7px;background-color:rgba(0,0,0,0);border:0}.txt-dark .color-pointer{box-shadow:0 0 0 5px var(--white-50)}.txt-light .color-pointer{box-shadow:0 0 0 5px var(--black-50)}.txt-dark .color-pointer:hover{box-shadow:0 0 0 5px var(--white-75)}.txt-light .color-pointer:hover{box-shadow:0 0 0 5px var(--black-75)}.txt-dark .color-pointer:focus,.txt-dark .color-pointer:active{box-shadow:0 0 0 5px var(--white-90)}.txt-light .color-pointer:focus,.txt-light .color-pointer:active{box-shadow:0 0 0 5px var(--black-90)}.v-hidden{position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}
@@ -1,10 +1,9 @@
1
1
  /*!
2
- * ColorPicker v1.0.1 (http://thednp.github.io/color-picker)
3
- * Copyright 2022 © thednp
4
- * Licensed under MIT (https://github.com/thednp/color-picker/blob/master/LICENSE)
2
+ * ColorPicker v2.0.0-alpha1 (http://thednp.github.io/color-picker)
3
+ * Copyright 2023 © thednp
4
+ * Licensed under MIT (MIT/blob/main/LICENSE)
5
5
  */
6
6
  /* :host */
7
- color-picker,
8
7
  .color-picker {
9
8
  position: relative;
10
9
  display: flex;
@@ -42,7 +41,6 @@ color-picker,
42
41
  --visual-shadow: 0 0 0 1px var(--white-15) inset;
43
42
  }
44
43
 
45
- color-picker:focus,
46
44
  .color-picker:focus {
47
45
  outline: none;
48
46
  }
@@ -69,6 +67,7 @@ color-picker:focus,
69
67
 
70
68
  .color-dropdown.menu {
71
69
  right: 0;
70
+ max-height: 230px;
72
71
  }
73
72
 
74
73
  .open .color-dropdown.top {
@@ -127,8 +126,7 @@ color-picker:focus,
127
126
  /* color-preview */
128
127
  .color-preview {
129
128
  box-shadow: 0 0 0 1px rgba(120, 120, 120, 0.33) inset;
130
- direction: ltr;
131
- /* color value can never be rtl */
129
+ direction: ltr; /* color value can never be rtl */
132
130
  }
133
131
 
134
132
  .txt-dark .color-preview {
@@ -188,8 +186,6 @@ color-picker:focus,
188
186
  .txt-light .menu-toggle {
189
187
  background: var(--black-50);
190
188
  }
191
-
192
- .txt-light .menu-toggle:focus,
193
189
  .txt-light .menu-toggle:focus {
194
190
  background: var(--black-75);
195
191
  }
@@ -197,8 +193,6 @@ color-picker:focus,
197
193
  .txt-dark .menu-toggle {
198
194
  background: var(--white-33);
199
195
  }
200
-
201
- .txt-dark .menu-toggle:focus,
202
196
  .txt-dark .menu-toggle:focus {
203
197
  background: var(--white-50);
204
198
  }
@@ -241,8 +235,7 @@ color-picker:focus,
241
235
  /* color-defaults */
242
236
  .color-defaults {
243
237
  display: none;
244
- flex-wrap: wrap;
245
- flex-flow: column;
238
+ flex-flow: column wrap;
246
239
  margin: 0;
247
240
  list-style: none;
248
241
  padding-inline: 0;
@@ -253,10 +246,6 @@ color-picker:focus,
253
246
  display: flex;
254
247
  }
255
248
 
256
- .color-dropdown.menu {
257
- max-height: 230px;
258
- }
259
-
260
249
  .color-defaults .color-option {
261
250
  padding: 0.25rem 0.5rem;
262
251
  color: inherit;
@@ -311,8 +300,7 @@ color-picker:focus,
311
300
  }
312
301
 
313
302
  .multiline + .color-defaults {
314
- flex-direction: row;
315
- flex-wrap: wrap;
303
+ flex-flow: row wrap;
316
304
  }
317
305
  .multiline + .color-defaults .color-option {
318
306
  padding: 0.25rem 0.33rem;
@@ -326,18 +314,14 @@ color-picker:focus,
326
314
  overflow: hidden;
327
315
  text-indent: 2.1rem;
328
316
  }
329
-
330
- .color-options .color-option:active,
331
- .color-options .color-option:focus {
317
+ .color-options .color-option:active, .color-options .color-option:focus {
332
318
  outline: none;
319
+ box-shadow: 0 0 0 4px rgba(125, 125, 125, 0.75) inset;
333
320
  }
334
321
 
335
322
  .color-options .color-option::before {
336
323
  position: absolute;
337
- top: 0;
338
- right: 0;
339
- bottom: 0;
340
- left: 0;
324
+ inset: 0;
341
325
  }
342
326
 
343
327
  .color-options .color-option:hover::before,
@@ -348,12 +332,7 @@ color-picker:focus,
348
332
  mix-blend-mode: difference;
349
333
  }
350
334
 
351
- .color-options .color-option:active,
352
- .color-options .color-option:focus {
353
- box-shadow: 0 0 0 4px rgba(125, 125, 125, 0.75) inset;
354
- }
355
-
356
- .color-options .color-option.active:after {
335
+ .color-options .color-option.active::after {
357
336
  position: absolute;
358
337
  top: 50%;
359
338
  left: 50%;
@@ -364,19 +343,18 @@ color-picker:focus,
364
343
  border-radius: 4px;
365
344
  }
366
345
 
367
- .txt-dark .color-options .color-option.active:after {
346
+ .txt-dark .color-options .color-option.active::after {
368
347
  box-shadow: 0 0 0 4px var(--white-90);
369
348
  }
370
349
 
371
- .txt-light .color-options .color-option.active:after {
350
+ .txt-light .color-options .color-option.active::after {
372
351
  box-shadow: 0 0 0 4px var(--black-90);
373
352
  }
374
353
 
375
354
  /* color-form */
376
355
  .color-form {
377
356
  display: flex;
378
- flex-direction: row;
379
- flex-wrap: wrap;
357
+ flex-flow: row wrap;
380
358
  align-items: center;
381
359
  padding: 0.25rem 0 0;
382
360
  font: 12px sans-serif;
@@ -439,7 +417,6 @@ color-picker:focus,
439
417
  .visual-control {
440
418
  height: 230px;
441
419
  }
442
-
443
420
  .visual-control1 {
444
421
  width: 230px;
445
422
  }
@@ -448,7 +425,6 @@ color-picker:focus,
448
425
  .visual-control {
449
426
  height: 300px;
450
427
  }
451
-
452
428
  .visual-control1 {
453
429
  width: 300px;
454
430
  }