@acorex/components 21.0.3-next.13 → 21.0.3-next.15

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.
@@ -36,6 +36,7 @@ class AXImageEditorService {
36
36
  this.undoPressed = signal(false, ...(ngDevMode ? [{ debugName: "undoPressed" }] : /* istanbul ignore next */ []));
37
37
  this.redoPressed = signal(false, ...(ngDevMode ? [{ debugName: "redoPressed" }] : /* istanbul ignore next */ []));
38
38
  this.cropperRatio = signal(null, ...(ngDevMode ? [{ debugName: "cropperRatio" }] : /* istanbul ignore next */ []));
39
+ this.cropperSize = signal(150, ...(ngDevMode ? [{ debugName: "cropperSize" }] : /* istanbul ignore next */ []));
39
40
  }
40
41
  toggleTool(tool) {
41
42
  if (this.activeToolState() === tool) {
@@ -64,6 +65,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
64
65
  class AXImageEditorCropperWindowComponent {
65
66
  constructor() {
66
67
  this.showGrid = input(true, ...(ngDevMode ? [{ debugName: "showGrid" }] : /* istanbul ignore next */ []));
68
+ /** Base size in pixels used to calculate the initial cropper window dimensions. */
69
+ this.size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : /* istanbul ignore next */ []));
67
70
  this.service = inject(AXImageEditorService);
68
71
  this.ngZone = inject(NgZone);
69
72
  this.selectedHandle = signal(null, ...(ngDevMode ? [{ debugName: "selectedHandle" }] : /* istanbul ignore next */ []));
@@ -83,7 +86,7 @@ class AXImageEditorCropperWindowComponent {
83
86
  const host = this.elementRef.nativeElement;
84
87
  let width;
85
88
  let height;
86
- const scale = 150;
89
+ const scale = this.size() ?? this.service.cropperSize();
87
90
  switch (this.service.cropperRatio()) {
88
91
  case '1:1':
89
92
  width = 1;
@@ -323,12 +326,12 @@ class AXImageEditorCropperWindowComponent {
323
326
  this.selectedHandle.set(null);
324
327
  }
325
328
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXImageEditorCropperWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
326
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXImageEditorCropperWindowComponent, isStandalone: true, selector: "ax-image-editor-cropper-window", inputs: { showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXComponent, useExisting: AXImageEditorCropperWindowComponent }], viewQueries: [{ propertyName: "cropperWindow", first: true, predicate: ["r"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [style.border]=\"!showGrid() ? '1px dashed white' : null\" #r class=\"ax-image-cropper-window-container\">\n @if (!service.cropperRatio()) {\n <div (pointerdown)=\"handleSelector($event, 'right')\" class=\"ax-image-right-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'top')\" class=\"ax-image-top-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left')\" class=\"ax-image-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom')\" class=\"ax-image-bottom-handle ax-handle-shape\"></div>\n }\n\n <div (pointerdown)=\"handleSelector($event, 'right-top')\" class=\"ax-image-right-top-handle ax-handle-shape\"></div>\n <div\n (pointerdown)=\"handleSelector($event, 'bottom-right')\"\n class=\"ax-image-bottom-right-handle ax-handle-shape\"\n ></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom-left')\" class=\"ax-image-bottom-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left-top')\" class=\"ax-image-left-top-handle ax-handle-shape\"></div>\n\n @if (showGrid()) {\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n }\n</div>\n", styles: ["@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-outline-style:solid;--tw-border-style:solid}}}@layer components{ax-image-editor-cropper-window{touch-action:none;-webkit-user-select:none;user-select:none;position:absolute;top:45%;left:45%}ax-image-editor-cropper-window .ax-image-cropper-window-container{cursor:move;outline-style:var(--tw-outline-style);outline-width:100vmax;outline-color:#000000b3;grid-template-columns:repeat(3,minmax(0,1fr));height:100%;display:grid;position:relative}@supports (color:color-mix(in lab,red,red)){ax-image-editor-cropper-window .ax-image-cropper-window-container{outline-color:color-mix(in oklab,var(--color-black,#000) 70%,transparent)}}ax-image-editor-cropper-window .ax-image-cropper-window-container{--tw-outline-style:solid;outline-style:solid}ax-image-editor-cropper-window .ax-image-cropper-window-container .ax-grid-item{border-style:var(--tw-border-style);--tw-border-style:dashed;border:1px dashed #ffffff80}@supports (color:color-mix(in lab,red,red)){ax-image-editor-cropper-window .ax-image-cropper-window-container .ax-grid-item{border-color:color-mix(in oklab,var(--color-white,#fff) 50%,transparent)}}ax-image-editor-cropper-window .ax-handle-shape{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--color-white,#fff);background-color:var(--color-gray-500,oklch(55.1% .027 264.364));-webkit-user-select:none;user-select:none;position:absolute}ax-image-editor-cropper-window .ax-image-right-top-handle{top:calc(var(--spacing,.25rem) * -2);right:calc(var(--spacing,.25rem) * -2);cursor:ne-resize}ax-image-editor-cropper-window .ax-image-bottom-right-handle{right:calc(var(--spacing,.25rem) * -2);bottom:calc(var(--spacing,.25rem) * -2);cursor:se-resize}ax-image-editor-cropper-window .ax-image-right-handle{top:calc(50% - .5rem);right:calc(var(--spacing,.25rem) * -2);cursor:e-resize}ax-image-editor-cropper-window .ax-image-bottom-left-handle{bottom:calc(var(--spacing,.25rem) * -2);left:calc(var(--spacing,.25rem) * -2);cursor:sw-resize}ax-image-editor-cropper-window .ax-image-left-top-handle{top:calc(var(--spacing,.25rem) * -2);left:calc(var(--spacing,.25rem) * -2);cursor:nw-resize}ax-image-editor-cropper-window .ax-image-bottom-handle{right:calc(50% - .5rem);bottom:calc(var(--spacing,.25rem) * -2);cursor:s-resize}ax-image-editor-cropper-window .ax-image-left-handle{top:calc(50% - .5rem);left:calc(var(--spacing,.25rem) * -2);cursor:w-resize}ax-image-editor-cropper-window .ax-image-top-handle{top:calc(var(--spacing,.25rem) * -2);cursor:n-resize;right:calc(50% - .5rem)}}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
329
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXImageEditorCropperWindowComponent, isStandalone: true, selector: "ax-image-editor-cropper-window", inputs: { showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXComponent, useExisting: AXImageEditorCropperWindowComponent }], viewQueries: [{ propertyName: "cropperWindow", first: true, predicate: ["r"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [style.border]=\"!showGrid() ? '1px dashed white' : null\" #r class=\"ax-image-cropper-window-container\">\n @if (!service.cropperRatio()) {\n <div (pointerdown)=\"handleSelector($event, 'right')\" class=\"ax-image-right-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'top')\" class=\"ax-image-top-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left')\" class=\"ax-image-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom')\" class=\"ax-image-bottom-handle ax-handle-shape\"></div>\n }\n\n <div (pointerdown)=\"handleSelector($event, 'right-top')\" class=\"ax-image-right-top-handle ax-handle-shape\"></div>\n <div\n (pointerdown)=\"handleSelector($event, 'bottom-right')\"\n class=\"ax-image-bottom-right-handle ax-handle-shape\"\n ></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom-left')\" class=\"ax-image-bottom-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left-top')\" class=\"ax-image-left-top-handle ax-handle-shape\"></div>\n\n @if (showGrid()) {\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n }\n</div>\n", styles: ["@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-outline-style:solid;--tw-border-style:solid}}}@layer components{ax-image-editor-cropper-window{touch-action:none;-webkit-user-select:none;user-select:none;position:absolute;top:45%;left:45%}ax-image-editor-cropper-window .ax-image-cropper-window-container{cursor:move;outline-style:var(--tw-outline-style);outline-width:100vmax;outline-color:#000000b3;grid-template-columns:repeat(3,minmax(0,1fr));height:100%;display:grid;position:relative}@supports (color:color-mix(in lab,red,red)){ax-image-editor-cropper-window .ax-image-cropper-window-container{outline-color:color-mix(in oklab,var(--color-black,#000) 70%,transparent)}}ax-image-editor-cropper-window .ax-image-cropper-window-container{--tw-outline-style:solid;outline-style:solid}ax-image-editor-cropper-window .ax-image-cropper-window-container .ax-grid-item{border-style:var(--tw-border-style);--tw-border-style:dashed;border:1px dashed #ffffff80}@supports (color:color-mix(in lab,red,red)){ax-image-editor-cropper-window .ax-image-cropper-window-container .ax-grid-item{border-color:color-mix(in oklab,var(--color-white,#fff) 50%,transparent)}}ax-image-editor-cropper-window .ax-handle-shape{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--color-white,#fff);background-color:var(--color-gray-500,oklch(55.1% .027 264.364));-webkit-user-select:none;user-select:none;position:absolute}ax-image-editor-cropper-window .ax-image-right-top-handle{top:calc(var(--spacing,.25rem) * -2);right:calc(var(--spacing,.25rem) * -2);cursor:ne-resize}ax-image-editor-cropper-window .ax-image-bottom-right-handle{right:calc(var(--spacing,.25rem) * -2);bottom:calc(var(--spacing,.25rem) * -2);cursor:se-resize}ax-image-editor-cropper-window .ax-image-right-handle{top:calc(50% - .5rem);right:calc(var(--spacing,.25rem) * -2);cursor:e-resize}ax-image-editor-cropper-window .ax-image-bottom-left-handle{bottom:calc(var(--spacing,.25rem) * -2);left:calc(var(--spacing,.25rem) * -2);cursor:sw-resize}ax-image-editor-cropper-window .ax-image-left-top-handle{top:calc(var(--spacing,.25rem) * -2);left:calc(var(--spacing,.25rem) * -2);cursor:nw-resize}ax-image-editor-cropper-window .ax-image-bottom-handle{right:calc(50% - .5rem);bottom:calc(var(--spacing,.25rem) * -2);cursor:s-resize}ax-image-editor-cropper-window .ax-image-left-handle{top:calc(50% - .5rem);left:calc(var(--spacing,.25rem) * -2);cursor:w-resize}ax-image-editor-cropper-window .ax-image-top-handle{top:calc(var(--spacing,.25rem) * -2);cursor:n-resize;right:calc(50% - .5rem)}}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
327
330
  }
328
331
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXImageEditorCropperWindowComponent, decorators: [{
329
332
  type: Component,
330
333
  args: [{ selector: 'ax-image-editor-cropper-window', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: AXComponent, useExisting: AXImageEditorCropperWindowComponent }], template: "<div [style.border]=\"!showGrid() ? '1px dashed white' : null\" #r class=\"ax-image-cropper-window-container\">\n @if (!service.cropperRatio()) {\n <div (pointerdown)=\"handleSelector($event, 'right')\" class=\"ax-image-right-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'top')\" class=\"ax-image-top-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left')\" class=\"ax-image-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom')\" class=\"ax-image-bottom-handle ax-handle-shape\"></div>\n }\n\n <div (pointerdown)=\"handleSelector($event, 'right-top')\" class=\"ax-image-right-top-handle ax-handle-shape\"></div>\n <div\n (pointerdown)=\"handleSelector($event, 'bottom-right')\"\n class=\"ax-image-bottom-right-handle ax-handle-shape\"\n ></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom-left')\" class=\"ax-image-bottom-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left-top')\" class=\"ax-image-left-top-handle ax-handle-shape\"></div>\n\n @if (showGrid()) {\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n }\n</div>\n", styles: ["@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-outline-style:solid;--tw-border-style:solid}}}@layer components{ax-image-editor-cropper-window{touch-action:none;-webkit-user-select:none;user-select:none;position:absolute;top:45%;left:45%}ax-image-editor-cropper-window .ax-image-cropper-window-container{cursor:move;outline-style:var(--tw-outline-style);outline-width:100vmax;outline-color:#000000b3;grid-template-columns:repeat(3,minmax(0,1fr));height:100%;display:grid;position:relative}@supports (color:color-mix(in lab,red,red)){ax-image-editor-cropper-window .ax-image-cropper-window-container{outline-color:color-mix(in oklab,var(--color-black,#000) 70%,transparent)}}ax-image-editor-cropper-window .ax-image-cropper-window-container{--tw-outline-style:solid;outline-style:solid}ax-image-editor-cropper-window .ax-image-cropper-window-container .ax-grid-item{border-style:var(--tw-border-style);--tw-border-style:dashed;border:1px dashed #ffffff80}@supports (color:color-mix(in lab,red,red)){ax-image-editor-cropper-window .ax-image-cropper-window-container .ax-grid-item{border-color:color-mix(in oklab,var(--color-white,#fff) 50%,transparent)}}ax-image-editor-cropper-window .ax-handle-shape{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--color-white,#fff);background-color:var(--color-gray-500,oklch(55.1% .027 264.364));-webkit-user-select:none;user-select:none;position:absolute}ax-image-editor-cropper-window .ax-image-right-top-handle{top:calc(var(--spacing,.25rem) * -2);right:calc(var(--spacing,.25rem) * -2);cursor:ne-resize}ax-image-editor-cropper-window .ax-image-bottom-right-handle{right:calc(var(--spacing,.25rem) * -2);bottom:calc(var(--spacing,.25rem) * -2);cursor:se-resize}ax-image-editor-cropper-window .ax-image-right-handle{top:calc(50% - .5rem);right:calc(var(--spacing,.25rem) * -2);cursor:e-resize}ax-image-editor-cropper-window .ax-image-bottom-left-handle{bottom:calc(var(--spacing,.25rem) * -2);left:calc(var(--spacing,.25rem) * -2);cursor:sw-resize}ax-image-editor-cropper-window .ax-image-left-top-handle{top:calc(var(--spacing,.25rem) * -2);left:calc(var(--spacing,.25rem) * -2);cursor:nw-resize}ax-image-editor-cropper-window .ax-image-bottom-handle{right:calc(50% - .5rem);bottom:calc(var(--spacing,.25rem) * -2);cursor:s-resize}ax-image-editor-cropper-window .ax-image-left-handle{top:calc(50% - .5rem);left:calc(var(--spacing,.25rem) * -2);cursor:w-resize}ax-image-editor-cropper-window .ax-image-top-handle{top:calc(var(--spacing,.25rem) * -2);cursor:n-resize;right:calc(50% - .5rem)}}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
331
- }], propDecorators: { showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], cropperWindow: [{ type: i0.ViewChild, args: ['r', { isSignal: true }] }] } });
334
+ }], propDecorators: { showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], cropperWindow: [{ type: i0.ViewChild, args: ['r', { isSignal: true }] }] } });
332
335
 
333
336
  class AXImageEditorViewComponent extends MXBaseComponent {
334
337
  /** @ignore */
@@ -377,6 +380,10 @@ class AXImageEditorViewComponent extends MXBaseComponent {
377
380
  * its change grid display state.
378
381
  */
379
382
  this.showGrid = input(true, ...(ngDevMode ? [{ debugName: "showGrid" }] : /* istanbul ignore next */ []));
383
+ /**
384
+ * Base size in pixels for the initial cropper window dimensions.
385
+ */
386
+ this.cropperSize = input(...(ngDevMode ? [undefined, { debugName: "cropperSize" }] : /* istanbul ignore next */ []));
380
387
  /**
381
388
  * its change grid display state.
382
389
  */
@@ -433,6 +440,12 @@ class AXImageEditorViewComponent extends MXBaseComponent {
433
440
  return;
434
441
  this.rotateImage();
435
442
  });
443
+ effect(() => {
444
+ const size = this.cropperSize();
445
+ if (size != null) {
446
+ this.service.cropperSize.set(size);
447
+ }
448
+ });
436
449
  }
437
450
  /** @ignore */
438
451
  ngOnDestroy() {
@@ -516,8 +529,12 @@ class AXImageEditorViewComponent extends MXBaseComponent {
516
529
  this.saveImageChange();
517
530
  }
518
531
  /** @ignore */
519
- cropButtonHandler() {
520
- const cropRect = this.cropperWindow().getCropperArea();
532
+ async crop() {
533
+ const cropper = this.cropperWindow();
534
+ if (this.service.activeToolState() !== 'crop' || !cropper) {
535
+ return;
536
+ }
537
+ const cropRect = cropper.getCropperArea();
521
538
  const canvasRect = this.canvasElem().nativeElement.getClientRects()[0];
522
539
  const dx = cropRect.x - canvasRect.x;
523
540
  const dy = cropRect.y - canvasRect.y;
@@ -526,9 +543,9 @@ class AXImageEditorViewComponent extends MXBaseComponent {
526
543
  this.canvasElem().nativeElement.height = cropRect.height;
527
544
  this.ctx().putImageData(imageData, 0, 0);
528
545
  const cropImage = this.canvasElem().nativeElement.toDataURL('image/jpeg', 1);
546
+ await this.saveImageChange();
529
547
  this.setInitialImage(cropImage, false);
530
548
  this.service.activeToolState.set(null);
531
- this.saveImageChange();
532
549
  }
533
550
  /** @ignore */
534
551
  rotateImage() {
@@ -582,12 +599,12 @@ class AXImageEditorViewComponent extends MXBaseComponent {
582
599
  this.service.imageBlob.set(blobs);
583
600
  }
584
601
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXImageEditorViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
585
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXImageEditorViewComponent, isStandalone: true, selector: "ax-image-editor-view", inputs: { showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXComponent, useExisting: AXImageEditorViewComponent }], viewQueries: [{ propertyName: "canvasElem", first: true, predicate: ["canvasElem"], descendants: true, isSignal: true }, { propertyName: "cropperWindow", first: true, predicate: ["f"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<canvas\n tabindex=\"1\"\n (pointerdown)=\"mouseDownHandler($event)\"\n (pointerup)=\"mouseUpHandler()\"\n (pointermove)=\"mouseMoveHandler($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n></canvas>\n\n@if (this.service.activeToolState() === 'crop') {\n <ax-image-editor-cropper-window [showGrid]=\"showGrid()\" #f></ax-image-editor-cropper-window>\n}\n", styles: ["@layer components{ax-image-editor-view{touch-action:none;background-color:var(--color-white,#fff);justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:hidden}ax-image-editor-view .ax-canvas-element{cursor:crosshair;background-color:var(--color-black,#000)}ax-image-editor-view .ax-crop-save{margin:calc(var(--spacing,.25rem) * 4);position:absolute;top:0;right:0}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: AXImageEditorCropperWindowComponent, selector: "ax-image-editor-cropper-window", inputs: ["showGrid"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
602
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXImageEditorViewComponent, isStandalone: true, selector: "ax-image-editor-view", inputs: { showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, cropperSize: { classPropertyName: "cropperSize", publicName: "cropperSize", isSignal: true, isRequired: false, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXComponent, useExisting: AXImageEditorViewComponent }], viewQueries: [{ propertyName: "canvasElem", first: true, predicate: ["canvasElem"], descendants: true, isSignal: true }, { propertyName: "cropperWindow", first: true, predicate: ["f"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<canvas\n tabindex=\"1\"\n (pointerdown)=\"mouseDownHandler($event)\"\n (pointerup)=\"mouseUpHandler()\"\n (pointermove)=\"mouseMoveHandler($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n></canvas>\n\n@if (this.service.activeToolState() === 'crop') {\n <ax-image-editor-cropper-window [showGrid]=\"showGrid()\" #f></ax-image-editor-cropper-window>\n}\n", styles: ["@layer components{ax-image-editor-view{touch-action:none;background-color:var(--color-white,#fff);justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:hidden}ax-image-editor-view .ax-canvas-element{cursor:crosshair;background-color:var(--color-black,#000)}ax-image-editor-view .ax-crop-save{margin:calc(var(--spacing,.25rem) * 4);position:absolute;top:0;right:0}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: AXImageEditorCropperWindowComponent, selector: "ax-image-editor-cropper-window", inputs: ["showGrid", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
586
603
  }
587
604
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXImageEditorViewComponent, decorators: [{
588
605
  type: Component,
589
606
  args: [{ selector: 'ax-image-editor-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXImageEditorCropperWindowComponent], providers: [{ provide: AXComponent, useExisting: AXImageEditorViewComponent }], template: "<canvas\n tabindex=\"1\"\n (pointerdown)=\"mouseDownHandler($event)\"\n (pointerup)=\"mouseUpHandler()\"\n (pointermove)=\"mouseMoveHandler($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n></canvas>\n\n@if (this.service.activeToolState() === 'crop') {\n <ax-image-editor-cropper-window [showGrid]=\"showGrid()\" #f></ax-image-editor-cropper-window>\n}\n", styles: ["@layer components{ax-image-editor-view{touch-action:none;background-color:var(--color-white,#fff);justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:hidden}ax-image-editor-view .ax-canvas-element{cursor:crosshair;background-color:var(--color-black,#000)}ax-image-editor-view .ax-crop-save{margin:calc(var(--spacing,.25rem) * 4);position:absolute;top:0;right:0}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
590
- }], ctorParameters: () => [], propDecorators: { showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], canvasElem: [{ type: i0.ViewChild, args: ['canvasElem', { isSignal: true }] }], cropperWindow: [{ type: i0.ViewChild, args: ['f', { isSignal: true }] }] } });
607
+ }], ctorParameters: () => [], propDecorators: { showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], cropperSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "cropperSize", required: false }] }], src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], canvasElem: [{ type: i0.ViewChild, args: ['canvasElem', { isSignal: true }] }], cropperWindow: [{ type: i0.ViewChild, args: ['f', { isSignal: true }] }] } });
591
608
 
592
609
  /**
593
610
  * paint container.
@@ -611,6 +628,15 @@ class AXImageEditorContainerComponent extends classes((MXInputBaseValueComponent
611
628
  }, ...(ngDevMode ? [{ debugName: "#eff" }] : /* istanbul ignore next */ []));
