@guajiritos/image-picker 17.1.4 → 18.0.1

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.
@@ -66,10 +66,10 @@ class I18nPipe {
66
66
  transform(key, language) {
67
67
  return language === 'en' ? this.en?.[key] : this.es?.[key];
68
68
  }
69
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: I18nPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
70
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: I18nPipe, name: "i18n" });
69
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: I18nPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
70
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: I18nPipe, name: "i18n" });
71
71
  }
72
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: I18nPipe, decorators: [{
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: I18nPipe, decorators: [{
73
73
  type: Pipe,
74
74
  args: [{
75
75
  name: 'i18n'
@@ -88,10 +88,10 @@ class CalculateSizePipe {
88
88
  return 0;
89
89
  }
90
90
  }
91
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: CalculateSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
92
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: CalculateSizePipe, name: "calculateSize" });
91
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CalculateSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
92
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: CalculateSizePipe, name: "calculateSize" });
93
93
  }
94
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: CalculateSizePipe, decorators: [{
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CalculateSizePipe, decorators: [{
95
95
  type: Pipe,
96
96
  args: [{
97
97
  name: 'calculateSize'
@@ -99,11 +99,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
99
99
  }] });
100
100
 
101
101
  class PipesModule {
102
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: PipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
103
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: PipesModule, declarations: [I18nPipe, CalculateSizePipe], exports: [I18nPipe, CalculateSizePipe] });
104
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: PipesModule });
102
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
103
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: PipesModule, declarations: [I18nPipe, CalculateSizePipe], exports: [I18nPipe, CalculateSizePipe] });
104
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PipesModule });
105
105
  }
