@acorex/components 18.10.14 → 18.10.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (24) hide show
  1. package/button-group/lib/button-group.component.d.ts +5 -5
  2. package/esm2022/button-group/lib/button-group.component.mjs +10 -8
  3. package/esm2022/image-editor/lib/image-editor-toolbar/image-editor-toolbar.component.mjs +4 -4
  4. package/esm2022/image-editor/lib/image-editor-tools/image-editor-color-picker/image-editor-color-picker.component.mjs +3 -3
  5. package/esm2022/image-editor/lib/image-editor-tools/image-editor-pen-mode-changer/image-editor-pen-mode-changer.component.mjs +3 -3
  6. package/esm2022/image-editor/lib/image-editor-view/image-editor-view.component.mjs +15 -3
  7. package/esm2022/image-editor/lib/image-editor.service.mjs +4 -3
  8. package/esm2022/paint/lib/paint/paint-view/paint-view.component.mjs +8 -3
  9. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-container/wysiwyg-container.component.mjs +9 -2
  10. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-toolbar/wysiwyg-toolbar.component.mjs +3 -3
  11. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-alignment/wysiwyg-alignment.component.mjs +3 -1
  12. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-font-style/wysiwyg-font-style.component.mjs +3 -1
  13. package/esm2022/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-list/wysiwyg-list.component.mjs +3 -1
  14. package/fesm2022/acorex-components-button-group.mjs +9 -7
  15. package/fesm2022/acorex-components-button-group.mjs.map +1 -1
  16. package/fesm2022/acorex-components-image-editor.mjs +24 -11
  17. package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
  18. package/fesm2022/acorex-components-paint.mjs +7 -2
  19. package/fesm2022/acorex-components-paint.mjs.map +1 -1
  20. package/fesm2022/acorex-components-wysiwyg.mjs +16 -3
  21. package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
  22. package/image-editor/lib/image-editor-toolbar/image-editor-toolbar.component.d.ts +1 -1
  23. package/image-editor/lib/image-editor.service.d.ts +3 -2
  24. package/package.json +48 -48
@@ -28,8 +28,9 @@ class AXImageEditorService {
28
28
  this.cropState = signal({ state: false, userInteract: false });
29
29
  this.rotate = signal({ state: 0, userInteract: false });
30
30
  this.isImageLoad = signal(false);
31
- this.newImage = signal(new Image());
32
- this.initialImage = signal(new Image());
31
+ this.newImage = signal(null);
32
+ this.initialImage = signal(null);
33
+ this.imageBlob = signal([]);
33
34
  }
34
35
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXImageEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
35
36
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXImageEditorService }); }
@@ -85,7 +86,7 @@ class AXImageEditorToolbarComponent extends MXInputBaseValueComponent {
85
86
  .then((data) => {
86
87
  if (data.result) {
87
88
  this.service.initialImage.set(this.service.newImage());
88
- this.commitValue(this.service.newImage().src);
89
+ this.commitValue(this.service.imageBlob());
89
90
  }
90
91
  });
91
92
  }
@@ -101,7 +102,7 @@ class AXImageEditorToolbarComponent extends MXInputBaseValueComponent {
101
102
  useExisting: forwardRef(() => AXImageEditorToolbarComponent),
102
103
  multi: true,
103
104
  },
104
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-toolbar-container\">\n <ng-content select=\"ax-prefix\"></ng-content>\n <ng-content></ng-content>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n<ax-button color=\"primary\" (onClick)=\"saveHandler()\" class=\"ax-save-btn ax-sm\" text=\"Save\"></ax-button>\n", styles: ["ax-image-editor-toolbar{padding:.3rem;width:100%;display:flex;align-items:center;justify-content:space-between}ax-image-editor-toolbar .ax-toolbar-container{display:flex;align-items:center;flex-wrap:wrap}ax-image-editor-toolbar .ax-icon{font-weight:900;font-size:1rem}ax-image-editor-toolbar .ax-save-btn{margin-inline:.5rem}\n"], dependencies: [{ kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
105
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-toolbar-container\">\n <ng-content select=\"ax-prefix\"></ng-content>\n <ng-content></ng-content>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n<ax-button color=\"primary\" (onClick)=\"saveHandler()\" class=\"ax-save-btn ax-sm\" text=\"Save\"></ax-button>\n", styles: ["ax-image-editor-toolbar{padding:.3rem 1rem;width:100%;display:flex;align-items:center;justify-content:space-between}ax-image-editor-toolbar .ax-toolbar-container{display:flex;align-items:center;flex-wrap:wrap}ax-image-editor-toolbar .ax-icon{font-weight:900;font-size:1rem}\n"], dependencies: [{ kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
105
106
  }
106
107
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXImageEditorToolbarComponent, decorators: [{
107
108
  type: Component,
@@ -115,7 +116,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
115
116
  useExisting: forwardRef(() => AXImageEditorToolbarComponent),
116
117
  multi: true,
117
118
  },
118
- ], template: "<div class=\"ax-toolbar-container\">\n <ng-content select=\"ax-prefix\"></ng-content>\n <ng-content></ng-content>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n<ax-button color=\"primary\" (onClick)=\"saveHandler()\" class=\"ax-save-btn ax-sm\" text=\"Save\"></ax-button>\n", styles: ["ax-image-editor-toolbar{padding:.3rem;width:100%;display:flex;align-items:center;justify-content:space-between}ax-image-editor-toolbar .ax-toolbar-container{display:flex;align-items:center;flex-wrap:wrap}ax-image-editor-toolbar .ax-icon{font-weight:900;font-size:1rem}ax-image-editor-toolbar .ax-save-btn{margin-inline:.5rem}\n"] }]
119
+ ], template: "<div class=\"ax-toolbar-container\">\n <ng-content select=\"ax-prefix\"></ng-content>\n <ng-content></ng-content>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n<ax-button color=\"primary\" (onClick)=\"saveHandler()\" class=\"ax-save-btn ax-sm\" text=\"Save\"></ax-button>\n", styles: ["ax-image-editor-toolbar{padding:.3rem 1rem;width:100%;display:flex;align-items:center;justify-content:space-between}ax-image-editor-toolbar .ax-toolbar-container{display:flex;align-items:center;flex-wrap:wrap}ax-image-editor-toolbar .ax-icon{font-weight:900;font-size:1rem}\n"] }]
119
120
  }] });
120
121
 
