ngx-image-cropper 5.0.0 → 6.0.2

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 (64) hide show
  1. package/README.md +1 -0
  2. package/esm2020/lib/component/image-cropper.component.mjs +540 -0
  3. package/esm2020/lib/image-cropper.module.mjs +26 -0
  4. package/esm2020/lib/interfaces/cropper-options.interface.mjs +2 -0
  5. package/esm2020/lib/interfaces/cropper-position.interface.mjs +2 -0
  6. package/esm2020/lib/interfaces/cropper.settings.mjs +50 -0
  7. package/esm2020/lib/interfaces/dimensions.interface.mjs +2 -0
  8. package/esm2020/lib/interfaces/exif-transform.interface.mjs +2 -0
  9. package/esm2020/lib/interfaces/image-cropped-event.interface.mjs +2 -0
  10. package/esm2020/lib/interfaces/image-transform.interface.mjs +2 -0
  11. package/esm2020/lib/interfaces/index.mjs +2 -0
  12. package/esm2020/lib/interfaces/loaded-image.interface.mjs +2 -0
  13. package/esm2020/lib/interfaces/move-start.interface.mjs +7 -0
  14. package/esm2020/lib/services/crop.service.mjs +117 -0
  15. package/esm2020/lib/services/cropper-position.service.mjs +201 -0
  16. package/esm2020/lib/services/load-image.service.mjs +168 -0
  17. package/esm2020/lib/utils/blob.utils.mjs +12 -0
  18. package/esm2020/lib/utils/exif.utils.mjs +89 -0
  19. package/esm2020/lib/utils/hammer.utils.mjs +2 -0
  20. package/esm2020/lib/utils/keyboard.utils.mjs +40 -0
  21. package/esm2020/lib/utils/resize.utils.mjs +75 -0
  22. package/esm2020/ngx-image-cropper.mjs +5 -0
  23. package/esm2020/public-api.mjs +6 -0
  24. package/fesm2015/{ngx-image-cropper.js → ngx-image-cropper.mjs} +251 -1035
  25. package/fesm2015/ngx-image-cropper.mjs.map +1 -0
  26. package/fesm2020/ngx-image-cropper.mjs +1315 -0
  27. package/fesm2020/ngx-image-cropper.mjs.map +1 -0
  28. package/lib/component/image-cropper.component.d.ts +12 -9
  29. package/lib/image-cropper.module.d.ts +6 -0
  30. package/lib/interfaces/cropper.settings.d.ts +1 -1
  31. package/lib/services/crop.service.d.ts +3 -0
  32. package/lib/services/cropper-position.service.d.ts +3 -0
  33. package/lib/services/load-image.service.d.ts +3 -0
  34. package/lib/utils/hammer.utils.d.ts +1 -1
  35. package/ngx-image-cropper.d.ts +1 -3
  36. package/package.json +24 -13
  37. package/bundles/ngx-image-cropper.umd.js +0 -2418
  38. package/bundles/ngx-image-cropper.umd.js.map +0 -1
  39. package/bundles/ngx-image-cropper.umd.min.js +0 -16
  40. package/bundles/ngx-image-cropper.umd.min.js.map +0 -1
  41. package/esm2015/lib/component/image-cropper.component.js +0 -827
  42. package/esm2015/lib/image-cropper.module.js +0 -24
  43. package/esm2015/lib/interfaces/cropper-options.interface.js +0 -56
  44. package/esm2015/lib/interfaces/cropper-position.interface.js +0 -20
  45. package/esm2015/lib/interfaces/cropper.settings.js +0 -140
  46. package/esm2015/lib/interfaces/dimensions.interface.js +0 -16
  47. package/esm2015/lib/interfaces/exif-transform.interface.js +0 -16
  48. package/esm2015/lib/interfaces/image-cropped-event.interface.js +0 -24
  49. package/esm2015/lib/interfaces/image-transform.interface.js +0 -20
  50. package/esm2015/lib/interfaces/index.js +0 -6
  51. package/esm2015/lib/interfaces/loaded-image.interface.js +0 -18
  52. package/esm2015/lib/interfaces/move-start.interface.js +0 -37
  53. package/esm2015/lib/services/crop.service.js +0 -176
  54. package/esm2015/lib/services/cropper-position.service.js +0 -259
  55. package/esm2015/lib/services/load-image.service.js +0 -304
  56. package/esm2015/lib/utils/blob.utils.js +0 -26
  57. package/esm2015/lib/utils/exif.utils.js +0 -128
  58. package/esm2015/lib/utils/hammer.utils.js +0 -29
  59. package/esm2015/lib/utils/keyboard.utils.js +0 -58
  60. package/esm2015/lib/utils/resize.utils.js +0 -116
  61. package/esm2015/ngx-image-cropper.js +0 -13
  62. package/esm2015/public-api.js +0 -11
  63. package/fesm2015/ngx-image-cropper.js.map +0 -1
  64. package/ngx-image-cropper.metadata.json +0 -1