106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: PipesModule, decorators: [{
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PipesModule, decorators: [{
107
107
  type: NgModule,
108
108
  args: [{
109
109
  declarations: [I18nPipe, CalculateSizePipe],
@@ -585,10 +585,10 @@ class GuajiritosImagePicker {
585
585
  this.noEdit.set(false);
586
586
  this.imageRemoved.emit();
587
587
  }
588
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: GuajiritosImagePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
589
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: GuajiritosImagePicker, isStandalone: true, selector: "guajiritos-image-picker", inputs: { appearance: "appearance", color: "color", imagesAllowed: "imagesAllowed", base64Image: "base64Image", _imageSrc: "_imageSrc", _config: "_config" }, outputs: { $imageChanged: "$imageChanged", $imageOriginal: "$imageOriginal", imageRemoved: "imageRemoved" }, viewQueries: [{ propertyName: "imagePicker", first: true, predicate: ["imagePicker"], descendants: true }], ngImport: i0, template: "@if (!loadImage()) {\n <div class='place-image'>\n <div class='image-holder'\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\n (click)='onUpload($event)'>\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n </div>\n}\n\n@if (loadImage()) {\n <div class='place-image'>\n <div class='image-holder-loaded'\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n @if (imageSrc()?.length) {\n <p class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\n </p>\n }\n <div class='editing-bar-btn'>\n @if (!config()?.hideAddBtn) {\n <button id='upload-img' mat-icon-button (click)='onUpload($event)'\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n }\n @if (!config()?.hideEditBtn && !noEdit()) {\n <button id='edit-img' mat-icon-button (click)='showEditPanel.set(true)'\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\n <mat-icon class='mat-18'>edit</mat-icon>\n </button>\n }\n @if (!config()?.hideDownloadBtn) {\n <a id='download-img' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\n <mat-icon class='mat-18'>cloud_download</mat-icon>\n </a>\n }\n @if (!config()?.hideDeleteBtn) {\n <button id='delete-img' mat-icon-button (click)='onRemove()'\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>delete</mat-icon>\n </button>\n }\n </div>\n </div>\n}\n\n@if (showEditPanel()) {\n <div id='popup' class='popup'>\n <div class='popup-clear'>\n <button mat-icon-button (click)='onCloseEditPanel()'>\n <mat-icon class='mat-18'>clear</mat-icon>\n </button>\n </div>\n <div class='image-container'>\n <div class='image-holder-full'>\n <img id='image-full' [src]='imageSrc()' alt=''>\n <div id='image-cropper' class='image-cropper'>\n <div id='image-cropper-header'>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n </div>\n <div class='control-panel'>\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\n <div class='quality-container'>\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\n <input matSliderThumb [formControl]='quality'>\n </mat-slider>\n </div>\n <div class='item-panel'>\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\n </mat-checkbox>\n </div>\n <div class='max-dimension-container'>\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(true, false)' matInput\n [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(false, true)' matInput\n [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\n <div class='formats-selection'>\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\n @for (format of allFormats; track format) {\n <mat-option [value]='format'>\n {{ format }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n <div class='refresh-container'>\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\n </mat-checkbox>\n <div class='d-flex '>\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\n <mat-icon>refresh</mat-icon>\n </button>\n @if (showCrop.value) {\n <p>\n <button mat-icon-button [color]='color' (click)='onCrop()'>\n <mat-icon>crop</mat-icon>\n </button>\n </p>\n }\n </div>\n </div>\n @if (showCrop.value) {\n <div class='dimension-container'>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n }\n <div class='save-container'>\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\n {{ 'SAVE' | i18n: config()?.language }}\n </button>\n @if (imageSrc()?.length) {\n <p class='mat-caption image-caption'\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb\n &nbsp; {{ format.value }}\n </p>\n }\n </div>\n </div>\n </div>\n </div>\n}\n", styles: [".d-none{display:none}.d-flex{display:flex}.fw-600{font-weight:600}.w-100{width:100%}.mw-100{max-width:100%}.w-48{width:48%}.mw-48{max-width:48%}.float-right{float:right}p{margin:0!important;padding:0!important}.place-image{flex-direction:column;box-sizing:border-box;display:flex;place-content:flex-start;align-items:center}.place-image .image-holder{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;width:320px;height:240px;border-radius:16px;max-width:100%!important;background-color:#fff}@media (max-width: 599px){.place-image .image-holder{max-width:100%!important;max-height:250px!important}}.place-image .image-holder .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .image-holder-loaded{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;max-width:100%!important;width:320px;height:240px;border-radius:4px;padding:2px}.place-image .image-holder-loaded .image-caption{position:absolute;right:0;bottom:-22px}.place-image .image-holder-loaded img{height:100%;max-height:100%;width:100%;max-width:100%;object-fit:contain;object-position:center}@media (max-width: 599px){.place-image .image-holder-loaded{max-height:195px!important}}.place-image .image-holder-loaded .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder-loaded .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder-loaded:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .editing-bar-btn{margin-top:2px;display:flex;flex-direction:row;box-sizing:border-box;place-content:flex-start;align-items:flex-start}.place-image .editing-bar-btn .mat-icon-button{height:20px;line-height:20px;width:24px}.place-image .editing-bar-btn mat-icon{line-height:20px!important;font-size:20px!important;width:20px!important;height:20px!important}.place-image .editing-bar-btn button,.place-image .editing-bar-btn a{margin:2px}.popup{width:100vw;max-height:100%;height:100%;overflow:auto;position:fixed;top:0;left:0;z-index:1000;padding:24px;color:#fff;box-sizing:border-box;animation-name:show;animation-duration:.4s}.popup .popup-clear{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-end;align-items:center}.popup .image-container{margin-top:50px;margin-bottom:50px;height:calc(100vh - 188px);min-height:calc(100vh - 188px);min-width:100%;width:100%;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start center;align-items:flex-start}.popup .image-container .image-holder-full{height:auto;width:auto;position:relative;display:contents}.popup img{max-height:600px;max-width:100%;object-fit:contain;object-position:center;margin:8px;transition:all .5s ease}@media (max-width: 1024px){.popup{background-color:#000000d9;padding:8px}.popup img{max-height:100%;max-width:100%}}@media (max-width: 599px){.popup img{margin:0}}.popup .control-panel{color:#000;background-color:#fff;margin:8px;padding:16px;max-width:100%;width:18rem;border-radius:8px;flex-direction:column;box-sizing:border-box;display:flex;place-content:stretch flex-start;align-items:stretch}@media (max-width: 599px){.popup .control-panel{margin:8px 0;width:100%}}.popup .control-panel .title-panel{padding:0 4px;font-size:16px;margin-bottom:16px!important}.popup .control-panel .item-panel{padding:0 4px!important;font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:4px}.popup .control-panel .formats-selection{margin-top:8px!important;flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .max-dimension-container{margin-top:16px!important;flex-flow:row;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .dimension-container{margin-top:8px!important;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .save-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:center space-between;align-items:center}.popup .control-panel .save-container .save-button{padding:0 8px;height:34px;box-sizing:border-box;font-weight:600}.popup .control-panel .quality-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .refresh-container{display:flex;justify-content:space-between;align-items:center}.popup .control-panel .refresh-container div{display:flex;align-items:center}@keyframes show{0%{top:-100vh;opacity:0}to{top:0;opacity:1}}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-panel{background:#fff!important}input.mat-input-element{color:#000000d9}.mat-checkbox-background{background-color:#fff}.image-cropper{position:absolute;width:150px;height:150px;border:2.5px solid white;box-sizing:border-box;resize:both;overflow:auto;opacity:0}.image-cropper #image-cropper-header{padding:10px;cursor:move;z-index:10;background-color:transparent;height:85%}.image-cropper #image-cropper-header mat-icon{color:#fff}.btn{padding:4px 8px;border-radius:4px;cursor:pointer}.btn mat-icon{color:#000000d1}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: PipesModule }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: CalculateSizePipe, name: "calculateSize" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i6.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i6.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i12.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i12.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i12.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i12.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
588
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: GuajiritosImagePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
589
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: GuajiritosImagePicker, isStandalone: true, selector: "guajiritos-image-picker", inputs: { appearance: "appearance", color: "color", imagesAllowed: "imagesAllowed", base64Image: "base64Image", _imageSrc: "_imageSrc", _config: "_config" }, outputs: { $imageChanged: "$imageChanged", $imageOriginal: "$imageOriginal", imageRemoved: "imageRemoved" }, viewQueries: [{ propertyName: "imagePicker", first: true, predicate: ["imagePicker"], descendants: true }], ngImport: i0, template: "@if (!loadImage()) {\r\n <div class='place-image'>\r\n <div class='image-holder'\r\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\r\n (click)='onUpload($event)'>\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (loadImage()) {\r\n <div class='place-image'>\r\n <div class='image-holder-loaded'\r\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n @if (imageSrc()?.length) {\r\n <p class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\r\n </p>\r\n }\r\n <div class='editing-bar-btn'>\r\n @if (!config()?.hideAddBtn) {\r\n <button id='upload-img' mat-icon-button (click)='onUpload($event)'\r\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n }\r\n @if (!config()?.hideEditBtn && !noEdit()) {\r\n <button id='edit-img' mat-icon-button (click)='showEditPanel.set(true)'\r\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>edit</mat-icon>\r\n </button>\r\n }\r\n @if (!config()?.hideDownloadBtn) {\r\n <a id='download-img' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\r\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\r\n <mat-icon class='mat-18'>cloud_download</mat-icon>\r\n </a>\r\n }\r\n @if (!config()?.hideDeleteBtn) {\r\n <button id='delete-img' mat-icon-button (click)='onRemove()'\r\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (showEditPanel()) {\r\n <div id='popup' class='popup'>\r\n <div class='popup-clear'>\r\n <button mat-icon-button (click)='onCloseEditPanel()'>\r\n <mat-icon class='mat-18'>clear</mat-icon>\r\n </button>\r\n </div>\r\n <div class='image-container'>\r\n <div class='image-holder-full'>\r\n <img id='image-full' [src]='imageSrc()' alt=''>\r\n <div id='image-cropper' class='image-cropper'>\r\n <div id='image-cropper-header'>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n <div class='control-panel'>\r\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\r\n <div class='quality-container'>\r\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\r\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\r\n <input matSliderThumb [formControl]='quality'>\r\n </mat-slider>\r\n </div>\r\n <div class='item-panel'>\r\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\r\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\r\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\r\n </mat-checkbox>\r\n </div>\r\n <div class='max-dimension-container'>\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(true, false)' matInput\r\n [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(false, true)' matInput\r\n [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\r\n <div class='formats-selection'>\r\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\r\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\r\n @for (format of allFormats; track format) {\r\n <mat-option [value]='format'>\r\n {{ format }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class='refresh-container'>\r\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\r\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\r\n </mat-checkbox>\r\n <div class='d-flex '>\r\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n @if (showCrop.value) {\r\n <p>\r\n <button mat-icon-button [color]='color' (click)='onCrop()'>\r\n <mat-icon>crop</mat-icon>\r\n </button>\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n @if (showCrop.value) {\r\n <div class='dimension-container'>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\r\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\r\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n }\r\n <div class='save-container'>\r\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\r\n {{ 'SAVE' | i18n: config()?.language }}\r\n </button>\r\n @if (imageSrc()?.length) {\r\n <p class='mat-caption image-caption'\r\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb\r\n &nbsp; {{ format.value }}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [".d-none{display:none}.d-flex{display:flex}.fw-600{font-weight:600}.w-100{width:100%}.mw-100{max-width:100%}.w-48{width:48%}.mw-48{max-width:48%}.float-right{float:right}p{margin:0!important;padding:0!important}.place-image{flex-direction:column;box-sizing:border-box;display:flex;place-content:flex-start;align-items:center}.place-image .image-holder{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;width:320px;height:240px;border-radius:16px;max-width:100%!important;background-color:#fff}@media (max-width: 599px){.place-image .image-holder{max-width:100%!important;max-height:250px!important}}.place-image .image-holder .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .image-holder-loaded{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;max-width:100%!important;width:320px;height:240px;border-radius:4px;padding:2px}.place-image .image-holder-loaded .image-caption{position:absolute;right:0;bottom:-22px}.place-image .image-holder-loaded img{height:100%;max-height:100%;width:100%;max-width:100%;object-fit:contain;object-position:center}@media (max-width: 599px){.place-image .image-holder-loaded{max-height:195px!important}}.place-image .image-holder-loaded .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder-loaded .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder-loaded:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .editing-bar-btn{margin-top:2px;display:flex;flex-direction:row;box-sizing:border-box;place-content:flex-start;align-items:flex-start}.place-image .editing-bar-btn .mat-icon-button{height:20px;line-height:20px;width:24px}.place-image .editing-bar-btn mat-icon{line-height:20px!important;font-size:20px!important;width:20px!important;height:20px!important}.place-image .editing-bar-btn button,.place-image .editing-bar-btn a{margin:2px}.popup{width:100vw;max-height:100%;height:100%;overflow:auto;position:fixed;top:0;left:0;z-index:1000;padding:24px;color:#fff;box-sizing:border-box;animation-name:show;animation-duration:.4s}.popup .popup-clear{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-end;align-items:center}.popup .image-container{margin-top:50px;margin-bottom:50px;height:calc(100vh - 188px);min-height:calc(100vh - 188px);min-width:100%;width:100%;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start center;align-items:flex-start}.popup .image-container .image-holder-full{height:auto;width:auto;position:relative;display:contents}.popup img{max-height:600px;max-width:100%;object-fit:contain;object-position:center;margin:8px;transition:all .5s ease}@media (max-width: 1024px){.popup{background-color:#000000d9;padding:8px}.popup img{max-height:100%;max-width:100%}}@media (max-width: 599px){.popup img{margin:0}}.popup .control-panel{color:#000;background-color:#fff;margin:8px;padding:16px;max-width:100%;width:18rem;border-radius:8px;flex-direction:column;box-sizing:border-box;display:flex;place-content:stretch flex-start;align-items:stretch}@media (max-width: 599px){.popup .control-panel{margin:8px 0;width:100%}}.popup .control-panel .title-panel{padding:0 4px;font-size:16px;margin-bottom:16px!important}.popup .control-panel .item-panel{padding:0 4px!important;font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:4px}.popup .control-panel .formats-selection{margin-top:8px!important;flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .max-dimension-container{margin-top:16px!important;flex-flow:row;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .dimension-container{margin-top:8px!important;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .save-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:center space-between;align-items:center}.popup .control-panel .save-container .save-button{padding:0 8px;height:34px;box-sizing:border-box;font-weight:600}.popup .control-panel .quality-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .refresh-container{display:flex;justify-content:space-between;align-items:center}.popup .control-panel .refresh-container div{display:flex;align-items:center}@keyframes show{0%{top:-100vh;opacity:0}to{top:0;opacity:1}}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-panel{background:#fff!important}input.mat-input-element{color:#000000d9}.mat-checkbox-background{background-color:#fff}.image-cropper{position:absolute;width:150px;height:150px;border:2.5px solid white;box-sizing:border-box;resize:both;overflow:auto;opacity:0}.image-cropper #image-cropper-header{padding:10px;cursor:move;z-index:10;background-color:transparent;height:85%}.image-cropper #image-cropper-header mat-icon{color:#fff}.btn{padding:4px 8px;border-radius:4px;cursor:pointer}.btn mat-icon{color:#000000d1}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: PipesModule }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: CalculateSizePipe, name: "calculateSize" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i6.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i6.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i12.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i12.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i12.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i12.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
590
590
  }
591
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: GuajiritosImagePicker, decorators: [{
591
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: GuajiritosImagePicker, decorators: [{
592
592
  type: Component,
593
593
  args: [{ selector: 'guajiritos-image-picker', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
594
594
  NgStyle,
@@ -603,7 +603,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
603
603
  MatSelectModule,
604
604
  FormsModule,
605
605
  ReactiveFormsModule,
606
- ], template: "@if (!loadImage()) {\n <div class='place-image'>\n <div class='image-holder'\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\n (click)='onUpload($event)'>\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n </div>\n}\n\n@if (loadImage()) {\n <div class='place-image'>\n <div class='image-holder-loaded'\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n @if (imageSrc()?.length) {\n <p class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\n </p>\n }\n <div class='editing-bar-btn'>\n @if (!config()?.hideAddBtn) {\n <button id='upload-img' mat-icon-button (click)='onUpload($event)'\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n }\n @if (!config()?.hideEditBtn && !noEdit()) {\n <button id='edit-img' mat-icon-button (click)='showEditPanel.set(true)'\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\n <mat-icon class='mat-18'>edit</mat-icon>\n </button>\n }\n @if (!config()?.hideDownloadBtn) {\n <a id='download-img' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\n <mat-icon class='mat-18'>cloud_download</mat-icon>\n </a>\n }\n @if (!config()?.hideDeleteBtn) {\n <button id='delete-img' mat-icon-button (click)='onRemove()'\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>delete</mat-icon>\n </button>\n }\n </div>\n </div>\n}\n\n@if (showEditPanel()) {\n <div id='popup' class='popup'>\n <div class='popup-clear'>\n <button mat-icon-button (click)='onCloseEditPanel()'>\n <mat-icon class='mat-18'>clear</mat-icon>\n </button>\n </div>\n <div class='image-container'>\n <div class='image-holder-full'>\n <img id='image-full' [src]='imageSrc()' alt=''>\n <div id='image-cropper' class='image-cropper'>\n <div id='image-cropper-header'>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n </div>\n <div class='control-panel'>\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\n <div class='quality-container'>\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\n <input matSliderThumb [formControl]='quality'>\n </mat-slider>\n </div>\n <div class='item-panel'>\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\n </mat-checkbox>\n </div>\n <div class='max-dimension-container'>\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(true, false)' matInput\n [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(false, true)' matInput\n [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\n <div class='formats-selection'>\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\n @for (format of allFormats; track format) {\n <mat-option [value]='format'>\n {{ format }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n <div class='refresh-container'>\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\n </mat-checkbox>\n <div class='d-flex '>\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\n <mat-icon>refresh</mat-icon>\n </button>\n @if (showCrop.value) {\n <p>\n <button mat-icon-button [color]='color' (click)='onCrop()'>\n <mat-icon>crop</mat-icon>\n </button>\n </p>\n }\n </div>\n </div>\n @if (showCrop.value) {\n <div class='dimension-container'>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n }\n <div class='save-container'>\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\n {{ 'SAVE' | i18n: config()?.language }}\n </button>\n @if (imageSrc()?.length) {\n <p class='mat-caption image-caption'\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb\n &nbsp; {{ format.value }}\n </p>\n }\n </div>\n </div>\n </div>\n </div>\n}\n", styles: [".d-none{display:none}.d-flex{display:flex}.fw-600{font-weight:600}.w-100{width:100%}.mw-100{max-width:100%}.w-48{width:48%}.mw-48{max-width:48%}.float-right{float:right}p{margin:0!important;padding:0!important}.place-image{flex-direction:column;box-sizing:border-box;display:flex;place-content:flex-start;align-items:center}.place-image .image-holder{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;width:320px;height:240px;border-radius:16px;max-width:100%!important;background-color:#fff}@media (max-width: 599px){.place-image .image-holder{max-width:100%!important;max-height:250px!important}}.place-image .image-holder .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .image-holder-loaded{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;max-width:100%!important;width:320px;height:240px;border-radius:4px;padding:2px}.place-image .image-holder-loaded .image-caption{position:absolute;right:0;bottom:-22px}.place-image .image-holder-loaded img{height:100%;max-height:100%;width:100%;max-width:100%;object-fit:contain;object-position:center}@media (max-width: 599px){.place-image .image-holder-loaded{max-height:195px!important}}.place-image .image-holder-loaded .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder-loaded .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder-loaded:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .editing-bar-btn{margin-top:2px;display:flex;flex-direction:row;box-sizing:border-box;place-content:flex-start;align-items:flex-start}.place-image .editing-bar-btn .mat-icon-button{height:20px;line-height:20px;width:24px}.place-image .editing-bar-btn mat-icon{line-height:20px!important;font-size:20px!important;width:20px!important;height:20px!important}.place-image .editing-bar-btn button,.place-image .editing-bar-btn a{margin:2px}.popup{width:100vw;max-height:100%;height:100%;overflow:auto;position:fixed;top:0;left:0;z-index:1000;padding:24px;color:#fff;box-sizing:border-box;animation-name:show;animation-duration:.4s}.popup .popup-clear{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-end;align-items:center}.popup .image-container{margin-top:50px;margin-bottom:50px;height:calc(100vh - 188px);min-height:calc(100vh - 188px);min-width:100%;width:100%;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start center;align-items:flex-start}.popup .image-container .image-holder-full{height:auto;width:auto;position:relative;display:contents}.popup img{max-height:600px;max-width:100%;object-fit:contain;object-position:center;margin:8px;transition:all .5s ease}@media (max-width: 1024px){.popup{background-color:#000000d9;padding:8px}.popup img{max-height:100%;max-width:100%}}@media (max-width: 599px){.popup img{margin:0}}.popup .control-panel{color:#000;background-color:#fff;margin:8px;padding:16px;max-width:100%;width:18rem;border-radius:8px;flex-direction:column;box-sizing:border-box;display:flex;place-content:stretch flex-start;align-items:stretch}@media (max-width: 599px){.popup .control-panel{margin:8px 0;width:100%}}.popup .control-panel .title-panel{padding:0 4px;font-size:16px;margin-bottom:16px!important}.popup .control-panel .item-panel{padding:0 4px!important;font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:4px}.popup .control-panel .formats-selection{margin-top:8px!important;flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .max-dimension-container{margin-top:16px!important;flex-flow:row;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .dimension-container{margin-top:8px!important;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .save-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:center space-between;align-items:center}.popup .control-panel .save-container .save-button{padding:0 8px;height:34px;box-sizing:border-box;font-weight:600}.popup .control-panel .quality-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .refresh-container{display:flex;justify-content:space-between;align-items:center}.popup .control-panel .refresh-container div{display:flex;align-items:center}@keyframes show{0%{top:-100vh;opacity:0}to{top:0;opacity:1}}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-panel{background:#fff!important}input.mat-input-element{color:#000000d9}.mat-checkbox-background{background-color:#fff}.image-cropper{position:absolute;width:150px;height:150px;border:2.5px solid white;box-sizing:border-box;resize:both;overflow:auto;opacity:0}.image-cropper #image-cropper-header{padding:10px;cursor:move;z-index:10;background-color:transparent;height:85%}.image-cropper #image-cropper-header mat-icon{color:#fff}.btn{padding:4px 8px;border-radius:4px;cursor:pointer}.btn mat-icon{color:#000000d1}\n"] }]
606
+ ], template: "@if (!loadImage()) {\r\n <div class='place-image'>\r\n <div class='image-holder'\r\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\r\n (click)='onUpload($event)'>\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (loadImage()) {\r\n <div class='place-image'>\r\n <div class='image-holder-loaded'\r\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n @if (imageSrc()?.length) {\r\n <p class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\r\n </p>\r\n }\r\n <div class='editing-bar-btn'>\r\n @if (!config()?.hideAddBtn) {\r\n <button id='upload-img' mat-icon-button (click)='onUpload($event)'\r\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n }\r\n @if (!config()?.hideEditBtn && !noEdit()) {\r\n <button id='edit-img' mat-icon-button (click)='showEditPanel.set(true)'\r\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>edit</mat-icon>\r\n </button>\r\n }\r\n @if (!config()?.hideDownloadBtn) {\r\n <a id='download-img' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\r\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\r\n <mat-icon class='mat-18'>cloud_download</mat-icon>\r\n </a>\r\n }\r\n @if (!config()?.hideDeleteBtn) {\r\n <button id='delete-img' mat-icon-button (click)='onRemove()'\r\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (showEditPanel()) {\r\n <div id='popup' class='popup'>\r\n <div class='popup-clear'>\r\n <button mat-icon-button (click)='onCloseEditPanel()'>\r\n <mat-icon class='mat-18'>clear</mat-icon>\r\n </button>\r\n </div>\r\n <div class='image-container'>\r\n <div class='image-holder-full'>\r\n <img id='image-full' [src]='imageSrc()' alt=''>\r\n <div id='image-cropper' class='image-cropper'>\r\n <div id='image-cropper-header'>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n <div class='control-panel'>\r\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\r\n <div class='quality-container'>\r\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\r\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\r\n <input matSliderThumb [formControl]='quality'>\r\n </mat-slider>\r\n </div>\r\n <div class='item-panel'>\r\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\r\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\r\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\r\n </mat-checkbox>\r\n </div>\r\n <div class='max-dimension-container'>\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(true, false)' matInput\r\n [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(false, true)' matInput\r\n [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\r\n <div class='formats-selection'>\r\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\r\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\r\n @for (format of allFormats; track format) {\r\n <mat-option [value]='format'>\r\n {{ format }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class='refresh-container'>\r\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\r\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\r\n </mat-checkbox>\r\n <div class='d-flex '>\r\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n @if (showCrop.value) {\r\n <p>\r\n <button mat-icon-button [color]='color' (click)='onCrop()'>\r\n <mat-icon>crop</mat-icon>\r\n </button>\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n @if (showCrop.value) {\r\n <div class='dimension-container'>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\r\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\r\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n }\r\n <div class='save-container'>\r\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\r\n {{ 'SAVE' | i18n: config()?.language }}\r\n </button>\r\n @if (imageSrc()?.length) {\r\n <p class='mat-caption image-caption'\r\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb\r\n &nbsp; {{ format.value }}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [".d-none{display:none}.d-flex{display:flex}.fw-600{font-weight:600}.w-100{width:100%}.mw-100{max-width:100%}.w-48{width:48%}.mw-48{max-width:48%}.float-right{float:right}p{margin:0!important;padding:0!important}.place-image{flex-direction:column;box-sizing:border-box;display:flex;place-content:flex-start;align-items:center}.place-image .image-holder{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;width:320px;height:240px;border-radius:16px;max-width:100%!important;background-color:#fff}@media (max-width: 599px){.place-image .image-holder{max-width:100%!important;max-height:250px!important}}.place-image .image-holder .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .image-holder-loaded{flex-direction:column;box-sizing:border-box;display:flex;place-content:center;align-items:center;position:relative;max-width:100%!important;width:320px;height:240px;border-radius:4px;padding:2px}.place-image .image-holder-loaded .image-caption{position:absolute;right:0;bottom:-22px}.place-image .image-holder-loaded img{height:100%;max-height:100%;width:100%;max-width:100%;object-fit:contain;object-position:center}@media (max-width: 599px){.place-image .image-holder-loaded{max-height:195px!important}}.place-image .image-holder-loaded .image-upload-btn{transition:all .5s ease;position:relative;opacity:.85;width:50px;height:50px;box-sizing:content-box}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:50px;width:50px;height:50px;line-height:50px}@media (max-width: 599px){.place-image .image-holder-loaded .image-upload-btn{opacity:1;width:30px;height:30px}.place-image .image-holder-loaded .image-upload-btn mat-icon{font-size:30px;width:30px;height:30px;line-height:30px}}.place-image .image-holder-loaded:hover .image-upload-btn{opacity:1;transition:all .5s ease}.place-image .editing-bar-btn{margin-top:2px;display:flex;flex-direction:row;box-sizing:border-box;place-content:flex-start;align-items:flex-start}.place-image .editing-bar-btn .mat-icon-button{height:20px;line-height:20px;width:24px}.place-image .editing-bar-btn mat-icon{line-height:20px!important;font-size:20px!important;width:20px!important;height:20px!important}.place-image .editing-bar-btn button,.place-image .editing-bar-btn a{margin:2px}.popup{width:100vw;max-height:100%;height:100%;overflow:auto;position:fixed;top:0;left:0;z-index:1000;padding:24px;color:#fff;box-sizing:border-box;animation-name:show;animation-duration:.4s}.popup .popup-clear{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-end;align-items:center}.popup .image-container{margin-top:50px;margin-bottom:50px;height:calc(100vh - 188px);min-height:calc(100vh - 188px);min-width:100%;width:100%;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start center;align-items:flex-start}.popup .image-container .image-holder-full{height:auto;width:auto;position:relative;display:contents}.popup img{max-height:600px;max-width:100%;object-fit:contain;object-position:center;margin:8px;transition:all .5s ease}@media (max-width: 1024px){.popup{background-color:#000000d9;padding:8px}.popup img{max-height:100%;max-width:100%}}@media (max-width: 599px){.popup img{margin:0}}.popup .control-panel{color:#000;background-color:#fff;margin:8px;padding:16px;max-width:100%;width:18rem;border-radius:8px;flex-direction:column;box-sizing:border-box;display:flex;place-content:stretch flex-start;align-items:stretch}@media (max-width: 599px){.popup .control-panel{margin:8px 0;width:100%}}.popup .control-panel .title-panel{padding:0 4px;font-size:16px;margin-bottom:16px!important}.popup .control-panel .item-panel{padding:0 4px!important;font-size:12px;display:flex;justify-content:space-between;align-items:center;gap:4px}.popup .control-panel .formats-selection{margin-top:8px!important;flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .max-dimension-container{margin-top:16px!important;flex-flow:row;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .dimension-container{margin-top:8px!important;flex-flow:row wrap;box-sizing:border-box;display:flex;place-content:flex-start space-between;align-items:flex-start}.popup .control-panel .save-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:center space-between;align-items:center}.popup .control-panel .save-container .save-button{padding:0 8px;height:34px;box-sizing:border-box;font-weight:600}.popup .control-panel .quality-container{flex-direction:row;box-sizing:border-box;display:flex;place-content:flex-start;align-items:flex-start}.popup .control-panel .refresh-container{display:flex;justify-content:space-between;align-items:center}.popup .control-panel .refresh-container div{display:flex;align-items:center}@keyframes show{0%{top:-100vh;opacity:0}to{top:0;opacity:1}}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-panel{background:#fff!important}input.mat-input-element{color:#000000d9}.mat-checkbox-background{background-color:#fff}.image-cropper{position:absolute;width:150px;height:150px;border:2.5px solid white;box-sizing:border-box;resize:both;overflow:auto;opacity:0}.image-cropper #image-cropper-header{padding:10px;cursor:move;z-index:10;background-color:transparent;height:85%}.image-cropper #image-cropper-header mat-icon{color:#fff}.btn{padding:4px 8px;border-radius:4px;cursor:pointer}.btn mat-icon{color:#000000d1}\n"] }]
607
607
  }], propDecorators: { appearance: [{
608
608
  type: Input
609
609
  }], color: [{
@@ -1 +1 @@
1
- {"version":3,"file":"guajiritos-image-picker.mjs","sources":["../../../projects/guachos-image-picker/src/utils/pipes/i18n/i18n.pipe.ts","../../../projects/guachos-image-picker/src/utils/pipes/calculate-size/calculate-size.pipe.ts","../../../projects/guachos-image-picker/src/utils/pipes/pipes.module.ts","../../../projects/guachos-image-picker/src/lib/guachos-image-picker.component.ts","../../../projects/guachos-image-picker/src/lib/guachos-image-picker.component.html","../../../projects/guachos-image-picker/src/public-api.ts","../../../projects/guachos-image-picker/src/guajiritos-image-picker.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'i18n'\r\n})\r\nexport class I18nPipe implements PipeTransform {\r\n private en: any = {\r\n UPLOAD_A_IMAGE: 'Upload an image',\r\n MUST_EDIT: 'You must edit the image in order to resize it',\r\n TOO_LARGE: 'too large',\r\n OPEN_EDITOR_PANEL: 'Open the editor panel',\r\n DOWNLOAD: 'Download the image',\r\n CONTROL_PANEL: 'Control Panel',\r\n QUALITY: 'Quality',\r\n SAVE: 'Save',\r\n MAX_DIMENSIONS: 'Max dimensions',\r\n ASPECT_RATIO: 'Aspect ratio',\r\n MAX_WIDTH_PX: 'max-width(px)',\r\n MAX_HEIGHT_PX: 'max-height(px)',\r\n FORMAT: 'Format',\r\n CROP: 'Crop',\r\n WIDTH_PX: 'width(px)',\r\n HEIGHT_PX: 'height(px)',\r\n REMOVE: 'Remove',\r\n SIZE: 'Size'\r\n };\r\n\r\n private es: any = {\r\n UPLOAD_A_IMAGE: 'Suba una imagen',\r\n MUST_EDIT: 'Debe editar la imagen para disminuir su tamaño',\r\n TOO_LARGE: 'muy grande',\r\n OPEN_EDITOR_PANEL: 'Abra el panel de edición',\r\n DOWNLOAD: 'Descargue la imagen',\r\n CONTROL_PANEL: 'Panel de control',\r\n REMOVE: 'Eliminar',\r\n SAVE: 'Guardar',\r\n QUALITY: 'Calidad',\r\n MAX_DIMENSIONS: 'Dimensiones',\r\n ASPECT_RATIO: 'Relación-Aspecto',\r\n MAX_WIDTH_PX: 'max. ancho',\r\n MAX_HEIGHT_PX: 'max. alto',\r\n FORMAT: 'Formato',\r\n CROP: 'Recortar',\r\n WIDTH_PX: 'ancho(px)',\r\n HEIGHT_PX: 'altura(px)',\r\n SIZE: 'Tamaño'\r\n };\r\n\r\n transform(key: string, language: string): string {\r\n return language === 'en' ? this.en?.[key] : this.es?.[key];\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'calculateSize'\r\n})\r\nexport class CalculateSizePipe implements PipeTransform {\r\n\r\n transform(imageLength: number): number {\r\n if (!imageLength) {\r\n return 0;\r\n }\r\n\r\n if (imageLength) {\r\n return Math.ceil(((3 / 4) * imageLength) / 1024);\r\n } else {\r\n return 0;\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { I18nPipe } from './i18n/i18n.pipe';\r\nimport { CalculateSizePipe } from './calculate-size/calculate-size.pipe';\r\n\r\n\r\n@NgModule({\r\n declarations: [I18nPipe, CalculateSizePipe],\r\n exports: [I18nPipe, CalculateSizePipe],\r\n})\r\nexport class PipesModule { }\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n signal,\r\n ViewChild,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { ResizeObserver } from 'resize-observer';\r\nimport { ResizeObserverEntry } from 'resize-observer/lib/ResizeObserverEntry';\r\nimport { ThemePalette } from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { NgStyle } from '@angular/common';\r\n\r\nimport { PipesModule } from '../utils/pipes/pipes.module';\r\n\r\nexport interface ImagePickerConf {\r\n width?: string;\r\n height?: string;\r\n borderRadius?: string;\r\n compressInitial?: boolean;\r\n language?: string;\r\n hideDeleteBtn?: boolean;\r\n hideDownloadBtn?: boolean;\r\n hideEditBtn?: boolean;\r\n hideAddBtn?: boolean;\r\n}\r\n\r\nexport interface ImageConverterInput {\r\n width?: number;\r\n height?: number;\r\n quality?: number;\r\n dataType?: string;\r\n maintainRatio?: boolean;\r\n changeHeight?: boolean;\r\n changeWidth?: boolean;\r\n}\r\n\r\nexport type ImageAllowedTypes =\r\n 'image/*'\r\n | '.webp'\r\n | '.png'\r\n | '.webp, .jpg, .jpeg'\r\n | '.webp, .png'\r\n | '.jpg, .jpeg'\r\n | '.png, .jpg, .jpeg'\r\n | '.webp, .png, .jpg, .jpeg';\r\n\r\n@Component({\r\n selector: 'guajiritos-image-picker',\r\n templateUrl: './guachos-image-picker.component.html',\r\n styleUrls: ['./guachos-image-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n NgStyle,\r\n MatTooltipModule,\r\n MatIconModule,\r\n PipesModule,\r\n MatButtonModule,\r\n MatSliderModule,\r\n MatCheckboxModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n ],\r\n})\r\nexport class GuajiritosImagePicker {\r\n private observer: any = null;\r\n private originImageSrc: any;\r\n private urlImage: string | undefined;\r\n private lastOriginSrc: any;\r\n private arrayCopiedImages: any[] = [];\r\n\r\n public readonly uuidFilePicker: string = Date.now().toString(20);\r\n public readonly allFormats: string[] = ['webp', 'jpeg', 'png'];\r\n public showCrop: UntypedFormControl = new UntypedFormControl({ value: false, disabled: false });\r\n public maintainAspectRatio: UntypedFormControl = new UntypedFormControl({ value: true, disabled: false });\r\n public quality: UntypedFormControl = new UntypedFormControl({ value: 70, disabled: false });\r\n public format: UntypedFormControl = new UntypedFormControl({ value: null, disabled: false });\r\n public cropHeight: UntypedFormControl = new UntypedFormControl({ value: 150, disabled: false });\r\n public cropWidth: UntypedFormControl = new UntypedFormControl({ value: 150, disabled: false });\r\n public maxHeight: number = 2000;\r\n public maxWidth: number = 2000;\r\n public config: WritableSignal<ImagePickerConf> = signal({\r\n height: '240px',\r\n width: '320px',\r\n borderRadius: '16px',\r\n compressInitial: true,\r\n language: 'es',\r\n hideDeleteBtn: false,\r\n hideDownloadBtn: false,\r\n hideEditBtn: false,\r\n hideAddBtn: false,\r\n });\r\n public imageSrc: WritableSignal<string> = signal(null);\r\n public loadImage: WritableSignal<boolean> = signal(false);\r\n public noEdit: WritableSignal<boolean> = signal(false);\r\n public showEditPanel: WritableSignal<boolean> = signal(false);\r\n public imageName: WritableSignal<string> = signal('download');\r\n public currentLanguage: WritableSignal<string> = signal('es');\r\n\r\n @Input() appearance: MatFormFieldAppearance = 'outline';\r\n @Input() color: ThemePalette = 'primary';\r\n @Input() imagesAllowed: ImageAllowedTypes = 'image/*';\r\n\r\n @ViewChild('imagePicker', { static: false }) imagePicker: ElementRef | undefined;\r\n\r\n @Output() $imageChanged: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() $imageOriginal: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() imageRemoved: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n @Input() set base64Image(image: string) {\r\n if (image) {\r\n this.imageSrc.set(image);\r\n this.arrayCopiedImages = [];\r\n this.arrayCopiedImages.push(this.imageSrc());\r\n this.originImageSrc = image;\r\n this.lastOriginSrc = image;\r\n this.$imageOriginal.next(this.originImageSrc);\r\n this.loadImage.set(true);\r\n this.noEdit.set(false);\r\n }\r\n }\r\n\r\n @Input() set _imageSrc(image: string) {\r\n if (image && image !== this.imageSrc()) {\r\n let types: string[] = image.split('.');\r\n this.format.setValue(types[types.length - 1]);\r\n\r\n if (!this.format.value || (this.format.value !== 'png' && this.format.value !== 'webp')) {\r\n this.format.setValue('jpeg');\r\n }\r\n\r\n this.imageSrc.set(image);\r\n this.arrayCopiedImages = [];\r\n this.arrayCopiedImages.push(this.imageSrc());\r\n this.originImageSrc = image;\r\n this.lastOriginSrc = image;\r\n this.$imageOriginal.next(this.originImageSrc);\r\n this.loadImage.set(true);\r\n this.noEdit.set(true);\r\n } else if (image && this.imageSrc() && image === this.imageSrc()) {\r\n this.arrayCopiedImages = [];\r\n this.arrayCopiedImages.push(this.imageSrc());\r\n this.originImageSrc = image;\r\n this.lastOriginSrc = image;\r\n this.$imageOriginal.next(this.originImageSrc);\r\n this.noEdit.set(false);\r\n this.loadImage.set(true);\r\n } else {\r\n this.imageSrc.set(null);\r\n this.originImageSrc = null;\r\n this.loadImage.set(false);\r\n this.noEdit.set(false);\r\n this.arrayCopiedImages = [];\r\n this.lastOriginSrc = null;\r\n this.$imageOriginal.next(null);\r\n this.format.setValue('jpeg');\r\n this.maxHeight = 2000;\r\n this.maxWidth = 2000;\r\n this.cropHeight.setValue(150);\r\n this.cropWidth.setValue(150);\r\n this.maintainAspectRatio.setValue(true);\r\n this.showEditPanel.set(false);\r\n }\r\n }\r\n\r\n @Input() set _config(value: ImagePickerConf) {\r\n if (value && value.constructor == Object) {\r\n this.config.set({\r\n ...this.config(),\r\n ...value,\r\n });\r\n }\r\n }\r\n\r\n private async handleReaderLoaded(readerEvt: { target: { result: any; }; }): Promise<void> {\r\n const binaryString: string = readerEvt.target.result;\r\n const base64textString: string = btoa(binaryString);\r\n this.originImageSrc = this.urlImage + base64textString;\r\n this.lastOriginSrc = this.urlImage + base64textString;\r\n if (this.config()?.compressInitial) {\r\n this.quality.setValue(70);\r\n const input: ImageConverterInput = {\r\n dataType: this.format.value,\r\n quality: 0.70,\r\n maintainRatio: true,\r\n };\r\n this.imageSrc.set(await this.resizeDataURL(this.urlImage + base64textString, input));\r\n } else {\r\n this.imageSrc.set(this.urlImage + base64textString);\r\n this.arrayCopiedImages = [];\r\n this.arrayCopiedImages.push({\r\n lastImage: this.imageSrc(),\r\n width: this.maxWidth,\r\n height: this.maxHeight,\r\n quality: this.quality.value,\r\n });\r\n this.$imageOriginal.next(this.imageSrc());\r\n }\r\n this.$imageChanged.next(this.imageSrc());\r\n this.loadImage.set(true);\r\n }\r\n\r\n private async resizeDataURL(datas: string, input: ImageConverterInput): Promise<any> {\r\n return await new Promise(async function(resolve): Promise<void> {\r\n let img: HTMLImageElement = document.createElement('img');\r\n img.src = datas + '';\r\n img.crossOrigin = 'Anonymous';\r\n let quality: number = input?.quality ?? 1.0;\r\n let maintainRatio: boolean = input.maintainRatio !== undefined ? input.maintainRatio : true;\r\n\r\n img.onload = function(): void {\r\n const canvas: HTMLCanvasElement = document.createElement('canvas');\r\n const ctx: CanvasRenderingContext2D = canvas.getContext('2d');\r\n let ratio: number = img.width / img.height;\r\n let width: number = input?.width ?? img.width;\r\n let height: number = input?.height ?? img.height;\r\n\r\n if (maintainRatio) {\r\n if (input.changeHeight) {\r\n canvas.width = height * ratio;\r\n canvas.height = height;\r\n } else {\r\n canvas.width = width;\r\n canvas.height = width / ratio;\r\n }\r\n } else {\r\n canvas.width = width;\r\n canvas.height = height;\r\n }\r\n\r\n ctx?.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n let type: string = input?.dataType ?? 'webp';\r\n const dataURI: string = canvas.toDataURL(`image/${type}`, quality);\r\n resolve({\r\n dataUri: dataURI,\r\n width: canvas.width,\r\n height: canvas.height,\r\n });\r\n };\r\n }).then((data: any) => {\r\n this.maxHeight = data?.height;\r\n this.maxWidth = data?.width;\r\n if (this.arrayCopiedImages?.length <= 20) {\r\n this.arrayCopiedImages.push({\r\n lastImage: data?.dataUri,\r\n width: this.maxWidth,\r\n height: this.maxHeight,\r\n quality: this.quality.value,\r\n });\r\n }\r\n\r\n return data.dataUri;\r\n });\r\n }\r\n\r\n private wait(ms?: number | undefined): Promise<any> {\r\n ms = ms ?? 1000;\r\n return new Promise((resolve): void => {\r\n setTimeout(() => {\r\n return resolve(true);\r\n }, ms);\r\n });\r\n }\r\n\r\n private dragElement(element: HTMLElement): void {\r\n let pos1: number = 0, pos2: number = 0, pos3: number = 0, pos4: number = 0;\r\n\r\n let el: HTMLElement = document.getElementById(element.id + '-header');\r\n if (el) {\r\n el.onmousedown = dragMouseDown;\r\n el.ontouchstart = dragMouseDown;\r\n } else {\r\n element.onmousedown = dragMouseDown;\r\n element.ontouchstart = dragMouseDown;\r\n }\r\n\r\n function dragMouseDown(e: any): void {\r\n e = e || window.event;\r\n e?.preventDefault();\r\n pos3 = e?.clientX;\r\n pos4 = e?.clientY;\r\n document.onmouseup = closeDragElement;\r\n document.ontouchend = closeDragElement;\r\n document.onmousemove = elementDrag;\r\n document.ontouchmove = elementDrag;\r\n }\r\n\r\n function elementDrag(e: any): void {\r\n let holderImage: any = document.getElementById('image-full');\r\n e = e || window.event;\r\n e?.preventDefault();\r\n pos1 = pos3 - e?.clientX;\r\n pos2 = pos4 - e?.clientY;\r\n pos3 = e?.clientX;\r\n pos4 = e?.clientY;\r\n\r\n const newTop: number = element.offsetTop - pos2;\r\n const newLeft: number = element.offsetLeft - pos1;\r\n const rectHolder = holderImage.getBoundingClientRect();\r\n const rectElement: DOMRect = element.getBoundingClientRect();\r\n if (newTop >= rectHolder.y + 8) {\r\n element.style.top = Math.min(newTop, rectHolder.y + rectHolder.height - rectElement.height - 4) + 'px';\r\n }\r\n if (newLeft > rectHolder.x + 4 && rectHolder.x + rectHolder.width > rectElement.x + rectElement.width + 2) {\r\n element.style.left = Math.min(newLeft, rectHolder.x + rectHolder.width - rectElement.width - 4) + 'px';\r\n }\r\n }\r\n\r\n function closeDragElement(): void {\r\n document.onmouseup = null;\r\n document.onmousemove = null;\r\n document.ontouchend = null;\r\n document.ontouchmove = null;\r\n }\r\n }\r\n\r\n public onUpload(event: { preventDefault: () => void; }): void {\r\n event.preventDefault();\r\n this.imagePicker?.nativeElement.click();\r\n }\r\n\r\n public handleFileSelect(evt: any): void {\r\n const files = evt?.target?.files;\r\n if (files) {\r\n const file = files[0];\r\n\r\n if (file?.type?.indexOf('png') !== -1) {\r\n this.format.setValue('png');\r\n } else if (file?.type?.indexOf('webp') !== -1) {\r\n this.format.setValue('webp');\r\n } else {\r\n this.format.setValue('jpeg');\r\n }\r\n\r\n this.imageName.set(file?.name?.split('.')[0]);\r\n this.urlImage = `data:${file?.type};base64,`;\r\n this.noEdit.set(false);\r\n\r\n if (files && file) {\r\n const reader: any = new FileReader();\r\n reader.onload = this.handleReaderLoaded.bind(this);\r\n reader.readAsBinaryString(file);\r\n }\r\n }\r\n }\r\n\r\n public onCloseEditPanel(): void {\r\n if (this.observer instanceof ResizeObserver) {\r\n let imageCropper: any = document.getElementById('image-cropper');\r\n let imageFull: any = document.getElementById('image-full');\r\n this.observer.unobserve(imageCropper);\r\n this.observer.unobserve(imageFull);\r\n }\r\n this.showCrop.setValue(false);\r\n this.showEditPanel.set(false);\r\n }\r\n\r\n public async onChangeQuality(): Promise<void> {\r\n const qualityItem: number = this.quality.value / 100;\r\n this.maxHeight = this.maxHeight ?? 2000;\r\n this.maxWidth = this.maxWidth ?? 2000;\r\n\r\n await this.wait(250);\r\n try {\r\n const input: ImageConverterInput = {\r\n height: this.maxHeight,\r\n width: this.maxWidth,\r\n dataType: this.format.value,\r\n quality: qualityItem,\r\n maintainRatio: this.maintainAspectRatio.value,\r\n };\r\n\r\n this.imageSrc.set(await this.resizeDataURL(this.originImageSrc, input));\r\n this.$imageChanged.next(this.imageSrc());\r\n this.loadImage.set(true);\r\n } catch (error) {\r\n this.loadImage.set(true);\r\n }\r\n }\r\n\r\n public async onChangeFormat(): Promise<void> {\r\n let qualityItem: number = this.quality.value / 100;\r\n this.maxHeight = this.maxHeight ?? 2000;\r\n this.maxWidth = this.maxWidth ?? 2000;\r\n\r\n await this.wait(250);\r\n try {\r\n let input: ImageConverterInput = {\r\n height: this.maxHeight,\r\n width: this.maxWidth,\r\n dataType: this.format.value,\r\n quality: qualityItem,\r\n maintainRatio: this.maintainAspectRatio.value,\r\n };\r\n this.imageSrc.set(await this.resizeDataURL(this.originImageSrc, input));\r\n this.$imageChanged.next(this.imageSrc());\r\n this.loadImage.set(true);\r\n } catch (error) {\r\n this.loadImage.set(true);\r\n }\r\n }\r\n\r\n public async onChangeSize(changeWidth?: any, changeHeight?: any): Promise<void> {\r\n let qualityItem: number = this.quality.value / 100;\r\n this.maxHeight = this.maxHeight ?? 2000;\r\n this.maxWidth = this.maxWidth ?? 2000;\r\n\r\n await this.wait(500);\r\n\r\n try {\r\n let input: ImageConverterInput = {\r\n height: this.maxHeight,\r\n width: this.maxWidth,\r\n dataType: this.format.value,\r\n quality: qualityItem,\r\n maintainRatio: this.maintainAspectRatio.value,\r\n changeHeight: changeHeight,\r\n changeWidth: changeWidth,\r\n };\r\n this.imageSrc.set(await this.resizeDataURL(this.originImageSrc, input));\r\n this.$imageChanged.next(this.imageSrc());\r\n this.loadImage.set(true);\r\n } catch (error) {\r\n this.loadImage.set(true);\r\n }\r\n }\r\n\r\n public onChangeCrop(): void {\r\n const cropper: any = document.getElementById('image-cropper');\r\n cropper.style.width = this.cropWidth.value + 'px';\r\n cropper.style.height = this.cropHeight.value + 'px';\r\n }\r\n\r\n public onCropStateChange(): void {\r\n const cropper: HTMLElement = document.getElementById('image-cropper');\r\n const fullImage: HTMLElement = document.getElementById('image-full');\r\n const aspectRatio: number = fullImage.offsetWidth / fullImage.offsetHeight;\r\n\r\n if (this.showCrop.value) {\r\n cropper.style.opacity = '1.0';\r\n this.dragElement(cropper);\r\n this.observer = new ResizeObserver((entries: ResizeObserverEntry[]): void => {\r\n entries.forEach((entry: ResizeObserverEntry): void => {\r\n if (this.showEditPanel()) {\r\n const elementCropper: HTMLElement = document.getElementById('image-cropper');\r\n const elementFull: HTMLElement = document.getElementById('image-full');\r\n\r\n const rectHolder: DOMRect = elementFull.getBoundingClientRect();\r\n const rectElement: DOMRect = elementCropper.getBoundingClientRect();\r\n\r\n const maxWidth: number = rectHolder.x + rectHolder.width - rectElement.x - 4;\r\n const maxHeight: number = rectHolder.y + rectHolder.height - rectElement.y - 4;\r\n\r\n // Obtener el tamaño del área de recorte seleccionada por el usuario\r\n const cropWidth: number = elementCropper.offsetWidth;\r\n const cropHeight: number = elementCropper.offsetHeight;\r\n\r\n // Calcular el ancho y el alto del área de recorte manteniendo la relación de aspecto de la imagen original\r\n let newWidth: number = cropWidth;\r\n let newHeight: number = cropHeight;\r\n\r\n if (this.maintainAspectRatio.value) {\r\n if (cropWidth / cropHeight > aspectRatio) {\r\n newHeight = cropWidth / aspectRatio;\r\n } else {\r\n newWidth = cropHeight * aspectRatio;\r\n }\r\n }\r\n\r\n // Ajustar el ancho y el alto del área de recorte si supera los límites\r\n newWidth = Math.min(newWidth, maxWidth);\r\n newHeight = Math.min(newHeight, maxHeight);\r\n\r\n // Establecer el tamaño y la posición del área de recorte\r\n elementCropper.style.width = `${newWidth}px`;\r\n elementCropper.style.height = `${newHeight}px`;\r\n\r\n this.cropWidth.setValue(rectElement.width);\r\n this.cropHeight.setValue(rectElement.height);\r\n\r\n if (entry.target.id == 'image-full') {\r\n if (rectHolder.top > 0) {\r\n elementCropper.style.top = rectHolder.top + 4 + 'px';\r\n }\r\n elementCropper.style.left = rectHolder.left + 4 + 'px';\r\n }\r\n }\r\n });\r\n });\r\n this.observer.observe(document.getElementById('image-cropper'));\r\n this.observer.observe(document.getElementById('image-full'));\r\n } else {\r\n cropper.style.opacity = '0.0';\r\n if (this.observer instanceof ResizeObserver) {\r\n const elementCropper: HTMLElement = document.getElementById('image-cropper');\r\n const elementFull: HTMLElement = document.getElementById('image-full');\r\n this.observer.unobserve(elementCropper);\r\n this.observer.unobserve(elementFull);\r\n }\r\n }\r\n }\r\n\r\n public onCrop(type?: any): void {\r\n type = type ?? this.format.value;\r\n const cropper: HTMLElement = document.getElementById('image-cropper');\r\n const elementFull: HTMLElement = document.getElementById('image-full');\r\n const rectCropper: DOMRect = cropper.getBoundingClientRect();\r\n const dataHolderRect: DOMRect = elementFull.getBoundingClientRect();\r\n const canvas: HTMLCanvasElement = document.createElement('canvas');\r\n new Promise((resolve, reject): void => {\r\n let ctx: CanvasRenderingContext2D | null = canvas.getContext('2d');\r\n let image: HTMLImageElement = new Image();\r\n image.src = this.imageSrc();\r\n image.onload = (): void => {\r\n let ratio: number = image.height / dataHolderRect.height;\r\n let newWidth: number = rectCropper.width * ratio;\r\n let newHeight: number = rectCropper.height * ratio;\r\n canvas.width = newWidth;\r\n canvas.height = newHeight;\r\n ctx?.drawImage(\r\n image,\r\n Math.abs(rectCropper.x * ratio) - Math.abs(dataHolderRect.x * ratio),\r\n Math.abs(rectCropper.y * ratio) - Math.abs(dataHolderRect.y * ratio),\r\n newWidth,\r\n newHeight,\r\n 0,\r\n 0,\r\n newWidth,\r\n newHeight,\r\n );\r\n\r\n resolve(canvas.toDataURL(`image/${type}`, this.quality.value));\r\n };\r\n image.onerror = (e: string | Event): void => {\r\n reject(e);\r\n };\r\n })\r\n .then((dataUri: any): void => {\r\n this.imageSrc.set(dataUri);\r\n this.showCrop.setValue(false);\r\n this.onCropStateChange();\r\n this.maxWidth = canvas?.width;\r\n this.maxHeight = canvas?.height;\r\n this.lastOriginSrc = this.originImageSrc + '';\r\n this.originImageSrc = dataUri;\r\n this.$imageChanged.next(this.imageSrc());\r\n })\r\n .catch((e): void => {\r\n console.log(e);\r\n });\r\n }\r\n\r\n public onRestore(): void {\r\n if (this.arrayCopiedImages.length) {\r\n let lastState = this.arrayCopiedImages.pop();\r\n this.imageSrc.set(lastState.lastImage);\r\n this.maxWidth = lastState.width;\r\n this.maxHeight = lastState.height;\r\n this.originImageSrc = this.lastOriginSrc + '';\r\n this.noEdit.set(false);\r\n } else {\r\n this.imageSrc.set(this.lastOriginSrc);\r\n this.originImageSrc = this.lastOriginSrc + '';\r\n this.noEdit.set(false);\r\n }\r\n\r\n this.$imageChanged.next(this.imageSrc());\r\n }\r\n\r\n public onRemove(): void {\r\n this.imageSrc.set(null);\r\n this.originImageSrc = null;\r\n this.loadImage.set(false);\r\n this.arrayCopiedImages = [];\r\n this.lastOriginSrc = null;\r\n this.$imageOriginal.next(null);\r\n this.$imageChanged.next(null);\r\n this.format.setValue(null);\r\n this.maxHeight = 2000;\r\n this.maxWidth = 2000;\r\n this.cropHeight.setValue(150);\r\n this.cropWidth.setValue(150);\r\n this.maintainAspectRatio.setValue(true);\r\n this.showEditPanel.set(false);\r\n this.noEdit.set(false);\r\n this.imageRemoved.emit();\r\n }\r\n}\r\n","@if (!loadImage()) {\n <div class='place-image'>\n <div class='image-holder'\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\n (click)='onUpload($event)'>\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n </div>\n}\n\n@if (loadImage()) {\n <div class='place-image'>\n <div class='image-holder-loaded'\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\n </div>\n @if (imageSrc()?.length) {\n <p class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\n </p>\n }\n <div class='editing-bar-btn'>\n @if (!config()?.hideAddBtn) {\n <button id='upload-img' mat-icon-button (click)='onUpload($event)'\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\n </button>\n }\n @if (!config()?.hideEditBtn && !noEdit()) {\n <button id='edit-img' mat-icon-button (click)='showEditPanel.set(true)'\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\n <mat-icon class='mat-18'>edit</mat-icon>\n </button>\n }\n @if (!config()?.hideDownloadBtn) {\n <a id='download-img' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\n <mat-icon class='mat-18'>cloud_download</mat-icon>\n </a>\n }\n @if (!config()?.hideDeleteBtn) {\n <button id='delete-img' mat-icon-button (click)='onRemove()'\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\n <mat-icon class='mat-18'>delete</mat-icon>\n </button>\n }\n </div>\n </div>\n}\n\n@if (showEditPanel()) {\n <div id='popup' class='popup'>\n <div class='popup-clear'>\n <button mat-icon-button (click)='onCloseEditPanel()'>\n <mat-icon class='mat-18'>clear</mat-icon>\n </button>\n </div>\n <div class='image-container'>\n <div class='image-holder-full'>\n <img id='image-full' [src]='imageSrc()' alt=''>\n <div id='image-cropper' class='image-cropper'>\n <div id='image-cropper-header'>\n <mat-icon>drag_indicator</mat-icon>\n </div>\n </div>\n </div>\n <div class='control-panel'>\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\n <div class='quality-container'>\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\n <input matSliderThumb [formControl]='quality'>\n </mat-slider>\n </div>\n <div class='item-panel'>\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\n </mat-checkbox>\n </div>\n <div class='max-dimension-container'>\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(true, false)' matInput\n [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeSize(false, true)' matInput\n [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\n <div class='formats-selection'>\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\n @for (format of allFormats; track format) {\n <mat-option [value]='format'>\n {{ format }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n <div class='refresh-container'>\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\n </mat-checkbox>\n <div class='d-flex '>\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\n <mat-icon>refresh</mat-icon>\n </button>\n @if (showCrop.value) {\n <p>\n <button mat-icon-button [color]='color' (click)='onCrop()'>\n <mat-icon>crop</mat-icon>\n </button>\n </p>\n }\n </div>\n </div>\n @if (showCrop.value) {\n <div class='dimension-container'>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\n </mat-form-field>\n </div>\n }\n <div class='save-container'>\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\n {{ 'SAVE' | i18n: config()?.language }}\n </button>\n @if (imageSrc()?.length) {\n <p class='mat-caption image-caption'\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb\n &nbsp; {{ format.value }}\n </p>\n }\n </div>\n </div>\n </div>\n </div>\n}\n","/*\r\n * Public API Surface of guachos-image-picker\r\n */\r\n\r\nexport * from './lib/guachos-image-picker.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.I18nPipe","i4.CalculateSizePipe"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;MAKa,QAAQ,CAAA;AACX,IAAA,EAAE,GAAQ;AAChB,QAAA,cAAc,EAAE,iBAAiB;AACjC,QAAA,SAAS,EAAE,+CAA+C;AAC1D,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,iBAAiB,EAAE,uBAAuB;AAC1C,QAAA,QAAQ,EAAE,oBAAoB;AAC9B,QAAA,aAAa,EAAE,eAAe;AAC9B,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,cAAc,EAAE,gBAAgB;AAChC,QAAA,YAAY,EAAE,cAAc;AAC5B,QAAA,YAAY,EAAE,eAAe;AAC7B,QAAA,aAAa,EAAE,gBAAgB;AAC/B,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,IAAI,EAAE,MAAM;KACb,CAAC;AAEM,IAAA,EAAE,GAAQ;AAChB,QAAA,cAAc,EAAE,iBAAiB;AACjC,QAAA,SAAS,EAAE,gDAAgD;AAC3D,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,iBAAiB,EAAE,0BAA0B;AAC7C,QAAA,QAAQ,EAAE,qBAAqB;AAC/B,QAAA,aAAa,EAAE,kBAAkB;AACjC,QAAA,MAAM,EAAE,UAAU;AAClB,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,cAAc,EAAE,aAAa;AAC7B,QAAA,YAAY,EAAE,kBAAkB;AAChC,QAAA,YAAY,EAAE,YAAY;AAC1B,QAAA,aAAa,EAAE,WAAW;AAC1B,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,IAAI,EAAE,QAAQ;KACf,CAAC;IAEF,SAAS,CAAC,GAAW,EAAE,QAAgB,EAAA;QACrC,OAAO,QAAQ,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;KAC5D;uGA7CU,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;qGAAR,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAHpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,MAAM;AACb,iBAAA,CAAA;;;MCCY,iBAAiB,CAAA;AAE5B,IAAA,SAAS,CAAC,WAAmB,EAAA;QAC3B,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,CAAC,CAAC;SACV;QAED,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,WAAW,IAAI,IAAI,CAAC,CAAC;SAClD;aAAM;AACL,YAAA,OAAO,CAAC,CAAC;SACV;KACF;uGAZU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;qGAAjB,iBAAiB,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,eAAe;AACtB,iBAAA,CAAA;;;MCMY,WAAW,CAAA;uGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,iBAHP,QAAQ,EAAE,iBAAiB,CAChC,EAAA,OAAA,EAAA,CAAA,QAAQ,EAAE,iBAAiB,CAAA,EAAA,CAAA,CAAA;wGAE1B,WAAW,EAAA,CAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC;AAC3C,oBAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC;AACvC,iBAAA,CAAA;;;MCuEY,qBAAqB,CAAA;IACxB,QAAQ,GAAQ,IAAI,CAAC;AACrB,IAAA,cAAc,CAAM;AACpB,IAAA,QAAQ,CAAqB;AAC7B,IAAA,aAAa,CAAM;IACnB,iBAAiB,GAAU,EAAE,CAAC;IAEtB,cAAc,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,UAAU,GAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACxD,IAAA,QAAQ,GAAuB,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACzF,IAAA,mBAAmB,GAAuB,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACnG,IAAA,OAAO,GAAuB,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACrF,IAAA,MAAM,GAAuB,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACtF,IAAA,UAAU,GAAuB,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACzF,IAAA,SAAS,GAAuB,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACxF,SAAS,GAAW,IAAI,CAAC;IACzB,QAAQ,GAAW,IAAI,CAAC;IACxB,MAAM,GAAoC,MAAM,CAAC;AACtD,QAAA,MAAM,EAAE,OAAO;AACf,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,YAAY,EAAE,MAAM;AACpB,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,eAAe,EAAE,KAAK;AACtB,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,UAAU,EAAE,KAAK;AAClB,KAAA,CAAC,CAAC;AACI,IAAA,QAAQ,GAA2B,MAAM,CAAC,IAAI,CAAC,CAAC;AAChD,IAAA,SAAS,GAA4B,MAAM,CAAC,KAAK,CAAC,CAAC;AACnD,IAAA,MAAM,GAA4B,MAAM,CAAC,KAAK,CAAC,CAAC;AAChD,IAAA,aAAa,GAA4B,MAAM,CAAC,KAAK,CAAC,CAAC;AACvD,IAAA,SAAS,GAA2B,MAAM,CAAC,UAAU,CAAC,CAAC;AACvD,IAAA,eAAe,GAA2B,MAAM,CAAC,IAAI,CAAC,CAAC;IAErD,UAAU,GAA2B,SAAS,CAAC;IAC/C,KAAK,GAAiB,SAAS,CAAC;IAChC,aAAa,GAAsB,SAAS,CAAC;AAET,IAAA,WAAW,CAAyB;AAEvE,IAAA,aAAa,GAAsB,IAAI,YAAY,EAAO,CAAC;AAC3D,IAAA,cAAc,GAAsB,IAAI,YAAY,EAAO,CAAC;AAC5D,IAAA,YAAY,GAAuB,IAAI,YAAY,EAAQ,CAAC;IAEtE,IAAa,WAAW,CAAC,KAAa,EAAA;QACpC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACxB;KACF;IAED,IAAa,SAAS,CAAC,KAAa,EAAA;QAClC,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,EAAE;YACtC,IAAI,KAAK,GAAa,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAE9C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE;AACvF,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aAC9B;AAED,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACvB;AAAM,aAAA,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,EAAE;AAChE,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC1B;aAAM;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC/B;KACF;IAED,IAAa,OAAO,CAAC,KAAsB,EAAA;QACzC,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,IAAI,MAAM,EAAE;AACxC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;gBACd,GAAG,IAAI,CAAC,MAAM,EAAE;AAChB,gBAAA,GAAG,KAAK;AACT,aAAA,CAAC,CAAC;SACJ;KACF;IAEO,MAAM,kBAAkB,CAAC,SAAwC,EAAA;AACvE,QAAA,MAAM,YAAY,GAAW,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AACrD,QAAA,MAAM,gBAAgB,GAAW,IAAI,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;QACvD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;AACtD,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC1B,YAAA,MAAM,KAAK,GAAwB;AACjC,gBAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;AAC3B,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,aAAa,EAAE,IAAI;aACpB,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,GAAG,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC;SACtF;aAAM;YACL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1B,gBAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;gBAC1B,KAAK,EAAE,IAAI,CAAC,QAAQ;gBACpB,MAAM,EAAE,IAAI,CAAC,SAAS;AACtB,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;AAC5B,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC3C;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC1B;AAEO,IAAA,MAAM,aAAa,CAAC,KAAa,EAAE,KAA0B,EAAA;AACnE,QAAA,OAAO,MAAM,IAAI,OAAO,CAAC,gBAAe,OAAO,EAAA;YAC7C,IAAI,GAAG,GAAqB,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1D,YAAA,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;AACrB,YAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;AAC9B,YAAA,IAAI,OAAO,GAAW,KAAK,EAAE,OAAO,IAAI,GAAG,CAAC;AAC5C,YAAA,IAAI,aAAa,GAAY,KAAK,CAAC,aAAa,KAAK,SAAS,GAAG,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;YAE5F,GAAG,CAAC,MAAM,GAAG,YAAA;gBACX,MAAM,MAAM,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACnE,MAAM,GAAG,GAA6B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC9D,IAAI,KAAK,GAAW,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;gBAC3C,IAAI,KAAK,GAAW,KAAK,EAAE,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC;gBAC9C,IAAI,MAAM,GAAW,KAAK,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;gBAEjD,IAAI,aAAa,EAAE;AACjB,oBAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,wBAAA,MAAM,CAAC,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;AAC9B,wBAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;qBACxB;yBAAM;AACL,wBAAA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,wBAAA,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;qBAC/B;iBACF;qBAAM;AACL,oBAAA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,oBAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;iBACxB;AAED,gBAAA,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACvD,gBAAA,IAAI,IAAI,GAAW,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC;AAC7C,gBAAA,MAAM,OAAO,GAAW,MAAM,CAAC,SAAS,CAAC,CAAS,MAAA,EAAA,IAAI,CAAE,CAAA,EAAE,OAAO,CAAC,CAAC;AACnE,gBAAA,OAAO,CAAC;AACN,oBAAA,OAAO,EAAE,OAAO;oBAChB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;AACtB,iBAAA,CAAC,CAAC;AACL,aAAC,CAAC;AACJ,SAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,KAAI;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,MAAM,CAAC;AAC9B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC;YAC5B,IAAI,IAAI,CAAC,iBAAiB,EAAE,MAAM,IAAI,EAAE,EAAE;AACxC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBAC1B,SAAS,EAAE,IAAI,EAAE,OAAO;oBACxB,KAAK,EAAE,IAAI,CAAC,QAAQ;oBACpB,MAAM,EAAE,IAAI,CAAC,SAAS;AACtB,oBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;AAC5B,iBAAA,CAAC,CAAC;aACJ;YAED,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,IAAI,CAAC,EAAuB,EAAA;AAClC,QAAA,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC;AAChB,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAU;YACnC,UAAU,CAAC,MAAK;AACd,gBAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;aACtB,EAAE,EAAE,CAAC,CAAC;AACT,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,WAAW,CAAC,OAAoB,EAAA;AACtC,QAAA,IAAI,IAAI,GAAW,CAAC,EAAE,IAAI,GAAW,CAAC,EAAE,IAAI,GAAW,CAAC,EAAE,IAAI,GAAW,CAAC,CAAC;AAE3E,QAAA,IAAI,EAAE,GAAgB,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;QACtE,IAAI,EAAE,EAAE;AACN,YAAA,EAAE,CAAC,WAAW,GAAG,aAAa,CAAC;AAC/B,YAAA,EAAE,CAAC,YAAY,GAAG,aAAa,CAAC;SACjC;aAAM;AACL,YAAA,OAAO,CAAC,WAAW,GAAG,aAAa,CAAC;AACpC,YAAA,OAAO,CAAC,YAAY,GAAG,aAAa,CAAC;SACtC;QAED,SAAS,aAAa,CAAC,CAAM,EAAA;AAC3B,YAAA,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;YACtB,CAAC,EAAE,cAAc,EAAE,CAAC;AACpB,YAAA,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC;AAClB,YAAA,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC;AAClB,YAAA,QAAQ,CAAC,SAAS,GAAG,gBAAgB,CAAC;AACtC,YAAA,QAAQ,CAAC,UAAU,GAAG,gBAAgB,CAAC;AACvC,YAAA,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;AACnC,YAAA,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;SACpC;QAED,SAAS,WAAW,CAAC,CAAM,EAAA;YACzB,IAAI,WAAW,GAAQ,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAC7D,YAAA,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;YACtB,CAAC,EAAE,cAAc,EAAE,CAAC;AACpB,YAAA,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC;AACzB,YAAA,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC;AACzB,YAAA,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC;AAClB,YAAA,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC;AAElB,YAAA,MAAM,MAAM,GAAW,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;AAChD,YAAA,MAAM,OAAO,GAAW,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;AAClD,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,qBAAqB,EAAE,CAAC;AACvD,YAAA,MAAM,WAAW,GAAY,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC7D,IAAI,MAAM,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE;gBAC9B,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;aACxG;YACD,IAAI,OAAO,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE;gBACzG,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;aACxG;SACF;AAED,QAAA,SAAS,gBAAgB,GAAA;AACvB,YAAA,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1B,YAAA,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B,YAAA,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,YAAA,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;SAC7B;KACF;AAEM,IAAA,QAAQ,CAAC,KAAsC,EAAA;QACpD,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;KACzC;AAEM,IAAA,gBAAgB,CAAC,GAAQ,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAG,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC;QACjC,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAEtB,YAAA,IAAI,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC7B;AAAM,iBAAA,IAAI,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AAC7C,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aAC9B;iBAAM;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aAC9B;AAED,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,GAAG,CAAA,KAAA,EAAQ,IAAI,EAAE,IAAI,UAAU,CAAC;AAC7C,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAEvB,YAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,gBAAA,MAAM,MAAM,GAAQ,IAAI,UAAU,EAAE,CAAC;gBACrC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnD,gBAAA,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;aACjC;SACF;KACF;IAEM,gBAAgB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,YAAY,cAAc,EAAE;YAC3C,IAAI,YAAY,GAAQ,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YACjE,IAAI,SAAS,GAAQ,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;SACpC;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC/B;AAEM,IAAA,MAAM,eAAe,GAAA;QAC1B,MAAM,WAAW,GAAW,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;AAEtC,QAAA,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAwB;gBACjC,MAAM,EAAE,IAAI,CAAC,SAAS;gBACtB,KAAK,EAAE,IAAI,CAAC,QAAQ;AACpB,gBAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;AAC3B,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK;aAC9C,CAAC;AAEF,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC1B;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC1B;KACF;AAEM,IAAA,MAAM,cAAc,GAAA;QACzB,IAAI,WAAW,GAAW,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;AAEtC,QAAA,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI;AACF,YAAA,IAAI,KAAK,GAAwB;gBAC/B,MAAM,EAAE,IAAI,CAAC,SAAS;gBACtB,KAAK,EAAE,IAAI,CAAC,QAAQ;AACpB,gBAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;AAC3B,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK;aAC9C,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC1B;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC1B;KACF;AAEM,IAAA,MAAM,YAAY,CAAC,WAAiB,EAAE,YAAkB,EAAA;QAC7D,IAAI,WAAW,GAAW,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;AAEtC,QAAA,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAErB,QAAA,IAAI;AACF,YAAA,IAAI,KAAK,GAAwB;gBAC/B,MAAM,EAAE,IAAI,CAAC,SAAS;gBACtB,KAAK,EAAE,IAAI,CAAC,QAAQ;AACpB,gBAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;AAC3B,gBAAA,OAAO,EAAE,WAAW;AACpB,gBAAA,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK;AAC7C,gBAAA,YAAY,EAAE,YAAY;AAC1B,gBAAA,WAAW,EAAE,WAAW;aACzB,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC1B;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC1B;KACF;IAEM,YAAY,GAAA;QACjB,MAAM,OAAO,GAAQ,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;AAC9D,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;AAClD,QAAA,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;KACrD;IAEM,iBAAiB,GAAA;QACtB,MAAM,OAAO,GAAgB,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACtE,MAAM,SAAS,GAAgB,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACrE,MAAM,WAAW,GAAW,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,YAAY,CAAC;AAE3E,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,OAA8B,KAAU;AAC1E,gBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAA0B,KAAU;AACnD,oBAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;wBACxB,MAAM,cAAc,GAAgB,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;wBAC7E,MAAM,WAAW,GAAgB,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAEvE,wBAAA,MAAM,UAAU,GAAY,WAAW,CAAC,qBAAqB,EAAE,CAAC;AAChE,wBAAA,MAAM,WAAW,GAAY,cAAc,CAAC,qBAAqB,EAAE,CAAC;AAEpE,wBAAA,MAAM,QAAQ,GAAW,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7E,wBAAA,MAAM,SAAS,GAAW,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;;AAG/E,wBAAA,MAAM,SAAS,GAAW,cAAc,CAAC,WAAW,CAAC;AACrD,wBAAA,MAAM,UAAU,GAAW,cAAc,CAAC,YAAY,CAAC;;wBAGvD,IAAI,QAAQ,GAAW,SAAS,CAAC;wBACjC,IAAI,SAAS,GAAW,UAAU,CAAC;AAEnC,wBAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE;AAClC,4BAAA,IAAI,SAAS,GAAG,UAAU,GAAG,WAAW,EAAE;AACxC,gCAAA,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;6BACrC;iCAAM;AACL,gCAAA,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;6BACrC;yBACF;;wBAGD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;wBACxC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;wBAG3C,cAAc,CAAC,KAAK,CAAC,KAAK,GAAG,CAAG,EAAA,QAAQ,IAAI,CAAC;wBAC7C,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,SAAS,IAAI,CAAC;wBAE/C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;wBAC3C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;wBAE7C,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,YAAY,EAAE;AACnC,4BAAA,IAAI,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE;AACtB,gCAAA,cAAc,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;6BACtD;AACD,4BAAA,cAAc,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;yBACxD;qBACF;AACH,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;SAC9D;aAAM;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,QAAQ,YAAY,cAAc,EAAE;gBAC3C,MAAM,cAAc,GAAgB,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;gBAC7E,MAAM,WAAW,GAAgB,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AACvE,gBAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AACxC,gBAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;aACtC;SACF;KACF;AAEM,IAAA,MAAM,CAAC,IAAU,EAAA;QACtB,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACjC,MAAM,OAAO,GAAgB,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACtE,MAAM,WAAW,GAAgB,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AACvE,QAAA,MAAM,WAAW,GAAY,OAAO,CAAC,qBAAqB,EAAE,CAAC;AAC7D,QAAA,MAAM,cAAc,GAAY,WAAW,CAAC,qBAAqB,EAAE,CAAC;QACpE,MAAM,MAAM,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACnE,QAAA,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAU;YACpC,IAAI,GAAG,GAAoC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACnE,YAAA,IAAI,KAAK,GAAqB,IAAI,KAAK,EAAE,CAAC;AAC1C,YAAA,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC5B,YAAA,KAAK,CAAC,MAAM,GAAG,MAAW;gBACxB,IAAI,KAAK,GAAW,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;AACzD,gBAAA,IAAI,QAAQ,GAAW,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;AACjD,gBAAA,IAAI,SAAS,GAAW,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC;AACnD,gBAAA,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;AACxB,gBAAA,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;AAC1B,gBAAA,GAAG,EAAE,SAAS,CACZ,KAAK,EACL,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC,EACpE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC,EACpE,QAAQ,EACR,SAAS,EACT,CAAC,EACD,CAAC,EACD,QAAQ,EACR,SAAS,CACV,CAAC;AAEF,gBAAA,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,IAAI,CAAA,CAAE,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,aAAC,CAAC;AACF,YAAA,KAAK,CAAC,OAAO,GAAG,CAAC,CAAiB,KAAU;gBAC1C,MAAM,CAAC,CAAC,CAAC,CAAC;AACZ,aAAC,CAAC;AACJ,SAAC,CAAC;AACC,aAAA,IAAI,CAAC,CAAC,OAAY,KAAU;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,MAAM,CAAC;YAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AAC9C,YAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC3C,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,CAAC,CAAC,KAAU;AACjB,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,SAAC,CAAC,CAAC;KACN;IAEM,SAAS,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;YACjC,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AAC9C,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACxB;aAAM;YACL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AAC9C,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACxB;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC1C;IAEM,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B;uGA1gBU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChFlC,6mPAiKA,EAAA,MAAA,EAAA,CAAA,+7LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED/FI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACP,gBAAgB,EAChB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,6bACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGV,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBArBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,mBAGlB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EACP,OAAA,EAAA;wBACP,OAAO;wBACP,gBAAgB;wBAChB,aAAa;wBACb,WAAW;wBACX,eAAe;wBACf,eAAe;wBACf,iBAAiB;wBACjB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,WAAW;wBACX,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,6mPAAA,EAAA,MAAA,EAAA,CAAA,+7LAAA,CAAA,EAAA,CAAA;8BAqCQ,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEuC,WAAW,EAAA,CAAA;sBAAvD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAEjC,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEM,WAAW,EAAA,CAAA;sBAAvB,KAAK;gBAaO,SAAS,EAAA,CAAA;sBAArB,KAAK;gBA2CO,OAAO,EAAA,CAAA;sBAAnB,KAAK;;;AErLR;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"guajiritos-image-picker.mjs","sources":["../../../projects/guachos-image-picker/src/utils/pipes/i18n/i18n.pipe.ts","../../../projects/guachos-image-picker/src/utils/pipes/calculate-size/calculate-size.pipe.ts","../../../projects/guachos-image-picker/src/utils/pipes/pipes.module.ts","../../../projects/guachos-image-picker/src/lib/guachos-image-picker.component.ts","../../../projects/guachos-image-picker/src/lib/guachos-image-picker.component.html","../../../projects/guachos-image-picker/src/public-api.ts","../../../projects/guachos-image-picker/src/guajiritos-image-picker.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'i18n'\r\n})\r\nexport class I18nPipe implements PipeTransform {\r\n private en: any = {\r\n UPLOAD_A_IMAGE: 'Upload an image',\r\n MUST_EDIT: 'You must edit the image in order to resize it',\r\n TOO_LARGE: 'too large',\r\n OPEN_EDITOR_PANEL: 'Open the editor panel',\r\n DOWNLOAD: 'Download the image',\r\n CONTROL_PANEL: 'Control Panel',\r\n QUALITY: 'Quality',\r\n SAVE: 'Save',\r\n MAX_DIMENSIONS: 'Max dimensions',\r\n ASPECT_RATIO: 'Aspect ratio',\r\n MAX_WIDTH_PX: 'max-width(px)',\r\n MAX_HEIGHT_PX: 'max-height(px)',\r\n FORMAT: 'Format',\r\n CROP: 'Crop',\r\n WIDTH_PX: 'width(px)',\r\n HEIGHT_PX: 'height(px)',\r\n REMOVE: 'Remove',\r\n SIZE: 'Size'\r\n };\r\n\r\n private es: any = {\r\n UPLOAD_A_IMAGE: 'Suba una imagen',\r\n MUST_EDIT: 'Debe editar la imagen para disminuir su tamaño',\r\n TOO_LARGE: 'muy grande',\r\n OPEN_EDITOR_PANEL: 'Abra el panel de edición',\r\n DOWNLOAD: 'Descargue la imagen',\r\n CONTROL_PANEL: 'Panel de control',\r\n REMOVE: 'Eliminar',\r\n SAVE: 'Guardar',\r\n QUALITY: 'Calidad',\r\n MAX_DIMENSIONS: 'Dimensiones',\r\n ASPECT_RATIO: 'Relación-Aspecto',\r\n MAX_WIDTH_PX: 'max. ancho',\r\n MAX_HEIGHT_PX: 'max. alto',\r\n FORMAT: 'Formato',\r\n CROP: 'Recortar',\r\n WIDTH_PX: 'ancho(px)',\r\n HEIGHT_PX: 'altura(px)',\r\n SIZE: 'Tamaño'\r\n };\r\n\r\n transform(key: string, language: string): string {\r\n return language === 'en' ? this.en?.[key] : this.es?.[key];\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'calculateSize'\r\n})\r\nexport class CalculateSizePipe implements PipeTransform {\r\n\r\n transform(imageLength: number): number {\r\n if (!imageLength) {\r\n return 0;\r\n }\r\n\r\n if (imageLength) {\r\n return Math.ceil(((3 / 4) * imageLength) / 1024);\r\n } else {\r\n return 0;\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { I18nPipe } from './i18n/i18n.pipe';\r\nimport { CalculateSizePipe } from './calculate-size/calculate-size.pipe';\r\n\r\n\r\n@NgModule({\r\n declarations: [I18nPipe, CalculateSizePipe],\r\n exports: [I18nPipe, CalculateSizePipe],\r\n})\r\nexport class PipesModule { }\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n signal,\r\n ViewChild,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { ResizeObserver } from 'resize-observer';\r\nimport { ResizeObserverEntry } from 'resize-observer/lib/ResizeObserverEntry';\r\nimport { ThemePalette } from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { NgStyle } from '@angular/common';\r\n\r\nimport { PipesModule } from '../utils/pipes/pipes.module';\r\n\r\nexport interface ImagePickerConf {\r\n width?: string;\r\n height?: string;\r\n borderRadius?: string;\r\n compressInitial?: boolean;\r\n language?: string;\r\n hideDeleteBtn?: boolean;\r\n hideDownloadBtn?: boolean;\r\n hideEditBtn?: boolean;\r\n hideAddBtn?: boolean;\r\n}\r\n\r\nexport interface ImageConverterInput {\r\n width?: number;\r\n height?: number;\r\n quality?: number;\r\n dataType?: string;\r\n maintainRatio?: boolean;\r\n changeHeight?: boolean;\r\n changeWidth?: boolean;\r\n}\r\n\r\nexport type ImageAllowedTypes =\r\n 'image/*'\r\n | '.webp'\r\n | '.png'\r\n | '.webp, .jpg, .jpeg'\r\n | '.webp, .png'\r\n | '.jpg, .jpeg'\r\n | '.png, .jpg, .jpeg'\r\n | '.webp, .png, .jpg, .jpeg';\r\n\r\n@Component({\r\n selector: 'guajiritos-image-picker',\r\n templateUrl: './guachos-image-picker.component.html',\r\n styleUrls: ['./guachos-image-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n NgStyle,\r\n MatTooltipModule,\r\n MatIconModule,\r\n PipesModule,\r\n MatButtonModule,\r\n MatSliderModule,\r\n MatCheckboxModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n ],\r\n})\r\nexport class GuajiritosImagePicker {\r\n private observer: any = null;\r\n private originImageSrc: any;\r\n private urlImage: string | undefined;\r\n private lastOriginSrc: any;\r\n private arrayCopiedImages: any[] = [];\r\n\r\n public readonly uuidFilePicker: string = Date.now().toString(20);\r\n public readonly allFormats: string[] = ['webp', 'jpeg', 'png'];\r\n public showCrop: UntypedFormControl = new UntypedFormControl({ value: false, disabled: false });\r\n public maintainAspectRatio: UntypedFormControl = new UntypedFormControl({ value: true, disabled: false });\r\n public quality: UntypedFormControl = new UntypedFormControl({ value: 70, disabled: false });\r\n public format: UntypedFormControl = new UntypedFormControl({ value: null, disabled: false });\r\n public cropHeight: UntypedFormControl = new UntypedFormControl({ value: 150, disabled: false });\r\n public cropWidth: UntypedFormControl = new UntypedFormControl({ value: 150, disabled: false });\r\n public maxHeight: number = 2000;\r\n public maxWidth: number = 2000;\r\n public config: WritableSignal<ImagePickerConf> = signal({\r\n height: '240px',\r\n width: '320px',\r\n borderRadius: '16px',\r\n compressInitial: true,\r\n language: 'es',\r\n hideDeleteBtn: false,\r\n hideDownloadBtn: false,\r\n hideEditBtn: false,\r\n hideAddBtn: false,\r\n });\r\n public imageSrc: WritableSignal<string> = signal(null);\r\n public loadImage: WritableSignal<boolean> = signal(false);\r\n public noEdit: WritableSignal<boolean> = signal(false);\r\n public showEditPanel: WritableSignal<boolean> = signal(false);\r\n public imageName: WritableSignal<string> = signal('download');\r\n public currentLanguage: WritableSignal<string> = signal('es');\r\n\r\n @Input() appearance: MatFormFieldAppearance = 'outline';\r\n @Input() color: ThemePalette = 'primary';\r\n @Input() imagesAllowed: ImageAllowedTypes = 'image/*';\r\n\r\n @ViewChild('imagePicker', { static: false }) imagePicker: ElementRef | undefined;\r\n\r\n @Output() $imageChanged: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() $imageOriginal: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() imageRemoved: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n @Input() set base64Image(image: string) {\r\n if (image) {\r\n this.imageSrc.set(image);\r\n this.arrayCopiedImages = [];\r\n this.arrayCopiedImages.push(this.imageSrc());\r\n this.originImageSrc = image;\r\n this.lastOriginSrc = image;\r\n this.$imageOriginal.next(this.originImageSrc);\r\n this.loadImage.set(true);\r\n this.noEdit.set(false);\r\n }\r\n }\r\n\r\n @Input() set _imageSrc(image: string) {\r\n if (image && image !== this.imageSrc()) {\r\n let types: string[] = image.split('.');\r\n this.format.setValue(types[types.length - 1]);\r\n\r\n if (!this.format.value || (this.format.value !== 'png' && this.format.value !== 'webp')) {\r\n this.format.setValue('jpeg');\r\n }\r\n\r\n this.imageSrc.set(image);\r\n this.arrayCopiedImages = [];\r\n this.arrayCopiedImages.push(this.imageSrc());\r\n this.originImageSrc = image;\r\n this.lastOriginSrc = image;\r\n this.$imageOriginal.next(this.originImageSrc);\r\n this.loadImage.set(true);\r\n this.noEdit.set(true);\r\n } else if (image && this.imageSrc() && image === this.imageSrc()) {\r\n this.arrayCopiedImages = [];\r\n this.arrayCopiedImages.push(this.imageSrc());\r\n this.originImageSrc = image;\r\n this.lastOriginSrc = image;\r\n this.$imageOriginal.next(this.originImageSrc);\r\n this.noEdit.set(false);\r\n this.loadImage.set(true);\r\n } else {\r\n this.imageSrc.set(null);\r\n this.originImageSrc = null;\r\n this.loadImage.set(false);\r\n this.noEdit.set(false);\r\n this.arrayCopiedImages = [];\r\n this.lastOriginSrc = null;\r\n this.$imageOriginal.next(null);\r\n this.format.setValue('jpeg');\r\n this.maxHeight = 2000;\r\n this.maxWidth = 2000;\r\n this.cropHeight.setValue(150);\r\n this.cropWidth.setValue(150);\r\n this.maintainAspectRatio.setValue(true);\r\n this.showEditPanel.set(false);\r\n }\r\n }\r\n\r\n @Input() set _config(value: ImagePickerConf) {\r\n if (value && value.constructor == Object) {\r\n this.config.set({\r\n ...this.config(),\r\n ...value,\r\n });\r\n }\r\n }\r\n\r\n private async handleReaderLoaded(readerEvt: { target: { result: any; }; }): Promise<void> {\r\n const binaryString: string = readerEvt.target.result;\r\n const base64textString: string = btoa(binaryString);\r\n this.originImageSrc = this.urlImage + base64textString;\r\n this.lastOriginSrc = this.urlImage + base64textString;\r\n if (this.config()?.compressInitial) {\r\n this.quality.setValue(70);\r\n const input: ImageConverterInput = {\r\n dataType: this.format.value,\r\n quality: 0.70,\r\n maintainRatio: true,\r\n };\r\n this.imageSrc.set(await this.resizeDataURL(this.urlImage + base64textString, input));\r\n } else {\r\n this.imageSrc.set(this.urlImage + base64textString);\r\n this.arrayCopiedImages = [];\r\n this.arrayCopiedImages.push({\r\n lastImage: this.imageSrc(),\r\n width: this.maxWidth,\r\n height: this.maxHeight,\r\n quality: this.quality.value,\r\n });\r\n this.$imageOriginal.next(this.imageSrc());\r\n }\r\n this.$imageChanged.next(this.imageSrc());\r\n this.loadImage.set(true);\r\n }\r\n\r\n private async resizeDataURL(datas: string, input: ImageConverterInput): Promise<any> {\r\n return await new Promise(async function(resolve): Promise<void> {\r\n let img: HTMLImageElement = document.createElement('img');\r\n img.src = datas + '';\r\n img.crossOrigin = 'Anonymous';\r\n let quality: number = input?.quality ?? 1.0;\r\n let maintainRatio: boolean = input.maintainRatio !== undefined ? input.maintainRatio : true;\r\n\r\n img.onload = function(): void {\r\n const canvas: HTMLCanvasElement = document.createElement('canvas');\r\n const ctx: CanvasRenderingContext2D = canvas.getContext('2d');\r\n let ratio: number = img.width / img.height;\r\n let width: number = input?.width ?? img.width;\r\n let height: number = input?.height ?? img.height;\r\n\r\n if (maintainRatio) {\r\n if (input.changeHeight) {\r\n canvas.width = height * ratio;\r\n canvas.height = height;\r\n } else {\r\n canvas.width = width;\r\n canvas.height = width / ratio;\r\n }\r\n } else {\r\n canvas.width = width;\r\n canvas.height = height;\r\n }\r\n\r\n ctx?.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n let type: string = input?.dataType ?? 'webp';\r\n const dataURI: string = canvas.toDataURL(`image/${type}`, quality);\r\n resolve({\r\n dataUri: dataURI,\r\n width: canvas.width,\r\n height: canvas.height,\r\n });\r\n };\r\n }).then((data: any) => {\r\n this.maxHeight = data?.height;\r\n this.maxWidth = data?.width;\r\n if (this.arrayCopiedImages?.length <= 20) {\r\n this.arrayCopiedImages.push({\r\n lastImage: data?.dataUri,\r\n width: this.maxWidth,\r\n height: this.maxHeight,\r\n quality: this.quality.value,\r\n });\r\n }\r\n\r\n return data.dataUri;\r\n });\r\n }\r\n\r\n private wait(ms?: number | undefined): Promise<any> {\r\n ms = ms ?? 1000;\r\n return new Promise((resolve): void => {\r\n setTimeout(() => {\r\n return resolve(true);\r\n }, ms);\r\n });\r\n }\r\n\r\n private dragElement(element: HTMLElement): void {\r\n let pos1: number = 0, pos2: number = 0, pos3: number = 0, pos4: number = 0;\r\n\r\n let el: HTMLElement = document.getElementById(element.id + '-header');\r\n if (el) {\r\n el.onmousedown = dragMouseDown;\r\n el.ontouchstart = dragMouseDown;\r\n } else {\r\n element.onmousedown = dragMouseDown;\r\n element.ontouchstart = dragMouseDown;\r\n }\r\n\r\n function dragMouseDown(e: any): void {\r\n e = e || window.event;\r\n e?.preventDefault();\r\n pos3 = e?.clientX;\r\n pos4 = e?.clientY;\r\n document.onmouseup = closeDragElement;\r\n document.ontouchend = closeDragElement;\r\n document.onmousemove = elementDrag;\r\n document.ontouchmove = elementDrag;\r\n }\r\n\r\n function elementDrag(e: any): void {\r\n let holderImage: any = document.getElementById('image-full');\r\n e = e || window.event;\r\n e?.preventDefault();\r\n pos1 = pos3 - e?.clientX;\r\n pos2 = pos4 - e?.clientY;\r\n pos3 = e?.clientX;\r\n pos4 = e?.clientY;\r\n\r\n const newTop: number = element.offsetTop - pos2;\r\n const newLeft: number = element.offsetLeft - pos1;\r\n const rectHolder = holderImage.getBoundingClientRect();\r\n const rectElement: DOMRect = element.getBoundingClientRect();\r\n if (newTop >= rectHolder.y + 8) {\r\n element.style.top = Math.min(newTop, rectHolder.y + rectHolder.height - rectElement.height - 4) + 'px';\r\n }\r\n if (newLeft > rectHolder.x + 4 && rectHolder.x + rectHolder.width > rectElement.x + rectElement.width + 2) {\r\n element.style.left = Math.min(newLeft, rectHolder.x + rectHolder.width - rectElement.width - 4) + 'px';\r\n }\r\n }\r\n\r\n function closeDragElement(): void {\r\n document.onmouseup = null;\r\n document.onmousemove = null;\r\n document.ontouchend = null;\r\n document.ontouchmove = null;\r\n }\r\n }\r\n\r\n public onUpload(event: { preventDefault: () => void; }): void {\r\n event.preventDefault();\r\n this.imagePicker?.nativeElement.click();\r\n }\r\n\r\n public handleFileSelect(evt: any): void {\r\n const files = evt?.target?.files;\r\n if (files) {\r\n const file = files[0];\r\n\r\n if (file?.type?.indexOf('png') !== -1) {\r\n this.format.setValue('png');\r\n } else if (file?.type?.indexOf('webp') !== -1) {\r\n this.format.setValue('webp');\r\n } else {\r\n this.format.setValue('jpeg');\r\n }\r\n\r\n this.imageName.set(file?.name?.split('.')[0]);\r\n this.urlImage = `data:${file?.type};base64,`;\r\n this.noEdit.set(false);\r\n\r\n if (files && file) {\r\n const reader: any = new FileReader();\r\n reader.onload = this.handleReaderLoaded.bind(this);\r\n reader.readAsBinaryString(file);\r\n }\r\n }\r\n }\r\n\r\n public onCloseEditPanel(): void {\r\n if (this.observer instanceof ResizeObserver) {\r\n let imageCropper: any = document.getElementById('image-cropper');\r\n let imageFull: any = document.getElementById('image-full');\r\n this.observer.unobserve(imageCropper);\r\n this.observer.unobserve(imageFull);\r\n }\r\n this.showCrop.setValue(false);\r\n this.showEditPanel.set(false);\r\n }\r\n\r\n public async onChangeQuality(): Promise<void> {\r\n const qualityItem: number = this.quality.value / 100;\r\n this.maxHeight = this.maxHeight ?? 2000;\r\n this.maxWidth = this.maxWidth ?? 2000;\r\n\r\n await this.wait(250);\r\n try {\r\n const input: ImageConverterInput = {\r\n height: this.maxHeight,\r\n width: this.maxWidth,\r\n dataType: this.format.value,\r\n quality: qualityItem,\r\n maintainRatio: this.maintainAspectRatio.value,\r\n };\r\n\r\n this.imageSrc.set(await this.resizeDataURL(this.originImageSrc, input));\r\n this.$imageChanged.next(this.imageSrc());\r\n this.loadImage.set(true);\r\n } catch (error) {\r\n this.loadImage.set(true);\r\n }\r\n }\r\n\r\n public async onChangeFormat(): Promise<void> {\r\n let qualityItem: number = this.quality.value / 100;\r\n this.maxHeight = this.maxHeight ?? 2000;\r\n this.maxWidth = this.maxWidth ?? 2000;\r\n\r\n await this.wait(250);\r\n try {\r\n let input: ImageConverterInput = {\r\n height: this.maxHeight,\r\n width: this.maxWidth,\r\n dataType: this.format.value,\r\n quality: qualityItem,\r\n maintainRatio: this.maintainAspectRatio.value,\r\n };\r\n this.imageSrc.set(await this.resizeDataURL(this.originImageSrc, input));\r\n this.$imageChanged.next(this.imageSrc());\r\n this.loadImage.set(true);\r\n } catch (error) {\r\n this.loadImage.set(true);\r\n }\r\n }\r\n\r\n public async onChangeSize(changeWidth?: any, changeHeight?: any): Promise<void> {\r\n let qualityItem: number = this.quality.value / 100;\r\n this.maxHeight = this.maxHeight ?? 2000;\r\n this.maxWidth = this.maxWidth ?? 2000;\r\n\r\n await this.wait(500);\r\n\r\n try {\r\n let input: ImageConverterInput = {\r\n height: this.maxHeight,\r\n width: this.maxWidth,\r\n dataType: this.format.value,\r\n quality: qualityItem,\r\n maintainRatio: this.maintainAspectRatio.value,\r\n changeHeight: changeHeight,\r\n changeWidth: changeWidth,\r\n };\r\n this.imageSrc.set(await this.resizeDataURL(this.originImageSrc, input));\r\n this.$imageChanged.next(this.imageSrc());\r\n this.loadImage.set(true);\r\n } catch (error) {\r\n this.loadImage.set(true);\r\n }\r\n }\r\n\r\n public onChangeCrop(): void {\r\n const cropper: any = document.getElementById('image-cropper');\r\n cropper.style.width = this.cropWidth.value + 'px';\r\n cropper.style.height = this.cropHeight.value + 'px';\r\n }\r\n\r\n public onCropStateChange(): void {\r\n const cropper: HTMLElement = document.getElementById('image-cropper');\r\n const fullImage: HTMLElement = document.getElementById('image-full');\r\n const aspectRatio: number = fullImage.offsetWidth / fullImage.offsetHeight;\r\n\r\n if (this.showCrop.value) {\r\n cropper.style.opacity = '1.0';\r\n this.dragElement(cropper);\r\n this.observer = new ResizeObserver((entries: ResizeObserverEntry[]): void => {\r\n entries.forEach((entry: ResizeObserverEntry): void => {\r\n if (this.showEditPanel()) {\r\n const elementCropper: HTMLElement = document.getElementById('image-cropper');\r\n const elementFull: HTMLElement = document.getElementById('image-full');\r\n\r\n const rectHolder: DOMRect = elementFull.getBoundingClientRect();\r\n const rectElement: DOMRect = elementCropper.getBoundingClientRect();\r\n\r\n const maxWidth: number = rectHolder.x + rectHolder.width - rectElement.x - 4;\r\n const maxHeight: number = rectHolder.y + rectHolder.height - rectElement.y - 4;\r\n\r\n // Obtener el tamaño del área de recorte seleccionada por el usuario\r\n const cropWidth: number = elementCropper.offsetWidth;\r\n const cropHeight: number = elementCropper.offsetHeight;\r\n\r\n // Calcular el ancho y el alto del área de recorte manteniendo la relación de aspecto de la imagen original\r\n let newWidth: number = cropWidth;\r\n let newHeight: number = cropHeight;\r\n\r\n if (this.maintainAspectRatio.value) {\r\n if (cropWidth / cropHeight > aspectRatio) {\r\n newHeight = cropWidth / aspectRatio;\r\n } else {\r\n newWidth = cropHeight * aspectRatio;\r\n }\r\n }\r\n\r\n // Ajustar el ancho y el alto del área de recorte si supera los límites\r\n newWidth = Math.min(newWidth, maxWidth);\r\n newHeight = Math.min(newHeight, maxHeight);\r\n\r\n // Establecer el tamaño y la posición del área de recorte\r\n elementCropper.style.width = `${newWidth}px`;\r\n elementCropper.style.height = `${newHeight}px`;\r\n\r\n this.cropWidth.setValue(rectElement.width);\r\n this.cropHeight.setValue(rectElement.height);\r\n\r\n if (entry.target.id == 'image-full') {\r\n if (rectHolder.top > 0) {\r\n elementCropper.style.top = rectHolder.top + 4 + 'px';\r\n }\r\n elementCropper.style.left = rectHolder.left + 4 + 'px';\r\n }\r\n }\r\n });\r\n });\r\n this.observer.observe(document.getElementById('image-cropper'));\r\n this.observer.observe(document.getElementById('image-full'));\r\n } else {\r\n cropper.style.opacity = '0.0';\r\n if (this.observer instanceof ResizeObserver) {\r\n const elementCropper: HTMLElement = document.getElementById('image-cropper');\r\n const elementFull: HTMLElement = document.getElementById('image-full');\r\n this.observer.unobserve(elementCropper);\r\n this.observer.unobserve(elementFull);\r\n }\r\n }\r\n }\r\n\r\n public onCrop(type?: any): void {\r\n type = type ?? this.format.value;\r\n const cropper: HTMLElement = document.getElementById('image-cropper');\r\n const elementFull: HTMLElement = document.getElementById('image-full');\r\n const rectCropper: DOMRect = cropper.getBoundingClientRect();\r\n const dataHolderRect: DOMRect = elementFull.getBoundingClientRect();\r\n const canvas: HTMLCanvasElement = document.createElement('canvas');\r\n new Promise((resolve, reject): void => {\r\n let ctx: CanvasRenderingContext2D | null = canvas.getContext('2d');\r\n let image: HTMLImageElement = new Image();\r\n image.src = this.imageSrc();\r\n image.onload = (): void => {\r\n let ratio: number = image.height / dataHolderRect.height;\r\n let newWidth: number = rectCropper.width * ratio;\r\n let newHeight: number = rectCropper.height * ratio;\r\n canvas.width = newWidth;\r\n canvas.height = newHeight;\r\n ctx?.drawImage(\r\n image,\r\n Math.abs(rectCropper.x * ratio) - Math.abs(dataHolderRect.x * ratio),\r\n Math.abs(rectCropper.y * ratio) - Math.abs(dataHolderRect.y * ratio),\r\n newWidth,\r\n newHeight,\r\n 0,\r\n 0,\r\n newWidth,\r\n newHeight,\r\n );\r\n\r\n resolve(canvas.toDataURL(`image/${type}`, this.quality.value));\r\n };\r\n image.onerror = (e: string | Event): void => {\r\n reject(e);\r\n };\r\n })\r\n .then((dataUri: any): void => {\r\n this.imageSrc.set(dataUri);\r\n this.showCrop.setValue(false);\r\n this.onCropStateChange();\r\n this.maxWidth = canvas?.width;\r\n this.maxHeight = canvas?.height;\r\n this.lastOriginSrc = this.originImageSrc + '';\r\n this.originImageSrc = dataUri;\r\n this.$imageChanged.next(this.imageSrc());\r\n })\r\n .catch((e): void => {\r\n console.log(e);\r\n });\r\n }\r\n\r\n public onRestore(): void {\r\n if (this.arrayCopiedImages.length) {\r\n let lastState = this.arrayCopiedImages.pop();\r\n this.imageSrc.set(lastState.lastImage);\r\n this.maxWidth = lastState.width;\r\n this.maxHeight = lastState.height;\r\n this.originImageSrc = this.lastOriginSrc + '';\r\n this.noEdit.set(false);\r\n } else {\r\n this.imageSrc.set(this.lastOriginSrc);\r\n this.originImageSrc = this.lastOriginSrc + '';\r\n this.noEdit.set(false);\r\n }\r\n\r\n this.$imageChanged.next(this.imageSrc());\r\n }\r\n\r\n public onRemove(): void {\r\n this.imageSrc.set(null);\r\n this.originImageSrc = null;\r\n this.loadImage.set(false);\r\n this.arrayCopiedImages = [];\r\n this.lastOriginSrc = null;\r\n this.$imageOriginal.next(null);\r\n this.$imageChanged.next(null);\r\n this.format.setValue(null);\r\n this.maxHeight = 2000;\r\n this.maxWidth = 2000;\r\n this.cropHeight.setValue(150);\r\n this.cropWidth.setValue(150);\r\n this.maintainAspectRatio.setValue(true);\r\n this.showEditPanel.set(false);\r\n this.noEdit.set(false);\r\n this.imageRemoved.emit();\r\n }\r\n}\r\n","@if (!loadImage()) {\r\n <div class='place-image'>\r\n <div class='image-holder'\r\n [ngStyle]='{ width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <button [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\" class='image-upload-btn' mat-icon-button\r\n (click)='onUpload($event)'>\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (loadImage()) {\r\n <div class='place-image'>\r\n <div class='image-holder-loaded'\r\n [ngStyle]='{width: config()?.width,height: config()?.height,borderRadius: config()?.borderRadius}'>\r\n <img [src]='imageSrc()' alt='image-loaded' [ngStyle]='{ borderRadius: config()?.borderRadius }'>\r\n <input #imagePicker type='file' class='d-none' [id]=\"'filePicker-' + uuidFilePicker\"\r\n (change)='handleFileSelect($event)' [accept]='imagesAllowed'>\r\n </div>\r\n @if (imageSrc()?.length) {\r\n <p class='mat-caption image-caption' [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb &nbsp; {{ format.value }}\r\n </p>\r\n }\r\n <div class='editing-bar-btn'>\r\n @if (!config()?.hideAddBtn) {\r\n <button id='upload-img' mat-icon-button (click)='onUpload($event)'\r\n [matTooltip]=\"'UPLOAD_A_IMAGE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>add_a_photo</mat-icon>\r\n </button>\r\n }\r\n @if (!config()?.hideEditBtn && !noEdit()) {\r\n <button id='edit-img' mat-icon-button (click)='showEditPanel.set(true)'\r\n [matTooltip]=\"'OPEN_EDITOR_PANEL' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>edit</mat-icon>\r\n </button>\r\n }\r\n @if (!config()?.hideDownloadBtn) {\r\n <a id='download-img' [matTooltip]=\"'DOWNLOAD' | i18n: config()?.language\"\r\n [href]='imageSrc()' mat-icon-button [download]='imageName'>\r\n <mat-icon class='mat-18'>cloud_download</mat-icon>\r\n </a>\r\n }\r\n @if (!config()?.hideDeleteBtn) {\r\n <button id='delete-img' mat-icon-button (click)='onRemove()'\r\n [matTooltip]=\"'REMOVE' | i18n: config()?.language\">\r\n <mat-icon class='mat-18'>delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n@if (showEditPanel()) {\r\n <div id='popup' class='popup'>\r\n <div class='popup-clear'>\r\n <button mat-icon-button (click)='onCloseEditPanel()'>\r\n <mat-icon class='mat-18'>clear</mat-icon>\r\n </button>\r\n </div>\r\n <div class='image-container'>\r\n <div class='image-holder-full'>\r\n <img id='image-full' [src]='imageSrc()' alt=''>\r\n <div id='image-cropper' class='image-cropper'>\r\n <div id='image-cropper-header'>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n <div class='control-panel'>\r\n <p class='item-panel fw-600'>{{ 'QUALITY' | i18n: config()?.language }}</p>\r\n <div class='quality-container'>\r\n <mat-slider ngDefaultControl [color]='color' class='w-100 mw-100' (change)='onChangeQuality()'\r\n [max]='100' [min]='0' [step]='1' [discrete]='true' [showTickMarks]='true'>\r\n <input matSliderThumb [formControl]='quality'>\r\n </mat-slider>\r\n </div>\r\n <div class='item-panel'>\r\n <span class='fw-600'>{{ 'MAX_DIMENSIONS' | i18n: config()?.language }}</span>\r\n <mat-checkbox class='float-right' [formControl]='maintainAspectRatio' [color]='color'>\r\n <span>{{ 'ASPECT_RATIO' | i18n: config()?.language }}</span>\r\n </mat-checkbox>\r\n </div>\r\n <div class='max-dimension-container'>\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(true, false)' matInput\r\n [placeholder]=\"'MAX_WIDTH_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n <mat-form-field class='w-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'MAX_HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeSize(false, true)' matInput\r\n [placeholder]=\"'MAX_HEIGHT_PX' | i18n: config()?.language\"\r\n [(ngModel)]='maxHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n <p class='item-panel fw-600'>{{ 'FORMAT' | i18n: config()?.language }}</p>\r\n <div class='formats-selection'>\r\n <mat-form-field class='w-100 mw-100' [appearance]='appearance' [color]='color'>\r\n <mat-select [formControl]='format' (selectionChange)='onChangeFormat()'>\r\n @for (format of allFormats; track format) {\r\n <mat-option [value]='format'>\r\n {{ format }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class='refresh-container'>\r\n <mat-checkbox (change)='onCropStateChange()' [formControl]='showCrop' [color]='color'>\r\n <p class='item-panel fw-600'>{{ 'CROP' | i18n: config()?.language }}</p>\r\n </mat-checkbox>\r\n <div class='d-flex '>\r\n <button class='float-right' mat-icon-button [color]='color' (click)='onRestore()'>\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n @if (showCrop.value) {\r\n <p>\r\n <button mat-icon-button [color]='color' (click)='onCrop()'>\r\n <mat-icon>crop</mat-icon>\r\n </button>\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n @if (showCrop.value) {\r\n <div class='dimension-container'>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'WIDTH_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'WIDTH_PX' | i18n: config()?.language\"\r\n [formControl]='cropWidth' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n <mat-form-field class='w-48 mw-48' [appearance]='appearance' [color]='color'>\r\n <mat-label>{{ 'HEIGHT_PX' | i18n: config()?.language }}</mat-label>\r\n <input (change)='onChangeCrop()' matInput [placeholder]=\"'HEIGHT_PX' | i18n: config()?.language\"\r\n [formControl]='cropHeight' type='number' [min]='0' [max]='2000'>\r\n </mat-form-field>\r\n </div>\r\n }\r\n <div class='save-container'>\r\n <button mat-flat-button (click)='onCloseEditPanel()' [color]='color' class='save-button'>\r\n {{ 'SAVE' | i18n: config()?.language }}\r\n </button>\r\n @if (imageSrc()?.length) {\r\n <p class='mat-caption image-caption'\r\n [class.warn]='(imageSrc()?.length | calculateSize) > 200'\r\n [class.fw-600]='(imageSrc()?.length | calculateSize) > 200'>\r\n {{ \"SIZE\" | i18n: currentLanguage() }}: {{ (imageSrc()?.length | calculateSize) }}Kb\r\n &nbsp; {{ format.value }}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n","/*\r\n * Public API Surface of guachos-image-picker\r\n */\r\n\r\nexport * from './lib/guachos-image-picker.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.I18nPipe","i4.CalculateSizePipe"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guajiritos/image-picker",
3
- "version": "17.1.4",
3
+ "version": "18.0.1",
4
4
  "author": {
5
5
  "name": "Guajiritos SRL",
6
6
  "email": "cto@guajiritos.com",