121
122
  /**
@@ -146,11 +147,11 @@ class AXImageEditorColorPickerComponent {
146
147
  return `.5rem`;
147
148
  }
148
149
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXImageEditorColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
149
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXImageEditorColorPickerComponent, selector: "ax-image-editor-color-picker", host: { properties: { "style.marginInline": "this.__hostClass" } }, ngImport: i0, template: "<ax-button #colorBtn look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-color-palette\"></ax-icon>\n</ax-button>\n<ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"colorBtn\"\n [placement]=\"popoverOption.placement\"\n>\n <div class=\"ax-overlay-pane\">\n <ax-color-palette (ngModelChange)=\"changeColorHandler($event)\" [ngModel]=\"selectedColor()\">\n <ax-color-palette-preview></ax-color-palette-preview>\n <ax-color-palette-picker></ax-color-palette-picker>\n <ax-color-palette-input></ax-color-palette-input>\n </ax-color-palette>\n </div>\n</ax-popover>\n", dependencies: [{ kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.AXColorPalleteComponent, selector: "ax-color-palette", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "checked"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange"] }, { kind: "component", type: i3.AXColorPalettePreviewComponent, selector: "ax-color-palette-preview" }, { kind: "component", type: i3.AXColorPaletteInputComponent, selector: "ax-color-palette-input" }, { kind: "component", type: i3.AXColorPalettePickerComponent, selector: "ax-color-palette-picker" }, { kind: "component", type: i4.AXPopoverComponent, selector: "ax-popover", inputs: ["offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], encapsulation: i0.ViewEncapsulation.None }); }
150
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXImageEditorColorPickerComponent, selector: "ax-image-editor-color-picker", host: { properties: { "style.marginInline": "this.__hostClass" } }, ngImport: i0, template: "<div class=\"ax-color-flex-container\">\n <div [style]=\"{ backgroundColor: selectedColor() }\" class=\"ax-submit-color\"></div>\n <ax-button #colorBtn look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-color-palette\"></ax-icon>\n </ax-button>\n</div>\n<ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"colorBtn\"\n [placement]=\"popoverOption.placement\"\n>\n <div class=\"ax-overlay-pane\">\n <ax-color-palette (ngModelChange)=\"changeColorHandler($event)\" [ngModel]=\"selectedColor()\">\n <ax-color-palette-preview></ax-color-palette-preview>\n <ax-color-palette-picker></ax-color-palette-picker>\n <ax-color-palette-input></ax-color-palette-input>\n </ax-color-palette>\n </div>\n</ax-popover>\n", styles: ["ax-image-editor-color-picker{margin-inline:0!important}ax-image-editor-color-picker .ax-submit-color{border:1px solid rgb(var(--ax-color-text-default));width:.6rem;height:.6rem;border-radius:1000vmax}ax-image-editor-color-picker .ax-color-flex-container{display:flex;align-items:center;cursor:pointer}\n"], dependencies: [{ kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.AXColorPalleteComponent, selector: "ax-color-palette", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "checked"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange"] }, { kind: "component", type: i3.AXColorPalettePreviewComponent, selector: "ax-color-palette-preview" }, { kind: "component", type: i3.AXColorPaletteInputComponent, selector: "ax-color-palette-input" }, { kind: "component", type: i3.AXColorPalettePickerComponent, selector: "ax-color-palette-picker" }, { kind: "component", type: i4.AXPopoverComponent, selector: "ax-popover", inputs: ["offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], encapsulation: i0.ViewEncapsulation.None }); }
150
151
  }
151
152
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXImageEditorColorPickerComponent, decorators: [{
152
153
  type: Component,
153
- args: [{ selector: 'ax-image-editor-color-picker', encapsulation: ViewEncapsulation.None, template: "<ax-button #colorBtn look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-color-palette\"></ax-icon>\n</ax-button>\n<ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"colorBtn\"\n [placement]=\"popoverOption.placement\"\n>\n <div class=\"ax-overlay-pane\">\n <ax-color-palette (ngModelChange)=\"changeColorHandler($event)\" [ngModel]=\"selectedColor()\">\n <ax-color-palette-preview></ax-color-palette-preview>\n <ax-color-palette-picker></ax-color-palette-picker>\n <ax-color-palette-input></ax-color-palette-input>\n </ax-color-palette>\n </div>\n</ax-popover>\n" }]
154
+ args: [{ selector: 'ax-image-editor-color-picker', encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-color-flex-container\">\n <div [style]=\"{ backgroundColor: selectedColor() }\" class=\"ax-submit-color\"></div>\n <ax-button #colorBtn look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-color-palette\"></ax-icon>\n </ax-button>\n</div>\n<ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"colorBtn\"\n [placement]=\"popoverOption.placement\"\n>\n <div class=\"ax-overlay-pane\">\n <ax-color-palette (ngModelChange)=\"changeColorHandler($event)\" [ngModel]=\"selectedColor()\">\n <ax-color-palette-preview></ax-color-palette-preview>\n <ax-color-palette-picker></ax-color-palette-picker>\n <ax-color-palette-input></ax-color-palette-input>\n </ax-color-palette>\n </div>\n</ax-popover>\n", styles: ["ax-image-editor-color-picker{margin-inline:0!important}ax-image-editor-color-picker .ax-submit-color{border:1px solid rgb(var(--ax-color-text-default));width:.6rem;height:.6rem;border-radius:1000vmax}ax-image-editor-color-picker .ax-color-flex-container{display:flex;align-items:center;cursor:pointer}\n"] }]
154
155
  }], propDecorators: { __hostClass: [{
155
156
  type: HostBinding,
156
157
  args: ['style.marginInline']
@@ -225,11 +226,11 @@ class AXImageEditorPenModeChangerComponent {
225
226
  this.service.lineWidth.set(e);
226
227
  }
227
228
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXImageEditorPenModeChangerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
228
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXImageEditorPenModeChangerComponent, selector: "ax-image-editor-pen-mode-changer", host: { properties: { "style.marginInline": "this.__hostClass" } }, ngImport: i0, template: "<div class=\"ax-paint-pen-mode-changer-container\">\n <div class=\"ax-pen-type-container\">\n <ax-button look=\"blank\" #alignPop>\n <ax-icon class=\"ax-icon ax-icon-pen-ruler\"></ax-icon>\n </ax-button>\n </div>\n\n <ax-button (click)=\"clear()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-refresh\"></ax-icon>\n </ax-button>\n\n <ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"alignPop\"\n [placement]=\"popoverOption.placement\"\n >\n <div class=\"ax-overlay-pane\">\n <ax-button\n (click)=\"penTypeHandler('pen')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'pen' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n </ax-button>\n\n <ax-button\n (click)=\"penTypeHandler('highlight')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'highlight' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n </ax-button>\n\n <div class=\"ax-paint-width-slider\">\n <ax-range-slider\n [min]=\"2\"\n [max]=\"20\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"valueHandler($event)\"\n ></ax-range-slider>\n </div>\n </div>\n </ax-popover>\n</div>\n", styles: ["ax-range-slider{padding:.5rem .75rem}ax-range-slider .ax-range-slider .ax-range-slider-handler{width:1rem!important;height:1rem!important}.ax-paint-pen-mode-changer-container{display:flex;align-items:center}.ax-paint-pen-mode-changer-container .ax-pen-type-container{margin-inline-end:.5rem}.ax-overlay-pane{padding:.5rem!important}\n"], dependencies: [{ kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$1.AXRangeSliderComponent, selector: "ax-range-slider", inputs: ["disabled", "readonly", "orientation", "color", "values", "mode", "min", "max", "step", "snap", "tooltipMode", "snapMode", "hasStep", "hasSnap", "hasLable", "hasTooltip"], outputs: ["valuesChange"] }, { kind: "component", type: i4.AXPopoverComponent, selector: "ax-popover", inputs: ["offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], encapsulation: i0.ViewEncapsulation.None }); }
229
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXImageEditorPenModeChangerComponent, selector: "ax-image-editor-pen-mode-changer", host: { properties: { "style.marginInline": "this.__hostClass" } }, ngImport: i0, template: "<ax-button look=\"blank\" #alignPop>\n @switch (service.penType()) {\n @case ('pen') {\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n }\n @case ('highlight') {\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n }\n }\n</ax-button>\n\n<ax-button (click)=\"clear()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-refresh\"></ax-icon>\n</ax-button>\n\n<ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"alignPop\"\n [placement]=\"popoverOption.placement\"\n>\n <div class=\"ax-overlay-pane\">\n <ax-button\n (click)=\"penTypeHandler('pen')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'pen' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n </ax-button>\n\n <ax-button\n (click)=\"penTypeHandler('highlight')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'highlight' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n </ax-button>\n\n <div class=\"ax-paint-width-slider\">\n <ax-range-slider\n [min]=\"2\"\n [max]=\"20\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"valueHandler($event)\"\n ></ax-range-slider>\n </div>\n </div>\n</ax-popover>\n", styles: ["ax-image-editor-pen-mode-changer{margin-inline:0!important}ax-image-editor-pen-mode-changer ax-range-slider{padding:.5rem .75rem}ax-image-editor-pen-mode-changer ax-range-slider .ax-range-slider .ax-range-slider-handler{width:1rem!important;height:1rem!important}ax-image-editor-pen-mode-changer .ax-paint-pen-mode-changer-container{display:flex;align-items:center}ax-image-editor-pen-mode-changer .ax-paint-pen-mode-changer-container .ax-pen-type-container{margin-inline-end:.5rem}ax-image-editor-pen-mode-changer .ax-overlay-pane{padding:.5rem!important}\n"], dependencies: [{ kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$1.AXRangeSliderComponent, selector: "ax-range-slider", inputs: ["disabled", "readonly", "orientation", "color", "values", "mode", "min", "max", "step", "snap", "tooltipMode", "snapMode", "hasStep", "hasSnap", "hasLable", "hasTooltip"], outputs: ["valuesChange"] }, { kind: "component", type: i4.AXPopoverComponent, selector: "ax-popover", inputs: ["offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], encapsulation: i0.ViewEncapsulation.None }); }
229
230
  }
230
231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXImageEditorPenModeChangerComponent, decorators: [{
231
232
  type: Component,
232
- args: [{ selector: 'ax-image-editor-pen-mode-changer', encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-paint-pen-mode-changer-container\">\n <div class=\"ax-pen-type-container\">\n <ax-button look=\"blank\" #alignPop>\n <ax-icon class=\"ax-icon ax-icon-pen-ruler\"></ax-icon>\n </ax-button>\n </div>\n\n <ax-button (click)=\"clear()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-refresh\"></ax-icon>\n </ax-button>\n\n <ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"alignPop\"\n [placement]=\"popoverOption.placement\"\n >\n <div class=\"ax-overlay-pane\">\n <ax-button\n (click)=\"penTypeHandler('pen')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'pen' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n </ax-button>\n\n <ax-button\n (click)=\"penTypeHandler('highlight')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'highlight' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n </ax-button>\n\n <div class=\"ax-paint-width-slider\">\n <ax-range-slider\n [min]=\"2\"\n [max]=\"20\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"valueHandler($event)\"\n ></ax-range-slider>\n </div>\n </div>\n </ax-popover>\n</div>\n", styles: ["ax-range-slider{padding:.5rem .75rem}ax-range-slider .ax-range-slider .ax-range-slider-handler{width:1rem!important;height:1rem!important}.ax-paint-pen-mode-changer-container{display:flex;align-items:center}.ax-paint-pen-mode-changer-container .ax-pen-type-container{margin-inline-end:.5rem}.ax-overlay-pane{padding:.5rem!important}\n"] }]
233
+ args: [{ selector: 'ax-image-editor-pen-mode-changer', encapsulation: ViewEncapsulation.None, template: "<ax-button look=\"blank\" #alignPop>\n @switch (service.penType()) {\n @case ('pen') {\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n }\n @case ('highlight') {\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n }\n }\n</ax-button>\n\n<ax-button (click)=\"clear()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-refresh\"></ax-icon>\n</ax-button>\n\n<ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"alignPop\"\n [placement]=\"popoverOption.placement\"\n>\n <div class=\"ax-overlay-pane\">\n <ax-button\n (click)=\"penTypeHandler('pen')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'pen' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n </ax-button>\n\n <ax-button\n (click)=\"penTypeHandler('highlight')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'highlight' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n </ax-button>\n\n <div class=\"ax-paint-width-slider\">\n <ax-range-slider\n [min]=\"2\"\n [max]=\"20\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"valueHandler($event)\"\n ></ax-range-slider>\n </div>\n </div>\n</ax-popover>\n", styles: ["ax-image-editor-pen-mode-changer{margin-inline:0!important}ax-image-editor-pen-mode-changer ax-range-slider{padding:.5rem .75rem}ax-image-editor-pen-mode-changer ax-range-slider .ax-range-slider .ax-range-slider-handler{width:1rem!important;height:1rem!important}ax-image-editor-pen-mode-changer .ax-paint-pen-mode-changer-container{display:flex;align-items:center}ax-image-editor-pen-mode-changer .ax-paint-pen-mode-changer-container .ax-pen-type-container{margin-inline-end:.5rem}ax-image-editor-pen-mode-changer .ax-overlay-pane{padding:.5rem!important}\n"] }]
233
234
  }], propDecorators: { __hostClass: [{
234
235
  type: HostBinding,
235
236
  args: ['style.marginInline']
@@ -261,6 +262,7 @@ class AXImageEditorViewComponent {
261
262
  /** @ignore */
