@thednp/color-picker 0.0.2-alpha5 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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;