keevo-components 1.8.279 → 1.8.280

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.
@@ -126,7 +126,7 @@ export declare class KvTableComponent implements OnInit, DoCheck, AfterViewInit
126
126
  onClickEvent(event: any): void;
127
127
  styleSetter(style: string, data: string): void;
128
128
  checkMenuFiltro(col: any): void;
129
- sortByPosition(): (elem1: any, elem2: any) => 0 | 1 | -1;
129
+ sortByPosition(): (elem1: any, elem2: any) => 1 | 0 | -1;
130
130
  dinamicDisableColumn(col: TableConfigColumn): boolean;
131
131
  checkHideColumns(): void;
132
132
  getCustomTemplate(templatename: string): TemplateRef<any>;
@@ -61,7 +61,7 @@ export declare class KvTableExpandableComponent implements OnInit, DoCheck {
61
61
  onGlobalFilter(table: Table, event: Event): void;
62
62
  adicionaAcoesTabela(): void;
63
63
  checkMenuFiltro(col: any): void;
64
- sortByPosition(): (elem1: any, elem2: any) => 0 | 1 | -1;
64
+ sortByPosition(): (elem1: any, elem2: any) => 1 | 0 | -1;
65
65
  dinamicDisableColumn(col: TableConfigColumn): boolean;
66
66
  dinamicColumnSet(e: any, col: any): void;
67
67
  addColumn(field: string): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keevo-components",
3
- "version": "1.8.279",
3
+ "version": "1.8.280",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.8",
6
6
  "@angular/core": "^17.3.8",
package/public-api.d.ts CHANGED
@@ -229,5 +229,4 @@ export * from './lib/components/kv-home-card/kv-home-card.module';
229
229
  * Avatar
230
230
  */
231
231
  export * from './lib/components/kv-avatar/kv-avatar.component';
232
- export * from './lib/components/kv-avatar/kv-crop-image/kv-crop-image.component';
233
232
  export * from './lib/components/kv-avatar/kv-avatar.module';
@@ -1,222 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, HostListener, ViewChild } from '@angular/core';
3
- import { FormsModule } from '@angular/forms';
4
- import { BaseComponentCrud, KvModalModule, PrimeNgModule } from 'projects/keevo-components/src/public-api';
5
- import { KvLabelModule } from '../../kv-label/kv-label.module';
6
- import { SliderModule } from 'primeng/slider';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "projects/keevo-components/src/public-api";
9
- import * as i2 from "primeng/dynamicdialog";
10
- import * as i3 from "@angular/forms";
11
- import * as i4 from "../../kv-modal/kv-modal.component";
12
- import * as i5 from "../../kv-label/kv-label.component";
13
- import * as i6 from "primeng/slider";
14
- export class KvCropImageComponent extends BaseComponentCrud {
15
- onWindowResize() {
16
- this.widthTela = window.innerWidth;
17
- this.updateCanvasSize();
18
- }
19
- constructor(imageService, notificationService, dialogService, dynamicDialogRef, dynamicDialogConfig) {
20
- super(dialogService, notificationService);
21
- this.imageService = imageService;
22
- this.notificationService = notificationService;
23
- this.dialogService = dialogService;
24
- this.dynamicDialogRef = dynamicDialogRef;
25
- this.dynamicDialogConfig = dynamicDialogConfig;
26
- this.imageLoaded = false;
27
- this.imageX = 0;
28
- this.imageY = 0;
29
- this.startX = 0;
30
- this.startY = 0;
31
- this.valueZoom = 50;
32
- this.scaleFactor = 1;
33
- this.selectedImage = '';
34
- this.actionsModal = [
35
- {
36
- label: 'Cancelar',
37
- severity: 'tertiary',
38
- icon: 'cancel',
39
- command: (e) => {
40
- this.dynamicDialogRef.close();
41
- },
42
- },
43
- {
44
- label: 'Recortar',
45
- severity: 'primary',
46
- icon: 'crop',
47
- command: (e) => {
48
- this.cropImage();
49
- },
50
- },
51
- ];
52
- this.widthTela = window.innerWidth;
53
- this.selectedImage = this.dynamicDialogConfig.data.id.imagemSelecionada;
54
- this.openCropModal();
55
- }
56
- openCropModal() {
57
- setTimeout(() => {
58
- const canvas = this.cropCanvas.nativeElement;
59
- const ctx = canvas.getContext('2d');
60
- const img = new Image();
61
- img.src = this.selectedImage;
62
- img.onload = () => {
63
- this.imageLoaded = true;
64
- this.imageX = (canvas.width - img.width * this.scaleFactor) / 2;
65
- this.imageY = (canvas.height - img.height * this.scaleFactor) / 2;
66
- canvas.width = this.retornaTamanhoCanvas();
67
- canvas.height = 400;
68
- this.redrawCanvas(ctx, img);
69
- this.initializeImageMove(canvas, ctx, img);
70
- this.initializeMouseWheel(canvas, ctx, img);
71
- };
72
- }, 0);
73
- }
74
- redrawCanvas(ctx, img) {
75
- if (!ctx)
76
- return;
77
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
78
- ctx.filter = 'blur(5px) opacity(0.9)';
79
- ctx.drawImage(img, this.imageX, this.imageY, img.width * this.scaleFactor, img.height * this.scaleFactor);
80
- ctx.filter = 'none';
81
- this.drawImageInCropArea(ctx, img);
82
- this.drawCropArea(ctx);
83
- }
84
- initializeImageMove(canvas, ctx, img) {
85
- let isDragging = false;
86
- canvas.style.cursor = 'grab';
87
- canvas.onmousedown = (e) => {
88
- isDragging = true;
89
- canvas.style.cursor = 'grabbing';
90
- this.startX = e.offsetX - this.imageX;
91
- this.startY = e.offsetY - this.imageY;
92
- };
93
- canvas.onmousemove = (e) => {
94
- if (isDragging) {
95
- this.imageX = e.offsetX - this.startX;
96
- this.imageY = e.offsetY - this.startY;
97
- this.redrawCanvas(ctx, img);
98
- }
99
- };
100
- canvas.onmouseup = () => {
101
- isDragging = false;
102
- canvas.style.cursor = 'grab';
103
- };
104
- canvas.onmouseout = () => {
105
- isDragging = false;
106
- canvas.style.cursor = 'grab';
107
- };
108
- }
109
- initializeMouseWheel(canvas, ctx, img) {
110
- canvas.onwheel = (e) => {
111
- e.preventDefault();
112
- const delta = e.deltaY > 0 ? -0.1 : 0.1;
113
- this.scaleFactor = Math.min(Math.max(this.scaleFactor + delta, 0.1), 5); // limita o fator de escala entre 0.1 e 5
114
- this.redrawCanvas(ctx, img);
115
- this.valueZoom = this.scaleFactor * 50;
116
- };
117
- }
118
- drawImageInCropArea(ctx, img) {
119
- if (!ctx)
120
- return;
121
- // Calcula a posição da área de corte
122
- const cropX = (ctx.canvas.width - 225) / 2;
123
- const cropY = (ctx.canvas.height - 225) / 2;
124
- // Desenha a imagem de não desfocada dentro da área de corte
125
- ctx.save();
126
- ctx.beginPath();
127
- ctx.arc(cropX + 112.5, cropY + 112.5, 112.5, 0, Math.PI * 2, true);
128
- ctx.clip();
129
- ctx.drawImage(img, this.imageX, this.imageY, img.width * this.scaleFactor, img.height * this.scaleFactor);
130
- ctx.restore();
131
- }
132
- drawCropArea(ctx) {
133
- if (!ctx)
134
- return;
135
- ctx.beginPath();
136
- const cropX = (ctx.canvas.width - 225) / 2;
137
- const cropY = (ctx.canvas.height - 225) / 2;
138
- ctx.arc(cropX + 112.5, cropY + 112.5, 112.5, 0, Math.PI * 2, true);
139
- ctx.strokeStyle = 'transparent';
140
- ctx.lineWidth = 2;
141
- ctx.stroke();
142
- }
143
- updateCanvasSize() {
144
- const canvas = this.cropCanvas.nativeElement;
145
- const ctx = canvas.getContext('2d');
146
- const img = new Image();
147
- img.src = this.selectedImage;
148
- img.onload = () => {
149
- this.imageLoaded = true;
150
- this.imageX = (canvas.width - img.width * this.scaleFactor) / 2;
151
- this.imageY = (canvas.height - img.height * this.scaleFactor) / 2;
152
- canvas.width = this.retornaTamanhoCanvas();
153
- canvas.height = 400;
154
- this.redrawCanvas(ctx, img);
155
- };
156
- }
157
- onZoomChange(event) {
158
- const canvas = this.cropCanvas.nativeElement;
159
- const ctx = canvas.getContext('2d');
160
- const img = new Image();
161
- img.src = this.selectedImage;
162
- img.onload = () => {
163
- this.scaleFactor = event.value / 50;
164
- this.redrawCanvas(ctx, img);
165
- };
166
- }
167
- cropImage() {
168
- const canvas = this.cropCanvas.nativeElement;
169
- const ctx = canvas.getContext('2d');
170
- if (ctx) {
171
- const centerX = canvas.width / 2;
172
- const centerY = canvas.height / 2;
173
- const radius = 100;
174
- const imageData = ctx.getImageData(centerX - radius, centerY - radius, radius * 2, radius * 2);
175
- const newCanvas = document.createElement('canvas');
176
- const newCtx = newCanvas.getContext('2d');
177
- newCanvas.width = radius * 2;
178
- newCanvas.height = radius * 2;
179
- newCtx?.putImageData(imageData, 0, 0);
180
- this.selectedImage = newCanvas.toDataURL();
181
- this.enviarDados();
182
- this.dynamicDialogRef.close(this.selectedImage);
183
- }
184
- }
185
- enviarDados() {
186
- const arr = this.dialogService.dialogComponentRefMap;
187
- const entries = arr.entries();
188
- const firstEntry = entries.next().value;
189
- const [firstKey, firstValue] = firstEntry;
190
- const instance = this.dialogService.getInstance(firstKey);
191
- instance.config.data.id.imagemCortada = this.selectedImage;
192
- }
193
- retornaTamanhoCanvas() {
194
- if (this.widthTela < 500) {
195
- return this.widthTela * 0.7;
196
- }
197
- return this.widthTela * 0.4;
198
- }
199
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvCropImageComponent, deps: [{ token: i1.ImagensService }, { token: i1.NotificationService }, { token: i2.DialogService }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }], target: i0.ɵɵFactoryTarget.Component }); }
200
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: KvCropImageComponent, isStandalone: true, selector: "kv-crop-image", host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "cropCanvas", first: true, predicate: ["cropCanvas"], descendants: true }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<kv-modal [actions]=\"actionsModal\">\r\n <div class=\"crop-container\">\r\n <canvas #cropCanvas class=\"crop-canvas\"></canvas>\r\n <div class=\"crop-border\"></div>\r\n </div>\r\n \r\n <div class=\"w-full zoom-container\">\r\n <kv-label label=\"Zoom\" style=\"text-align: left;\"/>\r\n <p-slider [(ngModel)]=\"valueZoom\" (onChange)=\"onZoomChange($event)\"></p-slider>\r\n </div>\r\n</kv-modal>\r\n", styles: [".crop-container{display:flex;justify-content:center;align-items:center}.crop-canvas{border:1px solid black;border-radius:12px}.crop-border{position:absolute;width:225px;height:225px;border:2px solid black;border-radius:50%;pointer-events:none}.zoom-container{padding-top:20px;padding-bottom:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: KvModalModule }, { kind: "component", type: i4.KvModalComponent, selector: "kv-modal", inputs: ["actions", "actionsPosition", "subtitle", "subHeader"] }, { kind: "ngmodule", type: PrimeNgModule }, { kind: "ngmodule", type: KvLabelModule }, { kind: "component", type: i5.KvLabelComponent, selector: "kv-label", inputs: ["componentId", "label"] }, { kind: "ngmodule", type: SliderModule }, { kind: "component", type: i6.Slider, selector: "p-slider", inputs: ["animate", "disabled", "min", "max", "orientation", "step", "range", "style", "styleClass", "ariaLabel", "ariaLabelledBy", "tabindex", "autofocus"], outputs: ["onChange", "onSlideEnd"] }] }); }
201
- }
202
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvCropImageComponent, decorators: [{
203
- type: Component,
204
- args: [{ selector: 'kv-crop-image', standalone: true, imports: [
205
- CommonModule,
206
- FormsModule,
207
- KvModalModule,
208
- PrimeNgModule,
209
- KvLabelModule,
210
- SliderModule
211
- ], template: "<kv-modal [actions]=\"actionsModal\">\r\n <div class=\"crop-container\">\r\n <canvas #cropCanvas class=\"crop-canvas\"></canvas>\r\n <div class=\"crop-border\"></div>\r\n </div>\r\n \r\n <div class=\"w-full zoom-container\">\r\n <kv-label label=\"Zoom\" style=\"text-align: left;\"/>\r\n <p-slider [(ngModel)]=\"valueZoom\" (onChange)=\"onZoomChange($event)\"></p-slider>\r\n </div>\r\n</kv-modal>\r\n", styles: [".crop-container{display:flex;justify-content:center;align-items:center}.crop-canvas{border:1px solid black;border-radius:12px}.crop-border{position:absolute;width:225px;height:225px;border:2px solid black;border-radius:50%;pointer-events:none}.zoom-container{padding-top:20px;padding-bottom:20px}\n"] }]
212
- }], ctorParameters: () => [{ type: i1.ImagensService }, { type: i1.NotificationService }, { type: i2.DialogService }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }], propDecorators: { onWindowResize: [{
213
- type: HostListener,
214
- args: ['window:resize', ['$event']]
215
- }], cropCanvas: [{
216
- type: ViewChild,
217
- args: ['cropCanvas']
218
- }], fileInput: [{
219
- type: ViewChild,
220
- args: ['fileInput']
221
- }] } });
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtY3JvcC1pbWFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi1hdmF0YXIva3YtY3JvcC1pbWFnZS9rdi1jcm9wLWltYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWF2YXRhci9rdi1jcm9wLWltYWdlL2t2LWNyb3AtaW1hZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQTBDLFlBQVksRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQWMsaUJBQWlCLEVBQWtCLGFBQWEsRUFBdUIsYUFBYSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUosT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFnQjlDLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxpQkFBaUI7SUFHekQsY0FBYztRQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFBbUIsWUFBNEIsRUFDekIsbUJBQXdDLEVBQ3hDLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxtQkFBd0M7UUFDMUQsS0FBSyxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO1FBTDFC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O0lBQzlCLENBQUM7OEdBeE5VLG9CQUFvQjtrR0FBcEIsb0JBQW9CLHVXQ3RCakMsb2JBV0EsbVdER0ksWUFBWSw4QkFDWixXQUFXLDhWQUNYLGFBQWEsdUtBQ2IsYUFBYSw4QkFDYixhQUFhLHdJQUNiLFlBQVk7OzJGQUdILG9CQUFvQjtrQkFkaEMsU0FBUzsrQkFDRSxlQUFlLGNBR2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixZQUFZO3FCQUNiO2tOQUtELGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBOEJoQixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0MsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBBY3Rpb25JdGVtLCBCYXNlQ29tcG9uZW50Q3J1ZCwgSW1hZ2Vuc1NlcnZpY2UsIEt2TW9kYWxNb2R1bGUsIE5vdGlmaWNhdGlvblNlcnZpY2UsIFByaW1lTmdNb2R1bGUgfSBmcm9tICdwcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9wdWJsaWMtYXBpJztcclxuaW1wb3J0IHsgS3ZMYWJlbE1vZHVsZSB9IGZyb20gJy4uLy4uL2t2LWxhYmVsL2t2LWxhYmVsLm1vZHVsZSc7XHJcbmltcG9ydCB7IFNsaWRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc2xpZGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtY3JvcC1pbWFnZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LWNyb3AtaW1hZ2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9rdi1jcm9wLWltYWdlLmNvbXBvbmVudC5zY3NzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLCBcclxuICAgIEt2TW9kYWxNb2R1bGUsXHJcbiAgICBQcmltZU5nTW9kdWxlLFxyXG4gICAgS3ZMYWJlbE1vZHVsZSxcclxuICAgIFNsaWRlck1vZHVsZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEt2Q3JvcEltYWdlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudENydWQge1xyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIHRoaXMud2lkdGhUZWxhID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB0aGlzLnVwZGF0ZUNhbnZhc1NpemUoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbWFnZVNlcnZpY2U6IEltYWdlbnNTZXJ2aWNlLCBcclxuICAgICAgb3ZlcnJpZGUgcmVhZG9ubHkgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSwgXHJcbiAgICAgIG92ZXJyaWRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgIHJlYWRvbmx5IGR5bmFtaWNEaWFsb2dSZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICAgIHByaXZhdGUgIHJlYWRvbmx5IGR5bmFtaWNEaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgKSB7IHN1cGVyKGRpYWxvZ1NlcnZpY2UsIG5vdGlmaWNhdGlvblNlcnZpY2UpIFxyXG5cclxuICAgIHRoaXMud2lkdGhUZWxhID0gd2luZG93LmlubmVyV2lkdGg7IFxyXG4gICAgdGhpcy5zZWxlY3RlZEltYWdlID0gdGhpcy5keW5hbWljRGlhbG9nQ29uZmlnLmRhdGEuaWQuaW1hZ2VtU2VsZWNpb25hZGE7XHJcbiAgICB0aGlzLm9wZW5Dcm9wTW9kYWwoKTtcclxuICB9XHJcblxyXG4gIHdpZHRoVGVsYSE6IG51bWJlcjtcclxuICBoZWlnaHRUZWxhITogbnVtYmVyO1xyXG4gIGltYWdlTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW1hZ2VYOiBudW1iZXIgPSAwO1xyXG4gIGltYWdlWTogbnVtYmVyID0gMDtcclxuICBzdGFydFg6IG51bWJlciA9IDA7XHJcbiAgc3RhcnRZOiBudW1iZXIgPSAwO1xyXG4gIHZhbHVlWm9vbTogbnVtYmVyID0gNTA7XHJcbiAgc2NhbGVGYWN0b3I6IG51bWJlciA9IDE7XHJcblxyXG4gIHNlbGVjdGVkSW1hZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuICBAVmlld0NoaWxkKCdjcm9wQ2FudmFzJykgY3JvcENhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGFjdGlvbnNNb2RhbDogQWN0aW9uSXRlbVtdID0gW1xyXG4gICAge1xyXG4gICAgICBsYWJlbDogJ0NhbmNlbGFyJyxcclxuICAgICAgc2V2ZXJpdHk6ICd0ZXJ0aWFyeScsXHJcbiAgICAgIGljb246ICdjYW5jZWwnLFxyXG4gICAgICBjb21tYW5kOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5keW5hbWljRGlhbG9nUmVmLmNsb3NlKClcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnUmVjb3J0YXInLFxyXG4gICAgICBzZXZlcml0eTogJ3ByaW1hcnknLFxyXG4gICAgICBpY29uOiAnY3JvcCcsXHJcbiAgICAgIGNvbW1hbmQ6IChlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNyb3BJbWFnZSgpXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICBcclxuICBdO1xyXG5cclxuICBvcGVuQ3JvcE1vZGFsKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5jcm9wQ2FudmFzLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgaW1nLnNyYyA9IHRoaXMuc2VsZWN0ZWRJbWFnZTtcclxuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pbWFnZVggPSAoY2FudmFzLndpZHRoIC0gaW1nLndpZHRoICogdGhpcy5zY2FsZUZhY3RvcikgLyAyO1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlWSA9IChjYW52YXMuaGVpZ2h0IC0gaW1nLmhlaWdodCAqIHRoaXMuc2NhbGVGYWN0b3IpIC8gMjtcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gdGhpcy5yZXRvcm5hVGFtYW5ob0NhbnZhcygpO1xyXG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gNDAwO1xyXG4gICAgICAgICAgICB0aGlzLnJlZHJhd0NhbnZhcyhjdHgsIGltZyk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUltYWdlTW92ZShjYW52YXMsIGN0eCwgaW1nKTtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplTW91c2VXaGVlbChjYW52YXMsIGN0eCwgaW1nKTtcclxuICAgICAgICB9O1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICByZWRyYXdDYW52YXMoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsLCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcclxuICAgIGlmICghY3R4KSByZXR1cm47XHJcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGN0eC5jYW52YXMud2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTtcclxuXHJcbiAgICBjdHguZmlsdGVyID0gJ2JsdXIoNXB4KSBvcGFjaXR5KDAuOSknO1xyXG4gICAgXHJcbiAgICBjdHguZHJhd0ltYWdlKGltZywgdGhpcy5pbWFnZVgsIHRoaXMuaW1hZ2VZLCBpbWcud2lkdGggKiB0aGlzLnNjYWxlRmFjdG9yLCBpbWcuaGVpZ2h0ICogdGhpcy5zY2FsZUZhY3Rvcik7XHJcbiAgICBjdHguZmlsdGVyID0gJ25vbmUnO1xyXG4gICAgXHJcbiAgICB0aGlzLmRyYXdJbWFnZUluQ3JvcEFyZWEoY3R4LCBpbWcpO1xyXG5cclxuICAgIHRoaXMuZHJhd0Nyb3BBcmVhKGN0eCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplSW1hZ2VNb3ZlKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSB7XHJcbiAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XHJcblxyXG4gICAgY2FudmFzLm9ubW91c2Vkb3duID0gKGUpID0+IHtcclxuICAgICAgICBpc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gJ2dyYWJiaW5nJzsgXHJcbiAgICAgICAgdGhpcy5zdGFydFggPSBlLm9mZnNldFggLSB0aGlzLmltYWdlWDtcclxuICAgICAgICB0aGlzLnN0YXJ0WSA9IGUub2Zmc2V0WSAtIHRoaXMuaW1hZ2VZO1xyXG4gICAgfTtcclxuXHJcbiAgICBjYW52YXMub25tb3VzZW1vdmUgPSAoZSkgPT4ge1xyXG4gICAgICAgIGlmIChpc0RyYWdnaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VYID0gZS5vZmZzZXRYIC0gdGhpcy5zdGFydFg7XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VZID0gZS5vZmZzZXRZIC0gdGhpcy5zdGFydFk7XHJcbiAgICAgICAgICAgIHRoaXMucmVkcmF3Q2FudmFzKGN0eCwgaW1nKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNhbnZhcy5vbm1vdXNldXAgPSAoKSA9PiB7XHJcbiAgICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XHJcbiAgICB9O1xyXG5cclxuICAgIGNhbnZhcy5vbm1vdXNlb3V0ID0gKCkgPT4ge1xyXG4gICAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gJ2dyYWInO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVNb3VzZVdoZWVsKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSB7XHJcbiAgICBjYW52YXMub253aGVlbCA9IChlKSA9PiB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5kZWx0YVkgPiAwID8gLTAuMSA6IDAuMTtcclxuICAgICAgICB0aGlzLnNjYWxlRmFjdG9yID0gTWF0aC5taW4oTWF0aC5tYXgodGhpcy5zY2FsZUZhY3RvciArIGRlbHRhLCAwLjEpLCA1KTsgLy8gbGltaXRhIG8gZmF0b3IgZGUgZXNjYWxhIGVudHJlIDAuMSBlIDVcclxuICAgICAgICB0aGlzLnJlZHJhd0NhbnZhcyhjdHgsIGltZyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZVpvb20gPSB0aGlzLnNjYWxlRmFjdG9yICogNTA7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZHJhd0ltYWdlSW5Dcm9wQXJlYShjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwsIGltZzogSFRNTEltYWdlRWxlbWVudCkge1xyXG4gICAgICBpZiAoIWN0eCkgcmV0dXJuO1xyXG5cclxuICAgICAgLy8gQ2FsY3VsYSBhIHBvc2nDp8OjbyBkYSDDoXJlYSBkZSBjb3J0ZVxyXG4gICAgICBjb25zdCBjcm9wWCA9IChjdHguY2FudmFzLndpZHRoIC0gMjI1KSAvIDI7XHJcbiAgICAgIGNvbnN0IGNyb3BZID0gKGN0eC5jYW52YXMuaGVpZ2h0IC0gMjI1KSAvIDI7XHJcblxyXG4gICAgICAvLyBEZXNlbmhhIGEgaW1hZ2VtIGRlIG7Do28gZGVzZm9jYWRhIGRlbnRybyBkYSDDoXJlYSBkZSBjb3J0ZVxyXG4gICAgICBjdHguc2F2ZSgpO1xyXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgIGN0eC5hcmMoY3JvcFggKyAxMTIuNSwgY3JvcFkgKyAxMTIuNSwgMTEyLjUsIDAsIE1hdGguUEkgKiAyLCB0cnVlKTtcclxuICAgICAgY3R4LmNsaXAoKTtcclxuICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIHRoaXMuaW1hZ2VYLCB0aGlzLmltYWdlWSwgaW1nLndpZHRoICogdGhpcy5zY2FsZUZhY3RvciwgaW1nLmhlaWdodCAqIHRoaXMuc2NhbGVGYWN0b3IpO1xyXG4gICAgICBjdHgucmVzdG9yZSgpO1xyXG4gIH1cclxuXHJcbiAgZHJhd0Nyb3BBcmVhKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCkge1xyXG4gICAgICBpZiAoIWN0eCkgcmV0dXJuO1xyXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgIGNvbnN0IGNyb3BYID0gKGN0eC5jYW52YXMud2lkdGggLSAyMjUpIC8gMjtcclxuICAgICAgY29uc3QgY3JvcFkgPSAoY3R4LmNhbnZhcy5oZWlnaHQgLSAyMjUpIC8gMjtcclxuICAgICAgY3R4LmFyYyhjcm9wWCArIDExMi41LCBjcm9wWSArIDExMi41LCAxMTIuNSwgMCwgTWF0aC5QSSAqIDIsIHRydWUpO1xyXG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgICBjdHgubGluZVdpZHRoID0gMjtcclxuICAgICAgY3R4LnN0cm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ2FudmFzU2l6ZSgpIHtcclxuICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5jcm9wQ2FudmFzLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IHRoaXMuc2VsZWN0ZWRJbWFnZTtcclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaW1hZ2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5pbWFnZVggPSAoY2FudmFzLndpZHRoIC0gaW1nLndpZHRoICogdGhpcy5zY2FsZUZhY3RvcikgLyAyO1xyXG4gICAgICAgICAgdGhpcy5pbWFnZVkgPSAoY2FudmFzLmhlaWdodCAtIGltZy5oZWlnaHQgKiB0aGlzLnNjYWxlRmFjdG9yKSAvIDI7XHJcbiAgICAgICAgICBjYW52YXMud2lkdGggPSB0aGlzLnJldG9ybmFUYW1hbmhvQ2FudmFzKCk7XHJcbiAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gNDAwO1xyXG4gICAgICAgICAgdGhpcy5yZWRyYXdDYW52YXMoY3R4LCBpbWcpO1xyXG4gICAgICB9O1xyXG4gIH1cclxuXHJcbiAgb25ab29tQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuY3JvcENhbnZhcy5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgIGltZy5zcmMgPSB0aGlzLnNlbGVjdGVkSW1hZ2U7XHJcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2NhbGVGYWN0b3IgPSBldmVudC52YWx1ZSAvIDUwO1xyXG4gICAgICAgIHRoaXMucmVkcmF3Q2FudmFzKGN0eCwgaW1nKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjcm9wSW1hZ2UoKSB7XHJcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLmNyb3BDYW52YXMubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgaWYgKGN0eCkge1xyXG4gICAgICBjb25zdCBjZW50ZXJYID0gY2FudmFzLndpZHRoIC8gMjtcclxuICAgICAgY29uc3QgY2VudGVyWSA9IGNhbnZhcy5oZWlnaHQgLyAyO1xyXG4gICAgICBjb25zdCByYWRpdXMgPSAxMDA7XHJcbiAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoY2VudGVyWCAtIHJhZGl1cywgY2VudGVyWSAtIHJhZGl1cywgcmFkaXVzICogMiwgcmFkaXVzICogMik7XHJcbiAgICAgIGNvbnN0IG5ld0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICBjb25zdCBuZXdDdHggPSBuZXdDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgbmV3Q2FudmFzLndpZHRoID0gcmFkaXVzICogMjtcclxuICAgICAgbmV3Q2FudmFzLmhlaWdodCA9IHJhZGl1cyAqIDI7XHJcbiAgICAgIG5ld0N0eD8ucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG5ld0NhbnZhcy50b0RhdGFVUkwoKTtcclxuICAgICAgdGhpcy5lbnZpYXJEYWRvcygpXHJcbiAgICAgIHRoaXMuZHluYW1pY0RpYWxvZ1JlZi5jbG9zZSh0aGlzLnNlbGVjdGVkSW1hZ2UpXHJcbiAgICB9XHJcbiAgfSAgICBcclxuXHJcbiAgZW52aWFyRGFkb3MoKXtcclxuICAgIGNvbnN0IGFycjogTWFwPER5bmFtaWNEaWFsb2dSZWY8YW55PiwgQ29tcG9uZW50UmVmPGFueT4+ID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcFxyXG4gICAgY29uc3QgZW50cmllcyA9IGFyci5lbnRyaWVzKCk7XHJcbiAgICBjb25zdCBmaXJzdEVudHJ5ID0gZW50cmllcy5uZXh0KCkudmFsdWU7XHJcbiAgICBjb25zdCBbZmlyc3RLZXksIGZpcnN0VmFsdWVdID0gZmlyc3RFbnRyeTtcclxuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmdldEluc3RhbmNlKGZpcnN0S2V5KVxyXG5cclxuICAgIGluc3RhbmNlLmNvbmZpZy5kYXRhLmlkLmltYWdlbUNvcnRhZGEgPSB0aGlzLnNlbGVjdGVkSW1hZ2VcclxuICB9IFxyXG5cclxuICByZXRvcm5hVGFtYW5ob0NhbnZhcygpOiBudW1iZXIge1xyXG4gICAgaWYodGhpcy53aWR0aFRlbGEgPCA1MDApIHtcclxuICAgIHJldHVybiAgdGhpcy53aWR0aFRlbGEgKiAwLjc7XHJcbiAgICB9IFxyXG4gICAgcmV0dXJuIHRoaXMud2lkdGhUZWxhICogMC40O1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGt2LW1vZGFsIFthY3Rpb25zXT1cImFjdGlvbnNNb2RhbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNyb3AtY29udGFpbmVyXCI+XHJcbiAgICAgIDxjYW52YXMgI2Nyb3BDYW52YXMgY2xhc3M9XCJjcm9wLWNhbnZhc1wiPjwvY2FudmFzPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY3JvcC1ib3JkZXJcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgPGRpdiBjbGFzcz1cInctZnVsbCB6b29tLWNvbnRhaW5lclwiPlxyXG4gICAgICA8a3YtbGFiZWwgbGFiZWw9XCJab29tXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0O1wiLz5cclxuICAgICAgPHAtc2xpZGVyIFsobmdNb2RlbCldPVwidmFsdWVab29tXCIgKG9uQ2hhbmdlKT1cIm9uWm9vbUNoYW5nZSgkZXZlbnQpXCI+PC9wLXNsaWRlcj5cclxuICAgIDwvZGl2PlxyXG48L2t2LW1vZGFsPlxyXG4iXX0=
@@ -1,39 +0,0 @@
1
- import { ElementRef } from '@angular/core';
2
- import { DialogService, DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';
3
- import { ActionItem, BaseComponentCrud, ImagensService, NotificationService } from 'projects/keevo-components/src/public-api';
4
- import * as i0 from "@angular/core";
5
- export declare class KvCropImageComponent extends BaseComponentCrud {
6
- imageService: ImagensService;
7
- readonly notificationService: NotificationService;
8
- readonly dialogService: DialogService;
9
- private readonly dynamicDialogRef;
10
- private readonly dynamicDialogConfig;
11
- onWindowResize(): void;
12
- constructor(imageService: ImagensService, notificationService: NotificationService, dialogService: DialogService, dynamicDialogRef: DynamicDialogRef, dynamicDialogConfig: DynamicDialogConfig);
13
- widthTela: number;
14
- heightTela: number;
15
- imageLoaded: boolean;
16
- imageX: number;
17
- imageY: number;
18
- startX: number;
19
- startY: number;
20
- valueZoom: number;
21
- scaleFactor: number;
22
- selectedImage: string;
23
- cropCanvas: ElementRef<HTMLCanvasElement>;
24
- fileInput: ElementRef;
25
- actionsModal: ActionItem[];
26
- openCropModal(): void;
27
- redrawCanvas(ctx: CanvasRenderingContext2D | null, img: HTMLImageElement): void;
28
- initializeImageMove(canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D | null, img: HTMLImageElement): void;
29
- initializeMouseWheel(canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D | null, img: HTMLImageElement): void;
30
- drawImageInCropArea(ctx: CanvasRenderingContext2D | null, img: HTMLImageElement): void;
31
- drawCropArea(ctx: CanvasRenderingContext2D | null): void;
32
- updateCanvasSize(): void;
33
- onZoomChange(event: any): void;
34
- cropImage(): void;
35
- enviarDados(): void;
36
- retornaTamanhoCanvas(): number;
37
- static ɵfac: i0.ɵɵFactoryDeclaration<KvCropImageComponent, never>;
38
- static ɵcmp: i0.ɵɵComponentDeclaration<KvCropImageComponent, "kv-crop-image", never, {}, {}, never, never, true, never>;
39
- }