@thednp/color-picker 0.0.2-alpha5 → 1.0.1
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/README.md +21 -19
- package/dist/css/color-picker.css +82 -46
- package/dist/css/color-picker.min.css +2 -2
- package/dist/css/color-picker.rtl.css +82 -46
- package/dist/css/color-picker.rtl.min.css +2 -2
- package/dist/js/color-esm.js +2 -5
- package/dist/js/color-esm.min.js +1 -1
- package/dist/js/color-palette-esm.js +2 -5
- package/dist/js/color-palette-esm.min.js +1 -1
- package/dist/js/color-palette.js +2 -5
- package/dist/js/color-palette.min.js +1 -1
- package/dist/js/color-picker-element-esm.js +184 -189
- package/dist/js/color-picker-element-esm.min.js +2 -2
- package/dist/js/color-picker-element.js +184 -189
- package/dist/js/color-picker-element.min.js +2 -2
- package/dist/js/color-picker-esm.js +77 -134
- package/dist/js/color-picker-esm.min.js +2 -2
- package/dist/js/color-picker.js +77 -134
- package/dist/js/color-picker.min.js +2 -2
- package/dist/js/color.js +2 -5
- package/dist/js/color.min.js +1 -1
- package/package.json +20 -19
- package/src/js/color-picker-element.js +45 -37
- package/src/js/color-picker.js +46 -60
- package/src/js/color.js +1 -4
- package/src/js/index.js +5 -0
- package/src/js/util/getColorMenu.js +7 -8
- package/src/js/util/setMarkup.js +4 -7
- package/src/js/util/toggleCEAttr.js +70 -0
- package/src/js/util/version.js +0 -1
- package/src/js/version.js +0 -1
- package/src/scss/_variables.scss +7 -0
- package/src/scss/color-picker.scss +86 -45
- package/types/cp.d.ts +31 -17
- package/types/index.d.ts +0 -4
- package/types/source/source.ts +0 -1
- package/types/source/types.d.ts +8 -6
@@ -1,8 +1,43 @@
|
|
1
|
+
@import "variables";
|
2
|
+
|
1
3
|
/* :host */
|
2
4
|
color-picker,
|
3
5
|
.color-picker {
|
4
6
|
position: relative;
|
5
7
|
display: flex;
|
8
|
+
|
9
|
+
@each $name in "white", "black" {
|
10
|
+
@each $lvl in $transparency-levels {
|
11
|
+
@if (type-of($name) == "string" and type-of($lvl) == "number") {
|
12
|
+
$color: #fff;
|
13
|
+
@if $name == "black" {
|
14
|
+
$color: #000;
|
15
|
+
}
|
16
|
+
$rgba: rgba($color, $lvl * .01);
|
17
|
+
--#{$name}-#{$lvl}: #{$rgba};
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}
|
21
|
+
--dropdown-transition: #{$dropdown-transition};
|
22
|
+
--btn-transition: #{$btn-transition};
|
23
|
+
--options-transition: #{$options-transition};
|
24
|
+
--dropdown-bg: var(--black-75);
|
25
|
+
--dropdown-color: var(--white-75);
|
26
|
+
--dropdown-shadow: 0 6px 12px var(--black-33);
|
27
|
+
--dropdown-scrollbar-bg: var(--white-33);
|
28
|
+
--dropdown-scrollbar-bg-hover: var(--white-50);
|
29
|
+
--knob-bg: #000;
|
30
|
+
--knob-border: 1px solid var(--white-90);
|
31
|
+
--knob-shadow-hover: 0 0 0 6px var(--white-50);
|
32
|
+
--knob-shadow-active: 0 0 0 6px var(--white-90);
|
33
|
+
--input-border: 1px solid var(--white-15);
|
34
|
+
--input-border-hover: 1px solid var(--white-33);
|
35
|
+
--input-bg-hover: var(--black-15);
|
36
|
+
--option-color-hover: var(--black-75);
|
37
|
+
--option-bg-hover: var(--white-50);
|
38
|
+
--option-color-active: var(--black-75);
|
39
|
+
--option-bg-active: var(--white-90);
|
40
|
+
--visual-shadow: 0 0 0 1px var(--white-15) inset;
|
6
41
|
}
|
7
42
|
|
8
43
|
color-picker:focus,
|
@@ -18,12 +53,12 @@ color-picker:focus,
|
|
18
53
|
flex-direction: column;
|
19
54
|
width: min-content;
|
20
55
|
padding: .5rem;
|
21
|
-
color:
|
22
|
-
background:
|
56
|
+
color: var(--dropdown-color);
|
57
|
+
background: var(--dropdown-bg);
|
23
58
|
border-radius: .5rem;
|
24
|
-
box-shadow:
|
59
|
+
box-shadow: var(--dropdown-shadow);
|
25
60
|
opacity: 0;
|
26
|
-
transition:
|
61
|
+
transition: var(--dropdown-transition);
|
27
62
|
}
|
28
63
|
|
29
64
|
.color-dropdown.picker { left: 0; }
|
@@ -65,12 +100,13 @@ color-picker:focus,
|
|
65
100
|
border-radius: .25rem;
|
66
101
|
outline: none;
|
67
102
|
appearance: none;
|
68
|
-
transition-duration: .33s;
|
69
|
-
transition-property: box-shadow, border;
|
103
|
+
// transition-duration: .33s;
|
104
|
+
// transition-property: box-shadow, border;
|
105
|
+
transition: var(--btn-transition);
|
70
106
|
}
|
71
107
|
.btn-appearance:focus,
|
72
108
|
.btn-appearance:hover {
|
73
|
-
box-shadow: 0 0 0 3px
|
109
|
+
box-shadow: 0 0 0 3px var(--black-15);
|
74
110
|
}
|
75
111
|
|
76
112
|
/* color-preview */
|
@@ -80,23 +116,23 @@ color-picker:focus,
|
|
80
116
|
}
|
81
117
|
|
82
118
|
.txt-dark .color-preview {
|
83
|
-
color:
|
119
|
+
color: var(--white-75);
|
84
120
|
}
|
85
121
|
.txt-dark .color-preview:focus {
|
86
|
-
box-shadow: 0 0 0 1px
|
122
|
+
box-shadow: 0 0 0 1px #fff inset, 0 0 0 3px var(--black-15);
|
87
123
|
}
|
88
124
|
.txt-dark .color-preview::placeholder {
|
89
|
-
color:
|
125
|
+
color: var(--white-50);
|
90
126
|
}
|
91
127
|
.txt-light .color-preview {
|
92
|
-
color:
|
128
|
+
color: var(--black-75);
|
93
129
|
}
|
94
130
|
.txt-light .color-preview:focus {
|
95
|
-
color:
|
96
|
-
box-shadow: 0 0 0 1px
|
131
|
+
color: var(--black-75);
|
132
|
+
box-shadow: 0 0 0 1px #000 inset, 0 0 0 3px var(--black-15);
|
97
133
|
}
|
98
134
|
.txt-light .color-preview::placeholder {
|
99
|
-
color:
|
135
|
+
color: var(--black-50);
|
100
136
|
}
|
101
137
|
|
102
138
|
/* picker-toggle */
|
@@ -128,18 +164,18 @@ color-picker:focus,
|
|
128
164
|
border-radius: 0 .25rem .25rem 0;
|
129
165
|
}
|
130
166
|
.txt-light .menu-toggle {
|
131
|
-
background:
|
167
|
+
background: var(--black-50);
|
132
168
|
}
|
133
169
|
.txt-light .menu-toggle:focus,
|
134
170
|
.txt-light .menu-toggle:focus {
|
135
|
-
background:
|
171
|
+
background: var(--black-75);
|
136
172
|
}
|
137
173
|
.txt-dark .menu-toggle {
|
138
|
-
background:
|
174
|
+
background: var(--white-33);
|
139
175
|
}
|
140
176
|
.txt-dark .menu-toggle:focus,
|
141
177
|
.txt-dark .menu-toggle:focus {
|
142
|
-
background:
|
178
|
+
background: var(--white-50);
|
143
179
|
}
|
144
180
|
.menu-toggle svg {
|
145
181
|
width: auto;
|
@@ -168,11 +204,11 @@ color-picker:focus,
|
|
168
204
|
}
|
169
205
|
|
170
206
|
.scrollable:hover::-webkit-scrollbar-thumb {
|
171
|
-
background-color:
|
207
|
+
background-color: var(--dropdown-scrollbar-bg);
|
172
208
|
}
|
173
209
|
|
174
210
|
.scrollable::-webkit-scrollbar-thumb:hover {
|
175
|
-
background-color:
|
211
|
+
background-color: var(--dropdown-scrollbar-bg-hover);
|
176
212
|
}
|
177
213
|
|
178
214
|
/* color-defaults */
|
@@ -205,27 +241,28 @@ color-picker:focus,
|
|
205
241
|
|
206
242
|
.color-defaults .color-option:focus,
|
207
243
|
.color-defaults .color-option:hover {
|
208
|
-
|
244
|
+
color: var(--option-color-hover);
|
245
|
+
background: var(--option-bg-hover);
|
209
246
|
outline: none;
|
210
247
|
}
|
211
248
|
|
212
249
|
.color-defaults .color-option:active,
|
213
250
|
.color-defaults .color-option.active {
|
214
|
-
color:
|
215
|
-
background:
|
251
|
+
color: var(--option-color-active);
|
252
|
+
background: var(--option-bg-active);
|
216
253
|
}
|
217
254
|
|
218
255
|
/* color-options grid */
|
219
256
|
.color-options {
|
220
|
-
display: grid;
|
221
|
-
padding: 0;
|
222
|
-
margin: 0;
|
223
|
-
list-style: none;
|
224
257
|
--grid-item-size: 2rem; // grid item width / height
|
225
258
|
--grid-fit: 5; // grid columns
|
226
259
|
--grid-gap: .25rem; // grid vertical / horizontal spacing
|
227
260
|
--grid-height: auto; // default height
|
228
261
|
--grid-hover-height: auto; // height on hover
|
262
|
+
display: grid;
|
263
|
+
padding: 0;
|
264
|
+
margin: 0;
|
265
|
+
list-style: none;
|
229
266
|
grid-template-columns: repeat(var(--grid-fit), var(--grid-item-size));
|
230
267
|
grid-template-rows: repeat(auto-fill, var(--grid-item-size));
|
231
268
|
gap: var(--grid-gap);
|
@@ -234,7 +271,7 @@ color-picker:focus,
|
|
234
271
|
height: var(--grid-height);
|
235
272
|
margin: 0 -.5rem 0 0; // 0.5rem is the scrollbar width
|
236
273
|
overflow-y: scroll;
|
237
|
-
transition:
|
274
|
+
transition: var(--options-transition);
|
238
275
|
}
|
239
276
|
.color-options.scrollable:hover {
|
240
277
|
height: var(--grid-hover-height);
|
@@ -272,7 +309,7 @@ color-picker:focus,
|
|
272
309
|
.color-options .color-option:active::before,
|
273
310
|
.color-options .color-option:focus::before {
|
274
311
|
content: "";
|
275
|
-
border: 3px solid
|
312
|
+
border: 3px solid var(--white-75);
|
276
313
|
mix-blend-mode: difference;
|
277
314
|
}
|
278
315
|
|
@@ -294,10 +331,10 @@ color-picker:focus,
|
|
294
331
|
}
|
295
332
|
}
|
296
333
|
.txt-dark .color-options .color-option.active:after {
|
297
|
-
box-shadow: 0 0 0 4px
|
334
|
+
box-shadow: 0 0 0 4px var(--white-90);
|
298
335
|
}
|
299
336
|
.txt-light .color-options .color-option.active:after {
|
300
|
-
box-shadow: 0 0 0 4px
|
337
|
+
box-shadow: 0 0 0 4px var(--black-90);
|
301
338
|
}
|
302
339
|
|
303
340
|
/* color-form */
|
@@ -328,25 +365,27 @@ color-picker:focus,
|
|
328
365
|
color: inherit;
|
329
366
|
text-align: right;
|
330
367
|
background: transparent;
|
331
|
-
border:
|
368
|
+
border: var(--input-border);
|
332
369
|
outline: none;
|
333
370
|
}
|
334
371
|
|
335
372
|
.color-input.hex {
|
336
373
|
width: 92.5%;
|
337
374
|
max-width: 92.5%;
|
338
|
-
/* width: calc(100% - 4% - 1rem); */
|
339
375
|
}
|
340
376
|
|
341
377
|
.color-input:active,
|
342
378
|
.color-input:focus {
|
343
|
-
background:
|
344
|
-
border:
|
379
|
+
background: var(--input-bg-hover);
|
380
|
+
border: var(--input-border-hover);
|
345
381
|
}
|
346
382
|
|
347
383
|
/* visual control */
|
348
384
|
.visual-control {
|
349
385
|
height: 150px;
|
386
|
+
/* important for mobile devices */
|
387
|
+
touch-action: none;
|
388
|
+
box-shadow: var(--visual-shadow);
|
350
389
|
}
|
351
390
|
|
352
391
|
.visual-control1 {
|
@@ -389,20 +428,22 @@ color-picker:focus,
|
|
389
428
|
top: 0;
|
390
429
|
left: 0;
|
391
430
|
height: 7px;
|
431
|
+
/* important for mobile devices */
|
432
|
+
touch-action: none;
|
392
433
|
user-select: none;
|
393
|
-
background-color:
|
394
|
-
border:
|
434
|
+
background-color: var(--knob-bg);
|
435
|
+
border: var(--knob-border);
|
395
436
|
border-radius: 5px;
|
396
437
|
outline: none;
|
397
438
|
will-change: transform;
|
398
439
|
}
|
399
440
|
.knob:hover {
|
400
|
-
box-shadow:
|
441
|
+
box-shadow: var(--knob-shadow-hover);
|
401
442
|
}
|
402
443
|
.knob:focus,
|
403
444
|
.knob:active {
|
404
445
|
z-index: 1;
|
405
|
-
box-shadow:
|
446
|
+
box-shadow: var(--knob-shadow-active);
|
406
447
|
}
|
407
448
|
|
408
449
|
/* color-pointer */
|
@@ -413,26 +454,26 @@ color-picker:focus,
|
|
413
454
|
}
|
414
455
|
|
415
456
|
.txt-dark .color-pointer {
|
416
|
-
box-shadow: 0 0 0 5px
|
457
|
+
box-shadow: 0 0 0 5px var(--white-50);
|
417
458
|
}
|
418
459
|
.txt-light .color-pointer {
|
419
|
-
box-shadow: 0 0 0 5px
|
460
|
+
box-shadow: 0 0 0 5px var(--black-50);
|
420
461
|
}
|
421
462
|
|
422
463
|
.txt-dark .color-pointer:hover {
|
423
|
-
box-shadow: 0 0 0 5px
|
464
|
+
box-shadow: 0 0 0 5px var(--white-75);
|
424
465
|
}
|
425
466
|
.txt-light .color-pointer:hover {
|
426
|
-
box-shadow: 0 0 0 5px
|
467
|
+
box-shadow: 0 0 0 5px var(--black-75);
|
427
468
|
}
|
428
469
|
|
429
470
|
.txt-dark .color-pointer:focus,
|
430
471
|
.txt-dark .color-pointer:active {
|
431
|
-
box-shadow: 0 0 0 5px
|
472
|
+
box-shadow: 0 0 0 5px var(--white-90);
|
432
473
|
}
|
433
474
|
.txt-light .color-pointer:focus,
|
434
475
|
.txt-light .color-pointer:active {
|
435
|
-
box-shadow: 0 0 0 5px
|
476
|
+
box-shadow: 0 0 0 5px var(--black-90);
|
436
477
|
}
|
437
478
|
|
438
479
|
/* utility */
|
package/types/cp.d.ts
CHANGED
@@ -334,12 +334,6 @@ declare module "color-picker/src/js/color-picker" {
|
|
334
334
|
format: CP.ColorFormats;
|
335
335
|
/** Shows the `ColorPicker` dropdown. */
|
336
336
|
showPicker(): void;
|
337
|
-
/**
|
338
|
-
* The `Space` & `Enter` keys specific event listener.
|
339
|
-
* Toggle visibility of the `ColorPicker` / the presets menu, showing one will hide the other.
|
340
|
-
* @param {KeyboardEvent} e
|
341
|
-
* @this {ColorPicker}
|
342
|
-
*/
|
343
337
|
/**
|
344
338
|
* Toggle the `ColorPicker` dropdown visibility.
|
345
339
|
* @param {Event=} e
|
@@ -354,10 +348,10 @@ declare module "color-picker/src/js/color-picker" {
|
|
354
348
|
toggleMenu(this: ColorPicker, e?: Event | undefined): void;
|
355
349
|
/**
|
356
350
|
* The `ColorPicker` click event listener for the colour menu presets / defaults.
|
357
|
-
* @param {
|
351
|
+
* @param {Event} e
|
358
352
|
* @this {ColorPicker}
|
359
353
|
*/
|
360
|
-
menuClickHandler(this: ColorPicker, e:
|
354
|
+
menuClickHandler(this: ColorPicker, e: Event): void;
|
361
355
|
/**
|
362
356
|
* The `ColorPicker` keyboard event listener for menu navigation.
|
363
357
|
* @param {KeyboardEvent} e
|
@@ -366,21 +360,21 @@ declare module "color-picker/src/js/color-picker" {
|
|
366
360
|
menuKeyHandler(this: ColorPicker, e: KeyboardEvent): void;
|
367
361
|
/**
|
368
362
|
* The `ColorPicker` *touchstart* / *mousedown* events listener for control knobs.
|
369
|
-
* @param {
|
363
|
+
* @param {PointerEvent} e
|
370
364
|
* @this {ColorPicker}
|
371
365
|
*/
|
372
|
-
pointerDown(this: ColorPicker, e:
|
366
|
+
pointerDown(this: ColorPicker, e: PointerEvent): void;
|
373
367
|
/**
|
374
368
|
* The `ColorPicker` *touchmove* / *mousemove* events listener for control knobs.
|
375
|
-
* @param {
|
369
|
+
* @param {PointerEvent} e
|
376
370
|
*/
|
377
|
-
pointerMove(e:
|
371
|
+
pointerMove(e: PointerEvent): void;
|
378
372
|
/**
|
379
373
|
* The `ColorPicker` *touchend* / *mouseup* events listener for control knobs.
|
380
|
-
* @param {
|
374
|
+
* @param {PointerEvent} e
|
381
375
|
* @this {ColorPicker}
|
382
376
|
*/
|
383
|
-
pointerUp(this: ColorPicker, { target }:
|
377
|
+
pointerUp(this: ColorPicker, { target }: PointerEvent): void;
|
384
378
|
/**
|
385
379
|
* Updates `ColorPicker` control positions on:
|
386
380
|
* * initialization
|
@@ -422,7 +416,7 @@ declare module "color-picker/src/js/color-picker" {
|
|
422
416
|
colorMenu: HTMLElement;
|
423
417
|
/** @type {HTMLInputElement[]} */
|
424
418
|
inputs: HTMLInputElement[];
|
425
|
-
controls:
|
419
|
+
controls: any;
|
426
420
|
/** @type {(HTMLElement | Element)[]} */
|
427
421
|
controlKnobs: (HTMLElement | Element)[];
|
428
422
|
/** @type {(HTMLElement)[]} */
|
@@ -508,14 +502,34 @@ declare module "color-picker/src/js/color-picker" {
|
|
508
502
|
import ColorPalette from "color-picker/src/js/color-palette";
|
509
503
|
import Color from "color-picker/src/js/color";
|
510
504
|
}
|
505
|
+
declare module "color-picker/src/js/util/toggleCEAttr" {
|
506
|
+
/**
|
507
|
+
* A small utility to toggle `ColorPickerElement` attributes
|
508
|
+
* when `connectedCallback` or `disconnectedCallback` methods
|
509
|
+
* are called and helps the instance keep its value and settings instact.
|
510
|
+
*
|
511
|
+
* @param {CP.ColorPickerElement} self ColorPickerElement instance
|
512
|
+
* @param {Function=} callback when `true`, attributes are added
|
513
|
+
*
|
514
|
+
* @example
|
515
|
+
* const attributes = [
|
516
|
+
* // essentials
|
517
|
+
* 'value', 'format',
|
518
|
+
* // presets menus
|
519
|
+
* 'color-presets', 'color-keywords',
|
520
|
+
* // labels
|
521
|
+
* 'color-labels', 'component-labels',
|
522
|
+
* ];
|
523
|
+
*/
|
524
|
+
export default function toggleCEAttr(self: CP.ColorPickerElement, callback?: Function | undefined): void;
|
525
|
+
}
|
511
526
|
declare module "color-picker/src/js/color-picker-element" {
|
512
527
|
export default ColorPickerElement;
|
513
528
|
/**
|
514
529
|
* `ColorPickerElement` Web Component.
|
515
530
|
* @example
|
516
531
|
* <label for="UNIQUE_ID">Label</label>
|
517
|
-
* <color-picker>
|
518
|
-
* <input id="UNIQUE_ID" value="red" format="hex" class="color-preview btn-appearance">
|
532
|
+
* <color-picker data-id="UNIQUE_ID" data-value="red" data-format="hex">
|
519
533
|
* </color-picker>
|
520
534
|
* // or
|
521
535
|
* <label for="UNIQUE_ID">Label</label>
|
package/types/index.d.ts
CHANGED
@@ -18,7 +18,6 @@ export {
|
|
18
18
|
InitCallback,
|
19
19
|
} from './source/types';
|
20
20
|
|
21
|
-
import './cp';
|
22
21
|
import { default as Color } from "color-picker/src/js/color";
|
23
22
|
import { default as ColorPalette } from "color-picker/src/js/color-palette";
|
24
23
|
import { default as ColorPicker } from "color-picker/src/js/color-picker";
|
@@ -43,6 +42,3 @@ declare module "@thednp/color-picker/src/js/color-picker" {
|
|
43
42
|
declare module "@thednp/color-picker/src/js/color-picker-element" {
|
44
43
|
export default ColorPickerElement;
|
45
44
|
}
|
46
|
-
|
47
|
-
export * as SHORTER from "shorter-js";
|
48
|
-
export * as EventListener from "event-listener.js";
|
package/types/source/source.ts
CHANGED
package/types/source/types.d.ts
CHANGED
@@ -32,9 +32,6 @@ export interface RGBA extends RGB {
|
|
32
32
|
* @link https://en.wikibooks.org/wiki/Color_Models:_RGB,_HSV,_HSL#HSL
|
33
33
|
*/
|
34
34
|
export interface HSL {
|
35
|
-
// h: number | string;
|
36
|
-
// s: number | string;
|
37
|
-
// l: number | string;
|
38
35
|
h: number;
|
39
36
|
s: number;
|
40
37
|
l: number;
|
@@ -79,12 +76,17 @@ export interface ColorPickerOptions {
|
|
79
76
|
colorLabels?: string[];
|
80
77
|
componentLabels?: Record<string, string>;
|
81
78
|
format?: ColorFormats;
|
82
|
-
colorPresets?: string[]
|
79
|
+
colorPresets?: string[] | {
|
80
|
+
hue: number,
|
81
|
+
lightSteps: number,
|
82
|
+
hueSteps: number,
|
83
|
+
colors: string[],
|
84
|
+
};
|
83
85
|
colorKeywords?: string[];
|
84
86
|
}
|
85
87
|
|
86
88
|
export type ColorInput = string | RGB | RGBA | HSL | HSLA | HSV | HSVA | HWB | ColorObject;
|
87
89
|
export type ColorFormats = string | 'rgb' | 'hex' | 'hex3' | 'hex4' | 'hex6' | 'hex8' | 'hsl' | 'hsv' | 'hwb';
|
88
90
|
|
89
|
-
export type GetInstance<T> = (
|
90
|
-
export type InitCallback<T> = (element:
|
91
|
+
export type GetInstance<T, ET> = (target: ET | string, component: string) => T | null;
|
92
|
+
export type InitCallback<T> = (element: HTMLInputElement | string ) => T;
|