@thednp/color-picker 0.0.1 → 0.0.2-alpha3
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 +3 -1
- package/dist/css/color-picker.css +1 -1
- package/dist/css/color-picker.min.css +1 -1
- package/dist/css/color-picker.rtl.css +1 -1
- package/dist/css/color-picker.rtl.min.css +1 -1
- package/dist/js/color-esm.js +1167 -0
- package/dist/js/color-esm.min.js +2 -0
- package/dist/js/color-palette-esm.js +1238 -0
- package/dist/js/color-palette-esm.min.js +2 -0
- package/dist/js/color-palette.js +1246 -0
- package/dist/js/color-palette.min.js +2 -0
- package/dist/js/color-picker-element-esm.js +543 -671
- package/dist/js/color-picker-element-esm.min.js +2 -2
- package/dist/js/color-picker-element.js +545 -673
- package/dist/js/color-picker-element.min.js +2 -2
- package/dist/js/color-picker-esm.js +758 -878
- package/dist/js/color-picker-esm.min.js +2 -2
- package/dist/js/color-picker.js +760 -880
- package/dist/js/color-picker.min.js +2 -2
- package/dist/js/color.js +1175 -0
- package/dist/js/color.min.js +2 -0
- package/package.json +22 -3
- package/src/js/color-palette.js +18 -14
- package/src/js/color-picker-element.js +47 -55
- package/src/js/color-picker.js +137 -325
- package/src/js/color.js +169 -185
- package/src/js/util/getColorMenu.js +12 -7
- package/src/js/util/setMarkup.js +122 -0
- package/src/js/util/version.js +6 -0
- package/types/cp.d.ts +64 -32
- package/types/source/types.d.ts +1 -1
- package/src/js/util/templates.js +0 -10
@@ -43,7 +43,8 @@ export default function getColorMenu(self, colorsSource, menuClass) {
|
|
43
43
|
optionSize = fit > 5 && isMultiLine ? 1.5 : optionSize;
|
44
44
|
const menuHeight = `${(rowCount || 1) * optionSize}rem`;
|
45
45
|
const menuHeightHover = `calc(${rowCountHover} * ${optionSize}rem + ${rowCountHover - 1} * ${gap})`;
|
46
|
-
|
46
|
+
/** @type {HTMLUListElement} */
|
47
|
+
// @ts-ignore -- <UL> is an `HTMLElement`
|
47
48
|
const menu = createElement({
|
48
49
|
tagName: 'ul',
|
49
50
|
className: finalClass,
|
@@ -51,7 +52,7 @@ export default function getColorMenu(self, colorsSource, menuClass) {
|
|
51
52
|
setAttribute(menu, 'role', 'listbox');
|
52
53
|
setAttribute(menu, ariaLabel, menuLabel);
|
53
54
|
|
54
|
-
if (isScrollable) {
|
55
|
+
if (isScrollable) {
|
55
56
|
setCSSProperties(menu, {
|
56
57
|
'--grid-item-size': `${optionSize}rem`,
|
57
58
|
'--grid-fit': fit,
|
@@ -62,15 +63,19 @@ export default function getColorMenu(self, colorsSource, menuClass) {
|
|
62
63
|
}
|
63
64
|
|
64
65
|
colorsArray.forEach((x) => {
|
65
|
-
|
66
|
-
|
67
|
-
|
66
|
+
let [value, label] = typeof x === 'string' ? x.trim().split(':') : [];
|
67
|
+
if (x instanceof Color) {
|
68
|
+
value = x.toHexString();
|
69
|
+
label = value;
|
70
|
+
}
|
71
|
+
const color = new Color(x instanceof Color ? x : value, format);
|
72
|
+
const isActive = color.toString() === getAttribute(input, 'value');
|
68
73
|
const active = isActive ? ' active' : '';
|
69
74
|
|
70
75
|
const option = createElement({
|
71
76
|
tagName: 'li',
|
72
77
|
className: `color-option${active}`,
|
73
|
-
innerText: `${label ||
|
78
|
+
innerText: `${label || value}`,
|
74
79
|
});
|
75
80
|
|
76
81
|
setAttribute(option, tabIndex, '0');
|
@@ -79,7 +84,7 @@ export default function getColorMenu(self, colorsSource, menuClass) {
|
|
79
84
|
setAttribute(option, ariaSelected, isActive ? 'true' : 'false');
|
80
85
|
|
81
86
|
if (isOptionsMenu) {
|
82
|
-
setElementStyle(option, { backgroundColor:
|
87
|
+
setElementStyle(option, { backgroundColor: value });
|
83
88
|
}
|
84
89
|
|
85
90
|
menu.append(option);
|
@@ -0,0 +1,122 @@
|
|
1
|
+
import getAttribute from 'shorter-js/src/attr/getAttribute';
|
2
|
+
import setAttribute from 'shorter-js/src/attr/setAttribute';
|
3
|
+
import toUpperCase from 'shorter-js/src/misc/toUpperCase';
|
4
|
+
// import ariaLabel from 'shorter-js/src/strings/ariaLabel';
|
5
|
+
import ariaExpanded from 'shorter-js/src/strings/ariaExpanded';
|
6
|
+
import ariaHasPopup from 'shorter-js/src/strings/ariaHasPopup';
|
7
|
+
import ariaHidden from 'shorter-js/src/strings/ariaHidden';
|
8
|
+
import ariaLabelledBy from 'shorter-js/src/strings/ariaLabelledBy';
|
9
|
+
import createElement from 'shorter-js/src/misc/createElement';
|
10
|
+
import createElementNS from 'shorter-js/src/misc/createElementNS';
|
11
|
+
|
12
|
+
import getColorForm from './getColorForm';
|
13
|
+
import getColorControls from './getColorControls';
|
14
|
+
import getColorMenu from './getColorMenu';
|
15
|
+
import nonColors from './nonColors';
|
16
|
+
import vHidden from './vHidden';
|
17
|
+
import tabIndex from './tabindex';
|
18
|
+
|
19
|
+
import Color from '../color';
|
20
|
+
import ColorPalette from '../color-palette';
|
21
|
+
|
22
|
+
/**
|
23
|
+
* Generate HTML markup and update instance properties.
|
24
|
+
* @param {CP.ColorPicker} self
|
25
|
+
*/
|
26
|
+
export default function setMarkup(self) {
|
27
|
+
const {
|
28
|
+
input, parent, format, id, componentLabels, colorKeywords, colorPresets,
|
29
|
+
} = self;
|
30
|
+
const colorValue = getAttribute(input, 'value') || '#fff';
|
31
|
+
|
32
|
+
const {
|
33
|
+
toggleLabel, pickerLabel, formatLabel, hexLabel,
|
34
|
+
} = componentLabels;
|
35
|
+
|
36
|
+
// update color
|
37
|
+
const color = nonColors.includes(colorValue) ? '#fff' : colorValue;
|
38
|
+
self.color = new Color(color, format);
|
39
|
+
|
40
|
+
// set initial controls dimensions
|
41
|
+
const formatString = format === 'hex' ? hexLabel : toUpperCase(format);
|
42
|
+
|
43
|
+
const pickerBtn = createElement({
|
44
|
+
id: `picker-btn-${id}`,
|
45
|
+
tagName: 'button',
|
46
|
+
className: 'picker-toggle btn-appearance',
|
47
|
+
});
|
48
|
+
setAttribute(pickerBtn, ariaExpanded, 'false');
|
49
|
+
setAttribute(pickerBtn, ariaHasPopup, 'true');
|
50
|
+
pickerBtn.append(createElement({
|
51
|
+
tagName: 'span',
|
52
|
+
className: vHidden,
|
53
|
+
innerText: `${pickerLabel}. ${formatLabel}: ${formatString}`,
|
54
|
+
}));
|
55
|
+
|
56
|
+
const pickerDropdown = createElement({
|
57
|
+
tagName: 'div',
|
58
|
+
className: 'color-dropdown picker',
|
59
|
+
});
|
60
|
+
setAttribute(pickerDropdown, ariaLabelledBy, `picker-btn-${id}`);
|
61
|
+
setAttribute(pickerDropdown, 'role', 'group');
|
62
|
+
|
63
|
+
const colorControls = getColorControls(self);
|
64
|
+
const colorForm = getColorForm(self);
|
65
|
+
|
66
|
+
pickerDropdown.append(colorControls, colorForm);
|
67
|
+
input.before(pickerBtn);
|
68
|
+
parent.append(pickerDropdown);
|
69
|
+
|
70
|
+
// set colour key menu template
|
71
|
+
if (colorKeywords || colorPresets) {
|
72
|
+
const presetsDropdown = createElement({
|
73
|
+
tagName: 'div',
|
74
|
+
className: 'color-dropdown scrollable menu',
|
75
|
+
});
|
76
|
+
|
77
|
+
// color presets
|
78
|
+
if ((colorPresets instanceof Array && colorPresets.length)
|
79
|
+
|| (colorPresets instanceof ColorPalette && colorPresets.colors)) {
|
80
|
+
const presetsMenu = getColorMenu(self, colorPresets, 'color-options');
|
81
|
+
presetsDropdown.append(presetsMenu);
|
82
|
+
}
|
83
|
+
|
84
|
+
// explicit defaults [reset, initial, inherit, transparent, currentColor]
|
85
|
+
if (colorKeywords && colorKeywords.length) {
|
86
|
+
const keywordsMenu = getColorMenu(self, colorKeywords, 'color-defaults');
|
87
|
+
presetsDropdown.append(keywordsMenu);
|
88
|
+
}
|
89
|
+
|
90
|
+
const presetsBtn = createElement({
|
91
|
+
tagName: 'button',
|
92
|
+
className: 'menu-toggle btn-appearance',
|
93
|
+
});
|
94
|
+
setAttribute(presetsBtn, tabIndex, '-1');
|
95
|
+
setAttribute(presetsBtn, ariaExpanded, 'false');
|
96
|
+
setAttribute(presetsBtn, ariaHasPopup, 'true');
|
97
|
+
|
98
|
+
const xmlns = encodeURI('http://www.w3.org/2000/svg');
|
99
|
+
const presetsIcon = createElementNS(xmlns, { tagName: 'svg' });
|
100
|
+
setAttribute(presetsIcon, 'xmlns', xmlns);
|
101
|
+
setAttribute(presetsIcon, 'viewBox', '0 0 512 512');
|
102
|
+
setAttribute(presetsIcon, ariaHidden, 'true');
|
103
|
+
|
104
|
+
const path = createElementNS(xmlns, { tagName: 'path' });
|
105
|
+
setAttribute(path, 'd', 'M98,158l157,156L411,158l27,27L255,368L71,185L98,158z');
|
106
|
+
setAttribute(path, 'fill', '#fff');
|
107
|
+
presetsIcon.append(path);
|
108
|
+
presetsBtn.append(createElement({
|
109
|
+
tagName: 'span',
|
110
|
+
className: vHidden,
|
111
|
+
innerText: `${toggleLabel}`,
|
112
|
+
}), presetsIcon);
|
113
|
+
|
114
|
+
parent.append(presetsBtn, presetsDropdown);
|
115
|
+
}
|
116
|
+
|
117
|
+
// solve non-colors after settings save
|
118
|
+
if (colorKeywords && nonColors.includes(colorValue)) {
|
119
|
+
self.value = colorValue;
|
120
|
+
}
|
121
|
+
setAttribute(input, tabIndex, '-1');
|
122
|
+
}
|
package/types/cp.d.ts
CHANGED
@@ -5,14 +5,21 @@ declare module "color-picker/src/js/util/nonColors" {
|
|
5
5
|
*/
|
6
6
|
const nonColors: string[];
|
7
7
|
}
|
8
|
+
declare module "color-picker/src/js/util/roundPart" {
|
9
|
+
/**
|
10
|
+
* Round colour components, for all formats except HEX.
|
11
|
+
* @param {number} v one of the colour components
|
12
|
+
* @returns {number} the rounded number
|
13
|
+
*/
|
14
|
+
export default function roundPart(v: number): number;
|
15
|
+
}
|
8
16
|
declare module "color-picker/src/js/color" {
|
9
|
-
export default Color;
|
10
17
|
/**
|
11
18
|
* @class
|
12
19
|
* Returns a new `Color` instance.
|
13
20
|
* @see https://github.com/bgrins/TinyColor
|
14
21
|
*/
|
15
|
-
class Color {
|
22
|
+
export default class Color {
|
16
23
|
/**
|
17
24
|
* @constructor
|
18
25
|
* @param {CP.ColorInput} input the given colour value
|
@@ -195,21 +202,21 @@ declare module "color-picker/src/js/color-palette" {
|
|
195
202
|
* Returns a color palette with a given set of parameters.
|
196
203
|
* @example
|
197
204
|
* new ColorPalette(0, 12, 10);
|
198
|
-
* // => { hue: 0, hueSteps: 12, lightSteps: 10, colors:
|
205
|
+
* // => { hue: 0, hueSteps: 12, lightSteps: 10, colors: Array<Color> }
|
199
206
|
*/
|
200
207
|
export default class ColorPalette {
|
201
208
|
/**
|
202
209
|
* The `hue` parameter is optional, which would be set to 0.
|
203
210
|
* @param {number[]} args represeinting hue, hueSteps, lightSteps
|
204
211
|
* * `args.hue` the starting Hue [0, 360]
|
205
|
-
* * `args.hueSteps` Hue Steps Count [5,
|
206
|
-
* * `args.lightSteps` Lightness Steps Count [
|
212
|
+
* * `args.hueSteps` Hue Steps Count [5, 24]
|
213
|
+
* * `args.lightSteps` Lightness Steps Count [5, 12]
|
207
214
|
*/
|
208
215
|
constructor(...args: number[]);
|
209
216
|
hue: number;
|
210
217
|
hueSteps: number;
|
211
218
|
lightSteps: number;
|
212
|
-
colors:
|
219
|
+
colors: any;
|
213
220
|
}
|
214
221
|
}
|
215
222
|
declare module "color-picker/src/js/util/colorPickerLabels" {
|
@@ -225,6 +232,18 @@ declare module "color-picker/src/js/util/colorNames" {
|
|
225
232
|
*/
|
226
233
|
const colorNames: string[];
|
227
234
|
}
|
235
|
+
declare module "color-picker/src/js/util/tabindex" {
|
236
|
+
export default tabIndex;
|
237
|
+
const tabIndex: "tabindex";
|
238
|
+
}
|
239
|
+
declare module "color-picker/src/js/util/isValidJSON" {
|
240
|
+
/**
|
241
|
+
* Check if a string is valid JSON string.
|
242
|
+
* @param {string} str the string input
|
243
|
+
* @returns {boolean} the query result
|
244
|
+
*/
|
245
|
+
export default function isValidJSON(str: string): boolean;
|
246
|
+
}
|
228
247
|
declare module "color-picker/src/js/util/vHidden" {
|
229
248
|
export default vHidden;
|
230
249
|
const vHidden: "v-hidden";
|
@@ -247,6 +266,14 @@ declare module "color-picker/src/js/util/getColorControls" {
|
|
247
266
|
*/
|
248
267
|
export default function getColorControls(self: CP.ColorPicker): HTMLElement | Element;
|
249
268
|
}
|
269
|
+
declare module "color-picker/src/js/util/setCSSProperties" {
|
270
|
+
/**
|
271
|
+
* Helps setting CSS variables to the color-menu.
|
272
|
+
* @param {HTMLElement} element
|
273
|
+
* @param {Record<string,any>} props
|
274
|
+
*/
|
275
|
+
export default function setCSSProperties(element: HTMLElement, props: Record<string, any>): void;
|
276
|
+
}
|
250
277
|
declare module "color-picker/src/js/util/getColorMenu" {
|
251
278
|
/**
|
252
279
|
* Returns a color-defaults with given values and class.
|
@@ -257,15 +284,14 @@ declare module "color-picker/src/js/util/getColorMenu" {
|
|
257
284
|
*/
|
258
285
|
export default function getColorMenu(self: CP.ColorPicker, colorsSource: CP.ColorPalette | string[], menuClass: string): HTMLElement | Element;
|
259
286
|
}
|
260
|
-
declare module "color-picker/src/js/util/
|
287
|
+
declare module "color-picker/src/js/util/setMarkup" {
|
261
288
|
/**
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
export default function isValidJSON(str: string): boolean;
|
289
|
+
* Generate HTML markup and update instance properties.
|
290
|
+
* @param {CP.ColorPicker} self
|
291
|
+
*/
|
292
|
+
export default function setMarkup(self: CP.ColorPicker): void;
|
267
293
|
}
|
268
|
-
declare module "color-picker/src/js/version" {
|
294
|
+
declare module "color-picker/src/js/util/version" {
|
269
295
|
export default Version;
|
270
296
|
const Version: string;
|
271
297
|
}
|
@@ -308,14 +334,24 @@ declare module "color-picker/src/js/color-picker" {
|
|
308
334
|
format: CP.ColorFormats;
|
309
335
|
/** Shows the `ColorPicker` dropdown. */
|
310
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
|
+
*/
|
311
343
|
/**
|
312
344
|
* Toggle the `ColorPicker` dropdown visibility.
|
313
|
-
* @param {Event} e
|
345
|
+
* @param {Event=} e
|
314
346
|
* @this {ColorPicker}
|
315
347
|
*/
|
316
|
-
togglePicker(this: ColorPicker, e
|
317
|
-
/**
|
318
|
-
|
348
|
+
togglePicker(this: ColorPicker, e?: Event | undefined): void;
|
349
|
+
/**
|
350
|
+
* Toggles the visibility of the `ColorPicker` presets menu.
|
351
|
+
* @param {Event=} e
|
352
|
+
* @this {ColorPicker}
|
353
|
+
*/
|
354
|
+
toggleMenu(this: ColorPicker, e?: Event | undefined): void;
|
319
355
|
/**
|
320
356
|
* The `ColorPicker` click event listener for the colour menu presets / defaults.
|
321
357
|
* @param {Partial<Event>} e
|
@@ -371,13 +407,6 @@ declare module "color-picker/src/js/color-picker" {
|
|
371
407
|
* @this {ColorPicker}
|
372
408
|
*/
|
373
409
|
handleDismiss(this: ColorPicker, { code }: KeyboardEvent): void;
|
374
|
-
/**
|
375
|
-
* The `Space` & `Enter` keys specific event listener.
|
376
|
-
* Toggle visibility of the `ColorPicker` / the presets menu, showing one will hide the other.
|
377
|
-
* @param {KeyboardEvent} e
|
378
|
-
* @this {ColorPicker}
|
379
|
-
*/
|
380
|
-
keyToggle(this: ColorPicker, e: KeyboardEvent): void;
|
381
410
|
/**
|
382
411
|
* The `ColorPicker` *keydown* event listener for control knobs.
|
383
412
|
* @param {KeyboardEvent} e
|
@@ -427,6 +456,8 @@ declare module "color-picker/src/js/color-picker" {
|
|
427
456
|
get isDark(): boolean;
|
428
457
|
/** Checks if the current input value is a valid colour. */
|
429
458
|
get isValid(): boolean;
|
459
|
+
/** Returns the colour appearance, usually the closest colour name for the current value. */
|
460
|
+
get appearance(): string | undefined;
|
430
461
|
/** Updates `ColorPicker` visuals. */
|
431
462
|
updateVisuals(): void;
|
432
463
|
/**
|
@@ -482,27 +513,28 @@ declare module "color-picker/src/js/color-picker-element" {
|
|
482
513
|
/**
|
483
514
|
* `ColorPickerElement` Web Component.
|
484
515
|
* @example
|
516
|
+
* <label for="UNIQUE_ID">Label</label>
|
485
517
|
* <color-picker>
|
486
|
-
* <input
|
518
|
+
* <input id="UNIQUE_ID" value="red" format="hex" class="color-preview btn-appearance">
|
487
519
|
* </color-picker>
|
520
|
+
* // or
|
521
|
+
* <label for="UNIQUE_ID">Label</label>
|
522
|
+
* <color-picker data-id="UNIQUE_ID" data-value="red" data-format="hex"></color-picker>
|
488
523
|
*/
|
489
524
|
class ColorPickerElement extends HTMLElement {
|
490
|
-
/** @type {boolean} */
|
491
|
-
isDisconnected: boolean;
|
492
525
|
/**
|
493
526
|
* Returns the current color value.
|
494
|
-
* @returns {string
|
527
|
+
* @returns {string | undefined}
|
495
528
|
*/
|
496
|
-
get value(): string |
|
529
|
+
get value(): string | undefined;
|
497
530
|
connectedCallback(): void;
|
498
531
|
/** @type {HTMLInputElement} */
|
499
532
|
input: HTMLInputElement | undefined;
|
500
533
|
colorPicker: ColorPicker | undefined;
|
501
|
-
|
502
|
-
disconnectedCallback(): void;
|
534
|
+
/** @this {ColorPickerElement} */
|
535
|
+
disconnectedCallback(this: ColorPickerElement): void;
|
503
536
|
}
|
504
537
|
import ColorPicker from "color-picker/src/js/color-picker";
|
505
|
-
import Color from "color-picker/src/js/color";
|
506
538
|
}
|
507
539
|
declare module "color-picker/types/source/source" {
|
508
540
|
export { default as Color } from "color-picker/src/js/color";
|
package/types/source/types.d.ts
CHANGED
@@ -83,7 +83,7 @@ export interface ColorPickerOptions {
|
|
83
83
|
colorKeywords?: string[];
|
84
84
|
}
|
85
85
|
|
86
|
-
export type ColorInput = string |
|
86
|
+
export type ColorInput = string | RGB | RGBA | HSL | HSLA | HSV | HSVA | HWB | ColorObject;
|
87
87
|
export type ColorFormats = string | 'rgb' | 'hex' | 'hex3' | 'hex4' | 'hex6' | 'hex8' | 'hsl' | 'hsv' | 'hwb';
|
88
88
|
|
89
89
|
export type GetInstance<T> = (element: string | HTMLInputElement) => T | null;
|