@@ -1,24 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/image-cropper.module.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- import { NgModule } from '@angular/core';
7
- import { CommonModule } from '@angular/common';
8
- import { ImageCropperComponent } from './component/image-cropper.component';
9
- export class ImageCropperModule {
10
- }
11
- ImageCropperModule.decorators = [
12
- { type: NgModule, args: [{
13
- imports: [
14
- CommonModule
15
- ],
16
- declarations: [
17
- ImageCropperComponent
18
- ],
19
- exports: [
20
- ImageCropperComponent
21
- ]
22
- },] }
23
- ];
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY3JvcHBlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL21hd2kvUHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvcHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvc3JjLyIsInNvdXJjZXMiOlsibGliL2ltYWdlLWNyb3BwZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFhNUUsTUFBTSxPQUFPLGtCQUFrQjs7O1lBWDlCLFFBQVEsU0FBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsWUFBWTtpQkFDYjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1oscUJBQXFCO2lCQUN0QjtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AscUJBQXFCO2lCQUN0QjthQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbWFnZUNyb3BwZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudC9pbWFnZS1jcm9wcGVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgSW1hZ2VDcm9wcGVyQ29tcG9uZW50XG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBJbWFnZUNyb3BwZXJDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBJbWFnZUNyb3BwZXJNb2R1bGUge1xufVxuIl19
@@ -1,56 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/interfaces/cropper-options.interface.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- /**
7
- * @record
8
- */
9
- export function CropperOptions() { }
10
- if (false) {
11
- /** @type {?} */
12
- CropperOptions.prototype.format;
13
- /** @type {?} */
14
- CropperOptions.prototype.maintainAspectRatio;
15
- /** @type {?} */
16
- CropperOptions.prototype.transform;
17
- /** @type {?} */
18
- CropperOptions.prototype.aspectRatio;
19
- /** @type {?} */
20
- CropperOptions.prototype.resizeToWidth;
21
- /** @type {?} */
22
- CropperOptions.prototype.resizeToHeight;
23
- /** @type {?} */
24
- CropperOptions.prototype.cropperMinWidth;
25
- /** @type {?} */
26
- CropperOptions.prototype.cropperMinHeight;
27
- /** @type {?} */
28
- CropperOptions.prototype.cropperMaxHeight;
29
- /** @type {?} */
30
- CropperOptions.prototype.cropperMaxWidth;
31
- /** @type {?} */
32
- CropperOptions.prototype.cropperStaticWidth;
33
- /** @type {?} */
34
- CropperOptions.prototype.cropperStaticHeight;
35
- /** @type {?} */
36
- CropperOptions.prototype.canvasRotation;
37
- /** @type {?} */
38
- CropperOptions.prototype.initialStepSize;
39
- /** @type {?} */
40
- CropperOptions.prototype.roundCropper;
41
- /** @type {?} */
42
- CropperOptions.prototype.onlyScaleDown;
43
- /** @type {?} */
44
- CropperOptions.prototype.imageQuality;
45
- /** @type {?} */
46
- CropperOptions.prototype.autoCrop;
47
- /** @type {?} */
48
- CropperOptions.prototype.backgroundColor;
49
- /** @type {?} */
50
- CropperOptions.prototype.containWithinAspectRatio;
51
- /** @type {?} */
52
- CropperOptions.prototype.hideResizeSquares;
53
- /** @type {?} */
54
- CropperOptions.prototype.alignImage;
55
- }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci1vcHRpb25zLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvbWF3aS9Qcm9qZWN0cy9uZ3gtaW1hZ2UtY3JvcHBlci9wcm9qZWN0cy9uZ3gtaW1hZ2UtY3JvcHBlci9zcmMvIiwic291cmNlcyI6WyJsaWIvaW50ZXJmYWNlcy9jcm9wcGVyLW9wdGlvbnMuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUEsb0NBdUJDOzs7SUF0QkMsZ0NBQXFCOztJQUNyQiw2Q0FBNkI7O0lBQzdCLG1DQUEwQjs7SUFDMUIscUNBQW9COztJQUNwQix1Q0FBc0I7O0lBQ3RCLHdDQUF1Qjs7SUFDdkIseUNBQXdCOztJQUN4QiwwQ0FBeUI7O0lBQ3pCLDBDQUF5Qjs7SUFDekIseUNBQXdCOztJQUN4Qiw0Q0FBMkI7O0lBQzNCLDZDQUE0Qjs7SUFDNUIsd0NBQXVCOztJQUN2Qix5Q0FBd0I7O0lBQ3hCLHNDQUFzQjs7SUFDdEIsdUNBQXVCOztJQUN2QixzQ0FBcUI7O0lBQ3JCLGtDQUFrQjs7SUFDbEIseUNBQXdCOztJQUN4QixrREFBa0M7O0lBQ2xDLDJDQUEyQjs7SUFDM0Isb0NBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW1hZ2VUcmFuc2Zvcm0gfSBmcm9tICcuL2ltYWdlLXRyYW5zZm9ybS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyb3BwZXJPcHRpb25zIHtcbiAgZm9ybWF0OiBPdXRwdXRGb3JtYXQ7XG4gIG1haW50YWluQXNwZWN0UmF0aW86IGJvb2xlYW47XG4gIHRyYW5zZm9ybTogSW1hZ2VUcmFuc2Zvcm07XG4gIGFzcGVjdFJhdGlvOiBudW1iZXI7XG4gIHJlc2l6ZVRvV2lkdGg6IG51bWJlcjtcbiAgcmVzaXplVG9IZWlnaHQ6IG51bWJlcjtcbiAgY3JvcHBlck1pbldpZHRoOiBudW1iZXI7XG4gIGNyb3BwZXJNaW5IZWlnaHQ6IG51bWJlcjtcbiAgY3JvcHBlck1heEhlaWdodDogbnVtYmVyO1xuICBjcm9wcGVyTWF4V2lkdGg6IG51bWJlcjtcbiAgY3JvcHBlclN0YXRpY1dpZHRoOiBudW1iZXI7XG4gIGNyb3BwZXJTdGF0aWNIZWlnaHQ6IG51bWJlcjtcbiAgY2FudmFzUm90YXRpb246IG51bWJlcjtcbiAgaW5pdGlhbFN0ZXBTaXplOiBudW1iZXI7XG4gIHJvdW5kQ3JvcHBlcjogYm9vbGVhbjtcbiAgb25seVNjYWxlRG93bjogYm9vbGVhbjtcbiAgaW1hZ2VRdWFsaXR5OiBudW1iZXI7XG4gIGF1dG9Dcm9wOiBib29sZWFuO1xuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgY29udGFpbldpdGhpbkFzcGVjdFJhdGlvOiBib29sZWFuO1xuICBoaWRlUmVzaXplU3F1YXJlczogYm9vbGVhbjtcbiAgYWxpZ25JbWFnZTogJ2xlZnQnIHwgJ2NlbnRlcic7XG59XG5cbmV4cG9ydCB0eXBlIE91dHB1dEZvcm1hdCA9ICdwbmcnIHwgJ2pwZWcnIHwgJ2JtcCcgfCAnd2VicCcgfCAnaWNvJztcbiJdfQ==
@@ -1,20 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/interfaces/cropper-position.interface.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- /**
7
- * @record
8
- */
9
- export function CropperPosition() { }
10
- if (false) {
11
- /** @type {?} */
12
- CropperPosition.prototype.x1;
13
- /** @type {?} */
14
- CropperPosition.prototype.y1;
15
- /** @type {?} */
16
- CropperPosition.prototype.x2;
17
- /** @type {?} */
18
- CropperPosition.prototype.y2;
19
- }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci1wb3NpdGlvbi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL21hd2kvUHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvcHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvc3JjLyIsInNvdXJjZXMiOlsibGliL2ludGVyZmFjZXMvY3JvcHBlci1wb3NpdGlvbi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxxQ0FLQzs7O0lBSkMsNkJBQVc7O0lBQ1gsNkJBQVc7O0lBQ1gsNkJBQVc7O0lBQ1gsNkJBQVciLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIENyb3BwZXJQb3NpdGlvbiB7XG4gIHgxOiBudW1iZXI7XG4gIHkxOiBudW1iZXI7XG4gIHgyOiBudW1iZXI7XG4gIHkyOiBudW1iZXI7XG59XG4iXX0=
@@ -1,140 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/interfaces/cropper.settings.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- export class CropperSettings {
7
- constructor() {
8
- // From options
9
- this.format = 'png';
10
- this.maintainAspectRatio = true;
11
- this.transform = {};
12
- this.aspectRatio = 1;
13
- this.resizeToWidth = 0;
14
- this.resizeToHeight = 0;
15
- this.cropperMinWidth = 0;
16
- this.cropperMinHeight = 0;
17
- this.cropperMaxHeight = 0;
18
- this.cropperMaxWidth = 0;
19
- this.cropperStaticWidth = 0;
20
- this.cropperStaticHeight = 0;
21
- this.canvasRotation = 0;
22
- this.initialStepSize = 3;
23
- this.roundCropper = false;
24
- this.onlyScaleDown = false;
25
- this.imageQuality = 92;
26
- this.autoCrop = true;
27
- this.backgroundColor = undefined;
28
- this.containWithinAspectRatio = false;
29
- this.hideResizeSquares = false;
30
- this.alignImage = 'center';
31
- // Internal
32
- this.cropperScaledMinWidth = 20;
33
- this.cropperScaledMinHeight = 20;
34
- this.cropperScaledMaxWidth = 20;
35
- this.cropperScaledMaxHeight = 20;
36
- this.stepSize = this.initialStepSize;
37
- }
38
- /**
39
- * @param {?} options
40
- * @return {?}
41
- */
42
- setOptions(options) {
43
- Object.keys(options)
44
- .filter((/**
45
- * @param {?} k
46
- * @return {?}
47
- */
48
- (k) => k in this))
49
- .forEach((/**
50
- * @param {?} k
51
- * @return {?}
52
- */
53
- (k) => this[k] = options[k]));
54
- this.validateOptions();
55
- }
56
- /**
57
- * @param {?} changes
58
- * @return {?}
59
- */
60
- setOptionsFromChanges(changes) {
61
- Object.keys(changes)
62
- .filter((/**
63
- * @param {?} k
64
- * @return {?}
65
- */
66
- (k) => k in this))
67
- .forEach((/**
68
- * @param {?} k
69
- * @return {?}
70
- */
71
- (k) => this[k] = changes[k].currentValue));
72
- this.validateOptions();
73
- }
74
- /**
75
- * @private
76
- * @return {?}
77
- */
78
- validateOptions() {
79
- if (this.maintainAspectRatio && !this.aspectRatio) {
80
- throw new Error('`aspectRatio` should > 0 when `maintainAspectRatio` is enabled');
81
- }
82
- }
83
- }
84
- if (false) {
85
- /** @type {?} */
86
- CropperSettings.prototype.format;
87
- /** @type {?} */
88
- CropperSettings.prototype.maintainAspectRatio;
89
- /** @type {?} */
90
- CropperSettings.prototype.transform;
91
- /** @type {?} */
92
- CropperSettings.prototype.aspectRatio;
93
- /** @type {?} */
94
- CropperSettings.prototype.resizeToWidth;
95
- /** @type {?} */
96
- CropperSettings.prototype.resizeToHeight;
97
- /** @type {?} */
98
- CropperSettings.prototype.cropperMinWidth;
99
- /** @type {?} */
100
- CropperSettings.prototype.cropperMinHeight;
101
- /** @type {?} */
102
- CropperSettings.prototype.cropperMaxHeight;
103
- /** @type {?} */
104
- CropperSettings.prototype.cropperMaxWidth;
105
- /** @type {?} */
106
- CropperSettings.prototype.cropperStaticWidth;
107
- /** @type {?} */
108
- CropperSettings.prototype.cropperStaticHeight;
109
- /** @type {?} */
110
- CropperSettings.prototype.canvasRotation;
111
- /** @type {?} */
112
- CropperSettings.prototype.initialStepSize;
113
- /** @type {?} */
114
- CropperSettings.prototype.roundCropper;
115
- /** @type {?} */
116
- CropperSettings.prototype.onlyScaleDown;
117
- /** @type {?} */
118
- CropperSettings.prototype.imageQuality;
119
- /** @type {?} */
120
- CropperSettings.prototype.autoCrop;
121
- /** @type {?} */
122
- CropperSettings.prototype.backgroundColor;
123
- /** @type {?} */
124
- CropperSettings.prototype.containWithinAspectRatio;
125
- /** @type {?} */
126
- CropperSettings.prototype.hideResizeSquares;
127
- /** @type {?} */
128
- CropperSettings.prototype.alignImage;
129
- /** @type {?} */
130
- CropperSettings.prototype.cropperScaledMinWidth;
131
- /** @type {?} */
132
- CropperSettings.prototype.cropperScaledMinHeight;
133
- /** @type {?} */
134
- CropperSettings.prototype.cropperScaledMaxWidth;
135
- /** @type {?} */
136
- CropperSettings.prototype.cropperScaledMaxHeight;
137
- /** @type {?} */
138
- CropperSettings.prototype.stepSize;
139
- }
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci5zZXR0aW5ncy5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvbWF3aS9Qcm9qZWN0cy9uZ3gtaW1hZ2UtY3JvcHBlci9wcm9qZWN0cy9uZ3gtaW1hZ2UtY3JvcHBlci9zcmMvIiwic291cmNlcyI6WyJsaWIvaW50ZXJmYWNlcy9jcm9wcGVyLnNldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBSUEsTUFBTSxPQUFPLGVBQWU7SUFBNUI7O1FBR0UsV0FBTSxHQUFpQixLQUFLLENBQUM7UUFDN0Isd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQzNCLGNBQVMsR0FBbUIsRUFBRSxDQUFDO1FBQy9CLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQixxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDckIsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFDcEIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFHLENBQUMsQ0FBQztRQUN4QixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUNwQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLG9CQUFlLEdBQVcsU0FBUyxDQUFDO1FBQ3BDLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUNqQyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsZUFBVSxHQUFzQixRQUFRLENBQUM7O1FBR3pDLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUMzQiwyQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDNUIsMEJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUM1QixhQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQXFCbEMsQ0FBQzs7Ozs7SUFuQkMsVUFBVSxDQUFDLE9BQWdDO1FBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ2pCLE1BQU07Ozs7UUFBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBQzthQUN4QixPQUFPOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7Ozs7SUFFRCxxQkFBcUIsQ0FBQyxPQUFzQjtRQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUNqQixNQUFNOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUM7YUFDeEIsT0FBTzs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDOzs7OztJQUVPLGVBQWU7UUFDckIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztTQUNuRjtJQUNILENBQUM7Q0FDRjs7O0lBakRDLGlDQUE2Qjs7SUFDN0IsOENBQTJCOztJQUMzQixvQ0FBK0I7O0lBQy9CLHNDQUFnQjs7SUFDaEIsd0NBQWtCOztJQUNsQix5Q0FBbUI7O0lBQ25CLDBDQUFvQjs7SUFDcEIsMkNBQXFCOztJQUNyQiwyQ0FBcUI7O0lBQ3JCLDBDQUFvQjs7SUFDcEIsNkNBQXVCOztJQUN2Qiw4Q0FBd0I7O0lBQ3hCLHlDQUFtQjs7SUFDbkIsMENBQW9COztJQUNwQix1Q0FBcUI7O0lBQ3JCLHdDQUFzQjs7SUFDdEIsdUNBQWtCOztJQUNsQixtQ0FBZ0I7O0lBQ2hCLDBDQUFvQzs7SUFDcEMsbURBQWlDOztJQUNqQyw0Q0FBMEI7O0lBQzFCLHFDQUF5Qzs7SUFHekMsZ0RBQTJCOztJQUMzQixpREFBNEI7O0lBQzVCLGdEQUEyQjs7SUFDM0IsaURBQTRCOztJQUM1QixtQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDcm9wcGVyT3B0aW9ucywgT3V0cHV0Rm9ybWF0IH0gZnJvbSAnLi9jcm9wcGVyLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEltYWdlVHJhbnNmb3JtIH0gZnJvbSAnLi9pbWFnZS10cmFuc2Zvcm0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNsYXNzIENyb3BwZXJTZXR0aW5ncyB7XG5cbiAgLy8gRnJvbSBvcHRpb25zXG4gIGZvcm1hdDogT3V0cHV0Rm9ybWF0ID0gJ3BuZyc7XG4gIG1haW50YWluQXNwZWN0UmF0aW8gPSB0cnVlO1xuICB0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtID0ge307XG4gIGFzcGVjdFJhdGlvID0gMTtcbiAgcmVzaXplVG9XaWR0aCA9IDA7XG4gIHJlc2l6ZVRvSGVpZ2h0ID0gMDtcbiAgY3JvcHBlck1pbldpZHRoID0gMDtcbiAgY3JvcHBlck1pbkhlaWdodCA9IDA7XG4gIGNyb3BwZXJNYXhIZWlnaHQgPSAwO1xuICBjcm9wcGVyTWF4V2lkdGggPSAwO1xuICBjcm9wcGVyU3RhdGljV2lkdGggPSAwO1xuICBjcm9wcGVyU3RhdGljSGVpZ2h0ID0gMDtcbiAgY2FudmFzUm90YXRpb24gPSAwO1xuICBpbml0aWFsU3RlcFNpemUgPSAzO1xuICByb3VuZENyb3BwZXIgPSBmYWxzZTtcbiAgb25seVNjYWxlRG93biA9IGZhbHNlO1xuICBpbWFnZVF1YWxpdHkgPSA5MjtcbiAgYXV0b0Nyb3AgPSB0cnVlO1xuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9IHVuZGVmaW5lZDtcbiAgY29udGFpbldpdGhpbkFzcGVjdFJhdGlvID0gZmFsc2U7XG4gIGhpZGVSZXNpemVTcXVhcmVzID0gZmFsc2U7XG4gIGFsaWduSW1hZ2U6ICdsZWZ0JyB8ICdjZW50ZXInID0gJ2NlbnRlcic7XG5cbiAgLy8gSW50ZXJuYWxcbiAgY3JvcHBlclNjYWxlZE1pbldpZHRoID0gMjA7XG4gIGNyb3BwZXJTY2FsZWRNaW5IZWlnaHQgPSAyMDtcbiAgY3JvcHBlclNjYWxlZE1heFdpZHRoID0gMjA7XG4gIGNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgPSAyMDtcbiAgc3RlcFNpemUgPSB0aGlzLmluaXRpYWxTdGVwU2l6ZTtcblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IFBhcnRpYWw8Q3JvcHBlck9wdGlvbnM+KTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXMob3B0aW9ucylcbiAgICAgIC5maWx0ZXIoKGspID0+IGsgaW4gdGhpcylcbiAgICAgIC5mb3JFYWNoKChrKSA9PiB0aGlzW2tdID0gb3B0aW9uc1trXSk7XG4gICAgdGhpcy52YWxpZGF0ZU9wdGlvbnMoKTtcbiAgfVxuXG4gIHNldE9wdGlvbnNGcm9tQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXMoY2hhbmdlcylcbiAgICAgIC5maWx0ZXIoKGspID0+IGsgaW4gdGhpcylcbiAgICAgIC5mb3JFYWNoKChrKSA9PiB0aGlzW2tdID0gY2hhbmdlc1trXS5jdXJyZW50VmFsdWUpO1xuICAgIHRoaXMudmFsaWRhdGVPcHRpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tYWludGFpbkFzcGVjdFJhdGlvICYmICF0aGlzLmFzcGVjdFJhdGlvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Bhc3BlY3RSYXRpb2Agc2hvdWxkID4gMCB3aGVuIGBtYWludGFpbkFzcGVjdFJhdGlvYCBpcyBlbmFibGVkJyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,16 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/interfaces/dimensions.interface.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- /**
7
- * @record
8
- */
9
- export function Dimensions() { }
10
- if (false) {
11
- /** @type {?} */
12
- Dimensions.prototype.width;
13
- /** @type {?} */
14
- Dimensions.prototype.height;
15
- }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9ucy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL21hd2kvUHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvcHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvc3JjLyIsInNvdXJjZXMiOlsibGliL2ludGVyZmFjZXMvZGltZW5zaW9ucy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxnQ0FHQzs7O0lBRkMsMkJBQWM7O0lBQ2QsNEJBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIERpbWVuc2lvbnMge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cbiJdfQ==
@@ -1,16 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/interfaces/exif-transform.interface.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- /**
7
- * @record
8
- */
9
- export function ExifTransform() { }
10
- if (false) {
11
- /** @type {?} */
12
- ExifTransform.prototype.rotate;
13
- /** @type {?} */
14
- ExifTransform.prototype.flip;
15
- }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhpZi10cmFuc2Zvcm0uaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9tYXdpL1Byb2plY3RzL25neC1pbWFnZS1jcm9wcGVyL3Byb2plY3RzL25neC1pbWFnZS1jcm9wcGVyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9pbnRlcmZhY2VzL2V4aWYtdHJhbnNmb3JtLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLG1DQUdDOzs7SUFGQywrQkFBZTs7SUFDZiw2QkFBYyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRXhpZlRyYW5zZm9ybSB7XG4gIHJvdGF0ZTogbnVtYmVyO1xuICBmbGlwOiBib29sZWFuO1xufVxuIl19
@@ -1,24 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/interfaces/image-cropped-event.interface.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- /**
7
- * @record
8
- */
9
- export function ImageCroppedEvent() { }
10
- if (false) {
11
- /** @type {?|undefined} */
12
- ImageCroppedEvent.prototype.base64;
13
- /** @type {?} */
14
- ImageCroppedEvent.prototype.width;
15
- /** @type {?} */
16
- ImageCroppedEvent.prototype.height;
17
- /** @type {?} */
18
- ImageCroppedEvent.prototype.cropperPosition;
19
- /** @type {?} */
20
- ImageCroppedEvent.prototype.imagePosition;
21
- /** @type {?|undefined} */
22
- ImageCroppedEvent.prototype.offsetImagePosition;
23
- }
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY3JvcHBlZC1ldmVudC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL21hd2kvUHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvcHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvc3JjLyIsInNvdXJjZXMiOlsibGliL2ludGVyZmFjZXMvaW1hZ2UtY3JvcHBlZC1ldmVudC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFQSx1Q0FPQzs7O0lBTkMsbUNBQXVCOztJQUN2QixrQ0FBYzs7SUFDZCxtQ0FBZTs7SUFDZiw0Q0FBaUM7O0lBQ2pDLDBDQUErQjs7SUFDL0IsZ0RBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3JvcHBlclBvc2l0aW9uIH0gZnJvbSAnLi9jcm9wcGVyLXBvc2l0aW9uLmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VDcm9wcGVkRXZlbnQge1xuICBiYXNlNjQ/OiBzdHJpbmcgfCBudWxsO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgY3JvcHBlclBvc2l0aW9uOiBDcm9wcGVyUG9zaXRpb247XG4gIGltYWdlUG9zaXRpb246IENyb3BwZXJQb3NpdGlvbjtcbiAgb2Zmc2V0SW1hZ2VQb3NpdGlvbj86IENyb3BwZXJQb3NpdGlvbjtcbn1cbiJdfQ==
@@ -1,20 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/interfaces/image-transform.interface.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- /**
7
- * @record
8
- */
9
- export function ImageTransform() { }
10
- if (false) {
11
- /** @type {?|undefined} */
12
- ImageTransform.prototype.scale;
13
- /** @type {?|undefined} */
14
- ImageTransform.prototype.rotate;
15
- /** @type {?|undefined} */
16
- ImageTransform.prototype.flipH;
17
- /** @type {?|undefined} */
18
- ImageTransform.prototype.flipV;
19
- }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtdHJhbnNmb3JtLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvbWF3aS9Qcm9qZWN0cy9uZ3gtaW1hZ2UtY3JvcHBlci9wcm9qZWN0cy9uZ3gtaW1hZ2UtY3JvcHBlci9zcmMvIiwic291cmNlcyI6WyJsaWIvaW50ZXJmYWNlcy9pbWFnZS10cmFuc2Zvcm0uaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsb0NBS0M7OztJQUpDLCtCQUFlOztJQUNmLGdDQUFnQjs7SUFDaEIsK0JBQWdCOztJQUNoQiwrQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEltYWdlVHJhbnNmb3JtIHtcbiAgc2NhbGU/OiBudW1iZXI7XG4gIHJvdGF0ZT86IG51bWJlcjtcbiAgZmxpcEg/OiBib29sZWFuO1xuICBmbGlwVj86IGJvb2xlYW47XG59XG4iXX0=
@@ -1,6 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/interfaces/index.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL21hd2kvUHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvcHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvc3JjLyIsInNvdXJjZXMiOlsibGliL2ludGVyZmFjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENyb3BwZXJPcHRpb25zLCBPdXRwdXRGb3JtYXQgfSBmcm9tICcuL2Nyb3BwZXItb3B0aW9ucy5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgQ3JvcHBlclBvc2l0aW9uIH0gZnJvbSAnLi9jcm9wcGVyLXBvc2l0aW9uLmludGVyZmFjZSc7XG5leHBvcnQgeyBEaW1lbnNpb25zIH0gZnJvbSAnLi9kaW1lbnNpb25zLmludGVyZmFjZSc7XG5leHBvcnQgeyBJbWFnZUNyb3BwZWRFdmVudCB9IGZyb20gJy4vaW1hZ2UtY3JvcHBlZC1ldmVudC5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgTW92ZVN0YXJ0IH0gZnJvbSAnLi9tb3ZlLXN0YXJ0LmludGVyZmFjZSc7XG5leHBvcnQgeyBJbWFnZVRyYW5zZm9ybSB9IGZyb20gJy4vaW1hZ2UtdHJhbnNmb3JtLmludGVyZmFjZSc7XG5leHBvcnQgeyBMb2FkZWRJbWFnZSB9IGZyb20gJy4vbG9hZGVkLWltYWdlLmludGVyZmFjZSc7XG4iXX0=
@@ -1,18 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/interfaces/loaded-image.interface.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- /**
7
- * @record
8
- */
9
- export function LoadedImage() { }
10
- if (false) {
11
- /** @type {?} */
12
- LoadedImage.prototype.original;
13
- /** @type {?} */
14
- LoadedImage.prototype.transformed;
15
- /** @type {?} */
16
- LoadedImage.prototype.exifTransform;
17
- }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVkLWltYWdlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvbWF3aS9Qcm9qZWN0cy9uZ3gtaW1hZ2UtY3JvcHBlci9wcm9qZWN0cy9uZ3gtaW1hZ2UtY3JvcHBlci9zcmMvIiwic291cmNlcyI6WyJsaWIvaW50ZXJmYWNlcy9sb2FkZWQtaW1hZ2UuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBR0EsaUNBWUM7OztJQVhDLCtCQUlFOztJQUNGLGtDQUlFOztJQUNGLG9DQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpbWVuc2lvbnMgfSBmcm9tICcuL2RpbWVuc2lvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEV4aWZUcmFuc2Zvcm0gfSBmcm9tICcuL2V4aWYtdHJhbnNmb3JtLmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGVkSW1hZ2Uge1xuICBvcmlnaW5hbDoge1xuICAgIGJhc2U2NDogc3RyaW5nO1xuICAgIGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIHNpemU6IERpbWVuc2lvbnM7XG4gIH07XG4gIHRyYW5zZm9ybWVkOiB7XG4gICAgYmFzZTY0OiBzdHJpbmc7XG4gICAgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgc2l6ZTogRGltZW5zaW9ucztcbiAgfTtcbiAgZXhpZlRyYW5zZm9ybTogRXhpZlRyYW5zZm9ybTtcbn1cbiJdfQ==
@@ -1,37 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/interfaces/move-start.interface.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- /**
7
- * @record
8
- */
9
- export function MoveStart() { }
10
- if (false) {
11
- /** @type {?} */
12
- MoveStart.prototype.active;
13
- /** @type {?} */
14
- MoveStart.prototype.type;
15
- /** @type {?} */
16
- MoveStart.prototype.position;
17
- /** @type {?} */
18
- MoveStart.prototype.x1;
19
- /** @type {?} */
20
- MoveStart.prototype.y1;
21
- /** @type {?} */
22
- MoveStart.prototype.x2;
23
- /** @type {?} */
24
- MoveStart.prototype.y2;
25
- /** @type {?} */
26
- MoveStart.prototype.clientX;
27
- /** @type {?} */
28
- MoveStart.prototype.clientY;
29
- }
30
- /** @enum {string} */
31
- const MoveTypes = {
32
- Move: "move",
33
- Resize: "resize",
34
- Pinch: "pinch",
35
- };
36
- export { MoveTypes };
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS1zdGFydC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL21hd2kvUHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvcHJvamVjdHMvbmd4LWltYWdlLWNyb3BwZXIvc3JjLyIsInNvdXJjZXMiOlsibGliL2ludGVyZmFjZXMvbW92ZS1zdGFydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSwrQkFVQzs7O0lBVEMsMkJBQWdCOztJQUNoQix5QkFBdUI7O0lBQ3ZCLDZCQUF3Qjs7SUFDeEIsdUJBQVc7O0lBQ1gsdUJBQVc7O0lBQ1gsdUJBQVc7O0lBQ1gsdUJBQVc7O0lBQ1gsNEJBQWdCOztJQUNoQiw0QkFBZ0I7OztBQUdsQixNQUFZLFNBQVM7SUFDbkIsSUFBSSxRQUFTO0lBQ2IsTUFBTSxVQUFXO0lBQ2pCLEtBQUssU0FBVTtFQUNoQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTW92ZVN0YXJ0IHtcbiAgYWN0aXZlOiBib29sZWFuO1xuICB0eXBlOiBNb3ZlVHlwZXMgfCBudWxsO1xuICBwb3NpdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgeDE6IG51bWJlcjtcbiAgeTE6IG51bWJlcjtcbiAgeDI6IG51bWJlcjtcbiAgeTI6IG51bWJlcjtcbiAgY2xpZW50WDogbnVtYmVyO1xuICBjbGllbnRZOiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIE1vdmVUeXBlcyB7XG4gIE1vdmUgPSAnbW92ZScsXG4gIFJlc2l6ZSA9ICdyZXNpemUnLFxuICBQaW5jaCA9ICdwaW5jaCdcbn1cbiJdfQ==
@@ -1,176 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: lib/services/crop.service.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- import { Injectable } from '@angular/core';
7
- import { resizeCanvas } from '../utils/resize.utils';
8
- import * as i0 from "@angular/core";
9
- export class CropService {
10
- /**
11
- * @param {?} sourceImage
12
- * @param {?} loadedImage
13
- * @param {?} cropper
14
- * @param {?} settings
15
- * @return {?}
16
- */
17
- crop(sourceImage, loadedImage, cropper, settings) {
18
- /** @type {?} */
19
- const imagePosition = this.getImagePosition(sourceImage, loadedImage, cropper, settings);
20
- /** @type {?} */
21
- const width = imagePosition.x2 - imagePosition.x1;
22
- /** @type {?} */
23
- const height = imagePosition.y2 - imagePosition.y1;
24
- /** @type {?} */
25
- const cropCanvas = (/** @type {?} */ (document.createElement('canvas')));
26
- cropCanvas.width = width;
27
- cropCanvas.height = height;
28
- /** @type {?} */
29
- const ctx = cropCanvas.getContext('2d');
30
- if (!ctx) {
31
- return;
32
- }
33
- if (settings.backgroundColor != null) {
34
- ctx.fillStyle = settings.backgroundColor;
35
- ctx.fillRect(0, 0, width, height);
36
- }
37
- /** @type {?} */
38
- const scaleX = (settings.transform.scale || 1) * (settings.transform.flipH ? -1 : 1);
39
- /** @type {?} */
40
- const scaleY = (settings.transform.scale || 1) * (settings.transform.flipV ? -1 : 1);
41
- /** @type {?} */
42
- const transformedImage = loadedImage.transformed;
43
- ctx.setTransform(scaleX, 0, 0, scaleY, transformedImage.size.width / 2, transformedImage.size.height / 2);
44
- ctx.translate(-imagePosition.x1 / scaleX, -imagePosition.y1 / scaleY);
45
- ctx.rotate((settings.transform.rotate || 0) * Math.PI / 180);
46
- ctx.drawImage(transformedImage.image, -transformedImage.size.width / 2, -transformedImage.size.height / 2);
47
- /** @type {?} */
48
- const output = {
49
- width, height,
50
- imagePosition,
51
- cropperPosition: Object.assign({}, cropper)
52
- };
53
- if (settings.containWithinAspectRatio) {
54
- output.offsetImagePosition = this.getOffsetImagePosition(sourceImage, loadedImage, cropper, settings);
55
- }
56
- /** @type {?} */
57
- const resizeRatio = this.getResizeRatio(width, height, settings);
58
- if (resizeRatio !== 1) {
59
- output.width = Math.round(width * resizeRatio);
60
- output.height = settings.maintainAspectRatio
61
- ? Math.round(output.width / settings.aspectRatio)
62
- : Math.round(height * resizeRatio);
63
- resizeCanvas(cropCanvas, output.width, output.height);
64
- }
65
- output.base64 = cropCanvas.toDataURL('image/' + settings.format, this.getQuality(settings));
66
- return output;
67
- }
68
- /**
69
- * @private
70
- * @param {?} sourceImage
71
- * @param {?} loadedImage
72
- * @param {?} cropper
73
- * @param {?} settings
74
- * @return {?}
75
- */
76
- getImagePosition(sourceImage, loadedImage, cropper, settings) {
77
- /** @type {?} */
78
- const sourceImageElement = sourceImage.nativeElement;
79
- /** @type {?} */
80
- const ratio = loadedImage.transformed.size.width / sourceImageElement.offsetWidth;
81
- /** @type {?} */
82
- const out = {
83
- x1: Math.round(cropper.x1 * ratio),
84
- y1: Math.round(cropper.y1 * ratio),
85
- x2: Math.round(cropper.x2 * ratio),
86
- y2: Math.round(cropper.y2 * ratio)
87
- };
88
- if (!settings.containWithinAspectRatio) {
89
- out.x1 = Math.max(out.x1, 0);
90
- out.y1 = Math.max(out.y1, 0);
91
- out.x2 = Math.min(out.x2, loadedImage.transformed.size.width);
92
- out.y2 = Math.min(out.y2, loadedImage.transformed.size.height);
93
- }
94
- return out;
95
- }
96
- /**
97
- * @private
98
- * @param {?} sourceImage
99
- * @param {?} loadedImage
100
- * @param {?} cropper
101
- * @param {?} settings
102
- * @return {?}
103
- */
104
- getOffsetImagePosition(sourceImage, loadedImage, cropper, settings) {
105
- /** @type {?} */
106
- const canvasRotation = settings.canvasRotation + loadedImage.exifTransform.rotate;
107
- /** @type {?} */
108
- const sourceImageElement = sourceImage.nativeElement;
109
- /** @type {?} */
110
- const ratio = loadedImage.transformed.size.width / sourceImageElement.offsetWidth;
111
- /** @type {?} */
112
- let offsetX;
113
- /** @type {?} */
114
- let offsetY;
115
- if (canvasRotation % 2) {
116
- offsetX = (loadedImage.transformed.size.width - loadedImage.original.size.height) / 2;
117
- offsetY = (loadedImage.transformed.size.height - loadedImage.original.size.width) / 2;
118
- }
119
- else {
120
- offsetX = (loadedImage.transformed.size.width - loadedImage.original.size.width) / 2;
121
- offsetY = (loadedImage.transformed.size.height - loadedImage.original.size.height) / 2;
122
- }
123
- /** @type {?} */
124
- const out = {
125
- x1: Math.round(cropper.x1 * ratio) - offsetX,
126
- y1: Math.round(cropper.y1 * ratio) - offsetY,
127
- x2: Math.round(cropper.x2 * ratio) - offsetX,
128
- y2: Math.round(cropper.y2 * ratio) - offsetY
129
- };
130
- if (!settings.containWithinAspectRatio) {
131
- out.x1 = Math.max(out.x1, 0);
132
- out.y1 = Math.max(out.y1, 0);
133
- out.x2 = Math.min(out.x2, loadedImage.transformed.size.width);
134
- out.y2 = Math.min(out.y2, loadedImage.transformed.size.height);
135
- }
136
- return out;
137
- }
138
- /**
139
- * @param {?} width
140
- * @param {?} height
141
- * @param {?} settings
142
- * @return {?}
143
- */
144
- getResizeRatio(width, height, settings) {
145
- /** @type {?} */
146
- const ratioWidth = settings.resizeToWidth / width;
147
- /** @type {?} */
148
- const ratioHeight = settings.resizeToHeight / height;
149
- /** @type {?} */
150
- const ratios = new Array();
151
- if (settings.resizeToWidth > 0) {
152
- ratios.push(ratioWidth);
153
- }
154
- if (settings.resizeToHeight > 0) {
155
- ratios.push(ratioHeight);
156
- }
157
- /** @type {?} */
158
- const result = ratios.length === 0 ? 1 : Math.min(...ratios);
159
- if (result > 1 && !settings.onlyScaleDown) {
160
- return result;
161
- }
162
- return Math.min(result, 1);
163
- }
164
- /**
165
- * @param {?} settings
166
- * @return {?}
167
- */
168
- getQuality(settings) {
169
- return Math.min(1, Math.max(0, settings.imageQuality / 100));
170
- }
171
- }
172
- CropService.decorators = [
173
- { type: Injectable, args: [{ providedIn: 'root' },] }
174
- ];
175
- /** @nocollapse */ CropService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CropService_Factory() { return new CropService(); }, token: CropService, providedIn: "root" });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9tYXdpL1Byb2plY3RzL25neC1pbWFnZS1jcm9wcGVyL3Byb2plY3RzL25neC1pbWFnZS1jcm9wcGVyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jcm9wLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFHckQsTUFBTSxPQUFPLFdBQVc7Ozs7Ozs7O0lBRXRCLElBQUksQ0FBQyxXQUF1QixFQUFFLFdBQXdCLEVBQUUsT0FBd0IsRUFBRSxRQUF5Qjs7Y0FDbkcsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUM7O2NBQ2xGLEtBQUssR0FBRyxhQUFhLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxFQUFFOztjQUMzQyxNQUFNLEdBQUcsYUFBYSxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUMsRUFBRTs7Y0FDNUMsVUFBVSxHQUFHLG1CQUFBLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQXFCO1FBQ3hFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFVBQVUsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztjQUVyQixHQUFHLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE9BQU87U0FDUjtRQUNELElBQUksUUFBUSxDQUFDLGVBQWUsSUFBSSxJQUFJLEVBQUU7WUFDcEMsR0FBRyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1lBQ3pDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDbkM7O2NBRUssTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Y0FDOUUsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Y0FFOUUsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFdBQVc7UUFDaEQsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzdELEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOztjQUVyRyxNQUFNLEdBQXNCO1lBQ2hDLEtBQUssRUFBRSxNQUFNO1lBQ2IsYUFBYTtZQUNiLGVBQWUsb0JBQU8sT0FBTyxDQUFFO1NBQ2hDO1FBQ0QsSUFBSSxRQUFRLENBQUMsd0JBQXdCLEVBQUU7WUFDckMsTUFBTSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN2Rzs7Y0FDSyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQztRQUNoRSxJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7WUFDckIsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxtQkFBbUI7Z0JBQzFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFDakQsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkQ7UUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzVGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Ozs7Ozs7OztJQUVPLGdCQUFnQixDQUFDLFdBQXVCLEVBQUUsV0FBd0IsRUFBRSxPQUF3QixFQUFFLFFBQXlCOztjQUN2SCxrQkFBa0IsR0FBRyxXQUFXLENBQUMsYUFBYTs7Y0FDOUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxXQUFXOztjQUUzRSxHQUFHLEdBQW9CO1lBQzNCLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO1NBQ25DO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtZQUN0QyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3QixHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3QixHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5RCxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoRTtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzs7Ozs7Ozs7O0lBRU8sc0JBQXNCLENBQUMsV0FBdUIsRUFBRSxXQUF3QixFQUFFLE9BQXdCLEVBQUUsUUFBeUI7O2NBQzdILGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBTTs7Y0FDM0Usa0JBQWtCLEdBQUcsV0FBVyxDQUFDLGFBQWE7O2NBQzlDLEtBQUssR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsV0FBVzs7WUFDN0UsT0FBZTs7WUFDZixPQUFlO1FBRW5CLElBQUksY0FBYyxHQUFHLENBQUMsRUFBRTtZQUN0QixPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RGLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkY7YUFBTTtZQUNMLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckYsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN4Rjs7Y0FFSyxHQUFHLEdBQW9CO1lBQzNCLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsT0FBTztZQUM1QyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLE9BQU87WUFDNUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxPQUFPO1lBQzVDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsT0FBTztTQUM3QztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLEVBQUU7WUFDdEMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0IsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0IsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUQsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEU7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Ozs7Ozs7SUFFRCxjQUFjLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxRQUF5Qjs7Y0FDL0QsVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLEdBQUcsS0FBSzs7Y0FDM0MsV0FBVyxHQUFHLFFBQVEsQ0FBQyxjQUFjLEdBQUcsTUFBTTs7Y0FDOUMsTUFBTSxHQUFHLElBQUksS0FBSyxFQUFVO1FBRWxDLElBQUksUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLEVBQUU7WUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN6QjtRQUNELElBQUksUUFBUSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMxQjs7Y0FFSyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUU1RCxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO1lBQ3pDLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7Ozs7O0lBRUQsVUFBVSxDQUFDLFFBQXlCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7OztZQTVIRixVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3JvcHBlclBvc2l0aW9uLCBJbWFnZUNyb3BwZWRFdmVudCwgTG9hZGVkSW1hZ2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENyb3BwZXJTZXR0aW5ncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY3JvcHBlci5zZXR0aW5ncyc7XG5pbXBvcnQgeyByZXNpemVDYW52YXMgfSBmcm9tICcuLi91dGlscy9yZXNpemUudXRpbHMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIENyb3BTZXJ2aWNlIHtcblxuICBjcm9wKHNvdXJjZUltYWdlOiBFbGVtZW50UmVmLCBsb2FkZWRJbWFnZTogTG9hZGVkSW1hZ2UsIGNyb3BwZXI6IENyb3BwZXJQb3NpdGlvbiwgc2V0dGluZ3M6IENyb3BwZXJTZXR0aW5ncyk6IEltYWdlQ3JvcHBlZEV2ZW50IHwgbnVsbCB7XG4gICAgY29uc3QgaW1hZ2VQb3NpdGlvbiA9IHRoaXMuZ2V0SW1hZ2VQb3NpdGlvbihzb3VyY2VJbWFnZSwgbG9hZGVkSW1hZ2UsIGNyb3BwZXIsIHNldHRpbmdzKTtcbiAgICBjb25zdCB3aWR0aCA9IGltYWdlUG9zaXRpb24ueDIgLSBpbWFnZVBvc2l0aW9uLngxO1xuICAgIGNvbnN0IGhlaWdodCA9IGltYWdlUG9zaXRpb24ueTIgLSBpbWFnZVBvc2l0aW9uLnkxO1xuICAgIGNvbnN0IGNyb3BDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSBhcyBIVE1MQ2FudmFzRWxlbWVudDtcbiAgICBjcm9wQ2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgY3JvcENhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBjb25zdCBjdHggPSBjcm9wQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgaWYgKCFjdHgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNldHRpbmdzLmJhY2tncm91bmRDb2xvciAhPSBudWxsKSB7XG4gICAgICBjdHguZmlsbFN0eWxlID0gc2V0dGluZ3MuYmFja2dyb3VuZENvbG9yO1xuICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cblxuICAgIGNvbnN0IHNjYWxlWCA9IChzZXR0aW5ncy50cmFuc2Zvcm0uc2NhbGUgfHwgMSkgKiAoc2V0dGluZ3MudHJhbnNmb3JtLmZsaXBIID8gLTEgOiAxKTtcbiAgICBjb25zdCBzY2FsZVkgPSAoc2V0dGluZ3MudHJhbnNmb3JtLnNjYWxlIHx8IDEpICogKHNldHRpbmdzLnRyYW5zZm9ybS5mbGlwViA/IC0xIDogMSk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZEltYWdlID0gbG9hZGVkSW1hZ2UudHJhbnNmb3JtZWQ7XG4gICAgY3R4LnNldFRyYW5zZm9ybShzY2FsZVgsIDAsIDAsIHNjYWxlWSwgdHJhbnNmb3JtZWRJbWFnZS5zaXplLndpZHRoIC8gMiwgdHJhbnNmb3JtZWRJbWFnZS5zaXplLmhlaWdodCAvIDIpO1xuICAgIGN0eC50cmFuc2xhdGUoLWltYWdlUG9zaXRpb24ueDEgLyBzY2FsZVgsIC1pbWFnZVBvc2l0aW9uLnkxIC8gc2NhbGVZKTtcbiAgICBjdHgucm90YXRlKChzZXR0aW5ncy50cmFuc2Zvcm0ucm90YXRlIHx8IDApICogTWF0aC5QSSAvIDE4MCk7XG4gICAgY3R4LmRyYXdJbWFnZSh0cmFuc2Zvcm1lZEltYWdlLmltYWdlLCAtdHJhbnNmb3JtZWRJbWFnZS5zaXplLndpZHRoIC8gMiwgLXRyYW5zZm9ybWVkSW1hZ2Uuc2l6ZS5oZWlnaHQgLyAyKTtcblxuICAgIGNvbnN0IG91dHB1dDogSW1hZ2VDcm9wcGVkRXZlbnQgPSB7XG4gICAgICB3aWR0aCwgaGVpZ2h0LFxuICAgICAgaW1hZ2VQb3NpdGlvbixcbiAgICAgIGNyb3BwZXJQb3NpdGlvbjogeyAuLi5jcm9wcGVyIH1cbiAgICB9O1xuICAgIGlmIChzZXR0aW5ncy5jb250YWluV2l0aGluQXNwZWN0UmF0aW8pIHtcbiAgICAgIG91dHB1dC5vZmZzZXRJbWFnZVBvc2l0aW9uID0gdGhpcy5nZXRPZmZzZXRJbWFnZVBvc2l0aW9uKHNvdXJjZUltYWdlLCBsb2FkZWRJbWFnZSwgY3JvcHBlciwgc2V0dGluZ3MpO1xuICAgIH1cbiAgICBjb25zdCByZXNpemVSYXRpbyA9IHRoaXMuZ2V0UmVzaXplUmF0aW8od2lkdGgsIGhlaWdodCwgc2V0dGluZ3MpO1xuICAgIGlmIChyZXNpemVSYXRpbyAhPT0gMSkge1xuICAgICAgb3V0cHV0LndpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCAqIHJlc2l6ZVJhdGlvKTtcbiAgICAgIG91dHB1dC5oZWlnaHQgPSBzZXR0aW5ncy5tYWludGFpbkFzcGVjdFJhdGlvXG4gICAgICAgID8gTWF0aC5yb3VuZChvdXRwdXQud2lkdGggLyBzZXR0aW5ncy5hc3BlY3RSYXRpbylcbiAgICAgICAgOiBNYXRoLnJvdW5kKGhlaWdodCAqIHJlc2l6ZVJhdGlvKTtcbiAgICAgIHJlc2l6ZUNhbnZhcyhjcm9wQ2FudmFzLCBvdXRwdXQud2lkdGgsIG91dHB1dC5oZWlnaHQpO1xuICAgIH1cbiAgICBvdXRwdXQuYmFzZTY0ID0gY3JvcENhbnZhcy50b0RhdGFVUkwoJ2ltYWdlLycgKyBzZXR0aW5ncy5mb3JtYXQsIHRoaXMuZ2V0UXVhbGl0eShzZXR0aW5ncykpO1xuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBwcml2YXRlIGdldEltYWdlUG9zaXRpb24oc291cmNlSW1hZ2U6IEVsZW1lbnRSZWYsIGxvYWRlZEltYWdlOiBMb2FkZWRJbWFnZSwgY3JvcHBlcjogQ3JvcHBlclBvc2l0aW9uLCBzZXR0aW5nczogQ3JvcHBlclNldHRpbmdzKTogQ3JvcHBlclBvc2l0aW9uIHtcbiAgICBjb25zdCBzb3VyY2VJbWFnZUVsZW1lbnQgPSBzb3VyY2VJbWFnZS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHJhdGlvID0gbG9hZGVkSW1hZ2UudHJhbnNmb3JtZWQuc2l6ZS53aWR0aCAvIHNvdXJjZUltYWdlRWxlbWVudC5vZmZzZXRXaWR0aDtcblxuICAgIGNvbnN0IG91dDogQ3JvcHBlclBvc2l0aW9uID0ge1xuICAgICAgeDE6IE1hdGgucm91bmQoY3JvcHBlci54MSAqIHJhdGlvKSxcbiAgICAgIHkxOiBNYXRoLnJvdW5kKGNyb3BwZXIueTEgKiByYXRpbyksXG4gICAgICB4MjogTWF0aC5yb3VuZChjcm9wcGVyLngyICogcmF0aW8pLFxuICAgICAgeTI6IE1hdGgucm91bmQoY3JvcHBlci55MiAqIHJhdGlvKVxuICAgIH07XG5cbiAgICBpZiAoIXNldHRpbmdzLmNvbnRhaW5XaXRoaW5Bc3BlY3RSYXRpbykge1xuICAgICAgb3V0LngxID0gTWF0aC5tYXgob3V0LngxLCAwKTtcbiAgICAgIG91dC55MSA9IE1hdGgubWF4KG91dC55MSwgMCk7XG4gICAgICBvdXQueDIgPSBNYXRoLm1pbihvdXQueDIsIGxvYWRlZEltYWdlLnRyYW5zZm9ybWVkLnNpemUud2lkdGgpO1xuICAgICAgb3V0LnkyID0gTWF0aC5taW4ob3V0LnkyLCBsb2FkZWRJbWFnZS50cmFuc2Zvcm1lZC5zaXplLmhlaWdodCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T2Zmc2V0SW1hZ2VQb3NpdGlvbihzb3VyY2VJbWFnZTogRWxlbWVudFJlZiwgbG9hZGVkSW1hZ2U6IExvYWRlZEltYWdlLCBjcm9wcGVyOiBDcm9wcGVyUG9zaXRpb24sIHNldHRpbmdzOiBDcm9wcGVyU2V0dGluZ3MpOiBDcm9wcGVyUG9zaXRpb24ge1xuICAgIGNvbnN0IGNhbnZhc1JvdGF0aW9uID0gc2V0dGluZ3MuY2FudmFzUm90YXRpb24gKyBsb2FkZWRJbWFnZS5leGlmVHJhbnNmb3JtLnJvdGF0ZTtcbiAgICBjb25zdCBzb3VyY2VJbWFnZUVsZW1lbnQgPSBzb3VyY2VJbWFnZS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHJhdGlvID0gbG9hZGVkSW1hZ2UudHJhbnNmb3JtZWQuc2l6ZS53aWR0aCAvIHNvdXJjZUltYWdlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICBsZXQgb2Zmc2V0WDogbnVtYmVyO1xuICAgIGxldCBvZmZzZXRZOiBudW1iZXI7XG5cbiAgICBpZiAoY2FudmFzUm90YXRpb24gJSAyKSB7XG4gICAgICBvZmZzZXRYID0gKGxvYWRlZEltYWdlLnRyYW5zZm9ybWVkLnNpemUud2lkdGggLSBsb2FkZWRJbWFnZS5vcmlnaW5hbC5zaXplLmhlaWdodCkgLyAyO1xuICAgICAgb2Zmc2V0WSA9IChsb2FkZWRJbWFnZS50cmFuc2Zvcm1lZC5zaXplLmhlaWdodCAtIGxvYWRlZEltYWdlLm9yaWdpbmFsLnNpemUud2lkdGgpIC8gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0WCA9IChsb2FkZWRJbWFnZS50cmFuc2Zvcm1lZC5zaXplLndpZHRoIC0gbG9hZGVkSW1hZ2Uub3JpZ2luYWwuc2l6ZS53aWR0aCkgLyAyO1xuICAgICAgb2Zmc2V0WSA9IChsb2FkZWRJbWFnZS50cmFuc2Zvcm1lZC5zaXplLmhlaWdodCAtIGxvYWRlZEltYWdlLm9yaWdpbmFsLnNpemUuaGVpZ2h0KSAvIDI7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0OiBDcm9wcGVyUG9zaXRpb24gPSB7XG4gICAgICB4MTogTWF0aC5yb3VuZChjcm9wcGVyLngxICogcmF0aW8pIC0gb2Zmc2V0WCxcbiAgICAgIHkxOiBNYXRoLnJvdW5kKGNyb3BwZXIueTEgKiByYXRpbykgLSBvZmZzZXRZLFxuICAgICAgeDI6IE1hdGgucm91bmQoY3JvcHBlci54MiAqIHJhdGlvKSAtIG9mZnNldFgsXG4gICAgICB5MjogTWF0aC5yb3VuZChjcm9wcGVyLnkyICogcmF0aW8pIC0gb2Zmc2V0WVxuICAgIH07XG5cbiAgICBpZiAoIXNldHRpbmdzLmNvbnRhaW5XaXRoaW5Bc3BlY3RSYXRpbykge1xuICAgICAgb3V0LngxID0gTWF0aC5tYXgob3V0LngxLCAwKTtcbiAgICAgIG91dC55MSA9IE1hdGgubWF4KG91dC55MSwgMCk7XG4gICAgICBvdXQueDIgPSBNYXRoLm1pbihvdXQueDIsIGxvYWRlZEltYWdlLnRyYW5zZm9ybWVkLnNpemUud2lkdGgpO1xuICAgICAgb3V0LnkyID0gTWF0aC5taW4ob3V0LnkyLCBsb2FkZWRJbWFnZS50cmFuc2Zvcm1lZC5zaXplLmhlaWdodCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGdldFJlc2l6ZVJhdGlvKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBzZXR0aW5nczogQ3JvcHBlclNldHRpbmdzKTogbnVtYmVyIHtcbiAgICBjb25zdCByYXRpb1dpZHRoID0gc2V0dGluZ3MucmVzaXplVG9XaWR0aCAvIHdpZHRoO1xuICAgIGNvbnN0IHJhdGlvSGVpZ2h0ID0gc2V0dGluZ3MucmVzaXplVG9IZWlnaHQgLyBoZWlnaHQ7XG4gICAgY29uc3QgcmF0aW9zID0gbmV3IEFycmF5PG51bWJlcj4oKTtcblxuICAgIGlmIChzZXR0aW5ncy5yZXNpemVUb1dpZHRoID4gMCkge1xuICAgICAgcmF0aW9zLnB1c2gocmF0aW9XaWR0aCk7XG4gICAgfVxuICAgIGlmIChzZXR0aW5ncy5yZXNpemVUb0hlaWdodCA+IDApIHtcbiAgICAgIHJhdGlvcy5wdXNoKHJhdGlvSGVpZ2h0KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSByYXRpb3MubGVuZ3RoID09PSAwID8gMSA6IE1hdGgubWluKC4uLnJhdGlvcyk7XG5cbiAgICBpZiAocmVzdWx0ID4gMSAmJiAhc2V0dGluZ3Mub25seVNjYWxlRG93bikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgubWluKHJlc3VsdCwgMSk7XG4gIH1cblxuICBnZXRRdWFsaXR5KHNldHRpbmdzOiBDcm9wcGVyU2V0dGluZ3MpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBzZXR0aW5ncy5pbWFnZVF1YWxpdHkgLyAxMDApKTtcbiAgfVxufVxuIl19