@thednp/color-picker 1.0.1 → 2.0.0-alpha10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.cjs +199 -0
- package/.lgtm.yml +9 -0
- package/.prettierrc.json +15 -0
- package/.stylelintrc.json +236 -0
- package/README.md +55 -72
- package/compile.js +51 -0
- package/cypress/e2e/color-palette.cy.ts +128 -0
- package/cypress/e2e/color-picker.cy.ts +909 -0
- package/cypress/fixtures/colorNamesFrench.js +3 -0
- package/cypress/fixtures/componentLabelsFrench.js +21 -0
- package/cypress/fixtures/format.js +3 -0
- package/cypress/fixtures/getMarkup.js +35 -0
- package/cypress/fixtures/getRandomInt.js +6 -0
- package/cypress/fixtures/sampleWebcolors.js +18 -0
- package/cypress/fixtures/testSample.js +8 -0
- package/cypress/plugins/esbuild-istanbul.ts +50 -0
- package/cypress/plugins/tsCompile.ts +34 -0
- package/cypress/support/commands.ts +0 -0
- package/cypress/support/e2e.ts +21 -0
- package/cypress/test.html +23 -0
- package/cypress.config.ts +29 -0
- package/dist/css/color-picker.css +25 -54
- package/dist/css/color-picker.min.css +2 -2
- package/dist/css/color-picker.rtl.css +25 -54
- package/dist/css/color-picker.rtl.min.css +2 -2
- package/dist/js/color-picker.cjs +8 -0
- package/dist/js/color-picker.cjs.map +1 -0
- package/dist/js/color-picker.d.ts +296 -0
- package/dist/js/color-picker.js +5 -3570
- package/dist/js/color-picker.js.map +1 -0
- package/dist/js/color-picker.mjs +2618 -0
- package/dist/js/color-picker.mjs.map +1 -0
- package/dts.config.ts +15 -0
- package/package.json +116 -108
- package/src/scss/_variables.scss +0 -1
- package/src/scss/color-picker.rtl.scss +4 -0
- package/src/scss/color-picker.scss +93 -51
- package/src/ts/colorPalette.ts +89 -0
- package/src/{js/color-picker.js → ts/index.ts} +498 -509
- package/src/ts/interface/ColorNames.ts +20 -0
- package/src/ts/interface/colorPickerLabels.ts +20 -0
- package/src/ts/interface/colorPickerOptions.ts +11 -0
- package/src/ts/interface/paletteOptions.ts +6 -0
- package/src/ts/util/colorNames.ts +21 -0
- package/src/{js/util/colorPickerLabels.js → ts/util/colorPickerLabels.ts} +4 -2
- package/src/ts/util/getColorControls.ts +90 -0
- package/src/{js/util/getColorForm.js → ts/util/getColorForm.ts} +28 -18
- package/src/{js/util/getColorMenu.js → ts/util/getColorMenu.ts} +21 -30
- package/src/ts/util/isValidJSON.ts +19 -0
- package/src/{js/util/setMarkup.js → ts/util/setMarkup.ts} +61 -50
- package/tsconfig.json +29 -0
- package/vite.config.ts +34 -0
- package/dist/js/color-esm.js +0 -1164
- package/dist/js/color-esm.min.js +0 -2
- package/dist/js/color-palette-esm.js +0 -1235
- package/dist/js/color-palette-esm.min.js +0 -2
- package/dist/js/color-palette.js +0 -1243
- package/dist/js/color-palette.min.js +0 -2
- package/dist/js/color-picker-element-esm.js +0 -3718
- package/dist/js/color-picker-element-esm.min.js +0 -2
- package/dist/js/color-picker-element.js +0 -3726
- package/dist/js/color-picker-element.min.js +0 -2
- package/dist/js/color-picker-esm.js +0 -3565
- package/dist/js/color-picker-esm.min.js +0 -2
- package/dist/js/color-picker.min.js +0 -2
- package/dist/js/color.js +0 -1172
- package/dist/js/color.min.js +0 -2
- package/src/js/color-palette.js +0 -75
- package/src/js/color-picker-element.js +0 -107
- package/src/js/color.js +0 -1104
- package/src/js/index.js +0 -8
- package/src/js/util/colorNames.js +0 -6
- package/src/js/util/getColorControls.js +0 -103
- package/src/js/util/isValidJSON.js +0 -13
- package/src/js/util/nonColors.js +0 -5
- package/src/js/util/roundPart.js +0 -9
- package/src/js/util/setCSSProperties.js +0 -12
- package/src/js/util/tabindex.js +0 -3
- package/src/js/util/toggleCEAttr.js +0 -70
- package/src/js/util/version.js +0 -5
- package/src/js/version.js +0 -5
- package/types/cp.d.ts +0 -558
- package/types/index.d.ts +0 -44
- package/types/source/source.ts +0 -4
- package/types/source/types.d.ts +0 -92
- /package/src/{js/util/vHidden.js → ts/util/vHidden.ts} +0 -0
@@ -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,35 @@
|
|
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
|
+
|
24
|
+
const a = document.createElement('a');
|
25
|
+
a.setAttribute('href', '#');
|
26
|
+
a.innerText = 'Some link';
|
27
|
+
a.className = 'my-link';
|
28
|
+
a.style = 'position: absolute; top: 20px; opacity: 0.015';
|
29
|
+
// body.append(a);
|
30
|
+
cpWrapper.append(input);
|
31
|
+
if (body) {
|
32
|
+
body.append(label, cpWrapper, a);
|
33
|
+
}
|
34
|
+
return {set, value};
|
35
|
+
}
|
@@ -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
|
3
|
-
* Copyright
|
4
|
-
* Licensed under MIT (https://github.com/thednp/color-picker/blob/
|
2
|
+
* ColorPicker v2.0.0-alpha10 (http://thednp.github.io/color-picker)
|
3
|
+
* Copyright 2023 © thednp
|
4
|
+
* Licensed under MIT (https://github.com/thednp/color-picker/blob/main/LICENSE)
|
5
5
|
*/
|
6
6
|
/* :host */
|
7
|
-
color-picker,
|
8
7
|
.color-picker {
|
9
8
|
position: relative;
|
10
9
|
display: flex;
|
@@ -41,8 +40,10 @@ color-picker,
|
|
41
40
|
--option-bg-active: var(--white-90);
|
42
41
|
--visual-shadow: 0 0 0 1px var(--white-15) inset;
|
43
42
|
}
|
43
|
+
.color-picker *, .color-picker *::before, .color-picker *::after {
|
44
|
+
box-sizing: border-box;
|
45
|
+
}
|
44
46
|
|
45
|
-
color-picker:focus,
|
46
47
|
.color-picker:focus {
|
47
48
|
outline: none;
|
48
49
|
}
|
@@ -69,6 +70,7 @@ color-picker:focus,
|
|
69
70
|
|
70
71
|
.color-dropdown.menu {
|
71
72
|
right: 0;
|
73
|
+
max-height: 230px;
|
72
74
|
}
|
73
75
|
|
74
76
|
.open .color-dropdown.top {
|
@@ -108,7 +110,6 @@ color-picker:focus,
|
|
108
110
|
/* btn-appearance */
|
109
111
|
.btn-appearance {
|
110
112
|
width: 100%;
|
111
|
-
height: 1.5rem;
|
112
113
|
padding: 0.6rem 1rem;
|
113
114
|
font-size: 1rem;
|
114
115
|
line-height: 1.5;
|
@@ -127,8 +128,7 @@ color-picker:focus,
|
|
127
128
|
/* color-preview */
|
128
129
|
.color-preview {
|
129
130
|
box-shadow: 0 0 0 1px rgba(120, 120, 120, 0.33) inset;
|
130
|
-
direction: ltr;
|
131
|
-
/* color value can never be rtl */
|
131
|
+
direction: ltr; /* color value can never be rtl */
|
132
132
|
}
|
133
133
|
|
134
134
|
.txt-dark .color-preview {
|
@@ -159,10 +159,10 @@ color-picker:focus,
|
|
159
159
|
/* picker-toggle */
|
160
160
|
.picker-toggle {
|
161
161
|
position: absolute;
|
162
|
-
|
163
|
-
left: 0;
|
162
|
+
inset: 0;
|
164
163
|
width: 100%;
|
165
164
|
height: 100%;
|
165
|
+
cursor: pointer;
|
166
166
|
background: transparent;
|
167
167
|
border: 0;
|
168
168
|
}
|
@@ -188,8 +188,6 @@ color-picker:focus,
|
|
188
188
|
.txt-light .menu-toggle {
|
189
189
|
background: var(--black-50);
|
190
190
|
}
|
191
|
-
|
192
|
-
.txt-light .menu-toggle:focus,
|
193
191
|
.txt-light .menu-toggle:focus {
|
194
192
|
background: var(--black-75);
|
195
193
|
}
|
@@ -197,8 +195,6 @@ color-picker:focus,
|
|
197
195
|
.txt-dark .menu-toggle {
|
198
196
|
background: var(--white-33);
|
199
197
|
}
|
200
|
-
|
201
|
-
.txt-dark .menu-toggle:focus,
|
202
198
|
.txt-dark .menu-toggle:focus {
|
203
199
|
background: var(--white-50);
|
204
200
|
}
|
@@ -241,8 +237,7 @@ color-picker:focus,
|
|
241
237
|
/* color-defaults */
|
242
238
|
.color-defaults {
|
243
239
|
display: none;
|
244
|
-
flex-
|
245
|
-
flex-flow: column;
|
240
|
+
flex-flow: column wrap;
|
246
241
|
margin: 0;
|
247
242
|
list-style: none;
|
248
243
|
padding-inline: 0;
|
@@ -253,10 +248,6 @@ color-picker:focus,
|
|
253
248
|
display: flex;
|
254
249
|
}
|
255
250
|
|
256
|
-
.color-dropdown.menu {
|
257
|
-
max-height: 230px;
|
258
|
-
}
|
259
|
-
|
260
251
|
.color-defaults .color-option {
|
261
252
|
padding: 0.25rem 0.5rem;
|
262
253
|
color: inherit;
|
@@ -302,7 +293,7 @@ color-picker:focus,
|
|
302
293
|
transition: var(--options-transition);
|
303
294
|
}
|
304
295
|
|
305
|
-
.color-
|
296
|
+
.color-dropdown.menu:hover .scrollable {
|
306
297
|
height: var(--grid-hover-height);
|
307
298
|
}
|
308
299
|
|
@@ -311,8 +302,7 @@ color-picker:focus,
|
|
311
302
|
}
|
312
303
|
|
313
304
|
.multiline + .color-defaults {
|
314
|
-
flex-
|
315
|
-
flex-wrap: wrap;
|
305
|
+
flex-flow: row wrap;
|
316
306
|
}
|
317
307
|
.multiline + .color-defaults .color-option {
|
318
308
|
padding: 0.25rem 0.33rem;
|
@@ -324,20 +314,16 @@ color-picker:focus,
|
|
324
314
|
width: var(--grid-item-size);
|
325
315
|
height: var(--grid-item-size);
|
326
316
|
overflow: hidden;
|
327
|
-
|
317
|
+
color: rgba(0, 0, 0, 0);
|
328
318
|
}
|
329
|
-
|
330
|
-
.color-options .color-option:active,
|
331
|
-
.color-options .color-option:focus {
|
319
|
+
.color-options .color-option:active, .color-options .color-option:focus {
|
332
320
|
outline: none;
|
321
|
+
box-shadow: 0 0 0 4px rgba(125, 125, 125, 0.75) inset;
|
333
322
|
}
|
334
323
|
|
335
324
|
.color-options .color-option::before {
|
336
325
|
position: absolute;
|
337
|
-
|
338
|
-
right: 0;
|
339
|
-
bottom: 0;
|
340
|
-
left: 0;
|
326
|
+
inset: 0;
|
341
327
|
}
|
342
328
|
|
343
329
|
.color-options .color-option:hover::before,
|
@@ -348,12 +334,7 @@ color-picker:focus,
|
|
348
334
|
mix-blend-mode: difference;
|
349
335
|
}
|
350
336
|
|
351
|
-
.color-options .color-option
|
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 {
|
337
|
+
.color-options .color-option.active::after {
|
357
338
|
position: absolute;
|
358
339
|
top: 50%;
|
359
340
|
left: 50%;
|
@@ -364,19 +345,18 @@ color-picker:focus,
|
|
364
345
|
border-radius: 4px;
|
365
346
|
}
|
366
347
|
|
367
|
-
.txt-dark .color-options .color-option.active
|
348
|
+
.txt-dark .color-options .color-option.active::after {
|
368
349
|
box-shadow: 0 0 0 4px var(--white-90);
|
369
350
|
}
|
370
351
|
|
371
|
-
.txt-light .color-options .color-option.active
|
352
|
+
.txt-light .color-options .color-option.active::after {
|
372
353
|
box-shadow: 0 0 0 4px var(--black-90);
|
373
354
|
}
|
374
355
|
|
375
356
|
/* color-form */
|
376
357
|
.color-form {
|
377
358
|
display: flex;
|
378
|
-
flex-
|
379
|
-
flex-wrap: wrap;
|
359
|
+
flex-flow: row wrap;
|
380
360
|
align-items: center;
|
381
361
|
padding: 0.25rem 0 0;
|
382
362
|
font: 12px sans-serif;
|
@@ -419,14 +399,14 @@ color-picker:focus,
|
|
419
399
|
|
420
400
|
/* visual control */
|
421
401
|
.visual-control {
|
422
|
-
height:
|
402
|
+
height: 230px;
|
423
403
|
/* important for mobile devices */
|
424
404
|
touch-action: none;
|
425
405
|
box-shadow: var(--visual-shadow);
|
426
406
|
}
|
427
407
|
|
428
408
|
.visual-control1 {
|
429
|
-
width:
|
409
|
+
width: 230px;
|
430
410
|
}
|
431
411
|
|
432
412
|
.visual-control2,
|
@@ -435,20 +415,10 @@ color-picker:focus,
|
|
435
415
|
cursor: ns-resize;
|
436
416
|
}
|
437
417
|
|
438
|
-
@media (
|
439
|
-
.visual-control {
|
440
|
-
height: 230px;
|
441
|
-
}
|
442
|
-
|
443
|
-
.visual-control1 {
|
444
|
-
width: 230px;
|
445
|
-
}
|
446
|
-
}
|
447
|
-
@media (min-width: 1200px) {
|
418
|
+
@media (width >= 980px) {
|
448
419
|
.visual-control {
|
449
420
|
height: 300px;
|
450
421
|
}
|
451
|
-
|
452
422
|
.visual-control1 {
|
453
423
|
width: 300px;
|
454
424
|
}
|
@@ -473,6 +443,7 @@ color-picker:focus,
|
|
473
443
|
position: absolute;
|
474
444
|
top: 0;
|
475
445
|
left: 0;
|
446
|
+
width: 100%;
|
476
447
|
height: 7px;
|
477
448
|
/* important for mobile devices */
|
478
449
|
touch-action: none;
|
@@ -1,2 +1,2 @@
|
|
1
|
-
/* ColorPicker
|
2
|
-
color-picker
|
1
|
+
/* ColorPicker v2.0.0-alpha10 | 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 *,.color-picker *::before,.color-picker *::after{box-sizing:border-box}.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%;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;inset:0;width:100%;height:100%;cursor:pointer;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-dropdown.menu:hover .scrollable{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;color:rgba(0,0,0,0)}.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:230px;touch-action:none;box-shadow:var(--visual-shadow)}.visual-control1{width:230px}.visual-control2,.visual-control3{width:21px;cursor:ns-resize}@media(width >= 980px){.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;width:100%;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}
|