612
629
  }
613
630
  #eff;
631
+ /** Applies the current cropper selection. */
632
+ async crop() {
633
+ const oldValue = this.value;
634
+ await this.view()?.crop();
635
+ const blobs = this.service.imageBlob();
636
+ if (blobs.length && this.value === oldValue) {
637
+ this.emitOnValueChangedEvent(oldValue, blobs);
638
+ }
639
+ }
614
640
  get __hostClass() {
615
641
  if (this.disabled)
616
642
  return 'ax-state-disabled';
@@ -653,6 +679,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
653
679
  args: ['attr.name']
654
680
  }] } });
655
681
 
682
+ const IMAGE_EDITOR_ASPECT_RATIO_ACTIVE_SUFFIX = ':active';
683
+ function parseAspectRatioItem(item) {
684
+ if (item.endsWith(IMAGE_EDITOR_ASPECT_RATIO_ACTIVE_SUFFIX)) {
685
+ return {
686
+ ratio: item.slice(0, -IMAGE_EDITOR_ASPECT_RATIO_ACTIVE_SUFFIX.length),
687
+ active: true,
688
+ };
689
+ }
690
+ return { ratio: item, active: false };
691
+ }
692
+ function parseAspectRatios(items) {
693
+ const ratios = [];
694
+ let activeRatio = null;
695
+ for (const item of items) {
696
+ const { ratio, active } = parseAspectRatioItem(item);
697
+ ratios.push(ratio);
698
+ if (active && activeRatio === null) {
699
+ activeRatio = ratio;
700
+ }
701
+ }
702
+ return { ratios, activeRatio };
703
+ }
704
+
656
705
  /**
657
706
  * Base class for image editor tool trigger components.
658
707
  * @category Components
@@ -674,15 +723,37 @@ class AXImageEditorCropComponent extends AXImageEditorToolComponent {
674
723
  constructor() {
675
724
  super(...arguments);
676
725
  this.tool = 'crop';
726
+ this.container = inject(AXImageEditorContainerComponent);
727
+ /** Aspect ratio presets. Append `:active` to mark the default ratio, e.g. `'2:1:active'`. */
677
728
  this.aspectRatio = input([], ...(ngDevMode ? [{ debugName: "aspectRatio" }] : /* istanbul ignore next */ []));
729
+ /** Base size in pixels for the initial cropper window dimensions. */
730
+ this.size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : /* istanbul ignore next */ []));
731
+ this.#syncSize = effect(() => {
732
+ const size = this.size();
733
+ if (size != null) {
734
+ this.service.cropperSize.set(size);
735
+ }
736
+ }, ...(ngDevMode ? [{ debugName: "#syncSize" }] : /* istanbul ignore next */ []));
737
+ this.#syncAspectRatio = effect(() => {
738
+ const { activeRatio } = parseAspectRatios(this.aspectRatio());
739
+ if (activeRatio) {
740
+ this.service.cropperRatio.set(activeRatio);
741
+ }
742
+ }, ...(ngDevMode ? [{ debugName: "#syncAspectRatio" }] : /* istanbul ignore next */ []));
743
+ }
744
+ #syncSize;
745
+ #syncAspectRatio;
746
+ /** Applies the current cropper selection. */
747
+ crop() {
748
+ this.container.crop();
678
749
  }
