@provoly/dashboard 0.18.2 → 0.18.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/assets/svgs/clear_filter.svg +12 -0
  2. package/assets/svgs/refresh_data.svg +15 -0
  3. package/assets/svgs/refresh_filter.svg +13 -0
  4. package/components/color-picker/color-picker.component.d.ts +58 -0
  5. package/components/color-picker/color-picker.module.d.ts +9 -0
  6. package/components/color-picker/index.d.ts +5 -0
  7. package/components/color-picker/public-api.d.ts +2 -0
  8. package/components/scheme-picker/index.d.ts +5 -0
  9. package/components/scheme-picker/public-api.d.ts +3 -0
  10. package/components/scheme-picker/scheme-picker.component.d.ts +34 -0
  11. package/components/scheme-picker/scheme-picker.module.d.ts +11 -0
  12. package/components/scheme-picker/scheme.service.d.ts +12 -0
  13. package/dataset/components/dataset-card/dataset-card.component.d.ts +11 -3
  14. package/dataset/i18n/en.translations.d.ts +1 -0
  15. package/dataset/i18n/fr.translations.d.ts +1 -0
  16. package/dataset/style/_o-pry-dataset-card.scss +16 -1
  17. package/dataset/style/_o-pry-dataset.scss +18 -3
  18. package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +7 -5
  19. package/esm2022/components/color-picker/color-picker.component.mjs +314 -0
  20. package/esm2022/components/color-picker/color-picker.module.mjs +20 -0
  21. package/esm2022/components/color-picker/provoly-dashboard-components-color-picker.mjs +5 -0
  22. package/esm2022/components/color-picker/public-api.mjs +3 -0
  23. package/esm2022/components/scheme-picker/provoly-dashboard-components-scheme-picker.mjs +5 -0
  24. package/esm2022/components/scheme-picker/public-api.mjs +4 -0
  25. package/esm2022/components/scheme-picker/scheme-picker.component.mjs +104 -0
  26. package/esm2022/components/scheme-picker/scheme-picker.module.mjs +22 -0
  27. package/esm2022/components/scheme-picker/scheme.service.mjs +47 -0
  28. package/esm2022/dataset/components/dataset-card/dataset-card.component.mjs +26 -9
  29. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +3 -3
  30. package/esm2022/dataset/components/dataset.component.mjs +3 -3
  31. package/esm2022/dataset/i18n/en.translations.mjs +2 -1
  32. package/esm2022/dataset/i18n/fr.translations.mjs +2 -1
  33. package/esm2022/dataset/style/css.component.mjs +2 -2
  34. package/esm2022/lib/core/i18n/en.translations.mjs +6 -2
  35. package/esm2022/lib/core/i18n/fr.translations.mjs +6 -2
  36. package/esm2022/lib/core/model/widget-aggregated-chart-manifest.interface.mjs +1 -1
  37. package/esm2022/lib/core/model/widget-chart-manifest.interface.mjs +2 -1
  38. package/esm2022/lib/core/store/aggregation/backend-aggregation.service.mjs +4 -1
  39. package/esm2022/lib/core/store/data-source/data-source.model.mjs +1 -1
  40. package/esm2022/restitution/components/restitution/restitution.component.mjs +11 -20
  41. package/esm2022/restitution/model/restitution.model.mjs +1 -1
  42. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +130 -24
  43. package/esm2022/widgets/widget-aggregated-chart/i18n/en.translations.mjs +19 -2
  44. package/esm2022/widgets/widget-aggregated-chart/i18n/fr.translations.mjs +19 -2
  45. package/esm2022/widgets/widget-aggregated-chart/widget-aggregated-chart.module.mjs +16 -5
  46. package/esm2022/widgets/widget-chart/i18n/en.translations.mjs +3 -2
  47. package/esm2022/widgets/widget-chart/i18n/fr.translations.mjs +3 -2
  48. package/fesm2022/provoly-dashboard-admin.mjs +6 -4
  49. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  50. package/fesm2022/provoly-dashboard-components-color-picker.mjs +337 -0
  51. package/fesm2022/provoly-dashboard-components-color-picker.mjs.map +1 -0
  52. package/fesm2022/provoly-dashboard-components-scheme-picker.mjs +171 -0
  53. package/fesm2022/provoly-dashboard-components-scheme-picker.mjs.map +1 -0
  54. package/fesm2022/provoly-dashboard-dataset.mjs +29 -14
  55. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  56. package/fesm2022/provoly-dashboard-restitution.mjs +10 -19
  57. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  58. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +179 -28
  59. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  60. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +4 -2
  61. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
  62. package/fesm2022/provoly-dashboard.mjs +16 -2
  63. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  64. package/lib/core/i18n/en.translations.d.ts +4 -0
  65. package/lib/core/i18n/fr.translations.d.ts +4 -0
  66. package/lib/core/model/widget-aggregated-chart-manifest.interface.d.ts +7 -0
  67. package/lib/core/model/widget-chart-manifest.interface.d.ts +1 -0
  68. package/lib/core/store/data-source/data-source.model.d.ts +0 -2
  69. package/package.json +37 -25
  70. package/restitution/components/restitution/restitution.component.d.ts +0 -2
  71. package/restitution/model/restitution.model.d.ts +1 -1
  72. package/styles/components/_a-color-picker.scss +62 -0
  73. package/styles/components/_m-color-scheme.scss +20 -0
  74. package/styles/main.scss +2 -0
  75. package/styles-theme/components-theme/_o-pry-admin-classes-customize.theme.scss +4 -0
  76. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +17 -5
  77. package/widgets/widget-aggregated-chart/i18n/en.translations.d.ts +17 -0
  78. package/widgets/widget-aggregated-chart/i18n/fr.translations.d.ts +17 -0
  79. package/widgets/widget-aggregated-chart/widget-aggregated-chart.module.d.ts +3 -1
  80. package/widgets/widget-chart/i18n/en.translations.d.ts +1 -0
  81. package/widgets/widget-chart/i18n/fr.translations.d.ts +1 -0