262
263
  this.cropEndY = signal(0);
263
264
  afterNextRender(() => {
265
+ this.service.initialImage.set(new Image());
264
266
  this.service.initialImage().src = this.src();
265
267
  this.service.initialImage().crossOrigin = 'anonymous';
266
268
  this.EventListener = this.service.initialImage().addEventListener('load', this.imageLoaded.bind(this));
@@ -291,7 +293,7 @@ class AXImageEditorViewComponent {
291
293
  }
292
294
  /** @ignore */
293
295
  ngOnDestroy() {
294
- removeEventListener('load', this.EventListener);
296
+ this.service.initialImage()?.removeEventListener('load', this.EventListener);
295
297
  }
296
298
  /** @ignore */
297
299
  imageLoaded() {
@@ -519,10 +521,21 @@ class AXImageEditorViewComponent {
519
521
  newImage.crossOrigin = 'anonymous';
520
522
  newImage.src = this.canvasElem().nativeElement.toDataURL('image/jpeg', 1);
521
523
  this.service.newImage.set(newImage);
524
+ const tempBlob = [];
525
+ this.canvasElem().nativeElement.toBlob((blob) => {
526
+ tempBlob.push(blob);
527
+ }, 'image/jpeg', 1);
528
+ this.canvasElem().nativeElement.toBlob((blob) => {
529
+ tempBlob.push(blob);
530
+ }, 'image/png', 1);
531
+ this.canvasElem().nativeElement.toBlob((blob) => {
532
+ tempBlob.push(blob);
533
+ }, 'image/webp', 1);
534
+ this.service.imageBlob.set(tempBlob);
522
535
  }
523
536
  /** @ignore */
524
537
  get __hostStyle() {
525
- return `width: ${this.service.initialImage().width}px; height: ${this.service.initialImage().height}px`;
538
+ return `width: ${this.service.initialImage()?.width}px; height: ${this.service.initialImage()?.height}px`;
526
539
  }
527
540
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXImageEditorViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
528
541
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.0", type: AXImageEditorViewComponent, selector: "ax-image-editor-view", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style": "this.__hostStyle" } }, viewQueries: [{ propertyName: "canvasElem", first: true, predicate: ["canvasElem"], descendants: true, isSignal: true }], ngImport: i0, template: "<canvas\n tabindex=\"1\"\n (mousedown)=\"mouseDownHandler($event)\"\n (mouseup)=\"mouseUpHandler()\"\n (mousemove)=\"mouseMoveHandler($event)\"\n (touchstart)=\"touchStartHandler($event)\"\n (touchend)=\"touchEndHandler()\"\n (touchmove)=\"touchMoveHandler($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n></canvas>\n<ax-button\n (click)=\"cropButtonHandler()\"\n [style]=\"{ display: service.cropState().state ? 'block' : 'none' }\"\n class=\"ax-crop-save ax-sm\"\n text=\"Crop\"\n></ax-button>\n", styles: ["ax-image-editor-view{position:relative;display:flex;justify-content:center;align-items:center;background-color:#fff;width:100%}ax-image-editor-view .ax-canvas-element{cursor:crosshair}ax-image-editor-view .ax-crop-save{position:absolute;top:0;right:0;margin:1rem}\n"], dependencies: [{ kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-image-editor.mjs","sources":["../../../../libs/components/image-editor/src/lib/image-editor.service.ts","../../../../libs/components/image-editor/src/lib/image-editor-container/image-editor-container.component.ts","../../../../libs/components/image-editor/src/lib/image-editor-container/image-editor-container.component.html","../../../../libs/components/image-editor/src/lib/image-editor-toolbar/image-editor-toolbar.component.ts","../../../../libs/components/image-editor/src/lib/image-editor-toolbar/image-editor-toolbar.component.html","../../../../libs/components/image-editor/src/lib/image-editor-tools/image-editor-color-picker/image-editor-color-picker.component.ts","../../../../libs/components/image-editor/src/lib/image-editor-tools/image-editor-color-picker/image-editor-color-picker.component.html","../../../../libs/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.ts","../../../../libs/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.html","../../../../libs/components/image-editor/src/lib/image-editor-tools/image-editor-pen-mode-changer/image-editor-pen-mode-changer.component.ts","../../../../libs/components/image-editor/src/lib/image-editor-tools/image-editor-pen-mode-changer/image-editor-pen-mode-changer.component.html","../../../../libs/components/image-editor/src/lib/image-editor-view/image-editor-view.component.ts","../../../../libs/components/image-editor/src/lib/image-editor-view/image-editor-view.component.html","../../../../libs/components/image-editor/src/lib/image-editor.module.ts","../../../../libs/components/image-editor/src/acorex-components-image-editor.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\n\n@Injectable()\nexport class AXImageEditorService {\n penColor = signal<string | CanvasGradient | CanvasPattern>('');\n lineCap = signal<CanvasLineCap>('round');\n lineWidth = signal<number>(10);\n penType = signal<'pen' | 'highlight'>('pen');\n toggleClear = signal({ state: false, userInteract: false });\n cropState = signal({ state: false, userInteract: false });\n rotate = signal({ state: 0, userInteract: false });\n isImageLoad = signal(false);\n newImage = signal(new Image());\n initialImage = signal(new Image());\n}\n","import { MXLookComponent } from '@acorex/components/common';\nimport { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../image-editor.service';\n\n/**\n * paint container.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-container',\n templateUrl: './image-editor-container.component.html',\n styleUrl: './image-editor-container.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [AXImageEditorService],\n})\nexport class AXImageEditorContainerComponent extends MXLookComponent {\n /** @ignore */\n protected service = inject(AXImageEditorService);\n}\n","@if (service.isImageLoad()) {\n <div class=\"ax-editor-container ax-look-solid\">\n <ng-content> </ng-content>\n </div>\n} @else {\n <ax-loading-spinner [size]=\"16\" color=\"primary\" text=\"Loading Image ...\"></ax-loading-spinner>\n}\n","import {\n AXClearableComponent,\n AXComponent,\n AXFocusableComponent,\n AXStyleColorType,\n AXValuableComponent,\n MXInputBaseValueComponent,\n} from '@acorex/components/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { Component, forwardRef, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AXImageEditorService } from '../image-editor.service';\n\n/**\n *paint toolbar\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-toolbar',\n templateUrl: './image-editor-toolbar.component.html',\n styleUrl: './image-editor-toolbar.component.scss',\n encapsulation: ViewEncapsulation.None,\n outputs: ['onValueChanged'],\n providers: [\n { provide: AXComponent, useExisting: AXImageEditorToolbarComponent },\n { provide: AXFocusableComponent, useExisting: AXImageEditorToolbarComponent },\n { provide: AXClearableComponent, useExisting: AXImageEditorToolbarComponent },\n { provide: AXValuableComponent, useExisting: AXImageEditorToolbarComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXImageEditorToolbarComponent),\n multi: true,\n },\n ],\n})\nexport class AXImageEditorToolbarComponent extends MXInputBaseValueComponent<string> {\n /** @ignore */\n protected dialogService: AXDialogService = inject(AXDialogService);\n /** @ignore */\n protected service = inject(AXImageEditorService);\n /** @ignore */\n protected options = signal({\n color: 'primary',\n title: 'Attention',\n vertical: false,\n content: 'Do you want to save changes?',\n orientation: 'vertical' as any,\n draggable: true,\n });\n\n /** @ignore */\n protected saveHandler() {\n if (this.service.initialImage() !== this.service.newImage()) {\n this.dialogService\n .confirm(\n this.options().title,\n this.options().content,\n this.options().color as AXStyleColorType,\n this.options().orientation,\n this.options().draggable,\n )\n .then((data) => {\n if (data.result) {\n this.service.initialImage.set(this.service.newImage());\n this.commitValue(this.service.newImage().src);\n }\n });\n }\n }\n}\n","<div class=\"ax-toolbar-container\">\n <ng-content select=\"ax-prefix\"></ng-content>\n <ng-content></ng-content>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n<ax-button color=\"primary\" (onClick)=\"saveHandler()\" class=\"ax-save-btn ax-sm\" text=\"Save\"></ax-button>\n","import { AXPlacement } from '@acorex/components/common';\nimport { AXPopoverCloseTrigger, AXPopoverOpenTrigger } from '@acorex/components/popover';\nimport { Component, HostBinding, ViewEncapsulation, inject, signal } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/**\n * paint color picker.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-color-picker',\n templateUrl: './image-editor-color-picker.component.html',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXImageEditorColorPickerComponent {\n /** @ignore */\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected selectedColor = signal('rgb(12, 12, 12)');\n\n /** @ignore */\n protected popoverOption: {\n openOn: AXPopoverOpenTrigger;\n closeOn: AXPopoverCloseTrigger;\n placement: AXPlacement;\n offsetX: number;\n offsetY: number;\n } = {\n openOn: 'click',\n closeOn: 'clickOut',\n placement: 'top',\n offsetX: 0,\n offsetY: 0,\n };\n\n /** @ignore */\n protected changeColorHandler(e: string) {\n this.service.penColor.set(e);\n this.selectedColor.set(e);\n }\n\n @HostBinding('style.marginInline')\n get __hostClass(): string {\n return `.5rem`;\n }\n}\n","<ax-button #colorBtn look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-color-palette\"></ax-icon>\n</ax-button>\n<ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"colorBtn\"\n [placement]=\"popoverOption.placement\"\n>\n <div class=\"ax-overlay-pane\">\n <ax-color-palette (ngModelChange)=\"changeColorHandler($event)\" [ngModel]=\"selectedColor()\">\n <ax-color-palette-preview></ax-color-palette-preview>\n <ax-color-palette-picker></ax-color-palette-picker>\n <ax-color-palette-input></ax-color-palette-input>\n </ax-color-palette>\n </div>\n</ax-popover>\n","import { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/**\n * paint mode.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-crop',\n templateUrl: './image-editor-crop.component.html',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXImageEditorCropComponent {\n /** @ignore */\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected rotateRightHandler() {\n this.service.rotate.set({ state: 90, userInteract: true });\n }\n\n /** @ignore */\n protected rotateLeftHandler() {\n this.service.rotate.set({ state: -90, userInteract: true });\n }\n\n /** @ignore */\n protected crop() {\n this.service.cropState.update((prev) => {\n return { userInteract: true, state: !prev.state };\n });\n }\n}\n","<ax-button [selected]=\"service.cropState().state && true\" (click)=\"crop()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n\n<ax-button (click)=\"rotateLeftHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-undo\"></ax-icon>\n</ax-button>\n\n<ax-button (click)=\"rotateRightHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-redo\"></ax-icon>\n</ax-button>\n","import { AXPlacement } from '@acorex/components/common';\nimport { AXPopoverCloseTrigger, AXPopoverOpenTrigger } from '@acorex/components/popover';\nimport { Component, HostBinding, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/**\n * paint mode.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-pen-mode-changer',\n templateUrl: './image-editor-pen-mode-changer.component.html',\n styleUrl: './image-editor-pen-mode-changer.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXImageEditorPenModeChangerComponent {\n /** @ignore */\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected value = 10;\n\n /** @ignore */\n protected popoverOption: {\n openOn: AXPopoverOpenTrigger;\n closeOn: AXPopoverCloseTrigger;\n placement: AXPlacement;\n offsetX: number;\n offsetY: number;\n } = {\n openOn: 'click',\n closeOn: 'clickOut',\n placement: 'top',\n offsetX: 0,\n offsetY: 0,\n };\n\n /** @ignore */\n protected selectedPenType = signal<'pen' | 'highlight'>('pen');\n\n /** @ignore */\n protected penTypeHandler(e: 'pen' | 'highlight') {\n this.service.penType.set(e);\n }\n\n /** @ignore */\n protected clear() {\n this.service.toggleClear.set({ userInteract: true, state: true });\n }\n\n /** @ignore */\n @HostBinding('style.marginInline')\n get __hostClass(): string {\n return `.5rem`;\n }\n\n /** @ignore */\n protected valueHandler(e: number) {\n this.service.lineWidth.set(e);\n }\n}\n","<div class=\"ax-paint-pen-mode-changer-container\">\n <div class=\"ax-pen-type-container\">\n <ax-button look=\"blank\" #alignPop>\n <ax-icon class=\"ax-icon ax-icon-pen-ruler\"></ax-icon>\n </ax-button>\n </div>\n\n <ax-button (click)=\"clear()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-refresh\"></ax-icon>\n </ax-button>\n\n <ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"alignPop\"\n [placement]=\"popoverOption.placement\"\n >\n <div class=\"ax-overlay-pane\">\n <ax-button\n (click)=\"penTypeHandler('pen')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'pen' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n </ax-button>\n\n <ax-button\n (click)=\"penTypeHandler('highlight')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'highlight' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n </ax-button>\n\n <div class=\"ax-paint-width-slider\">\n <ax-range-slider\n [min]=\"2\"\n [max]=\"20\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"valueHandler($event)\"\n ></ax-range-slider>\n </div>\n </div>\n </ax-popover>\n</div>\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n HostBinding,\n inject,\n input,\n OnDestroy,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXImageEditorService } from '../image-editor.service';\n\n@Component({\n selector: 'ax-image-editor-view',\n templateUrl: './image-editor-view.component.html',\n styleUrls: ['./image-editor-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXImageEditorViewComponent implements OnDestroy {\n /**\n * its receive image src.\n */\n src = input<string>('');\n /** @ignore */\n protected canvasElem = viewChild<ElementRef<HTMLCanvasElement>>('canvasElem');\n /** @ignore */\n protected ctx = signal<CanvasRenderingContext2D>(null);\n /** @ignore */\n protected service = inject(AXImageEditorService);\n /** @ignore */\n protected cropImageData = signal<ImageData>(null);\n\n /** @ignore */\n protected isMouseDown = signal(false);\n /** @ignore */\n protected cropStartX = signal(0);\n /** @ignore */\n protected cropStartY = signal(0);\n /** @ignore */\n protected cropEndX = signal(0);\n /** @ignore */\n protected cropEndY = signal(0);\n /** @ignore */\n protected EventListener;\n\n /** @ignore */\n constructor() {\n afterNextRender(() => {\n this.service.initialImage().src = this.src();\n this.service.initialImage().crossOrigin = 'anonymous';\n this.EventListener = this.service.initialImage().addEventListener('load', this.imageLoaded.bind(this));\n });\n\n effect(\n () => {\n if (!this.service.toggleClear().userInteract) return;\n if (this.service.toggleClear().state) {\n this.imageLoaded();\n }\n },\n { allowSignalWrites: true },\n );\n\n effect(\n () => {\n if (!this.service.cropState().userInteract || !this.ctx()) return;\n if (this.service.cropState().state) {\n this.ctx().filter = 'brightness(40%)';\n } else {\n this.ctx().filter = 'brightness(100%)';\n }\n this.ctx().drawImage(\n this.service.newImage(),\n 0,\n 0,\n this.service.newImage().width,\n this.service.newImage().height,\n );\n },\n { allowSignalWrites: true },\n );\n\n effect(\n () => {\n if (!this.service.rotate().userInteract || !this.ctx()) return;\n this.rotateImage();\n },\n { allowSignalWrites: true },\n );\n }\n\n /** @ignore */\n ngOnDestroy(): void {\n removeEventListener('load', this.EventListener);\n }\n\n /** @ignore */\n protected imageLoaded() {\n this.service.newImage.set(this.service.initialImage());\n this.canvasElem().nativeElement.width = this.service.initialImage().width;\n this.canvasElem().nativeElement.height = this.service.initialImage().height;\n this.ctx.set(this.canvasElem().nativeElement.getContext('2d', { willReadFrequently: true }));\n this.ctx().drawImage(\n this.service.initialImage(),\n 0,\n 0,\n this.service.initialImage().width,\n this.service.initialImage().height,\n );\n this.service.toggleClear.set({ userInteract: false, state: false });\n\n this.service.isImageLoad.set(true);\n this.ctx().lineJoin = 'round';\n this.ctx().lineCap = this.service.lineCap();\n this.ctx().strokeStyle = this.service.penColor();\n this.ctx().lineWidth = this.service.lineWidth();\n this.ctx().globalCompositeOperation = 'source-over';\n this.ctx().globalAlpha = 1;\n }\n\n /** @ignore */\n protected penConfigHandler(penType: 'pen' | 'highlight') {\n switch (penType) {\n case 'pen':\n this.ctx().globalAlpha = 1;\n break;\n case 'highlight':\n this.ctx().globalAlpha = 0.008;\n break;\n }\n }\n\n /** @ignore */\n protected getBoundingCanvasHandler() {\n return this.canvasElem().nativeElement.getBoundingClientRect();\n }\n\n /** @ignore */\n protected mouseDownHandler(e: MouseEvent) {\n this.isMouseDown.set(true);\n\n if (this.service.cropState().state) {\n this.cropStartX.set(e.offsetX);\n this.cropStartY.set(e.offsetY);\n this.cropEndX.set(0);\n } else {\n this.penConfigHandler(this.service.penType());\n this.ctx().strokeStyle = this.service.penColor();\n this.ctx().lineCap = this.service.lineCap();\n this.ctx().lineWidth = this.service.lineWidth();\n\n this.ctx().beginPath();\n this.ctx().moveTo(e.offsetX, e.offsetY);\n this.ctx().lineTo(e.offsetX, e.offsetY);\n this.ctx().stroke();\n }\n }\n\n /** @ignore */\n protected mouseMoveHandler(e: MouseEvent) {\n if (!this.isMouseDown()) return;\n if (this.service.cropState().state) {\n this.ctx().globalCompositeOperation = 'screen';\n this.cropEndX.set(e.offsetX);\n this.cropEndY.set(e.offsetY);\n this.drawSelection();\n } else {\n this.ctx().lineTo(e.offsetX, e.offsetY);\n this.ctx().stroke();\n }\n }\n\n /** @ignore */\n protected mouseUpHandler() {\n this.isMouseDown.set(false);\n if (this.service.cropState().state && this.cropEndX()) {\n this.ctx().globalCompositeOperation = 'source-over';\n this.cropImageFunction();\n } else {\n this.ctx().closePath();\n this.saveImageChange();\n }\n }\n\n /** @ignore */\n protected touchStartHandler(e: TouchEvent) {\n const offsetX = e.touches[0].clientX - this.getBoundingCanvasHandler().left;\n const offsetY = e.touches[0].clientY - this.getBoundingCanvasHandler().top;\n\n this.isMouseDown.set(true);\n\n if (this.service.cropState().state) {\n this.cropStartX.set(offsetX);\n this.cropStartY.set(offsetY);\n this.cropEndX.set(0);\n } else {\n this.penConfigHandler(this.service.penType());\n this.ctx().strokeStyle = this.service.penColor();\n this.ctx().lineCap = this.service.lineCap();\n this.ctx().lineWidth = this.service.lineWidth();\n\n this.ctx().beginPath();\n this.ctx().moveTo(offsetX, offsetY);\n this.ctx().lineTo(offsetX, offsetY);\n this.ctx().stroke();\n }\n }\n\n /** @ignore */\n protected touchMoveHandler(e: TouchEvent) {\n e.preventDefault(); // prevent page from scroll\n if (!this.isMouseDown()) return;\n const offsetX = e.touches[0].clientX - this.getBoundingCanvasHandler().left;\n const offsetY = e.touches[0].clientY - this.getBoundingCanvasHandler().top;\n\n if (this.service.cropState().state) {\n this.ctx().globalCompositeOperation = 'screen';\n this.cropEndX.set(offsetX);\n this.cropEndY.set(offsetY);\n this.drawSelection();\n } else {\n this.ctx().lineTo(offsetX, offsetY);\n this.ctx().stroke();\n }\n }\n\n /** @ignore */\n protected touchEndHandler() {\n this.isMouseDown.set(false);\n if (this.service.cropState().state && this.cropEndX()) {\n this.ctx().globalCompositeOperation = 'source-over';\n this.cropImageFunction();\n } else {\n this.ctx().closePath();\n this.saveImageChange();\n }\n }\n\n /** @ignore */\n protected drawSelection() {\n const cropWidth = this.cropEndX() - this.cropStartX();\n const cropHeight = this.cropEndY() - this.cropStartY();\n\n this.ctx().clearRect(0, 0, this.canvasElem().nativeElement.width, this.canvasElem().nativeElement.height);\n this.ctx().drawImage(this.service.newImage(), 0, 0);\n this.ctx().strokeStyle = 'white';\n this.ctx().setLineDash([4, 10]);\n this.ctx().lineWidth = 2;\n this.ctx().strokeRect(this.cropStartX(), this.cropStartY(), cropWidth, cropHeight);\n }\n\n /** @ignore */\n protected cropImageFunction() {\n this.ctx().clearRect(0, 0, this.canvasElem().nativeElement.width, this.canvasElem().nativeElement.height);\n this.ctx().drawImage(this.service.newImage(), 0, 0);\n\n let imageData: ImageData;\n if (this.cropStartX() < this.cropEndX() && this.cropStartY() > this.cropEndY()) {\n imageData = this.ctx().getImageData(\n this.cropStartX(),\n this.cropEndY(),\n this.cropEndX() - this.cropStartX(),\n this.cropStartY() - this.cropEndY(),\n );\n } else if (this.cropStartX() > this.cropEndX() && this.cropStartY() > this.cropEndY()) {\n imageData = this.ctx().getImageData(\n this.cropEndX(),\n this.cropEndY(),\n this.cropStartX() - this.cropEndX(),\n this.cropStartY() - this.cropEndY(),\n );\n } else if (this.cropStartX() < this.cropEndX() && this.cropStartY() < this.cropEndY()) {\n imageData = this.ctx().getImageData(\n this.cropStartX(),\n this.cropStartY(),\n this.cropEndX() - this.cropStartX(),\n this.cropEndY() - this.cropStartY(),\n );\n } else if (this.cropStartX() > this.cropEndX() && this.cropStartY() < this.cropEndY()) {\n imageData = this.ctx().getImageData(\n this.cropEndX(),\n this.cropStartY(),\n this.cropStartX() - this.cropEndX(),\n this.cropEndY() - this.cropStartY(),\n );\n }\n\n const data: Uint8ClampedArray = imageData.data;\n\n const brightnessFactor = 2.4; // Increase brightness by 20%\n for (let i = 0; i < data.length; i += 4) {\n data[i] = data[i] * brightnessFactor; // Red\n data[i + 1] = data[i + 1] * brightnessFactor; // Green\n data[i + 2] = data[i + 2] * brightnessFactor; // Blue\n }\n\n if (this.cropStartX() < this.cropEndX() && this.cropStartY() > this.cropEndY()) {\n this.ctx().putImageData(imageData, this.cropStartX(), this.cropEndY());\n } else if (this.cropStartX() > this.cropEndX() && this.cropStartY() > this.cropEndY()) {\n this.ctx().putImageData(imageData, this.cropEndX(), this.cropEndY());\n } else if (this.cropStartX() < this.cropEndX() && this.cropStartY() < this.cropEndY()) {\n this.ctx().putImageData(imageData, this.cropStartX(), this.cropStartY());\n } else if (this.cropStartX() > this.cropEndX() && this.cropStartY() < this.cropEndY()) {\n this.ctx().putImageData(imageData, this.cropEndX(), this.cropStartY());\n }\n\n this.cropImageData.set(imageData);\n }\n\n /** @ignore */\n protected cropButtonHandler() {\n let cropWidth: number;\n let cropHeight: number;\n\n this.service.rotate.update((prev) => {\n return { userInteract: false, state: prev.state };\n });\n\n if (this.cropStartX() < this.cropEndX() && this.cropStartY() > this.cropEndY()) {\n cropWidth = this.cropEndX() - this.cropStartX();\n cropHeight = this.cropStartY() - this.cropEndY();\n } else if (this.cropStartX() > this.cropEndX() && this.cropStartY() > this.cropEndY()) {\n cropWidth = this.cropStartX() - this.cropEndX();\n cropHeight = this.cropStartY() - this.cropEndY();\n } else if (this.cropStartX() < this.cropEndX() && this.cropStartY() < this.cropEndY()) {\n cropWidth = this.cropEndX() - this.cropStartX();\n cropHeight = this.cropEndY() - this.cropStartY();\n } else if (this.cropStartX() > this.cropEndX() && this.cropStartY() < this.cropEndY()) {\n cropWidth = this.cropStartX() - this.cropEndX();\n cropHeight = this.cropEndY() - this.cropStartY();\n }\n\n this.canvasElem().nativeElement.width = cropWidth;\n this.canvasElem().nativeElement.height = cropHeight;\n\n this.ctx().putImageData(this.cropImageData(), 0, 0);\n this.saveImageChange();\n this.cropImageData.set(null);\n this.service.cropState.set({ userInteract: false, state: false });\n }\n\n /** @ignore */\n protected rotateImage() {\n this.ctx().save();\n this.ctx().clearRect(0, 0, this.canvasElem().nativeElement.width, this.canvasElem().nativeElement.height);\n this.ctx().translate(this.service.newImage().width / 2, this.service.newImage().height / 2);\n this.ctx().rotate((this.service.rotate().state * Math.PI) / 180);\n this.ctx().drawImage(\n this.service.newImage(),\n -this.service.newImage().width / 2,\n -this.service.newImage().height / 2,\n this.service.newImage().width,\n this.service.newImage().height,\n );\n this.ctx().restore();\n\n this.saveImageChange();\n this.service.rotate.update((prev) => {\n return { state: prev.state, userInteract: false };\n });\n }\n\n /** @ignore */\n protected saveImageChange() {\n const newImage = new Image();\n newImage.crossOrigin = 'anonymous';\n newImage.src = this.canvasElem().nativeElement.toDataURL('image/jpeg', 1);\n this.service.newImage.set(newImage);\n }\n\n /** @ignore */\n @HostBinding('style')\n private get __hostStyle(): string {\n return `width: ${this.service.initialImage().width}px; height: ${this.service.initialImage().height}px`;\n }\n}\n","<canvas\n tabindex=\"1\"\n (mousedown)=\"mouseDownHandler($event)\"\n (mouseup)=\"mouseUpHandler()\"\n (mousemove)=\"mouseMoveHandler($event)\"\n (touchstart)=\"touchStartHandler($event)\"\n (touchend)=\"touchEndHandler()\"\n (touchmove)=\"touchMoveHandler($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n></canvas>\n<ax-button\n (click)=\"cropButtonHandler()\"\n [style]=\"{ display: service.cropState().state ? 'block' : 'none' }\"\n class=\"ax-crop-save ax-sm\"\n text=\"Crop\"\n></ax-button>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXColorPaletteModule } from '@acorex/components/color-palette';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogModule } from '@acorex/components/dialog';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXRangeSliderModule } from '@acorex/components/range-slider';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXImageEditorContainerComponent } from './image-editor-container/image-editor-container.component';\nimport { AXImageEditorToolbarComponent } from './image-editor-toolbar/image-editor-toolbar.component';\nimport { AXImageEditorColorPickerComponent } from './image-editor-tools/image-editor-color-picker/image-editor-color-picker.component';\nimport { AXImageEditorCropComponent } from './image-editor-tools/image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorPenModeChangerComponent } from './image-editor-tools/image-editor-pen-mode-changer/image-editor-pen-mode-changer.component';\nimport { AXImageEditorViewComponent } from './image-editor-view/image-editor-view.component';\n\nconst COMPONENT = [\n AXImageEditorToolbarComponent,\n AXImageEditorColorPickerComponent,\n AXImageEditorPenModeChangerComponent,\n AXImageEditorViewComponent,\n AXImageEditorContainerComponent,\n AXImageEditorCropComponent,\n];\n\nconst MODULES = [\n AXButtonModule,\n FormsModule,\n AXRangeSliderModule,\n AXSelectBoxModule,\n AXColorPaletteModule,\n AXPopoverModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXDialogModule,\n];\n\n@NgModule({\n declarations: [...COMPONENT],\n imports: [...MODULES],\n exports: [...COMPONENT],\n providers: [],\n})\nexport class AXImageEditorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-components-image-editor.mjs","sources":["../../../../libs/components/image-editor/src/lib/image-editor.service.ts","../../../../libs/components/image-editor/src/lib/image-editor-container/image-editor-container.component.ts","../../../../libs/components/image-editor/src/lib/image-editor-container/image-editor-container.component.html","../../../../libs/components/image-editor/src/lib/image-editor-toolbar/image-editor-toolbar.component.ts","../../../../libs/components/image-editor/src/lib/image-editor-toolbar/image-editor-toolbar.component.html","../../../../libs/components/image-editor/src/lib/image-editor-tools/image-editor-color-picker/image-editor-color-picker.component.ts","../../../../libs/components/image-editor/src/lib/image-editor-tools/image-editor-color-picker/image-editor-color-picker.component.html","../../../../libs/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.ts","../../../../libs/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.html","../../../../libs/components/image-editor/src/lib/image-editor-tools/image-editor-pen-mode-changer/image-editor-pen-mode-changer.component.ts","../../../../libs/components/image-editor/src/lib/image-editor-tools/image-editor-pen-mode-changer/image-editor-pen-mode-changer.component.html","../../../../libs/components/image-editor/src/lib/image-editor-view/image-editor-view.component.ts","../../../../libs/components/image-editor/src/lib/image-editor-view/image-editor-view.component.html","../../../../libs/components/image-editor/src/lib/image-editor.module.ts","../../../../libs/components/image-editor/src/acorex-components-image-editor.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\n\n@Injectable()\nexport class AXImageEditorService {\n penColor = signal<string | CanvasGradient | CanvasPattern>('');\n lineCap = signal<CanvasLineCap>('round');\n lineWidth = signal<number>(10);\n penType = signal<'pen' | 'highlight'>('pen');\n toggleClear = signal({ state: false, userInteract: false });\n cropState = signal({ state: false, userInteract: false });\n rotate = signal({ state: 0, userInteract: false });\n isImageLoad = signal(false);\n newImage = signal(null);\n initialImage = signal(null);\n imageBlob = signal<Blob[]>([]);\n}\n","import { MXLookComponent } from '@acorex/components/common';\nimport { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../image-editor.service';\n\n/**\n * paint container.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-container',\n templateUrl: './image-editor-container.component.html',\n styleUrl: './image-editor-container.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [AXImageEditorService],\n})\nexport class AXImageEditorContainerComponent extends MXLookComponent {\n /** @ignore */\n protected service = inject(AXImageEditorService);\n}\n","@if (service.isImageLoad()) {\n <div class=\"ax-editor-container ax-look-solid\">\n <ng-content> </ng-content>\n </div>\n} @else {\n <ax-loading-spinner [size]=\"16\" color=\"primary\" text=\"Loading Image ...\"></ax-loading-spinner>\n}\n","import {\n AXClearableComponent,\n AXComponent,\n AXFocusableComponent,\n AXStyleColorType,\n AXValuableComponent,\n MXInputBaseValueComponent,\n} from '@acorex/components/common';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { Component, forwardRef, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AXImageEditorService } from '../image-editor.service';\n\n/**\n *paint toolbar\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-toolbar',\n templateUrl: './image-editor-toolbar.component.html',\n styleUrl: './image-editor-toolbar.component.scss',\n encapsulation: ViewEncapsulation.None,\n outputs: ['onValueChanged'],\n providers: [\n { provide: AXComponent, useExisting: AXImageEditorToolbarComponent },\n { provide: AXFocusableComponent, useExisting: AXImageEditorToolbarComponent },\n { provide: AXClearableComponent, useExisting: AXImageEditorToolbarComponent },\n { provide: AXValuableComponent, useExisting: AXImageEditorToolbarComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXImageEditorToolbarComponent),\n multi: true,\n },\n ],\n})\nexport class AXImageEditorToolbarComponent extends MXInputBaseValueComponent<Blob[]> {\n /** @ignore */\n protected dialogService: AXDialogService = inject(AXDialogService);\n /** @ignore */\n protected service = inject(AXImageEditorService);\n /** @ignore */\n protected options = signal({\n color: 'primary',\n title: 'Attention',\n vertical: false,\n content: 'Do you want to save changes?',\n orientation: 'vertical' as any,\n draggable: true,\n });\n\n /** @ignore */\n protected saveHandler() {\n if (this.service.initialImage() !== this.service.newImage()) {\n this.dialogService\n .confirm(\n this.options().title,\n this.options().content,\n this.options().color as AXStyleColorType,\n this.options().orientation,\n this.options().draggable,\n )\n .then((data) => {\n if (data.result) {\n this.service.initialImage.set(this.service.newImage());\n this.commitValue(this.service.imageBlob());\n }\n });\n }\n }\n}\n","<div class=\"ax-toolbar-container\">\n <ng-content select=\"ax-prefix\"></ng-content>\n <ng-content></ng-content>\n <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n<ax-button color=\"primary\" (onClick)=\"saveHandler()\" class=\"ax-save-btn ax-sm\" text=\"Save\"></ax-button>\n","import { AXPlacement } from '@acorex/components/common';\nimport { AXPopoverCloseTrigger, AXPopoverOpenTrigger } from '@acorex/components/popover';\nimport { Component, HostBinding, ViewEncapsulation, inject, signal } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/**\n * paint color picker.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-color-picker',\n templateUrl: './image-editor-color-picker.component.html',\n styles: `\n ax-image-editor-color-picker {\n margin-inline: 0 !important;\n\n .ax-submit-color {\n border: 1px solid rgb(var(--ax-color-text-default));\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 1000vmax;\n }\n .ax-color-flex-container {\n display: flex;\n align-items: center;\n cursor: pointer;\n }\n }\n `,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXImageEditorColorPickerComponent {\n /** @ignore */\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected selectedColor = signal('rgb(12, 12, 12)');\n\n /** @ignore */\n protected popoverOption: {\n openOn: AXPopoverOpenTrigger;\n closeOn: AXPopoverCloseTrigger;\n placement: AXPlacement;\n offsetX: number;\n offsetY: number;\n } = {\n openOn: 'click',\n closeOn: 'clickOut',\n placement: 'top',\n offsetX: 0,\n offsetY: 0,\n };\n\n /** @ignore */\n protected changeColorHandler(e: string) {\n this.service.penColor.set(e);\n this.selectedColor.set(e);\n }\n\n @HostBinding('style.marginInline')\n get __hostClass(): string {\n return `.5rem`;\n }\n}\n","<div class=\"ax-color-flex-container\">\n <div [style]=\"{ backgroundColor: selectedColor() }\" class=\"ax-submit-color\"></div>\n <ax-button #colorBtn look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-color-palette\"></ax-icon>\n </ax-button>\n</div>\n<ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"colorBtn\"\n [placement]=\"popoverOption.placement\"\n>\n <div class=\"ax-overlay-pane\">\n <ax-color-palette (ngModelChange)=\"changeColorHandler($event)\" [ngModel]=\"selectedColor()\">\n <ax-color-palette-preview></ax-color-palette-preview>\n <ax-color-palette-picker></ax-color-palette-picker>\n <ax-color-palette-input></ax-color-palette-input>\n </ax-color-palette>\n </div>\n</ax-popover>\n","import { Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/**\n * paint mode.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-crop',\n templateUrl: './image-editor-crop.component.html',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXImageEditorCropComponent {\n /** @ignore */\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected rotateRightHandler() {\n this.service.rotate.set({ state: 90, userInteract: true });\n }\n\n /** @ignore */\n protected rotateLeftHandler() {\n this.service.rotate.set({ state: -90, userInteract: true });\n }\n\n /** @ignore */\n protected crop() {\n this.service.cropState.update((prev) => {\n return { userInteract: true, state: !prev.state };\n });\n }\n}\n","<ax-button [selected]=\"service.cropState().state && true\" (click)=\"crop()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n\n<ax-button (click)=\"rotateLeftHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-undo\"></ax-icon>\n</ax-button>\n\n<ax-button (click)=\"rotateRightHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-redo\"></ax-icon>\n</ax-button>\n","import { AXPlacement } from '@acorex/components/common';\nimport { AXPopoverCloseTrigger, AXPopoverOpenTrigger } from '@acorex/components/popover';\nimport { Component, HostBinding, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/**\n * paint mode.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-pen-mode-changer',\n templateUrl: './image-editor-pen-mode-changer.component.html',\n styleUrl: './image-editor-pen-mode-changer.component.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXImageEditorPenModeChangerComponent {\n /** @ignore */\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected value = 10;\n\n /** @ignore */\n protected popoverOption: {\n openOn: AXPopoverOpenTrigger;\n closeOn: AXPopoverCloseTrigger;\n placement: AXPlacement;\n offsetX: number;\n offsetY: number;\n } = {\n openOn: 'click',\n closeOn: 'clickOut',\n placement: 'top',\n offsetX: 0,\n offsetY: 0,\n };\n\n /** @ignore */\n protected selectedPenType = signal<'pen' | 'highlight'>('pen');\n\n /** @ignore */\n protected penTypeHandler(e: 'pen' | 'highlight') {\n this.service.penType.set(e);\n }\n\n /** @ignore */\n protected clear() {\n this.service.toggleClear.set({ userInteract: true, state: true });\n }\n\n /** @ignore */\n @HostBinding('style.marginInline')\n get __hostClass(): string {\n return `.5rem`;\n }\n\n /** @ignore */\n protected valueHandler(e: number) {\n this.service.lineWidth.set(e);\n }\n}\n","<ax-button look=\"blank\" #alignPop>\n @switch (service.penType()) {\n @case ('pen') {\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n }\n @case ('highlight') {\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n }\n }\n</ax-button>\n\n<ax-button (click)=\"clear()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-refresh\"></ax-icon>\n</ax-button>\n\n<ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"alignPop\"\n [placement]=\"popoverOption.placement\"\n>\n <div class=\"ax-overlay-pane\">\n <ax-button\n (click)=\"penTypeHandler('pen')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'pen' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n </ax-button>\n\n <ax-button\n (click)=\"penTypeHandler('highlight')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'highlight' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n </ax-button>\n\n <div class=\"ax-paint-width-slider\">\n <ax-range-slider\n [min]=\"2\"\n [max]=\"20\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"valueHandler($event)\"\n ></ax-range-slider>\n </div>\n </div>\n</ax-popover>\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n HostBinding,\n inject,\n input,\n OnDestroy,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXImageEditorService } from '../image-editor.service';\n\n@Component({\n selector: 'ax-image-editor-view',\n templateUrl: './image-editor-view.component.html',\n styleUrls: ['./image-editor-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXImageEditorViewComponent implements OnDestroy {\n /**\n * its receive image src.\n */\n src = input<string>('');\n /** @ignore */\n protected canvasElem = viewChild<ElementRef<HTMLCanvasElement>>('canvasElem');\n /** @ignore */\n protected ctx = signal<CanvasRenderingContext2D>(null);\n /** @ignore */\n protected service = inject(AXImageEditorService);\n /** @ignore */\n protected cropImageData = signal<ImageData>(null);\n\n /** @ignore */\n protected isMouseDown = signal(false);\n /** @ignore */\n protected cropStartX = signal(0);\n /** @ignore */\n protected cropStartY = signal(0);\n /** @ignore */\n protected cropEndX = signal(0);\n /** @ignore */\n protected cropEndY = signal(0);\n /** @ignore */\n protected EventListener;\n\n /** @ignore */\n constructor() {\n afterNextRender(() => {\n this.service.initialImage.set(new Image());\n this.service.initialImage().src = this.src();\n this.service.initialImage().crossOrigin = 'anonymous';\n this.EventListener = this.service.initialImage().addEventListener('load', this.imageLoaded.bind(this));\n });\n\n effect(\n () => {\n if (!this.service.toggleClear().userInteract) return;\n if (this.service.toggleClear().state) {\n this.imageLoaded();\n }\n },\n { allowSignalWrites: true },\n );\n\n effect(\n () => {\n if (!this.service.cropState().userInteract || !this.ctx()) return;\n if (this.service.cropState().state) {\n this.ctx().filter = 'brightness(40%)';\n } else {\n this.ctx().filter = 'brightness(100%)';\n }\n this.ctx().drawImage(\n this.service.newImage(),\n 0,\n 0,\n this.service.newImage().width,\n this.service.newImage().height,\n );\n },\n { allowSignalWrites: true },\n );\n\n effect(\n () => {\n if (!this.service.rotate().userInteract || !this.ctx()) return;\n this.rotateImage();\n },\n { allowSignalWrites: true },\n );\n }\n\n /** @ignore */\n ngOnDestroy(): void {\n this.service.initialImage()?.removeEventListener('load', this.EventListener);\n }\n\n /** @ignore */\n protected imageLoaded() {\n this.service.newImage.set(this.service.initialImage());\n this.canvasElem().nativeElement.width = this.service.initialImage().width;\n this.canvasElem().nativeElement.height = this.service.initialImage().height;\n this.ctx.set(this.canvasElem().nativeElement.getContext('2d', { willReadFrequently: true }));\n this.ctx().drawImage(\n this.service.initialImage(),\n 0,\n 0,\n this.service.initialImage().width,\n this.service.initialImage().height,\n );\n this.service.toggleClear.set({ userInteract: false, state: false });\n\n this.service.isImageLoad.set(true);\n this.ctx().lineJoin = 'round';\n this.ctx().lineCap = this.service.lineCap();\n this.ctx().strokeStyle = this.service.penColor();\n this.ctx().lineWidth = this.service.lineWidth();\n this.ctx().globalCompositeOperation = 'source-over';\n this.ctx().globalAlpha = 1;\n }\n\n /** @ignore */\n protected penConfigHandler(penType: 'pen' | 'highlight') {\n switch (penType) {\n case 'pen':\n this.ctx().globalAlpha = 1;\n break;\n case 'highlight':\n this.ctx().globalAlpha = 0.008;\n break;\n }\n }\n\n /** @ignore */\n protected getBoundingCanvasHandler() {\n return this.canvasElem().nativeElement.getBoundingClientRect();\n }\n\n /** @ignore */\n protected mouseDownHandler(e: MouseEvent) {\n this.isMouseDown.set(true);\n\n if (this.service.cropState().state) {\n this.cropStartX.set(e.offsetX);\n this.cropStartY.set(e.offsetY);\n this.cropEndX.set(0);\n } else {\n this.penConfigHandler(this.service.penType());\n this.ctx().strokeStyle = this.service.penColor();\n this.ctx().lineCap = this.service.lineCap();\n this.ctx().lineWidth = this.service.lineWidth();\n\n this.ctx().beginPath();\n this.ctx().moveTo(e.offsetX, e.offsetY);\n this.ctx().lineTo(e.offsetX, e.offsetY);\n this.ctx().stroke();\n }\n }\n\n /** @ignore */\n protected mouseMoveHandler(e: MouseEvent) {\n if (!this.isMouseDown()) return;\n if (this.service.cropState().state) {\n this.ctx().globalCompositeOperation = 'screen';\n this.cropEndX.set(e.offsetX);\n this.cropEndY.set(e.offsetY);\n this.drawSelection();\n } else {\n this.ctx().lineTo(e.offsetX, e.offsetY);\n this.ctx().stroke();\n }\n }\n\n /** @ignore */\n protected mouseUpHandler() {\n this.isMouseDown.set(false);\n if (this.service.cropState().state && this.cropEndX()) {\n this.ctx().globalCompositeOperation = 'source-over';\n this.cropImageFunction();\n } else {\n this.ctx().closePath();\n this.saveImageChange();\n }\n }\n\n /** @ignore */\n protected touchStartHandler(e: TouchEvent) {\n const offsetX = e.touches[0].clientX - this.getBoundingCanvasHandler().left;\n const offsetY = e.touches[0].clientY - this.getBoundingCanvasHandler().top;\n\n this.isMouseDown.set(true);\n\n if (this.service.cropState().state) {\n this.cropStartX.set(offsetX);\n this.cropStartY.set(offsetY);\n this.cropEndX.set(0);\n } else {\n this.penConfigHandler(this.service.penType());\n this.ctx().strokeStyle = this.service.penColor();\n this.ctx().lineCap = this.service.lineCap();\n this.ctx().lineWidth = this.service.lineWidth();\n\n this.ctx().beginPath();\n this.ctx().moveTo(offsetX, offsetY);\n this.ctx().lineTo(offsetX, offsetY);\n this.ctx().stroke();\n }\n }\n\n /** @ignore */\n protected touchMoveHandler(e: TouchEvent) {\n e.preventDefault(); // prevent page from scroll\n if (!this.isMouseDown()) return;\n const offsetX = e.touches[0].clientX - this.getBoundingCanvasHandler().left;\n const offsetY = e.touches[0].clientY - this.getBoundingCanvasHandler().top;\n\n if (this.service.cropState().state) {\n this.ctx().globalCompositeOperation = 'screen';\n this.cropEndX.set(offsetX);\n this.cropEndY.set(offsetY);\n this.drawSelection();\n } else {\n this.ctx().lineTo(offsetX, offsetY);\n this.ctx().stroke();\n }\n }\n\n /** @ignore */\n protected touchEndHandler() {\n this.isMouseDown.set(false);\n if (this.service.cropState().state && this.cropEndX()) {\n this.ctx().globalCompositeOperation = 'source-over';\n this.cropImageFunction();\n } else {\n this.ctx().closePath();\n this.saveImageChange();\n }\n }\n\n /** @ignore */\n protected drawSelection() {\n const cropWidth = this.cropEndX() - this.cropStartX();\n const cropHeight = this.cropEndY() - this.cropStartY();\n\n this.ctx().clearRect(0, 0, this.canvasElem().nativeElement.width, this.canvasElem().nativeElement.height);\n this.ctx().drawImage(this.service.newImage(), 0, 0);\n this.ctx().strokeStyle = 'white';\n this.ctx().setLineDash([4, 10]);\n this.ctx().lineWidth = 2;\n this.ctx().strokeRect(this.cropStartX(), this.cropStartY(), cropWidth, cropHeight);\n }\n\n /** @ignore */\n protected cropImageFunction() {\n this.ctx().clearRect(0, 0, this.canvasElem().nativeElement.width, this.canvasElem().nativeElement.height);\n this.ctx().drawImage(this.service.newImage(), 0, 0);\n\n let imageData: ImageData;\n if (this.cropStartX() < this.cropEndX() && this.cropStartY() > this.cropEndY()) {\n imageData = this.ctx().getImageData(\n this.cropStartX(),\n this.cropEndY(),\n this.cropEndX() - this.cropStartX(),\n this.cropStartY() - this.cropEndY(),\n );\n } else if (this.cropStartX() > this.cropEndX() && this.cropStartY() > this.cropEndY()) {\n imageData = this.ctx().getImageData(\n this.cropEndX(),\n this.cropEndY(),\n this.cropStartX() - this.cropEndX(),\n this.cropStartY() - this.cropEndY(),\n );\n } else if (this.cropStartX() < this.cropEndX() && this.cropStartY() < this.cropEndY()) {\n imageData = this.ctx().getImageData(\n this.cropStartX(),\n this.cropStartY(),\n this.cropEndX() - this.cropStartX(),\n this.cropEndY() - this.cropStartY(),\n );\n } else if (this.cropStartX() > this.cropEndX() && this.cropStartY() < this.cropEndY()) {\n imageData = this.ctx().getImageData(\n this.cropEndX(),\n this.cropStartY(),\n this.cropStartX() - this.cropEndX(),\n this.cropEndY() - this.cropStartY(),\n );\n }\n\n const data: Uint8ClampedArray = imageData.data;\n\n const brightnessFactor = 2.4; // Increase brightness by 20%\n for (let i = 0; i < data.length; i += 4) {\n data[i] = data[i] * brightnessFactor; // Red\n data[i + 1] = data[i + 1] * brightnessFactor; // Green\n data[i + 2] = data[i + 2] * brightnessFactor; // Blue\n }\n\n if (this.cropStartX() < this.cropEndX() && this.cropStartY() > this.cropEndY()) {\n this.ctx().putImageData(imageData, this.cropStartX(), this.cropEndY());\n } else if (this.cropStartX() > this.cropEndX() && this.cropStartY() > this.cropEndY()) {\n this.ctx().putImageData(imageData, this.cropEndX(), this.cropEndY());\n } else if (this.cropStartX() < this.cropEndX() && this.cropStartY() < this.cropEndY()) {\n this.ctx().putImageData(imageData, this.cropStartX(), this.cropStartY());\n } else if (this.cropStartX() > this.cropEndX() && this.cropStartY() < this.cropEndY()) {\n this.ctx().putImageData(imageData, this.cropEndX(), this.cropStartY());\n }\n\n this.cropImageData.set(imageData);\n }\n\n /** @ignore */\n protected cropButtonHandler() {\n let cropWidth: number;\n let cropHeight: number;\n\n this.service.rotate.update((prev) => {\n return { userInteract: false, state: prev.state };\n });\n\n if (this.cropStartX() < this.cropEndX() && this.cropStartY() > this.cropEndY()) {\n cropWidth = this.cropEndX() - this.cropStartX();\n cropHeight = this.cropStartY() - this.cropEndY();\n } else if (this.cropStartX() > this.cropEndX() && this.cropStartY() > this.cropEndY()) {\n cropWidth = this.cropStartX() - this.cropEndX();\n cropHeight = this.cropStartY() - this.cropEndY();\n } else if (this.cropStartX() < this.cropEndX() && this.cropStartY() < this.cropEndY()) {\n cropWidth = this.cropEndX() - this.cropStartX();\n cropHeight = this.cropEndY() - this.cropStartY();\n } else if (this.cropStartX() > this.cropEndX() && this.cropStartY() < this.cropEndY()) {\n cropWidth = this.cropStartX() - this.cropEndX();\n cropHeight = this.cropEndY() - this.cropStartY();\n }\n\n this.canvasElem().nativeElement.width = cropWidth;\n this.canvasElem().nativeElement.height = cropHeight;\n\n this.ctx().putImageData(this.cropImageData(), 0, 0);\n this.saveImageChange();\n this.cropImageData.set(null);\n this.service.cropState.set({ userInteract: false, state: false });\n }\n\n /** @ignore */\n protected rotateImage() {\n this.ctx().save();\n this.ctx().clearRect(0, 0, this.canvasElem().nativeElement.width, this.canvasElem().nativeElement.height);\n this.ctx().translate(this.service.newImage().width / 2, this.service.newImage().height / 2);\n this.ctx().rotate((this.service.rotate().state * Math.PI) / 180);\n this.ctx().drawImage(\n this.service.newImage(),\n -this.service.newImage().width / 2,\n -this.service.newImage().height / 2,\n this.service.newImage().width,\n this.service.newImage().height,\n );\n this.ctx().restore();\n\n this.saveImageChange();\n this.service.rotate.update((prev) => {\n return { state: prev.state, userInteract: false };\n });\n }\n\n /** @ignore */\n protected saveImageChange() {\n const newImage = new Image();\n newImage.crossOrigin = 'anonymous';\n newImage.src = this.canvasElem().nativeElement.toDataURL('image/jpeg', 1);\n this.service.newImage.set(newImage);\n\n const tempBlob = [];\n this.canvasElem().nativeElement.toBlob(\n (blob) => {\n tempBlob.push(blob);\n },\n 'image/jpeg',\n 1,\n );\n this.canvasElem().nativeElement.toBlob(\n (blob) => {\n tempBlob.push(blob);\n },\n 'image/png',\n 1,\n );\n this.canvasElem().nativeElement.toBlob(\n (blob) => {\n tempBlob.push(blob);\n },\n 'image/webp',\n 1,\n );\n this.service.imageBlob.set(tempBlob);\n }\n\n /** @ignore */\n @HostBinding('style')\n private get __hostStyle(): string {\n return `width: ${this.service.initialImage()?.width}px; height: ${this.service.initialImage()?.height}px`;\n }\n}\n","<canvas\n tabindex=\"1\"\n (mousedown)=\"mouseDownHandler($event)\"\n (mouseup)=\"mouseUpHandler()\"\n (mousemove)=\"mouseMoveHandler($event)\"\n (touchstart)=\"touchStartHandler($event)\"\n (touchend)=\"touchEndHandler()\"\n (touchmove)=\"touchMoveHandler($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n></canvas>\n<ax-button\n (click)=\"cropButtonHandler()\"\n [style]=\"{ display: service.cropState().state ? 'block' : 'none' }\"\n class=\"ax-crop-save ax-sm\"\n text=\"Crop\"\n></ax-button>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXColorPaletteModule } from '@acorex/components/color-palette';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogModule } from '@acorex/components/dialog';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXRangeSliderModule } from '@acorex/components/range-slider';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXImageEditorContainerComponent } from './image-editor-container/image-editor-container.component';\nimport { AXImageEditorToolbarComponent } from './image-editor-toolbar/image-editor-toolbar.component';\nimport { AXImageEditorColorPickerComponent } from './image-editor-tools/image-editor-color-picker/image-editor-color-picker.component';\nimport { AXImageEditorCropComponent } from './image-editor-tools/image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorPenModeChangerComponent } from './image-editor-tools/image-editor-pen-mode-changer/image-editor-pen-mode-changer.component';\nimport { AXImageEditorViewComponent } from './image-editor-view/image-editor-view.component';\n\nconst COMPONENT = [\n AXImageEditorToolbarComponent,\n AXImageEditorColorPickerComponent,\n AXImageEditorPenModeChangerComponent,\n AXImageEditorViewComponent,\n AXImageEditorContainerComponent,\n AXImageEditorCropComponent,\n];\n\nconst MODULES = [\n AXButtonModule,\n FormsModule,\n AXRangeSliderModule,\n AXSelectBoxModule,\n AXColorPaletteModule,\n AXPopoverModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXDialogModule,\n];\n\n@NgModule({\n declarations: [...COMPONENT],\n imports: [...MODULES],\n exports: [...COMPONENT],\n providers: [],\n})\nexport class AXImageEditorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}
@@ -15,6 +15,7 @@ import * as i1 from '@angular/forms';
15
15
  import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
16
16
  import { MXInputBaseValueComponent, MXLookComponent, AXComponent, AXFocusableComponent, AXClearableComponent, AXValuableComponent } from '@acorex/components/common';
17
17
  import { classes } from 'polytype';
18
+ import { isBrowser } from '@acorex/core/platform';
18
19
 
19
20
  /**
20
21
  * paint container.
@@ -199,11 +200,15 @@ class AXPaintViewComponent {
199
200
  this.service.toggleClear();
200
201
  this.ctx()?.clearRect(0, 0, this.getBoundingCanvasHandler()?.width, this.getBoundingCanvasHandler()?.height);
201
202
  }, { allowSignalWrites: true });
202
- window.addEventListener('resize', this.resizeEventHandler.bind(this));
203
+ if (isBrowser()) {
204
+ window.addEventListener('resize', this.resizeEventHandler.bind(this));
205
+ }
203
206
  }
204
207
  /** @ignore */
205
208
  ngOnDestroy() {
206
- removeEventListener('resize', this.resizeEventHandler);
209
+ if (isBrowser()) {
210
+ window.removeEventListener('resize', this.resizeEventHandler);
211
+ }
207
212
  }
208
213
  /** @ignore */
209
214
  resizeEventHandler() {