679
750
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXImageEditorCropComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
680
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: AXImageEditorCropComponent, isStandalone: true, selector: "ax-image-editor-crop", inputs: { aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXComponent, useExisting: AXImageEditorCropComponent }], usesInheritance: true, ngImport: i0, template: "<ax-button\n [axTooltip]=\"'@acorex:image-editor.crop' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('crop')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'crop'\"\n [color]=\"service.activeToolState() === 'crop' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n", dependencies: [{ kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "directive", type: i2.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
751
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: AXImageEditorCropComponent, isStandalone: true, selector: "ax-image-editor-crop", inputs: { aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXComponent, useExisting: AXImageEditorCropComponent }], usesInheritance: true, ngImport: i0, template: "<ax-button\n [axTooltip]=\"'@acorex:image-editor.crop' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('crop')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'crop'\"\n [color]=\"service.activeToolState() === 'crop' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n", dependencies: [{ kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "directive", type: i2.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
681
752
  }
682
753
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXImageEditorCropComponent, decorators: [{
683
754
  type: Component,
684
755
  args: [{ selector: 'ax-image-editor-crop', encapsulation: ViewEncapsulation.None, imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule], providers: [{ provide: AXComponent, useExisting: AXImageEditorCropComponent }], template: "<ax-button\n [axTooltip]=\"'@acorex:image-editor.crop' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('crop')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'crop'\"\n [color]=\"service.activeToolState() === 'crop' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n" }]
685
- }], propDecorators: { aspectRatio: [{ type: i0.Input, args: [{ isSignal: true, alias: "aspectRatio", required: false }] }] } });
756
+ }], propDecorators: { aspectRatio: [{ type: i0.Input, args: [{ isSignal: true, alias: "aspectRatio", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
686
757
 
687
758
  /**
688
759
  * Highlight tool trigger for the image editor toolbar.
@@ -764,10 +835,11 @@ class AXImageEditorCropOptionsComponent {
764
835
  this.container = inject(AXImageEditorContainerComponent);
765
836
  this.cropPressed = output();
766
837
  this.aspectRatio = input([], ...(ngDevMode ? [{ debugName: "aspectRatio" }] : /* istanbul ignore next */ []));
838
+ this.aspectRatios = computed(() => parseAspectRatios(this.aspectRatio()).ratios, ...(ngDevMode ? [{ debugName: "aspectRatios" }] : /* istanbul ignore next */ []));
767
839
  }
768
840
  cropButtonHandler() {
769
841
  this.cropPressed.emit();
770
- this.container.view()?.cropButtonHandler();
842
+ this.container.crop();
771
843
  }
772
844
  ratioHandler(r) {
773
845
  if (this.service.cropperRatio() === r) {
@@ -778,11 +850,11 @@ class AXImageEditorCropOptionsComponent {
778
850
  }
779
851
  }
780
852
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXImageEditorCropOptionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
781
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXImageEditorCropOptionsComponent, isStandalone: true, selector: "ax-image-editor-crop-options", inputs: { aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cropPressed: "cropPressed" }, providers: [{ provide: AXComponent, useExisting: AXImageEditorCropOptionsComponent }], ngImport: i0, template: "<div class=\"ax-image-editor-crop-ratios\">\n @for (item of aspectRatio(); track $index) {\n <ax-button\n [selected]=\"service.cropperRatio() === item\"\n [color]=\"service.cropperRatio() === item ? 'primary' : 'default'\"\n (click)=\"ratioHandler(item)\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"item\"\n ></ax-button>\n } @empty {\n <ax-button\n [selected]=\"service.cropperRatio() === '1:1'\"\n [color]=\"service.cropperRatio() === '1:1' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('1:1')\"\n class=\"ax-crop-save ax-sm\"\n text=\"1:1\"\n ></ax-button>\n <ax-button\n [selected]=\"service.cropperRatio() === '16:9'\"\n [color]=\"service.cropperRatio() === '16:9' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('16:9')\"\n class=\"ax-crop-save ax-sm\"\n text=\"16:9\"\n ></ax-button>\n }\n</div>\n\n<ax-button\n (click)=\"cropButtonHandler()\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"'@acorex:image-editor.crop' | translate | async\"\n color=\"primary\"\n></ax-button>\n", dependencies: [{ kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
853
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXImageEditorCropOptionsComponent, isStandalone: true, selector: "ax-image-editor-crop-options", inputs: { aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cropPressed: "cropPressed" }, providers: [{ provide: AXComponent, useExisting: AXImageEditorCropOptionsComponent }], ngImport: i0, template: "<div class=\"ax-image-editor-crop-ratios\">\n @for (item of aspectRatios(); track item) {\n <ax-button\n [selected]=\"service.cropperRatio() === item\"\n [color]=\"service.cropperRatio() === item ? 'primary' : 'default'\"\n (click)=\"ratioHandler(item)\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"item\"\n ></ax-button>\n } @empty {\n <ax-button\n [selected]=\"service.cropperRatio() === '1:1'\"\n [color]=\"service.cropperRatio() === '1:1' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('1:1')\"\n class=\"ax-crop-save ax-sm\"\n text=\"1:1\"\n ></ax-button>\n <ax-button\n [selected]=\"service.cropperRatio() === '16:9'\"\n [color]=\"service.cropperRatio() === '16:9' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('16:9')\"\n class=\"ax-crop-save ax-sm\"\n text=\"16:9\"\n ></ax-button>\n }\n</div>\n\n<ax-button\n (click)=\"cropButtonHandler()\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"'@acorex:image-editor.crop' | translate | async\"\n color=\"primary\"\n></ax-button>\n", dependencies: [{ kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
782
854
  }
783
855
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXImageEditorCropOptionsComponent, decorators: [{
784
856
  type: Component,
785
- args: [{ selector: 'ax-image-editor-crop-options', encapsulation: ViewEncapsulation.None, imports: [AXButtonComponent, AsyncPipe, AXTranslatorPipe], providers: [{ provide: AXComponent, useExisting: AXImageEditorCropOptionsComponent }], template: "<div class=\"ax-image-editor-crop-ratios\">\n @for (item of aspectRatio(); track $index) {\n <ax-button\n [selected]=\"service.cropperRatio() === item\"\n [color]=\"service.cropperRatio() === item ? 'primary' : 'default'\"\n (click)=\"ratioHandler(item)\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"item\"\n ></ax-button>\n } @empty {\n <ax-button\n [selected]=\"service.cropperRatio() === '1:1'\"\n [color]=\"service.cropperRatio() === '1:1' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('1:1')\"\n class=\"ax-crop-save ax-sm\"\n text=\"1:1\"\n ></ax-button>\n <ax-button\n [selected]=\"service.cropperRatio() === '16:9'\"\n [color]=\"service.cropperRatio() === '16:9' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('16:9')\"\n class=\"ax-crop-save ax-sm\"\n text=\"16:9\"\n ></ax-button>\n }\n</div>\n\n<ax-button\n (click)=\"cropButtonHandler()\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"'@acorex:image-editor.crop' | translate | async\"\n color=\"primary\"\n></ax-button>\n" }]
857
+ args: [{ selector: 'ax-image-editor-crop-options', encapsulation: ViewEncapsulation.None, imports: [AXButtonComponent, AsyncPipe, AXTranslatorPipe], providers: [{ provide: AXComponent, useExisting: AXImageEditorCropOptionsComponent }], template: "<div class=\"ax-image-editor-crop-ratios\">\n @for (item of aspectRatios(); track item) {\n <ax-button\n [selected]=\"service.cropperRatio() === item\"\n [color]=\"service.cropperRatio() === item ? 'primary' : 'default'\"\n (click)=\"ratioHandler(item)\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"item\"\n ></ax-button>\n } @empty {\n <ax-button\n [selected]=\"service.cropperRatio() === '1:1'\"\n [color]=\"service.cropperRatio() === '1:1' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('1:1')\"\n class=\"ax-crop-save ax-sm\"\n text=\"1:1\"\n ></ax-button>\n <ax-button\n [selected]=\"service.cropperRatio() === '16:9'\"\n [color]=\"service.cropperRatio() === '16:9' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('16:9')\"\n class=\"ax-crop-save ax-sm\"\n text=\"16:9\"\n ></ax-button>\n }\n</div>\n\n<ax-button\n (click)=\"cropButtonHandler()\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"'@acorex:image-editor.crop' | translate | async\"\n color=\"primary\"\n></ax-button>\n" }]
786
858
  }], propDecorators: { cropPressed: [{ type: i0.Output, args: ["cropPressed"] }], aspectRatio: [{ type: i0.Input, args: [{ isSignal: true, alias: "aspectRatio", required: false }] }] } });
787
859
 
788
860
  /** @ignore */
@@ -886,6 +958,8 @@ class AXImageEditorToolsBarComponent {
886
958
  * Tool component reference to activate on load.
887
959
  */
888
960
  this.active = input(...(ngDevMode ? [undefined, { debugName: "active" }] : /* istanbul ignore next */ []));
961
+ /** Hides the tools bar UI while keeping projected tools configurable. */
962
+ this.hidden = input(false, ...(ngDevMode ? [{ debugName: "hidden" }] : /* istanbul ignore next */ []));
889
963
  this.penTool = contentChild(AXImageEditorPenComponent, ...(ngDevMode ? [{ debugName: "penTool" }] : /* istanbul ignore next */ []));
890
964
  this.highlightTool = contentChild(AXImageEditorHighlightComponent, ...(ngDevMode ? [{ debugName: "highlightTool" }] : /* istanbul ignore next */ []));
891
965
  this.cropTool = contentChild(AXImageEditorCropComponent, ...(ngDevMode ? [{ debugName: "cropTool" }] : /* istanbul ignore next */ []));
@@ -897,19 +971,21 @@ class AXImageEditorToolsBarComponent {
897
971
  }
898
972
  #activeEffect;
899
973
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXImageEditorToolsBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
900
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXImageEditorToolsBarComponent, isStandalone: true, selector: "ax-image-editor-tools-bar", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXComponent, useExisting: AXImageEditorToolsBarComponent }], queries: [{ propertyName: "penTool", first: true, predicate: AXImageEditorPenComponent, descendants: true, isSignal: true }, { propertyName: "highlightTool", first: true, predicate: AXImageEditorHighlightComponent, descendants: true, isSignal: true }, { propertyName: "cropTool", first: true, predicate: AXImageEditorCropComponent, descendants: true, isSignal: true }, { propertyName: "rotateTool", first: true, predicate: AXImageEditorRotateComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-toolbar class=\"ax-main-toolbar\">\n <ax-prefix class=\"ax-image-editor-tool-triggers\">\n <ng-content\n select=\"ax-image-editor-pen, ax-image-editor-highlight, ax-image-editor-crop, ax-image-editor-rotate\"\n ></ng-content>\n </ax-prefix>\n\n @if (service.activeToolState()) {\n <ax-suffix class=\"ax-image-editor-tool-options\">\n @switch (service.activeToolState()) {\n @case ('pen') {\n @if (penTool()) {\n <ax-image-editor-pen-options></ax-image-editor-pen-options>\n }\n }\n @case ('highlight') {\n @if (highlightTool()) {\n <ax-image-editor-highlight-options></ax-image-editor-highlight-options>\n }\n }\n @case ('crop') {\n @if (cropTool()) {\n <ax-image-editor-crop-options [aspectRatio]=\"cropAspectRatio()\"></ax-image-editor-crop-options>\n }\n }\n @case ('rotate') {\n @if (rotateTool()) {\n <ax-image-editor-rotate-options></ax-image-editor-rotate-options>\n }\n }\n }\n </ax-suffix>\n }\n</ax-toolbar>\n", styles: ["@layer components{ax-image-editor-tools-bar{width:100%;display:block}ax-image-editor-tools-bar .ax-main-toolbar{padding:calc(var(--spacing,.25rem) * 2);justify-content:space-between}ax-image-editor-tools-bar .ax-main-toolbar>ax-suffix{flex:1;margin-left:auto}ax-image-editor-tools-bar .ax-image-editor-tool-triggers{justify-content:flex-start;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}ax-image-editor-tools-bar .ax-image-editor-tool-options{justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex:1;min-width:0;display:flex}ax-image-editor-tools-bar .ax-image-editor-crop-ratios{justify-content:flex-end;align-items:center;gap:var(--spacing,.25rem);flex-wrap:wrap;display:flex}ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}:is(ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options) ax-color-box{flex-shrink:0}:is(ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options) ax-range-slider{width:calc(var(--spacing,.25rem) * 40);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2)}:is(ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options) ax-range-slider .ax-range-slider .ax-range-slider-handler{height:calc(var(--spacing,.25rem) * 4)!important;width:calc(var(--spacing,.25rem) * 4)!important}ax-image-editor-tools-bar ax-image-editor-crop-options{justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}ax-image-editor-tools-bar ax-image-editor-rotate-options{align-items:center;gap:var(--spacing,.25rem);display:flex}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXToolBarModule }, { kind: "component", type: i2$1.AXToolBarComponent, selector: "ax-toolbar" }, { kind: "component", type: AXImageEditorPenOptionsComponent, selector: "ax-image-editor-pen-options" }, { kind: "component", type: AXImageEditorHighlightOptionsComponent, selector: "ax-image-editor-highlight-options" }, { kind: "component", type: AXImageEditorCropOptionsComponent, selector: "ax-image-editor-crop-options", inputs: ["aspectRatio"], outputs: ["cropPressed"] }, { kind: "component", type: AXImageEditorRotateOptionsComponent, selector: "ax-image-editor-rotate-options" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
974
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXImageEditorToolsBarComponent, isStandalone: true, selector: "ax-image-editor-tools-bar", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.ax-image-editor-tools-bar-hidden": "hidden()" } }, providers: [{ provide: AXComponent, useExisting: AXImageEditorToolsBarComponent }], queries: [{ propertyName: "penTool", first: true, predicate: AXImageEditorPenComponent, descendants: true, isSignal: true }, { propertyName: "highlightTool", first: true, predicate: AXImageEditorHighlightComponent, descendants: true, isSignal: true }, { propertyName: "cropTool", first: true, predicate: AXImageEditorCropComponent, descendants: true, isSignal: true }, { propertyName: "rotateTool", first: true, predicate: AXImageEditorRotateComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ax-toolbar class=\"ax-main-toolbar\">\n <ax-prefix class=\"ax-image-editor-tool-triggers\">\n <ng-content\n select=\"ax-image-editor-pen, ax-image-editor-highlight, ax-image-editor-crop, ax-image-editor-rotate\"\n ></ng-content>\n </ax-prefix>\n\n @if (service.activeToolState()) {\n <ax-suffix class=\"ax-image-editor-tool-options\">\n @switch (service.activeToolState()) {\n @case ('pen') {\n @if (penTool()) {\n <ax-image-editor-pen-options></ax-image-editor-pen-options>\n }\n }\n @case ('highlight') {\n @if (highlightTool()) {\n <ax-image-editor-highlight-options></ax-image-editor-highlight-options>\n }\n }\n @case ('crop') {\n @if (cropTool()) {\n <ax-image-editor-crop-options [aspectRatio]=\"cropAspectRatio()\"></ax-image-editor-crop-options>\n }\n }\n @case ('rotate') {\n @if (rotateTool()) {\n <ax-image-editor-rotate-options></ax-image-editor-rotate-options>\n }\n }\n }\n </ax-suffix>\n }\n</ax-toolbar>\n", styles: ["@layer components{ax-image-editor-tools-bar{width:100%;display:block}ax-image-editor-tools-bar.ax-image-editor-tools-bar-hidden{display:none}ax-image-editor-tools-bar .ax-main-toolbar{padding:calc(var(--spacing,.25rem) * 2);justify-content:space-between}ax-image-editor-tools-bar .ax-main-toolbar ax-divider{display:none}ax-image-editor-tools-bar .ax-main-toolbar>ax-suffix{flex:1;margin-left:auto}ax-image-editor-tools-bar .ax-image-editor-tool-triggers{justify-content:flex-start;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}ax-image-editor-tools-bar .ax-image-editor-tool-options{justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex:1;min-width:0;display:flex}ax-image-editor-tools-bar .ax-image-editor-crop-ratios{justify-content:flex-end;align-items:center;gap:var(--spacing,.25rem);flex-wrap:wrap;display:flex}ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}:is(ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options) ax-color-box{flex-shrink:0}:is(ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options) ax-range-slider{width:calc(var(--spacing,.25rem) * 40);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2)}:is(ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options) ax-range-slider .ax-range-slider .ax-range-slider-handler{height:calc(var(--spacing,.25rem) * 4)!important;width:calc(var(--spacing,.25rem) * 4)!important}ax-image-editor-tools-bar ax-image-editor-crop-options{justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}ax-image-editor-tools-bar ax-image-editor-rotate-options{align-items:center;gap:var(--spacing,.25rem);display:flex}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXToolBarModule }, { kind: "component", type: i2$1.AXToolBarComponent, selector: "ax-toolbar" }, { kind: "component", type: AXImageEditorPenOptionsComponent, selector: "ax-image-editor-pen-options" }, { kind: "component", type: AXImageEditorHighlightOptionsComponent, selector: "ax-image-editor-highlight-options" }, { kind: "component", type: AXImageEditorCropOptionsComponent, selector: "ax-image-editor-crop-options", inputs: ["aspectRatio"], outputs: ["cropPressed"] }, { kind: "component", type: AXImageEditorRotateOptionsComponent, selector: "ax-image-editor-rotate-options" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
901
975
  }
902
976
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXImageEditorToolsBarComponent, decorators: [{
903
977
  type: Component,
904
- args: [{ selector: 'ax-image-editor-tools-bar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
978
+ args: [{ selector: 'ax-image-editor-tools-bar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
979
+ '[class.ax-image-editor-tools-bar-hidden]': 'hidden()',
980
+ }, imports: [
905
981
  AXDecoratorModule,
906
982
  AXToolBarModule,
907
983
  AXImageEditorPenOptionsComponent,
908
984
  AXImageEditorHighlightOptionsComponent,
909
985
  AXImageEditorCropOptionsComponent,
910
986
  AXImageEditorRotateOptionsComponent,
911
- ], providers: [{ provide: AXComponent, useExisting: AXImageEditorToolsBarComponent }], template: "<ax-toolbar class=\"ax-main-toolbar\">\n <ax-prefix class=\"ax-image-editor-tool-triggers\">\n <ng-content\n select=\"ax-image-editor-pen, ax-image-editor-highlight, ax-image-editor-crop, ax-image-editor-rotate\"\n ></ng-content>\n </ax-prefix>\n\n @if (service.activeToolState()) {\n <ax-suffix class=\"ax-image-editor-tool-options\">\n @switch (service.activeToolState()) {\n @case ('pen') {\n @if (penTool()) {\n <ax-image-editor-pen-options></ax-image-editor-pen-options>\n }\n }\n @case ('highlight') {\n @if (highlightTool()) {\n <ax-image-editor-highlight-options></ax-image-editor-highlight-options>\n }\n }\n @case ('crop') {\n @if (cropTool()) {\n <ax-image-editor-crop-options [aspectRatio]=\"cropAspectRatio()\"></ax-image-editor-crop-options>\n }\n }\n @case ('rotate') {\n @if (rotateTool()) {\n <ax-image-editor-rotate-options></ax-image-editor-rotate-options>\n }\n }\n }\n </ax-suffix>\n }\n</ax-toolbar>\n", styles: ["@layer components{ax-image-editor-tools-bar{width:100%;display:block}ax-image-editor-tools-bar .ax-main-toolbar{padding:calc(var(--spacing,.25rem) * 2);justify-content:space-between}ax-image-editor-tools-bar .ax-main-toolbar>ax-suffix{flex:1;margin-left:auto}ax-image-editor-tools-bar .ax-image-editor-tool-triggers{justify-content:flex-start;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}ax-image-editor-tools-bar .ax-image-editor-tool-options{justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex:1;min-width:0;display:flex}ax-image-editor-tools-bar .ax-image-editor-crop-ratios{justify-content:flex-end;align-items:center;gap:var(--spacing,.25rem);flex-wrap:wrap;display:flex}ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}:is(ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options) ax-color-box{flex-shrink:0}:is(ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options) ax-range-slider{width:calc(var(--spacing,.25rem) * 40);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2)}:is(ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options) ax-range-slider .ax-range-slider .ax-range-slider-handler{height:calc(var(--spacing,.25rem) * 4)!important;width:calc(var(--spacing,.25rem) * 4)!important}ax-image-editor-tools-bar ax-image-editor-crop-options{justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}ax-image-editor-tools-bar ax-image-editor-rotate-options{align-items:center;gap:var(--spacing,.25rem);display:flex}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
912
- }], propDecorators: { active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], penTool: [{ type: i0.ContentChild, args: [i0.forwardRef(() => AXImageEditorPenComponent), { isSignal: true }] }], highlightTool: [{ type: i0.ContentChild, args: [i0.forwardRef(() => AXImageEditorHighlightComponent), { isSignal: true }] }], cropTool: [{ type: i0.ContentChild, args: [i0.forwardRef(() => AXImageEditorCropComponent), { isSignal: true }] }], rotateTool: [{ type: i0.ContentChild, args: [i0.forwardRef(() => AXImageEditorRotateComponent), { isSignal: true }] }] } });
987
+ ], providers: [{ provide: AXComponent, useExisting: AXImageEditorToolsBarComponent }], template: "<ax-toolbar class=\"ax-main-toolbar\">\n <ax-prefix class=\"ax-image-editor-tool-triggers\">\n <ng-content\n select=\"ax-image-editor-pen, ax-image-editor-highlight, ax-image-editor-crop, ax-image-editor-rotate\"\n ></ng-content>\n </ax-prefix>\n\n @if (service.activeToolState()) {\n <ax-suffix class=\"ax-image-editor-tool-options\">\n @switch (service.activeToolState()) {\n @case ('pen') {\n @if (penTool()) {\n <ax-image-editor-pen-options></ax-image-editor-pen-options>\n }\n }\n @case ('highlight') {\n @if (highlightTool()) {\n <ax-image-editor-highlight-options></ax-image-editor-highlight-options>\n }\n }\n @case ('crop') {\n @if (cropTool()) {\n <ax-image-editor-crop-options [aspectRatio]=\"cropAspectRatio()\"></ax-image-editor-crop-options>\n }\n }\n @case ('rotate') {\n @if (rotateTool()) {\n <ax-image-editor-rotate-options></ax-image-editor-rotate-options>\n }\n }\n }\n </ax-suffix>\n }\n</ax-toolbar>\n", styles: ["@layer components{ax-image-editor-tools-bar{width:100%;display:block}ax-image-editor-tools-bar.ax-image-editor-tools-bar-hidden{display:none}ax-image-editor-tools-bar .ax-main-toolbar{padding:calc(var(--spacing,.25rem) * 2);justify-content:space-between}ax-image-editor-tools-bar .ax-main-toolbar ax-divider{display:none}ax-image-editor-tools-bar .ax-main-toolbar>ax-suffix{flex:1;margin-left:auto}ax-image-editor-tools-bar .ax-image-editor-tool-triggers{justify-content:flex-start;align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}ax-image-editor-tools-bar .ax-image-editor-tool-options{justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex:1;min-width:0;display:flex}ax-image-editor-tools-bar .ax-image-editor-crop-ratios{justify-content:flex-end;align-items:center;gap:var(--spacing,.25rem);flex-wrap:wrap;display:flex}ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}:is(ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options) ax-color-box{flex-shrink:0}:is(ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options) ax-range-slider{width:calc(var(--spacing,.25rem) * 40);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2)}:is(ax-image-editor-tools-bar ax-image-editor-pen-options,ax-image-editor-tools-bar ax-image-editor-highlight-options) ax-range-slider .ax-range-slider .ax-range-slider-handler{height:calc(var(--spacing,.25rem) * 4)!important;width:calc(var(--spacing,.25rem) * 4)!important}ax-image-editor-tools-bar ax-image-editor-crop-options{justify-content:flex-end;align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;display:flex}ax-image-editor-tools-bar ax-image-editor-rotate-options{align-items:center;gap:var(--spacing,.25rem);display:flex}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
988
+ }], propDecorators: { active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], penTool: [{ type: i0.ContentChild, args: [i0.forwardRef(() => AXImageEditorPenComponent), { isSignal: true }] }], highlightTool: [{ type: i0.ContentChild, args: [i0.forwardRef(() => AXImageEditorHighlightComponent), { isSignal: true }] }], cropTool: [{ type: i0.ContentChild, args: [i0.forwardRef(() => AXImageEditorCropComponent), { isSignal: true }] }], rotateTool: [{ type: i0.ContentChild, args: [i0.forwardRef(() => AXImageEditorRotateComponent), { isSignal: true }] }] } });
913
989
 
914
990
  /**
915
991
  * Convenience wrapper that includes all image editor tools.
@@ -920,7 +996,7 @@ class AXImageEditorToolSelectorComponent {
920
996
  this.aspectRatio = input([], ...(ngDevMode ? [{ debugName: "aspectRatio" }] : /* istanbul ignore next */ []));
921
997
  }
922
998
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXImageEditorToolSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
923
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: AXImageEditorToolSelectorComponent, isStandalone: true, selector: "ax-image-editor-tool-selector", inputs: { aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXComponent, useExisting: AXImageEditorToolSelectorComponent }], ngImport: i0, template: "<ax-image-editor-tools-bar>\n <ax-image-editor-pen></ax-image-editor-pen>\n <ax-image-editor-highlight></ax-image-editor-highlight>\n <ax-image-editor-crop [aspectRatio]=\"aspectRatio()\"></ax-image-editor-crop>\n <ax-image-editor-rotate></ax-image-editor-rotate>\n</ax-image-editor-tools-bar>\n", dependencies: [{ kind: "component", type: AXImageEditorToolsBarComponent, selector: "ax-image-editor-tools-bar", inputs: ["active"] }, { kind: "component", type: AXImageEditorPenComponent, selector: "ax-image-editor-pen" }, { kind: "component", type: AXImageEditorHighlightComponent, selector: "ax-image-editor-highlight" }, { kind: "component", type: AXImageEditorCropComponent, selector: "ax-image-editor-crop", inputs: ["aspectRatio"] }, { kind: "component", type: AXImageEditorRotateComponent, selector: "ax-image-editor-rotate" }], encapsulation: i0.ViewEncapsulation.None }); }
999
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: AXImageEditorToolSelectorComponent, isStandalone: true, selector: "ax-image-editor-tool-selector", inputs: { aspectRatio: { classPropertyName: "aspectRatio", publicName: "aspectRatio", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: AXComponent, useExisting: AXImageEditorToolSelectorComponent }], ngImport: i0, template: "<ax-image-editor-tools-bar>\n <ax-image-editor-pen></ax-image-editor-pen>\n <ax-image-editor-highlight></ax-image-editor-highlight>\n <ax-image-editor-crop [aspectRatio]=\"aspectRatio()\"></ax-image-editor-crop>\n <ax-image-editor-rotate></ax-image-editor-rotate>\n</ax-image-editor-tools-bar>\n", dependencies: [{ kind: "component", type: AXImageEditorToolsBarComponent, selector: "ax-image-editor-tools-bar", inputs: ["active", "hidden"] }, { kind: "component", type: AXImageEditorPenComponent, selector: "ax-image-editor-pen" }, { kind: "component", type: AXImageEditorHighlightComponent, selector: "ax-image-editor-highlight" }, { kind: "component", type: AXImageEditorCropComponent, selector: "ax-image-editor-crop", inputs: ["aspectRatio", "size"] }, { kind: "component", type: AXImageEditorRotateComponent, selector: "ax-image-editor-rotate" }], encapsulation: i0.ViewEncapsulation.None }); }
924
1000
  }
