@severfam/angular-color-picker 0.1.0 → 1.0.0

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 CHANGED
@@ -1,76 +1,80 @@
1
1
  # Angular Color Picker
2
2
 
3
- Angular-компонент палитры цветов с выбором оттенка и насыщенности. Рендерится на Canvas, автоматически масштабируется и пересчитывает размеры при изменении контейнера.
3
+ Angular color picker component with shade and saturation selection. Renders on Canvas, auto-scales and recalculates sizes on container resize.
4
4
 
5
- ## Установка
5
+ ## Installation
6
6
 
7
7
  ```bash
8
- npm install color-picker
8
+ npm install @severfam/angular-color-picker
9
9
  ```
10
10
 
11
- ## Требования
11
+ ## Requirements
12
12
 
13
13
  - Angular 21.2+
14
- - Используется `OnPush` change detection
14
+ - Uses `OnPush` change detection
15
15
 
16
- ## Использование
16
+ ## Usage
17
17
 
18
- ### 1. Импорт
18
+ ### 1. Import
19
19
 
20
- Компонент standalone, импортируйте напрямую в `imports` вашего компонента:
20
+ Standalone component import directly in your component's `imports`:
21
21
 
22
22
  ```typescript
23
- import { Component } from '@angular/core';
24
- import { ColorPicker } from 'color-picker';
23
+ import { ChangeDetectionStrategy, Component, signal } from '@angular/core';
24
+ import { ColorPicker } from '@severfam/angular-color-picker';
25
25
 
26
26
  @Component({
27
27
  selector: 'app-root',
28
28
  imports: [ColorPicker],
29
- template: `
30
- <lib-color-picker
31
- [inColor]="color"
32
- (changeModel)="onColorChange($event)"
33
- />
34
- `,
29
+ templateUrl: './app.html',
30
+ styleUrl: './app.scss',
31
+ changeDetection: ChangeDetectionStrategy.OnPush,
35
32
  })
36
33
  export class AppComponent {
37
- color = '#2889e9';
34
+ color = signal('#2889e9');
38
35
 
39
36
  onColorChange(color: string | null) {
40
- this.color = color;
37
+ this.color.set(color);
41
38
  }
42
39
  }
43
40
  ```
44
41
 
42
+ ```html
43
+ <lib-color-picker
44
+ [inColor]="color()"
45
+ (changeModel)="onColorChange($event)"
46
+ />
47
+ ```
48
+
45
49
  ## API
46
50
 
47
51
  ### Inputs
48
52
 
49
- | Input | Тип | Дефолт | Описание |
50
- |-------|-----|--------|----------|
51
- | `inColor` | `string \| null` | | Текущий цвет (hex). Поддерживает `#RGB` и `#RRGGBB`. |
52
- | `colorDefault` | `string` | `'#000000'` | Цвет по умолчанию, если `hasTransparent = false` и цвет не выбран. |
53
- | `hasTransparent` | `boolean` | `true` | Показывать ли кнопку «без цвета» (прозрачный). |
54
- | `hasEyeDropper` | `boolean` | `false` | Показывать ли иконку пипетки. |
55
- | `eyeColor` | `string \| null` | — | Цвет для превью пипетки (отдельно от выбранного). |
53
+ | Input | Type | Default | Description |
54
+ |-------|------|---------|-------------|
55
+ | `inColor` | `string \| null` | **required** | Current color (hex). Supports `#RGB` and `#RRGGBB`. |
56
+ | `colorDefault` | `string` | `'#000000'` | Default color when `hasTransparent = false` and no color is selected. |
57
+ | `hasTransparent` | `boolean` | `true` | Show "no color" (transparent) button. |
58
+ | `hasEyeDropper` | `boolean` | `false` | Show eyedropper icon. |
59
+ | `eyeColor` | `string \| null` | — | Color for eyedropper preview (separate from selected color). |
56
60
 
57
61
  ### Outputs
58
62
 
59
- | Output | Тип | Описание |
60
- |--------|-----|----------|
61
- | `changeModel` | `string \| null` | Эмитится при каждом изменении цвета (ввод в поле, выбор на палитре). |
62
- | `changeEnd` | `void` | Эмитится при завершении выбора (отпускание кнопки мыши / пальца). |
63
- | `startEye` | `Event` | Эмитится при клике на иконку пипетки. |
63
+ | Output | Type | Description |
64
+ |--------|------|-------------|
65
+ | `changeModel` | `string \| null` | Emits on every color change (input field, palette selection). |
66
+ | `changeEnd` | `void` | Emits when selection ends (mouse/touch release). |
67
+ | `startEye` | `Event` | Emits on eyedropper icon click. |
64
68
 
65
- ### Селектор
69
+ ### Selector
66
70
 
67
71
  ```html
68
72
  <lib-color-picker></lib-color-picker>
69
73
  ```
70
74
 
71
- ## Примеры
75
+ ## Examples
72
76
 
73
- ### Базовый
77
+ ### Basic
74
78
 
75
79
  ```html
76
80
  <lib-color-picker
@@ -79,35 +83,35 @@ export class AppComponent {
79
83
  />
80
84
  ```
81
85
 
82
- ### Без прозрачности
86
+ ### Without transparency
83
87
 
84
88
  ```html
85
89
  <lib-color-picker
86
- [inColor]="color"
90
+ [inColor]="color()"
87
91
  [hasTransparent]="false"
88
92
  [colorDefault]="'#ffffff'"
89
93
  (changeModel)="onColorChange($event)"
90
94
  />
91
95
  ```
92
96
 
93
- ### С пипеткой
97
+ ### With eyedropper
94
98
 
95
99
  ```html
96
100
  <lib-color-picker
97
- [inColor]="color"
101
+ [inColor]="color()"
98
102
  [hasEyeDropper]="true"
99
- [eyeColor]="originalColor"
103
+ [eyeColor]="originalColor()"
100
104
  (changeModel)="onColorChange($event)"
101
105
  (changeEnd)="saveColor()"
102
106
  (startEye)="activateEyedropper()"
103
107
  />
104
108
  ```
105
109
 
106
- ## Стили
110
+ ## Styles
107
111
 
108
- Компонент использует SCSS. Базовые стили подключаются автоматически через `styleUrls`.
112
+ Component uses SCSS. Base styles are included automatically via `styleUrls`.
109
113
 
110
- Для кастомизации переопределите CSS-переменные или стили через `::ng-deep`:
114
+ To customize, override CSS variables or styles via `::ng-deep`:
111
115
 
112
116
  ```scss
113
117
  lib-color-picker {
@@ -116,6 +120,6 @@ lib-color-picker {
116
120
  }
117
121
  ```
118
122
 
119
- ## Лицензия
123
+ ## License
120
124
 
121
125
  MIT
@@ -1,22 +1,20 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, InjectionToken, PLATFORM_ID, inject, ChangeDetectorRef, DOCUMENT, input, output, afterNextRender, effect, ElementRef, ViewChild, ChangeDetectionStrategy, Component, signal } from '@angular/core';
2
+ import { Injectable, InjectionToken, PLATFORM_ID, inject, ChangeDetectorRef, DOCUMENT, input, output, DestroyRef, afterNextRender, effect, ElementRef, ViewChild, ChangeDetectionStrategy, Component, signal } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { isPlatformBrowser, CommonModule } from '@angular/common';
5
5
  import { fromEvent, debounceTime } from 'rxjs';
6
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
7
 
7
8
  class ColorBoxConvertService {
8
9
  /**
9
- * Converts an HSL color value to RGB. Conversion formula
10
- * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
11
- * Assumes h, s, and l are contained in the set [0, 1] and
12
- * returns r, g, and b in the set [0, 255].
13
- *
14
- * @param {number} h The hue
15
- * @param {number} s The saturation
16
- * @param {number} l The lightness
17
- * @return {Array} The RGB representation
10
+ * Converts an HSL color value to RGB.
11
+ * h in [0, 360], s in [0, 1], l in [0, 1].
12
+ * Returns [r, g, b] in [0, 255].
18
13
  */
19
14
  hslToRgb(h, s, l) {
15
+ h = ((h % 360) + 360) % 360;
16
+ s = Math.max(0, Math.min(1, s));
17
+ l = Math.max(0, Math.min(1, l));
20
18
  const k = (n) => (n + h / 30) % 12;
21
19
  const a = s * Math.min(l, 1 - l);
22
20
  const f = (n) => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));
@@ -26,13 +24,19 @@ class ColorBoxConvertService {
26
24
  Math.round(255 * f(4)),
27
25
  ];
28
26
  }
