@thednp/color-picker 2.0.2 → 2.0.4

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 (55) hide show
  1. package/README.md +25 -14
  2. package/dist/css/color-picker.css +3 -6
  3. package/dist/css/color-picker.css.map +1 -0
  4. package/dist/css/color-picker.min.css +1 -2
  5. package/dist/css/color-picker.min.css.map +1 -0
  6. package/dist/css/color-picker.rtl.css +3 -6
  7. package/dist/css/color-picker.rtl.css.map +1 -0
  8. package/dist/css/color-picker.rtl.min.css +1 -2
  9. package/dist/css/color-picker.rtl.min.css.map +1 -0
  10. package/dist/js/color-picker.cjs +2 -2
  11. package/dist/js/color-picker.cjs.map +1 -1
  12. package/dist/js/color-picker.d.ts +307 -300
  13. package/dist/js/color-picker.js +2 -2
  14. package/dist/js/color-picker.js.map +1 -1
  15. package/dist/js/color-picker.mjs +390 -491
  16. package/dist/js/color-picker.mjs.map +1 -1
  17. package/package.json +40 -47
  18. package/.eslintrc.cjs +0 -199
  19. package/.lgtm.yml +0 -9
  20. package/.prettierrc.json +0 -15
  21. package/.stylelintrc.json +0 -236
  22. package/compile.cjs +0 -51
  23. package/dts.config.ts +0 -15
  24. package/src/scss/_variables.scss +0 -6
  25. package/src/scss/color-picker.rtl.scss +0 -27
  26. package/src/scss/color-picker.scss +0 -536
  27. package/src/ts/colorPalette.ts +0 -89
  28. package/src/ts/index.ts +0 -1237
  29. package/src/ts/interface/ColorNames.ts +0 -20
  30. package/src/ts/interface/colorPickerLabels.ts +0 -20
  31. package/src/ts/interface/colorPickerOptions.ts +0 -11
  32. package/src/ts/interface/paletteOptions.ts +0 -6
  33. package/src/ts/util/colorNames.ts +0 -21
  34. package/src/ts/util/colorPickerLabels.ts +0 -24
  35. package/src/ts/util/getColorControls.ts +0 -90
  36. package/src/ts/util/getColorForm.ts +0 -75
  37. package/src/ts/util/getColorMenu.ts +0 -83
  38. package/src/ts/util/isValidJSON.ts +0 -19
  39. package/src/ts/util/setMarkup.ts +0 -130
  40. package/src/ts/util/vHidden.ts +0 -2
  41. package/test/color-palette.test.ts +0 -137
  42. package/test/color-picker.test.ts +0 -705
  43. package/test/fixtures/colorNamesFrench.js +0 -3
  44. package/test/fixtures/componentLabelsFrench.js +0 -21
  45. package/test/fixtures/format.js +0 -3
  46. package/test/fixtures/getMarkup.js +0 -36
  47. package/test/fixtures/getRandomInt.js +0 -6
  48. package/test/fixtures/sampleWebcolors.js +0 -18
  49. package/test/fixtures/swipe.ts +0 -33
  50. package/test/fixtures/testSample.js +0 -8
  51. package/test/fixtures/write.ts +0 -37
  52. package/tsconfig.json +0 -47
  53. package/vite.config.mts +0 -27
  54. package/vitest.config-ui.ts +0 -26
  55. package/vitest.config.ts +0 -26