925
1001
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXImageEditorToolSelectorComponent, decorators: [{
926
1002
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-image-editor.mjs","sources":["../../../../packages/components/image-editor/src/lib/image-editor.service.ts","../../../../packages/components/image-editor/src/lib/image-editor-cropper-window/image-editor-cropper-window.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-cropper-window/image-editor-cropper-window.component.html","../../../../packages/components/image-editor/src/lib/image-editor-view/image-editor-view.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-view/image-editor-view.component.html","../../../../packages/components/image-editor/src/lib/image-editor-container/image-editor-container.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-container/image-editor-container.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tool.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-history/image-editor-history.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-history/image-editor-history.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tools-bar/image-editor-tools-bar.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tools-bar/image-editor-tools-bar.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tool-selector/image-editor-tool-selector.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tool-selector/image-editor-tool-selector.component.html","../../../../packages/components/image-editor/src/lib/image-editor.module.ts","../../../../packages/components/image-editor/src/acorex-components-image-editor.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\n\nexport type AXImageEditorTool = 'pen' | 'highlight' | 'crop' | 'rotate';\n\n@Injectable()\nexport class AXImageEditorService {\n activeToolState = signal<AXImageEditorTool>(null);\n penColor = signal<string | CanvasGradient | CanvasPattern>('rgb(12, 12, 12)');\n highlightColor = signal<string | CanvasGradient | CanvasPattern>('rgb(255, 210, 48)');\n penWidth = signal<number>(10);\n highlightWidth = signal<number>(10);\n penType = signal<'pen' | 'highlight'>(null);\n rotate = signal({ state: 0, userInteract: false });\n isImageLoad = signal(false);\n newImage: HTMLImageElement | null = null;\n initialImage: HTMLImageElement | null = null;\n imageBlob = signal<Blob[]>([]);\n undoPressed = signal(false);\n redoPressed = signal(false);\n cropperRatio = signal<'1:1' | '16:9' | string>(null);\n\n toggleTool(tool: AXImageEditorTool) {\n if (this.activeToolState() === tool) {\n this.activeToolState.set(null);\n return;\n }\n\n this.activateTool(tool);\n }\n\n activateTool(tool: AXImageEditorTool) {\n this.activeToolState.set(tool);\n\n if (tool === 'pen' || tool === 'highlight') {\n this.penType.set(tool);\n }\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n PLATFORM_ID,\n Renderer2,\n signal,\n viewChild,\n ViewEncapsulation,\n} 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-cropper-window',\n templateUrl: './image-editor-cropper-window.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrl: './image-editor-cropper-window.component.compiled.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorCropperWindowComponent }],\n})\nexport class AXImageEditorCropperWindowComponent implements OnDestroy {\n readonly showGrid = input(true);\n\n protected service = inject(AXImageEditorService);\n private ngZone = inject(NgZone);\n private selectedHandle = signal<string>(null);\n private panState = signal(false);\n private elementRef: ElementRef = inject(ElementRef);\n protected cropperWindow = viewChild<ElementRef>('r');\n private currentX = signal(-45);\n private currentY = signal(-45);\n private prevX = signal(0);\n private prevY = signal(0);\n private aspectWidth = signal(0);\n private aspectHeight = signal(0);\n private isMousePressed = signal(false);\n protected renderer = inject(Renderer2);\n private platformID = inject(PLATFORM_ID);\n private mouseMoveEvent: () => void;\n private mouseUpEvent: () => void;\n private mouseMoveEvent2: () => void;\n private mouseUpEvent2: () => void;\n private mouseDownEvent: () => void;\n private mouseLeaveEvent: () => void;\n\n #eff = effect(() => {\n const host = this.elementRef.nativeElement as HTMLElement;\n let width: number;\n let height: number;\n const scale = 150;\n\n switch (this.service.cropperRatio()) {\n case '1:1':\n width = 1;\n height = 1;\n break;\n case '16:9':\n width = 1.777777777777778;\n height = 1;\n break;\n case null:\n width = 1;\n height = 1;\n break;\n default:\n [width, height] = this.service.cropperRatio().split(':').map(Number);\n }\n\n if (width >= height) {\n const aspect = width / height;\n width = aspect;\n height = 1;\n this.aspectWidth.set(aspect);\n this.aspectHeight.set(1);\n } else {\n const aspect = height / width;\n width = 1;\n height = aspect;\n this.aspectWidth.set(1);\n this.aspectHeight.set(aspect);\n }\n\n host.style.width = `${width * scale}px`;\n host.style.height = `${height * scale}px`;\n });\n\n #init = afterNextRender(() => {\n const host = this.elementRef.nativeElement as HTMLElement;\n\n this.ngZone.runOutsideAngular(() => {\n this.mouseMoveEvent = this.renderer.listen(document, 'pointermove', this.changeSizeHandler.bind(this));\n this.mouseUpEvent = this.renderer.listen(document, 'pointerup', this.clearSelector.bind(this));\n this.mouseDownEvent = this.renderer.listen(host, 'pointerdown', this.panDown.bind(this));\n this.mouseMoveEvent2 = this.renderer.listen(host, 'pointermove', this.panMove.bind(this));\n this.mouseUpEvent2 = this.renderer.listen(host, 'pointerup', this.panUp.bind(this));\n });\n });\n\n ngOnDestroy(): void {\n if (isPlatformBrowser(this.platformID) && this.mouseMoveEvent) {\n this.mouseMoveEvent();\n }\n if (isPlatformBrowser(this.platformID) && this.mouseUpEvent) {\n this.mouseUpEvent();\n }\n if (isPlatformBrowser(this.platformID) && this.mouseDownEvent) {\n this.mouseDownEvent();\n }\n if (isPlatformBrowser(this.platformID) && this.mouseMoveEvent2) {\n this.mouseMoveEvent2();\n }\n if (isPlatformBrowser(this.platformID) && this.mouseUpEvent2) {\n this.mouseUpEvent2();\n }\n if (isPlatformBrowser(this.platformID) && this.mouseLeaveEvent) {\n this.mouseLeaveEvent();\n }\n }\n\n #positionChange = effect(() => {\n this.setPosition(this.currentX(), this.currentY());\n });\n\n protected panMove(e: MouseEvent) {\n if (!this.isMousePressed()) return;\n if (this.selectedHandle()) return;\n if (!this.panState()) return;\n\n const currentX = e.clientX;\n const currentY = e.clientY;\n const deltaX = currentX - this.prevX();\n const deltaY = currentY - this.prevY();\n this.currentX.update((prev) => prev + deltaX);\n this.currentY.update((prev) => prev + deltaY);\n this.prevX.set(currentX);\n this.prevY.set(currentY);\n }\n\n protected panDown(e: MouseEvent) {\n this.isMousePressed.set(true);\n if (this.selectedHandle()) return;\n this.panState.set(true);\n this.prevX.set(e.clientX);\n this.prevY.set(e.clientY);\n }\n\n protected panUp() {\n this.isMousePressed.set(false);\n if (this.selectedHandle()) return;\n this.panState.set(false);\n }\n\n public getCropperArea() {\n return (this.elementRef.nativeElement as HTMLElement).getBoundingClientRect();\n }\n\n private setPosition(posX: number, posY: number) {\n const el = this.elementRef.nativeElement as HTMLElement;\n el.style.transform = `translate(${posX}px, ${posY}px)`;\n }\n\n private startX: number;\n private startY: number;\n private startWidth: number;\n private startHeight: number;\n private startLeft: number;\n private startTop: number;\n\n protected handleSelector(e: MouseEvent, value: string) {\n if (this.panState()) return;\n const host = this.elementRef.nativeElement as HTMLElement;\n this.startX = e.clientX;\n this.startY = e.clientY;\n this.startWidth = host.offsetWidth;\n this.startHeight = host.offsetHeight;\n this.startLeft = host.offsetLeft;\n this.startTop = host.offsetTop;\n this.selectedHandle.set(value);\n }\n\n protected changeSizeHandler(e: MouseEvent) {\n if (!this.isMousePressed()) return;\n if (this.panState()) return;\n if (!this.selectedHandle()) return;\n\n const host = this.elementRef.nativeElement as HTMLElement;\n const dy = e.clientY - this.startY;\n const dx = e.clientX - this.startX;\n\n let newWidth: number;\n let newHeight: number;\n\n const minSize = 20;\n\n switch (this.selectedHandle()) {\n case 'right':\n newWidth = Math.max(minSize, this.startWidth + dx);\n host.style.width = `${newWidth}px`;\n break;\n case 'top':\n newHeight = Math.max(minSize, this.startHeight - dy);\n host.style.height = `${newHeight}px`;\n host.style.top = `${this.startTop + (this.startHeight - newHeight)}px`;\n break;\n case 'left':\n newWidth = Math.max(minSize, this.startWidth - dx);\n host.style.width = `${newWidth}px`;\n host.style.left = `${this.startLeft + (this.startWidth - newWidth)}px`;\n break;\n case 'bottom':\n newHeight = Math.max(minSize, this.startHeight + dy);\n host.style.height = `${newHeight}px`;\n break;\n case 'right-top':\n if (this.service.cropperRatio()) {\n newWidth = Math.max(minSize, this.startWidth + dx);\n newHeight = (newWidth * this.aspectHeight()) / this.aspectWidth();\n if (newHeight < minSize) {\n newHeight = minSize;\n newWidth = (newHeight * this.aspectWidth()) / this.aspectHeight();\n }\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n host.style.top = `${this.startTop + (this.startHeight - newHeight)}px`;\n } else {\n newWidth = Math.max(minSize, this.startWidth + dx);\n newHeight = Math.max(minSize, this.startHeight - dy);\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n host.style.top = `${this.startTop + (this.startHeight - newHeight)}px`;\n }\n break;\n case 'bottom-right':\n if (this.service.cropperRatio()) {\n newWidth = Math.max(minSize, this.startWidth + dx);\n newHeight = (newWidth * this.aspectHeight()) / this.aspectWidth();\n if (newHeight < minSize) {\n newHeight = minSize;\n newWidth = (newHeight * this.aspectWidth()) / this.aspectHeight();\n }\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n } else {\n newWidth = Math.max(minSize, this.startWidth + dx);\n newHeight = Math.max(minSize, this.startHeight + dy);\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n }\n break;\n case 'bottom-left':\n if (this.service.cropperRatio()) {\n newWidth = Math.max(minSize, this.startWidth - dx);\n newHeight = (newWidth * this.aspectHeight()) / this.aspectWidth();\n if (newHeight < minSize) {\n newHeight = minSize;\n newWidth = (newHeight * this.aspectWidth()) / this.aspectHeight();\n }\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n host.style.left = `${this.startLeft + (this.startWidth - newWidth)}px`;\n } else {\n newWidth = Math.max(minSize, this.startWidth - dx);\n newHeight = Math.max(minSize, this.startHeight + dy);\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n host.style.left = `${this.startLeft + (this.startWidth - newWidth)}px`;\n }\n break;\n case 'left-top':\n if (this.service.cropperRatio()) {\n newWidth = Math.max(minSize, this.startWidth - dx);\n newHeight = (newWidth * this.aspectHeight()) / this.aspectWidth();\n if (newHeight < minSize) {\n newHeight = minSize;\n newWidth = (newHeight * this.aspectWidth()) / this.aspectHeight();\n }\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n host.style.left = `${this.startLeft + (this.startWidth - newWidth)}px`;\n host.style.top = `${this.startTop + (this.startHeight - newHeight)}px`;\n } else {\n newWidth = Math.max(minSize, this.startWidth - dx);\n newHeight = Math.max(minSize, this.startHeight - dy);\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n host.style.left = `${this.startLeft + (this.startWidth - newWidth)}px`;\n host.style.top = `${this.startTop + (this.startHeight - newHeight)}px`;\n }\n break;\n }\n }\n\n protected clearSelector() {\n if (this.panState()) return;\n this.selectedHandle.set(null);\n }\n}\n","<div [style.border]=\"!showGrid() ? '1px dashed white' : null\" #r class=\"ax-image-cropper-window-container\">\n @if (!service.cropperRatio()) {\n <div (pointerdown)=\"handleSelector($event, 'right')\" class=\"ax-image-right-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'top')\" class=\"ax-image-top-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left')\" class=\"ax-image-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom')\" class=\"ax-image-bottom-handle ax-handle-shape\"></div>\n }\n\n <div (pointerdown)=\"handleSelector($event, 'right-top')\" class=\"ax-image-right-top-handle ax-handle-shape\"></div>\n <div\n (pointerdown)=\"handleSelector($event, 'bottom-right')\"\n class=\"ax-image-bottom-right-handle ax-handle-shape\"\n ></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom-left')\" class=\"ax-image-bottom-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left-top')\" class=\"ax-image-left-top-handle ax-handle-shape\"></div>\n\n @if (showGrid()) {\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n }\n</div>\n","import { AXComponent, MXBaseComponent } from '@acorex/cdk/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n OnDestroy,\n Renderer2,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXImageEditorContainerComponent } from '../image-editor-container/image-editor-container.component';\nimport { AXImageEditorCropperWindowComponent } from '../image-editor-cropper-window/image-editor-cropper-window.component';\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.compiled.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXImageEditorCropperWindowComponent],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorViewComponent }],\n})\nexport class AXImageEditorViewComponent extends MXBaseComponent implements OnDestroy {\n /**\n * its change grid display state.\n */\n readonly showGrid = input(true);\n /**\n * its change grid display state.\n */\n readonly lockRatio = signal(false);\n /**\n * its receive image src.\n */\n readonly src = input<string>('');\n /** @ignore */\n protected canvasElem = viewChild<ElementRef<HTMLCanvasElement>>('canvasElem');\n /** @ignore */\n protected cropperWindow = viewChild<AXImageEditorCropperWindowComponent>('f');\n /** @ignore */\n protected ctx = signal<CanvasRenderingContext2D>(null);\n /** @ignore */\n protected service = inject(AXImageEditorService);\n /** @ignore */\n protected isMouseDown = signal(false);\n /** @ignore */\n protected isDrawRectangleCreated = signal(false);\n /** @ignore */\n protected parent = inject(AXImageEditorContainerComponent);\n /** @ignore */\n protected renderer = inject(Renderer2);\n /** @ignore */\n protected imageEditorHistory = signal<HTMLImageElement[]>([]);\n /** @ignore */\n protected imageEditorHistoryPointer = linkedSignal(() => this.imageEditorHistory().length - 1);\n\n /** @ignore */\n private resizeEventListener;\n /** @ignore */\n private imageLoadEventListener;\n\n private originalWidth = signal(0);\n private originalHeight = signal(0);\n private scale = signal(0);\n\n /** @ignore */\n protected resizeWindow() {\n this.canvasResponsive(this.service.newImage);\n }\n\n /** @ignore */\n protected canvasResponsive(image: HTMLImageElement) {\n const imageWidth = image.width;\n const imageHeight = image.height;\n\n this.originalWidth.set(imageWidth);\n this.originalHeight.set(imageHeight);\n\n if (imageWidth > imageHeight) {\n this.canvasElem().nativeElement.width = imageWidth;\n this.canvasElem().nativeElement.height = imageWidth;\n } else {\n this.canvasElem().nativeElement.width = imageHeight;\n this.canvasElem().nativeElement.height = imageHeight;\n }\n\n requestAnimationFrame(() => {\n //recalculate width after canvas size change\n const recalculateWidth = (this.canvasElem().nativeElement as HTMLElement).getClientRects()[0]?.width;\n\n let scale: number;\n if (imageWidth > imageHeight) {\n scale = this.originalWidth() / recalculateWidth;\n } else {\n scale = this.originalHeight() / recalculateWidth;\n }\n this.scale.set(scale);\n\n this.canvasElem().nativeElement.width = recalculateWidth;\n this.canvasElem().nativeElement.height = recalculateWidth;\n\n if (imageWidth > imageHeight) {\n this.ctx().drawImage(\n image,\n 0,\n recalculateWidth / 2 - this.originalHeight() / scale / 2,\n recalculateWidth,\n this.originalHeight() / scale,\n );\n } else {\n this.ctx().drawImage(\n image,\n recalculateWidth / 2 - this.originalWidth() / scale / 2,\n 0,\n this.originalWidth() / scale,\n recalculateWidth,\n );\n }\n });\n }\n\n /** @ignore */\n constructor() {\n super();\n\n afterNextRender(() => {\n this.resizeEventListener = this.renderer.listen(window, 'resize', this.resizeWindow.bind(this));\n //set canvas options\n this.ctx.set(this.canvasElem().nativeElement.getContext('2d', { willReadFrequently: true }));\n this.ctx().lineJoin = 'round';\n this.ctx().lineCap = 'round';\n });\n\n effect(() => {\n this.setInitialImage(this.src());\n });\n\n effect(() => {\n if (!this.service.undoPressed()) {\n this.imageChanged();\n }\n });\n\n effect(() => {\n if (!this.service.redoPressed()) {\n this.imageChanged();\n }\n });\n\n effect(() => {\n if (!this.service.rotate().userInteract || !this.ctx()) return;\n this.rotateImage();\n });\n }\n\n /** @ignore */\n ngOnDestroy(): void {\n if (this.resizeEventListener) {\n this.resizeEventListener();\n }\n\n if (this.imageLoadEventListener) {\n this.imageLoadEventListener();\n }\n }\n\n private setInitialImage(src: string, replaceHistory = true) {\n this.service.initialImage = new Image();\n this.service.initialImage.src = src;\n this.service.initialImage.crossOrigin = 'anonymous';\n this.imageLoadEventListener = this.renderer.listen(this.service.initialImage, 'load', () => {\n this.service.newImage = this.service.initialImage;\n this.service.isImageLoad.set(true);\n this.canvasResponsive(this.service.initialImage);\n if (replaceHistory) {\n this.imageEditorHistory.set([this.service.initialImage]);\n } else {\n this.imageEditorHistory.update((prev) => [...prev, this.service.initialImage]);\n }\n });\n }\n\n /** @ignore */\n protected imageChanged() {\n if (this.service.undoPressed() && this.imageEditorHistoryPointer() >= 1) {\n this.imageEditorHistoryPointer.update((prev) => prev - 1);\n\n this.service.newImage = this.imageEditorHistory()[this.imageEditorHistoryPointer()];\n this.canvasResponsive(this.imageEditorHistory()[this.imageEditorHistoryPointer()]);\n }\n\n if (this.service.redoPressed() && this.imageEditorHistoryPointer() < this.imageEditorHistory().length - 1) {\n this.imageEditorHistoryPointer.update((prev) => prev + 1);\n this.service.newImage = this.imageEditorHistory()[this.imageEditorHistoryPointer()];\n this.canvasResponsive(this.imageEditorHistory()[this.imageEditorHistoryPointer()]);\n }\n\n this.service.undoPressed.set(false);\n this.service.redoPressed.set(false);\n }\n\n /** @ignore */\n protected penConfigHandler(penType: 'pen' | 'highlight') {\n switch (penType) {\n case 'pen':\n this.ctx().globalAlpha = 1;\n this.ctx().strokeStyle = this.service.penColor();\n this.ctx().lineWidth = this.service.penWidth();\n break;\n case 'highlight':\n this.ctx().globalAlpha = 0.008;\n this.ctx().strokeStyle = this.service.highlightColor();\n this.ctx().lineWidth = this.service.highlightWidth();\n break;\n }\n }\n\n /** @ignore */\n protected mouseDownHandler(e: MouseEvent) {\n this.isMouseDown.set(true);\n if (!this.service.penType()) return;\n\n this.penConfigHandler(this.service.penType());\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 /** @ignore */\n protected mouseMoveHandler(e: MouseEvent) {\n if (!this.isMouseDown()) return;\n if (!this.service.penType()) return;\n this.ctx().lineTo(e.offsetX, e.offsetY);\n this.ctx().stroke();\n }\n\n /** @ignore */\n protected mouseUpHandler() {\n this.isMouseDown.set(false);\n this.ctx().closePath();\n this.saveImageChange();\n }\n\n /** @ignore */\n cropButtonHandler() {\n const cropRect = this.cropperWindow().getCropperArea();\n const canvasRect = this.canvasElem().nativeElement.getClientRects()[0];\n const dx = cropRect.x - canvasRect.x;\n const dy = cropRect.y - canvasRect.y;\n\n const imageData = this.ctx().getImageData(dx, dy, cropRect.width, cropRect.height);\n this.canvasElem().nativeElement.width = cropRect.width;\n this.canvasElem().nativeElement.height = cropRect.height;\n this.ctx().putImageData(imageData, 0, 0);\n const cropImage = this.canvasElem().nativeElement.toDataURL('image/jpeg', 1);\n\n this.setInitialImage(cropImage, false);\n this.service.activeToolState.set(null);\n this.saveImageChange();\n }\n\n /** @ignore */\n protected rotateImage() {\n this.ctx().globalAlpha = 1;\n this.ctx().save();\n this.ctx().clearRect(0, 0, this.canvasElem().nativeElement.width, this.canvasElem().nativeElement.height);\n\n // Calculate scale factor to fit rotated image within canvas\n const rotationAngle = (this.service.rotate().state * Math.PI) / 180;\n const cos = Math.abs(Math.cos(rotationAngle));\n const sin = Math.abs(Math.sin(rotationAngle));\n\n const rotatedWidth = this.service.newImage.width * cos + this.service.newImage.height * sin;\n const rotatedHeight = this.service.newImage.width * sin + this.service.newImage.height * cos;\n\n const scaleX = this.canvasElem().nativeElement.width / rotatedWidth;\n const scaleY = this.canvasElem().nativeElement.height / rotatedHeight;\n const scale = Math.min(scaleX, scaleY);\n\n this.ctx().translate(this.canvasElem().nativeElement.width / 2, this.canvasElem().nativeElement.height / 2);\n this.ctx().rotate(rotationAngle);\n this.ctx().scale(scale, scale);\n\n this.ctx().drawImage(this.service.newImage, -this.service.newImage.width / 2, -this.service.newImage.height / 2);\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 async saveImageChange() {\n const canvas = this.canvasElem().nativeElement as HTMLCanvasElement;\n\n const newImage = new Image();\n newImage.crossOrigin = 'anonymous';\n newImage.src = canvas.toDataURL('image/jpeg', 1);\n this.service.newImage = newImage;\n this.imageEditorHistory.update((prev) => [...prev, newImage]);\n\n const canvasToBlob = (type: string, quality?: number): Promise<Blob> => {\n return new Promise((resolve, reject) => {\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject(new Error(`toBlob returned null for type ${type}`));\n }\n },\n type,\n quality,\n );\n });\n };\n\n const blobs = await Promise.all([\n canvasToBlob('image/jpeg', 1),\n canvasToBlob('image/png', 1),\n canvasToBlob('image/webp', 1),\n ]);\n\n this.service.imageBlob.set(blobs);\n }\n}\n","<canvas\n tabindex=\"1\"\n (pointerdown)=\"mouseDownHandler($event)\"\n (pointerup)=\"mouseUpHandler()\"\n (pointermove)=\"mouseMoveHandler($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n></canvas>\n\n@if (this.service.activeToolState() === 'crop') {\n <ax-image-editor-cropper-window [showGrid]=\"showGrid()\" #f></ax-image-editor-cropper-window>\n}\n","import {\n AXComponent,\n AXFocusableComponent,\n AXValuableComponent,\n MXInputBaseValueComponent,\n MXLookComponent,\n} from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingSpinnerComponent } from '@acorex/components/loading';\n\nimport {\n Component,\n contentChild,\n effect,\n ElementRef,\n forwardRef,\n HostBinding,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { classes } from 'polytype';\nimport { AXImageEditorViewComponent } from '../image-editor-view/image-editor-view.component';\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.compiled.css',\n encapsulation: ViewEncapsulation.None,\n outputs: ['onValueChanged'],\n inputs: ['look', 'disabled'],\n providers: [\n AXImageEditorService,\n { provide: AXComponent, useExisting: AXImageEditorContainerComponent },\n { provide: AXFocusableComponent, useExisting: AXImageEditorContainerComponent },\n { provide: AXValuableComponent, useExisting: AXImageEditorContainerComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXImageEditorContainerComponent),\n multi: true,\n },\n ],\n imports: [AXDecoratorModule, AXLoadingSpinnerComponent],\n})\nexport class AXImageEditorContainerComponent extends classes(MXInputBaseValueComponent<Blob[]>, MXLookComponent) {\n /** @ignore */\n protected service = inject(AXImageEditorService);\n\n imageEditorContainer = viewChild<ElementRef>('f');\n\n view = contentChild<AXImageEditorViewComponent>(AXImageEditorViewComponent);\n\n #eff = effect(() => {\n void this.service.imageBlob();\n if (this.service.imageBlob().length) {\n this.commitValue(this.service.imageBlob(), true);\n } else {\n this.commitValue(null);\n }\n });\n\n @HostBinding('class')\n get __hostClass(): string {\n if (this.disabled) return 'ax-state-disabled';\n return '';\n }\n\n @HostBinding('attr.name')\n private get __hostName(): string {\n return this.name;\n }\n}\n","@if (service.isImageLoad()) {\n <div #f class=\"ax-editor-container ax-default {{ look }}\">\n <ng-content select=\"ax-header\"></ng-content>\n\n <ng-content select=\"ax-image-editor-view\"> </ng-content>\n\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n <div class=\"ax-error-container\"></div>\n} @else {\n <div class=\"ax-loading-spinner-container\">\n <ax-loading-spinner [size]=\"16\" color=\"primary\" text=\"Loading Image ...\"></ax-loading-spinner>\n </div>\n}\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n\n@if (disabled) {\n <div class=\"ax-disable-overlay\"></div>\n}\n","import { inject } from '@angular/core';\nimport { AXImageEditorService, AXImageEditorTool } from '../image-editor.service';\n\n/**\n * Base class for image editor tool trigger components.\n * @category Components\n */\nexport abstract class AXImageEditorToolComponent {\n protected service = inject(AXImageEditorService);\n\n abstract readonly tool: AXImageEditorTool;\n\n setActive(): void {\n this.service.activateTool(this.tool);\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Crop tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-crop',\n templateUrl: './image-editor-crop.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorCropComponent }],\n})\nexport class AXImageEditorCropComponent extends AXImageEditorToolComponent {\n readonly tool = 'crop';\n\n aspectRatio = input<string[]>([]);\n}\n","<ax-button\n [axTooltip]=\"'@acorex:image-editor.crop' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('crop')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'crop'\"\n [color]=\"service.activeToolState() === 'crop' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Highlight tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-highlight',\n templateUrl: './image-editor-highlight.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorHighlightComponent }],\n})\nexport class AXImageEditorHighlightComponent extends AXImageEditorToolComponent {\n readonly tool = 'highlight';\n}\n","<ax-button\n [axTooltip]=\"'@acorex:paint.tools.highlight' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('highlight')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'highlight'\"\n [color]=\"service.activeToolState() === 'highlight' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, 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-history',\n templateUrl: './image-editor-history.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AXTooltipDirective, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorHistoryComponent }],\n})\nexport class AXImageEditorHistoryComponent {\n protected service = inject(AXImageEditorService);\n\n protected UndoHandler() {\n this.service.undoPressed.set(true);\n }\n protected RedoHandler() {\n this.service.redoPressed.set(true);\n }\n}\n","<div class=\"flex\">\n <ax-button\n class=\"ax-sm\"\n [axTooltip]=\"'@acorex:image-editor.undo' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"UndoHandler()\"\n look=\"blank\"\n >\n <ax-icon class=\"ax-icon ax-icon-undo\"></ax-icon>\n </ax-button>\n\n <ax-button\n class=\"ax-sm\"\n [axTooltip]=\"'@acorex:image-editor.redo' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"RedoHandler()\"\n look=\"blank\"\n >\n <ax-icon class=\"ax-icon ax-icon-redo\"></ax-icon>\n </ax-button>\n</div>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Pen tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-pen',\n templateUrl: './image-editor-pen.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorPenComponent }],\n})\nexport class AXImageEditorPenComponent extends AXImageEditorToolComponent {\n readonly tool = 'pen';\n}\n","<ax-button\n [axTooltip]=\"'@acorex:paint.tools.pen' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('pen')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'pen'\"\n [color]=\"service.activeToolState() === 'pen' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Rotate tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-rotate',\n templateUrl: './image-editor-rotate.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXTooltipDirective, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorRotateComponent }],\n})\nexport class AXImageEditorRotateComponent extends AXImageEditorToolComponent {\n readonly tool = 'rotate';\n}\n","<ax-button\n [axTooltip]=\"'@acorex:image-editor.rotate' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('rotate')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'rotate'\"\n [color]=\"service.activeToolState() === 'rotate' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <i class=\"fa-solid fa-rotate\"></i>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorContainerComponent } from '../../image-editor-container/image-editor-container.component';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-crop-options',\n templateUrl: './image-editor-crop-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AsyncPipe, AXTranslatorPipe],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorCropOptionsComponent }],\n})\nexport class AXImageEditorCropOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n private container = inject(AXImageEditorContainerComponent);\n\n cropPressed = output();\n\n aspectRatio = input<string[]>([]);\n\n protected cropButtonHandler() {\n this.cropPressed.emit();\n this.container.view()?.cropButtonHandler();\n }\n\n protected ratioHandler(r: '1:1' | '16:9' | string) {\n if (this.service.cropperRatio() === r) {\n this.service.cropperRatio.set(null);\n } else {\n this.service.cropperRatio.set(r);\n }\n }\n}\n","<div class=\"ax-image-editor-crop-ratios\">\n @for (item of aspectRatio(); track $index) {\n <ax-button\n [selected]=\"service.cropperRatio() === item\"\n [color]=\"service.cropperRatio() === item ? 'primary' : 'default'\"\n (click)=\"ratioHandler(item)\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"item\"\n ></ax-button>\n } @empty {\n <ax-button\n [selected]=\"service.cropperRatio() === '1:1'\"\n [color]=\"service.cropperRatio() === '1:1' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('1:1')\"\n class=\"ax-crop-save ax-sm\"\n text=\"1:1\"\n ></ax-button>\n <ax-button\n [selected]=\"service.cropperRatio() === '16:9'\"\n [color]=\"service.cropperRatio() === '16:9' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('16:9')\"\n class=\"ax-crop-save ax-sm\"\n text=\"16:9\"\n ></ax-button>\n }\n</div>\n\n<ax-button\n (click)=\"cropButtonHandler()\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"'@acorex:image-editor.crop' | translate | async\"\n color=\"primary\"\n></ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXColorBoxComponent } from '@acorex/components/color-box';\nimport { AXRangeSliderComponent } from '@acorex/components/range-slider';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-highlight-options',\n templateUrl: './image-editor-highlight-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXColorBoxComponent,\n FormsModule,\n AXRangeSliderComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXTooltipModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorHighlightOptionsComponent }],\n})\nexport class AXImageEditorHighlightOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected selectedColor = signal(this.service.highlightColor());\n\n /** @ignore */\n protected value = this.service.highlightWidth();\n\n protected changeColorHandler(e: string) {\n this.service.highlightColor.set(e);\n this.selectedColor.set(e);\n }\n\n /** @ignore */\n protected valueHandler(e: number) {\n this.service.highlightWidth.set(e);\n }\n}\n","<ax-color-box\n [showValue]=\"false\"\n [showIcon]=\"false\"\n [axTooltip]=\"'@acorex:paint.tools.highlight' | translate | async\"\n axTooltipPlacement=\"top\"\n look=\"none\"\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"changeColorHandler($event)\"\n>\n</ax-color-box>\n\n<ax-range-slider [min]=\"2\" [max]=\"20\" [(ngModel)]=\"value\" (ngModelChange)=\"valueHandler($event)\"></ax-range-slider>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXColorBoxComponent } from '@acorex/components/color-box';\nimport { AXRangeSliderComponent } from '@acorex/components/range-slider';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-pen-options',\n templateUrl: './image-editor-pen-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXColorBoxComponent,\n FormsModule,\n AXRangeSliderComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXTooltipModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorPenOptionsComponent }],\n})\nexport class AXImageEditorPenOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected value = this.service.penWidth();\n\n /** @ignore */\n protected selectedColor = signal(this.service.penColor());\n\n protected changeColorHandler(e: string) {\n this.service.penColor.set(e);\n this.selectedColor.set(e);\n }\n\n /** @ignore */\n protected valueHandler(e: number) {\n this.service.penWidth.set(e);\n }\n}\n","<ax-color-box\n [showValue]=\"false\"\n [showIcon]=\"false\"\n [axTooltip]=\"'@acorex:paint.tools.pen' | translate | async\"\n axTooltipPlacement=\"top\"\n look=\"none\"\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"changeColorHandler($event)\"\n>\n</ax-color-box>\n\n<ax-range-slider [min]=\"2\" [max]=\"20\" [(ngModel)]=\"value\" (ngModelChange)=\"valueHandler($event)\"></ax-range-slider>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-rotate-options',\n templateUrl: './image-editor-rotate-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXButtonComponent,\n AXTooltipDirective,\n AXDecoratorIconComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXTooltipModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorRotateOptionsComponent }],\n})\nexport class AXImageEditorRotateOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n protected rotateRightHandler() {\n this.service.rotate.set({ state: 90, userInteract: true });\n }\n\n protected rotateLeftHandler() {\n this.service.rotate.set({ state: -90, userInteract: true });\n }\n}\n","<ax-button\n [axTooltip]=\"'@acorex:image-editor.rotate-left' | translate | async\"\n axTooltipPlacement=\"top\"\n (click)=\"rotateLeftHandler()\"\n look=\"blank\"\n>\n <ax-icon class=\"ax-icon ax-icon-arrow-turn-left\"></ax-icon>\n</ax-button>\n\n<ax-button\n [axTooltip]=\"'@acorex:image-editor.rotate-right' | translate | async\"\n axTooltipPlacement=\"top\"\n (click)=\"rotateRightHandler()\"\n look=\"blank\"\n>\n <ax-icon class=\"ax-icon ax-icon-arrow-turn-right\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { ChangeDetectionStrategy, Component, computed, contentChild, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\nimport { AXImageEditorCropComponent } from '../image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorCropOptionsComponent } from '../image-editor-crop/image-editor-crop-options.component';\nimport { AXImageEditorHighlightComponent } from '../image-editor-highlight/image-editor-highlight.component';\nimport { AXImageEditorHighlightOptionsComponent } from '../image-editor-highlight/image-editor-highlight-options.component';\nimport { AXImageEditorPenComponent } from '../image-editor-pen/image-editor-pen.component';\nimport { AXImageEditorPenOptionsComponent } from '../image-editor-pen/image-editor-pen-options.component';\nimport { AXImageEditorRotateComponent } from '../image-editor-rotate/image-editor-rotate.component';\nimport { AXImageEditorRotateOptionsComponent } from '../image-editor-rotate/image-editor-rotate-options.component';\n\n/**\n * Toolbar layout for configurable image editor tools.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-tools-bar',\n templateUrl: './image-editor-tools-bar.component.html',\n styleUrl: './image-editor-tools-bar.component.compiled.css',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXDecoratorModule,\n AXToolBarModule,\n AXImageEditorPenOptionsComponent,\n AXImageEditorHighlightOptionsComponent,\n AXImageEditorCropOptionsComponent,\n AXImageEditorRotateOptionsComponent,\n ],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorToolsBarComponent }],\n})\nexport class AXImageEditorToolsBarComponent {\n protected service = inject(AXImageEditorService);\n\n /**\n * Tool component reference to activate on load.\n */\n active = input<AXImageEditorToolComponent>();\n\n protected penTool = contentChild(AXImageEditorPenComponent);\n protected highlightTool = contentChild(AXImageEditorHighlightComponent);\n protected cropTool = contentChild(AXImageEditorCropComponent);\n protected rotateTool = contentChild(AXImageEditorRotateComponent);\n\n protected cropAspectRatio = computed(() => this.cropTool()?.aspectRatio() ?? []);\n\n #activeEffect = effect(() => {\n this.active()?.setActive();\n });\n}\n","<ax-toolbar class=\"ax-main-toolbar\">\n <ax-prefix class=\"ax-image-editor-tool-triggers\">\n <ng-content\n select=\"ax-image-editor-pen, ax-image-editor-highlight, ax-image-editor-crop, ax-image-editor-rotate\"\n ></ng-content>\n </ax-prefix>\n\n @if (service.activeToolState()) {\n <ax-suffix class=\"ax-image-editor-tool-options\">\n @switch (service.activeToolState()) {\n @case ('pen') {\n @if (penTool()) {\n <ax-image-editor-pen-options></ax-image-editor-pen-options>\n }\n }\n @case ('highlight') {\n @if (highlightTool()) {\n <ax-image-editor-highlight-options></ax-image-editor-highlight-options>\n }\n }\n @case ('crop') {\n @if (cropTool()) {\n <ax-image-editor-crop-options [aspectRatio]=\"cropAspectRatio()\"></ax-image-editor-crop-options>\n }\n }\n @case ('rotate') {\n @if (rotateTool()) {\n <ax-image-editor-rotate-options></ax-image-editor-rotate-options>\n }\n }\n }\n </ax-suffix>\n }\n</ax-toolbar>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorCropComponent } from '../image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorHighlightComponent } from '../image-editor-highlight/image-editor-highlight.component';\nimport { AXImageEditorPenComponent } from '../image-editor-pen/image-editor-pen.component';\nimport { AXImageEditorRotateComponent } from '../image-editor-rotate/image-editor-rotate.component';\nimport { AXImageEditorToolsBarComponent } from '../image-editor-tools-bar/image-editor-tools-bar.component';\n\n/**\n * Convenience wrapper that includes all image editor tools.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-tool-selector',\n templateUrl: './image-editor-tool-selector.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXImageEditorToolsBarComponent,\n AXImageEditorPenComponent,\n AXImageEditorHighlightComponent,\n AXImageEditorCropComponent,\n AXImageEditorRotateComponent,\n ],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorToolSelectorComponent }],\n})\nexport class AXImageEditorToolSelectorComponent {\n aspectRatio = input<string[]>([]);\n}\n","<ax-image-editor-tools-bar>\n <ax-image-editor-pen></ax-image-editor-pen>\n <ax-image-editor-highlight></ax-image-editor-highlight>\n <ax-image-editor-crop [aspectRatio]=\"aspectRatio()\"></ax-image-editor-crop>\n <ax-image-editor-rotate></ax-image-editor-rotate>\n</ax-image-editor-tools-bar>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXColorBoxModule } from '@acorex/components/color-box';\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 { AXImageEditorCropperWindowComponent } from './image-editor-cropper-window/image-editor-cropper-window.component';\nimport { AXImageEditorCropComponent } from './image-editor-tools/image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorHighlightComponent } from './image-editor-tools/image-editor-highlight/image-editor-highlight.component';\nimport { AXImageEditorHistoryComponent } from './image-editor-tools/image-editor-history/image-editor-history.component';\nimport { AXImageEditorPenComponent } from './image-editor-tools/image-editor-pen/image-editor-pen.component';\nimport { AXImageEditorRotateComponent } from './image-editor-tools/image-editor-rotate/image-editor-rotate.component';\nimport { AXImageEditorToolSelectorComponent } from './image-editor-tools/image-editor-tool-selector/image-editor-tool-selector.component';\nimport { AXImageEditorToolsBarComponent } from './image-editor-tools/image-editor-tools-bar/image-editor-tools-bar.component';\nimport { AXImageEditorViewComponent } from './image-editor-view/image-editor-view.component';\n\nconst COMPONENT = [\n AXImageEditorViewComponent,\n AXImageEditorContainerComponent,\n AXImageEditorCropComponent,\n AXImageEditorHistoryComponent,\n AXImageEditorToolSelectorComponent,\n AXImageEditorToolsBarComponent,\n AXImageEditorPenComponent,\n AXImageEditorHighlightComponent,\n AXImageEditorRotateComponent,\n AXImageEditorCropperWindowComponent,\n];\n\nconst MODULES = [\n AXButtonModule,\n FormsModule,\n AXRangeSliderModule,\n AXSelectBoxModule,\n AXColorBoxModule,\n AXPopoverModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXDialogModule,\n];\n\n@NgModule({\n imports: [...MODULES, ...COMPONENT],\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"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-components-image-editor.mjs","sources":["../../../../packages/components/image-editor/src/lib/image-editor.service.ts","../../../../packages/components/image-editor/src/lib/image-editor-cropper-window/image-editor-cropper-window.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-cropper-window/image-editor-cropper-window.component.html","../../../../packages/components/image-editor/src/lib/image-editor-view/image-editor-view.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-view/image-editor-view.component.html","../../../../packages/components/image-editor/src/lib/image-editor-container/image-editor-container.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-container/image-editor-container.component.html","../../../../packages/components/image-editor/src/lib/image-editor-aspect-ratio.util.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tool.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-history/image-editor-history.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-history/image-editor-history.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-crop/image-editor-crop-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-highlight/image-editor-highlight-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-pen/image-editor-pen-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate-options.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-rotate/image-editor-rotate-options.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tools-bar/image-editor-tools-bar.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tools-bar/image-editor-tools-bar.component.html","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tool-selector/image-editor-tool-selector.component.ts","../../../../packages/components/image-editor/src/lib/image-editor-tools/image-editor-tool-selector/image-editor-tool-selector.component.html","../../../../packages/components/image-editor/src/lib/image-editor.module.ts","../../../../packages/components/image-editor/src/acorex-components-image-editor.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\n\nexport type AXImageEditorTool = 'pen' | 'highlight' | 'crop' | 'rotate';\n\n@Injectable()\nexport class AXImageEditorService {\n activeToolState = signal<AXImageEditorTool>(null);\n penColor = signal<string | CanvasGradient | CanvasPattern>('rgb(12, 12, 12)');\n highlightColor = signal<string | CanvasGradient | CanvasPattern>('rgb(255, 210, 48)');\n penWidth = signal<number>(10);\n highlightWidth = signal<number>(10);\n penType = signal<'pen' | 'highlight'>(null);\n rotate = signal({ state: 0, userInteract: false });\n isImageLoad = signal(false);\n newImage: HTMLImageElement | null = null;\n initialImage: HTMLImageElement | null = null;\n imageBlob = signal<Blob[]>([]);\n undoPressed = signal(false);\n redoPressed = signal(false);\n cropperRatio = signal<'1:1' | '16:9' | string>(null);\n cropperSize = signal(150);\n\n toggleTool(tool: AXImageEditorTool) {\n if (this.activeToolState() === tool) {\n this.activeToolState.set(null);\n return;\n }\n\n this.activateTool(tool);\n }\n\n activateTool(tool: AXImageEditorTool) {\n this.activeToolState.set(tool);\n\n if (tool === 'pen' || tool === 'highlight') {\n this.penType.set(tool);\n }\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n PLATFORM_ID,\n Renderer2,\n signal,\n viewChild,\n ViewEncapsulation,\n} 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-cropper-window',\n templateUrl: './image-editor-cropper-window.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrl: './image-editor-cropper-window.component.compiled.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorCropperWindowComponent }],\n})\nexport class AXImageEditorCropperWindowComponent implements OnDestroy {\n readonly showGrid = input(true);\n\n /** Base size in pixels used to calculate the initial cropper window dimensions. */\n readonly size = input<number>();\n\n protected service = inject(AXImageEditorService);\n private ngZone = inject(NgZone);\n private selectedHandle = signal<string>(null);\n private panState = signal(false);\n private elementRef: ElementRef = inject(ElementRef);\n protected cropperWindow = viewChild<ElementRef>('r');\n private currentX = signal(-45);\n private currentY = signal(-45);\n private prevX = signal(0);\n private prevY = signal(0);\n private aspectWidth = signal(0);\n private aspectHeight = signal(0);\n private isMousePressed = signal(false);\n protected renderer = inject(Renderer2);\n private platformID = inject(PLATFORM_ID);\n private mouseMoveEvent: () => void;\n private mouseUpEvent: () => void;\n private mouseMoveEvent2: () => void;\n private mouseUpEvent2: () => void;\n private mouseDownEvent: () => void;\n private mouseLeaveEvent: () => void;\n\n #eff = effect(() => {\n const host = this.elementRef.nativeElement as HTMLElement;\n let width: number;\n let height: number;\n const scale = this.size() ?? this.service.cropperSize();\n\n switch (this.service.cropperRatio()) {\n case '1:1':\n width = 1;\n height = 1;\n break;\n case '16:9':\n width = 1.777777777777778;\n height = 1;\n break;\n case null:\n width = 1;\n height = 1;\n break;\n default:\n [width, height] = this.service.cropperRatio().split(':').map(Number);\n }\n\n if (width >= height) {\n const aspect = width / height;\n width = aspect;\n height = 1;\n this.aspectWidth.set(aspect);\n this.aspectHeight.set(1);\n } else {\n const aspect = height / width;\n width = 1;\n height = aspect;\n this.aspectWidth.set(1);\n this.aspectHeight.set(aspect);\n }\n\n host.style.width = `${width * scale}px`;\n host.style.height = `${height * scale}px`;\n });\n\n #init = afterNextRender(() => {\n const host = this.elementRef.nativeElement as HTMLElement;\n\n this.ngZone.runOutsideAngular(() => {\n this.mouseMoveEvent = this.renderer.listen(document, 'pointermove', this.changeSizeHandler.bind(this));\n this.mouseUpEvent = this.renderer.listen(document, 'pointerup', this.clearSelector.bind(this));\n this.mouseDownEvent = this.renderer.listen(host, 'pointerdown', this.panDown.bind(this));\n this.mouseMoveEvent2 = this.renderer.listen(host, 'pointermove', this.panMove.bind(this));\n this.mouseUpEvent2 = this.renderer.listen(host, 'pointerup', this.panUp.bind(this));\n });\n });\n\n ngOnDestroy(): void {\n if (isPlatformBrowser(this.platformID) && this.mouseMoveEvent) {\n this.mouseMoveEvent();\n }\n if (isPlatformBrowser(this.platformID) && this.mouseUpEvent) {\n this.mouseUpEvent();\n }\n if (isPlatformBrowser(this.platformID) && this.mouseDownEvent) {\n this.mouseDownEvent();\n }\n if (isPlatformBrowser(this.platformID) && this.mouseMoveEvent2) {\n this.mouseMoveEvent2();\n }\n if (isPlatformBrowser(this.platformID) && this.mouseUpEvent2) {\n this.mouseUpEvent2();\n }\n if (isPlatformBrowser(this.platformID) && this.mouseLeaveEvent) {\n this.mouseLeaveEvent();\n }\n }\n\n #positionChange = effect(() => {\n this.setPosition(this.currentX(), this.currentY());\n });\n\n protected panMove(e: MouseEvent) {\n if (!this.isMousePressed()) return;\n if (this.selectedHandle()) return;\n if (!this.panState()) return;\n\n const currentX = e.clientX;\n const currentY = e.clientY;\n const deltaX = currentX - this.prevX();\n const deltaY = currentY - this.prevY();\n this.currentX.update((prev) => prev + deltaX);\n this.currentY.update((prev) => prev + deltaY);\n this.prevX.set(currentX);\n this.prevY.set(currentY);\n }\n\n protected panDown(e: MouseEvent) {\n this.isMousePressed.set(true);\n if (this.selectedHandle()) return;\n this.panState.set(true);\n this.prevX.set(e.clientX);\n this.prevY.set(e.clientY);\n }\n\n protected panUp() {\n this.isMousePressed.set(false);\n if (this.selectedHandle()) return;\n this.panState.set(false);\n }\n\n public getCropperArea() {\n return (this.elementRef.nativeElement as HTMLElement).getBoundingClientRect();\n }\n\n private setPosition(posX: number, posY: number) {\n const el = this.elementRef.nativeElement as HTMLElement;\n el.style.transform = `translate(${posX}px, ${posY}px)`;\n }\n\n private startX: number;\n private startY: number;\n private startWidth: number;\n private startHeight: number;\n private startLeft: number;\n private startTop: number;\n\n protected handleSelector(e: MouseEvent, value: string) {\n if (this.panState()) return;\n const host = this.elementRef.nativeElement as HTMLElement;\n this.startX = e.clientX;\n this.startY = e.clientY;\n this.startWidth = host.offsetWidth;\n this.startHeight = host.offsetHeight;\n this.startLeft = host.offsetLeft;\n this.startTop = host.offsetTop;\n this.selectedHandle.set(value);\n }\n\n protected changeSizeHandler(e: MouseEvent) {\n if (!this.isMousePressed()) return;\n if (this.panState()) return;\n if (!this.selectedHandle()) return;\n\n const host = this.elementRef.nativeElement as HTMLElement;\n const dy = e.clientY - this.startY;\n const dx = e.clientX - this.startX;\n\n let newWidth: number;\n let newHeight: number;\n\n const minSize = 20;\n\n switch (this.selectedHandle()) {\n case 'right':\n newWidth = Math.max(minSize, this.startWidth + dx);\n host.style.width = `${newWidth}px`;\n break;\n case 'top':\n newHeight = Math.max(minSize, this.startHeight - dy);\n host.style.height = `${newHeight}px`;\n host.style.top = `${this.startTop + (this.startHeight - newHeight)}px`;\n break;\n case 'left':\n newWidth = Math.max(minSize, this.startWidth - dx);\n host.style.width = `${newWidth}px`;\n host.style.left = `${this.startLeft + (this.startWidth - newWidth)}px`;\n break;\n case 'bottom':\n newHeight = Math.max(minSize, this.startHeight + dy);\n host.style.height = `${newHeight}px`;\n break;\n case 'right-top':\n if (this.service.cropperRatio()) {\n newWidth = Math.max(minSize, this.startWidth + dx);\n newHeight = (newWidth * this.aspectHeight()) / this.aspectWidth();\n if (newHeight < minSize) {\n newHeight = minSize;\n newWidth = (newHeight * this.aspectWidth()) / this.aspectHeight();\n }\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n host.style.top = `${this.startTop + (this.startHeight - newHeight)}px`;\n } else {\n newWidth = Math.max(minSize, this.startWidth + dx);\n newHeight = Math.max(minSize, this.startHeight - dy);\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n host.style.top = `${this.startTop + (this.startHeight - newHeight)}px`;\n }\n break;\n case 'bottom-right':\n if (this.service.cropperRatio()) {\n newWidth = Math.max(minSize, this.startWidth + dx);\n newHeight = (newWidth * this.aspectHeight()) / this.aspectWidth();\n if (newHeight < minSize) {\n newHeight = minSize;\n newWidth = (newHeight * this.aspectWidth()) / this.aspectHeight();\n }\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n } else {\n newWidth = Math.max(minSize, this.startWidth + dx);\n newHeight = Math.max(minSize, this.startHeight + dy);\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n }\n break;\n case 'bottom-left':\n if (this.service.cropperRatio()) {\n newWidth = Math.max(minSize, this.startWidth - dx);\n newHeight = (newWidth * this.aspectHeight()) / this.aspectWidth();\n if (newHeight < minSize) {\n newHeight = minSize;\n newWidth = (newHeight * this.aspectWidth()) / this.aspectHeight();\n }\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n host.style.left = `${this.startLeft + (this.startWidth - newWidth)}px`;\n } else {\n newWidth = Math.max(minSize, this.startWidth - dx);\n newHeight = Math.max(minSize, this.startHeight + dy);\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n host.style.left = `${this.startLeft + (this.startWidth - newWidth)}px`;\n }\n break;\n case 'left-top':\n if (this.service.cropperRatio()) {\n newWidth = Math.max(minSize, this.startWidth - dx);\n newHeight = (newWidth * this.aspectHeight()) / this.aspectWidth();\n if (newHeight < minSize) {\n newHeight = minSize;\n newWidth = (newHeight * this.aspectWidth()) / this.aspectHeight();\n }\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n host.style.left = `${this.startLeft + (this.startWidth - newWidth)}px`;\n host.style.top = `${this.startTop + (this.startHeight - newHeight)}px`;\n } else {\n newWidth = Math.max(minSize, this.startWidth - dx);\n newHeight = Math.max(minSize, this.startHeight - dy);\n host.style.width = `${newWidth}px`;\n host.style.height = `${newHeight}px`;\n host.style.left = `${this.startLeft + (this.startWidth - newWidth)}px`;\n host.style.top = `${this.startTop + (this.startHeight - newHeight)}px`;\n }\n break;\n }\n }\n\n protected clearSelector() {\n if (this.panState()) return;\n this.selectedHandle.set(null);\n }\n}\n","<div [style.border]=\"!showGrid() ? '1px dashed white' : null\" #r class=\"ax-image-cropper-window-container\">\n @if (!service.cropperRatio()) {\n <div (pointerdown)=\"handleSelector($event, 'right')\" class=\"ax-image-right-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'top')\" class=\"ax-image-top-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left')\" class=\"ax-image-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom')\" class=\"ax-image-bottom-handle ax-handle-shape\"></div>\n }\n\n <div (pointerdown)=\"handleSelector($event, 'right-top')\" class=\"ax-image-right-top-handle ax-handle-shape\"></div>\n <div\n (pointerdown)=\"handleSelector($event, 'bottom-right')\"\n class=\"ax-image-bottom-right-handle ax-handle-shape\"\n ></div>\n <div (pointerdown)=\"handleSelector($event, 'bottom-left')\" class=\"ax-image-bottom-left-handle ax-handle-shape\"></div>\n <div (pointerdown)=\"handleSelector($event, 'left-top')\" class=\"ax-image-left-top-handle ax-handle-shape\"></div>\n\n @if (showGrid()) {\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n <div class=\"ax-grid-item\"></div>\n }\n</div>\n","import { AXComponent, MXBaseComponent } from '@acorex/cdk/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n OnDestroy,\n Renderer2,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXImageEditorContainerComponent } from '../image-editor-container/image-editor-container.component';\nimport { AXImageEditorCropperWindowComponent } from '../image-editor-cropper-window/image-editor-cropper-window.component';\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.compiled.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXImageEditorCropperWindowComponent],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorViewComponent }],\n})\nexport class AXImageEditorViewComponent extends MXBaseComponent implements OnDestroy {\n /**\n * its change grid display state.\n */\n readonly showGrid = input(true);\n /**\n * Base size in pixels for the initial cropper window dimensions.\n */\n readonly cropperSize = input<number>();\n /**\n * its change grid display state.\n */\n readonly lockRatio = signal(false);\n /**\n * its receive image src.\n */\n readonly src = input<string>('');\n /** @ignore */\n protected canvasElem = viewChild<ElementRef<HTMLCanvasElement>>('canvasElem');\n /** @ignore */\n protected cropperWindow = viewChild<AXImageEditorCropperWindowComponent>('f');\n /** @ignore */\n protected ctx = signal<CanvasRenderingContext2D>(null);\n /** @ignore */\n protected service = inject(AXImageEditorService);\n /** @ignore */\n protected isMouseDown = signal(false);\n /** @ignore */\n protected isDrawRectangleCreated = signal(false);\n /** @ignore */\n protected parent = inject(AXImageEditorContainerComponent);\n /** @ignore */\n protected renderer = inject(Renderer2);\n /** @ignore */\n protected imageEditorHistory = signal<HTMLImageElement[]>([]);\n /** @ignore */\n protected imageEditorHistoryPointer = linkedSignal(() => this.imageEditorHistory().length - 1);\n\n /** @ignore */\n private resizeEventListener;\n /** @ignore */\n private imageLoadEventListener;\n\n private originalWidth = signal(0);\n private originalHeight = signal(0);\n private scale = signal(0);\n\n /** @ignore */\n protected resizeWindow() {\n this.canvasResponsive(this.service.newImage);\n }\n\n /** @ignore */\n protected canvasResponsive(image: HTMLImageElement) {\n const imageWidth = image.width;\n const imageHeight = image.height;\n\n this.originalWidth.set(imageWidth);\n this.originalHeight.set(imageHeight);\n\n if (imageWidth > imageHeight) {\n this.canvasElem().nativeElement.width = imageWidth;\n this.canvasElem().nativeElement.height = imageWidth;\n } else {\n this.canvasElem().nativeElement.width = imageHeight;\n this.canvasElem().nativeElement.height = imageHeight;\n }\n\n requestAnimationFrame(() => {\n //recalculate width after canvas size change\n const recalculateWidth = (this.canvasElem().nativeElement as HTMLElement).getClientRects()[0]?.width;\n\n let scale: number;\n if (imageWidth > imageHeight) {\n scale = this.originalWidth() / recalculateWidth;\n } else {\n scale = this.originalHeight() / recalculateWidth;\n }\n this.scale.set(scale);\n\n this.canvasElem().nativeElement.width = recalculateWidth;\n this.canvasElem().nativeElement.height = recalculateWidth;\n\n if (imageWidth > imageHeight) {\n this.ctx().drawImage(\n image,\n 0,\n recalculateWidth / 2 - this.originalHeight() / scale / 2,\n recalculateWidth,\n this.originalHeight() / scale,\n );\n } else {\n this.ctx().drawImage(\n image,\n recalculateWidth / 2 - this.originalWidth() / scale / 2,\n 0,\n this.originalWidth() / scale,\n recalculateWidth,\n );\n }\n });\n }\n\n /** @ignore */\n constructor() {\n super();\n\n afterNextRender(() => {\n this.resizeEventListener = this.renderer.listen(window, 'resize', this.resizeWindow.bind(this));\n //set canvas options\n this.ctx.set(this.canvasElem().nativeElement.getContext('2d', { willReadFrequently: true }));\n this.ctx().lineJoin = 'round';\n this.ctx().lineCap = 'round';\n });\n\n effect(() => {\n this.setInitialImage(this.src());\n });\n\n effect(() => {\n if (!this.service.undoPressed()) {\n this.imageChanged();\n }\n });\n\n effect(() => {\n if (!this.service.redoPressed()) {\n this.imageChanged();\n }\n });\n\n effect(() => {\n if (!this.service.rotate().userInteract || !this.ctx()) return;\n this.rotateImage();\n });\n\n effect(() => {\n const size = this.cropperSize();\n if (size != null) {\n this.service.cropperSize.set(size);\n }\n });\n }\n\n /** @ignore */\n ngOnDestroy(): void {\n if (this.resizeEventListener) {\n this.resizeEventListener();\n }\n\n if (this.imageLoadEventListener) {\n this.imageLoadEventListener();\n }\n }\n\n private setInitialImage(src: string, replaceHistory = true) {\n this.service.initialImage = new Image();\n this.service.initialImage.src = src;\n this.service.initialImage.crossOrigin = 'anonymous';\n this.imageLoadEventListener = this.renderer.listen(this.service.initialImage, 'load', () => {\n this.service.newImage = this.service.initialImage;\n this.service.isImageLoad.set(true);\n this.canvasResponsive(this.service.initialImage);\n if (replaceHistory) {\n this.imageEditorHistory.set([this.service.initialImage]);\n } else {\n this.imageEditorHistory.update((prev) => [...prev, this.service.initialImage]);\n }\n });\n }\n\n /** @ignore */\n protected imageChanged() {\n if (this.service.undoPressed() && this.imageEditorHistoryPointer() >= 1) {\n this.imageEditorHistoryPointer.update((prev) => prev - 1);\n\n this.service.newImage = this.imageEditorHistory()[this.imageEditorHistoryPointer()];\n this.canvasResponsive(this.imageEditorHistory()[this.imageEditorHistoryPointer()]);\n }\n\n if (this.service.redoPressed() && this.imageEditorHistoryPointer() < this.imageEditorHistory().length - 1) {\n this.imageEditorHistoryPointer.update((prev) => prev + 1);\n this.service.newImage = this.imageEditorHistory()[this.imageEditorHistoryPointer()];\n this.canvasResponsive(this.imageEditorHistory()[this.imageEditorHistoryPointer()]);\n }\n\n this.service.undoPressed.set(false);\n this.service.redoPressed.set(false);\n }\n\n /** @ignore */\n protected penConfigHandler(penType: 'pen' | 'highlight') {\n switch (penType) {\n case 'pen':\n this.ctx().globalAlpha = 1;\n this.ctx().strokeStyle = this.service.penColor();\n this.ctx().lineWidth = this.service.penWidth();\n break;\n case 'highlight':\n this.ctx().globalAlpha = 0.008;\n this.ctx().strokeStyle = this.service.highlightColor();\n this.ctx().lineWidth = this.service.highlightWidth();\n break;\n }\n }\n\n /** @ignore */\n protected mouseDownHandler(e: MouseEvent) {\n this.isMouseDown.set(true);\n if (!this.service.penType()) return;\n\n this.penConfigHandler(this.service.penType());\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 /** @ignore */\n protected mouseMoveHandler(e: MouseEvent) {\n if (!this.isMouseDown()) return;\n if (!this.service.penType()) return;\n this.ctx().lineTo(e.offsetX, e.offsetY);\n this.ctx().stroke();\n }\n\n /** @ignore */\n protected mouseUpHandler() {\n this.isMouseDown.set(false);\n this.ctx().closePath();\n this.saveImageChange();\n }\n\n /** @ignore */\n async crop(): Promise<void> {\n const cropper = this.cropperWindow();\n if (this.service.activeToolState() !== 'crop' || !cropper) {\n return;\n }\n\n const cropRect = cropper.getCropperArea();\n const canvasRect = this.canvasElem().nativeElement.getClientRects()[0];\n const dx = cropRect.x - canvasRect.x;\n const dy = cropRect.y - canvasRect.y;\n\n const imageData = this.ctx().getImageData(dx, dy, cropRect.width, cropRect.height);\n this.canvasElem().nativeElement.width = cropRect.width;\n this.canvasElem().nativeElement.height = cropRect.height;\n this.ctx().putImageData(imageData, 0, 0);\n const cropImage = this.canvasElem().nativeElement.toDataURL('image/jpeg', 1);\n\n await this.saveImageChange();\n this.setInitialImage(cropImage, false);\n this.service.activeToolState.set(null);\n }\n\n /** @ignore */\n protected rotateImage() {\n this.ctx().globalAlpha = 1;\n this.ctx().save();\n this.ctx().clearRect(0, 0, this.canvasElem().nativeElement.width, this.canvasElem().nativeElement.height);\n\n // Calculate scale factor to fit rotated image within canvas\n const rotationAngle = (this.service.rotate().state * Math.PI) / 180;\n const cos = Math.abs(Math.cos(rotationAngle));\n const sin = Math.abs(Math.sin(rotationAngle));\n\n const rotatedWidth = this.service.newImage.width * cos + this.service.newImage.height * sin;\n const rotatedHeight = this.service.newImage.width * sin + this.service.newImage.height * cos;\n\n const scaleX = this.canvasElem().nativeElement.width / rotatedWidth;\n const scaleY = this.canvasElem().nativeElement.height / rotatedHeight;\n const scale = Math.min(scaleX, scaleY);\n\n this.ctx().translate(this.canvasElem().nativeElement.width / 2, this.canvasElem().nativeElement.height / 2);\n this.ctx().rotate(rotationAngle);\n this.ctx().scale(scale, scale);\n\n this.ctx().drawImage(this.service.newImage, -this.service.newImage.width / 2, -this.service.newImage.height / 2);\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 async saveImageChange() {\n const canvas = this.canvasElem().nativeElement as HTMLCanvasElement;\n\n const newImage = new Image();\n newImage.crossOrigin = 'anonymous';\n newImage.src = canvas.toDataURL('image/jpeg', 1);\n this.service.newImage = newImage;\n this.imageEditorHistory.update((prev) => [...prev, newImage]);\n\n const canvasToBlob = (type: string, quality?: number): Promise<Blob> => {\n return new Promise((resolve, reject) => {\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject(new Error(`toBlob returned null for type ${type}`));\n }\n },\n type,\n quality,\n );\n });\n };\n\n const blobs = await Promise.all([\n canvasToBlob('image/jpeg', 1),\n canvasToBlob('image/png', 1),\n canvasToBlob('image/webp', 1),\n ]);\n\n this.service.imageBlob.set(blobs);\n }\n}\n","<canvas\n tabindex=\"1\"\n (pointerdown)=\"mouseDownHandler($event)\"\n (pointerup)=\"mouseUpHandler()\"\n (pointermove)=\"mouseMoveHandler($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n></canvas>\n\n@if (this.service.activeToolState() === 'crop') {\n <ax-image-editor-cropper-window [showGrid]=\"showGrid()\" #f></ax-image-editor-cropper-window>\n}\n","import {\n AXComponent,\n AXFocusableComponent,\n AXValuableComponent,\n MXInputBaseValueComponent,\n MXLookComponent,\n} from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingSpinnerComponent } from '@acorex/components/loading';\n\nimport {\n Component,\n contentChild,\n effect,\n ElementRef,\n forwardRef,\n HostBinding,\n inject,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { classes } from 'polytype';\nimport { AXImageEditorViewComponent } from '../image-editor-view/image-editor-view.component';\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.compiled.css',\n encapsulation: ViewEncapsulation.None,\n outputs: ['onValueChanged'],\n inputs: ['look', 'disabled'],\n providers: [\n AXImageEditorService,\n { provide: AXComponent, useExisting: AXImageEditorContainerComponent },\n { provide: AXFocusableComponent, useExisting: AXImageEditorContainerComponent },\n { provide: AXValuableComponent, useExisting: AXImageEditorContainerComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXImageEditorContainerComponent),\n multi: true,\n },\n ],\n imports: [AXDecoratorModule, AXLoadingSpinnerComponent],\n})\nexport class AXImageEditorContainerComponent extends classes(MXInputBaseValueComponent<Blob[]>, MXLookComponent) {\n /** @ignore */\n protected service = inject(AXImageEditorService);\n\n imageEditorContainer = viewChild<ElementRef>('f');\n\n view = contentChild<AXImageEditorViewComponent>(AXImageEditorViewComponent);\n\n #eff = effect(() => {\n void this.service.imageBlob();\n if (this.service.imageBlob().length) {\n this.commitValue(this.service.imageBlob(), true);\n } else {\n this.commitValue(null);\n }\n });\n\n /** Applies the current cropper selection. */\n\n async crop(): Promise<void> {\n const oldValue = this.value;\n\n await this.view()?.crop();\n\n const blobs = this.service.imageBlob();\n\n if (blobs.length && this.value === oldValue) {\n this.emitOnValueChangedEvent(oldValue, blobs);\n }\n }\n\n @HostBinding('class')\n get __hostClass(): string {\n if (this.disabled) return 'ax-state-disabled';\n return '';\n }\n\n @HostBinding('attr.name')\n private get __hostName(): string {\n return this.name;\n }\n}\n","@if (service.isImageLoad()) {\n <div #f class=\"ax-editor-container ax-default {{ look }}\">\n <ng-content select=\"ax-header\"></ng-content>\n\n <ng-content select=\"ax-image-editor-view\"> </ng-content>\n\n <ng-content select=\"ax-footer\"></ng-content>\n </div>\n <div class=\"ax-error-container\"></div>\n} @else {\n <div class=\"ax-loading-spinner-container\">\n <ax-loading-spinner [size]=\"16\" color=\"primary\" text=\"Loading Image ...\"></ax-loading-spinner>\n </div>\n}\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n\n@if (disabled) {\n <div class=\"ax-disable-overlay\"></div>\n}\n","export const IMAGE_EDITOR_ASPECT_RATIO_ACTIVE_SUFFIX = ':active';\n\nexport function parseAspectRatioItem(item: string): { ratio: string; active: boolean } {\n if (item.endsWith(IMAGE_EDITOR_ASPECT_RATIO_ACTIVE_SUFFIX)) {\n return {\n ratio: item.slice(0, -IMAGE_EDITOR_ASPECT_RATIO_ACTIVE_SUFFIX.length),\n active: true,\n };\n }\n\n return { ratio: item, active: false };\n}\n\nexport function parseAspectRatios(items: readonly string[]): {\n ratios: string[];\n activeRatio: string | null;\n} {\n const ratios: string[] = [];\n let activeRatio: string | null = null;\n\n for (const item of items) {\n const { ratio, active } = parseAspectRatioItem(item);\n ratios.push(ratio);\n\n if (active && activeRatio === null) {\n activeRatio = ratio;\n }\n }\n\n return { ratios, activeRatio };\n}\n","import { inject } from '@angular/core';\nimport { AXImageEditorService, AXImageEditorTool } from '../image-editor.service';\n\n/**\n * Base class for image editor tool trigger components.\n * @category Components\n */\nexport abstract class AXImageEditorToolComponent {\n protected service = inject(AXImageEditorService);\n\n abstract readonly tool: AXImageEditorTool;\n\n setActive(): void {\n this.service.activateTool(this.tool);\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, effect, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorContainerComponent } from '../../image-editor-container/image-editor-container.component';\nimport { parseAspectRatios } from '../../image-editor-aspect-ratio.util';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Crop tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-crop',\n templateUrl: './image-editor-crop.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorCropComponent }],\n})\nexport class AXImageEditorCropComponent extends AXImageEditorToolComponent {\n readonly tool = 'crop';\n\n private container = inject(AXImageEditorContainerComponent);\n\n /** Aspect ratio presets. Append `:active` to mark the default ratio, e.g. `'2:1:active'`. */\n aspectRatio = input<string[]>([]);\n\n /** Base size in pixels for the initial cropper window dimensions. */\n size = input<number>();\n\n #syncSize = effect(() => {\n const size = this.size();\n if (size != null) {\n this.service.cropperSize.set(size);\n }\n });\n\n #syncAspectRatio = effect(() => {\n const { activeRatio } = parseAspectRatios(this.aspectRatio());\n if (activeRatio) {\n this.service.cropperRatio.set(activeRatio);\n }\n });\n\n /** Applies the current cropper selection. */\n crop(): void {\n this.container.crop();\n }\n}\n","<ax-button\n [axTooltip]=\"'@acorex:image-editor.crop' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('crop')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'crop'\"\n [color]=\"service.activeToolState() === 'crop' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Highlight tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-highlight',\n templateUrl: './image-editor-highlight.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorHighlightComponent }],\n})\nexport class AXImageEditorHighlightComponent extends AXImageEditorToolComponent {\n readonly tool = 'highlight';\n}\n","<ax-button\n [axTooltip]=\"'@acorex:paint.tools.highlight' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('highlight')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'highlight'\"\n [color]=\"service.activeToolState() === 'highlight' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, 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-history',\n templateUrl: './image-editor-history.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AXTooltipDirective, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorHistoryComponent }],\n})\nexport class AXImageEditorHistoryComponent {\n protected service = inject(AXImageEditorService);\n\n protected UndoHandler() {\n this.service.undoPressed.set(true);\n }\n protected RedoHandler() {\n this.service.redoPressed.set(true);\n }\n}\n","<div class=\"flex\">\n <ax-button\n class=\"ax-sm\"\n [axTooltip]=\"'@acorex:image-editor.undo' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"UndoHandler()\"\n look=\"blank\"\n >\n <ax-icon class=\"ax-icon ax-icon-undo\"></ax-icon>\n </ax-button>\n\n <ax-button\n class=\"ax-sm\"\n [axTooltip]=\"'@acorex:image-editor.redo' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"RedoHandler()\"\n look=\"blank\"\n >\n <ax-icon class=\"ax-icon ax-icon-redo\"></ax-icon>\n </ax-button>\n</div>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Pen tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-pen',\n templateUrl: './image-editor-pen.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXDecoratorModule, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorPenComponent }],\n})\nexport class AXImageEditorPenComponent extends AXImageEditorToolComponent {\n readonly tool = 'pen';\n}\n","<ax-button\n [axTooltip]=\"'@acorex:paint.tools.pen' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('pen')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'pen'\"\n [color]=\"service.activeToolState() === 'pen' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Rotate tool trigger for the image editor toolbar.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-rotate',\n templateUrl: './image-editor-rotate.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AXTooltipDirective, AsyncPipe, AXTranslatorPipe, AXTooltipModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorRotateComponent }],\n})\nexport class AXImageEditorRotateComponent extends AXImageEditorToolComponent {\n readonly tool = 'rotate';\n}\n","<ax-button\n [axTooltip]=\"'@acorex:image-editor.rotate' | translate | async\"\n axTooltipPlacement=\"top\"\n (onClick)=\"service.toggleTool('rotate')\"\n look=\"blank\"\n [selected]=\"service.activeToolState() === 'rotate'\"\n [color]=\"service.activeToolState() === 'rotate' ? 'primary' : 'default'\"\n class=\"ax-sm\"\n>\n <i class=\"fa-solid fa-rotate\"></i>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, computed, effect, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorContainerComponent } from '../../image-editor-container/image-editor-container.component';\nimport { parseAspectRatios } from '../../image-editor-aspect-ratio.util';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-crop-options',\n templateUrl: './image-editor-crop-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXButtonComponent, AsyncPipe, AXTranslatorPipe],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorCropOptionsComponent }],\n})\nexport class AXImageEditorCropOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n private container = inject(AXImageEditorContainerComponent);\n\n cropPressed = output();\n\n aspectRatio = input<string[]>([]);\n\n protected aspectRatios = computed(() => parseAspectRatios(this.aspectRatio()).ratios);\n\n protected cropButtonHandler() {\n this.cropPressed.emit();\n this.container.crop();\n }\n\n protected ratioHandler(r: '1:1' | '16:9' | string) {\n if (this.service.cropperRatio() === r) {\n this.service.cropperRatio.set(null);\n } else {\n this.service.cropperRatio.set(r);\n }\n }\n}\n","<div class=\"ax-image-editor-crop-ratios\">\n @for (item of aspectRatios(); track item) {\n <ax-button\n [selected]=\"service.cropperRatio() === item\"\n [color]=\"service.cropperRatio() === item ? 'primary' : 'default'\"\n (click)=\"ratioHandler(item)\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"item\"\n ></ax-button>\n } @empty {\n <ax-button\n [selected]=\"service.cropperRatio() === '1:1'\"\n [color]=\"service.cropperRatio() === '1:1' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('1:1')\"\n class=\"ax-crop-save ax-sm\"\n text=\"1:1\"\n ></ax-button>\n <ax-button\n [selected]=\"service.cropperRatio() === '16:9'\"\n [color]=\"service.cropperRatio() === '16:9' ? 'primary' : 'default'\"\n (click)=\"ratioHandler('16:9')\"\n class=\"ax-crop-save ax-sm\"\n text=\"16:9\"\n ></ax-button>\n }\n</div>\n\n<ax-button\n (click)=\"cropButtonHandler()\"\n class=\"ax-crop-save ax-sm\"\n [text]=\"'@acorex:image-editor.crop' | translate | async\"\n color=\"primary\"\n></ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXColorBoxComponent } from '@acorex/components/color-box';\nimport { AXRangeSliderComponent } from '@acorex/components/range-slider';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-highlight-options',\n templateUrl: './image-editor-highlight-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXColorBoxComponent,\n FormsModule,\n AXRangeSliderComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXTooltipModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorHighlightOptionsComponent }],\n})\nexport class AXImageEditorHighlightOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected selectedColor = signal(this.service.highlightColor());\n\n /** @ignore */\n protected value = this.service.highlightWidth();\n\n protected changeColorHandler(e: string) {\n this.service.highlightColor.set(e);\n this.selectedColor.set(e);\n }\n\n /** @ignore */\n protected valueHandler(e: number) {\n this.service.highlightWidth.set(e);\n }\n}\n","<ax-color-box\n [showValue]=\"false\"\n [showIcon]=\"false\"\n [axTooltip]=\"'@acorex:paint.tools.highlight' | translate | async\"\n axTooltipPlacement=\"top\"\n look=\"none\"\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"changeColorHandler($event)\"\n>\n</ax-color-box>\n\n<ax-range-slider [min]=\"2\" [max]=\"20\" [(ngModel)]=\"value\" (ngModelChange)=\"valueHandler($event)\"></ax-range-slider>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXColorBoxComponent } from '@acorex/components/color-box';\nimport { AXRangeSliderComponent } from '@acorex/components/range-slider';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-pen-options',\n templateUrl: './image-editor-pen-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXColorBoxComponent,\n FormsModule,\n AXRangeSliderComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXTooltipModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorPenOptionsComponent }],\n})\nexport class AXImageEditorPenOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n /** @ignore */\n protected value = this.service.penWidth();\n\n /** @ignore */\n protected selectedColor = signal(this.service.penColor());\n\n protected changeColorHandler(e: string) {\n this.service.penColor.set(e);\n this.selectedColor.set(e);\n }\n\n /** @ignore */\n protected valueHandler(e: number) {\n this.service.penWidth.set(e);\n }\n}\n","<ax-color-box\n [showValue]=\"false\"\n [showIcon]=\"false\"\n [axTooltip]=\"'@acorex:paint.tools.pen' | translate | async\"\n axTooltipPlacement=\"top\"\n look=\"none\"\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"changeColorHandler($event)\"\n>\n</ax-color-box>\n\n<ax-range-slider [min]=\"2\" [max]=\"20\" [(ngModel)]=\"value\" (ngModelChange)=\"valueHandler($event)\"></ax-range-slider>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\n\n/** @ignore */\n@Component({\n selector: 'ax-image-editor-rotate-options',\n templateUrl: './image-editor-rotate-options.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXButtonComponent,\n AXTooltipDirective,\n AXDecoratorIconComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXTooltipModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: AXComponent, useExisting: AXImageEditorRotateOptionsComponent }],\n})\nexport class AXImageEditorRotateOptionsComponent {\n protected service = inject(AXImageEditorService);\n\n protected rotateRightHandler() {\n this.service.rotate.set({ state: 90, userInteract: true });\n }\n\n protected rotateLeftHandler() {\n this.service.rotate.set({ state: -90, userInteract: true });\n }\n}\n","<ax-button\n [axTooltip]=\"'@acorex:image-editor.rotate-left' | translate | async\"\n axTooltipPlacement=\"top\"\n (click)=\"rotateLeftHandler()\"\n look=\"blank\"\n>\n <ax-icon class=\"ax-icon ax-icon-arrow-turn-left\"></ax-icon>\n</ax-button>\n\n<ax-button\n [axTooltip]=\"'@acorex:image-editor.rotate-right' | translate | async\"\n axTooltipPlacement=\"top\"\n (click)=\"rotateRightHandler()\"\n look=\"blank\"\n>\n <ax-icon class=\"ax-icon ax-icon-arrow-turn-right\"></ax-icon>\n</ax-button>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXImageEditorService } from '../../image-editor.service';\nimport { AXImageEditorCropOptionsComponent } from '../image-editor-crop/image-editor-crop-options.component';\nimport { AXImageEditorCropComponent } from '../image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorHighlightOptionsComponent } from '../image-editor-highlight/image-editor-highlight-options.component';\nimport { AXImageEditorHighlightComponent } from '../image-editor-highlight/image-editor-highlight.component';\nimport { AXImageEditorPenOptionsComponent } from '../image-editor-pen/image-editor-pen-options.component';\nimport { AXImageEditorPenComponent } from '../image-editor-pen/image-editor-pen.component';\nimport { AXImageEditorRotateOptionsComponent } from '../image-editor-rotate/image-editor-rotate-options.component';\nimport { AXImageEditorRotateComponent } from '../image-editor-rotate/image-editor-rotate.component';\nimport { AXImageEditorToolComponent } from '../image-editor-tool.component';\n\n/**\n * Toolbar layout for configurable image editor tools.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-tools-bar',\n templateUrl: './image-editor-tools-bar.component.html',\n styleUrl: './image-editor-tools-bar.component.compiled.css',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.ax-image-editor-tools-bar-hidden]': 'hidden()',\n },\n imports: [\n AXDecoratorModule,\n AXToolBarModule,\n AXImageEditorPenOptionsComponent,\n AXImageEditorHighlightOptionsComponent,\n AXImageEditorCropOptionsComponent,\n AXImageEditorRotateOptionsComponent,\n ],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorToolsBarComponent }],\n})\nexport class AXImageEditorToolsBarComponent {\n protected service = inject(AXImageEditorService);\n\n /**\n * Tool component reference to activate on load.\n */\n active = input<AXImageEditorToolComponent>();\n\n /** Hides the tools bar UI while keeping projected tools configurable. */\n hidden = input(false);\n\n protected penTool = contentChild(AXImageEditorPenComponent);\n protected highlightTool = contentChild(AXImageEditorHighlightComponent);\n protected cropTool = contentChild(AXImageEditorCropComponent);\n protected rotateTool = contentChild(AXImageEditorRotateComponent);\n\n protected cropAspectRatio = computed(() => this.cropTool()?.aspectRatio() ?? []);\n\n #activeEffect = effect(() => {\n this.active()?.setActive();\n });\n}\n","<ax-toolbar class=\"ax-main-toolbar\">\n <ax-prefix class=\"ax-image-editor-tool-triggers\">\n <ng-content\n select=\"ax-image-editor-pen, ax-image-editor-highlight, ax-image-editor-crop, ax-image-editor-rotate\"\n ></ng-content>\n </ax-prefix>\n\n @if (service.activeToolState()) {\n <ax-suffix class=\"ax-image-editor-tool-options\">\n @switch (service.activeToolState()) {\n @case ('pen') {\n @if (penTool()) {\n <ax-image-editor-pen-options></ax-image-editor-pen-options>\n }\n }\n @case ('highlight') {\n @if (highlightTool()) {\n <ax-image-editor-highlight-options></ax-image-editor-highlight-options>\n }\n }\n @case ('crop') {\n @if (cropTool()) {\n <ax-image-editor-crop-options [aspectRatio]=\"cropAspectRatio()\"></ax-image-editor-crop-options>\n }\n }\n @case ('rotate') {\n @if (rotateTool()) {\n <ax-image-editor-rotate-options></ax-image-editor-rotate-options>\n }\n }\n }\n </ax-suffix>\n }\n</ax-toolbar>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXImageEditorCropComponent } from '../image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorHighlightComponent } from '../image-editor-highlight/image-editor-highlight.component';\nimport { AXImageEditorPenComponent } from '../image-editor-pen/image-editor-pen.component';\nimport { AXImageEditorRotateComponent } from '../image-editor-rotate/image-editor-rotate.component';\nimport { AXImageEditorToolsBarComponent } from '../image-editor-tools-bar/image-editor-tools-bar.component';\n\n/**\n * Convenience wrapper that includes all image editor tools.\n * @category Components\n */\n@Component({\n selector: 'ax-image-editor-tool-selector',\n templateUrl: './image-editor-tool-selector.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXImageEditorToolsBarComponent,\n AXImageEditorPenComponent,\n AXImageEditorHighlightComponent,\n AXImageEditorCropComponent,\n AXImageEditorRotateComponent,\n ],\n providers: [{ provide: AXComponent, useExisting: AXImageEditorToolSelectorComponent }],\n})\nexport class AXImageEditorToolSelectorComponent {\n aspectRatio = input<string[]>([]);\n}\n","<ax-image-editor-tools-bar>\n <ax-image-editor-pen></ax-image-editor-pen>\n <ax-image-editor-highlight></ax-image-editor-highlight>\n <ax-image-editor-crop [aspectRatio]=\"aspectRatio()\"></ax-image-editor-crop>\n <ax-image-editor-rotate></ax-image-editor-rotate>\n</ax-image-editor-tools-bar>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXColorBoxModule } from '@acorex/components/color-box';\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 { AXImageEditorCropperWindowComponent } from './image-editor-cropper-window/image-editor-cropper-window.component';\nimport { AXImageEditorCropComponent } from './image-editor-tools/image-editor-crop/image-editor-crop.component';\nimport { AXImageEditorHighlightComponent } from './image-editor-tools/image-editor-highlight/image-editor-highlight.component';\nimport { AXImageEditorHistoryComponent } from './image-editor-tools/image-editor-history/image-editor-history.component';\nimport { AXImageEditorPenComponent } from './image-editor-tools/image-editor-pen/image-editor-pen.component';\nimport { AXImageEditorRotateComponent } from './image-editor-tools/image-editor-rotate/image-editor-rotate.component';\nimport { AXImageEditorToolSelectorComponent } from './image-editor-tools/image-editor-tool-selector/image-editor-tool-selector.component';\nimport { AXImageEditorToolsBarComponent } from './image-editor-tools/image-editor-tools-bar/image-editor-tools-bar.component';\nimport { AXImageEditorViewComponent } from './image-editor-view/image-editor-view.component';\n\nconst COMPONENT = [\n AXImageEditorViewComponent,\n AXImageEditorContainerComponent,\n AXImageEditorCropComponent,\n AXImageEditorHistoryComponent,\n AXImageEditorToolSelectorComponent,\n AXImageEditorToolsBarComponent,\n AXImageEditorPenComponent,\n AXImageEditorHighlightComponent,\n AXImageEditorRotateComponent,\n AXImageEditorCropperWindowComponent,\n];\n\nconst MODULES = [\n AXButtonModule,\n FormsModule,\n AXRangeSliderModule,\n AXSelectBoxModule,\n AXColorBoxModule,\n AXPopoverModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXDialogModule,\n];\n\n@NgModule({\n imports: [...MODULES, ...COMPONENT],\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"],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@acorex/components",
3
- "version": "21.0.3-next.13",
3
+ "version": "21.0.3-next.15",
4
4
  "peerDependencies": {
5
- "@acorex/core": "21.0.3-next.13",
6
- "@acorex/cdk": "21.0.3-next.13",
5
+ "@acorex/core": "21.0.3-next.15",
6
+ "@acorex/cdk": "21.0.3-next.15",
7
7
  "polytype": ">=0.17.0",
8
8
  "angular-imask": ">=7.6.1",
9
9
  "gridstack": ">=12.0.0",
@@ -31,6 +31,7 @@ declare class AXImageEditorService {
31
31
  undoPressed: _angular_core.WritableSignal<boolean>;
32
32
  redoPressed: _angular_core.WritableSignal<boolean>;
33
33
  cropperRatio: _angular_core.WritableSignal<string>;
34
+ cropperSize: _angular_core.WritableSignal<number>;
34
35
  toggleTool(tool: AXImageEditorTool): void;
35
36
  activateTool(tool: AXImageEditorTool): void;
36
37
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageEditorService, never>;
@@ -44,6 +45,8 @@ declare class AXImageEditorService {
44
45
  declare class AXImageEditorCropperWindowComponent implements OnDestroy {
45
46
  #private;
46
47
  readonly showGrid: _angular_core.InputSignal<boolean>;
48
+ /** Base size in pixels used to calculate the initial cropper window dimensions. */
49
+ readonly size: _angular_core.InputSignal<number>;
47
50
  protected service: AXImageEditorService;
48
51
  private ngZone;
49
52
  private selectedHandle;
@@ -81,7 +84,7 @@ declare class AXImageEditorCropperWindowComponent implements OnDestroy {
81
84
  protected changeSizeHandler(e: MouseEvent): void;
82
85
  protected clearSelector(): void;
83
86
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageEditorCropperWindowComponent, never>;
84
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageEditorCropperWindowComponent, "ax-image-editor-cropper-window", never, { "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
87
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageEditorCropperWindowComponent, "ax-image-editor-cropper-window", never, { "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
85
88
  }
86
89
 
87
90
  declare class AXImageEditorViewComponent extends MXBaseComponent implements OnDestroy {
@@ -89,6 +92,10 @@ declare class AXImageEditorViewComponent extends MXBaseComponent implements OnDe
89
92
  * its change grid display state.
90
93
  */
91
94
  readonly showGrid: _angular_core.InputSignal<boolean>;
95
+ /**
96
+ * Base size in pixels for the initial cropper window dimensions.
97
+ */
98
+ readonly cropperSize: _angular_core.InputSignal<number>;
92
99
  /**
93
100
  * its change grid display state.
94
101
  */
@@ -144,13 +151,13 @@ declare class AXImageEditorViewComponent extends MXBaseComponent implements OnDe
144
151
  /** @ignore */
145
152
  protected mouseUpHandler(): void;
146
153
  /** @ignore */
147
- cropButtonHandler(): void;
154
+ crop(): Promise<void>;
148
155
  /** @ignore */
149
156
  protected rotateImage(): void;
150
157
  /** @ignore */
151
158
  protected saveImageChange(): Promise<void>;
152
159
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageEditorViewComponent, never>;
153
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageEditorViewComponent, "ax-image-editor-view", never, { "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
160
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageEditorViewComponent, "ax-image-editor-view", never, { "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "cropperSize": { "alias": "cropperSize"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
154
161
  }
155
162
 
156
163
  declare const AXImageEditorContainerComponent_base: polytype.Polytype.ClusteredConstructor<[{
@@ -168,6 +175,8 @@ declare class AXImageEditorContainerComponent extends AXImageEditorContainerComp
168
175
  protected service: AXImageEditorService;
169
176
  imageEditorContainer: _angular_core.Signal<ElementRef<any>>;
170
177
  view: _angular_core.Signal<AXImageEditorViewComponent>;
178
+ /** Applies the current cropper selection. */
179
+ crop(): Promise<void>;
171
180
  get __hostClass(): string;
172
181
  private get __hostName();
173
182
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageEditorContainerComponent, never>;
@@ -189,10 +198,17 @@ declare abstract class AXImageEditorToolComponent {
189
198
  * @category Components
190
199
  */
191
200
  declare class AXImageEditorCropComponent extends AXImageEditorToolComponent {
201
+ #private;
192
202
  readonly tool = "crop";
203
+ private container;
204
+ /** Aspect ratio presets. Append `:active` to mark the default ratio, e.g. `'2:1:active'`. */
193
205
  aspectRatio: _angular_core.InputSignal<string[]>;
206
+ /** Base size in pixels for the initial cropper window dimensions. */
207
+ size: _angular_core.InputSignal<number>;
208
+ /** Applies the current cropper selection. */
209
+ crop(): void;
194
210
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageEditorCropComponent, never>;
195
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageEditorCropComponent, "ax-image-editor-crop", never, { "aspectRatio": { "alias": "aspectRatio"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
211
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageEditorCropComponent, "ax-image-editor-crop", never, { "aspectRatio": { "alias": "aspectRatio"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
196
212
  }
197
213
 
198
214
  /**
@@ -248,13 +264,15 @@ declare class AXImageEditorToolsBarComponent {
248
264
  * Tool component reference to activate on load.
249
265
  */
250
266
  active: _angular_core.InputSignal<AXImageEditorToolComponent>;
267
+ /** Hides the tools bar UI while keeping projected tools configurable. */
268
+ hidden: _angular_core.InputSignal<boolean>;
251
269
  protected penTool: _angular_core.Signal<AXImageEditorPenComponent>;
252
270
  protected highlightTool: _angular_core.Signal<AXImageEditorHighlightComponent>;
253
271
  protected cropTool: _angular_core.Signal<AXImageEditorCropComponent>;
254
272
  protected rotateTool: _angular_core.Signal<AXImageEditorRotateComponent>;
255
273
  protected cropAspectRatio: _angular_core.Signal<string[]>;
256
274
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXImageEditorToolsBarComponent, never>;
257
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageEditorToolsBarComponent, "ax-image-editor-tools-bar", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, ["penTool", "highlightTool", "cropTool", "rotateTool"], ["ax-image-editor-pen, ax-image-editor-highlight, ax-image-editor-crop, ax-image-editor-rotate"], true, never>;
275
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXImageEditorToolsBarComponent, "ax-image-editor-tools-bar", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, {}, ["penTool", "highlightTool", "cropTool", "rotateTool"], ["ax-image-editor-pen, ax-image-editor-highlight, ax-image-editor-crop, ax-image-editor-rotate"], true, never>;
258
276
  }
259
277
 
260
278
  /**