@factor_ec/utils 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 ADDED
@@ -0,0 +1,24 @@
1
+ # Utils
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.0.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project utils` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project utils`.
8
+ > Note: Don't forget to add `--project utils` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build utils` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build utils`, go to the dist folder `cd dist/utils` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test utils` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yX2VjLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvdXRpbHMvc3JjL2ZhY3Rvcl9lYy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,162 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ColorService {
4
+ constructor() {
5
+ const options = {};
6
+ let LS = [options.lightness, options.saturation].map(function (param) {
7
+ param = param || [0.35, 0.5, 0.65]; // note that 3 is a prime
8
+ return Array.isArray(param) ? param.concat() : [param];
9
+ });
10
+ this.L = LS[0];
11
+ this.S = LS[1];
12
+ if (typeof options.hue === 'number') {
13
+ options.hue = { min: options.hue, max: options.hue };
14
+ }
15
+ if (typeof options.hue === 'object' && !Array.isArray(options.hue)) {
16
+ options.hue = [options.hue];
17
+ }
18
+ if (typeof options.hue === 'undefined') {
19
+ options.hue = [];
20
+ }
21
+ this.hueRanges = options.hue.map(function (range) {
22
+ return {
23
+ min: typeof range.min === 'undefined' ? 0 : range.min,
24
+ max: typeof range.max === 'undefined' ? 360 : range.max
25
+ };
26
+ });
27
+ }
28
+ /**
29
+ * BKDR Hash (modified version)
30
+ *
31
+ * @param str string to hash
32
+ */
33
+ hash(str) {
34
+ let seed = 131;
35
+ let seed2 = 137;
36
+ let hash = 0;
37
+ // make hash more sensitive for short string like 'a', 'b', 'c'
38
+ str += 'x';
39
+ // Note: Number.MAX_SAFE_INTEGER equals 9007199254740991
40
+ const maxSafeInteger = Math.round(9007199254740991 / seed2);
41
+ for (let i = 0; i < str.length; i++) {
42
+ if (hash > maxSafeInteger) {
43
+ hash = Math.round(hash / seed2);
44
+ }
45
+ hash = hash * seed + str.charCodeAt(i);
46
+ }
47
+ return hash;
48
+ }
49
+ ;
50
+ /**
51
+ * Convert RGB Array to HEX
52
+ *
53
+ * @param RGBArray - [R, G, B]
54
+ * @returns 6 digits hex starting with #
55
+ */
56
+ rgb2hex(RGBArray) {
57
+ let hex = '#';
58
+ RGBArray.forEach(function (value) {
59
+ if (value < 16) {
60
+ hex += 0;
61
+ }
62
+ hex += value.toString(16);
63
+ });
64
+ return hex;
65
+ }
66
+ ;
67
+ /**
68
+ * Convert HSL to RGB
69
+ *
70
+ * @see {@link http://zh.wikipedia.org/wiki/HSL和HSV色彩空间} for further information.
71
+ * @param H Hue ∈ [0, 360)
72
+ * @param S Saturation ∈ [0, 1]
73
+ * @param L Lightness ∈ [0, 1]
74
+ * @returns R, G, B ∈ [0, 255]
75
+ */
76
+ hsl2rgb(H, S, L) {
77
+ H /= 360;
78
+ let q = L < 0.5 ? L * (1 + S) : L + S - L * S;
79
+ let p = 2 * L - q;
80
+ return [H + 1 / 3, H, H - 1 / 3].map(function (color) {
81
+ if (color < 0) {
82
+ color++;
83
+ }
84
+ if (color > 1) {
85
+ color--;
86
+ }
87
+ if (color < 1 / 6) {
88
+ color = p + (q - p) * 6 * color;
89
+ }
90
+ else if (color < 0.5) {
91
+ color = q;
92
+ }
93
+ else if (color < 2 / 3) {
94
+ color = p + (q - p) * 6 * (2 / 3 - color);
95
+ }
96
+ else {
97
+ color = p;
98
+ }
99
+ return Math.round(color * 255);
100
+ });
101
+ }
102
+ ;
103
+ /**
104
+ * Returns the hash in [h, s, l].
105
+ * Note that H ∈ [0, 360); S ∈ [0, 1]; L ∈ [0, 1];
106
+ *
107
+ * @param str string to hash
108
+ * @returns [h, s, l]
109
+ */
110
+ hsl(str) {
111
+ let H;
112
+ let S;
113
+ let L;
114
+ let hash = this.hash(str);
115
+ if (this.hueRanges.length) {
116
+ let range = this.hueRanges[hash % this.hueRanges.length];
117
+ let hueResolution = 727; // note that 727 is a prime
118
+ H = ((hash / this.hueRanges.length) % hueResolution) * (range.max - range.min) / hueResolution + range.min;
119
+ }
120
+ else {
121
+ H = hash % 359; // note that 359 is a prime
122
+ }
123
+ hash = Math.round(hash / 360);
124
+ S = this.S[hash % this.S.length];
125
+ hash = Math.round(hash / this.S.length);
126
+ L = this.L[hash % this.L.length];
127
+ return [H, S, L];
128
+ }
129
+ ;
130
+ /**
131
+ * Returns the hash in [r, g, b].
132
+ * Note that R, G, B ∈ [0, 255]
133
+ *
134
+ * @param str string to hash
135
+ * @returns [r, g, b]
136
+ */
137
+ rgb(str) {
138
+ let hsl = this.hsl(str);
139
+ return this.hsl2rgb(hsl[0], hsl[1], hsl[2]);
140
+ }
141
+ ;
142
+ /**
143
+ * Returns the hash in hex
144
+ *
145
+ * @param str string to hash
146
+ * @returns hex with #
147
+ */
148
+ hex(str) {
149
+ let rgb = this.rgb(str);
150
+ return this.rgb2hex(rgb);
151
+ }
152
+ ;
153
+ }
154
+ ColorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ColorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
155
+ ColorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ColorService, providedIn: 'root' });
156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ColorService, decorators: [{
157
+ type: Injectable,
158
+ args: [{
159
+ providedIn: 'root'
160
+ }]
161
+ }], ctorParameters: function () { return []; } });
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL3NyYy9saWIvY29sb3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sWUFBWTtJQUt2QjtRQUNFLE1BQU0sT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUN4QixJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFTLEtBQUs7WUFDakUsS0FBSyxHQUFHLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyx5QkFBeUI7WUFDN0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWYsSUFBSSxPQUFPLE9BQU8sQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQ25DLE9BQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxPQUFPLE9BQU8sQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEUsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3QjtRQUNELElBQUksT0FBTyxPQUFPLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRTtZQUN0QyxPQUFPLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztTQUNsQjtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBUyxLQUFpQztZQUN6RSxPQUFPO2dCQUNMLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO2dCQUNyRCxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRzthQUN4RCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxHQUFXO1FBQ2QsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLCtEQUErRDtRQUMvRCxHQUFHLElBQUksR0FBRyxDQUFDO1FBQ1gsd0RBQXdEO1FBQ3hELE1BQU0sY0FBYyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDcEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxJQUFJLEdBQUcsY0FBYyxFQUFFO2dCQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7YUFDakM7WUFDRCxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUEsQ0FBQztJQUVGOzs7OztLQUtDO0lBQ0QsT0FBTyxDQUFDLFFBQWtCO1FBQ3hCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNkLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBUyxLQUFLO1lBQzdCLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRTtnQkFDZCxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQ1Y7WUFDRCxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUFBLENBQUM7SUFFRjs7Ozs7Ozs7T0FRRztJQUNILE9BQU8sQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7UUFDckMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUVULElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBUyxLQUFLO1lBQ2pELElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtnQkFDYixLQUFLLEVBQUUsQ0FBQzthQUNUO1lBQ0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO2dCQUNiLEtBQUssRUFBRSxDQUFDO2FBQ1Q7WUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQixLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDakM7aUJBQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO2dCQUN0QixLQUFLLEdBQUcsQ0FBQyxDQUFDO2FBQ1g7aUJBQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDeEIsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO2FBQzNDO2lCQUFNO2dCQUNMLEtBQUssR0FBRyxDQUFDLENBQUM7YUFDWDtZQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUEsQ0FBQztJQUdGOzs7Ozs7T0FNRztJQUNILEdBQUcsQ0FBQyxHQUFXO1FBQ2IsSUFBSSxDQUFDLENBQUM7UUFDTixJQUFJLENBQUMsQ0FBQztRQUNOLElBQUksQ0FBQyxDQUFDO1FBQ04sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekQsSUFBSSxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQUMsMkJBQTJCO1lBQ3BELENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUM1RzthQUFNO1lBQ0wsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQywyQkFBMkI7U0FDNUM7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUFBLENBQUM7SUFFRjs7Ozs7O09BTUc7SUFDSCxHQUFHLENBQUMsR0FBVztRQUNiLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUFBLENBQUM7SUFFRjs7Ozs7T0FLRztJQUNILEdBQUcsQ0FBQyxHQUFXO1FBQ2IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUFBLENBQUM7O3lHQTVKUyxZQUFZOzZHQUFaLFlBQVksY0FGWCxNQUFNOzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb2xvclNlcnZpY2Uge1xuICBMOiBudW1iZXJbXTtcbiAgUzogbnVtYmVyW107XG4gIGh1ZVJhbmdlczoge21pbjogbnVtYmVyLCBtYXg6IG51bWJlcn1bXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7fTtcbiAgICBsZXQgTFMgPSBbb3B0aW9ucy5saWdodG5lc3MsIG9wdGlvbnMuc2F0dXJhdGlvbl0ubWFwKGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICBwYXJhbSA9IHBhcmFtIHx8IFswLjM1LCAwLjUsIDAuNjVdOyAvLyBub3RlIHRoYXQgMyBpcyBhIHByaW1lXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXJhbSkgPyBwYXJhbS5jb25jYXQoKSA6IFtwYXJhbV07XG4gICAgfSk7XG5cbiAgICB0aGlzLkwgPSBMU1swXTtcbiAgICB0aGlzLlMgPSBMU1sxXTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5odWUgPT09ICdudW1iZXInKSB7XG4gICAgICBvcHRpb25zLmh1ZSA9IHsgbWluOiBvcHRpb25zLmh1ZSwgbWF4OiBvcHRpb25zLmh1ZSB9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuaHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShvcHRpb25zLmh1ZSkpIHtcbiAgICAgIG9wdGlvbnMuaHVlID0gW29wdGlvbnMuaHVlXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmh1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdGlvbnMuaHVlID0gW107XG4gICAgfVxuICAgIHRoaXMuaHVlUmFuZ2VzID0gb3B0aW9ucy5odWUubWFwKGZ1bmN0aW9uKHJhbmdlOiB7bWluOiBudW1iZXIsIG1heDogbnVtYmVyfSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWluOiB0eXBlb2YgcmFuZ2UubWluID09PSAndW5kZWZpbmVkJyA/IDAgOiByYW5nZS5taW4sXG4gICAgICAgIG1heDogdHlwZW9mIHJhbmdlLm1heCA9PT0gJ3VuZGVmaW5lZCcgPyAzNjAgOiByYW5nZS5tYXhcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQktEUiBIYXNoIChtb2RpZmllZCB2ZXJzaW9uKVxuICAgKlxuICAgKiBAcGFyYW0gc3RyIHN0cmluZyB0byBoYXNoXG4gICAqL1xuICBoYXNoKHN0cjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgc2VlZCA9IDEzMTtcbiAgICBsZXQgc2VlZDIgPSAxMzc7XG4gICAgbGV0IGhhc2ggPSAwO1xuICAgIC8vIG1ha2UgaGFzaCBtb3JlIHNlbnNpdGl2ZSBmb3Igc2hvcnQgc3RyaW5nIGxpa2UgJ2EnLCAnYicsICdjJ1xuICAgIHN0ciArPSAneCc7XG4gICAgLy8gTm90ZTogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgZXF1YWxzIDkwMDcxOTkyNTQ3NDA5OTFcbiAgICBjb25zdCBtYXhTYWZlSW50ZWdlcjogbnVtYmVyID0gTWF0aC5yb3VuZCg5MDA3MTk5MjU0NzQwOTkxIC8gc2VlZDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaGFzaCA+IG1heFNhZmVJbnRlZ2VyKSB7XG4gICAgICAgIGhhc2ggPSBNYXRoLnJvdW5kKGhhc2ggLyBzZWVkMik7XG4gICAgICB9XG4gICAgICBoYXNoID0gaGFzaCAqIHNlZWQgKyBzdHIuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2g7XG4gIH07XG5cbiAgLyoqXG4gKiBDb252ZXJ0IFJHQiBBcnJheSB0byBIRVhcbiAqXG4gKiBAcGFyYW0gUkdCQXJyYXkgLSBbUiwgRywgQl1cbiAqIEByZXR1cm5zIDYgZGlnaXRzIGhleCBzdGFydGluZyB3aXRoICNcbiAqL1xuICByZ2IyaGV4KFJHQkFycmF5OiBudW1iZXJbXSk6IHN0cmluZyB7XG4gICAgbGV0IGhleCA9ICcjJztcbiAgICBSR0JBcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPCAxNikge1xuICAgICAgICBoZXggKz0gMDtcbiAgICAgIH1cbiAgICAgIGhleCArPSB2YWx1ZS50b1N0cmluZygxNik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGhleDtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydCBIU0wgdG8gUkdCXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHA6Ly96aC53aWtpcGVkaWEub3JnL3dpa2kvSFNM5ZKMSFNW6Imy5b2p56m66Ze0fSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtIEggSHVlIOKIiCBbMCwgMzYwKVxuICAgKiBAcGFyYW0gUyBTYXR1cmF0aW9uIOKIiCBbMCwgMV1cbiAgICogQHBhcmFtIEwgTGlnaHRuZXNzIOKIiCBbMCwgMV1cbiAgICogQHJldHVybnMgUiwgRywgQiDiiIggWzAsIDI1NV1cbiAgICovXG4gIGhzbDJyZ2IoSDogbnVtYmVyLCBTOiBudW1iZXIsIEw6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBIIC89IDM2MDtcblxuICAgIGxldCBxID0gTCA8IDAuNSA/IEwgKiAoMSArIFMpIDogTCArIFMgLSBMICogUztcbiAgICBsZXQgcCA9IDIgKiBMIC0gcTtcblxuICAgIHJldHVybiBbSCArIDEgLyAzLCBILCBIIC0gMSAvIDNdLm1hcChmdW5jdGlvbihjb2xvcikge1xuICAgICAgaWYgKGNvbG9yIDwgMCkge1xuICAgICAgICBjb2xvcisrO1xuICAgICAgfVxuICAgICAgaWYgKGNvbG9yID4gMSkge1xuICAgICAgICBjb2xvci0tO1xuICAgICAgfVxuICAgICAgaWYgKGNvbG9yIDwgMSAvIDYpIHtcbiAgICAgICAgY29sb3IgPSBwICsgKHEgLSBwKSAqIDYgKiBjb2xvcjtcbiAgICAgIH0gZWxzZSBpZiAoY29sb3IgPCAwLjUpIHtcbiAgICAgICAgY29sb3IgPSBxO1xuICAgICAgfSBlbHNlIGlmIChjb2xvciA8IDIgLyAzKSB7XG4gICAgICAgIGNvbG9yID0gcCArIChxIC0gcCkgKiA2ICogKDIgLyAzIC0gY29sb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sb3IgPSBwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE1hdGgucm91bmQoY29sb3IgKiAyNTUpO1xuICAgIH0pO1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGhhc2ggaW4gW2gsIHMsIGxdLlxuICAgKiBOb3RlIHRoYXQgSCDiiIggWzAsIDM2MCk7IFMg4oiIIFswLCAxXTsgTCDiiIggWzAsIDFdO1xuICAgKlxuICAgKiBAcGFyYW0gc3RyIHN0cmluZyB0byBoYXNoXG4gICAqIEByZXR1cm5zIFtoLCBzLCBsXVxuICAgKi9cbiAgaHNsKHN0cjogc3RyaW5nKTogYW55W10ge1xuICAgIGxldCBIO1xuICAgIGxldCBTO1xuICAgIGxldCBMO1xuICAgIGxldCBoYXNoID0gdGhpcy5oYXNoKHN0cik7XG5cbiAgICBpZiAodGhpcy5odWVSYW5nZXMubGVuZ3RoKSB7XG4gICAgICBsZXQgcmFuZ2UgPSB0aGlzLmh1ZVJhbmdlc1toYXNoICUgdGhpcy5odWVSYW5nZXMubGVuZ3RoXTtcbiAgICAgIGxldCBodWVSZXNvbHV0aW9uID0gNzI3OyAvLyBub3RlIHRoYXQgNzI3IGlzIGEgcHJpbWVcbiAgICAgIEggPSAoKGhhc2ggLyB0aGlzLmh1ZVJhbmdlcy5sZW5ndGgpICUgaHVlUmVzb2x1dGlvbikgKiAocmFuZ2UubWF4IC0gcmFuZ2UubWluKSAvIGh1ZVJlc29sdXRpb24gKyByYW5nZS5taW47XG4gICAgfSBlbHNlIHtcbiAgICAgIEggPSBoYXNoICUgMzU5OyAvLyBub3RlIHRoYXQgMzU5IGlzIGEgcHJpbWVcbiAgICB9XG4gICAgaGFzaCA9IE1hdGgucm91bmQoaGFzaCAvIDM2MCk7XG4gICAgUyA9IHRoaXMuU1toYXNoICUgdGhpcy5TLmxlbmd0aF07XG4gICAgaGFzaCA9IE1hdGgucm91bmQoaGFzaCAvIHRoaXMuUy5sZW5ndGgpO1xuICAgIEwgPSB0aGlzLkxbaGFzaCAlIHRoaXMuTC5sZW5ndGhdO1xuXG4gICAgcmV0dXJuIFtILCBTLCBMXTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaGFzaCBpbiBbciwgZywgYl0uXG4gICAqIE5vdGUgdGhhdCBSLCBHLCBCIOKIiCBbMCwgMjU1XVxuICAgKlxuICAgKiBAcGFyYW0gc3RyIHN0cmluZyB0byBoYXNoXG4gICAqIEByZXR1cm5zIFtyLCBnLCBiXVxuICAgKi9cbiAgcmdiKHN0cjogc3RyaW5nKTogbnVtYmVyW10ge1xuICAgIGxldCBoc2wgPSB0aGlzLmhzbChzdHIpO1xuICAgIHJldHVybiB0aGlzLmhzbDJyZ2IoaHNsWzBdLCBoc2xbMV0sIGhzbFsyXSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGhhc2ggaW4gaGV4XG4gICAqXG4gICAqIEBwYXJhbSBzdHIgc3RyaW5nIHRvIGhhc2hcbiAgICogQHJldHVybnMgaGV4IHdpdGggI1xuICAgKi9cbiAgaGV4KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmdiID0gdGhpcy5yZ2Ioc3RyKTtcbiAgICByZXR1cm4gdGhpcy5yZ2IyaGV4KHJnYik7XG4gIH07XG59Il19
@@ -0,0 +1,47 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class FilesService {
4
+ constructor() {
5
+ this.fileInput = document.createElement('input');
6
+ this.fileInput.type = 'file';
7
+ this.fileInput.addEventListener('change', (event) => {
8
+ this.loadValue(event.currentTarget.files);
9
+ });
10
+ }
11
+ loadValue(files) {
12
+ if (files && files.length > 0) {
13
+ let data = [];
14
+ for (let i = 0; i < files.length; i++) {
15
+ const file = files.item(i);
16
+ const reader = new FileReader();
17
+ reader.readAsDataURL(file);
18
+ reader.onload = () => {
19
+ data.push(Object.assign(file, {
20
+ data: reader.result
21
+ }));
22
+ if (data.length == files.length) {
23
+ this.callback(data.length > 0 ? data : null);
24
+ this.fileInput.value = '';
25
+ }
26
+ };
27
+ }
28
+ }
29
+ }
30
+ open(callback, options) {
31
+ this.fileInput.accept = options?.accept ? options.accept : '';
32
+ this.fileInput.multiple = options?.multiple || false;
33
+ this.fileInput.click();
34
+ if (callback) {
35
+ this.callback = callback;
36
+ }
37
+ }
38
+ }
39
+ FilesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FilesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
40
+ FilesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FilesService, providedIn: 'root' });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FilesService, decorators: [{
42
+ type: Injectable,
43
+ args: [{
44
+ providedIn: 'root'
45
+ }]
46
+ }], ctorParameters: function () { return []; } });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL3NyYy9saWIvZmlsZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sWUFBWTtJQUl2QjtRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ08sU0FBUyxDQUFDLEtBQWU7UUFDL0IsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxJQUFJLEdBQVUsRUFBRSxDQUFDO1lBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxNQUFNLElBQUksR0FBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTt3QkFDNUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNO3FCQUNwQixDQUFDLENBQUMsQ0FBQztvQkFDSixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTt3QkFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO3FCQUMzQjtnQkFDSCxDQUFDLENBQUM7YUFDSDtTQUNGO0lBQ0gsQ0FBQztJQUNNLElBQUksQ0FBQyxRQUFtQixFQUFFLE9BQWlEO1FBQ2hGLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQztRQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7U0FDMUI7SUFDSCxDQUFDOzt5R0FyQ1UsWUFBWTs2R0FBWixZQUFZLGNBRlgsTUFBTTsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRmlsZXNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjYWxsYmFjayE6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGZpbGVJbnB1dDogSFRNTElucHV0RWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmZpbGVJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgdGhpcy5maWxlSW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICB0aGlzLmZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5sb2FkVmFsdWUoZXZlbnQuY3VycmVudFRhcmdldC5maWxlcyk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBsb2FkVmFsdWUoZmlsZXM6IEZpbGVMaXN0KSB7XG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBkYXRhOiBhbnlbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBmaWxlOiBhbnkgPSBmaWxlcy5pdGVtKGkpO1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICBkYXRhLnB1c2goT2JqZWN0LmFzc2lnbihmaWxlLCB7XG4gICAgICAgICAgICBkYXRhOiByZWFkZXIucmVzdWx0XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PSBmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2soZGF0YS5sZW5ndGggPiAwID8gZGF0YSA6IG51bGwpO1xuICAgICAgICAgICAgdGhpcy5maWxlSW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvcGVuKGNhbGxiYWNrPzogRnVuY3Rpb24sIG9wdGlvbnM/OiB7IGFjY2VwdD86IHN0cmluZywgbXVsdGlwbGU/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLmZpbGVJbnB1dC5hY2NlcHQgPSBvcHRpb25zPy5hY2NlcHQgPyBvcHRpb25zLmFjY2VwdCA6ICcnO1xuICAgIHRoaXMuZmlsZUlucHV0Lm11bHRpcGxlID0gb3B0aW9ucz8ubXVsdGlwbGUgfHwgZmFsc2U7XG4gICAgdGhpcy5maWxlSW5wdXQuY2xpY2soKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,75 @@
1
+ import { isPlatformBrowser } from '@angular/common';
2
+ import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
3
+ import { NavigationEnd } from '@angular/router';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/router";
6
+ export class GoogleTagManagerService {
7
+ constructor(platformId, router) {
8
+ this.platformId = platformId;
9
+ this.router = router;
10
+ }
11
+ appendTrackingCode(trackingId) {
12
+ try {
13
+ if (isPlatformBrowser(this.platformId) && trackingId) {
14
+ this.trackingId = trackingId;
15
+ const s1 = document.createElement('script');
16
+ s1.innerHTML = `
17
+ (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
18
+ new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
19
+ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
20
+ '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
21
+ })(window,document,'script','dataLayer','${trackingId}');
22
+ `;
23
+ document.head.appendChild(s1);
24
+ const s2 = document.createElement('noscript');
25
+ const s3 = document.createElement('iframe');
26
+ s3.width = '0';
27
+ s3.height = '0';
28
+ s3.style.display = 'none';
29
+ s3.style.visibility = 'hidden';
30
+ s3.src = `//www.googletagmanager.com/ns.html?id=${trackingId}`;
31
+ s2.appendChild(s3);
32
+ document.body.prepend(s2);
33
+ this.initSubscribers();
34
+ }
35
+ }
36
+ catch (ex) {
37
+ console.error('Error appending google tag manager');
38
+ console.error(ex);
39
+ }
40
+ }
41
+ addVariable(variable) {
42
+ if (isPlatformBrowser(this.platformId) && this.trackingId) {
43
+ window.dataLayer = window.dataLayer || [];
44
+ window.dataLayer.push(variable);
45
+ }
46
+ }
47
+ initSubscribers() {
48
+ this.router.events.subscribe(event => {
49
+ try {
50
+ if (event instanceof NavigationEnd && this.trackingId) {
51
+ this.addVariable({
52
+ event: 'router.NavigationEnd',
53
+ pageTitle: document.title,
54
+ pagePath: event.urlAfterRedirects
55
+ });
56
+ }
57
+ }
58
+ catch (e) {
59
+ console.error(e);
60
+ }
61
+ });
62
+ }
63
+ }
64
+ GoogleTagManagerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GoogleTagManagerService, deps: [{ token: PLATFORM_ID }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
65
+ GoogleTagManagerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GoogleTagManagerService, providedIn: 'root' });
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GoogleTagManagerService, decorators: [{
67
+ type: Injectable,
68
+ args: [{
69
+ providedIn: 'root'
70
+ }]
71
+ }], ctorParameters: function () { return [{ type: Object, decorators: [{
72
+ type: Inject,
73
+ args: [PLATFORM_ID]
74
+ }] }, { type: i1.Router }]; } });
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91dGlscy9zcmMvbGliL2dvb2dsZS10YWctbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFVLE1BQU0saUJBQWlCLENBQUM7OztBQU94RCxNQUFNLE9BQU8sdUJBQXVCO0lBR2xDLFlBQytCLFVBQWtCLEVBQ3hDLE1BQWM7UUFEUSxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ3hDLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDbkIsQ0FBQztJQUVFLGtCQUFrQixDQUFDLFVBQWtCO1FBQzFDLElBQUk7WUFDRixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO2dCQUM3QixNQUFNLEVBQUUsR0FBZ0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekQsRUFBRSxDQUFDLFNBQVMsR0FBRzs7Ozs7cURBSzhCLFVBQVU7U0FDdEQsQ0FBQztnQkFDRixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxFQUFFLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzNELE1BQU0sRUFBRSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvRCxFQUFFLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztnQkFDZixFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztnQkFDaEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO2dCQUMxQixFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7Z0JBQy9CLEVBQUUsQ0FBQyxHQUFHLEdBQUcseUNBQXlDLFVBQVUsRUFBRSxDQUFBO2dCQUM5RCxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixRQUFRLENBQUMsSUFBb0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN4QjtTQUNGO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7WUFDcEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFDTSxXQUFXLENBQUMsUUFBYTtRQUM5QixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3pELE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDMUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBQ08sZUFBZTtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSTtnQkFDQSxJQUFJLEtBQUssWUFBWSxhQUFhLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDckQsSUFBSSxDQUFDLFdBQVcsQ0FBQzt3QkFDZixLQUFLLEVBQUMsc0JBQXNCO3dCQUM1QixTQUFTLEVBQUUsUUFBUSxDQUFDLEtBQUs7d0JBQ3pCLFFBQVEsRUFBRSxLQUFLLENBQUMsaUJBQWlCO3FCQUNsQyxDQUFDLENBQUM7aUJBQ0o7YUFDSjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O29IQXpEVSx1QkFBdUIsa0JBSXhCLFdBQVc7d0hBSlYsdUJBQXVCLGNBRnRCLE1BQU07MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjswREFLNEMsTUFBTTswQkFBOUMsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEdvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlIHtcbiAgdHJhY2tpbmdJZCE6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCxcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXJcbiAgKSB7IH1cblxuICBwdWJsaWMgYXBwZW5kVHJhY2tpbmdDb2RlKHRyYWNraW5nSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSAmJiB0cmFja2luZ0lkKSB7XG4gICAgICAgIHRoaXMudHJhY2tpbmdJZCA9IHRyYWNraW5nSWQ7XG4gICAgICAgIGNvbnN0IHMxOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICBzMS5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgKGZ1bmN0aW9uKHcsZCxzLGwsaSl7d1tsXT13W2xdfHxbXTt3W2xdLnB1c2goeydndG0uc3RhcnQnOlxuICAgICAgICAgIG5ldyBEYXRlKCkuZ2V0VGltZSgpLGV2ZW50OidndG0uanMnfSk7dmFyIGY9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXSxcbiAgICAgICAgICBqPWQuY3JlYXRlRWxlbWVudChzKSxkbD1sIT0nZGF0YUxheWVyJz8nJmw9JytsOicnO2ouYXN5bmM9dHJ1ZTtqLnNyYz1cbiAgICAgICAgICAnLy93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RtLmpzP2lkPScraStkbDtmLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGosZik7XG4gICAgICAgICAgfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCdkYXRhTGF5ZXInLCcke3RyYWNraW5nSWR9Jyk7XG4gICAgICAgIGA7XG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoczEpO1xuICAgICAgICBjb25zdCBzMjogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdub3NjcmlwdCcpO1xuICAgICAgICBjb25zdCBzMzogSFRNTElGcmFtZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICAgICAgczMud2lkdGggPSAnMCc7XG4gICAgICAgIHMzLmhlaWdodCA9ICcwJztcbiAgICAgICAgczMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgczMuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICBzMy5zcmMgPSBgLy93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vbnMuaHRtbD9pZD0ke3RyYWNraW5nSWR9YFxuICAgICAgICBzMi5hcHBlbmRDaGlsZChzMyk7XG4gICAgICAgIChkb2N1bWVudC5ib2R5IGFzIEhUTUxFbGVtZW50KS5wcmVwZW5kKHMyKTtcbiAgICAgICAgdGhpcy5pbml0U3Vic2NyaWJlcnMoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYXBwZW5kaW5nIGdvb2dsZSB0YWcgbWFuYWdlcicpO1xuICAgICAgY29uc29sZS5lcnJvcihleCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBhZGRWYXJpYWJsZSh2YXJpYWJsZTogYW55KSB7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgJiYgdGhpcy50cmFja2luZ0lkKSB7XG4gICAgICB3aW5kb3cuZGF0YUxheWVyID0gd2luZG93LmRhdGFMYXllciB8fCBbXTtcbiAgICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaCh2YXJpYWJsZSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaW5pdFN1YnNjcmliZXJzKCkge1xuICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kICYmIHRoaXMudHJhY2tpbmdJZCkge1xuICAgICAgICAgICAgdGhpcy5hZGRWYXJpYWJsZSh7XG4gICAgICAgICAgICAgIGV2ZW50Oidyb3V0ZXIuTmF2aWdhdGlvbkVuZCcsIFxuICAgICAgICAgICAgICBwYWdlVGl0bGU6IGRvY3VtZW50LnRpdGxlLFxuICAgICAgICAgICAgICBwYWdlUGF0aDogZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,16 @@
1
+ import { NgModule } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class UtilsModule {
4
+ }
5
+ UtilsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: UtilsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
6
+ UtilsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.0", ngImport: i0, type: UtilsModule });
7
+ UtilsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: UtilsModule });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: UtilsModule, decorators: [{
9
+ type: NgModule,
10
+ args: [{
11
+ declarations: [],
12
+ imports: [],
13
+ exports: []
14
+ }]
15
+ }] });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdXRpbHMvc3JjL2xpYi91dGlscy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFVekMsTUFBTSxPQUFPLFdBQVc7O3dHQUFYLFdBQVc7eUdBQVgsV0FBVzt5R0FBWCxXQUFXOzJGQUFYLFdBQVc7a0JBUnZCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQ2I7b0JBQ0QsT0FBTyxFQUFFLEVBQ1I7b0JBQ0QsT0FBTyxFQUFFLEVBQ1I7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgXSxcbiAgaW1wb3J0czogW1xuICBdLFxuICBleHBvcnRzOiBbXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVXRpbHNNb2R1bGUgeyB9XG4iXX0=
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Public API Surface of utils
3
+ */
4
+ export * from './lib/color.service';
5
+ export * from './lib/files.service';
6
+ export * from './lib/google-tag-manager.service';
7
+ export * from './lib/utils.module';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdXRpbHNcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb2xvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpbGVzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMubW9kdWxlJztcbiJdfQ==
@@ -0,0 +1,307 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, PLATFORM_ID, Inject, NgModule } from '@angular/core';
3
+ import { isPlatformBrowser } from '@angular/common';
4
+ import * as i1 from '@angular/router';
5
+ import { NavigationEnd } from '@angular/router';
6
+
7
+ class ColorService {
8
+ constructor() {
9
+ const options = {};
10
+ let LS = [options.lightness, options.saturation].map(function (param) {
11
+ param = param || [0.35, 0.5, 0.65]; // note that 3 is a prime
12
+ return Array.isArray(param) ? param.concat() : [param];
13
+ });
14
+ this.L = LS[0];
15
+ this.S = LS[1];
16
+ if (typeof options.hue === 'number') {
17
+ options.hue = { min: options.hue, max: options.hue };
18
+ }
19
+ if (typeof options.hue === 'object' && !Array.isArray(options.hue)) {
20
+ options.hue = [options.hue];
21
+ }
22
+ if (typeof options.hue === 'undefined') {
23
+ options.hue = [];
24
+ }
25
+ this.hueRanges = options.hue.map(function (range) {
26
+ return {
27
+ min: typeof range.min === 'undefined' ? 0 : range.min,
28
+ max: typeof range.max === 'undefined' ? 360 : range.max
29
+ };
30
+ });
31
+ }
32
+ /**
33
+ * BKDR Hash (modified version)
34
+ *
35
+ * @param str string to hash
36
+ */
37
+ hash(str) {
38
+ let seed = 131;
39
+ let seed2 = 137;
40
+ let hash = 0;
41
+ // make hash more sensitive for short string like 'a', 'b', 'c'
42
+ str += 'x';
43
+ // Note: Number.MAX_SAFE_INTEGER equals 9007199254740991
44
+ const maxSafeInteger = Math.round(9007199254740991 / seed2);
45
+ for (let i = 0; i < str.length; i++) {
46
+ if (hash > maxSafeInteger) {
47
+ hash = Math.round(hash / seed2);
48
+ }
49
+ hash = hash * seed + str.charCodeAt(i);
50
+ }
51
+ return hash;
52
+ }
53
+ ;
54
+ /**
55
+ * Convert RGB Array to HEX
56
+ *
57
+ * @param RGBArray - [R, G, B]
58
+ * @returns 6 digits hex starting with #
59
+ */
60
+ rgb2hex(RGBArray) {
61
+ let hex = '#';
62
+ RGBArray.forEach(function (value) {
63
+ if (value < 16) {
64
+ hex += 0;
65
+ }
66
+ hex += value.toString(16);
67
+ });
68
+ return hex;
69
+ }
70
+ ;
71
+ /**
72
+ * Convert HSL to RGB
73
+ *
74
+ * @see {@link http://zh.wikipedia.org/wiki/HSL和HSV色彩空间} for further information.
75
+ * @param H Hue ∈ [0, 360)
76
+ * @param S Saturation ∈ [0, 1]
77
+ * @param L Lightness ∈ [0, 1]
78
+ * @returns R, G, B ∈ [0, 255]
79
+ */
80
+ hsl2rgb(H, S, L) {
81
+ H /= 360;
82
+ let q = L < 0.5 ? L * (1 + S) : L + S - L * S;
83
+ let p = 2 * L - q;
84
+ return [H + 1 / 3, H, H - 1 / 3].map(function (color) {
85
+ if (color < 0) {
86
+ color++;
87
+ }
88
+ if (color > 1) {
89
+ color--;
90
+ }
91
+ if (color < 1 / 6) {
92
+ color = p + (q - p) * 6 * color;
93
+ }
94
+ else if (color < 0.5) {
95
+ color = q;
96
+ }
97
+ else if (color < 2 / 3) {
98
+ color = p + (q - p) * 6 * (2 / 3 - color);
99
+ }
100
+ else {
101
+ color = p;
102
+ }
103
+ return Math.round(color * 255);
104
+ });
105
+ }
106
+ ;
107
+ /**
108
+ * Returns the hash in [h, s, l].
109
+ * Note that H ∈ [0, 360); S ∈ [0, 1]; L ∈ [0, 1];
110
+ *
111
+ * @param str string to hash
112
+ * @returns [h, s, l]
113
+ */
114
+ hsl(str) {
115
+ let H;
116
+ let S;
117
+ let L;
118
+ let hash = this.hash(str);
119
+ if (this.hueRanges.length) {
120
+ let range = this.hueRanges[hash % this.hueRanges.length];
121
+ let hueResolution = 727; // note that 727 is a prime
122
+ H = ((hash / this.hueRanges.length) % hueResolution) * (range.max - range.min) / hueResolution + range.min;
123
+ }
124
+ else {
125
+ H = hash % 359; // note that 359 is a prime
126
+ }
127
+ hash = Math.round(hash / 360);
128
+ S = this.S[hash % this.S.length];
129
+ hash = Math.round(hash / this.S.length);
130
+ L = this.L[hash % this.L.length];
131
+ return [H, S, L];
132
+ }
133
+ ;
134
+ /**
135
+ * Returns the hash in [r, g, b].
136
+ * Note that R, G, B ∈ [0, 255]
137
+ *
138
+ * @param str string to hash
139
+ * @returns [r, g, b]
140
+ */
141
+ rgb(str) {
142
+ let hsl = this.hsl(str);
143
+ return this.hsl2rgb(hsl[0], hsl[1], hsl[2]);
144
+ }
145
+ ;
146
+ /**
147
+ * Returns the hash in hex
148
+ *
149
+ * @param str string to hash
150
+ * @returns hex with #
151
+ */
152
+ hex(str) {
153
+ let rgb = this.rgb(str);
154
+ return this.rgb2hex(rgb);
155
+ }
156
+ ;
157
+ }
158
+ ColorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ColorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
159
+ ColorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ColorService, providedIn: 'root' });
160
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ColorService, decorators: [{
161
+ type: Injectable,
162
+ args: [{
163
+ providedIn: 'root'
164
+ }]
165
+ }], ctorParameters: function () { return []; } });
166
+
167
+ class FilesService {
168
+ constructor() {
169
+ this.fileInput = document.createElement('input');
170
+ this.fileInput.type = 'file';
171
+ this.fileInput.addEventListener('change', (event) => {
172
+ this.loadValue(event.currentTarget.files);
173
+ });
174
+ }
175
+ loadValue(files) {
176
+ if (files && files.length > 0) {
177
+ let data = [];
178
+ for (let i = 0; i < files.length; i++) {
179
+ const file = files.item(i);
180
+ const reader = new FileReader();
181
+ reader.readAsDataURL(file);
182
+ reader.onload = () => {
183
+ data.push(Object.assign(file, {
184
+ data: reader.result
185
+ }));
186
+ if (data.length == files.length) {
187
+ this.callback(data.length > 0 ? data : null);
188
+ this.fileInput.value = '';
189
+ }
190
+ };
191
+ }
192
+ }
193
+ }
194
+ open(callback, options) {
195
+ this.fileInput.accept = (options === null || options === void 0 ? void 0 : options.accept) ? options.accept : '';
196
+ this.fileInput.multiple = (options === null || options === void 0 ? void 0 : options.multiple) || false;
197
+ this.fileInput.click();
198
+ if (callback) {
199
+ this.callback = callback;
200
+ }
201
+ }
202
+ }
203
+ FilesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FilesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
204
+ FilesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FilesService, providedIn: 'root' });
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FilesService, decorators: [{
206
+ type: Injectable,
207
+ args: [{
208
+ providedIn: 'root'
209
+ }]
210
+ }], ctorParameters: function () { return []; } });
211
+
212
+ class GoogleTagManagerService {
213
+ constructor(platformId, router) {
214
+ this.platformId = platformId;
215
+ this.router = router;
216
+ }
217
+ appendTrackingCode(trackingId) {
218
+ try {
219
+ if (isPlatformBrowser(this.platformId) && trackingId) {
220
+ this.trackingId = trackingId;
221
+ const s1 = document.createElement('script');
222
+ s1.innerHTML = `
223
+ (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
224
+ new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
225
+ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
226
+ '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
227
+ })(window,document,'script','dataLayer','${trackingId}');
228
+ `;
229
+ document.head.appendChild(s1);
230
+ const s2 = document.createElement('noscript');
231
+ const s3 = document.createElement('iframe');
232
+ s3.width = '0';
233
+ s3.height = '0';
234
+ s3.style.display = 'none';
235
+ s3.style.visibility = 'hidden';
236
+ s3.src = `//www.googletagmanager.com/ns.html?id=${trackingId}`;
237
+ s2.appendChild(s3);
238
+ document.body.prepend(s2);
239
+ this.initSubscribers();
240
+ }
241
+ }
242
+ catch (ex) {
243
+ console.error('Error appending google tag manager');
244
+ console.error(ex);
245
+ }
246
+ }
247
+ addVariable(variable) {
248
+ if (isPlatformBrowser(this.platformId) && this.trackingId) {
249
+ window.dataLayer = window.dataLayer || [];
250
+ window.dataLayer.push(variable);
251
+ }
252
+ }
253
+ initSubscribers() {
254
+ this.router.events.subscribe(event => {
255
+ try {
256
+ if (event instanceof NavigationEnd && this.trackingId) {
257
+ this.addVariable({
258
+ event: 'router.NavigationEnd',
259
+ pageTitle: document.title,
260
+ pagePath: event.urlAfterRedirects
261
+ });
262
+ }
263
+ }
264
+ catch (e) {
265
+ console.error(e);
266
+ }
267
+ });
268
+ }
269
+ }
270
+ GoogleTagManagerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GoogleTagManagerService, deps: [{ token: PLATFORM_ID }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
271
+ GoogleTagManagerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GoogleTagManagerService, providedIn: 'root' });
272
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GoogleTagManagerService, decorators: [{
273
+ type: Injectable,
274
+ args: [{
275
+ providedIn: 'root'
276
+ }]
277
+ }], ctorParameters: function () {
278
+ return [{ type: Object, decorators: [{
279
+ type: Inject,
280
+ args: [PLATFORM_ID]
281
+ }] }, { type: i1.Router }];
282
+ } });
283
+
284
+ class UtilsModule {
285
+ }
286
+ UtilsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: UtilsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
287
+ UtilsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.0", ngImport: i0, type: UtilsModule });
288
+ UtilsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: UtilsModule });
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: UtilsModule, decorators: [{
290
+ type: NgModule,
291
+ args: [{
292
+ declarations: [],
293
+ imports: [],
294
+ exports: []
295
+ }]
296
+ }] });
297
+
298
+ /*
299
+ * Public API Surface of utils
300
+ */
301
+
302
+ /**
303
+ * Generated bundle index. Do not edit.
304
+ */
305
+
306
+ export { ColorService, FilesService, GoogleTagManagerService, UtilsModule };
307
+ //# sourceMappingURL=factor_ec-utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factor_ec-utils.mjs","sources":["../../../projects/utils/src/lib/color.service.ts","../../../projects/utils/src/lib/files.service.ts","../../../projects/utils/src/lib/google-tag-manager.service.ts","../../../projects/utils/src/lib/utils.module.ts","../../../projects/utils/src/public-api.ts","../../../projects/utils/src/factor_ec-utils.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ColorService {\n L: number[];\n S: number[];\n hueRanges: {min: number, max: number}[];\n\n constructor() {\n const options: any = {};\n let LS = [options.lightness, options.saturation].map(function(param) {\n param = param || [0.35, 0.5, 0.65]; // note that 3 is a prime\n return Array.isArray(param) ? param.concat() : [param];\n });\n\n this.L = LS[0];\n this.S = LS[1];\n\n if (typeof options.hue === 'number') {\n options.hue = { min: options.hue, max: options.hue };\n }\n if (typeof options.hue === 'object' && !Array.isArray(options.hue)) {\n options.hue = [options.hue];\n }\n if (typeof options.hue === 'undefined') {\n options.hue = [];\n }\n this.hueRanges = options.hue.map(function(range: {min: number, max: number}) {\n return {\n min: typeof range.min === 'undefined' ? 0 : range.min,\n max: typeof range.max === 'undefined' ? 360 : range.max\n };\n });\n }\n\n /**\n * BKDR Hash (modified version)\n *\n * @param str string to hash\n */\n hash(str: string): number {\n let seed = 131;\n let seed2 = 137;\n let hash = 0;\n // make hash more sensitive for short string like 'a', 'b', 'c'\n str += 'x';\n // Note: Number.MAX_SAFE_INTEGER equals 9007199254740991\n const maxSafeInteger: number = Math.round(9007199254740991 / seed2);\n for (let i = 0; i < str.length; i++) {\n if (hash > maxSafeInteger) {\n hash = Math.round(hash / seed2);\n }\n hash = hash * seed + str.charCodeAt(i);\n }\n return hash;\n };\n\n /**\n * Convert RGB Array to HEX\n *\n * @param RGBArray - [R, G, B]\n * @returns 6 digits hex starting with #\n */\n rgb2hex(RGBArray: number[]): string {\n let hex = '#';\n RGBArray.forEach(function(value) {\n if (value < 16) {\n hex += 0;\n }\n hex += value.toString(16);\n });\n return hex;\n };\n\n /**\n * Convert HSL to RGB\n *\n * @see {@link http://zh.wikipedia.org/wiki/HSL和HSV色彩空间} for further information.\n * @param H Hue ∈ [0, 360)\n * @param S Saturation ∈ [0, 1]\n * @param L Lightness ∈ [0, 1]\n * @returns R, G, B ∈ [0, 255]\n */\n hsl2rgb(H: number, S: number, L: number): number[] {\n H /= 360;\n\n let q = L < 0.5 ? L * (1 + S) : L + S - L * S;\n let p = 2 * L - q;\n\n return [H + 1 / 3, H, H - 1 / 3].map(function(color) {\n if (color < 0) {\n color++;\n }\n if (color > 1) {\n color--;\n }\n if (color < 1 / 6) {\n color = p + (q - p) * 6 * color;\n } else if (color < 0.5) {\n color = q;\n } else if (color < 2 / 3) {\n color = p + (q - p) * 6 * (2 / 3 - color);\n } else {\n color = p;\n }\n return Math.round(color * 255);\n });\n };\n\n\n /**\n * Returns the hash in [h, s, l].\n * Note that H ∈ [0, 360); S ∈ [0, 1]; L ∈ [0, 1];\n *\n * @param str string to hash\n * @returns [h, s, l]\n */\n hsl(str: string): any[] {\n let H;\n let S;\n let L;\n let hash = this.hash(str);\n\n if (this.hueRanges.length) {\n let range = this.hueRanges[hash % this.hueRanges.length];\n let hueResolution = 727; // note that 727 is a prime\n H = ((hash / this.hueRanges.length) % hueResolution) * (range.max - range.min) / hueResolution + range.min;\n } else {\n H = hash % 359; // note that 359 is a prime\n }\n hash = Math.round(hash / 360);\n S = this.S[hash % this.S.length];\n hash = Math.round(hash / this.S.length);\n L = this.L[hash % this.L.length];\n\n return [H, S, L];\n };\n\n /**\n * Returns the hash in [r, g, b].\n * Note that R, G, B ∈ [0, 255]\n *\n * @param str string to hash\n * @returns [r, g, b]\n */\n rgb(str: string): number[] {\n let hsl = this.hsl(str);\n return this.hsl2rgb(hsl[0], hsl[1], hsl[2]);\n };\n\n /**\n * Returns the hash in hex\n *\n * @param str string to hash\n * @returns hex with #\n */\n hex(str: string): string {\n let rgb = this.rgb(str);\n return this.rgb2hex(rgb);\n };\n}","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FilesService {\n private callback!: Function;\n private fileInput: HTMLInputElement;\n\n constructor() {\n this.fileInput = document.createElement('input');\n this.fileInput.type = 'file';\n this.fileInput.addEventListener('change', (event: any) => {\n this.loadValue(event.currentTarget.files);\n });\n }\n private loadValue(files: FileList) {\n if (files && files.length > 0) {\n let data: any[] = [];\n for (let i = 0; i < files.length; i++) {\n const file: any = files.item(i);\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n data.push(Object.assign(file, {\n data: reader.result\n }));\n if (data.length == files.length) {\n this.callback(data.length > 0 ? data : null);\n this.fileInput.value = '';\n }\n };\n }\n }\n }\n public open(callback?: Function, options?: { accept?: string, multiple?: boolean }) {\n this.fileInput.accept = options?.accept ? options.accept : '';\n this.fileInput.multiple = options?.multiple || false;\n this.fileInput.click();\n if (callback) {\n this.callback = callback;\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\n\ndeclare var window: any;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GoogleTagManagerService {\n trackingId!: string;\n\n constructor(\n @Inject(PLATFORM_ID) private platformId: Object,\n public router: Router\n ) { }\n\n public appendTrackingCode(trackingId: string): void {\n try {\n if (isPlatformBrowser(this.platformId) && trackingId) {\n this.trackingId = trackingId;\n const s1: HTMLElement = document.createElement('script');\n s1.innerHTML = `\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,'script','dataLayer','${trackingId}');\n `;\n document.head.appendChild(s1);\n const s2: HTMLElement = document.createElement('noscript');\n const s3: HTMLIFrameElement = document.createElement('iframe');\n s3.width = '0';\n s3.height = '0';\n s3.style.display = 'none';\n s3.style.visibility = 'hidden';\n s3.src = `//www.googletagmanager.com/ns.html?id=${trackingId}`\n s2.appendChild(s3);\n (document.body as HTMLElement).prepend(s2);\n this.initSubscribers();\n }\n } catch (ex) {\n console.error('Error appending google tag manager');\n console.error(ex);\n }\n }\n public addVariable(variable: any) {\n if (isPlatformBrowser(this.platformId) && this.trackingId) {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(variable);\n }\n }\n private initSubscribers() {\n this.router.events.subscribe(event => {\n try {\n if (event instanceof NavigationEnd && this.trackingId) {\n this.addVariable({\n event:'router.NavigationEnd', \n pageTitle: document.title,\n pagePath: event.urlAfterRedirects\n });\n }\n } catch (e) {\n console.error(e);\n }\n });\n }\n}\n","import { NgModule } from '@angular/core';\n\n@NgModule({\n declarations: [\n ],\n imports: [\n ],\n exports: [\n ]\n})\nexport class UtilsModule { }\n","/*\n * Public API Surface of utils\n */\n\nexport * from './lib/color.service';\nexport * from './lib/files.service';\nexport * from './lib/google-tag-manager.service';\nexport * from './lib/utils.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAKa,YAAY,CAAA;AAKvB,IAAA,WAAA,GAAA;QACE,MAAM,OAAO,GAAQ,EAAE,CAAC;AACxB,QAAA,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAS,KAAK,EAAA;AACjE,YAAA,KAAK,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACnC,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;AACzD,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAEf,QAAA,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE;AACnC,YAAA,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;AACtD,SAAA;AACD,QAAA,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAClE,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW,EAAE;AACtC,YAAA,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;AAClB,SAAA;QACD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAS,KAAiC,EAAA;YACzE,OAAO;AACL,gBAAA,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG;AACrD,gBAAA,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG;aACxD,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AAED;;;;AAIG;AACH,IAAA,IAAI,CAAC,GAAW,EAAA;QACd,IAAI,IAAI,GAAG,GAAG,CAAC;QACf,IAAI,KAAK,GAAG,GAAG,CAAC;QAChB,IAAI,IAAI,GAAG,CAAC,CAAC;;QAEb,GAAG,IAAI,GAAG,CAAC;;QAEX,MAAM,cAAc,GAAW,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC;AACpE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,IAAI,GAAG,cAAc,EAAE;gBACzB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AACjC,aAAA;YACD,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACxC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;AAED;;;;;AAKC;AACD,IAAA,OAAO,CAAC,QAAkB,EAAA;QACxB,IAAI,GAAG,GAAG,GAAG,CAAC;AACd,QAAA,QAAQ,CAAC,OAAO,CAAC,UAAS,KAAK,EAAA;YAC7B,IAAI,KAAK,GAAG,EAAE,EAAE;gBACd,GAAG,IAAI,CAAC,CAAC;AACV,aAAA;AACD,YAAA,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5B,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,GAAG,CAAC;KACZ;;AAED;;;;;;;;AAQG;AACH,IAAA,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;QACrC,CAAC,IAAI,GAAG,CAAC;QAET,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAElB,QAAA,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAS,KAAK,EAAA;YACjD,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,gBAAA,KAAK,EAAE,CAAC;AACT,aAAA;YACD,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,gBAAA,KAAK,EAAE,CAAC;AACT,aAAA;AACD,YAAA,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE;AACjB,gBAAA,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACjC,aAAA;iBAAM,IAAI,KAAK,GAAG,GAAG,EAAE;gBACtB,KAAK,GAAG,CAAC,CAAC;AACX,aAAA;AAAM,iBAAA,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE;AACxB,gBAAA,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AAC3C,aAAA;AAAM,iBAAA;gBACL,KAAK,GAAG,CAAC,CAAC;AACX,aAAA;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;AACjC,SAAC,CAAC,CAAC;KACJ;;AAGD;;;;;;AAMG;AACH,IAAA,GAAG,CAAC,GAAW,EAAA;AACb,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,IAAI,CAAC,CAAC;QACN,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE1B,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACzB,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACzD,YAAA,IAAI,aAAa,GAAG,GAAG,CAAC;AACxB,YAAA,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,aAAa,KAAK,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC;AAC5G,SAAA;AAAM,aAAA;AACL,YAAA,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;AAChB,SAAA;QACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAC9B,QAAA,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACjC,QAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACxC,QAAA,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjC,QAAA,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAClB;;AAED;;;;;;AAMG;AACH,IAAA,GAAG,CAAC,GAAW,EAAA;QACb,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7C;;AAED;;;;;AAKG;AACH,IAAA,GAAG,CAAC,GAAW,EAAA;QACb,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KAC1B;;;yGA5JU,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,YAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;MCCY,YAAY,CAAA;AAIvB,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAU,KAAI;YACvD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5C,SAAC,CAAC,CAAC;KACJ;AACO,IAAA,SAAS,CAAC,KAAe,EAAA;AAC/B,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,IAAI,IAAI,GAAU,EAAE,CAAC;AACrB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,MAAM,IAAI,GAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,gBAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAChC,gBAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC3B,gBAAA,MAAM,CAAC,MAAM,GAAG,MAAK;oBACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;wBAC5B,IAAI,EAAE,MAAM,CAAC,MAAM;AACpB,qBAAA,CAAC,CAAC,CAAC;AACJ,oBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE;AAC/B,wBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAC7C,wBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;AAC3B,qBAAA;AACH,iBAAC,CAAC;AACH,aAAA;AACF,SAAA;KACF;IACM,IAAI,CAAC,QAAmB,EAAE,OAAiD,EAAA;QAChF,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,MAAM,IAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,QAAQ,KAAI,KAAK,CAAC;AACrD,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACvB,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC1B,SAAA;KACF;;yGArCU,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,YAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;MCKY,uBAAuB,CAAA;IAGlC,WAC+B,CAAA,UAAkB,EACxC,MAAc,EAAA;AADQ,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAQ;AACxC,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAClB;AAEE,IAAA,kBAAkB,CAAC,UAAkB,EAAA;QAC1C,IAAI;YACF,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,EAAE;AACpD,gBAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC7B,MAAM,EAAE,GAAgB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACzD,EAAE,CAAC,SAAS,GAAG,CAAA;;;;;qDAK8B,UAAU,CAAA;SACtD,CAAC;AACF,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAC9B,MAAM,EAAE,GAAgB,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBAC3D,MAAM,EAAE,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC/D,gBAAA,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC;AACf,gBAAA,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC;AAChB,gBAAA,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC1B,gBAAA,EAAE,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;AAC/B,gBAAA,EAAE,CAAC,GAAG,GAAG,CAAyC,sCAAA,EAAA,UAAU,EAAE,CAAA;AAC9D,gBAAA,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAClB,gBAAA,QAAQ,CAAC,IAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,EAAE,EAAE;AACX,YAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACpD,YAAA,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACnB,SAAA;KACF;AACM,IAAA,WAAW,CAAC,QAAa,EAAA;QAC9B,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;YACzD,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;AAC1C,YAAA,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACjC,SAAA;KACF;IACO,eAAe,GAAA;QACrB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;YACnC,IAAI;AACA,gBAAA,IAAI,KAAK,YAAY,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE;oBACrD,IAAI,CAAC,WAAW,CAAC;AACf,wBAAA,KAAK,EAAC,sBAAsB;wBAC5B,SAAS,EAAE,QAAQ,CAAC,KAAK;wBACzB,QAAQ,EAAE,KAAK,CAAC,iBAAiB;AAClC,qBAAA,CAAC,CAAC;AACJ,iBAAA;AACJ,aAAA;AAAC,YAAA,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;;AAzDU,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,kBAIxB,WAAW,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJV,uBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;wBAK4C,MAAM,EAAA,UAAA,EAAA,CAAA;8BAA9C,MAAM;+BAAC,WAAW,CAAA;;;;MCHV,WAAW,CAAA;;wGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAX,WAAW,EAAA,CAAA,CAAA;yGAAX,WAAW,EAAA,CAAA,CAAA;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBARvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EACb;AACD,oBAAA,OAAO,EAAE,EACR;AACD,oBAAA,OAAO,EAAE,EACR;iBACF,CAAA;;;ACTD;;AAEG;;ACFH;;AAEG;;;;"}
@@ -0,0 +1,305 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, PLATFORM_ID, Inject, NgModule } from '@angular/core';
3
+ import { isPlatformBrowser } from '@angular/common';
4
+ import * as i1 from '@angular/router';
5
+ import { NavigationEnd } from '@angular/router';
6
+
7
+ class ColorService {
8
+ constructor() {
9
+ const options = {};
10
+ let LS = [options.lightness, options.saturation].map(function (param) {
11
+ param = param || [0.35, 0.5, 0.65]; // note that 3 is a prime
12
+ return Array.isArray(param) ? param.concat() : [param];
13
+ });
14
+ this.L = LS[0];
15
+ this.S = LS[1];
16
+ if (typeof options.hue === 'number') {
17
+ options.hue = { min: options.hue, max: options.hue };
18
+ }
19
+ if (typeof options.hue === 'object' && !Array.isArray(options.hue)) {
20
+ options.hue = [options.hue];
21
+ }
22
+ if (typeof options.hue === 'undefined') {
23
+ options.hue = [];
24
+ }
25
+ this.hueRanges = options.hue.map(function (range) {
26
+ return {
27
+ min: typeof range.min === 'undefined' ? 0 : range.min,
28
+ max: typeof range.max === 'undefined' ? 360 : range.max
29
+ };
30
+ });
31
+ }
32
+ /**
33
+ * BKDR Hash (modified version)
34
+ *
35
+ * @param str string to hash
36
+ */
37
+ hash(str) {
38
+ let seed = 131;
39
+ let seed2 = 137;
40
+ let hash = 0;
41
+ // make hash more sensitive for short string like 'a', 'b', 'c'
42
+ str += 'x';
43
+ // Note: Number.MAX_SAFE_INTEGER equals 9007199254740991
44
+ const maxSafeInteger = Math.round(9007199254740991 / seed2);
45
+ for (let i = 0; i < str.length; i++) {
46
+ if (hash > maxSafeInteger) {
47
+ hash = Math.round(hash / seed2);
48
+ }
49
+ hash = hash * seed + str.charCodeAt(i);
50
+ }
51
+ return hash;
52
+ }
53
+ ;
54
+ /**
55
+ * Convert RGB Array to HEX
56
+ *
57
+ * @param RGBArray - [R, G, B]
58
+ * @returns 6 digits hex starting with #
59
+ */
60
+ rgb2hex(RGBArray) {
61
+ let hex = '#';
62
+ RGBArray.forEach(function (value) {
63
+ if (value < 16) {
64
+ hex += 0;
65
+ }
66
+ hex += value.toString(16);
67
+ });
68
+ return hex;
69
+ }
70
+ ;
71
+ /**
72
+ * Convert HSL to RGB
73
+ *
74
+ * @see {@link http://zh.wikipedia.org/wiki/HSL和HSV色彩空间} for further information.
75
+ * @param H Hue ∈ [0, 360)
76
+ * @param S Saturation ∈ [0, 1]
77
+ * @param L Lightness ∈ [0, 1]
78
+ * @returns R, G, B ∈ [0, 255]
79
+ */
80
+ hsl2rgb(H, S, L) {
81
+ H /= 360;
82
+ let q = L < 0.5 ? L * (1 + S) : L + S - L * S;
83
+ let p = 2 * L - q;
84
+ return [H + 1 / 3, H, H - 1 / 3].map(function (color) {
85
+ if (color < 0) {
86
+ color++;
87
+ }
88
+ if (color > 1) {
89
+ color--;
90
+ }
91
+ if (color < 1 / 6) {
92
+ color = p + (q - p) * 6 * color;
93
+ }
94
+ else if (color < 0.5) {
95
+ color = q;
96
+ }
97
+ else if (color < 2 / 3) {
98
+ color = p + (q - p) * 6 * (2 / 3 - color);
99
+ }
100
+ else {
101
+ color = p;
102
+ }
103
+ return Math.round(color * 255);
104
+ });
105
+ }
106
+ ;
107
+ /**
108
+ * Returns the hash in [h, s, l].
109
+ * Note that H ∈ [0, 360); S ∈ [0, 1]; L ∈ [0, 1];
110
+ *
111
+ * @param str string to hash
112
+ * @returns [h, s, l]
113
+ */
114
+ hsl(str) {
115
+ let H;
116
+ let S;
117
+ let L;
118
+ let hash = this.hash(str);
119
+ if (this.hueRanges.length) {
120
+ let range = this.hueRanges[hash % this.hueRanges.length];
121
+ let hueResolution = 727; // note that 727 is a prime
122
+ H = ((hash / this.hueRanges.length) % hueResolution) * (range.max - range.min) / hueResolution + range.min;
123
+ }
124
+ else {
125
+ H = hash % 359; // note that 359 is a prime
126
+ }
127
+ hash = Math.round(hash / 360);
128
+ S = this.S[hash % this.S.length];
129
+ hash = Math.round(hash / this.S.length);
130
+ L = this.L[hash % this.L.length];
131
+ return [H, S, L];
132
+ }
133
+ ;
134
+ /**
135
+ * Returns the hash in [r, g, b].
136
+ * Note that R, G, B ∈ [0, 255]
137
+ *
138
+ * @param str string to hash
139
+ * @returns [r, g, b]
140
+ */
141
+ rgb(str) {
142
+ let hsl = this.hsl(str);
143
+ return this.hsl2rgb(hsl[0], hsl[1], hsl[2]);
144
+ }
145
+ ;
146
+ /**
147
+ * Returns the hash in hex
148
+ *
149
+ * @param str string to hash
150
+ * @returns hex with #
151
+ */
152
+ hex(str) {
153
+ let rgb = this.rgb(str);
154
+ return this.rgb2hex(rgb);
155
+ }
156
+ ;
157
+ }
158
+ ColorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ColorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
159
+ ColorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ColorService, providedIn: 'root' });
160
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ColorService, decorators: [{
161
+ type: Injectable,
162
+ args: [{
163
+ providedIn: 'root'
164
+ }]
165
+ }], ctorParameters: function () { return []; } });
166
+
167
+ class FilesService {
168
+ constructor() {
169
+ this.fileInput = document.createElement('input');
170
+ this.fileInput.type = 'file';
171
+ this.fileInput.addEventListener('change', (event) => {
172
+ this.loadValue(event.currentTarget.files);
173
+ });
174
+ }
175
+ loadValue(files) {
176
+ if (files && files.length > 0) {
177
+ let data = [];
178
+ for (let i = 0; i < files.length; i++) {
179
+ const file = files.item(i);
180
+ const reader = new FileReader();
181
+ reader.readAsDataURL(file);
182
+ reader.onload = () => {
183
+ data.push(Object.assign(file, {
184
+ data: reader.result
185
+ }));
186
+ if (data.length == files.length) {
187
+ this.callback(data.length > 0 ? data : null);
188
+ this.fileInput.value = '';
189
+ }
190
+ };
191
+ }
192
+ }
193
+ }
194
+ open(callback, options) {
195
+ this.fileInput.accept = options?.accept ? options.accept : '';
196
+ this.fileInput.multiple = options?.multiple || false;
197
+ this.fileInput.click();
198
+ if (callback) {
199
+ this.callback = callback;
200
+ }
201
+ }
202
+ }
203
+ FilesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FilesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
204
+ FilesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FilesService, providedIn: 'root' });
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FilesService, decorators: [{
206
+ type: Injectable,
207
+ args: [{
208
+ providedIn: 'root'
209
+ }]
210
+ }], ctorParameters: function () { return []; } });
211
+
212
+ class GoogleTagManagerService {
213
+ constructor(platformId, router) {
214
+ this.platformId = platformId;
215
+ this.router = router;
216
+ }
217
+ appendTrackingCode(trackingId) {
218
+ try {
219
+ if (isPlatformBrowser(this.platformId) && trackingId) {
220
+ this.trackingId = trackingId;
221
+ const s1 = document.createElement('script');
222
+ s1.innerHTML = `
223
+ (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
224
+ new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
225
+ j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
226
+ '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
227
+ })(window,document,'script','dataLayer','${trackingId}');
228
+ `;
229
+ document.head.appendChild(s1);
230
+ const s2 = document.createElement('noscript');
231
+ const s3 = document.createElement('iframe');
232
+ s3.width = '0';
233
+ s3.height = '0';
234
+ s3.style.display = 'none';
235
+ s3.style.visibility = 'hidden';
236
+ s3.src = `//www.googletagmanager.com/ns.html?id=${trackingId}`;
237
+ s2.appendChild(s3);
238
+ document.body.prepend(s2);
239
+ this.initSubscribers();
240
+ }
241
+ }
242
+ catch (ex) {
243
+ console.error('Error appending google tag manager');
244
+ console.error(ex);
245
+ }
246
+ }
247
+ addVariable(variable) {
248
+ if (isPlatformBrowser(this.platformId) && this.trackingId) {
249
+ window.dataLayer = window.dataLayer || [];
250
+ window.dataLayer.push(variable);
251
+ }
252
+ }
253
+ initSubscribers() {
254
+ this.router.events.subscribe(event => {
255
+ try {
256
+ if (event instanceof NavigationEnd && this.trackingId) {
257
+ this.addVariable({
258
+ event: 'router.NavigationEnd',
259
+ pageTitle: document.title,
260
+ pagePath: event.urlAfterRedirects
261
+ });
262
+ }
263
+ }
264
+ catch (e) {
265
+ console.error(e);
266
+ }
267
+ });
268
+ }
269
+ }
270
+ GoogleTagManagerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GoogleTagManagerService, deps: [{ token: PLATFORM_ID }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
271
+ GoogleTagManagerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GoogleTagManagerService, providedIn: 'root' });
272
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: GoogleTagManagerService, decorators: [{
273
+ type: Injectable,
274
+ args: [{
275
+ providedIn: 'root'
276
+ }]
277
+ }], ctorParameters: function () { return [{ type: Object, decorators: [{
278
+ type: Inject,
279
+ args: [PLATFORM_ID]
280
+ }] }, { type: i1.Router }]; } });
281
+
282
+ class UtilsModule {
283
+ }
284
+ UtilsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: UtilsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
285
+ UtilsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.0", ngImport: i0, type: UtilsModule });
286
+ UtilsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: UtilsModule });
287
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: UtilsModule, decorators: [{
288
+ type: NgModule,
289
+ args: [{
290
+ declarations: [],
291
+ imports: [],
292
+ exports: []
293
+ }]
294
+ }] });
295
+
296
+ /*
297
+ * Public API Surface of utils
298
+ */
299
+
300
+ /**
301
+ * Generated bundle index. Do not edit.
302
+ */
303
+
304
+ export { ColorService, FilesService, GoogleTagManagerService, UtilsModule };
305
+ //# sourceMappingURL=factor_ec-utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factor_ec-utils.mjs","sources":["../../../projects/utils/src/lib/color.service.ts","../../../projects/utils/src/lib/files.service.ts","../../../projects/utils/src/lib/google-tag-manager.service.ts","../../../projects/utils/src/lib/utils.module.ts","../../../projects/utils/src/public-api.ts","../../../projects/utils/src/factor_ec-utils.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ColorService {\n L: number[];\n S: number[];\n hueRanges: {min: number, max: number}[];\n\n constructor() {\n const options: any = {};\n let LS = [options.lightness, options.saturation].map(function(param) {\n param = param || [0.35, 0.5, 0.65]; // note that 3 is a prime\n return Array.isArray(param) ? param.concat() : [param];\n });\n\n this.L = LS[0];\n this.S = LS[1];\n\n if (typeof options.hue === 'number') {\n options.hue = { min: options.hue, max: options.hue };\n }\n if (typeof options.hue === 'object' && !Array.isArray(options.hue)) {\n options.hue = [options.hue];\n }\n if (typeof options.hue === 'undefined') {\n options.hue = [];\n }\n this.hueRanges = options.hue.map(function(range: {min: number, max: number}) {\n return {\n min: typeof range.min === 'undefined' ? 0 : range.min,\n max: typeof range.max === 'undefined' ? 360 : range.max\n };\n });\n }\n\n /**\n * BKDR Hash (modified version)\n *\n * @param str string to hash\n */\n hash(str: string): number {\n let seed = 131;\n let seed2 = 137;\n let hash = 0;\n // make hash more sensitive for short string like 'a', 'b', 'c'\n str += 'x';\n // Note: Number.MAX_SAFE_INTEGER equals 9007199254740991\n const maxSafeInteger: number = Math.round(9007199254740991 / seed2);\n for (let i = 0; i < str.length; i++) {\n if (hash > maxSafeInteger) {\n hash = Math.round(hash / seed2);\n }\n hash = hash * seed + str.charCodeAt(i);\n }\n return hash;\n };\n\n /**\n * Convert RGB Array to HEX\n *\n * @param RGBArray - [R, G, B]\n * @returns 6 digits hex starting with #\n */\n rgb2hex(RGBArray: number[]): string {\n let hex = '#';\n RGBArray.forEach(function(value) {\n if (value < 16) {\n hex += 0;\n }\n hex += value.toString(16);\n });\n return hex;\n };\n\n /**\n * Convert HSL to RGB\n *\n * @see {@link http://zh.wikipedia.org/wiki/HSL和HSV色彩空间} for further information.\n * @param H Hue ∈ [0, 360)\n * @param S Saturation ∈ [0, 1]\n * @param L Lightness ∈ [0, 1]\n * @returns R, G, B ∈ [0, 255]\n */\n hsl2rgb(H: number, S: number, L: number): number[] {\n H /= 360;\n\n let q = L < 0.5 ? L * (1 + S) : L + S - L * S;\n let p = 2 * L - q;\n\n return [H + 1 / 3, H, H - 1 / 3].map(function(color) {\n if (color < 0) {\n color++;\n }\n if (color > 1) {\n color--;\n }\n if (color < 1 / 6) {\n color = p + (q - p) * 6 * color;\n } else if (color < 0.5) {\n color = q;\n } else if (color < 2 / 3) {\n color = p + (q - p) * 6 * (2 / 3 - color);\n } else {\n color = p;\n }\n return Math.round(color * 255);\n });\n };\n\n\n /**\n * Returns the hash in [h, s, l].\n * Note that H ∈ [0, 360); S ∈ [0, 1]; L ∈ [0, 1];\n *\n * @param str string to hash\n * @returns [h, s, l]\n */\n hsl(str: string): any[] {\n let H;\n let S;\n let L;\n let hash = this.hash(str);\n\n if (this.hueRanges.length) {\n let range = this.hueRanges[hash % this.hueRanges.length];\n let hueResolution = 727; // note that 727 is a prime\n H = ((hash / this.hueRanges.length) % hueResolution) * (range.max - range.min) / hueResolution + range.min;\n } else {\n H = hash % 359; // note that 359 is a prime\n }\n hash = Math.round(hash / 360);\n S = this.S[hash % this.S.length];\n hash = Math.round(hash / this.S.length);\n L = this.L[hash % this.L.length];\n\n return [H, S, L];\n };\n\n /**\n * Returns the hash in [r, g, b].\n * Note that R, G, B ∈ [0, 255]\n *\n * @param str string to hash\n * @returns [r, g, b]\n */\n rgb(str: string): number[] {\n let hsl = this.hsl(str);\n return this.hsl2rgb(hsl[0], hsl[1], hsl[2]);\n };\n\n /**\n * Returns the hash in hex\n *\n * @param str string to hash\n * @returns hex with #\n */\n hex(str: string): string {\n let rgb = this.rgb(str);\n return this.rgb2hex(rgb);\n };\n}","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FilesService {\n private callback!: Function;\n private fileInput: HTMLInputElement;\n\n constructor() {\n this.fileInput = document.createElement('input');\n this.fileInput.type = 'file';\n this.fileInput.addEventListener('change', (event: any) => {\n this.loadValue(event.currentTarget.files);\n });\n }\n private loadValue(files: FileList) {\n if (files && files.length > 0) {\n let data: any[] = [];\n for (let i = 0; i < files.length; i++) {\n const file: any = files.item(i);\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => {\n data.push(Object.assign(file, {\n data: reader.result\n }));\n if (data.length == files.length) {\n this.callback(data.length > 0 ? data : null);\n this.fileInput.value = '';\n }\n };\n }\n }\n }\n public open(callback?: Function, options?: { accept?: string, multiple?: boolean }) {\n this.fileInput.accept = options?.accept ? options.accept : '';\n this.fileInput.multiple = options?.multiple || false;\n this.fileInput.click();\n if (callback) {\n this.callback = callback;\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\n\ndeclare var window: any;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GoogleTagManagerService {\n trackingId!: string;\n\n constructor(\n @Inject(PLATFORM_ID) private platformId: Object,\n public router: Router\n ) { }\n\n public appendTrackingCode(trackingId: string): void {\n try {\n if (isPlatformBrowser(this.platformId) && trackingId) {\n this.trackingId = trackingId;\n const s1: HTMLElement = document.createElement('script');\n s1.innerHTML = `\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,'script','dataLayer','${trackingId}');\n `;\n document.head.appendChild(s1);\n const s2: HTMLElement = document.createElement('noscript');\n const s3: HTMLIFrameElement = document.createElement('iframe');\n s3.width = '0';\n s3.height = '0';\n s3.style.display = 'none';\n s3.style.visibility = 'hidden';\n s3.src = `//www.googletagmanager.com/ns.html?id=${trackingId}`\n s2.appendChild(s3);\n (document.body as HTMLElement).prepend(s2);\n this.initSubscribers();\n }\n } catch (ex) {\n console.error('Error appending google tag manager');\n console.error(ex);\n }\n }\n public addVariable(variable: any) {\n if (isPlatformBrowser(this.platformId) && this.trackingId) {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(variable);\n }\n }\n private initSubscribers() {\n this.router.events.subscribe(event => {\n try {\n if (event instanceof NavigationEnd && this.trackingId) {\n this.addVariable({\n event:'router.NavigationEnd', \n pageTitle: document.title,\n pagePath: event.urlAfterRedirects\n });\n }\n } catch (e) {\n console.error(e);\n }\n });\n }\n}\n","import { NgModule } from '@angular/core';\n\n@NgModule({\n declarations: [\n ],\n imports: [\n ],\n exports: [\n ]\n})\nexport class UtilsModule { }\n","/*\n * Public API Surface of utils\n */\n\nexport * from './lib/color.service';\nexport * from './lib/files.service';\nexport * from './lib/google-tag-manager.service';\nexport * from './lib/utils.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@factor_ec/utils" />
5
+ export * from './public-api';
@@ -0,0 +1,58 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class ColorService {
3
+ L: number[];
4
+ S: number[];
5
+ hueRanges: {
6
+ min: number;
7
+ max: number;
8
+ }[];
9
+ constructor();
10
+ /**
11
+ * BKDR Hash (modified version)
12
+ *
13
+ * @param str string to hash
14
+ */
15
+ hash(str: string): number;
16
+ /**
17
+ * Convert RGB Array to HEX
18
+ *
19
+ * @param RGBArray - [R, G, B]
20
+ * @returns 6 digits hex starting with #
21
+ */
22
+ rgb2hex(RGBArray: number[]): string;
23
+ /**
24
+ * Convert HSL to RGB
25
+ *
26
+ * @see {@link http://zh.wikipedia.org/wiki/HSL和HSV色彩空间} for further information.
27
+ * @param H Hue ∈ [0, 360)
28
+ * @param S Saturation ∈ [0, 1]
29
+ * @param L Lightness ∈ [0, 1]
30
+ * @returns R, G, B ∈ [0, 255]
31
+ */
32
+ hsl2rgb(H: number, S: number, L: number): number[];
33
+ /**
34
+ * Returns the hash in [h, s, l].
35
+ * Note that H ∈ [0, 360); S ∈ [0, 1]; L ∈ [0, 1];
36
+ *
37
+ * @param str string to hash
38
+ * @returns [h, s, l]
39
+ */
40
+ hsl(str: string): any[];
41
+ /**
42
+ * Returns the hash in [r, g, b].
43
+ * Note that R, G, B ∈ [0, 255]
44
+ *
45
+ * @param str string to hash
46
+ * @returns [r, g, b]
47
+ */
48
+ rgb(str: string): number[];
49
+ /**
50
+ * Returns the hash in hex
51
+ *
52
+ * @param str string to hash
53
+ * @returns hex with #
54
+ */
55
+ hex(str: string): string;
56
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColorService, never>;
57
+ static ɵprov: i0.ɵɵInjectableDeclaration<ColorService>;
58
+ }
@@ -0,0 +1,13 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class FilesService {
3
+ private callback;
4
+ private fileInput;
5
+ constructor();
6
+ private loadValue;
7
+ open(callback?: Function, options?: {
8
+ accept?: string;
9
+ multiple?: boolean;
10
+ }): void;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<FilesService, never>;
12
+ static ɵprov: i0.ɵɵInjectableDeclaration<FilesService>;
13
+ }
@@ -0,0 +1,13 @@
1
+ import { Router } from '@angular/router';
2
+ import * as i0 from "@angular/core";
3
+ export declare class GoogleTagManagerService {
4
+ private platformId;
5
+ router: Router;
6
+ trackingId: string;
7
+ constructor(platformId: Object, router: Router);
8
+ appendTrackingCode(trackingId: string): void;
9
+ addVariable(variable: any): void;
10
+ private initSubscribers;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<GoogleTagManagerService, never>;
12
+ static ɵprov: i0.ɵɵInjectableDeclaration<GoogleTagManagerService>;
13
+ }
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class UtilsModule {
3
+ static ɵfac: i0.ɵɵFactoryDeclaration<UtilsModule, never>;
4
+ static ɵmod: i0.ɵɵNgModuleDeclaration<UtilsModule, never, never, never>;
5
+ static ɵinj: i0.ɵɵInjectorDeclaration<UtilsModule>;
6
+ }
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@factor_ec/utils",
3
+ "version": "1.0.0",
4
+ "peerDependencies": {
5
+ "@angular/common": "^11.0.0",
6
+ "@angular/core": "^11.0.0"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.3.0"
10
+ },
11
+ "module": "fesm2015/factor_ec-utils.mjs",
12
+ "es2020": "fesm2020/factor_ec-utils.mjs",
13
+ "esm2020": "esm2020/factor_ec-utils.mjs",
14
+ "fesm2020": "fesm2020/factor_ec-utils.mjs",
15
+ "fesm2015": "fesm2015/factor_ec-utils.mjs",
16
+ "typings": "index.d.ts",
17
+ "exports": {
18
+ "./package.json": {
19
+ "default": "./package.json"
20
+ },
21
+ ".": {
22
+ "types": "./index.d.ts",
23
+ "esm2020": "./esm2020/factor_ec-utils.mjs",
24
+ "es2020": "./fesm2020/factor_ec-utils.mjs",
25
+ "es2015": "./fesm2015/factor_ec-utils.mjs",
26
+ "node": "./fesm2015/factor_ec-utils.mjs",
27
+ "default": "./fesm2020/factor_ec-utils.mjs"
28
+ }
29
+ },
30
+ "sideEffects": false
31
+ }
@@ -0,0 +1,4 @@
1
+ export * from './lib/color.service';
2
+ export * from './lib/files.service';
3
+ export * from './lib/google-tag-manager.service';
4
+ export * from './lib/utils.module';