@@ -0,0 +1,337 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { forwardRef, Component, ViewChild, NgModule } from '@angular/core';
4
+ import * as i1 from '@angular/forms';
5
+ import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
6
+
7
+ class PryColorPickerComponent {
8
+ constructor(_cd) {
9
+ this._cd = _cd;
10
+ this.onChange = () => { };
11
+ this.onTouch = () => { };
12
+ this.color = '#000000';
13
+ this.barColor = '#0000ff';
14
+ this.disabled = false;
15
+ this.inhibate = true;
16
+ this.picking = false;
17
+ this.markerSelectorPosition = [0, 0];
18
+ this.markerBarPosition = 0;
19
+ this.innerRadius = 3;
20
+ this.outerRadius = 8;
21
+ }
22
+ registerOnChange(fn) {
23
+ this.onChange = fn;
24
+ }
25
+ registerOnTouched(fn) {
26
+ this.onTouch = fn;
27
+ }
28
+ // Define what should happen in this component, if something changes outside
29
+ writeValue(color) {
30
+ if (this.color !== color && !this.inhibate) {
31
+ this.color = color;
32
+ this.onChange(this.color);
33
+ this.onTouch();
34
+ this._cd.markForCheck();
35
+ this.inputColor(color);
36
+ }
37
+ }
38
+ setDisabledState(isDisabled) {
39
+ this.disabled = isDisabled;
40
+ this._cd.markForCheck();
41
+ }
42
+ ngAfterViewInit() {
43
+ this.inhibate = false;
44
+ this.selectorContext = this.selector.nativeElement.getContext('2d', { willReadFrequently: true });
45
+ this.barContext = this.bar.nativeElement.getContext('2d', { willReadFrequently: true });
46
+ }
47
+ togglePicker($event) {
48
+ this.picking = !this.disabled && !this.picking;
49
+ if (!this.picking && this.temporaryColor) {
50
+ this.writeValue(this.temporaryColor);
51
+ }
52
+ if (this.picking) {
53
+ this.redrawSelector();
54
+ this.redrawBar();
55
+ }
56
+ }
57
+ redrawSelector() {
58
+ this.selectorContext.clearRect(0, 0, this.selectorContext.canvas.width, this.selectorContext.canvas.height);
59
+ this.drawColorGradient(this.selectorContext, false, ['#ffffff', this.barColor]);
60
+ this.drawColorGradient(this.selectorContext, true, ['rgba(0,0,0,0)', '#000']);
61
+ this.drawSelectorMarker();
62
+ }
63
+ redrawBar() {
64
+ this.barContext.clearRect(0, 0, this.barContext.canvas.width, this.barContext.canvas.height);
65
+ this.drawColorGradient(this.barContext, true, [
66
+ '#FF0000',
67
+ '#ffff00',
68
+ '#00FF00',
69
+ '#00FFFF',
70
+ '#0000FF',
71
+ '#FF00FF',
72
+ '#FF0000'
73
+ ]);
74
+ this.drawBarMarker();
75
+ }
76
+ drawColorGradient(ctxt, vertical = true, colors) {
77
+ const gradientArgs = vertical
78
+ ? [0, 0, 0, ctxt.canvas.height]
79
+ : [0, 0, ctxt.canvas.width, 0];
80
+ let gradient = ctxt.createLinearGradient(...gradientArgs);
81
+ colors.forEach((color, idx) => {
82
+ gradient.addColorStop(idx / (colors.length - 1), color);
83
+ });
84
+ ctxt.fillStyle = gradient;
85
+ ctxt.fillRect(0, 0, ctxt.canvas.width, ctxt.canvas.height);
86
+ }
87
+ drawSelectorMarker() {
88
+ const gradient = this.selectorContext.createRadialGradient(this.markerSelectorPosition[0], this.markerSelectorPosition[1], this.innerRadius, this.markerSelectorPosition[0], this.markerSelectorPosition[1], this.outerRadius);
89
+ gradient.addColorStop(0, 'rgba(0,0,0,0)');
90
+ gradient.addColorStop(1, '#ffffff');
91
+ this.selectorContext.beginPath();
92
+ this.selectorContext.arc(this.markerSelectorPosition[0], this.markerSelectorPosition[1], this.outerRadius, 0, 2 * Math.PI);
93
+ this.selectorContext.fillStyle = gradient;
94
+ this.selectorContext.fill();
95
+ this.selectorContext.stroke();
96
+ }
97
+ drawBarMarker() {
98
+ this.barContext.strokeStyle = '2px solid black';
99
+ this.barContext.beginPath();
100
+ this.barContext.moveTo(0, this.markerBarPosition - this.innerRadius);
101
+ this.barContext.lineTo(this.barContext.canvas.width, this.markerBarPosition - this.innerRadius);
102
+ this.barContext.stroke();
103
+ this.barContext.beginPath();
104
+ this.barContext.moveTo(0, this.markerBarPosition + this.innerRadius);
105
+ this.barContext.lineTo(this.barContext.canvas.width, this.markerBarPosition + this.innerRadius);
106
+ this.barContext.stroke();
107
+ }
108
+ selectColor($event, temporary = false) {
109
+ // Read pixel Color
110
+ const pixelColor = this.rgbToHex(...this.selectorContext.getImageData($event.offsetX, $event.offsetY, 1, 1)['data']);
111
+ if (!temporary) {
112
+ this.writeValue(pixelColor);
113
+ }
114
+ else {
115
+ this.temporaryColor = pixelColor;
116
+ }
117
+ this.markerSelectorPosition = [$event.offsetX, $event.offsetY];
118
+ this.redrawSelector();
119
+ $event.stopPropagation();
120
+ }
121
+ selectColorFromBar($event) {
122
+ this.markerBarPosition = $event.offsetY;
123
+ this.barColor = this.rgbToHex(...this.barContext.getImageData(20, $event.offsetY, 1, 1)['data']);
124
+ this.redrawBar();
125
+ this.redrawSelector();
126
+ this.selectColor({
127
+ offsetX: this.markerSelectorPosition[0],
128
+ offsetY: this.markerSelectorPosition[1],
129
+ stopPropagation: () => $event.stopPropagation()
130
+ }, true);
131
+ $event.stopPropagation();
132
+ }
133
+ componentToHex(c) {
134
+ return c.toString(16).padStart(2, '0');
135
+ }
136
+ rgbToHex(r, g, b) {
137
+ return '#' + this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);
138
+ }
139
+ clickInput($event) {
140
+ this.input.nativeElement.focus();
141
+ $event.stopPropagation();
142
+ }
143
+ inputColor($event) {
144
+ const possibleColor = !!$event ? ($event.indexOf('#') === -1 ? '#' + $event : $event) : '#FFFFFF';
145
+ if (/^#[0-9A-F]{6}$/i.test(possibleColor)) {
146
+ this.writeValue(possibleColor);
147
+ const rgba = this.strToRGBA(this.color);
148
+ const hsva = this.RGBAtoHSVA(rgba);
149
+ this.markerBarPosition = (this.barContext.canvas.height * hsva.h) / 360;
150
+ this.markerSelectorPosition = [
151
+ (this.selectorContext.canvas.width * hsva.s) / 100,
152
+ this.selectorContext.canvas.height * (1 - hsva.v / 100)
153
+ ];
154
+ this.barColor = this.hslToHex(hsva.h, 100, 50);
155
+ this.redrawBar();
156
+ this.redrawSelector();
157
+ }
158
+ }
159
+ strToRGBA(str) {
160
+ const regex = /^((rgba)|rgb)[\D]+([\d.]+)[\D]+([\d.]+)[\D]+([\d.]+)[\D]*?([\d.]+|$)/i;
161
+ let match, rgba;
162
+ // Default to black for invalid color strings
163
+ this.selectorContext.fillStyle = '#000';
164
+ // Use canvas to convert the string to a valid color string
165
+ this.selectorContext.fillStyle = str;
166
+ match = regex.exec(this.selectorContext.fillStyle);
167
+ if (match) {
168
+ rgba = {
169
+ // @ts-ignore
170
+ r: match[3] * 1,
171
+ // @ts-ignore
172
+ g: match[4] * 1,
173
+ // @ts-ignore
174
+ b: match[5] * 1,
175
+ // @ts-ignore
176
+ a: match[6] * 1
177
+ };
178
+ // Workaround to mitigate a Chromium bug where the alpha value is rounded incorrectly
179
+ rgba.a = +rgba.a.toFixed(2);
180
+ }
181
+ else {
182
+ match = this.selectorContext.fillStyle
183
+ .replace('#', '')
184
+ .match(/.{2}/g)
185
+ .map((h) => parseInt(h, 16));
186
+ rgba = {
187
+ r: match[0],
188
+ g: match[1],
189
+ b: match[2],
190
+ a: 1
191
+ };
192
+ }
193
+ return rgba;
194
+ }
195
+ RGBAtoHSVA(rgba) {
196
+ const red = rgba.r / 255;
197
+ const green = rgba.g / 255;
198
+ const blue = rgba.b / 255;
199
+ const xmax = Math.max(red, green, blue);
200
+ const xmin = Math.min(red, green, blue);
201
+ const chroma = xmax - xmin;
202
+ const value = xmax;
203
+ let hue = 0;
204
+ let saturation = 0;
205
+ if (chroma) {
206
+ if (xmax === red) {
207
+ hue = (green - blue) / chroma;
208
+ }
209
+ if (xmax === green) {
210
+ hue = 2 + (blue - red) / chroma;
211
+ }
212
+ if (xmax === blue) {
213
+ hue = 4 + (red - green) / chroma;
214
+ }
215
+ if (xmax) {
216
+ saturation = chroma / xmax;
217
+ }
218
+ }
219
+ hue = Math.floor(hue * 60);
220
+ return {
221
+ h: hue < 0 ? hue + 360 : hue,
222
+ s: Math.round(saturation * 100),
223
+ v: Math.round(value * 100),
224
+ a: rgba.a
225
+ };
226
+ }
227
+ hslToHex(h, s, l) {
228
+ s /= 100;
229
+ l /= 100;
230
+ let c = (1 - Math.abs(2 * l - 1)) * s, x = c * (1 - Math.abs(((h / 60) % 2) - 1)), m = l - c / 2, r = 0, g = 0, b = 0;
231
+ if (0 <= h && h < 60) {
232
+ r = c;
233
+ g = x;
234
+ b = 0;
235
+ }
236
+ else if (60 <= h && h < 120) {
237
+ r = x;
238
+ g = c;
239
+ b = 0;
240
+ }
241
+ else if (120 <= h && h < 180) {
242
+ r = 0;
243
+ g = c;
244
+ b = x;
245
+ }
246
+ else if (180 <= h && h < 240) {
247
+ r = 0;
248
+ g = x;
249
+ b = c;
250
+ }
251
+ else if (240 <= h && h < 300) {
252
+ r = x;
253
+ g = 0;
254
+ b = c;
255
+ }
256
+ else if (300 <= h && h < 360) {
257
+ r = c;
258
+ g = 0;
259
+ b = x;
260
+ }
261
+ // Having obtained RGB, convert channels to hex
262
+ // @ts-ignore
263
+ r = Math.round((r + m) * 255).toString(16);
264
+ // @ts-ignore
265
+ g = Math.round((g + m) * 255).toString(16);
266
+ // @ts-ignore
267
+ b = Math.round((b + m) * 255).toString(16);
268
+ // Prepend 0s, if necessary
269
+ // @ts-ignore
270
+ if (r.length == 1)
271
+ r = '0' + r;
272
+ // @ts-ignore
273
+ if (g.length == 1)
274
+ g = '0' + g;
275
+ // @ts-ignore
276
+ if (b.length == 1)
277
+ b = '0' + b;
278
+ return '#' + r + g + b;
279
+ }
280
+ mouseMove($event) {
281
+ if ($event.buttons > 0) {
282
+ this.selectColor($event, true);
283
+ }
284
+ }
285
+ mouseUp($event) {
286
+ this.selectColor($event, false);
287
+ }
288
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryColorPickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
289
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryColorPickerComponent, selector: "pry-color-picker", providers: [
290
+ {
291
+ provide: NG_VALUE_ACCESSOR,
292
+ useExisting: forwardRef(() => PryColorPickerComponent),
293
+ multi: true
294
+ }
295
+ ], viewQueries: [{ propertyName: "selector", first: true, predicate: ["selector"], descendants: true }, { propertyName: "bar", first: true, predicate: ["bar"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div\n class=\"a-color-picker\"\n (click)=\"togglePicker($event)\"\n [style.background-color]=\"temporaryColor ?? color\"\n [title]=\"color\"\n role=\"button\"\n>\n <div class=\"a-color-picker__modal\" [style.display]=\"picking ? 'flex' : 'none'\">\n <div class=\"a-color-picker__modal__backdrop\">\n <canvas\n #selector\n class=\"a-color-picker__modal__selector\"\n (mousemove)=\"mouseMove($event)\"\n (mouseup)=\"mouseUp($event)\"\n height=\"300\"\n width=\"300\"\n ></canvas>\n <canvas\n #bar\n class=\"a-color-picker__modal__bar\"\n (click)=\"selectColorFromBar($event)\"\n height=\"300\"\n width=\"40\"\n ></canvas>\n <div class=\"a-color-picker__modal__input\" (click)=\"clickInput($event)\">\n #<input [ngModel]=\"(color ?? '#').substring(1)\" (ngModelChange)=\"inputColor($event)\" #input />\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
296
+ }
297
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryColorPickerComponent, decorators: [{
298
+ type: Component,
299
+ args: [{ selector: 'pry-color-picker', providers: [
300
+ {
301
+ provide: NG_VALUE_ACCESSOR,
302
+ useExisting: forwardRef(() => PryColorPickerComponent),
303
+ multi: true
304
+ }
305
+ ], template: "<div\n class=\"a-color-picker\"\n (click)=\"togglePicker($event)\"\n [style.background-color]=\"temporaryColor ?? color\"\n [title]=\"color\"\n role=\"button\"\n>\n <div class=\"a-color-picker__modal\" [style.display]=\"picking ? 'flex' : 'none'\">\n <div class=\"a-color-picker__modal__backdrop\">\n <canvas\n #selector\n class=\"a-color-picker__modal__selector\"\n (mousemove)=\"mouseMove($event)\"\n (mouseup)=\"mouseUp($event)\"\n height=\"300\"\n width=\"300\"\n ></canvas>\n <canvas\n #bar\n class=\"a-color-picker__modal__bar\"\n (click)=\"selectColorFromBar($event)\"\n height=\"300\"\n width=\"40\"\n ></canvas>\n <div class=\"a-color-picker__modal__input\" (click)=\"clickInput($event)\">\n #<input [ngModel]=\"(color ?? '#').substring(1)\" (ngModelChange)=\"inputColor($event)\" #input />\n </div>\n </div>\n </div>\n</div>\n" }]
306
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { selector: [{
307
+ type: ViewChild,
308
+ args: ['selector']
309
+ }], bar: [{
310
+ type: ViewChild,
311
+ args: ['bar']
312
+ }], input: [{
313
+ type: ViewChild,
314
+ args: ['input']
315
+ }] } });
316
+
317
+ const PRY_COLORPICKER_COMPONENTS = [PryColorPickerComponent];
318
+ class PryColorPickerModule {
319
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryColorPickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
320
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.6", ngImport: i0, type: PryColorPickerModule, declarations: [PryColorPickerComponent], imports: [CommonModule, FormsModule], exports: [PryColorPickerComponent] }); }
321
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryColorPickerModule, imports: [CommonModule, FormsModule] }); }
322
+ }
323
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryColorPickerModule, decorators: [{
324
+ type: NgModule,
325
+ args: [{
326
+ imports: [CommonModule, FormsModule],
327
+ declarations: [...PRY_COLORPICKER_COMPONENTS],
328
+ exports: [...PRY_COLORPICKER_COMPONENTS]
329
+ }]
330
+ }] });
331
+
332
+ /**
333
+ * Generated bundle index. Do not edit.
334
+ */
335
+
336
+ export { PryColorPickerComponent, PryColorPickerModule };
337
+ //# sourceMappingURL=provoly-dashboard-components-color-picker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provoly-dashboard-components-color-picker.mjs","sources":["../../../../projects/provoly/dashboard/components/color-picker/color-picker.component.ts","../../../../projects/provoly/dashboard/components/color-picker/color-picker.component.html","../../../../projects/provoly/dashboard/components/color-picker/color-picker.module.ts","../../../../projects/provoly/dashboard/components/color-picker/provoly-dashboard-components-color-picker.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, forwardRef, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'pry-color-picker',\n templateUrl: './color-picker.component.html',\n\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PryColorPickerComponent),\n multi: true\n }\n ]\n})\nexport class PryColorPickerComponent implements ControlValueAccessor, AfterViewInit {\n onChange: any = () => {};\n onTouch: any = () => {};\n color? = '#000000';\n barColor: string = '#0000ff';\n disabled = false;\n inhibate = true;\n picking: boolean = false;\n\n @ViewChild('selector') selector!: ElementRef<HTMLCanvasElement>;\n selectorContext!: CanvasRenderingContext2D;\n @ViewChild('bar') bar!: ElementRef<HTMLCanvasElement>;\n barContext!: CanvasRenderingContext2D;\n markerSelectorPosition: [number, number] = [0, 0];\n markerBarPosition = 0;\n\n @ViewChild('input') input!: ElementRef<HTMLInputElement>;\n innerRadius = 3;\n outerRadius = 8;\n temporaryColor?: string;\n\n constructor(private _cd: ChangeDetectorRef) {}\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n // Define what should happen in this component, if something changes outside\n writeValue(color: string) {\n if (this.color !== color && !this.inhibate) {\n this.color = color;\n this.onChange(this.color);\n this.onTouch();\n this._cd.markForCheck();\n this.inputColor(color);\n }\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this._cd.markForCheck();\n }\n\n ngAfterViewInit(): void {\n this.inhibate = false;\n this.selectorContext = this.selector.nativeElement.getContext('2d', { willReadFrequently: true })!;\n this.barContext = this.bar.nativeElement.getContext('2d', { willReadFrequently: true })!;\n }\n\n togglePicker($event: MouseEvent) {\n this.picking = !this.disabled && !this.picking;\n if (!this.picking && this.temporaryColor) {\n this.writeValue(this.temporaryColor);\n }\n if (this.picking) {\n this.redrawSelector();\n this.redrawBar();\n }\n }\n\n redrawSelector() {\n this.selectorContext.clearRect(0, 0, this.selectorContext.canvas.width, this.selectorContext.canvas.height);\n this.drawColorGradient(this.selectorContext, false, ['#ffffff', this.barColor]);\n this.drawColorGradient(this.selectorContext, true, ['rgba(0,0,0,0)', '#000']);\n this.drawSelectorMarker();\n }\n\n redrawBar() {\n this.barContext.clearRect(0, 0, this.barContext.canvas.width, this.barContext.canvas.height);\n this.drawColorGradient(this.barContext, true, [\n '#FF0000',\n '#ffff00',\n '#00FF00',\n '#00FFFF',\n '#0000FF',\n '#FF00FF',\n '#FF0000'\n ]);\n this.drawBarMarker();\n }\n\n drawColorGradient(ctxt: CanvasRenderingContext2D, vertical = true, colors: string[]) {\n const gradientArgs: [number, number, number, number] = vertical\n ? [0, 0, 0, ctxt.canvas.height]\n : [0, 0, ctxt.canvas.width, 0];\n let gradient = ctxt.createLinearGradient(...gradientArgs);\n colors.forEach((color, idx) => {\n gradient.addColorStop(idx / (colors.length - 1), color);\n });\n ctxt.fillStyle = gradient;\n ctxt.fillRect(0, 0, ctxt.canvas.width, ctxt.canvas.height);\n }\n\n drawSelectorMarker() {\n const gradient = this.selectorContext.createRadialGradient(\n this.markerSelectorPosition[0],\n this.markerSelectorPosition[1],\n this.innerRadius,\n this.markerSelectorPosition[0],\n this.markerSelectorPosition[1],\n this.outerRadius\n );\n gradient.addColorStop(0, 'rgba(0,0,0,0)');\n gradient.addColorStop(1, '#ffffff');\n\n this.selectorContext.beginPath();\n this.selectorContext.arc(\n this.markerSelectorPosition[0],\n this.markerSelectorPosition[1],\n this.outerRadius,\n 0,\n 2 * Math.PI\n );\n this.selectorContext.fillStyle = gradient;\n this.selectorContext.fill();\n this.selectorContext.stroke();\n }\n\n drawBarMarker() {\n this.barContext.strokeStyle = '2px solid black';\n this.barContext.beginPath();\n this.barContext.moveTo(0, this.markerBarPosition - this.innerRadius);\n this.barContext.lineTo(this.barContext.canvas.width, this.markerBarPosition - this.innerRadius);\n this.barContext.stroke();\n this.barContext.beginPath();\n this.barContext.moveTo(0, this.markerBarPosition + this.innerRadius);\n this.barContext.lineTo(this.barContext.canvas.width, this.markerBarPosition + this.innerRadius);\n this.barContext.stroke();\n }\n\n selectColor($event: MouseEvent, temporary = false) {\n // Read pixel Color\n const pixelColor = this.rgbToHex(\n ...(this.selectorContext.getImageData($event.offsetX, $event.offsetY, 1, 1)['data'] as unknown as [\n number,\n number,\n number\n ])\n );\n if (!temporary) {\n this.writeValue(pixelColor);\n } else {\n this.temporaryColor = pixelColor;\n }\n\n this.markerSelectorPosition = [$event.offsetX, $event.offsetY];\n this.redrawSelector();\n $event.stopPropagation();\n }\n\n selectColorFromBar($event: MouseEvent) {\n this.markerBarPosition = $event.offsetY;\n this.barColor = this.rgbToHex(\n ...(this.barContext.getImageData(20, $event.offsetY, 1, 1)['data'] as unknown as [number, number, number])\n );\n this.redrawBar();\n this.redrawSelector();\n this.selectColor(\n {\n offsetX: this.markerSelectorPosition[0],\n offsetY: this.markerSelectorPosition[1],\n stopPropagation: () => $event.stopPropagation()\n } as unknown as MouseEvent,\n true\n );\n $event.stopPropagation();\n }\n\n componentToHex(c: number) {\n return c.toString(16).padStart(2, '0');\n }\n\n rgbToHex(r: number, g: number, b: number) {\n return '#' + this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);\n }\n\n clickInput($event: MouseEvent) {\n this.input.nativeElement.focus();\n $event.stopPropagation();\n }\n\n inputColor($event: any) {\n const possibleColor = !!$event ? ($event.indexOf('#') === -1 ? '#' + $event : $event) : '#FFFFFF';\n if (/^#[0-9A-F]{6}$/i.test(possibleColor)) {\n this.writeValue(possibleColor);\n const rgba = this.strToRGBA(this.color!);\n const hsva = this.RGBAtoHSVA(rgba);\n this.markerBarPosition = (this.barContext.canvas.height * hsva.h) / 360;\n this.markerSelectorPosition = [\n (this.selectorContext.canvas.width * hsva.s) / 100,\n this.selectorContext.canvas.height * (1 - hsva.v / 100)\n ];\n this.barColor = this.hslToHex(hsva.h, 100, 50);\n this.redrawBar();\n this.redrawSelector();\n }\n }\n\n strToRGBA(str: string) {\n const regex = /^((rgba)|rgb)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]*?([\\d.]+|$)/i;\n let match, rgba;\n\n // Default to black for invalid color strings\n this.selectorContext.fillStyle = '#000';\n\n // Use canvas to convert the string to a valid color string\n this.selectorContext.fillStyle = str;\n match = regex.exec(this.selectorContext.fillStyle);\n\n if (match) {\n rgba = {\n // @ts-ignore\n r: match[3] * 1,\n // @ts-ignore\n g: match[4] * 1,\n // @ts-ignore\n b: match[5] * 1,\n // @ts-ignore\n a: match[6] * 1\n };\n\n // Workaround to mitigate a Chromium bug where the alpha value is rounded incorrectly\n rgba.a = +rgba.a.toFixed(2);\n } else {\n match = this.selectorContext.fillStyle\n .replace('#', '')\n .match(/.{2}/g)!\n .map((h) => parseInt(h, 16));\n rgba = {\n r: match[0],\n g: match[1],\n b: match[2],\n a: 1\n };\n }\n\n return rgba;\n }\n\n RGBAtoHSVA(rgba: any) {\n const red = rgba.r / 255;\n const green = rgba.g / 255;\n const blue = rgba.b / 255;\n const xmax = Math.max(red, green, blue);\n const xmin = Math.min(red, green, blue);\n const chroma = xmax - xmin;\n const value = xmax;\n let hue = 0;\n let saturation = 0;\n\n if (chroma) {\n if (xmax === red) {\n hue = (green - blue) / chroma;\n }\n if (xmax === green) {\n hue = 2 + (blue - red) / chroma;\n }\n if (xmax === blue) {\n hue = 4 + (red - green) / chroma;\n }\n if (xmax) {\n saturation = chroma / xmax;\n }\n }\n\n hue = Math.floor(hue * 60);\n\n return {\n h: hue < 0 ? hue + 360 : hue,\n s: Math.round(saturation * 100),\n v: Math.round(value * 100),\n a: rgba.a\n };\n }\n\n hslToHex(h: number, s: number, l: number) {\n s /= 100;\n l /= 100;\n\n let c = (1 - Math.abs(2 * l - 1)) * s,\n x = c * (1 - Math.abs(((h / 60) % 2) - 1)),\n m = l - c / 2,\n r = 0,\n g = 0,\n b = 0;\n\n if (0 <= h && h < 60) {\n r = c;\n g = x;\n b = 0;\n } else if (60 <= h && h < 120) {\n r = x;\n g = c;\n b = 0;\n } else if (120 <= h && h < 180) {\n r = 0;\n g = c;\n b = x;\n } else if (180 <= h && h < 240) {\n r = 0;\n g = x;\n b = c;\n } else if (240 <= h && h < 300) {\n r = x;\n g = 0;\n b = c;\n } else if (300 <= h && h < 360) {\n r = c;\n g = 0;\n b = x;\n }\n // Having obtained RGB, convert channels to hex\n // @ts-ignore\n r = Math.round((r + m) * 255).toString(16);\n // @ts-ignore\n g = Math.round((g + m) * 255).toString(16);\n // @ts-ignore\n b = Math.round((b + m) * 255).toString(16);\n\n // Prepend 0s, if necessary\n // @ts-ignore\n if (r.length == 1) r = '0' + r;\n // @ts-ignore\n if (g.length == 1) g = '0' + g;\n // @ts-ignore\n if (b.length == 1) b = '0' + b;\n\n return '#' + r + g + b;\n }\n\n mouseMove($event: MouseEvent) {\n if ($event.buttons > 0) {\n this.selectColor($event, true);\n }\n }\n\n mouseUp($event: MouseEvent) {\n this.selectColor($event, false);\n }\n}\n","<div\n class=\"a-color-picker\"\n (click)=\"togglePicker($event)\"\n [style.background-color]=\"temporaryColor ?? color\"\n [title]=\"color\"\n role=\"button\"\n>\n <div class=\"a-color-picker__modal\" [style.display]=\"picking ? 'flex' : 'none'\">\n <div class=\"a-color-picker__modal__backdrop\">\n <canvas\n #selector\n class=\"a-color-picker__modal__selector\"\n (mousemove)=\"mouseMove($event)\"\n (mouseup)=\"mouseUp($event)\"\n height=\"300\"\n width=\"300\"\n ></canvas>\n <canvas\n #bar\n class=\"a-color-picker__modal__bar\"\n (click)=\"selectColorFromBar($event)\"\n height=\"300\"\n width=\"40\"\n ></canvas>\n <div class=\"a-color-picker__modal__input\" (click)=\"clickInput($event)\">\n #<input [ngModel]=\"(color ?? '#').substring(1)\" (ngModelChange)=\"inputColor($event)\" #input />\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { PryColorPickerComponent } from './color-picker.component';\n\nconst PRY_COLORPICKER_COMPONENTS = [PryColorPickerComponent];\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [...PRY_COLORPICKER_COMPONENTS],\n exports: [...PRY_COLORPICKER_COMPONENTS]\n})\nexport class PryColorPickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ import * as i3 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { Injectable, forwardRef, Component, NgModule } from '@angular/core';
5
+ import * as i4 from '@angular/forms';
6
+ import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
7
+ import { BehaviorSubject, map } from 'rxjs';
8
+ import * as i2 from '@provoly/dashboard';
9
+ import { VegaColorType, PryI18nModule, PrySelectModule, PryIconModule } from '@provoly/dashboard';
10
+ import { vega } from 'vega-embed';
11
+ import * as i5 from '@provoly/dashboard/components/color-picker';
12
+ import { PryColorPickerModule } from '@provoly/dashboard/components/color-picker';
13
+
14
+ class PrySchemeService {
15
+ constructor() {
16
+ this.schemeIds$ = new BehaviorSubject([]);
17
+ vega.scheme('KO/W/OK', ['#C04D3F', '#FD9843', '#9ABE29']);
18
+ vega.scheme('Provoly', ['#113B6E', '#4E92E4', '#40B688', '#7BCCAD', '#FFC971', '#FD9843', '#EC547A']);
19
+ this.schemeIds$.next(Object.values(VegaColorType));
20
+ }
21
+ getSchemeColors(scheme) {
22
+ if (!scheme) {
23
+ return this.getSchemeColors(this.getDefaultScheme());
24
+ }
25
+ if (scheme.indexOf('#') === 0) {
26
+ return scheme.split(',').map((color) => (color.indexOf('#') === 0 ? color : `#${color}`));
27
+ }
28
+ return vega.scheme(scheme);
29
+ }
30
+ getDefaultScheme() {
31
+ return this.schemeIds$.getValue()[0];
32
+ }
33
+ randomColor() {
34
+ return ('#' +
35
+ Math.floor(Math.random() * 16777215)
36
+ .toString(16)
37
+ .padStart(6, '0')
38
+ .toUpperCase());
39
+ }
40
+ assertScheme(scheme) {
41
+ if (!!scheme) {
42
+ if (scheme.indexOf('#') === 0) {
43
+ vega.scheme(scheme, scheme.split(','));
44
+ this.schemeIds$.next([...new Set([...this.schemeIds$.getValue(), scheme])]);
45
+ }
46
+ }
47
+ }
48
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PrySchemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
49
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PrySchemeService, providedIn: 'root' }); }
50
+ }
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PrySchemeService, decorators: [{
52
+ type: Injectable,
53
+ args: [{ providedIn: 'root' }]
54
+ }], ctorParameters: function () { return []; } });
55
+
56
+ class PrySchemePickerComponent {
57
+ constructor(_cd, schemeService, i18nService) {
58
+ this._cd = _cd;
59
+ this.schemeService = schemeService;
60
+ this.i18nService = i18nService;
61
+ this.onChange = () => { };
62
+ this.onTouch = () => { };
63
+ this.scheme$ = new BehaviorSubject('Provoly');
64
+ this.inhibate = true;
65
+ this.disabled = false;
66
+ this.schemes$ = this.schemeService.schemeIds$.pipe(map((schemes) => {
67
+ let customNumber = 1;
68
+ return schemes.map((scheme, idx) => ({
69
+ id: scheme,
70
+ label: scheme.indexOf('#') === 0 ? this.i18nService.instant('@pry.widget.custom', { id: customNumber++ }) : scheme
71
+ }));
72
+ }));
73
+ this.schemeColors$ = this.scheme$.pipe(map((scheme) => this.schemeService.getSchemeColors(scheme)));
74
+ }
75
+ registerOnChange(fn) {
76
+ this.onChange = fn;
77
+ }
78
+ registerOnTouched(fn) {
79
+ this.onTouch = fn;
80
+ }
81
+ // Define what should happen in this component, if something changes outside
82
+ writeValue(scheme) {
83
+ if (this.scheme$.getValue() !== scheme && !this.inhibate) {
84
+ this.scheme$.next(scheme);
85
+ this.onChange(this.scheme$.getValue());
86
+ this.onTouch();
87
+ this._cd.markForCheck();
88
+ this.schemeService.assertScheme(this.scheme$.getValue());
89
+ this.temporaryDisable();
90
+ }
91
+ }
92
+ setDisabledState(isDisabled) {
93
+ this.disabled = isDisabled;
94
+ this._cd.markForCheck();
95
+ }
96
+ temporaryDisable() {
97
+ this.inhibate = true;
98
+ setTimeout(() => {
99
+ this.inhibate = false;
100
+ }, 100);
101
+ }
102
+ ngAfterViewInit() {
103
+ this.temporaryDisable();
104
+ }
105
+ changeColorScheme($event) {
106
+ if ($event === '#') {
107
+ this.writeValue(this.schemeService.getSchemeColors(this.schemeService.getDefaultScheme()).join(','));
108
+ }
109
+ else {
110
+ this.writeValue($event);
111
+ }
112
+ }
113
+ modifyColorScheme($event, index) {
114
+ if (!this.inhibate) {
115
+ const newScheme = [...this.schemeService.getSchemeColors(this.scheme$.getValue())];
116
+ newScheme[index] = $event;
117
+ this.writeValue(newScheme.join(','));
118
+ }
119
+ }
120
+ addColorToScheme() {
121
+ this.writeValue(this.schemeService
122
+ .getSchemeColors(this.scheme$.getValue())
123
+ .concat('#' + this.schemeService.randomColor())
124
+ .join(','));
125
+ }
126
+ removeColorFromScheme(index) {
127
+ const newScheme = [...this.schemeService.getSchemeColors(this.scheme$.getValue())];
128
+ newScheme.splice(index, 1);
129
+ this.writeValue(newScheme.join(','));
130
+ }
131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PrySchemePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: PrySchemeService }, { token: i2.PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PrySchemePickerComponent, selector: "pry-scheme-picker", providers: [
133
+ {
134
+ provide: NG_VALUE_ACCESSOR,
135
+ useExisting: forwardRef(() => PrySchemePickerComponent),
136
+ multi: true
137
+ }
138
+ ], ngImport: i0, template: "<div class=\"m-color-scheme\">\n <label class=\"a-label\" for=\"scheme\">{{ '@pry.widget.colorScheme' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"scheme$ | async\"\n [itemsAsOption]=\"true\"\n [items]=\"schemes$ | async\"\n id=\"scheme\"\n bindValue=\"id\"\n bindLabel=\"label\"\n ></pry-select>\n</div>\n\n<div class=\"m-color-scheme__display\">\n <div class=\"m-color-scheme__display__item\" *ngFor=\"let colorScheme of schemeColors$ | async; let i = index\">\n <pry-color-picker [ngModel]=\"colorScheme\" (ngModelChange)=\"modifyColorScheme($event, i)\"></pry-color-picker>\n <button\n (click)=\"removeColorFromScheme(i)\"\n class=\"a-btn a-btn--icon-only\"\n title=\"{{ '@pry.widget.removeColor' | i18n }}\"\n >\n <span class=\"u-visually-hidden\">{{ '@pry.widget.removeColor' | i18n }}</span>\n <pry-icon iconSvg=\"trash\"></pry-icon>\n </button>\n </div>\n <button\n (click)=\"addColorToScheme()\"\n class=\"a-btn a-btn--primary a-btn--icon-only\"\n title=\"{{ '@pry.widget.addColor' | i18n }}\"\n >\n <span class=\"u-visually-hidden\">{{ '@pry.widget.addColor' | i18n }}</span>\n <pry-icon iconSvg=\"add\"></pry-icon>\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i5.PryColorPickerComponent, selector: "pry-color-picker" }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }] }); }
139
+ }
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PrySchemePickerComponent, decorators: [{
141
+ type: Component,
142
+ args: [{ selector: 'pry-scheme-picker', providers: [
143
+ {
144
+ provide: NG_VALUE_ACCESSOR,
145
+ useExisting: forwardRef(() => PrySchemePickerComponent),
146
+ multi: true
147
+ }
148
+ ], template: "<div class=\"m-color-scheme\">\n <label class=\"a-label\" for=\"scheme\">{{ '@pry.widget.colorScheme' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"scheme$ | async\"\n [itemsAsOption]=\"true\"\n [items]=\"schemes$ | async\"\n id=\"scheme\"\n bindValue=\"id\"\n bindLabel=\"label\"\n ></pry-select>\n</div>\n\n<div class=\"m-color-scheme__display\">\n <div class=\"m-color-scheme__display__item\" *ngFor=\"let colorScheme of schemeColors$ | async; let i = index\">\n <pry-color-picker [ngModel]=\"colorScheme\" (ngModelChange)=\"modifyColorScheme($event, i)\"></pry-color-picker>\n <button\n (click)=\"removeColorFromScheme(i)\"\n class=\"a-btn a-btn--icon-only\"\n title=\"{{ '@pry.widget.removeColor' | i18n }}\"\n >\n <span class=\"u-visually-hidden\">{{ '@pry.widget.removeColor' | i18n }}</span>\n <pry-icon iconSvg=\"trash\"></pry-icon>\n </button>\n </div>\n <button\n (click)=\"addColorToScheme()\"\n class=\"a-btn a-btn--primary a-btn--icon-only\"\n title=\"{{ '@pry.widget.addColor' | i18n }}\"\n >\n <span class=\"u-visually-hidden\">{{ '@pry.widget.addColor' | i18n }}</span>\n <pry-icon iconSvg=\"add\"></pry-icon>\n </button>\n</div>\n" }]
149
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: PrySchemeService }, { type: i2.PryI18nService }]; } });
150
+
151
+ const PRY_SCHEMEPICKER_COMPONENTS = [PrySchemePickerComponent];
152
+ class PrySchemePickerModule {
153
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PrySchemePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
154
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.6", ngImport: i0, type: PrySchemePickerModule, declarations: [PrySchemePickerComponent], imports: [CommonModule, FormsModule, PryI18nModule, PrySelectModule, PryColorPickerModule, PryIconModule], exports: [PrySchemePickerComponent] }); }
155
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PrySchemePickerModule, imports: [CommonModule, FormsModule, PryI18nModule, PrySelectModule, PryColorPickerModule, PryIconModule] }); }
156
+ }
157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PrySchemePickerModule, decorators: [{
158
+ type: NgModule,
159
+ args: [{
160
+ imports: [CommonModule, FormsModule, PryI18nModule, PrySelectModule, PryColorPickerModule, PryIconModule],
161
+ declarations: [...PRY_SCHEMEPICKER_COMPONENTS],
162
+ exports: [...PRY_SCHEMEPICKER_COMPONENTS]
163
+ }]
164
+ }] });
165
+
166
+ /**
167
+ * Generated bundle index. Do not edit.
168
+ */
169
+
170
+ export { PrySchemePickerComponent, PrySchemePickerModule, PrySchemeService };
171
+ //# sourceMappingURL=provoly-dashboard-components-scheme-picker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provoly-dashboard-components-scheme-picker.mjs","sources":["../../../../projects/provoly/dashboard/components/scheme-picker/scheme.service.ts","../../../../projects/provoly/dashboard/components/scheme-picker/scheme-picker.component.ts","../../../../projects/provoly/dashboard/components/scheme-picker/scheme-picker.component.html","../../../../projects/provoly/dashboard/components/scheme-picker/scheme-picker.module.ts","../../../../projects/provoly/dashboard/components/scheme-picker/provoly-dashboard-components-scheme-picker.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\nimport {VegaColorType} from '@provoly/dashboard';\nimport {vega} from 'vega-embed';\n\n@Injectable({ providedIn: 'root' })\nexport class PrySchemeService {\n schemeIds$ = new BehaviorSubject<string[]>([]);\n\n constructor() {\n vega.scheme('KO/W/OK', ['#C04D3F', '#FD9843', '#9ABE29']);\n vega.scheme('Provoly', ['#113B6E', '#4E92E4', '#40B688', '#7BCCAD', '#FFC971', '#FD9843', '#EC547A']);\n this.schemeIds$.next(Object.values(VegaColorType));\n }\n\n getSchemeColors(scheme: string): string[] {\n if (!scheme) {\n return this.getSchemeColors(this.getDefaultScheme());\n }\n if (scheme.indexOf('#') === 0) {\n return scheme.split(',').map((color) => (color.indexOf('#') === 0 ? color : `#${color}`));\n }\n return vega.scheme(scheme) as string[];\n }\n\n getDefaultScheme() {\n return this.schemeIds$.getValue()[0];\n }\n\n randomColor() {\n return (\n '#' +\n Math.floor(Math.random() * 16777215)\n .toString(16)\n .padStart(6, '0')\n .toUpperCase()\n );\n }\n\n assertScheme(scheme: string) {\n if (!!scheme) {\n if (scheme.indexOf('#') === 0) {\n vega.scheme(scheme, scheme.split(','));\n this.schemeIds$.next([...new Set([...this.schemeIds$.getValue(), scheme])]);\n }\n }\n }\n}\n","import { AfterViewInit, ChangeDetectorRef, Component, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { PrySchemeService } from './scheme.service';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\nimport { PryI18nService } from '@provoly/dashboard';\n\n@Component({\n selector: 'pry-scheme-picker',\n templateUrl: './scheme-picker.component.html',\n\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PrySchemePickerComponent),\n multi: true\n }\n ]\n})\nexport class PrySchemePickerComponent implements ControlValueAccessor, AfterViewInit {\n onChange: any = () => {};\n onTouch: any = () => {};\n scheme$ = new BehaviorSubject<string>('Provoly');\n schemes$: Observable<{ id: string; label: string }[]>;\n inhibate = true;\n disabled = false;\n schemeColors$: Observable<string[]>;\n\n constructor(\n private _cd: ChangeDetectorRef,\n private schemeService: PrySchemeService,\n private i18nService: PryI18nService\n ) {\n this.schemes$ = this.schemeService.schemeIds$.pipe(\n map((schemes) => {\n let customNumber = 1;\n return schemes.map((scheme, idx) => ({\n id: scheme,\n label:\n scheme.indexOf('#') === 0 ? this.i18nService.instant('@pry.widget.custom', { id: customNumber++ }) : scheme\n }));\n })\n );\n this.schemeColors$ = this.scheme$.pipe(map((scheme) => this.schemeService.getSchemeColors(scheme)));\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n // Define what should happen in this component, if something changes outside\n writeValue(scheme: string) {\n if (this.scheme$.getValue() !== scheme && !this.inhibate) {\n this.scheme$.next(scheme);\n this.onChange(this.scheme$.getValue());\n this.onTouch();\n this._cd.markForCheck();\n this.schemeService.assertScheme(this.scheme$.getValue());\n this.temporaryDisable();\n }\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this._cd.markForCheck();\n }\n\n temporaryDisable() {\n this.inhibate = true;\n setTimeout(() => {\n this.inhibate = false;\n }, 100);\n }\n\n ngAfterViewInit(): void {\n this.temporaryDisable();\n }\n\n changeColorScheme($event: any) {\n if ($event === '#') {\n this.writeValue(this.schemeService.getSchemeColors(this.schemeService.getDefaultScheme()).join(','));\n } else {\n this.writeValue($event);\n }\n }\n\n modifyColorScheme($event: string, index: number) {\n if (!this.inhibate) {\n const newScheme = [...this.schemeService.getSchemeColors(this.scheme$.getValue())];\n newScheme[index] = $event;\n this.writeValue(newScheme.join(','));\n }\n }\n\n addColorToScheme() {\n this.writeValue(\n this.schemeService\n .getSchemeColors(this.scheme$.getValue())\n .concat('#' + this.schemeService.randomColor())\n .join(',')\n );\n }\n\n removeColorFromScheme(index: number) {\n const newScheme = [...this.schemeService.getSchemeColors(this.scheme$.getValue())];\n newScheme.splice(index, 1);\n this.writeValue(newScheme.join(','));\n }\n}\n","<div class=\"m-color-scheme\">\n <label class=\"a-label\" for=\"scheme\">{{ '@pry.widget.colorScheme' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"scheme$ | async\"\n [itemsAsOption]=\"true\"\n [items]=\"schemes$ | async\"\n id=\"scheme\"\n bindValue=\"id\"\n bindLabel=\"label\"\n ></pry-select>\n</div>\n\n<div class=\"m-color-scheme__display\">\n <div class=\"m-color-scheme__display__item\" *ngFor=\"let colorScheme of schemeColors$ | async; let i = index\">\n <pry-color-picker [ngModel]=\"colorScheme\" (ngModelChange)=\"modifyColorScheme($event, i)\"></pry-color-picker>\n <button\n (click)=\"removeColorFromScheme(i)\"\n class=\"a-btn a-btn--icon-only\"\n title=\"{{ '@pry.widget.removeColor' | i18n }}\"\n >\n <span class=\"u-visually-hidden\">{{ '@pry.widget.removeColor' | i18n }}</span>\n <pry-icon iconSvg=\"trash\"></pry-icon>\n </button>\n </div>\n <button\n (click)=\"addColorToScheme()\"\n class=\"a-btn a-btn--primary a-btn--icon-only\"\n title=\"{{ '@pry.widget.addColor' | i18n }}\"\n >\n <span class=\"u-visually-hidden\">{{ '@pry.widget.addColor' | i18n }}</span>\n <pry-icon iconSvg=\"add\"></pry-icon>\n </button>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { PrySchemePickerComponent } from './scheme-picker.component';\nimport { PryI18nModule, PryIconModule, PrySelectModule } from '@provoly/dashboard';\nimport { PryColorPickerModule } from '@provoly/dashboard/components/color-picker';\n\nconst PRY_SCHEMEPICKER_COMPONENTS = [PrySchemePickerComponent];\n\n@NgModule({\n imports: [CommonModule, FormsModule, PryI18nModule, PrySelectModule, PryColorPickerModule, PryIconModule],\n declarations: [...PRY_SCHEMEPICKER_COMPONENTS],\n exports: [...PRY_SCHEMEPICKER_COMPONENTS]\n})\nexport class PrySchemePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PrySchemeService"],"mappings":"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"}