27
+ /**
28
+ * Converts HSL to hex string.
29
+ * h in [0, 1], s in [0, 1], l in [0, 1].
30
+ */
29
31
  hslToHex(h, s, l) {
30
- let r, g, b;
31
- if (isNaN(s)) {
32
- s = 0;
33
- }
32
+ h = Math.max(0, Math.min(1, h));
33
+ s = Math.max(0, Math.min(1, s));
34
+ l = Math.max(0, Math.min(1, l));
35
+ let r;
36
+ let g;
37
+ let b;
34
38
  if (s === 0) {
35
- r = g = b = l; // achromatic
39
+ r = g = b = l;
36
40
  }
37
41
  else {
38
42
  const hue2rgb = (p, q, t) => {
@@ -60,75 +64,99 @@ class ColorBoxConvertService {
60
64
  };
61
65
  return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
62
66
  }
63
- //H = #000fff
67
+ /**
68
+ * Converts hex string to HSL.
69
+ * Returns { h: [0,360], s: [0,100], l: [0,100] }.
70
+ */
64
71
  hexToHsl(H) {
65
- if (H === undefined) {
66
- H = '#000000';
72
+ if (!H || typeof H !== 'string') {
73
+ return { h: 0, s: 0, l: 0 };
67
74
  }
75
+ const hex = H.startsWith('#') ? H : `#${H}`;
68
76
  let r;
69
77
  let g;
70
78
  let b;
71
- if (H.length === 4) {
72
- r = '0x' + H[1] + H[1];
73
- g = '0x' + H[2] + H[2];
74
- b = '0x' + H[3] + H[3];
79
+ if (hex.length === 4) {
80
+ r = parseInt(hex[1] + hex[1], 16);
81
+ g = parseInt(hex[2] + hex[2], 16);
82
+ b = parseInt(hex[3] + hex[3], 16);
75
83
  }
76
- else if (H.length === 7) {
77
- r = '0x' + H[1] + H[2];
78
- g = '0x' + H[3] + H[4];
79
- b = '0x' + H[5] + H[6];
84
+ else if (hex.length === 7) {
85
+ r = parseInt(hex.substring(1, 3), 16);
86
+ g = parseInt(hex.substring(3, 5), 16);
87
+ b = parseInt(hex.substring(5, 7), 16);
80
88
  }
81
- // Then to HSL
82
- r /= 255;
83
- g /= 255;
84
- b /= 255;
89
+ else {
90
+ return { h: 0, s: 0, l: 0 };
91
+ }
92
+ if (isNaN(r) || isNaN(g) || isNaN(b)) {
93
+ return { h: 0, s: 0, l: 0 };
94
+ }
95
+ r = r / 255;
96
+ g = g / 255;
97
+ b = b / 255;
85
98
  const cmin = Math.min(r, g, b);
86
99
  const cmax = Math.max(r, g, b);
87
100
  const delta = cmax - cmin;
88
101
  let h = 0;
89
102
  let s = 0;
90
103
  let l = 0;
91
- if (delta === 0)
92
- h = 0;
93
- else if (cmax === r)
94
- h = ((g - b) / delta) % 6;
95
- else if (cmax === g)
96
- h = (b - r) / delta + 2;
97
- else
98
- h = (r - g) / delta + 4;
99
- h = Math.round(h * 60);
100
- if (h < 0)
101
- h += 360;
102
104
  l = (cmax + cmin) / 2;
103
- s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));
104
- s = +(s * 100).toFixed(1);
105
- l = +(l * 100).toFixed(1);
105
+ if (delta === 0) {
106
+ h = 0;
107
+ s = 0;
108
+ }
109
+ else {
110
+ s = l > 0.5 ? delta / (2 - cmax - cmin) : delta / (cmax + cmin);
111
+ if (cmax === r)
112
+ h = ((g - b) / delta) % 6;
113
+ else if (cmax === g)
114
+ h = (b - r) / delta + 2;
115
+ else
116
+ h = (r - g) / delta + 4;
117
+ h = Math.round(h * 60);
118
+ if (h < 0)
119
+ h += 360;
120
+ }
121
+ s = Math.round(s * 100);
122
+ l = Math.round(l * 100);
106
123
  return { h, s, l };
107
124
  }
108
- hexToRGB(hex = '') {
109
- const red = parseInt(hex.substring(1, 3), 16);
110
- const green = parseInt(hex.substring(3, 5), 16);
111
- const blue = parseInt(hex.substring(5, 7), 16);
112
- return [red, green, blue];
113
- }
125
+ /**
126
+ * Converts hex string to HSV.
127
+ * Returns [h: [0,360], s: [0,1], v: [0,1]].
128
+ */
114
129
  hexToHsv(hex) {
115
130
  const rgb = this.hexToRGB(hex);
116
- const result = this.rgbToHsv(rgb);
117
- return result;
131
+ return this.rgbToHsv(rgb);
132
+ }
133
+ hexToRGB(hex) {
134
+ if (!hex || typeof hex !== 'string') {
135
+ return [0, 0, 0];
136
+ }
137
+ const h = hex.startsWith('#') ? hex : `#${hex}`;
138
+ if (h.length !== 7) {
139
+ return [0, 0, 0];
140
+ }
141
+ const r = parseInt(h.substring(1, 3), 16);
142
+ const g = parseInt(h.substring(3, 5), 16);
143
+ const b = parseInt(h.substring(5, 7), 16);
144
+ if (isNaN(r) || isNaN(g) || isNaN(b)) {
145
+ return [0, 0, 0];
146
+ }
147
+ return [r, g, b];
118
148
  }
119
149
  rgbToHsv([r, g, b]) {
120
- (r /= 255), (g /= 255), (b /= 255);
150
+ r /= 255;
151
+ g /= 255;
152
+ b /= 255;
121
153
  const max = Math.max(r, g, b);
122
154
  const min = Math.min(r, g, b);
155
+ const d = max - min;
123
156
  let h = 0;
124
- let s = 0;
157
+ const s = max === 0 ? 0 : d / max;
125
158
  const v = max;
126
- const d = max - min;
127
- s = max == 0 ? 0 : d / max;
128
- if (max == min) {
129
- h = 0; // achromatic
130
- }
131
- else {
159
+ if (d !== 0) {
132
160
  switch (max) {
133
161
  case r:
134
162
  h = (g - b) / d + (g < b ? 6 : 0);
@@ -158,23 +186,10 @@ function isTouchEvent(event) {
158
186
  try {
159
187
  return event instanceof TouchEvent;
160
188
  }
161
- catch (e) {
189
+ catch {
162
190
  return false;
163
191
  }
164
192
  }
165
- function isSingleTouchEvent(event) {
166
- return isTouchEvent(event) && event.touches.length === 1;
167
- }
168
- function isDoubleTouchEvent(event) {
169
- return isTouchEvent(event) && event.touches.length === 2;
170
- }
171
- function getDistanceBetweenTouches(event) {
172
- if (!isDoubleTouchEvent(event)) {
173
- return 0;
174
- }
175
- const { touches } = event;
176
- return Math.hypot(touches[0].clientX - touches[1].clientX, touches[0].clientY - touches[1].clientY);
177
- }
178
193
 
179
194
  function getEventRectCoords(e, { height, width, left, top }) {
180
195
  let x = 0;
@@ -183,45 +198,19 @@ function getEventRectCoords(e, { height, width, left, top }) {
183
198
  x = e.pageX - left;
184
199
  y = e.pageY - top;
185
200
  }
186
- if (isTouchEvent(e)) {
201
+ if (isTouchEvent(e) && e.changedTouches.length > 0) {
187
202
  x = e.changedTouches[0].pageX - left;
188
203
  y = e.changedTouches[0].pageY - top;
189
204
  }
190
- if (x > width) {
191
- x = width;
192
- }
193
- if (x < 0) {
194
- x = 0;
195
- }
196
- if (y > height) {
197
- y = height;
198
- }
199
- if (y < 0) {
200
- y = 0.1;
201
- }
205
+ x = Math.max(0, Math.min(width, x));
206
+ y = Math.max(0, Math.min(height, y));
202
207
  return { x, y };
203
208
  }
204
209
  function getValueStyle(element, parameter) {
205
210
  const computedStyle = getComputedStyle(element);
206
- let value;
207
- if (parameter === 'width') {
208
- value = (computedStyle.getPropertyValue(parameter) || '0px').match(/\d+/);
209
- }
210
- if (parameter === 'height') {
211
- value = (computedStyle.getPropertyValue(parameter) || '0px').match(/\d+/);
212
- }
213
- if (parameter === 'left') {
214
- value = (computedStyle.getPropertyValue(parameter) || '0px').match(/\d+/);
215
- }
216
- if (parameter === 'top') {
217
- value = (computedStyle.getPropertyValue(parameter) || '0px').match(/\d+/);
218
- }
219
- const val = value || [];
220
- let result = 0;
221
- if (val[0]) {
222
- result = +val[0];
223
- }
224
- return result || 0;
211
+ const raw = computedStyle.getPropertyValue(parameter) || '0px';
212
+ const match = raw.match(/\d+/);
213
+ return match && match[0] ? +match[0] : 0;
225
214
  }
226
215
  function isStartEvent(e) {
227
216
  return e.type === 'mousedown' || e.type === 'touchstart';
@@ -249,12 +238,12 @@ class ColorBoxCanvasService {
249
238
  set widthSpectrum(value) {
250
239
  this._widthSpectrum = value;
251
240
  }
252
- _heigthSpectrum = null;
253
- get heigthSpectrum() {
254
- return this._heigthSpectrum;
241
+ _heightSpectrum = null;
242
+ get heightSpectrum() {
243
+ return this._heightSpectrum;
255
244
  }
256
- set heigthSpectrum(value) {
257
- this._heigthSpectrum = value;
245
+ set heightSpectrum(value) {
246
+ this._heightSpectrum = value;
258
247
  }
259
248
  init(spectrumCanvas, hueCanvas) {
260
249
  this._spectrumCanvas = spectrumCanvas;
@@ -268,8 +257,8 @@ class ColorBoxCanvasService {
268
257
  this._hueCanvas.width = hueWidth;
269
258
  this._hueCanvas.height = hueHeight;
270
259
  this._widthSpectrum = spectrumWidth;
271
- this._heigthSpectrum = spectrumHeight;
272
- this.createRectangleSpectrum('red', this._spectrumCanvas);
260
+ this._heightSpectrum = spectrumHeight;
261
+ this.createRectangleSpectrum('hsl(0 100% 50%)', this._spectrumCanvas);
273
262
  this.createHueSpectrum(this._hueCanvas);
274
263
  }
275
264
  createRectangleSpectrum(color, canvas) {
@@ -346,14 +335,12 @@ class ColorBoxComponent {
346
335
  hue = 0;
347
336
  saturation = 1;
348
337
  lightness = 0.5;
349
- red;
350
- green;
351
- blue;
352
- hex;
353
- _subs = [];
354
- set subs(sub) {
355
- this._subs.push(sub);
356
- }
338
+ red = 0;
339
+ green = 0;
340
+ blue = 0;
341
+ hex = '';
342
+ destroyRef = inject(DestroyRef);
343
+ _activeDocListeners = [];
357
344
  constructor() {
358
345
  afterNextRender(() => {
359
346
  this.init();
@@ -368,6 +355,9 @@ class ColorBoxComponent {
368
355
  }
369
356
  });
370
357
  }
358
+ ngOnDestroy() {
359
+ this.removeDocumentListeners();
360
+ }
371
361
  init() {
372
362
  const spectrumCanvasElement = this.spectrumCanvas?.nativeElement;
373
363
  const hueCanvasElement = this.hueCanvas?.nativeElement;
@@ -375,20 +365,32 @@ class ColorBoxComponent {
375
365
  this.createRectangleSpectrumListeners(spectrumCanvasElement);
376
366
  this.createHueSpectrumListeners(hueCanvasElement);
377
367
  this.colorToPosition(this.inputColorPicker());
378
- this.subs = fromEvent(this.window, 'resize')
379
- .pipe(debounceTime(300))
368
+ fromEvent(this.window, 'resize')
369
+ .pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef))
380
370
  .subscribe(() => {
381
371
  this.refreshColorPickerBox();
382
372
  this.cdr.detectChanges();
383
373
  });
384
374
  }
385
- ngOnDestroy() {
386
- this._subs.forEach((s) => s.unsubscribe());
387
- }
388
375
  refreshColorPickerBox() {
376
+ const spectrumCanvasElement = this.spectrumCanvas?.nativeElement;
377
+ const hueCanvasElement = this.hueCanvas?.nativeElement;
378
+ if (spectrumCanvasElement) {
379
+ const curWidth = getValueStyle(spectrumCanvasElement, 'width');
380
+ const curHeight = getValueStyle(spectrumCanvasElement, 'height');
381
+ spectrumCanvasElement.width = curWidth;
382
+ spectrumCanvasElement.height = curHeight;
383
+ }
384
+ if (hueCanvasElement) {
385
+ const curWidth = getValueStyle(hueCanvasElement, 'width');
386
+ const curHeight = getValueStyle(hueCanvasElement, 'height');
387
+ hueCanvasElement.width = curWidth;
388
+ hueCanvasElement.height = curHeight;
389
+ }
389
390
  const hsl = this.convertService.hexToHsl(this.changeHex);
390
391
  this.hue = hsl.h;
391
- this.canvasService.createRectangleSpectrum(this.getHueColor(this.hue), this.spectrumCanvas?.nativeElement);
392
+ this.canvasService.createRectangleSpectrum(this.getHueColor(this.hue), spectrumCanvasElement);
393
+ this.canvasService.createHueSpectrum(hueCanvasElement);
392
394
  this.refreshPositionCursors();
393
395
  }
394
396
  refreshPositionCursors() {
@@ -396,81 +398,65 @@ class ColorBoxComponent {
396
398
  const curWidth = getValueStyle(spectrumCanvasElement, 'width');
397
399
  const curHeight = getValueStyle(spectrumCanvasElement, 'height');
398
400
  const initWidth = this.canvasService.widthSpectrum;
399
- const initHeight = this.canvasService.heigthSpectrum;
401
+ const initHeight = this.canvasService.heightSpectrum;
400
402
  if (curWidth !== initWidth || curHeight !== initHeight) {
401
403
  this.colorToPosition(this.changeHex);
402
404
  this.canvasService.widthSpectrum = curWidth;
403
- this.canvasService.heigthSpectrum = curHeight;
405
+ this.canvasService.heightSpectrum = curHeight;
404
406
  }
405
407
  }
406
408
  createRectangleSpectrumListeners(canvas) {
407
- const getSpectrumColor = (e) => {
409
+ const handler = (e) => {
408
410
  e.preventDefault();
409
- const spectrumRect = this.canvasService.spectrumRect;
410
- const { x, y } = getEventRectCoords(e, spectrumRect);
411
- const xRatio = (x / spectrumRect.width) * 100;
412
- const yRatio = (y / spectrumRect.height) * 100;
411
+ const rect = this.canvasService.spectrumRect;
412
+ const { x, y } = getEventRectCoords(e, rect);
413
+ const xRatio = (x / rect.width) * 100;
414
+ const yRatio = (y / rect.height) * 100;
413
415
  const hsvValue = 1 - yRatio / 100;
414
416
  const hsvSaturation = xRatio / 100;
415
- this.lightness = (hsvValue / 2) * (2 - hsvSaturation);
416
- const saturationDevider = 1 - Math.abs(2 * this.lightness - 1);
417
- this.saturation =
418
- saturationDevider === 0 ? 0 : (hsvValue * hsvSaturation) / saturationDevider;
419
- const color = `hsl ${this.hue} ${this.saturation} ${this.lightness}`;
417
+ this.lightness = Math.max(0, Math.min(1, (hsvValue / 2) * (2 - hsvSaturation)));
418
+ const saturationDivider = 1 - Math.abs(2 * this.lightness - 1);
419
+ this.saturation = Math.max(0, Math.min(1, saturationDivider === 0 ? 0 : (hsvValue * hsvSaturation) / saturationDivider));
420
420
  this.updateSpectrumCursor(x, y);
421
- this.setColorValues(color);
422
- if (isStartEvent(e)) {
423
- this.changeColorEmit(this.hex);
424
- }
425
- if (isMoveEvent(e)) {
426
- this.changeColorEmit(this.hex);
427
- }
428
- if (isEndEvent(e)) {
429
- this.changeColorEmit(this.hex);
430
- this.selectColor.emit(this.hex);
431
- }
421
+ this.emitColor(e);
432
422
  };
433
423
  canvas.addEventListener('mousedown', (e) => {
434
- this.eventHandler(e, getSpectrumColor);
424
+ this.eventHandler(e, handler);
435
425
  });
436
426
  canvas.addEventListener('touchstart', (e) => {
437
- this.eventHandler(e, getSpectrumColor);
427
+ this.eventHandler(e, handler);
438
428
  });
439
429
  }
440
430
  createHueSpectrumListeners(canvas) {
441
- const getHueColor = (e) => {
431
+ const handler = (e) => {
442
432
  e.preventDefault();
443
- const hueRect = this.canvasService.hueRect;
444
- const { x } = getEventRectCoords(e, hueRect);
445
- const percent = x / hueRect.width;
446
- this.hue = 360 * percent;
433
+ const rect = this.canvasService.hueRect;
434
+ const { x } = getEventRectCoords(e, rect);
435
+ const percent = rect.width > 0 ? x / rect.width : 0;
436
+ this.hue = Math.max(0, Math.min(360, 360 * percent));
447
437
  const hueColor = `hsl(${this.hue} 100% 50%)`;
448
- const color = `hsl(
449
- ${this.hue}
450
- ${this.saturation * 100}%
451
- ${this.lightness * 100}%
452
- )`;
453
438
  this.canvasService.createRectangleSpectrum(hueColor, this.spectrumCanvas?.nativeElement);
454
439
  this.updateHueCursor(x);
455
- this.setColorValues(color);
456
- if (isStartEvent(e)) {
457
- this.changeColorEmit(this.hex);
458
- }
459
- if (isMoveEvent(e)) {
460
- this.changeColorEmit(this.hex);
461
- }
462
- if (isEndEvent(e)) {
463
- this.changeColorEmit(this.hex);
464
- this.selectColor.emit(this.hex);
465
- }
440
+ this.emitColor(e);
466
441
  };
467
442
  canvas.addEventListener('mousedown', (e) => {
468
- this.eventHandler(e, getHueColor);
443
+ this.eventHandler(e, handler);
469
444
  });
470
445
  canvas.addEventListener('touchstart', (e) => {
471
- this.eventHandler(e, getHueColor);
446
+ this.eventHandler(e, handler);
472
447
  });
473
448
  }
449
+ emitColor(e) {
450
+ const color = `hsl(${this.hue} ${this.saturation * 100}% ${this.lightness * 100}%)`;
451
+ this.setColorValues(color);
452
+ if (isStartEvent(e) || isMoveEvent(e)) {
453
+ this.changeColorEmit(this.hex);
454
+ }
455
+ if (isEndEvent(e)) {
456
+ this.changeColorEmit(this.hex);
457
+ this.selectColor.emit(this.hex);
458
+ }
459
+ }
474
460
  changeColorEmit(hex) {
475
461
  this.changeHex = hex;
476
462
  this.changeColor.emit(this.hex);
@@ -485,13 +471,13 @@ class ColorBoxComponent {
485
471
  }
486
472
  updateSpectrumCursor(x, y) {
487
473
  if (this.spectrumCursor) {
488
- this.spectrumCursor.nativeElement.style.left = x + 'px';
489
- this.spectrumCursor.nativeElement.style.top = y + 'px';
474
+ this.spectrumCursor.nativeElement.style.left = `${x}px`;
475
+ this.spectrumCursor.nativeElement.style.top = `${y}px`;
490
476
  }
491
477
  }
492
478
  updateHueCursor(x) {
493
479
  if (this.hueCursor) {
494
- this.hueCursor.nativeElement.style.left = x + 'px';
480
+ this.hueCursor.nativeElement.style.left = `${x}px`;
495
481
  }
496
482
  }
497
483
  colorToPosition(hexColor) {
@@ -516,32 +502,40 @@ class ColorBoxComponent {
516
502
  return;
517
503
  }
518
504
  if (e instanceof MouseEvent) {
519
- this.document.addEventListener('mousemove', handler);
520
- const mouseUpEvent = (e) => {
521
- handler(e);
522
- this.document.removeEventListener('mousemove', handler);
523
- this.document.removeEventListener('mouseup', mouseUpEvent);
524
- };
525
- this.document.addEventListener('mouseup', mouseUpEvent);
505
+ this.addDocumentListener('mousemove', handler);
506
+ this.addDocumentListener('mouseup', ((upEvent) => {
507
+ handler(upEvent);
508
+ this.removeDocumentListeners();
509
+ }));
526
510
  }
527
511
  if (isTouchEvent(e)) {
528
- this.document.addEventListener('touchmove', handler);
529
- const touchUpEvent = (e) => {
530
- handler(e);
531
- this.document.removeEventListener('touchmove', handler);
532
- this.document.removeEventListener('touchend', touchUpEvent);
533
- this.document.removeEventListener('touchcancel', touchUpEvent);
534
- };
535
- this.document.addEventListener('touchend', touchUpEvent);
536
- this.document.addEventListener('touchcancel', touchUpEvent);
512
+ this.addDocumentListener('touchmove', handler);
513
+ this.addDocumentListener('touchend', ((upEvent) => {
514
+ handler(upEvent);
515
+ this.removeDocumentListeners();
516
+ }));
517
+ this.addDocumentListener('touchcancel', ((upEvent) => {
518
+ handler(upEvent);
519
+ this.removeDocumentListeners();
520
+ }));
521
+ }
522
+ }
523
+ addDocumentListener(type, handler) {
524
+ this.document.addEventListener(type, handler);
525
+ this._activeDocListeners.push({ type, handler });
526
+ }
527
+ removeDocumentListeners() {
528
+ for (const { type, handler } of this._activeDocListeners) {
529
+ this.document.removeEventListener(type, handler);
537
530
  }
531
+ this._activeDocListeners = [];
538
532
  }
539
533
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ColorBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
540
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.22", type: ColorBoxComponent, isStandalone: true, selector: "color-box", inputs: { inputColorPicker: { classPropertyName: "inputColorPicker", publicName: "inputColorPicker", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changeColor: "changeColor", selectColor: "selectColor" }, providers: [...WINDOW_PROVIDERS, ColorBoxCanvasService], viewQueries: [{ propertyName: "spectrumCursor", first: true, predicate: ["spectrumCursor"], descendants: true, read: ElementRef }, { propertyName: "spectrumCanvas", first: true, predicate: ["spectrumCanvas"], descendants: true, read: ElementRef }, { propertyName: "hueCursor", first: true, predicate: ["hueCursor"], descendants: true, read: ElementRef }, { propertyName: "hueCanvas", first: true, predicate: ["hueCanvas"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"panel\">\n <div class=\"spectrum-map\">\n <button\n id=\"spectrum-cursor\"\n class=\"color-spectrum-cursor\"\n #spectrumCursor\n ></button>\n <canvas id=\"spectrum-canvas\" #spectrumCanvas></canvas>\n </div>\n <div class=\"hue-map-wrapper\">\n <div class=\"hue-map\">\n <button id=\"hue-cursor\" class=\"color-hue-cursor\" #hueCursor></button>\n <canvas id=\"hue-canvas\" #hueCanvas></canvas>\n </div>\n <div class=\"content-fill-opacity\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [".panel{display:block;padding-bottom:20px}.panel .spectrum-map{border-radius:3px;cursor:pointer;height:120px;margin-bottom:15px;overflow:hidden;position:relative;width:100%}.panel .spectrum-map .color-spectrum-cursor{background:transparent;border:2px solid #fff;border-radius:100%;box-sizing:border-box;height:20px;margin-left:-10px;margin-top:-10px;box-shadow:0 0 4px #0006;padding:0;pointer-events:none;position:absolute;width:20px;z-index:2}.panel .spectrum-map #spectrum-canvas{background:#ccc;height:100%;inset:0;position:absolute;width:100%}.panel .hue-map{cursor:pointer;height:10px;position:relative;width:100%}.panel .hue-map .color-hue-cursor{background:transparent;border:2px solid #fff;border-radius:100%;box-sizing:border-box;box-shadow:0 0 4px #0006;height:20px;margin-left:-10px;padding:0;pointer-events:none;position:absolute;top:0;width:20px;z-index:2}.panel .hue-map #hue-canvas{background:#ccc;border-radius:8px;height:100%;width:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
534
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.22", type: ColorBoxComponent, isStandalone: true, selector: "color-box", inputs: { inputColorPicker: { classPropertyName: "inputColorPicker", publicName: "inputColorPicker", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changeColor: "changeColor", selectColor: "selectColor" }, providers: [...WINDOW_PROVIDERS, ColorBoxCanvasService], viewQueries: [{ propertyName: "spectrumCursor", first: true, predicate: ["spectrumCursor"], descendants: true, read: ElementRef }, { propertyName: "spectrumCanvas", first: true, predicate: ["spectrumCanvas"], descendants: true, read: ElementRef }, { propertyName: "hueCursor", first: true, predicate: ["hueCursor"], descendants: true, read: ElementRef }, { propertyName: "hueCanvas", first: true, predicate: ["hueCanvas"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"colorbox\">\r\n <div class=\"colorbox__spectrum\">\r\n <button\r\n id=\"spectrum-cursor\"\r\n class=\"colorbox__spectrum-cursor\"\r\n #spectrumCursor\r\n ></button>\r\n <canvas id=\"spectrum-canvas\" #spectrumCanvas></canvas>\r\n </div>\r\n <div class=\"colorbox__hue-wrapper\">\r\n <div class=\"colorbox__hue\">\r\n <button id=\"hue-cursor\" class=\"colorbox__hue-cursor\" #hueCursor></button>\r\n <canvas id=\"hue-canvas\" #hueCanvas></canvas>\r\n </div>\r\n <div class=\"colorbox__content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;height:100%}.colorbox{display:flex;flex-direction:column;height:100%}.colorbox__spectrum{border-radius:3px;cursor:pointer;flex:1;min-height:60px;overflow:hidden;position:relative;width:100%}.colorbox__spectrum-cursor{background:transparent;border:2px solid #fff;border-radius:100%;box-sizing:border-box;height:20px;margin-left:-10px;margin-top:-10px;box-shadow:0 0 4px #0006;padding:0;pointer-events:none;position:absolute;width:20px;z-index:2}.colorbox #spectrum-canvas{background:#ccc;height:100%;inset:0;position:absolute;width:100%}.colorbox__hue-wrapper{display:flex;flex-direction:column}.colorbox__hue{cursor:pointer;height:10px;position:relative;width:100%}.colorbox__hue-cursor{background:transparent;border:2px solid #fff;border-radius:100%;box-sizing:border-box;box-shadow:0 0 4px #0006;height:20px;margin-left:-10px;padding:0;pointer-events:none;position:absolute;top:0;width:20px;z-index:2}.colorbox #hue-canvas{background:#ccc;border-radius:8px;height:100%;width:100%}.colorbox__content{min-height:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
541
535
  }
542
536
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ColorBoxComponent, decorators: [{
543
537
  type: Component,
544
- args: [{ selector: 'color-box', changeDetection: ChangeDetectionStrategy.OnPush, providers: [...WINDOW_PROVIDERS, ColorBoxCanvasService], standalone: true, template: "<div class=\"panel\">\n <div class=\"spectrum-map\">\n <button\n id=\"spectrum-cursor\"\n class=\"color-spectrum-cursor\"\n #spectrumCursor\n ></button>\n <canvas id=\"spectrum-canvas\" #spectrumCanvas></canvas>\n </div>\n <div class=\"hue-map-wrapper\">\n <div class=\"hue-map\">\n <button id=\"hue-cursor\" class=\"color-hue-cursor\" #hueCursor></button>\n <canvas id=\"hue-canvas\" #hueCanvas></canvas>\n </div>\n <div class=\"content-fill-opacity\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [".panel{display:block;padding-bottom:20px}.panel .spectrum-map{border-radius:3px;cursor:pointer;height:120px;margin-bottom:15px;overflow:hidden;position:relative;width:100%}.panel .spectrum-map .color-spectrum-cursor{background:transparent;border:2px solid #fff;border-radius:100%;box-sizing:border-box;height:20px;margin-left:-10px;margin-top:-10px;box-shadow:0 0 4px #0006;padding:0;pointer-events:none;position:absolute;width:20px;z-index:2}.panel .spectrum-map #spectrum-canvas{background:#ccc;height:100%;inset:0;position:absolute;width:100%}.panel .hue-map{cursor:pointer;height:10px;position:relative;width:100%}.panel .hue-map .color-hue-cursor{background:transparent;border:2px solid #fff;border-radius:100%;box-sizing:border-box;box-shadow:0 0 4px #0006;height:20px;margin-left:-10px;padding:0;pointer-events:none;position:absolute;top:0;width:20px;z-index:2}.panel .hue-map #hue-canvas{background:#ccc;border-radius:8px;height:100%;width:100%}\n"] }]
538
+ args: [{ selector: 'color-box', changeDetection: ChangeDetectionStrategy.OnPush, providers: [...WINDOW_PROVIDERS, ColorBoxCanvasService], standalone: true, template: "<div class=\"colorbox\">\r\n <div class=\"colorbox__spectrum\">\r\n <button\r\n id=\"spectrum-cursor\"\r\n class=\"colorbox__spectrum-cursor\"\r\n #spectrumCursor\r\n ></button>\r\n <canvas id=\"spectrum-canvas\" #spectrumCanvas></canvas>\r\n </div>\r\n <div class=\"colorbox__hue-wrapper\">\r\n <div class=\"colorbox__hue\">\r\n <button id=\"hue-cursor\" class=\"colorbox__hue-cursor\" #hueCursor></button>\r\n <canvas id=\"hue-canvas\" #hueCanvas></canvas>\r\n </div>\r\n <div class=\"colorbox__content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;height:100%}.colorbox{display:flex;flex-direction:column;height:100%}.colorbox__spectrum{border-radius:3px;cursor:pointer;flex:1;min-height:60px;overflow:hidden;position:relative;width:100%}.colorbox__spectrum-cursor{background:transparent;border:2px solid #fff;border-radius:100%;box-sizing:border-box;height:20px;margin-left:-10px;margin-top:-10px;box-shadow:0 0 4px #0006;padding:0;pointer-events:none;position:absolute;width:20px;z-index:2}.colorbox #spectrum-canvas{background:#ccc;height:100%;inset:0;position:absolute;width:100%}.colorbox__hue-wrapper{display:flex;flex-direction:column}.colorbox__hue{cursor:pointer;height:10px;position:relative;width:100%}.colorbox__hue-cursor{background:transparent;border:2px solid #fff;border-radius:100%;box-sizing:border-box;box-shadow:0 0 4px #0006;height:20px;margin-left:-10px;padding:0;pointer-events:none;position:absolute;top:0;width:20px;z-index:2}.colorbox #hue-canvas{background:#ccc;border-radius:8px;height:100%;width:100%}.colorbox__content{min-height:0}\n"] }]
545
539
  }], ctorParameters: () => [], propDecorators: { inputColorPicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputColorPicker", required: false }] }], changeColor: [{ type: i0.Output, args: ["changeColor"] }], selectColor: [{ type: i0.Output, args: ["selectColor"] }], spectrumCursor: [{
546
540
  type: ViewChild,
547
541
  args: ['spectrumCursor', { static: false, read: ElementRef }]
@@ -591,11 +585,11 @@ class ColorPicker {
591
585
  this.changeEnd.emit();
592
586
  }
593
587
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ColorPicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
594
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: ColorPicker, isStandalone: true, selector: "lib-color-picker", inputs: { inColor: { classPropertyName: "inColor", publicName: "inColor", isSignal: true, isRequired: true, transformFunction: null }, eyeColor: { classPropertyName: "eyeColor", publicName: "eyeColor", isSignal: true, isRequired: false, transformFunction: null }, hasTransparent: { classPropertyName: "hasTransparent", publicName: "hasTransparent", isSignal: true, isRequired: false, transformFunction: null }, hasEyeDropper: { classPropertyName: "hasEyeDropper", publicName: "hasEyeDropper", isSignal: true, isRequired: false, transformFunction: null }, colorDefault: { classPropertyName: "colorDefault", publicName: "colorDefault", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changeModel: "changeModel", changeEnd: "changeEnd", startEye: "startEye" }, ngImport: i0, template: "<div class=\"color-box\">\r\n <div class=\"design-color-box-wrapper\">\r\n <ng-container *ngTemplateOutlet=\"colorMapTemplate\"></ng-container>\r\n </div>\r\n\r\n <div class=\"color-box__info\">\r\n @if (hasEyeDropper()) {\r\n <div class=\"color-box__picker\" (click)=\"startEye.emit($event)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.4227 4.27425L19.7257 3.57734C18.9559 2.80755 17.7079 2.80755 16.9381 3.57734L12.7565 7.75881L12.0596 7.0619C11.6747 6.677 11.0507 6.677 10.6658 7.0619C10.2809 7.44679 10.2809 8.07083 10.6658 8.45572L11.3626 9.15255L4.39341 16.1217C4.5402 17.3687 4.0452 19.2573 3 20.3027L3.69654 21C4.74192 19.9546 6.63098 19.4596 7.87801 19.6062L14.8472 12.6371L15.5442 13.3341C15.9291 13.719 16.5532 13.719 16.9381 13.3341C17.323 12.9492 17.323 12.3252 16.9381 11.9403L16.2411 11.2434L20.4227 7.0619C21.1924 6.29211 21.1924 5.04404 20.4227 4.27425ZM12.0595 9.84946L14.1503 11.9402L7.49458 18.5958C6.82993 18.5871 6.10446 18.7017 5.41883 18.915C5.24707 18.9685 5.07418 19.0292 4.90213 19.0976C4.97048 18.9256 5.03126 18.7527 5.0847 18.5809C5.29805 17.8953 5.41264 17.1698 5.40386 16.5051L12.0595 9.84946Z\" fill=\"#3D3D3D\"/>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"color-box__wrapperline\">\r\n @if (hasTransparent()) {\r\n <div\r\n class=\"color-box__transparent\"\r\n (click)=\"selectColor(null)\"\r\n >\r\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 32 32\">\r\n <path fill=\"currentColor\" d=\"M8 25.333c0 1.467 1.2 2.667 2.667 2.667h10.667c1.467 0 2.667-1.2 2.667-2.667v-16h-16v16zM11.28 15.84l1.88-1.88 2.84 2.827 2.827-2.827 1.88 1.88-2.827 2.827 2.827 2.827-1.88 1.88-2.827-2.827-2.827 2.827-1.88-1.88 2.827-2.827-2.84-2.827zM20.667 5.333l-1.333-1.333h-6.667l-1.333 1.333h-4.667v2.667h18.667v-2.667z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div\r\n class=\"color-box__wrapper\"\r\n [class.color-box__wrapper-withtransparent]=\"hasTransparent()\"\r\n >\r\n @if (eyeColor() || currentColor(); as color) {\r\n <div\r\n class=\"color-box__preview\"\r\n [style.background]=\"color\"\r\n ></div>\r\n }\r\n @if (isTransparent) {\r\n <div\r\n class=\"color-box__preview color-box__preview--transparent\"\r\n ></div>\r\n }\r\n <div class=\"color-box__form-element\">\r\n <input\r\n type=\"text\"\r\n [value]=\"\r\n currentColor() ||\r\n (hasTransparent() ? '\u0411\u0435\u0437 \u0446\u0432\u0435\u0442\u0430' : colorDefault())\r\n \"\r\n class=\"color-box__input\"\r\n [class.color-box__input-trasparent]=\"isTransparent\"\r\n [attr.readonly]=\"isTransparent || null\"\r\n (change)=\"changeInput($event)\"\r\n pattern=\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\"\r\n maxlength=\"7\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #colorMapTemplate>\r\n <color-box\r\n [inputColorPicker]=\"currentColor() || colorDefault()\"\r\n (changeColor)=\"changeColor($event)\"\r\n (selectColor)=\"selectColor($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </color-box>\r\n</ng-template>\r\n\r\n", styles: [".color-box{font-family:Open Sans}.color-box__wrapperline{display:flex;width:100%}.color-box__wrapper-usecolors--background-fill,.color-box__wrapper-usecolors--stroke{display:block}.color-box__transparent{display:flex;justify-content:center;align-items:center;cursor:pointer;height:37px;margin-right:4px;width:37px}.color-box__transparent:hover{background-color:#f6f6f6}.color-box__wrapper{border:1px solid #eaeaea;border-radius:3px;display:flex;overflow:hidden;width:100%}.color-box__wrapper-withtransparent{width:calc(100% - 42px)}.color-box__info{align-items:center;display:flex}.color-box__picker{cursor:pointer;display:flex;align-items:center;justify-content:center;width:37px;height:37px;margin-right:4px}.color-box__picker:hover{background-color:#f6f6f6}.color-box__preview{border-right:1px solid #e5e5e5;height:36px;width:40%}.color-box__preview--transparent{background-color:#fff;background-image:linear-gradient(45deg,#ccc 25%,transparent 25%,transparent 75%,#ccc 75%,#ccc),linear-gradient(45deg,#ccc 25%,transparent 25%,transparent 75%,#ccc 75%,#ccc);background-size:8px 8px;background-position:0 0,4px 4px}.color-box__form-element{width:60%}.color-box__input{border:0;border-bottom:1px solid #e5e5e5;font-size:15px;font-style:normal;font-weight:400;height:36px;text-align:center;text-transform:uppercase;width:100%}.color-box__input:focus{outline:0}.color-box__input-trasparent{text-transform:none}.color-box__usecolors-title{font-size:13px;font-style:normal;font-weight:400;line-height:normal;margin:15px 0}.color-box__usecolors-title--modal{font-size:13px;font-style:normal;font-weight:400;line-height:normal;margin:0 0 15px}.color-box__usecolors-wrapper{display:inline-flex;flex-wrap:wrap;gap:4px}.color-box__usecolors-wrapper--stroke{max-height:106px;overflow:auto}.color-box__usecolors-color{border:1px solid rgba(0,0,0,.1);border-radius:3px;cursor:pointer;height:32px;width:32px;min-width:32px;min-height:32px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ColorBoxComponent, selector: "color-box", inputs: ["inputColorPicker"], outputs: ["changeColor", "selectColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
588
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: ColorPicker, isStandalone: true, selector: "lib-color-picker", inputs: { inColor: { classPropertyName: "inColor", publicName: "inColor", isSignal: true, isRequired: true, transformFunction: null }, eyeColor: { classPropertyName: "eyeColor", publicName: "eyeColor", isSignal: true, isRequired: false, transformFunction: null }, hasTransparent: { classPropertyName: "hasTransparent", publicName: "hasTransparent", isSignal: true, isRequired: false, transformFunction: null }, hasEyeDropper: { classPropertyName: "hasEyeDropper", publicName: "hasEyeDropper", isSignal: true, isRequired: false, transformFunction: null }, colorDefault: { classPropertyName: "colorDefault", publicName: "colorDefault", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changeModel: "changeModel", changeEnd: "changeEnd", startEye: "startEye" }, ngImport: i0, template: "<div class=\"colorpicker\">\r\n <div class=\"colorpicker__design-wrapper\">\r\n <ng-container *ngTemplateOutlet=\"colorMapTemplate\"></ng-container>\r\n </div>\r\n\r\n <div class=\"colorpicker__info\">\r\n @if (hasEyeDropper()) {\r\n <div class=\"colorpicker__picker\" (click)=\"startEye.emit($event)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.4227 4.27425L19.7257 3.57734C18.9559 2.80755 17.7079 2.80755 16.9381 3.57734L12.7565 7.75881L12.0596 7.0619C11.6747 6.677 11.0507 6.677 10.6658 7.0619C10.2809 7.44679 10.2809 8.07083 10.6658 8.45572L11.3626 9.15255L4.39341 16.1217C4.5402 17.3687 4.0452 19.2573 3 20.3027L3.69654 21C4.74192 19.9546 6.63098 19.4596 7.87801 19.6062L14.8472 12.6371L15.5442 13.3341C15.9291 13.719 16.5532 13.719 16.9381 13.3341C17.323 12.9492 17.323 12.3252 16.9381 11.9403L16.2411 11.2434L20.4227 7.0619C21.1924 6.29211 21.1924 5.04404 20.4227 4.27425ZM12.0595 9.84946L14.1503 11.9402L7.49458 18.5958C6.82993 18.5871 6.10446 18.7017 5.41883 18.915C5.24707 18.9685 5.07418 19.0292 4.90213 19.0976C4.97048 18.9256 5.03126 18.7527 5.0847 18.5809C5.29805 17.8953 5.41264 17.1698 5.40386 16.5051L12.0595 9.84946Z\" fill=\"#3D3D3D\"/>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"colorpicker__wrapperline\">\r\n @if (hasTransparent()) {\r\n <div\r\n class=\"colorpicker__transparent\"\r\n (click)=\"selectColor(null)\"\r\n >\r\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 32 32\">\r\n <path fill=\"currentColor\" d=\"M8 25.333c0 1.467 1.2 2.667 2.667 2.667h10.667c1.467 0 2.667-1.2 2.667-2.667v-16h-16v16zM11.28 15.84l1.88-1.88 2.84 2.827 2.827-2.827 1.88 1.88-2.827 2.827 2.827 2.827-1.88 1.88-2.827-2.827-2.827 2.827-1.88-1.88 2.827-2.827-2.84-2.827zM20.667 5.333l-1.333-1.333h-6.667l-1.333 1.333h-4.667v2.667h18.667v-2.667z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div\r\n class=\"colorpicker__wrapper\"\r\n [class.colorpicker__wrapper--with-transparent]=\"hasTransparent()\"\r\n >\r\n @if (eyeColor() || currentColor(); as color) {\r\n <div\r\n class=\"colorpicker__preview\"\r\n [style.background]=\"color\"\r\n ></div>\r\n }\r\n @if (isTransparent) {\r\n <div\r\n class=\"colorpicker__preview colorpicker__preview--transparent\"\r\n ></div>\r\n }\r\n <div class=\"colorpicker__form-element\">\r\n <input\r\n type=\"text\"\r\n [value]=\"\r\n currentColor() ||\r\n (hasTransparent() ? '\u0411\u0435\u0437 \u0446\u0432\u0435\u0442\u0430' : colorDefault())\r\n \"\r\n class=\"colorpicker__input\"\r\n [class.colorpicker__input--transparent]=\"isTransparent\"\r\n [attr.readonly]=\"isTransparent || null\"\r\n (change)=\"changeInput($event)\"\r\n pattern=\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\"\r\n maxlength=\"7\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #colorMapTemplate>\r\n <color-box\r\n [inputColorPicker]=\"currentColor() || colorDefault()\"\r\n (changeColor)=\"changeColor($event)\"\r\n (selectColor)=\"selectColor($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </color-box>\r\n</ng-template>\r\n", styles: [":host{display:block;height:100%}.colorpicker{display:flex;flex-direction:column;height:100%;font-family:Open Sans}.colorpicker__design-wrapper{flex:1;min-height:0}.colorpicker__info{align-items:center;display:flex;flex-shrink:0;margin-top:10px}.colorpicker__picker{align-items:center;cursor:pointer;display:flex;justify-content:center;width:37px;height:37px;margin-right:4px}.colorpicker__picker:hover{background-color:#f6f6f6}.colorpicker__wrapperline{display:flex;flex:1;min-width:0;width:100%}.colorpicker__transparent{display:flex;justify-content:center;align-items:center;cursor:pointer;height:37px;margin-right:4px;width:37px}.colorpicker__transparent:hover{background-color:#f6f6f6}.colorpicker__wrapper{border:1px solid #eaeaea;border-radius:3px;display:flex;overflow:hidden;width:100%}.colorpicker__wrapper--with-transparent{width:calc(100% - 42px)}.colorpicker__preview{border-right:1px solid #e5e5e5;height:36px;width:40%}.colorpicker__preview--transparent{background-color:#fff;background-image:linear-gradient(45deg,#ccc 25%,transparent 25%,transparent 75%,#ccc 75%,#ccc),linear-gradient(45deg,#ccc 25%,transparent 25%,transparent 75%,#ccc 75%,#ccc);background-size:8px 8px;background-position:0 0,4px 4px}.colorpicker__form-element{width:60%}.colorpicker__input{border:0;border-bottom:1px solid #e5e5e5;font-size:15px;font-style:normal;font-weight:400;height:36px;text-align:center;text-transform:uppercase;width:100%}.colorpicker__input:focus{outline:0}.colorpicker__input--transparent{text-transform:none}.colorpicker__usecolors-title{font-size:13px;font-style:normal;font-weight:400;line-height:normal;margin:15px 0}.colorpicker__usecolors-title--modal{margin:0 0 15px}.colorpicker__usecolors-wrapper{display:inline-flex;flex-wrap:wrap;gap:4px}.colorpicker__usecolors-wrapper--stroke{max-height:106px;overflow:auto}.colorpicker__usecolors-color{border:1px solid rgba(0,0,0,.1);border-radius:3px;cursor:pointer;height:32px;width:32px;min-width:32px;min-height:32px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ColorBoxComponent, selector: "color-box", inputs: ["inputColorPicker"], outputs: ["changeColor", "selectColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
595
589
  }
596
590
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: ColorPicker, decorators: [{
597
591
  type: Component,
598
- args: [{ selector: 'lib-color-picker', imports: [CommonModule, ColorBoxComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"color-box\">\r\n <div class=\"design-color-box-wrapper\">\r\n <ng-container *ngTemplateOutlet=\"colorMapTemplate\"></ng-container>\r\n </div>\r\n\r\n <div class=\"color-box__info\">\r\n @if (hasEyeDropper()) {\r\n <div class=\"color-box__picker\" (click)=\"startEye.emit($event)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.4227 4.27425L19.7257 3.57734C18.9559 2.80755 17.7079 2.80755 16.9381 3.57734L12.7565 7.75881L12.0596 7.0619C11.6747 6.677 11.0507 6.677 10.6658 7.0619C10.2809 7.44679 10.2809 8.07083 10.6658 8.45572L11.3626 9.15255L4.39341 16.1217C4.5402 17.3687 4.0452 19.2573 3 20.3027L3.69654 21C4.74192 19.9546 6.63098 19.4596 7.87801 19.6062L14.8472 12.6371L15.5442 13.3341C15.9291 13.719 16.5532 13.719 16.9381 13.3341C17.323 12.9492 17.323 12.3252 16.9381 11.9403L16.2411 11.2434L20.4227 7.0619C21.1924 6.29211 21.1924 5.04404 20.4227 4.27425ZM12.0595 9.84946L14.1503 11.9402L7.49458 18.5958C6.82993 18.5871 6.10446 18.7017 5.41883 18.915C5.24707 18.9685 5.07418 19.0292 4.90213 19.0976C4.97048 18.9256 5.03126 18.7527 5.0847 18.5809C5.29805 17.8953 5.41264 17.1698 5.40386 16.5051L12.0595 9.84946Z\" fill=\"#3D3D3D\"/>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"color-box__wrapperline\">\r\n @if (hasTransparent()) {\r\n <div\r\n class=\"color-box__transparent\"\r\n (click)=\"selectColor(null)\"\r\n >\r\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 32 32\">\r\n <path fill=\"currentColor\" d=\"M8 25.333c0 1.467 1.2 2.667 2.667 2.667h10.667c1.467 0 2.667-1.2 2.667-2.667v-16h-16v16zM11.28 15.84l1.88-1.88 2.84 2.827 2.827-2.827 1.88 1.88-2.827 2.827 2.827 2.827-1.88 1.88-2.827-2.827-2.827 2.827-1.88-1.88 2.827-2.827-2.84-2.827zM20.667 5.333l-1.333-1.333h-6.667l-1.333 1.333h-4.667v2.667h18.667v-2.667z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div\r\n class=\"color-box__wrapper\"\r\n [class.color-box__wrapper-withtransparent]=\"hasTransparent()\"\r\n >\r\n @if (eyeColor() || currentColor(); as color) {\r\n <div\r\n class=\"color-box__preview\"\r\n [style.background]=\"color\"\r\n ></div>\r\n }\r\n @if (isTransparent) {\r\n <div\r\n class=\"color-box__preview color-box__preview--transparent\"\r\n ></div>\r\n }\r\n <div class=\"color-box__form-element\">\r\n <input\r\n type=\"text\"\r\n [value]=\"\r\n currentColor() ||\r\n (hasTransparent() ? '\u0411\u0435\u0437 \u0446\u0432\u0435\u0442\u0430' : colorDefault())\r\n \"\r\n class=\"color-box__input\"\r\n [class.color-box__input-trasparent]=\"isTransparent\"\r\n [attr.readonly]=\"isTransparent || null\"\r\n (change)=\"changeInput($event)\"\r\n pattern=\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\"\r\n maxlength=\"7\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #colorMapTemplate>\r\n <color-box\r\n [inputColorPicker]=\"currentColor() || colorDefault()\"\r\n (changeColor)=\"changeColor($event)\"\r\n (selectColor)=\"selectColor($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </color-box>\r\n</ng-template>\r\n\r\n", styles: [".color-box{font-family:Open Sans}.color-box__wrapperline{display:flex;width:100%}.color-box__wrapper-usecolors--background-fill,.color-box__wrapper-usecolors--stroke{display:block}.color-box__transparent{display:flex;justify-content:center;align-items:center;cursor:pointer;height:37px;margin-right:4px;width:37px}.color-box__transparent:hover{background-color:#f6f6f6}.color-box__wrapper{border:1px solid #eaeaea;border-radius:3px;display:flex;overflow:hidden;width:100%}.color-box__wrapper-withtransparent{width:calc(100% - 42px)}.color-box__info{align-items:center;display:flex}.color-box__picker{cursor:pointer;display:flex;align-items:center;justify-content:center;width:37px;height:37px;margin-right:4px}.color-box__picker:hover{background-color:#f6f6f6}.color-box__preview{border-right:1px solid #e5e5e5;height:36px;width:40%}.color-box__preview--transparent{background-color:#fff;background-image:linear-gradient(45deg,#ccc 25%,transparent 25%,transparent 75%,#ccc 75%,#ccc),linear-gradient(45deg,#ccc 25%,transparent 25%,transparent 75%,#ccc 75%,#ccc);background-size:8px 8px;background-position:0 0,4px 4px}.color-box__form-element{width:60%}.color-box__input{border:0;border-bottom:1px solid #e5e5e5;font-size:15px;font-style:normal;font-weight:400;height:36px;text-align:center;text-transform:uppercase;width:100%}.color-box__input:focus{outline:0}.color-box__input-trasparent{text-transform:none}.color-box__usecolors-title{font-size:13px;font-style:normal;font-weight:400;line-height:normal;margin:15px 0}.color-box__usecolors-title--modal{font-size:13px;font-style:normal;font-weight:400;line-height:normal;margin:0 0 15px}.color-box__usecolors-wrapper{display:inline-flex;flex-wrap:wrap;gap:4px}.color-box__usecolors-wrapper--stroke{max-height:106px;overflow:auto}.color-box__usecolors-color{border:1px solid rgba(0,0,0,.1);border-radius:3px;cursor:pointer;height:32px;width:32px;min-width:32px;min-height:32px}\n"] }]
592
+ args: [{ selector: 'lib-color-picker', imports: [CommonModule, ColorBoxComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"colorpicker\">\r\n <div class=\"colorpicker__design-wrapper\">\r\n <ng-container *ngTemplateOutlet=\"colorMapTemplate\"></ng-container>\r\n </div>\r\n\r\n <div class=\"colorpicker__info\">\r\n @if (hasEyeDropper()) {\r\n <div class=\"colorpicker__picker\" (click)=\"startEye.emit($event)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.4227 4.27425L19.7257 3.57734C18.9559 2.80755 17.7079 2.80755 16.9381 3.57734L12.7565 7.75881L12.0596 7.0619C11.6747 6.677 11.0507 6.677 10.6658 7.0619C10.2809 7.44679 10.2809 8.07083 10.6658 8.45572L11.3626 9.15255L4.39341 16.1217C4.5402 17.3687 4.0452 19.2573 3 20.3027L3.69654 21C4.74192 19.9546 6.63098 19.4596 7.87801 19.6062L14.8472 12.6371L15.5442 13.3341C15.9291 13.719 16.5532 13.719 16.9381 13.3341C17.323 12.9492 17.323 12.3252 16.9381 11.9403L16.2411 11.2434L20.4227 7.0619C21.1924 6.29211 21.1924 5.04404 20.4227 4.27425ZM12.0595 9.84946L14.1503 11.9402L7.49458 18.5958C6.82993 18.5871 6.10446 18.7017 5.41883 18.915C5.24707 18.9685 5.07418 19.0292 4.90213 19.0976C4.97048 18.9256 5.03126 18.7527 5.0847 18.5809C5.29805 17.8953 5.41264 17.1698 5.40386 16.5051L12.0595 9.84946Z\" fill=\"#3D3D3D\"/>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"colorpicker__wrapperline\">\r\n @if (hasTransparent()) {\r\n <div\r\n class=\"colorpicker__transparent\"\r\n (click)=\"selectColor(null)\"\r\n >\r\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 32 32\">\r\n <path fill=\"currentColor\" d=\"M8 25.333c0 1.467 1.2 2.667 2.667 2.667h10.667c1.467 0 2.667-1.2 2.667-2.667v-16h-16v16zM11.28 15.84l1.88-1.88 2.84 2.827 2.827-2.827 1.88 1.88-2.827 2.827 2.827 2.827-1.88 1.88-2.827-2.827-2.827 2.827-1.88-1.88 2.827-2.827-2.84-2.827zM20.667 5.333l-1.333-1.333h-6.667l-1.333 1.333h-4.667v2.667h18.667v-2.667z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div\r\n class=\"colorpicker__wrapper\"\r\n [class.colorpicker__wrapper--with-transparent]=\"hasTransparent()\"\r\n >\r\n @if (eyeColor() || currentColor(); as color) {\r\n <div\r\n class=\"colorpicker__preview\"\r\n [style.background]=\"color\"\r\n ></div>\r\n }\r\n @if (isTransparent) {\r\n <div\r\n class=\"colorpicker__preview colorpicker__preview--transparent\"\r\n ></div>\r\n }\r\n <div class=\"colorpicker__form-element\">\r\n <input\r\n type=\"text\"\r\n [value]=\"\r\n currentColor() ||\r\n (hasTransparent() ? '\u0411\u0435\u0437 \u0446\u0432\u0435\u0442\u0430' : colorDefault())\r\n \"\r\n class=\"colorpicker__input\"\r\n [class.colorpicker__input--transparent]=\"isTransparent\"\r\n [attr.readonly]=\"isTransparent || null\"\r\n (change)=\"changeInput($event)\"\r\n pattern=\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\"\r\n maxlength=\"7\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #colorMapTemplate>\r\n <color-box\r\n [inputColorPicker]=\"currentColor() || colorDefault()\"\r\n (changeColor)=\"changeColor($event)\"\r\n (selectColor)=\"selectColor($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </color-box>\r\n</ng-template>\r\n", styles: [":host{display:block;height:100%}.colorpicker{display:flex;flex-direction:column;height:100%;font-family:Open Sans}.colorpicker__design-wrapper{flex:1;min-height:0}.colorpicker__info{align-items:center;display:flex;flex-shrink:0;margin-top:10px}.colorpicker__picker{align-items:center;cursor:pointer;display:flex;justify-content:center;width:37px;height:37px;margin-right:4px}.colorpicker__picker:hover{background-color:#f6f6f6}.colorpicker__wrapperline{display:flex;flex:1;min-width:0;width:100%}.colorpicker__transparent{display:flex;justify-content:center;align-items:center;cursor:pointer;height:37px;margin-right:4px;width:37px}.colorpicker__transparent:hover{background-color:#f6f6f6}.colorpicker__wrapper{border:1px solid #eaeaea;border-radius:3px;display:flex;overflow:hidden;width:100%}.colorpicker__wrapper--with-transparent{width:calc(100% - 42px)}.colorpicker__preview{border-right:1px solid #e5e5e5;height:36px;width:40%}.colorpicker__preview--transparent{background-color:#fff;background-image:linear-gradient(45deg,#ccc 25%,transparent 25%,transparent 75%,#ccc 75%,#ccc),linear-gradient(45deg,#ccc 25%,transparent 25%,transparent 75%,#ccc 75%,#ccc);background-size:8px 8px;background-position:0 0,4px 4px}.colorpicker__form-element{width:60%}.colorpicker__input{border:0;border-bottom:1px solid #e5e5e5;font-size:15px;font-style:normal;font-weight:400;height:36px;text-align:center;text-transform:uppercase;width:100%}.colorpicker__input:focus{outline:0}.colorpicker__input--transparent{text-transform:none}.colorpicker__usecolors-title{font-size:13px;font-style:normal;font-weight:400;line-height:normal;margin:15px 0}.colorpicker__usecolors-title--modal{margin:0 0 15px}.colorpicker__usecolors-wrapper{display:inline-flex;flex-wrap:wrap;gap:4px}.colorpicker__usecolors-wrapper--stroke{max-height:106px;overflow:auto}.colorpicker__usecolors-color{border:1px solid rgba(0,0,0,.1);border-radius:3px;cursor:pointer;height:32px;width:32px;min-width:32px;min-height:32px}\n"] }]
599
593
  }], ctorParameters: () => [], propDecorators: { inColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "inColor", required: true }] }], eyeColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "eyeColor", required: false }] }], hasTransparent: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasTransparent", required: false }] }], hasEyeDropper: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasEyeDropper", required: false }] }], colorDefault: [{ type: i0.Input, args: [{ isSignal: true, alias: "colorDefault", required: false }] }], changeModel: [{ type: i0.Output, args: ["changeModel"] }], changeEnd: [{ type: i0.Output, args: ["changeEnd"] }], startEye: [{ type: i0.Output, args: ["startEye"] }] } });
600
594
 
601
595
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"severfam-angular-color-picker.mjs","sources":["../../../projects/color-picker/src/lib/services/color-box-convert.service.ts","../../../projects/color-picker/src/lib/utils/touch-events.utils.ts","../../../projects/color-picker/src/lib/utils/color-box.util.ts","../../../projects/color-picker/src/lib/services/color-box-canvas.service.ts","../../../projects/color-picker/src/lib/providers/window.providers.ts","../../../projects/color-picker/src/lib/components/color-box/color-box.component.ts","../../../projects/color-picker/src/lib/components/color-box/color-box.component.html","../../../projects/color-picker/src/lib/color-picker.component.ts","../../../projects/color-picker/src/lib/color-picker.component.html","../../../projects/color-picker/src/public-api.ts","../../../projects/color-picker/src/severfam-angular-color-picker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ColorBoxConvertService {\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param {number} h The hue\n * @param {number} s The saturation\n * @param {number} l The lightness\n * @return {Array} The RGB representation\n */\n\n public hslToRgb(h: number, s: number, l: number) {\n const k = (n: number) => (n + h / 30) % 12;\n const a = s * Math.min(l, 1 - l);\n const f = (n: number) =>\n l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));\n return [\n Math.round(255 * f(0)),\n Math.round(255 * f(8)),\n Math.round(255 * f(4)),\n ];\n }\n\n public hslToHex(h: number, s: number, l: number) {\n let r, g, b;\n\n if (isNaN(s)) {\n s = 0;\n }\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n const toHex = (x: number) => {\n const hex = Math.round(x * 255).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n }\n //H = #000fff\n public hexToHsl(H: string) {\n if (H === undefined) {\n H = '#000000';\n }\n let r: any;\n let g: any;\n let b: any;\n if (H.length === 4) {\n r = '0x' + H[1] + H[1];\n g = '0x' + H[2] + H[2];\n b = '0x' + H[3] + H[3];\n } else if (H.length === 7) {\n r = '0x' + H[1] + H[2];\n g = '0x' + H[3] + H[4];\n b = '0x' + H[5] + H[6];\n }\n // Then to HSL\n r /= 255;\n g /= 255;\n b /= 255;\n const cmin = Math.min(r, g, b);\n const cmax = Math.max(r, g, b);\n const delta = cmax - cmin;\n let h = 0;\n let s = 0;\n let l = 0;\n\n if (delta === 0) h = 0;\n else if (cmax === r) h = ((g - b) / delta) % 6;\n else if (cmax === g) h = (b - r) / delta + 2;\n else h = (r - g) / delta + 4;\n\n h = Math.round(h * 60);\n\n if (h < 0) h += 360;\n\n l = (cmax + cmin) / 2;\n s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));\n s = +(s * 100).toFixed(1);\n l = +(l * 100).toFixed(1);\n return { h, s, l };\n }\n\n private hexToRGB(hex = '') {\n const red = parseInt(hex.substring(1, 3), 16);\n const green = parseInt(hex.substring(3, 5), 16);\n const blue = parseInt(hex.substring(5, 7), 16);\n\n return [red, green, blue];\n }\n\n public hexToHsv(hex: string) {\n const rgb = this.hexToRGB(hex);\n const result = this.rgbToHsv(rgb);\n return result;\n }\n\n private rgbToHsv([r, g, b]: number[]) {\n (r /= 255), (g /= 255), (b /= 255);\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const v = max;\n\n const d = max - min;\n\n s = max == 0 ? 0 : d / max;\n\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h * 360, s, v];\n }\n}\n","export function isTouchEvent(event: Event): event is TouchEvent {\n try {\n return event instanceof TouchEvent;\n } catch (e) {\n return false;\n }\n}\n\nexport function isSingleTouchEvent(event: Event): boolean {\n return isTouchEvent(event) && event.touches.length === 1;\n}\n\nexport function isDoubleTouchEvent(event: Event): boolean {\n return isTouchEvent(event) && event.touches.length === 2;\n}\n\nexport function getDistanceBetweenTouches(event: Event): number {\n if (!isDoubleTouchEvent(event)) {\n return 0;\n }\n\n const { touches } = event as TouchEvent;\n\n return Math.hypot(\n touches[0].clientX - touches[1].clientX,\n touches[0].clientY - touches[1].clientY\n );\n}\n","import { isTouchEvent } from './touch-events.utils';\n\nexport function getEventRectCoords(\n e: Event,\n { height, width, left, top }: DOMRect\n): { x: number; y: number } {\n let x = 0;\n let y = 0;\n\n if (e instanceof MouseEvent) {\n x = e.pageX - left;\n y = e.pageY - top;\n }\n\n if (isTouchEvent(e)) {\n x = e.changedTouches[0].pageX - left;\n y = e.changedTouches[0].pageY - top;\n }\n\n if (x > width) {\n x = width;\n }\n\n if (x < 0) {\n x = 0;\n }\n\n if (y > height) {\n y = height;\n }\n\n if (y < 0) {\n y = 0.1;\n }\n\n return { x, y };\n}\n\nexport function getValueStyle(\n element: Element,\n parameter: 'width' | 'height' | 'left' | 'top'\n): number {\n const computedStyle = getComputedStyle(element);\n let value;\n if (parameter === 'width') {\n value = (computedStyle.getPropertyValue(parameter) || '0px').match(/\\d+/);\n }\n\n if (parameter === 'height') {\n value = (computedStyle.getPropertyValue(parameter) || '0px').match(/\\d+/);\n }\n\n if (parameter === 'left') {\n value = (computedStyle.getPropertyValue(parameter) || '0px').match(/\\d+/);\n }\n\n if (parameter === 'top') {\n value = (computedStyle.getPropertyValue(parameter) || '0px').match(/\\d+/);\n }\n\n const val = value || [];\n let result = 0;\n if (val[0]) {\n result = +val[0];\n }\n\n return result || 0;\n}\n\nexport function isStartEvent(e: Event) {\n return e.type === 'mousedown' || e.type === 'touchstart';\n}\n\nexport function isMoveEvent(e: Event) {\n return e.type === 'mousemove' || e.type === 'touchmove';\n}\n\nexport function isEndEvent(e: Event) {\n return (\n e.type === 'mouseup' || e.type === 'touchend' || e.type === 'touchcancel'\n );\n}\n","import { Injectable } from '@angular/core';\nimport { getValueStyle } from '../utils/color-box.util';\n\n@Injectable()\nexport class ColorBoxCanvasService {\n private _spectrumCanvas?: HTMLCanvasElement;\n private _hueCanvas?: HTMLCanvasElement;\n\n get spectrumRect(): DOMRect {\n return this._spectrumCanvas?.getBoundingClientRect() ?? new DOMRect();\n }\n\n get hueRect(): DOMRect {\n return this._hueCanvas?.getBoundingClientRect() ?? new DOMRect();\n }\n\n _widthSpectrum: number | null = null;\n get widthSpectrum(): number | null {\n return this._widthSpectrum;\n }\n set widthSpectrum(value: number | null) {\n this._widthSpectrum = value;\n }\n\n _heigthSpectrum: number | null = null;\n get heigthSpectrum(): number | null {\n return this._heigthSpectrum;\n }\n set heigthSpectrum(value: number | null) {\n this._heigthSpectrum = value;\n }\n\n public init(spectrumCanvas: HTMLCanvasElement, hueCanvas: HTMLCanvasElement) {\n this._spectrumCanvas = spectrumCanvas;\n this._hueCanvas = hueCanvas;\n\n const spectrumWidth = getValueStyle(this._spectrumCanvas, 'width');\n const spectrumHeight = getValueStyle(this._spectrumCanvas, 'height');\n const hueWidth = getValueStyle(this._hueCanvas, 'width');\n const hueHeight = getValueStyle(this._hueCanvas, 'height');\n\n this._spectrumCanvas.width = spectrumWidth;\n this._spectrumCanvas.height = spectrumHeight;\n this._hueCanvas.width = hueWidth;\n this._hueCanvas.height = hueHeight;\n\n this._widthSpectrum = spectrumWidth;\n this._heigthSpectrum = spectrumHeight;\n\n this.createRectangleSpectrum('red', this._spectrumCanvas);\n this.createHueSpectrum(this._hueCanvas);\n }\n\n public createRectangleSpectrum(\n color: string,\n canvas?: HTMLCanvasElement\n ): void {\n const context = canvas?.getContext('2d');\n\n if (!canvas || !context) {\n return;\n }\n\n context.clearRect(0, 0, canvas.width, canvas.height);\n\n context.fillStyle = color;\n context.fillRect(0, 0, canvas.width, canvas.height);\n\n const whiteGradient = context.createLinearGradient(0, 0, canvas.width, 0);\n whiteGradient.addColorStop(0, '#fff');\n whiteGradient.addColorStop(1, 'transparent');\n context.fillStyle = whiteGradient;\n context.fillRect(0, 0, canvas.width, canvas.height);\n\n const blackGradient = context.createLinearGradient(0, 0, 0, canvas.height);\n blackGradient.addColorStop(0, 'transparent');\n blackGradient.addColorStop(1, '#000');\n context.fillStyle = blackGradient;\n context.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n public createHueSpectrum(canvas?: HTMLCanvasElement): void {\n const context = canvas?.getContext('2d');\n\n if (!canvas || !context) {\n return;\n }\n\n const hueGradient = context.createLinearGradient(0, 0, canvas.width, 0);\n hueGradient.addColorStop(0.0, 'hsl(360, 100%, 50%)');\n hueGradient.addColorStop(0.17, 'hsl(61.2, 100%, 50%)');\n hueGradient.addColorStop(0.33, 'hsl(118.8, 100%, 50%)');\n hueGradient.addColorStop(0.5, 'hsl(180, 100%, 50%)');\n hueGradient.addColorStop(0.67, 'hsl(241.2, 100%, 50%)');\n hueGradient.addColorStop(0.83, 'hsl(298.8, 100%, 50%)');\n hueGradient.addColorStop(1.0, 'hsl(0, 100%, 50%)');\n context.fillStyle = hueGradient;\n context.fillRect(0, 0, canvas.width, canvas.height);\n }\n}\n","import { FactoryProvider, InjectionToken, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n\r\nexport const WINDOW = new InjectionToken<Window>('window');\r\n\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nconst windowProvider: FactoryProvider = {\r\n provide: WINDOW,\r\n useFactory: (platformId: any) => {\r\n if (isPlatformBrowser(platformId)) {\r\n return window;\r\n }\r\n return {};\r\n },\r\n deps: [PLATFORM_ID],\r\n};\r\n\r\nexport const WINDOW_PROVIDERS = [windowProvider];\r\n","import { ColorBoxConvertService } from '../../services/color-box-convert.service';\nimport { ColorBoxCanvasService } from '../../services/color-box-canvas.service';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n output,\n ViewChild,\n} from '@angular/core';\nimport { debounceTime, fromEvent, Subscription } from 'rxjs';\nimport {\n getEventRectCoords,\n getValueStyle,\n isEndEvent,\n isMoveEvent,\n isStartEvent,\n} from '../../utils/color-box.util';\nimport { WINDOW, WINDOW_PROVIDERS } from '../../providers/window.providers';\nimport { isTouchEvent } from '../../utils/touch-events.utils';\n\n\n@Component({\n selector: 'color-box',\n templateUrl: './color-box.component.html',\n styleUrls: ['./color-box.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [...WINDOW_PROVIDERS, ColorBoxCanvasService],\n standalone: true,\n})\nexport class ColorBoxComponent {\n private readonly convertService = inject(ColorBoxConvertService);\n private readonly canvasService = inject(ColorBoxCanvasService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n private readonly window = inject(WINDOW);\n private readonly document = inject(DOCUMENT);\n\n inputColorPicker = input('#fff');\n\n changeColor = output<string>();\n selectColor = output<string>();\n\n @ViewChild('spectrumCursor', { static: false, read: ElementRef })\n spectrumCursor?: ElementRef;\n @ViewChild('spectrumCanvas', { static: false, read: ElementRef })\n spectrumCanvas?: ElementRef;\n @ViewChild('hueCursor', { static: false, read: ElementRef })\n hueCursor?: ElementRef;\n @ViewChild('hueCanvas', { static: false, read: ElementRef })\n hueCanvas?: ElementRef;\n\n currentColor = '';\n changeHex = '';\n\n hue = 0;\n saturation = 1;\n lightness = 0.5;\n\n red: unknown;\n green: unknown;\n blue: unknown;\n hex!: string;\n\n private _subs: Subscription[] = [];\n set subs(sub: Subscription) {\n this._subs.push(sub);\n }\n\n constructor() {\n afterNextRender(() => {\n this.init();\n });\n\n effect(() => {\n const color = this.inputColorPicker();\n if (color && color !== this.changeHex) {\n this.changeHex = color;\n const hsl = this.convertService.hexToHsl(this.changeHex);\n this.hue = hsl.h;\n this.colorToPosition(color);\n }\n });\n }\n\n private init(): void {\n const spectrumCanvasElement = this.spectrumCanvas?.nativeElement;\n const hueCanvasElement = this.hueCanvas?.nativeElement;\n\n this.canvasService.init(spectrumCanvasElement, hueCanvasElement);\n\n this.createRectangleSpectrumListeners(spectrumCanvasElement);\n this.createHueSpectrumListeners(hueCanvasElement);\n this.colorToPosition(this.inputColorPicker());\n\n this.subs = fromEvent(this.window, 'resize')\n .pipe(debounceTime(300))\n .subscribe(() => {\n this.refreshColorPickerBox();\n this.cdr.detectChanges();\n });\n }\n\n ngOnDestroy() {\n this._subs.forEach((s) => s.unsubscribe());\n }\n\n private refreshColorPickerBox(): void {\n const hsl = this.convertService.hexToHsl(this.changeHex);\n this.hue = hsl.h;\n this.canvasService.createRectangleSpectrum(\n this.getHueColor(this.hue),\n this.spectrumCanvas?.nativeElement,\n );\n this.refreshPositionCursors();\n }\n\n private refreshPositionCursors() {\n const spectrumCanvasElement = this.spectrumCanvas?.nativeElement;\n const curWidth = getValueStyle(spectrumCanvasElement, 'width');\n const curHeight = getValueStyle(spectrumCanvasElement, 'height');\n const initWidth = this.canvasService.widthSpectrum;\n const initHeight = this.canvasService.heigthSpectrum;\n\n if (curWidth !== initWidth || curHeight !== initHeight) {\n this.colorToPosition(this.changeHex);\n this.canvasService.widthSpectrum = curWidth;\n this.canvasService.heigthSpectrum = curHeight;\n }\n }\n\n private createRectangleSpectrumListeners(canvas: HTMLCanvasElement) {\n const getSpectrumColor = (e: MouseEvent | TouchEvent) => {\n e.preventDefault();\n\n const spectrumRect = this.canvasService.spectrumRect;\n const { x, y } = getEventRectCoords(e, spectrumRect);\n const xRatio = (x / spectrumRect.width) * 100;\n const yRatio = (y / spectrumRect.height) * 100;\n const hsvValue = 1 - yRatio / 100;\n const hsvSaturation = xRatio / 100;\n\n this.lightness = (hsvValue / 2) * (2 - hsvSaturation);\n\n const saturationDevider = 1 - Math.abs(2 * this.lightness - 1);\n this.saturation =\n saturationDevider === 0 ? 0 : (hsvValue * hsvSaturation) / saturationDevider;\n\n const color = `hsl ${this.hue} ${this.saturation} ${this.lightness}`;\n\n this.updateSpectrumCursor(x, y);\n this.setColorValues(color);\n\n if (isStartEvent(e)) {\n this.changeColorEmit(this.hex);\n }\n\n if (isMoveEvent(e)) {\n this.changeColorEmit(this.hex);\n }\n\n if (isEndEvent(e)) {\n this.changeColorEmit(this.hex);\n this.selectColor.emit(this.hex);\n }\n };\n\n canvas.addEventListener('mousedown', (e: MouseEvent) => {\n this.eventHandler(e, getSpectrumColor);\n });\n\n canvas.addEventListener('touchstart', (e: TouchEvent) => {\n this.eventHandler(e, getSpectrumColor);\n });\n }\n\n private createHueSpectrumListeners(canvas: HTMLCanvasElement) {\n const getHueColor = (e: MouseEvent | TouchEvent) => {\n e.preventDefault();\n\n const hueRect = this.canvasService.hueRect;\n const { x } = getEventRectCoords(e, hueRect);\n\n const percent = x / hueRect.width;\n this.hue = 360 * percent;\n\n const hueColor = `hsl(${this.hue} 100% 50%)`;\n const color = `hsl(\n ${this.hue}\n ${this.saturation * 100}%\n ${this.lightness * 100}%\n )`;\n\n this.canvasService.createRectangleSpectrum(hueColor, this.spectrumCanvas?.nativeElement);\n\n this.updateHueCursor(x);\n this.setColorValues(color);\n\n if (isStartEvent(e)) {\n this.changeColorEmit(this.hex);\n }\n\n if (isMoveEvent(e)) {\n this.changeColorEmit(this.hex);\n }\n\n if (isEndEvent(e)) {\n this.changeColorEmit(this.hex);\n this.selectColor.emit(this.hex);\n }\n };\n\n canvas.addEventListener('mousedown', (e: MouseEvent | TouchEvent) => {\n this.eventHandler(e, getHueColor);\n });\n\n canvas.addEventListener('touchstart', (e: TouchEvent) => {\n this.eventHandler(e, getHueColor);\n });\n }\n\n changeColorEmit(hex: string) {\n this.changeHex = hex;\n this.changeColor.emit(this.hex);\n }\n\n private setColorValues(color: string) {\n this.currentColor = color;\n\n const [red, green, blue] = this.convertService.hslToRgb(\n this.hue,\n this.saturation,\n this.lightness,\n );\n\n this.red = red;\n this.green = green;\n this.blue = blue;\n this.hex = this.convertService.hslToHex(this.hue / 360, this.saturation, this.lightness);\n }\n\n private updateSpectrumCursor(x: number, y: number): void {\n if (this.spectrumCursor) {\n this.spectrumCursor.nativeElement.style.left = x + 'px';\n this.spectrumCursor.nativeElement.style.top = y + 'px';\n }\n }\n\n private updateHueCursor(x: number): void {\n if (this.hueCursor) {\n this.hueCursor.nativeElement.style.left = x + 'px';\n }\n }\n\n private colorToPosition(hexColor: string) {\n const spectrumRect = this.canvasService.spectrumRect;\n const hueRect = this.canvasService.hueRect;\n\n const hsl = this.convertService.hexToHsl(hexColor);\n this.hue = hsl.h;\n\n const [, hsvs, hsvv] = this.convertService.hexToHsv(hexColor);\n const x = spectrumRect.width * hsvs;\n const y = spectrumRect.height * (1 - hsvv);\n const hueX = (this.hue / 360) * hueRect.width;\n\n this.updateSpectrumCursor(x, y);\n this.updateHueCursor(hueX);\n\n this.canvasService.createRectangleSpectrum(\n this.getHueColor(this.hue),\n this.spectrumCanvas?.nativeElement,\n );\n }\n\n private getHueColor(h: number): string {\n return `hsl(${h} 100% 50%)`;\n }\n\n private eventHandler(\n e: MouseEvent | TouchEvent,\n handler: (event: MouseEvent | TouchEvent) => void,\n ) {\n handler(e);\n\n if (!this.window || !this.document) {\n return;\n }\n\n if (e instanceof MouseEvent) {\n this.document.addEventListener('mousemove', handler);\n\n const mouseUpEvent = (e: MouseEvent) => {\n handler(e);\n this.document.removeEventListener('mousemove', handler);\n this.document.removeEventListener('mouseup', mouseUpEvent);\n };\n this.document.addEventListener('mouseup', mouseUpEvent);\n }\n\n if (isTouchEvent(e)) {\n this.document.addEventListener('touchmove', handler);\n\n const touchUpEvent = (e: TouchEvent) => {\n handler(e);\n this.document.removeEventListener('touchmove', handler);\n this.document.removeEventListener('touchend', touchUpEvent);\n this.document.removeEventListener('touchcancel', touchUpEvent);\n };\n this.document.addEventListener('touchend', touchUpEvent);\n this.document.addEventListener('touchcancel', touchUpEvent);\n }\n }\n}\n","<div class=\"panel\">\n <div class=\"spectrum-map\">\n <button\n id=\"spectrum-cursor\"\n class=\"color-spectrum-cursor\"\n #spectrumCursor\n ></button>\n <canvas id=\"spectrum-canvas\" #spectrumCanvas></canvas>\n </div>\n <div class=\"hue-map-wrapper\">\n <div class=\"hue-map\">\n <button id=\"hue-cursor\" class=\"color-hue-cursor\" #hueCursor></button>\n <canvas id=\"hue-canvas\" #hueCanvas></canvas>\n </div>\n <div class=\"content-fill-opacity\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ColorBoxComponent } from './components/color-box/color-box.component';\n\n@Component({\n selector: 'lib-color-picker',\n imports: [CommonModule, ColorBoxComponent],\n templateUrl: './color-picker.component.html',\n styleUrls: ['./color-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorPicker {\n inColor = input.required<string | null>();\n eyeColor = input<string | null>(null);\n hasTransparent = input(true);\n hasEyeDropper = input(false);\n colorDefault = input('#000000');\n\n changeModel = output<string | null>();\n changeEnd = output();\n startEye = output<Event>();\n\n currentColor = signal<string | null>(null);\n\n constructor() {\n effect(() => {\n this.currentColor.set(this.inColor());\n });\n }\n\n get defaultColor(): string | null {\n return this.hasTransparent() ? null : this.colorDefault();\n }\n\n get isTransparent(): boolean {\n return !this.currentColor() && this.hasTransparent();\n }\n\n changeInput(event: Event) {\n const color = (event.target as HTMLInputElement).value;\n this.selectColor(color);\n }\n\n changeColor(color: string) {\n this.currentColor.set(color);\n this.changeModel.emit(color);\n }\n\n selectColor(color: string | null) {\n this.currentColor.set(color || this.defaultColor);\n this.changeModel.emit(color);\n this.changeEnd.emit();\n }\n}\n","<div class=\"color-box\">\r\n <div class=\"design-color-box-wrapper\">\r\n <ng-container *ngTemplateOutlet=\"colorMapTemplate\"></ng-container>\r\n </div>\r\n\r\n <div class=\"color-box__info\">\r\n @if (hasEyeDropper()) {\r\n <div class=\"color-box__picker\" (click)=\"startEye.emit($event)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.4227 4.27425L19.7257 3.57734C18.9559 2.80755 17.7079 2.80755 16.9381 3.57734L12.7565 7.75881L12.0596 7.0619C11.6747 6.677 11.0507 6.677 10.6658 7.0619C10.2809 7.44679 10.2809 8.07083 10.6658 8.45572L11.3626 9.15255L4.39341 16.1217C4.5402 17.3687 4.0452 19.2573 3 20.3027L3.69654 21C4.74192 19.9546 6.63098 19.4596 7.87801 19.6062L14.8472 12.6371L15.5442 13.3341C15.9291 13.719 16.5532 13.719 16.9381 13.3341C17.323 12.9492 17.323 12.3252 16.9381 11.9403L16.2411 11.2434L20.4227 7.0619C21.1924 6.29211 21.1924 5.04404 20.4227 4.27425ZM12.0595 9.84946L14.1503 11.9402L7.49458 18.5958C6.82993 18.5871 6.10446 18.7017 5.41883 18.915C5.24707 18.9685 5.07418 19.0292 4.90213 19.0976C4.97048 18.9256 5.03126 18.7527 5.0847 18.5809C5.29805 17.8953 5.41264 17.1698 5.40386 16.5051L12.0595 9.84946Z\" fill=\"#3D3D3D\"/>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"color-box__wrapperline\">\r\n @if (hasTransparent()) {\r\n <div\r\n class=\"color-box__transparent\"\r\n (click)=\"selectColor(null)\"\r\n >\r\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 32 32\">\r\n <path fill=\"currentColor\" d=\"M8 25.333c0 1.467 1.2 2.667 2.667 2.667h10.667c1.467 0 2.667-1.2 2.667-2.667v-16h-16v16zM11.28 15.84l1.88-1.88 2.84 2.827 2.827-2.827 1.88 1.88-2.827 2.827 2.827 2.827-1.88 1.88-2.827-2.827-2.827 2.827-1.88-1.88 2.827-2.827-2.84-2.827zM20.667 5.333l-1.333-1.333h-6.667l-1.333 1.333h-4.667v2.667h18.667v-2.667z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div\r\n class=\"color-box__wrapper\"\r\n [class.color-box__wrapper-withtransparent]=\"hasTransparent()\"\r\n >\r\n @if (eyeColor() || currentColor(); as color) {\r\n <div\r\n class=\"color-box__preview\"\r\n [style.background]=\"color\"\r\n ></div>\r\n }\r\n @if (isTransparent) {\r\n <div\r\n class=\"color-box__preview color-box__preview--transparent\"\r\n ></div>\r\n }\r\n <div class=\"color-box__form-element\">\r\n <input\r\n type=\"text\"\r\n [value]=\"\r\n currentColor() ||\r\n (hasTransparent() ? 'Без цвета' : colorDefault())\r\n \"\r\n class=\"color-box__input\"\r\n [class.color-box__input-trasparent]=\"isTransparent\"\r\n [attr.readonly]=\"isTransparent || null\"\r\n (change)=\"changeInput($event)\"\r\n pattern=\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\"\r\n maxlength=\"7\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #colorMapTemplate>\r\n <color-box\r\n [inputColorPicker]=\"currentColor() || colorDefault()\"\r\n (changeColor)=\"changeColor($event)\"\r\n (selectColor)=\"selectColor($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </color-box>\r\n</ng-template>\r\n\r\n","/*\n * Public API Surface of color-picker\n */\n\nexport * from './lib/color-picker.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"severfam-angular-color-picker.mjs","sources":["../../../projects/color-picker/src/lib/services/color-box-convert.service.ts","../../../projects/color-picker/src/lib/utils/touch-events.utils.ts","../../../projects/color-picker/src/lib/utils/color-box.util.ts","../../../projects/color-picker/src/lib/services/color-box-canvas.service.ts","../../../projects/color-picker/src/lib/providers/window.providers.ts","../../../projects/color-picker/src/lib/components/color-box/color-box.component.ts","../../../projects/color-picker/src/lib/components/color-box/color-box.component.html","../../../projects/color-picker/src/lib/color-picker.component.ts","../../../projects/color-picker/src/lib/color-picker.component.html","../../../projects/color-picker/src/public-api.ts","../../../projects/color-picker/src/severfam-angular-color-picker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ColorBoxConvertService {\r\n /**\r\n * Converts an HSL color value to RGB.\r\n * h in [0, 360], s in [0, 1], l in [0, 1].\r\n * Returns [r, g, b] in [0, 255].\r\n */\r\n public hslToRgb(h: number, s: number, l: number): [number, number, number] {\r\n h = ((h % 360) + 360) % 360;\r\n s = Math.max(0, Math.min(1, s));\r\n l = Math.max(0, Math.min(1, l));\r\n\r\n const k = (n: number) => (n + h / 30) % 12;\r\n const a = s * Math.min(l, 1 - l);\r\n const f = (n: number) =>\r\n l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));\r\n return [\r\n Math.round(255 * f(0)),\r\n Math.round(255 * f(8)),\r\n Math.round(255 * f(4)),\r\n ];\r\n }\r\n\r\n /**\r\n * Converts HSL to hex string.\r\n * h in [0, 1], s in [0, 1], l in [0, 1].\r\n */\r\n public hslToHex(h: number, s: number, l: number): string {\r\n h = Math.max(0, Math.min(1, h));\r\n s = Math.max(0, Math.min(1, s));\r\n l = Math.max(0, Math.min(1, l));\r\n\r\n let r: number;\r\n let g: number;\r\n let b: number;\r\n\r\n if (s === 0) {\r\n r = g = b = l;\r\n } else {\r\n const hue2rgb = (p: number, q: number, t: number) => {\r\n if (t < 0) t += 1;\r\n if (t > 1) t -= 1;\r\n if (t < 1 / 6) return p + (q - p) * 6 * t;\r\n if (t < 1 / 2) return q;\r\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\r\n return p;\r\n };\r\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n const p = 2 * l - q;\r\n r = hue2rgb(p, q, h + 1 / 3);\r\n g = hue2rgb(p, q, h);\r\n b = hue2rgb(p, q, h - 1 / 3);\r\n }\r\n\r\n const toHex = (x: number) => {\r\n const hex = Math.round(x * 255).toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n };\r\n\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n }\r\n\r\n /**\r\n * Converts hex string to HSL.\r\n * Returns { h: [0,360], s: [0,100], l: [0,100] }.\r\n */\r\n public hexToHsl(H: string): { h: number; s: number; l: number } {\r\n if (!H || typeof H !== 'string') {\r\n return { h: 0, s: 0, l: 0 };\r\n }\r\n\r\n const hex = H.startsWith('#') ? H : `#${H}`;\r\n\r\n let r: number;\r\n let g: number;\r\n let b: number;\r\n\r\n if (hex.length === 4) {\r\n r = parseInt(hex[1] + hex[1], 16);\r\n g = parseInt(hex[2] + hex[2], 16);\r\n b = parseInt(hex[3] + hex[3], 16);\r\n } else if (hex.length === 7) {\r\n r = parseInt(hex.substring(1, 3), 16);\r\n g = parseInt(hex.substring(3, 5), 16);\r\n b = parseInt(hex.substring(5, 7), 16);\r\n } else {\r\n return { h: 0, s: 0, l: 0 };\r\n }\r\n\r\n if (isNaN(r!) || isNaN(g!) || isNaN(b!)) {\r\n return { h: 0, s: 0, l: 0 };\r\n }\r\n\r\n r = r! / 255;\r\n g = g! / 255;\r\n b = b! / 255;\r\n\r\n const cmin = Math.min(r, g, b);\r\n const cmax = Math.max(r, g, b);\r\n const delta = cmax - cmin;\r\n\r\n let h = 0;\r\n let s = 0;\r\n let l = 0;\r\n\r\n l = (cmax + cmin) / 2;\r\n\r\n if (delta === 0) {\r\n h = 0;\r\n s = 0;\r\n } else {\r\n s = l > 0.5 ? delta / (2 - cmax - cmin) : delta / (cmax + cmin);\r\n\r\n if (cmax === r) h = ((g - b) / delta) % 6;\r\n else if (cmax === g) h = (b - r) / delta + 2;\r\n else h = (r - g) / delta + 4;\r\n\r\n h = Math.round(h * 60);\r\n if (h < 0) h += 360;\r\n }\r\n\r\n s = Math.round(s * 100);\r\n l = Math.round(l * 100);\r\n\r\n return { h, s, l };\r\n }\r\n\r\n /**\r\n * Converts hex string to HSV.\r\n * Returns [h: [0,360], s: [0,1], v: [0,1]].\r\n */\r\n public hexToHsv(hex: string): [number, number, number] {\r\n const rgb = this.hexToRGB(hex);\r\n return this.rgbToHsv(rgb);\r\n }\r\n\r\n private hexToRGB(hex: string): [number, number, number] {\r\n if (!hex || typeof hex !== 'string') {\r\n return [0, 0, 0];\r\n }\r\n\r\n const h = hex.startsWith('#') ? hex : `#${hex}`;\r\n\r\n if (h.length !== 7) {\r\n return [0, 0, 0];\r\n }\r\n\r\n const r = parseInt(h.substring(1, 3), 16);\r\n const g = parseInt(h.substring(3, 5), 16);\r\n const b = parseInt(h.substring(5, 7), 16);\r\n\r\n if (isNaN(r) || isNaN(g) || isNaN(b)) {\r\n return [0, 0, 0];\r\n }\r\n\r\n return [r, g, b];\r\n }\r\n\r\n private rgbToHsv([r, g, b]: number[]): [number, number, number] {\r\n r /= 255;\r\n g /= 255;\r\n b /= 255;\r\n\r\n const max = Math.max(r, g, b);\r\n const min = Math.min(r, g, b);\r\n const d = max - min;\r\n\r\n let h = 0;\r\n const s = max === 0 ? 0 : d / max;\r\n const v = max;\r\n\r\n if (d !== 0) {\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n\r\n return [h * 360, s, v];\r\n }\r\n}\r\n","export function isTouchEvent(event: Event): event is TouchEvent {\r\n try {\r\n return event instanceof TouchEvent;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n","import { isTouchEvent } from './touch-events.utils';\r\n\r\nexport function getEventRectCoords(\r\n e: Event,\r\n { height, width, left, top }: DOMRect\r\n): { x: number; y: number } {\r\n let x = 0;\r\n let y = 0;\r\n\r\n if (e instanceof MouseEvent) {\r\n x = e.pageX - left;\r\n y = e.pageY - top;\r\n }\r\n\r\n if (isTouchEvent(e) && e.changedTouches.length > 0) {\r\n x = e.changedTouches[0].pageX - left;\r\n y = e.changedTouches[0].pageY - top;\r\n }\r\n\r\n x = Math.max(0, Math.min(width, x));\r\n y = Math.max(0, Math.min(height, y));\r\n\r\n return { x, y };\r\n}\r\n\r\nexport function getValueStyle(\r\n element: Element,\r\n parameter: 'width' | 'height' | 'left' | 'top'\r\n): number {\r\n const computedStyle = getComputedStyle(element);\r\n const raw = computedStyle.getPropertyValue(parameter) || '0px';\r\n const match = raw.match(/\\d+/);\r\n return match && match[0] ? +match[0] : 0;\r\n}\r\n\r\nexport function isStartEvent(e: Event): boolean {\r\n return e.type === 'mousedown' || e.type === 'touchstart';\r\n}\r\n\r\nexport function isMoveEvent(e: Event): boolean {\r\n return e.type === 'mousemove' || e.type === 'touchmove';\r\n}\r\n\r\nexport function isEndEvent(e: Event): boolean {\r\n return (\r\n e.type === 'mouseup' || e.type === 'touchend' || e.type === 'touchcancel'\r\n );\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { getValueStyle } from '../utils/color-box.util';\r\n\r\n@Injectable()\r\nexport class ColorBoxCanvasService {\r\n private _spectrumCanvas?: HTMLCanvasElement;\r\n private _hueCanvas?: HTMLCanvasElement;\r\n\r\n get spectrumRect(): DOMRect {\r\n return this._spectrumCanvas?.getBoundingClientRect() ?? new DOMRect();\r\n }\r\n\r\n get hueRect(): DOMRect {\r\n return this._hueCanvas?.getBoundingClientRect() ?? new DOMRect();\r\n }\r\n\r\n private _widthSpectrum: number | null = null;\r\n get widthSpectrum(): number | null {\r\n return this._widthSpectrum;\r\n }\r\n set widthSpectrum(value: number | null) {\r\n this._widthSpectrum = value;\r\n }\r\n\r\n private _heightSpectrum: number | null = null;\r\n get heightSpectrum(): number | null {\r\n return this._heightSpectrum;\r\n }\r\n set heightSpectrum(value: number | null) {\r\n this._heightSpectrum = value;\r\n }\r\n\r\n public init(spectrumCanvas: HTMLCanvasElement, hueCanvas: HTMLCanvasElement): void {\r\n this._spectrumCanvas = spectrumCanvas;\r\n this._hueCanvas = hueCanvas;\r\n\r\n const spectrumWidth = getValueStyle(this._spectrumCanvas, 'width');\r\n const spectrumHeight = getValueStyle(this._spectrumCanvas, 'height');\r\n const hueWidth = getValueStyle(this._hueCanvas, 'width');\r\n const hueHeight = getValueStyle(this._hueCanvas, 'height');\r\n\r\n this._spectrumCanvas.width = spectrumWidth;\r\n this._spectrumCanvas.height = spectrumHeight;\r\n this._hueCanvas.width = hueWidth;\r\n this._hueCanvas.height = hueHeight;\r\n\r\n this._widthSpectrum = spectrumWidth;\r\n this._heightSpectrum = spectrumHeight;\r\n\r\n this.createRectangleSpectrum('hsl(0 100% 50%)', this._spectrumCanvas);\r\n this.createHueSpectrum(this._hueCanvas);\r\n }\r\n\r\n public createRectangleSpectrum(\r\n color: string,\r\n canvas?: HTMLCanvasElement\r\n ): void {\r\n const context = canvas?.getContext('2d');\r\n\r\n if (!canvas || !context) {\r\n return;\r\n }\r\n\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n context.fillStyle = color;\r\n context.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n const whiteGradient = context.createLinearGradient(0, 0, canvas.width, 0);\r\n whiteGradient.addColorStop(0, '#fff');\r\n whiteGradient.addColorStop(1, 'transparent');\r\n context.fillStyle = whiteGradient;\r\n context.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n const blackGradient = context.createLinearGradient(0, 0, 0, canvas.height);\r\n blackGradient.addColorStop(0, 'transparent');\r\n blackGradient.addColorStop(1, '#000');\r\n context.fillStyle = blackGradient;\r\n context.fillRect(0, 0, canvas.width, canvas.height);\r\n }\r\n\r\n public createHueSpectrum(canvas?: HTMLCanvasElement): void {\r\n const context = canvas?.getContext('2d');\r\n\r\n if (!canvas || !context) {\r\n return;\r\n }\r\n\r\n const hueGradient = context.createLinearGradient(0, 0, canvas.width, 0);\r\n hueGradient.addColorStop(0.0, 'hsl(360, 100%, 50%)');\r\n hueGradient.addColorStop(0.17, 'hsl(61.2, 100%, 50%)');\r\n hueGradient.addColorStop(0.33, 'hsl(118.8, 100%, 50%)');\r\n hueGradient.addColorStop(0.5, 'hsl(180, 100%, 50%)');\r\n hueGradient.addColorStop(0.67, 'hsl(241.2, 100%, 50%)');\r\n hueGradient.addColorStop(0.83, 'hsl(298.8, 100%, 50%)');\r\n hueGradient.addColorStop(1.0, 'hsl(0, 100%, 50%)');\r\n context.fillStyle = hueGradient;\r\n context.fillRect(0, 0, canvas.width, canvas.height);\r\n }\r\n}\r\n","import { FactoryProvider, InjectionToken, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n\r\nexport const WINDOW = new InjectionToken<Window>('window');\r\n\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nconst windowProvider: FactoryProvider = {\r\n provide: WINDOW,\r\n useFactory: (platformId: any) => {\r\n if (isPlatformBrowser(platformId)) {\r\n return window;\r\n }\r\n return {};\r\n },\r\n deps: [PLATFORM_ID],\r\n};\r\n\r\nexport const WINDOW_PROVIDERS = [windowProvider];\r\n","import { ColorBoxConvertService } from '../../services/color-box-convert.service';\r\nimport { ColorBoxCanvasService } from '../../services/color-box-canvas.service';\r\nimport {\r\n afterNextRender,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef,\r\n DOCUMENT,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { debounceTime, fromEvent } from 'rxjs';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport {\r\n getEventRectCoords,\r\n getValueStyle,\r\n isEndEvent,\r\n isMoveEvent,\r\n isStartEvent,\r\n} from '../../utils/color-box.util';\r\nimport { WINDOW, WINDOW_PROVIDERS } from '../../providers/window.providers';\r\nimport { isTouchEvent } from '../../utils/touch-events.utils';\r\n\r\n@Component({\r\n selector: 'color-box',\r\n templateUrl: './color-box.component.html',\r\n styleUrls: ['./color-box.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [...WINDOW_PROVIDERS, ColorBoxCanvasService],\r\n standalone: true,\r\n})\r\nexport class ColorBoxComponent {\r\n private readonly convertService = inject(ColorBoxConvertService);\r\n private readonly canvasService = inject(ColorBoxCanvasService);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n private readonly window = inject(WINDOW);\r\n private readonly document = inject(DOCUMENT);\r\n\r\n inputColorPicker = input('#fff');\r\n\r\n changeColor = output<string>();\r\n selectColor = output<string>();\r\n\r\n @ViewChild('spectrumCursor', { static: false, read: ElementRef })\r\n spectrumCursor?: ElementRef;\r\n @ViewChild('spectrumCanvas', { static: false, read: ElementRef })\r\n spectrumCanvas?: ElementRef;\r\n @ViewChild('hueCursor', { static: false, read: ElementRef })\r\n hueCursor?: ElementRef;\r\n @ViewChild('hueCanvas', { static: false, read: ElementRef })\r\n hueCanvas?: ElementRef;\r\n\r\n currentColor = '';\r\n changeHex = '';\r\n\r\n hue = 0;\r\n saturation = 1;\r\n lightness = 0.5;\r\n\r\n red = 0;\r\n green = 0;\r\n blue = 0;\r\n hex = '';\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n private _activeDocListeners: Array<{\r\n type: string;\r\n handler: EventListener;\r\n }> = [];\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n this.init();\r\n });\r\n\r\n effect(() => {\r\n const color = this.inputColorPicker();\r\n if (color && color !== this.changeHex) {\r\n this.changeHex = color;\r\n const hsl = this.convertService.hexToHsl(this.changeHex);\r\n this.hue = hsl.h;\r\n this.colorToPosition(color);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeDocumentListeners();\r\n }\r\n\r\n private init(): void {\r\n const spectrumCanvasElement = this.spectrumCanvas?.nativeElement;\r\n const hueCanvasElement = this.hueCanvas?.nativeElement;\r\n\r\n this.canvasService.init(spectrumCanvasElement, hueCanvasElement);\r\n\r\n this.createRectangleSpectrumListeners(spectrumCanvasElement);\r\n this.createHueSpectrumListeners(hueCanvasElement);\r\n this.colorToPosition(this.inputColorPicker());\r\n\r\n fromEvent(this.window, 'resize')\r\n .pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => {\r\n this.refreshColorPickerBox();\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n\r\n private refreshColorPickerBox(): void {\r\n const spectrumCanvasElement = this.spectrumCanvas?.nativeElement;\r\n const hueCanvasElement = this.hueCanvas?.nativeElement;\r\n\r\n if (spectrumCanvasElement) {\r\n const curWidth = getValueStyle(spectrumCanvasElement, 'width');\r\n const curHeight = getValueStyle(spectrumCanvasElement, 'height');\r\n spectrumCanvasElement.width = curWidth;\r\n spectrumCanvasElement.height = curHeight;\r\n }\r\n\r\n if (hueCanvasElement) {\r\n const curWidth = getValueStyle(hueCanvasElement, 'width');\r\n const curHeight = getValueStyle(hueCanvasElement, 'height');\r\n hueCanvasElement.width = curWidth;\r\n hueCanvasElement.height = curHeight;\r\n }\r\n\r\n const hsl = this.convertService.hexToHsl(this.changeHex);\r\n this.hue = hsl.h;\r\n this.canvasService.createRectangleSpectrum(\r\n this.getHueColor(this.hue),\r\n spectrumCanvasElement,\r\n );\r\n this.canvasService.createHueSpectrum(hueCanvasElement);\r\n this.refreshPositionCursors();\r\n }\r\n\r\n private refreshPositionCursors(): void {\r\n const spectrumCanvasElement = this.spectrumCanvas?.nativeElement;\r\n const curWidth = getValueStyle(spectrumCanvasElement, 'width');\r\n const curHeight = getValueStyle(spectrumCanvasElement, 'height');\r\n const initWidth = this.canvasService.widthSpectrum;\r\n const initHeight = this.canvasService.heightSpectrum;\r\n\r\n if (curWidth !== initWidth || curHeight !== initHeight) {\r\n this.colorToPosition(this.changeHex);\r\n this.canvasService.widthSpectrum = curWidth;\r\n this.canvasService.heightSpectrum = curHeight;\r\n }\r\n }\r\n\r\n private createRectangleSpectrumListeners(canvas: HTMLCanvasElement): void {\r\n const handler = (e: MouseEvent | TouchEvent) => {\r\n e.preventDefault();\r\n\r\n const rect = this.canvasService.spectrumRect;\r\n const { x, y } = getEventRectCoords(e, rect);\r\n const xRatio = (x / rect.width) * 100;\r\n const yRatio = (y / rect.height) * 100;\r\n const hsvValue = 1 - yRatio / 100;\r\n const hsvSaturation = xRatio / 100;\r\n\r\n this.lightness = Math.max(0, Math.min(1,\r\n (hsvValue / 2) * (2 - hsvSaturation)\r\n ));\r\n\r\n const saturationDivider = 1 - Math.abs(2 * this.lightness - 1);\r\n this.saturation = Math.max(0, Math.min(1,\r\n saturationDivider === 0 ? 0 : (hsvValue * hsvSaturation) / saturationDivider\r\n ));\r\n\r\n this.updateSpectrumCursor(x, y);\r\n this.emitColor(e);\r\n };\r\n\r\n canvas.addEventListener('mousedown', (e: MouseEvent) => {\r\n this.eventHandler(e, handler);\r\n });\r\n\r\n canvas.addEventListener('touchstart', (e: TouchEvent) => {\r\n this.eventHandler(e, handler);\r\n });\r\n }\r\n\r\n private createHueSpectrumListeners(canvas: HTMLCanvasElement): void {\r\n const handler = (e: MouseEvent | TouchEvent) => {\r\n e.preventDefault();\r\n\r\n const rect = this.canvasService.hueRect;\r\n const { x } = getEventRectCoords(e, rect);\r\n\r\n const percent = rect.width > 0 ? x / rect.width : 0;\r\n this.hue = Math.max(0, Math.min(360, 360 * percent));\r\n\r\n const hueColor = `hsl(${this.hue} 100% 50%)`;\r\n this.canvasService.createRectangleSpectrum(hueColor, this.spectrumCanvas?.nativeElement);\r\n\r\n this.updateHueCursor(x);\r\n this.emitColor(e);\r\n };\r\n\r\n canvas.addEventListener('mousedown', (e: MouseEvent) => {\r\n this.eventHandler(e, handler);\r\n });\r\n\r\n canvas.addEventListener('touchstart', (e: TouchEvent) => {\r\n this.eventHandler(e, handler);\r\n });\r\n }\r\n\r\n private emitColor(e: MouseEvent | TouchEvent): void {\r\n const color = `hsl(${this.hue} ${this.saturation * 100}% ${this.lightness * 100}%)`;\r\n this.setColorValues(color);\r\n\r\n if (isStartEvent(e) || isMoveEvent(e)) {\r\n this.changeColorEmit(this.hex);\r\n }\r\n\r\n if (isEndEvent(e)) {\r\n this.changeColorEmit(this.hex);\r\n this.selectColor.emit(this.hex);\r\n }\r\n }\r\n\r\n changeColorEmit(hex: string): void {\r\n this.changeHex = hex;\r\n this.changeColor.emit(this.hex);\r\n }\r\n\r\n private setColorValues(color: string): void {\r\n this.currentColor = color;\r\n\r\n const [red, green, blue] = this.convertService.hslToRgb(\r\n this.hue,\r\n this.saturation,\r\n this.lightness,\r\n );\r\n\r\n this.red = red;\r\n this.green = green;\r\n this.blue = blue;\r\n this.hex = this.convertService.hslToHex(this.hue / 360, this.saturation, this.lightness);\r\n }\r\n\r\n private updateSpectrumCursor(x: number, y: number): void {\r\n if (this.spectrumCursor) {\r\n this.spectrumCursor.nativeElement.style.left = `${x}px`;\r\n this.spectrumCursor.nativeElement.style.top = `${y}px`;\r\n }\r\n }\r\n\r\n private updateHueCursor(x: number): void {\r\n if (this.hueCursor) {\r\n this.hueCursor.nativeElement.style.left = `${x}px`;\r\n }\r\n }\r\n\r\n private colorToPosition(hexColor: string): void {\r\n const spectrumRect = this.canvasService.spectrumRect;\r\n const hueRect = this.canvasService.hueRect;\r\n\r\n const hsl = this.convertService.hexToHsl(hexColor);\r\n this.hue = hsl.h;\r\n\r\n const [, hsvs, hsvv] = this.convertService.hexToHsv(hexColor);\r\n const x = spectrumRect.width * hsvs;\r\n const y = spectrumRect.height * (1 - hsvv);\r\n const hueX = (this.hue / 360) * hueRect.width;\r\n\r\n this.updateSpectrumCursor(x, y);\r\n this.updateHueCursor(hueX);\r\n\r\n this.canvasService.createRectangleSpectrum(\r\n this.getHueColor(this.hue),\r\n this.spectrumCanvas?.nativeElement,\r\n );\r\n }\r\n\r\n private getHueColor(h: number): string {\r\n return `hsl(${h} 100% 50%)`;\r\n }\r\n\r\n private eventHandler(\r\n e: MouseEvent | TouchEvent,\r\n handler: (event: MouseEvent | TouchEvent) => void,\r\n ): void {\r\n handler(e);\r\n\r\n if (!this.window || !this.document) {\r\n return;\r\n }\r\n\r\n if (e instanceof MouseEvent) {\r\n this.addDocumentListener('mousemove', handler as EventListener);\r\n this.addDocumentListener('mouseup', ((upEvent: MouseEvent) => {\r\n handler(upEvent);\r\n this.removeDocumentListeners();\r\n }) as EventListener);\r\n }\r\n\r\n if (isTouchEvent(e)) {\r\n this.addDocumentListener('touchmove', handler as EventListener);\r\n this.addDocumentListener('touchend', ((upEvent: TouchEvent) => {\r\n handler(upEvent);\r\n this.removeDocumentListeners();\r\n }) as EventListener);\r\n this.addDocumentListener('touchcancel', ((upEvent: TouchEvent) => {\r\n handler(upEvent);\r\n this.removeDocumentListeners();\r\n }) as EventListener);\r\n }\r\n }\r\n\r\n private addDocumentListener(type: string, handler: EventListener): void {\r\n this.document.addEventListener(type, handler);\r\n this._activeDocListeners.push({ type, handler });\r\n }\r\n\r\n private removeDocumentListeners(): void {\r\n for (const { type, handler } of this._activeDocListeners) {\r\n this.document.removeEventListener(type, handler);\r\n }\r\n this._activeDocListeners = [];\r\n }\r\n}\r\n","<div class=\"colorbox\">\r\n <div class=\"colorbox__spectrum\">\r\n <button\r\n id=\"spectrum-cursor\"\r\n class=\"colorbox__spectrum-cursor\"\r\n #spectrumCursor\r\n ></button>\r\n <canvas id=\"spectrum-canvas\" #spectrumCanvas></canvas>\r\n </div>\r\n <div class=\"colorbox__hue-wrapper\">\r\n <div class=\"colorbox__hue\">\r\n <button id=\"hue-cursor\" class=\"colorbox__hue-cursor\" #hueCursor></button>\r\n <canvas id=\"hue-canvas\" #hueCanvas></canvas>\r\n </div>\r\n <div class=\"colorbox__content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ColorBoxComponent } from './components/color-box/color-box.component';\n\n@Component({\n selector: 'lib-color-picker',\n imports: [CommonModule, ColorBoxComponent],\n templateUrl: './color-picker.component.html',\n styleUrls: ['./color-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorPicker {\n inColor = input.required<string | null>();\n eyeColor = input<string | null>(null);\n hasTransparent = input(true);\n hasEyeDropper = input(false);\n colorDefault = input('#000000');\n\n changeModel = output<string | null>();\n changeEnd = output();\n startEye = output<Event>();\n\n currentColor = signal<string | null>(null);\n\n constructor() {\n effect(() => {\n this.currentColor.set(this.inColor());\n });\n }\n\n get defaultColor(): string | null {\n return this.hasTransparent() ? null : this.colorDefault();\n }\n\n get isTransparent(): boolean {\n return !this.currentColor() && this.hasTransparent();\n }\n\n changeInput(event: Event) {\n const color = (event.target as HTMLInputElement).value;\n this.selectColor(color);\n }\n\n changeColor(color: string) {\n this.currentColor.set(color);\n this.changeModel.emit(color);\n }\n\n selectColor(color: string | null) {\n this.currentColor.set(color || this.defaultColor);\n this.changeModel.emit(color);\n this.changeEnd.emit();\n }\n}\n","<div class=\"colorpicker\">\r\n <div class=\"colorpicker__design-wrapper\">\r\n <ng-container *ngTemplateOutlet=\"colorMapTemplate\"></ng-container>\r\n </div>\r\n\r\n <div class=\"colorpicker__info\">\r\n @if (hasEyeDropper()) {\r\n <div class=\"colorpicker__picker\" (click)=\"startEye.emit($event)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.4227 4.27425L19.7257 3.57734C18.9559 2.80755 17.7079 2.80755 16.9381 3.57734L12.7565 7.75881L12.0596 7.0619C11.6747 6.677 11.0507 6.677 10.6658 7.0619C10.2809 7.44679 10.2809 8.07083 10.6658 8.45572L11.3626 9.15255L4.39341 16.1217C4.5402 17.3687 4.0452 19.2573 3 20.3027L3.69654 21C4.74192 19.9546 6.63098 19.4596 7.87801 19.6062L14.8472 12.6371L15.5442 13.3341C15.9291 13.719 16.5532 13.719 16.9381 13.3341C17.323 12.9492 17.323 12.3252 16.9381 11.9403L16.2411 11.2434L20.4227 7.0619C21.1924 6.29211 21.1924 5.04404 20.4227 4.27425ZM12.0595 9.84946L14.1503 11.9402L7.49458 18.5958C6.82993 18.5871 6.10446 18.7017 5.41883 18.915C5.24707 18.9685 5.07418 19.0292 4.90213 19.0976C4.97048 18.9256 5.03126 18.7527 5.0847 18.5809C5.29805 17.8953 5.41264 17.1698 5.40386 16.5051L12.0595 9.84946Z\" fill=\"#3D3D3D\"/>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"colorpicker__wrapperline\">\r\n @if (hasTransparent()) {\r\n <div\r\n class=\"colorpicker__transparent\"\r\n (click)=\"selectColor(null)\"\r\n >\r\n <svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 32 32\">\r\n <path fill=\"currentColor\" d=\"M8 25.333c0 1.467 1.2 2.667 2.667 2.667h10.667c1.467 0 2.667-1.2 2.667-2.667v-16h-16v16zM11.28 15.84l1.88-1.88 2.84 2.827 2.827-2.827 1.88 1.88-2.827 2.827 2.827 2.827-1.88 1.88-2.827-2.827-2.827 2.827-1.88-1.88 2.827-2.827-2.84-2.827zM20.667 5.333l-1.333-1.333h-6.667l-1.333 1.333h-4.667v2.667h18.667v-2.667z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div\r\n class=\"colorpicker__wrapper\"\r\n [class.colorpicker__wrapper--with-transparent]=\"hasTransparent()\"\r\n >\r\n @if (eyeColor() || currentColor(); as color) {\r\n <div\r\n class=\"colorpicker__preview\"\r\n [style.background]=\"color\"\r\n ></div>\r\n }\r\n @if (isTransparent) {\r\n <div\r\n class=\"colorpicker__preview colorpicker__preview--transparent\"\r\n ></div>\r\n }\r\n <div class=\"colorpicker__form-element\">\r\n <input\r\n type=\"text\"\r\n [value]=\"\r\n currentColor() ||\r\n (hasTransparent() ? 'Без цвета' : colorDefault())\r\n \"\r\n class=\"colorpicker__input\"\r\n [class.colorpicker__input--transparent]=\"isTransparent\"\r\n [attr.readonly]=\"isTransparent || null\"\r\n (change)=\"changeInput($event)\"\r\n pattern=\"^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$\"\r\n maxlength=\"7\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #colorMapTemplate>\r\n <color-box\r\n [inputColorPicker]=\"currentColor() || colorDefault()\"\r\n (changeColor)=\"changeColor($event)\"\r\n (selectColor)=\"selectColor($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </color-box>\r\n</ng-template>\r\n","/*\n * Public API Surface of color-picker\n */\n\nexport * from './lib/color-picker.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@severfam/angular-color-picker",
3
- "version": "0.1.0",
3
+ "version": "1.0.0",
4
4
  "description": "Angular color picker component with shade and saturation selection. Renders on Canvas, auto-scales and recalculates sizes on container resize.",
5
5
  "license": "MIT",
6
6
  "repository": {