@@ -1,20 +0,0 @@
1
- export default interface ColorNames {
2
- white: string;
3
- black: string;
4
- grey: string;
5
- red: string;
6
- orange: string;
7
- brown: string;
8
- gold: string;
9
- olive: string;
10
- yellow: string;
11
- lime: string;
12
- green: string;
13
- teal: string;
14
- cyan: string;
15
- blue: string;
16
- violet: string;
17
- magenta: string;
18
- pink: string;
19
- [key: string]: string;
20
- }
@@ -1,20 +0,0 @@
1
- export default interface ColorPickerLabels {
2
- pickerLabel: string;
3
- appearanceLabel: string;
4
- valueLabel: string;
5
- toggleLabel: string;
6
- presetsLabel: string;
7
- defaultsLabel: string;
8
- formatLabel: string;
9
- alphaLabel: string;
10
- hexLabel: string;
11
- hueLabel: string;
12
- whitenessLabel: string;
13
- blacknessLabel: string;
14
- saturationLabel: string;
15
- lightnessLabel: string;
16
- redLabel: string;
17
- greenLabel: string;
18
- blueLabel: string;
19
- [key: string]: string;
20
- }
@@ -1,11 +0,0 @@
1
- import type { ColorFormats } from '@thednp/color';
2
- import ColorPickerLabels from './colorPickerLabels';
3
- import ColorPalette from '../colorPalette';
4
-
5
- export default interface ColorPickerOptions {
6
- colorLabels: string | string[];
7
- componentLabels: ColorPickerLabels;
8
- format: ColorFormats;
9
- colorPresets: string | string[] | ColorPalette | false;
10
- colorKeywords: string | string[] | false;
11
- }
@@ -1,6 +0,0 @@
1
- export default interface PaletteOptions {
2
- hue: number;
3
- hueSteps: number;
4
- lightSteps: number;
5
- saturation: number;
6
- }
@@ -1,21 +0,0 @@
1
- /** A list of 17 color names used for WAI-ARIA compliance. */
2
- const colorNames: string[] = [
3
- 'white',
4
- 'black',
5
- 'grey',
6
- 'red',
7
- 'orange',
8
- 'brown',
9
- 'gold',
10
- 'olive',
11
- 'yellow',
12
- 'lime',
13
- 'green',
14
- 'teal',
15
- 'cyan',
16
- 'blue',
17
- 'violet',
18
- 'magenta',
19
- 'pink',
20
- ];
21
- export default colorNames;
@@ -1,24 +0,0 @@
1
- import ColorPickerLabels from '../interface/colorPickerLabels';
2
-
3
- /** The labels presented to the user. */
4
- const colorPickerLabels: ColorPickerLabels = {
5
- pickerLabel: 'Colour Picker',
6
- appearanceLabel: 'Colour Appearance',
7
- valueLabel: 'Colour Value',
8
- toggleLabel: 'Select Colour',
9
- presetsLabel: 'Colour Presets',
10
- defaultsLabel: 'Colour Defaults',
11
- formatLabel: 'Format',
12
- alphaLabel: 'Alpha',
13
- hexLabel: 'Hexadecimal',
14
- hueLabel: 'Hue',
15
- whitenessLabel: 'Whiteness',
16
- blacknessLabel: 'Blackness',
17
- saturationLabel: 'Saturation',
18
- lightnessLabel: 'Lightness',
19
- redLabel: 'Red',
20
- greenLabel: 'Green',
21
- blueLabel: 'Blue',
22
- };
23
-
24
- export default colorPickerLabels;
@@ -1,90 +0,0 @@
1
- import { createElement } from '@thednp/shorty';
2
-
3
- import ColorPicker from '..';
4
-
5
- /**
6
- * Returns all color controls for `ColorPicker`.
7
- *
8
- * @param self the `ColorPicker` instance
9
- * @returns color controls
10
- */
11
- const getColorControls = (self: ColorPicker): HTMLElement => {
12
- const { format, componentLabels } = self;
13
- const { hueLabel, alphaLabel, lightnessLabel, saturationLabel, whitenessLabel, blacknessLabel } = componentLabels;
14
-
15
- const max1 = format === 'hsl' ? 360 : 100;
16
- const max2 = format === 'hsl' ? 100 : 360;
17
- const max3 = 100;
18
-
19
- let ctrl1Label = format === 'hsl' ? `${hueLabel} & ${lightnessLabel}` : `${lightnessLabel} & ${saturationLabel}`;
20
-
21
- ctrl1Label = format === 'hwb' ? `${whitenessLabel} & ${blacknessLabel}` : ctrl1Label;
22
-
23
- const ctrl2Label = format === 'hsl' ? `${saturationLabel}` : `${hueLabel}`;
24
-
25
- const colorControls = createElement({
26
- tagName: 'div',
27
- className: `color-controls ${format}`,
28
- }) as HTMLElement;
29
-
30
- const colorPointer = 'color-pointer';
31
- const colorSlider = 'color-slider';
32
-
33
- const controls = [
34
- {
35
- i: 1,
36
- c: colorPointer,
37
- l: ctrl1Label,
38
- min: 0,
39
- max: max1,
40
- },
41
- {
42
- i: 2,
43
- c: colorSlider,
44
- l: ctrl2Label,
45
- min: 0,
46
- max: max2,
47
- },
48
- {
49
- i: 3,
50
- c: colorSlider,
51
- l: alphaLabel,
52
- min: 0,
53
- max: max3,
54
- },
55
- ];
56
-
57
- controls.forEach(template => {
58
- const { i, c, l, min, max } = template;
59
- const control = createElement({
60
- tagName: 'div',
61
- className: 'color-control',
62
- role: 'presentation',
63
- }) as HTMLElement;
64
-
65
- control.append(
66
- createElement({
67
- tagName: 'div',
68
- className: `visual-control visual-control${i}`,
69
- }) as HTMLElement,
70
- );
71
-
72
- const knob = createElement({
73
- tagName: 'div',
74
- className: `${c} knob`,
75
- ariaLive: 'polite',
76
- ariaLabel: l,
77
- role: 'slider',
78
- tabIndex: 0,
79
- ariaValueMin: `${min}`,
80
- ariaValueMax: `${max}`,
81
- }) as HTMLElement;
82
-
83
- control.append(knob);
84
- colorControls.append(control);
85
- });
86
-
87
- return colorControls;
88
- };
89
-
90
- export default getColorControls;
@@ -1,75 +0,0 @@
1
- import { createElement, setAttribute, ObjectAssign, toUpperCase } from '@thednp/shorty';
2
-
3
- import vHidden from './vHidden';
4
- import ColorPicker from '../index';
5
-
6
- /**
7
- * Returns the color form for `ColorPicker`.
8
- *
9
- * @param self the `ColorPicker` instance
10
- * @returns a new `<div>` element with color component `<input>`
11
- */
12
- const getColorForm = (self: ColorPicker): HTMLElement => {
13
- const { format, id, componentLabels } = self;
14
- const colorForm = createElement({
15
- tagName: 'div',
16
- className: `color-form ${format}`,
17
- }) as HTMLElement;
18
-
19
- let components = ['hex'];
20
- if (format === 'rgb') components = ['red', 'green', 'blue', 'alpha'];
21
- else if (format === 'hsl') components = ['hue', 'saturation', 'lightness', 'alpha'];
22
- else if (format === 'hwb') components = ['hue', 'whiteness', 'blackness', 'alpha'];
23
-
24
- components.forEach((c: string): void => {
25
- const [C] = format === 'hex' ? ['#'] : toUpperCase(c).split('');
26
- const cID = `color_${format}_${c}_${id}`;
27
- const formatLabel = componentLabels[`${c}Label`];
28
- const cInputLabel = createElement({ tagName: 'label' }) as HTMLElement;
29
- setAttribute(cInputLabel, 'for', cID);
30
- cInputLabel.append(
31
- createElement({
32
- tagName: 'span',
33
- ariaHidden: 'true',
34
- innerText: `${C}:`,
35
- }) as HTMLElement,
36
- createElement({
37
- tagName: 'span',
38
- className: vHidden,
39
- innerText: formatLabel,
40
- }) as HTMLElement,
41
- );
42
- const cInput = createElement({
43
- tagName: 'input',
44
- id: cID,
45
- // name: cID, - prevent saving the value to a form
46
- type: format === 'hex' ? 'text' : 'number',
47
- value: c === 'alpha' ? '100' : '0',
48
- className: `color-input ${c}`,
49
- autocomplete: 'off',
50
- spellcheck: false,
51
- } as Partial<HTMLInputElement>) as HTMLInputElement;
52
-
53
- // alpha
54
- let max = '100';
55
- let step = '1';
56
- if (c !== 'alpha') {
57
- if (format === 'rgb') {
58
- max = '255';
59
- step = '1';
60
- } else if (c === 'hue') {
61
- max = '360';
62
- step = '1';
63
- }
64
- }
65
- ObjectAssign(cInput, {
66
- min: '0',
67
- max,
68
- step,
69
- });
70
- colorForm.append(cInputLabel, cInput);
71
- });
72
- return colorForm;
73
- };
74
-
75
- export default getColorForm;
@@ -1,83 +0,0 @@
1
- import { setAttribute, getAttribute, createElement, setElementStyle } from '@thednp/shorty';
2
-
3
- import Color from '@thednp/color';
4
- import ColorPalette from '../colorPalette';
5
- import ColorPicker from '../index';
6
-
7
- /**
8
- * Returns a color-defaults with given values and class.
9
- */
10
- const getColorMenu = (self: ColorPicker, colorsSource: ColorPalette | string[], menuClass: string): HTMLElement => {
11
- const { input, format, componentLabels } = self;
12
- const { defaultsLabel, presetsLabel } = componentLabels;
13
- const isOptionsMenu = menuClass === 'color-options';
14
- const isPalette = colorsSource instanceof ColorPalette;
15
- const menuLabel = isOptionsMenu ? presetsLabel : defaultsLabel;
16
- const colorsArray = isPalette ? colorsSource.colors : colorsSource;
17
- const colorsCount = colorsArray.length;
18
- const { lightSteps } = isPalette ? colorsSource : { lightSteps: null };
19
- const fit = lightSteps || [9, 10].find(x => colorsCount >= x * 2 && !(colorsCount % x)) || 5;
20
- const isMultiLine = isOptionsMenu && colorsCount > fit;
21
- let rowCountHover = 2;
22
- rowCountHover = isMultiLine && colorsCount > fit * 2 ? 3 : rowCountHover;
23
- rowCountHover = isMultiLine && colorsCount > fit * 3 ? 4 : rowCountHover;
24
- rowCountHover = isMultiLine && colorsCount > fit * 4 ? 5 : rowCountHover;
25
- const rowCount = rowCountHover - (colorsCount <= fit * 3 ? 1 : 2);
26
- const isScrollable = isMultiLine && colorsCount > rowCount * fit;
27
- let finalClass = menuClass;
28
- finalClass += isScrollable ? ' scrollable' : '';
29
- finalClass += isMultiLine ? ' multiline' : '';
30
- const gap = isMultiLine ? '1px' : '0.25rem';
31
- let optionSize = isMultiLine ? 1.75 : 2;
32
- optionSize = fit > 5 && isMultiLine ? 1.5 : optionSize;
33
- const menuHeight = `${rowCount * optionSize}rem`;
34
- const menuHeightHover = `calc(${rowCountHover} * ${optionSize}rem + ${rowCountHover - 1} * ${gap})`;
35
-
36
- // <UL> is an `HTMLElement`
37
- const menu = createElement({
38
- tagName: 'ul',
39
- className: finalClass,
40
- role: 'listbox',
41
- ariaLabel: menuLabel,
42
- }) as HTMLElement;
43
-
44
- if (isScrollable) {
45
- setElementStyle(menu, {
46
- '--grid-item-size': `${optionSize}rem`,
47
- '--grid-fit': `${fit}`,
48
- '--grid-gap': gap,
49
- '--grid-height': menuHeight,
50
- '--grid-hover-height': menuHeightHover,
51
- });
52
- }
53
-
54
- colorsArray.forEach(x => {
55
- let [value, label] = typeof x === 'string' ? x.trim().split(':') : [];
56
- if (x instanceof Color) {
57
- value = x.toHexString();
58
- label = value;
59
- }
60
- const color = new Color(x instanceof Color ? x : value, format);
61
- const isActive = color.toString() === getAttribute(input, 'value');
62
- const active = isActive ? ' active' : '';
63
-
64
- const option = createElement({
65
- tagName: 'li',
66
- className: `color-option${active}`,
67
- innerText: `${label || value}`,
68
- tabIndex: 0,
69
- role: 'option',
70
- ariaSelected: isActive ? 'true' : 'false',
71
- }) as HTMLElement;
72
- setAttribute(option, 'data-value', `${value}`);
73
-
74
- if (isOptionsMenu) {
75
- setElementStyle(option, { backgroundColor: value });
76
- }
77
-
78
- menu.append(option);
79
- });
80
- return menu;
81
- };
82
-
83
- export default getColorMenu;
@@ -1,19 +0,0 @@
1
- import { isString } from '@thednp/shorty';
2
-
3
- /**
4
- * Check if a string is valid JSON string.
5
- *
6
- * @param str the string input
7
- * @returns the query result
8
- */
9
- const isValidJSON = (str: unknown): str is string => {
10
- if (!isString(str)) return false;
11
- try {
12
- JSON.parse(str);
13
- } catch (e) {
14
- return false;
15
- }
16
- return true;
17
- };
18
-
19
- export default isValidJSON;
@@ -1,130 +0,0 @@
1
- import {
2
- getAttribute,
3
- setAttribute,
4
- toUpperCase,
5
- ariaHidden,
6
- tabindex,
7
- createElement,
8
- createElementNS,
9
- } from '@thednp/shorty';
10
-
11
- import Color from '@thednp/color';
12
-
13
- import getColorForm from './getColorForm';
14
- import getColorControls from './getColorControls';
15
- import getColorMenu from './getColorMenu';
16
- import vHidden from './vHidden';
17
-
18
- import ColorPicker from '../index';
19
-
20
- /**
21
- * Generate HTML markup and update instance properties.
22
- *
23
- * @param self
24
- */
25
- const setMarkup = (self: ColorPicker) => {
26
- const { input, parent, format, id, componentLabels, colorKeywords, colorPresets } = self;
27
- const colorValue = getAttribute(input, 'value') || '#fff';
28
- const { nonColors } = Color;
29
-
30
- const { toggleLabel, pickerLabel, formatLabel, hexLabel } = componentLabels;
31
-
32
- // update color
33
- const color = nonColors.includes(colorValue) ? '#fff' : colorValue;
34
- self.color = new Color(color, format);
35
-
36
- // set initial controls dimensions
37
- const formatString = format === 'hex' ? hexLabel : toUpperCase(format);
38
-
39
- const pickerBtn = createElement<HTMLButtonElement>({
40
- id: `picker-btn-${id}`,
41
- tagName: 'button',
42
- type: 'button',
43
- className: 'picker-toggle btn-appearance',
44
- ariaExpanded: 'false',
45
- ariaHasPopup: 'true',
46
- }) as HTMLButtonElement;
47
-
48
- pickerBtn.append(
49
- createElement({
50
- tagName: 'span',
51
- className: vHidden,
52
- innerText: `${pickerLabel}. ${formatLabel}: ${formatString}`,
53
- }) as HTMLElement,
54
- );
55
-
56
- const pickerDropdown = createElement({
57
- tagName: 'div',
58
- className: 'color-dropdown picker',
59
- role: 'group',
60
- ariaLabelledBy: `picker-btn-${id}`,
61
- } as Partial<HTMLElement> & { ariaLabelledBy: string }) as HTMLElement;
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
- }) as HTMLElement;
76
-
77
- // color presets
78
- if (colorPresets) {
79
- presetsDropdown.append(getColorMenu(self, colorPresets, 'color-options'));
80
- }
81
-
82
- // explicit defaults [reset, initial, inherit, transparent, currentColor]
83
- // also custom defaults [default: #069, complementary: #930]
84
- if (colorKeywords && colorKeywords.length) {
85
- presetsDropdown.append(getColorMenu(self, colorKeywords, 'color-defaults'));
86
- }
87
-
88
- const presetsBtn = createElement<HTMLButtonElement>({
89
- tagName: 'button',
90
- type: 'button',
91
- className: 'menu-toggle btn-appearance',
92
- tabIndex: -1,
93
- ariaExpanded: 'false',
94
- ariaHasPopup: 'true',
95
- }) as HTMLButtonElement;
96
-
97
- const xmlns = encodeURI('http://www.w3.org/2000/svg');
98
- const presetsIcon = createElementNS(xmlns, {
99
- tagName: 'svg',
100
- }) as HTMLElement;
101
- setAttribute(presetsIcon, 'xmlns', xmlns);
102
- setAttribute(presetsIcon, 'viewBox', '0 0 512 512');
103
- setAttribute(presetsIcon, ariaHidden, 'true');
104
-
105
- const path = createElementNS(xmlns, {
106
- tagName: 'path',
107
- }) as HTMLElement;
108
- setAttribute(path, 'd', 'M98,158l157,156L411,158l27,27L255,368L71,185L98,158z');
109
- setAttribute(path, 'fill', '#fff');
110
- presetsIcon.append(path);
111
- presetsBtn.append(
112
- createElement({
113
- tagName: 'span',
114
- className: vHidden,
115
- innerText: `${toggleLabel}`,
116
- }) as HTMLElement,
117
- presetsIcon,
118
- );
119
-
120
- parent.append(presetsBtn, presetsDropdown);
121
- }
122
-
123
- // solve non-colors after settings save
124
- if (colorKeywords && nonColors.includes(colorValue)) {
125
- self.value = colorValue;
126
- }
127
- setAttribute(input, tabindex, '-1');
128
- };
129
-
130
- export default setMarkup;
@@ -1,2 +0,0 @@
1
- const vHidden = 'v-hidden';
2
- export default vHidden;
@@ -1,137 +0,0 @@
1
- import { expect, it, describe } from 'vitest';
2
- import Color from "@thednp/color";
3
- import ColorPalette from "~/ts/colorPalette";
4
-
5
- describe("ColorPalette Class Test", () => {
6
- it("Test init with no parameter, use all default values", () => {
7
- const cpl = new ColorPalette();
8
- expect(cpl).to.be.instanceOf(ColorPalette);
9
- expect(cpl.hue).to.equal(0);
10
- expect(cpl.hueSteps).to.equal(12);
11
- expect(cpl.lightSteps).to.equal(10);
12
- expect(cpl.colors.length).to.equal(120);
13
- });
14
-
15
- it("Test init with 1 parameter, throws error", () => {
16
- try {
17
- new ColorPalette(0, undefined);
18
- } catch (error) {
19
- expect(error).to.be.instanceOf(TypeError);
20
- expect(error).to.have.property(
21
- "message",
22
- 'ColorPalette: the two minimum arguments must be numbers higher than 0.'
23
- );
24
- }
25
- });
26
-
27
- it("Test init with 2 invalid parameters, throws error", () => {
28
- try {
29
- new ColorPalette(0, 5);
30
- } catch (error) {
31
- expect(error).to.be.instanceOf(TypeError);
32
- expect(error).to.have.property(
33
- "message",
34
- 'ColorPalette: the two minimum arguments must be numbers higher than 0.'
35
- );
36
- }
37
- });
38
-
39
- it("Test init with 2 valid parameters", () => {
40
- // generated with new `ColorPalette(1, 5)`
41
- const testSample = ["#330000", "#990000", "#ff0000", "#ff6666", "#ffcccc"];
42
- const cpl = new ColorPalette(1, 5);
43
-
44
- expect(cpl).to.be.instanceOf(ColorPalette);
45
- expect(cpl.hue).to.equal(0);
46
- expect(cpl.hueSteps).to.equal(1);
47
- expect(cpl.lightSteps).to.equal(5);
48
- expect(cpl.saturation).to.equal(100);
49
- expect(cpl.colors.length).to.equal(5);
50
-
51
- cpl.colors.forEach((color, i) => {
52
- expect(color).to.be.instanceOf(Color);
53
- expect(color.toHexString()).to.equal(testSample[i]);
54
- })
55
- });
56
-
57
- it("Test init with 14 lightSteps", () => {
58
- // generated with `new ColorPalette(1, 14)`
59
- const testSample = [
60
- "#330000", "#550000", "#770000", "#990000", "#bb0000",
61
- "#dd0000", "#ff0000", "#ff2222", "#ff4444", "#ff6666",
62
- "#ff8888", "#ffaaaa", "#ffcccc", "#ffeeee",
63
- ];
64
- const cpl = new ColorPalette(1, 14);
65
-
66
- expect(cpl).to.be.instanceOf(ColorPalette);
67
- expect(cpl.hue).to.equal(0);
68
- expect(cpl.hueSteps).to.equal(1);
69
- expect(cpl.lightSteps).to.equal(14);
70
- expect(cpl.colors.length).to.equal(14);
71
-
72
- cpl.colors.forEach((color, i) => {
73
- expect(color).to.be.instanceOf(Color);
74
- // expect(color.ok).to.be.true;
75
- expect(color.toHexString()).to.equal(testSample[i]);
76
- })
77
- });
78
-
79
- it("Test init with 15 lightSteps", () => {
80
- // generated with `new ColorPalette(1, 15)`
81
- const testSample = [
82
- "#110000", "#330000", "#550000", "#770000",
83
- "#990000", "#bb0000", "#dd0000", "#ff0000",
84
- "#ff2222", "#ff4444", "#ff6666", "#ff8888",
85
- "#ffaaaa", "#ffcccc", "#ffeeee",
86
- ];
87
- const cpl = new ColorPalette(1, 15);
88
-
89
- expect(cpl).to.be.instanceOf(ColorPalette);
90
- expect(cpl.hue).to.equal(0);
91
- expect(cpl.hueSteps).to.equal(1);
92
- expect(cpl.lightSteps).to.equal(15);
93
- expect(cpl.colors.length).to.equal(15);
94
-
95
- cpl.colors.forEach((color, i) => {
96
- expect(color).to.be.instanceOf(Color);
97
- // expect(color.ok).to.be.true;
98
- expect(color.toHexString()).to.equal(testSample[i]);
99
- })
100
- });
101
-
102
- it("Test init with 3 valid parameters", () => {
103
- // generated with `new ColorPalette(270, 1, 10)`
104
- const testSample = [
105
- "#240047", "#3b0075", "#5200a3", "#6900d1",
106
- "#7f00ff", "#962eff", "#ad5cff", "#c48aff",
107
- "#dbb8ff", "#f2e5ff",
108
- ];
109
- const cpl = new ColorPalette(270, 1, 10);
110
-
111
- expect(cpl).to.be.instanceOf(ColorPalette);
112
- expect(cpl.hue).to.equal(270);
113
- expect(cpl.hueSteps).to.equal(1);
114
- expect(cpl.lightSteps).to.equal(10);
115
- expect(cpl.saturation).to.equal(100);
116
- expect(cpl.colors.length).to.equal(10);
117
- expect(cpl.colors.map(c => c.toHexString())).to.deep.equal(testSample);
118
- });
119
-
120
- it("Test init with 4 valid parameters", () => {
121
- // generated with `new ColorPalette(270, 1, 10)`
122
- const testSample = [
123
- "#240740", "#3b0c6a", "#521093", "#6915bc",
124
- "#7f19e6", "#9643ea", "#ad6cef", "#c495f3",
125
- "#dbbff8", "#f2e8fc",
126
- ];
127
- const cpl = new ColorPalette(270, 1, 10, 80);
128
-
129
- expect(cpl).to.be.instanceOf(ColorPalette);
130
- expect(cpl.hue).to.equal(270);
131
- expect(cpl.hueSteps).to.equal(1);
132
- expect(cpl.lightSteps).to.equal(10);
133
- expect(cpl.saturation).to.equal(80);
134
- expect(cpl.colors.length).to.equal(10);
135
- expect(cpl.colors.map(c => c.toHexString())).to.deep.equal(testSample);
136
- });
137
- });