@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.
Files changed (37) hide show
  1. package/README.md +21 -19
  2. package/dist/css/color-picker.css +82 -46
  3. package/dist/css/color-picker.min.css +2 -2
  4. package/dist/css/color-picker.rtl.css +82 -46
  5. package/dist/css/color-picker.rtl.min.css +2 -2
  6. package/dist/js/color-esm.js +2 -5
  7. package/dist/js/color-esm.min.js +1 -1
  8. package/dist/js/color-palette-esm.js +2 -5
  9. package/dist/js/color-palette-esm.min.js +1 -1
  10. package/dist/js/color-palette.js +2 -5
  11. package/dist/js/color-palette.min.js +1 -1
  12. package/dist/js/color-picker-element-esm.js +184 -189
  13. package/dist/js/color-picker-element-esm.min.js +2 -2
  14. package/dist/js/color-picker-element.js +184 -189
  15. package/dist/js/color-picker-element.min.js +2 -2
  16. package/dist/js/color-picker-esm.js +77 -134
  17. package/dist/js/color-picker-esm.min.js +2 -2
  18. package/dist/js/color-picker.js +77 -134
  19. package/dist/js/color-picker.min.js +2 -2
  20. package/dist/js/color.js +2 -5
  21. package/dist/js/color.min.js +1 -1
  22. package/package.json +20 -19
  23. package/src/js/color-picker-element.js +45 -37
  24. package/src/js/color-picker.js +46 -60
  25. package/src/js/color.js +1 -4
  26. package/src/js/index.js +5 -0
  27. package/src/js/util/getColorMenu.js +7 -8
  28. package/src/js/util/setMarkup.js +4 -7
  29. package/src/js/util/toggleCEAttr.js +70 -0
  30. package/src/js/util/version.js +0 -1
  31. package/src/js/version.js +0 -1
  32. package/src/scss/_variables.scss +7 -0
  33. package/src/scss/color-picker.scss +86 -45
  34. package/types/cp.d.ts +31 -17
  35. package/types/index.d.ts +0 -4
  36. package/types/source/source.ts +0 -1
  37. 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: rgba(255,255,255,.8);
22
- background: rgba(0,0,0,.75);
56
+ color: var(--dropdown-color);
57
+ background: var(--dropdown-bg);
23
58
  border-radius: .5rem;
24
- box-shadow: 0 6px 12px rgba(0, 0, 0, .4);
59
+ box-shadow: var(--dropdown-shadow);
25
60
  opacity: 0;
26
- transition: transform .33s ease, opacity .33s ease;
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 rgba(0,0,0,.15);
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: rgba(255,255,255,.8);
119
+ color: var(--white-75);
84
120
  }
85
121
  .txt-dark .color-preview:focus {
86
- box-shadow: 0 0 0 1px rgb(255,255,255) inset, 0 0 0 3px rgba(0,0,0,.15);
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: rgba(255,255,255,.6);
125
+ color: var(--white-50);
90
126
  }
91
127
  .txt-light .color-preview {
92
- color: rgba(0,0,0,.8);
128
+ color: var(--black-75);
93
129
  }
94
130
  .txt-light .color-preview:focus {
95
- color: rgba(0,0,0,.8);
96
- box-shadow: 0 0 0 1px rgba(0,0,0,.5) inset, 0 0 0 3px rgba(0,0,0,.15);
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: rgba(0,0,0,.6);
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: rgba(0,0,0,.5);
167
+ background: var(--black-50);
132
168
  }
133
169
  .txt-light .menu-toggle:focus,
134
170
  .txt-light .menu-toggle:focus {
135
- background: rgba(0,0,0,.7);
171
+ background: var(--black-75);
136
172
  }
137
173
  .txt-dark .menu-toggle {
138
- background: rgba(255,255,255,.33);
174
+ background: var(--white-33);
139
175
  }
140
176
  .txt-dark .menu-toggle:focus,
141
177
  .txt-dark .menu-toggle:focus {
142
- background: rgba(255,255,255,.5);
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: rgba(255,255,255,.33);
207
+ background-color: var(--dropdown-scrollbar-bg);
172
208
  }
173
209
 
174
210
  .scrollable::-webkit-scrollbar-thumb:hover {
175
- background-color: #fff;
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
- background: rgba(255,255,255,.3);
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: #000;
215
- background: #fff;
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: height .33s ease;
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 rgba(255,255,255.3,.75);
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 rgba(255,255,255,.9);
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 rgba(0,0,0,.9);
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: 1px solid rgba(255,255,255,.15);
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: rgba(0,0,0,.25);
344
- border: 1px solid rgba(255,255,255,.33);
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: #000;
394
- border: 1px solid #fff;
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: 0 0 0 6px rgba(255,255,255,.5);
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: 0 0 0 6px rgba(255,255,255,.9);
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 rgba(255,255,255,.5);
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 rgba(0,0,0,.5);
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 rgba(255,255,255,.75);
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 rgba(0,0,0,.75);
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 rgba(255,255,255,.9);
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 rgba(0,0,0,.9);
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 {Partial<Event>} e
351
+ * @param {Event} e
358
352
  * @this {ColorPicker}
359
353
  */
360
- menuClickHandler(this: ColorPicker, e: Partial<Event>): void;
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 {TouchEvent} e
363
+ * @param {PointerEvent} e
370
364
  * @this {ColorPicker}
371
365
  */
372
- pointerDown(this: ColorPicker, e: TouchEvent): void;
366
+ pointerDown(this: ColorPicker, e: PointerEvent): void;
373
367
  /**
374
368
  * The `ColorPicker` *touchmove* / *mousemove* events listener for control knobs.
375
- * @param {TouchEvent} e
369
+ * @param {PointerEvent} e
376
370
  */
377
- pointerMove(e: TouchEvent): void;
371
+ pointerMove(e: PointerEvent): void;
378
372
  /**
379
373
  * The `ColorPicker` *touchend* / *mouseup* events listener for control knobs.
380
- * @param {TouchEvent} e
374
+ * @param {PointerEvent} e
381
375
  * @this {ColorPicker}
382
376
  */
383
- pointerUp(this: ColorPicker, { target }: TouchEvent): void;
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: Element | HTMLElement;
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";
@@ -1,4 +1,3 @@
1
- // export { default as Color } from "../../types/source/types";
2
1
  export { default as Color } from "../../src/js/color";
3
2
  export { default as ColorPalette } from "../../src/js/color-palette";
4
3
  export { default as ColorPicker } from "../../src/js/color-picker";
@@ -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> = (element: string | HTMLInputElement) => T | null;
90
- export type InitCallback<T> = (element: string | HTMLInputElement) => T;
91
+ export type GetInstance<T, ET> = (target: ET | string, component: string) => T | null;
92
+ export type InitCallback<T> = (element: HTMLInputElement | string ) => T;