@acorex/components 19.11.0-next.4 → 19.11.0-next.6
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.
- package/common/lib/classes/datasource.class.d.ts +2 -2
- package/fesm2022/acorex-components-action-sheet.mjs +12 -12
- package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
- package/fesm2022/acorex-components-alert.mjs +7 -7
- package/fesm2022/acorex-components-audio-wave.mjs +7 -7
- package/fesm2022/acorex-components-autocomplete.mjs +7 -7
- package/fesm2022/acorex-components-avatar.mjs +10 -10
- package/fesm2022/acorex-components-badge.mjs +7 -7
- package/fesm2022/acorex-components-bottom-navigation.mjs +10 -10
- package/fesm2022/acorex-components-breadcrumbs.mjs +10 -10
- package/fesm2022/acorex-components-button-group.mjs +10 -10
- package/fesm2022/acorex-components-button.mjs +13 -13
- package/fesm2022/acorex-components-calendar.mjs +13 -13
- package/fesm2022/acorex-components-check-box.mjs +7 -7
- package/fesm2022/acorex-components-chips.mjs +7 -7
- package/fesm2022/acorex-components-circular-progress.mjs +7 -7
- package/fesm2022/acorex-components-collapse.mjs +10 -10
- package/fesm2022/acorex-components-color-box.mjs +7 -7
- package/fesm2022/acorex-components-color-palette.mjs +25 -25
- package/fesm2022/acorex-components-comment.mjs +28 -28
- package/fesm2022/acorex-components-common.mjs +91 -91
- package/fesm2022/acorex-components-common.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation.mjs +49 -49
- package/fesm2022/acorex-components-cron-job.mjs +46 -46
- package/fesm2022/acorex-components-data-pager.mjs +31 -31
- package/fesm2022/acorex-components-data-table.mjs +38 -38
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +7 -7
- package/fesm2022/acorex-components-datetime-input.mjs +7 -7
- package/fesm2022/acorex-components-datetime-picker.mjs +7 -7
- package/fesm2022/acorex-components-decorators.mjs +25 -25
- package/fesm2022/acorex-components-dialog.mjs +10 -10
- package/fesm2022/acorex-components-drawer.mjs +13 -13
- package/fesm2022/acorex-components-dropdown-button.mjs +7 -7
- package/fesm2022/acorex-components-dropdown.mjs +13 -13
- package/fesm2022/acorex-components-file-explorer.mjs +25 -25
- package/fesm2022/acorex-components-file-explorer.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +16 -16
- package/fesm2022/acorex-components-grid-layout-builder.mjs +192 -112
- package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-components-image-editor.mjs +343 -302
- package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-image.mjs +7 -7
- package/fesm2022/acorex-components-json-viewer.mjs +7 -7
- package/fesm2022/acorex-components-kbd.mjs +10 -10
- package/fesm2022/acorex-components-label.mjs +7 -7
- package/fesm2022/acorex-components-list.mjs +7 -7
- package/fesm2022/acorex-components-loading-dialog.mjs +10 -10
- package/fesm2022/acorex-components-loading.mjs +16 -16
- package/fesm2022/acorex-components-map.mjs +10 -10
- package/fesm2022/acorex-components-media-viewer.mjs +34 -34
- package/fesm2022/acorex-components-menu.mjs +20 -20
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-navbar.mjs +7 -7
- package/fesm2022/acorex-components-notification.mjs +49 -33
- package/fesm2022/acorex-components-notification.mjs.map +1 -1
- package/fesm2022/acorex-components-number-box.mjs +7 -7
- package/fesm2022/acorex-components-otp.mjs +7 -7
- package/fesm2022/acorex-components-page.mjs +10 -10
- package/fesm2022/acorex-components-paint.mjs +20 -49
- package/fesm2022/acorex-components-paint.mjs.map +1 -1
- package/fesm2022/acorex-components-password-box.mjs +10 -10
- package/fesm2022/acorex-components-pdf-reader.mjs +7 -7
- package/fesm2022/acorex-components-phone-box.mjs +7 -7
- package/fesm2022/acorex-components-picker.mjs +13 -13
- package/fesm2022/acorex-components-popover.mjs +7 -7
- package/fesm2022/acorex-components-popup.mjs +10 -10
- package/fesm2022/acorex-components-progress-bar.mjs +7 -7
- package/fesm2022/acorex-components-qrcode.mjs +7 -7
- package/fesm2022/acorex-components-query-builder.mjs +7 -7
- package/fesm2022/acorex-components-radio.mjs +7 -7
- package/fesm2022/acorex-components-rail-navigation.mjs +13 -13
- package/fesm2022/acorex-components-range-slider.mjs +7 -7
- package/fesm2022/acorex-components-rate-picker.mjs +7 -7
- package/fesm2022/acorex-components-rest-api-generator.mjs +22 -22
- package/fesm2022/acorex-components-result.mjs +7 -7
- package/fesm2022/acorex-components-routing-progress.mjs +7 -7
- package/fesm2022/acorex-components-scheduler.mjs +13 -13
- package/fesm2022/acorex-components-scss.mjs +4 -4
- package/fesm2022/acorex-components-search-box.mjs +7 -7
- package/fesm2022/acorex-components-select-box.mjs +7 -7
- package/fesm2022/acorex-components-selection-list.mjs +7 -7
- package/fesm2022/acorex-components-side-menu.mjs +13 -13
- package/fesm2022/acorex-components-skeleton.mjs +7 -7
- package/fesm2022/acorex-components-slider.mjs +7 -7
- package/fesm2022/acorex-components-sliding-item.mjs +13 -13
- package/fesm2022/acorex-components-sliding-item.mjs.map +1 -1
- package/fesm2022/acorex-components-step-wizard.mjs +13 -13
- package/fesm2022/acorex-components-switch.mjs +10 -10
- package/fesm2022/acorex-components-tabs.mjs +13 -13
- package/fesm2022/acorex-components-tag-box.mjs +7 -7
- package/fesm2022/acorex-components-tag.mjs +7 -7
- package/fesm2022/acorex-components-text-area.mjs +7 -7
- package/fesm2022/acorex-components-text-box.mjs +10 -10
- package/fesm2022/acorex-components-time-line.mjs +10 -10
- package/fesm2022/acorex-components-toast.mjs +51 -15
- package/fesm2022/acorex-components-toast.mjs.map +1 -1
- package/fesm2022/acorex-components-toolbar.mjs +7 -7
- package/fesm2022/acorex-components-tooltip.mjs +10 -10
- package/fesm2022/acorex-components-tree-view.mjs +178 -163
- package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
- package/fesm2022/acorex-components-uploader.mjs +22 -22
- package/fesm2022/acorex-components-video-player.mjs +7 -7
- package/fesm2022/acorex-components-wysiwyg.mjs +31 -31
- package/grid-layout-builder/lib/grid-layout-container.component.d.ts +8 -23
- package/grid-layout-builder/lib/grid-layout-widget.component.d.ts +27 -3
- package/grid-layout-builder/lib/types.d.ts +82 -25
- package/grid-layout-builder/lib/utility.d.ts +7 -0
- package/image-editor/index.d.ts +1 -1
- package/image-editor/lib/image-editor-container/image-editor-container.component.d.ts +1 -13
- package/image-editor/lib/image-editor-cropper-window/image-editor-cropper-window.component.d.ts +47 -0
- package/image-editor/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.d.ts +1 -0
- package/image-editor/lib/image-editor-view/image-editor-view.component.d.ts +17 -24
- package/image-editor/lib/image-editor.module.d.ts +2 -2
- package/image-editor/lib/image-editor.service.d.ts +1 -0
- package/notification/lib/notification.class.d.ts +2 -0
- package/notification/lib/notification.component.d.ts +7 -6
- package/notification/lib/notification.config.d.ts +1 -0
- package/package.json +1 -1
- package/paint/lib/paint/paint-view/paint-view.component.d.ts +0 -6
- package/rest-api-generator/lib/request-headers/request-headers.component.d.ts +1 -1
- package/toast/lib/toast.class.d.ts +2 -0
- package/toast/lib/toast.component.d.ts +7 -0
- package/toast/lib/toast.config.d.ts +1 -0
- package/tree-view/lib/tree-view-item.component.d.ts +8 -12
- package/tree-view/lib/tree-view.class.d.ts +4 -20
- package/tree-view/lib/tree-view.component.d.ts +25 -16
- package/image-editor/lib/image-editor-tools/image-editor-header/image-editor-header.component.d.ts +0 -12
@@ -1,20 +1,21 @@
|
|
1
1
|
import { AXButtonComponent, AXButtonModule } from '@acorex/components/button';
|
2
2
|
import { MXBaseComponent, MXInputBaseValueComponent, MXLookComponent, AXComponent, AXFocusableComponent, AXClearableComponent, AXValuableComponent } from '@acorex/components/common';
|
3
|
-
import * as i1 from '@acorex/components/decorators';
|
4
|
-
import {
|
5
|
-
import { AXDialogService, AXDialogModule } from '@acorex/components/dialog';
|
3
|
+
import * as i1$1 from '@acorex/components/decorators';
|
4
|
+
import { AXDecoratorIconComponent, AXDecoratorModule } from '@acorex/components/decorators';
|
6
5
|
import { AXLoadingSpinnerComponent, AXLoadingModule } from '@acorex/components/loading';
|
7
6
|
import * as i2 from '@acorex/components/toolbar';
|
8
7
|
import { AXToolBarModule } from '@acorex/components/toolbar';
|
9
|
-
import
|
8
|
+
import * as i1$2 from '@angular/common';
|
9
|
+
import { CommonModule, isPlatformBrowser } from '@angular/common';
|
10
10
|
import * as i0 from '@angular/core';
|
11
|
-
import { signal, Injectable, inject, output, ViewEncapsulation, Component, ChangeDetectionStrategy, input, viewChild, Renderer2,
|
12
|
-
import * as i1
|
11
|
+
import { signal, Injectable, inject, output, ViewEncapsulation, Component, ChangeDetectionStrategy, input, NgZone, ElementRef, viewChild, Renderer2, PLATFORM_ID, effect, afterNextRender, computed, linkedSignal, HostBinding, contentChild, forwardRef, NgModule } from '@angular/core';
|
12
|
+
import * as i1 from '@angular/forms';
|
13
13
|
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
|
14
14
|
import { classes } from 'polytype';
|
15
|
-
import { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';
|
16
15
|
import { AXColorBoxComponent, AXColorBoxModule } from '@acorex/components/color-box';
|
17
16
|
import { AXRangeSliderComponent, AXRangeSliderModule } from '@acorex/components/range-slider';
|
17
|
+
import { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';
|
18
|
+
import { AXDialogModule } from '@acorex/components/dialog';
|
18
19
|
import { AXPopoverModule } from '@acorex/components/popover';
|
19
20
|
import { AXSelectBoxModule } from '@acorex/components/select-box';
|
20
21
|
|
@@ -33,11 +34,12 @@ class AXImageEditorService {
|
|
33
34
|
this.imageBlob = signal([]);
|
34
35
|
this.undoPressed = signal(false);
|
35
36
|
this.redoPressed = signal(false);
|
37
|
+
this.cropperRatio = signal(null);
|
36
38
|
}
|
37
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1
|
38
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
40
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorService }); }
|
39
41
|
}
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorService, decorators: [{
|
41
43
|
type: Injectable
|
42
44
|
}] });
|
43
45
|
|
@@ -53,53 +55,20 @@ class AXImageEditorCropComponent {
|
|
53
55
|
cropButtonHandler() {
|
54
56
|
this.cropPressed.emit();
|
55
57
|
}
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
}
|
63
|
-
|
64
|
-
/**
|
65
|
-
* paint mode.
|
66
|
-
* @category Components
|
67
|
-
*/
|
68
|
-
class AXImageEditorHistoryComponent {
|
69
|
-
constructor() {
|
70
|
-
this.service = inject(AXImageEditorService);
|
71
|
-
}
|
72
|
-
UndoHandler() {
|
73
|
-
this.service.undoPressed.set(true);
|
74
|
-
}
|
75
|
-
RedoHandler() {
|
76
|
-
this.service.redoPressed.set(true);
|
77
|
-
}
|
78
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: AXImageEditorHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
79
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.8", type: AXImageEditorHistoryComponent, isStandalone: true, selector: "ax-image-editor-history", ngImport: i0, template: "<ax-button axTooltip=\"Undo\" axTooltipPlacement=\"top\" (onClick)=\"UndoHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-undo\"></ax-icon>\n</ax-button>\n\n<ax-button axTooltip=\"Redo\" axTooltipPlacement=\"top\" (onClick)=\"RedoHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-redo\"></ax-icon>\n</ax-button>\n", dependencies: [{ kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "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: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltip", "axTooltipPlacement", "axTooltipOpenAfter", "axTooltipCloseAfter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
80
|
-
}
|
81
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: AXImageEditorHistoryComponent, decorators: [{
|
82
|
-
type: Component,
|
83
|
-
args: [{ selector: 'ax-image-editor-history', encapsulation: ViewEncapsulation.None, imports: [AXButtonComponent, AXDecoratorModule, AXTooltipDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-button axTooltip=\"Undo\" axTooltipPlacement=\"top\" (onClick)=\"UndoHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-undo\"></ax-icon>\n</ax-button>\n\n<ax-button axTooltip=\"Redo\" axTooltipPlacement=\"top\" (onClick)=\"RedoHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-redo\"></ax-icon>\n</ax-button>\n" }]
|
84
|
-
}] });
|
85
|
-
|
86
|
-
/**
|
87
|
-
* paint mode.
|
88
|
-
* @category Components
|
89
|
-
*/
|
90
|
-
class AXimageEditorHeaderComponent {
|
91
|
-
constructor() {
|
92
|
-
this.parent = inject(AXImageEditorContainerComponent);
|
93
|
-
}
|
94
|
-
saveHandler() {
|
95
|
-
this.parent.save();
|
58
|
+
ratioHandler(r) {
|
59
|
+
if (this.service.cropperRatio()) {
|
60
|
+
this.service.cropperRatio.set(null);
|
61
|
+
}
|
62
|
+
else {
|
63
|
+
this.service.cropperRatio.set(r);
|
64
|
+
}
|
96
65
|
}
|
97
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1
|
98
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1
|
66
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorCropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
67
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.1", type: AXImageEditorCropComponent, isStandalone: true, selector: "ax-image-editor-crop", outputs: { cropPressed: "cropPressed" }, ngImport: i0, template: "<ax-button (click)=\"cropButtonHandler()\" class=\"ax-crop-save ax-sm\" text=\"Crop\"></ax-button>\n\n<ax-button\n [selected]=\"this.service.cropperRatio() === '1:1' ? true : false\"\n [color]=\"this.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]=\"this.service.cropperRatio() === '16:9' ? true : false\"\n [color]=\"this.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", dependencies: [{ kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
99
68
|
}
|
100
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorCropComponent, decorators: [{
|
101
70
|
type: Component,
|
102
|
-
args: [{ selector: 'ax-image-editor-
|
71
|
+
args: [{ selector: 'ax-image-editor-crop', encapsulation: ViewEncapsulation.None, imports: [AXButtonComponent], template: "<ax-button (click)=\"cropButtonHandler()\" class=\"ax-crop-save ax-sm\" text=\"Crop\"></ax-button>\n\n<ax-button\n [selected]=\"this.service.cropperRatio() === '1:1' ? true : false\"\n [color]=\"this.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]=\"this.service.cropperRatio() === '16:9' ? true : false\"\n [color]=\"this.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" }]
|
103
72
|
}] });
|
104
73
|
|
105
74
|
/**
|
@@ -122,10 +91,10 @@ class AXImageEditorHighlightComponent {
|
|
122
91
|
valueHandler(e) {
|
123
92
|
this.service.highlightWidth.set(e);
|
124
93
|
}
|
125
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1
|
126
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1
|
94
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorHighlightComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
95
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.1", type: AXImageEditorHighlightComponent, isStandalone: true, selector: "ax-image-editor-highlight", ngImport: i0, template: "<ax-color-box\n [showValue]=\"false\"\n [showIcon]=\"false\"\n axTooltip=\"Highlight Color Picker\"\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", styles: ["ax-image-editor-highlight{display:flex}ax-image-editor-highlight ax-range-slider{padding:.5rem .75rem;width:10rem}ax-image-editor-highlight ax-range-slider .ax-range-slider .ax-range-slider-handler{width:1rem!important;height:1rem!important}\n"], dependencies: [{ kind: "component", type: AXColorBoxComponent, selector: "ax-color-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "showBadge", "showValue", "showClearButton", "showIcon"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXRangeSliderComponent, selector: "ax-range-slider", inputs: ["disabled", "readonly", "orientation", "color", "values", "mode", "min", "max", "step", "snap", "tooltipMode", "snapMode", "hasStep", "hasSnap", "hasLable", "hasTooltip"], outputs: ["valuesChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
127
96
|
}
|
128
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
97
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorHighlightComponent, decorators: [{
|
129
98
|
type: Component,
|
130
99
|
args: [{ selector: 'ax-image-editor-highlight', encapsulation: ViewEncapsulation.None, imports: [AXColorBoxComponent, CommonModule, FormsModule, AXRangeSliderComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-color-box\n [showValue]=\"false\"\n [showIcon]=\"false\"\n axTooltip=\"Highlight Color Picker\"\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", styles: ["ax-image-editor-highlight{display:flex}ax-image-editor-highlight ax-range-slider{padding:.5rem .75rem;width:10rem}ax-image-editor-highlight ax-range-slider .ax-range-slider .ax-range-slider-handler{width:1rem!important;height:1rem!important}\n"] }]
|
131
100
|
}] });
|
@@ -150,10 +119,10 @@ class AXImageEditorPenComponent {
|
|
150
119
|
valueHandler(e) {
|
151
120
|
this.service.penWidth.set(e);
|
152
121
|
}
|
153
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1
|
154
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1
|
122
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorPenComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
123
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.1", type: AXImageEditorPenComponent, isStandalone: true, selector: "ax-image-editor-pen", ngImport: i0, template: "<ax-color-box\n [showValue]=\"false\"\n [showIcon]=\"false\"\n axTooltip=\"Pen Color Picker\"\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", styles: ["ax-image-editor-pen{display:flex}ax-image-editor-pen ax-range-slider{padding:.5rem .75rem;width:10rem}ax-image-editor-pen ax-range-slider .ax-range-slider .ax-range-slider-handler{width:1rem!important;height:1rem!important}\n"], dependencies: [{ kind: "component", type: AXColorBoxComponent, selector: "ax-color-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "showBadge", "showValue", "showClearButton", "showIcon"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXRangeSliderComponent, selector: "ax-range-slider", inputs: ["disabled", "readonly", "orientation", "color", "values", "mode", "min", "max", "step", "snap", "tooltipMode", "snapMode", "hasStep", "hasSnap", "hasLable", "hasTooltip"], outputs: ["valuesChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
155
124
|
}
|
156
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorPenComponent, decorators: [{
|
157
126
|
type: Component,
|
158
127
|
args: [{ selector: 'ax-image-editor-pen', encapsulation: ViewEncapsulation.None, imports: [AXColorBoxComponent, CommonModule, FormsModule, AXRangeSliderComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-color-box\n [showValue]=\"false\"\n [showIcon]=\"false\"\n axTooltip=\"Pen Color Picker\"\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", styles: ["ax-image-editor-pen{display:flex}ax-image-editor-pen ax-range-slider{padding:.5rem .75rem;width:10rem}ax-image-editor-pen ax-range-slider .ax-range-slider .ax-range-slider-handler{width:1rem!important;height:1rem!important}\n"] }]
|
159
128
|
}] });
|
@@ -175,10 +144,10 @@ class AXImageEditorRotateComponent {
|
|
175
144
|
rotateLeftHandler() {
|
176
145
|
this.service.rotate.set({ state: -90, userInteract: true });
|
177
146
|
}
|
178
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1
|
179
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1
|
147
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorRotateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
148
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.1", type: AXImageEditorRotateComponent, isStandalone: true, selector: "ax-image-editor-rotate", ngImport: i0, template: "<ax-button axTooltip=\"Rotate Left\" axTooltipPlacement=\"top\" (click)=\"rotateLeftHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-arrow-turn-left\"></ax-icon>\n</ax-button>\n\n<ax-button axTooltip=\"Rotate Right\" axTooltipPlacement=\"top\" (click)=\"rotateRightHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-arrow-turn-right\"></ax-icon>\n</ax-button>\n", dependencies: [{ kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltip", "axTooltipPlacement", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
180
149
|
}
|
181
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
150
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorRotateComponent, decorators: [{
|
182
151
|
type: Component,
|
183
152
|
args: [{ selector: 'ax-image-editor-rotate', encapsulation: ViewEncapsulation.None, imports: [AXButtonComponent, AXTooltipDirective, AXDecoratorIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-button axTooltip=\"Rotate Left\" axTooltipPlacement=\"top\" (click)=\"rotateLeftHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-arrow-turn-left\"></ax-icon>\n</ax-button>\n\n<ax-button axTooltip=\"Rotate Right\" axTooltipPlacement=\"top\" (click)=\"rotateRightHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-arrow-turn-right\"></ax-icon>\n</ax-button>\n" }]
|
184
153
|
}] });
|
@@ -201,14 +170,248 @@ class AXImageEditorToolSelectorComponent {
|
|
201
170
|
this.service.penType.set(tool);
|
202
171
|
}
|
203
172
|
}
|
204
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1
|
205
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1
|
173
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorToolSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
174
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.1", type: AXImageEditorToolSelectorComponent, isStandalone: true, selector: "ax-image-editor-tool-selector", ngImport: i0, template: "<ax-button\n axTooltip=\"pen\"\n axTooltipPlacement=\"top\"\n (onClick)=\"changeToolHandler('pen')\"\n look=\"blank\"\n [selected]=\"this.service.activeToolState() === 'pen' ? true : false\"\n [color]=\"this.service.activeToolState() === 'pen' ? 'primary' : 'default'\"\n>\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n</ax-button>\n\n<ax-button\n axTooltip=\"highlight\"\n axTooltipPlacement=\"top\"\n (onClick)=\"changeToolHandler('highlight')\"\n look=\"blank\"\n [selected]=\"this.service.activeToolState() === 'highlight' ? true : false\"\n [color]=\"this.service.activeToolState() === 'highlight' ? 'primary' : 'default'\"\n>\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n</ax-button>\n\n<ax-button\n axTooltip=\"crop\"\n axTooltipPlacement=\"top\"\n (onClick)=\"changeToolHandler('crop')\"\n look=\"blank\"\n [selected]=\"this.service.activeToolState() === 'crop' ? true : false\"\n [color]=\"this.service.activeToolState() === 'crop' ? 'primary' : 'default'\"\n>\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n\n<ax-button\n axTooltip=\"rotate\"\n axTooltipPlacement=\"top\"\n (onClick)=\"changeToolHandler('rotate')\"\n look=\"blank\"\n [selected]=\"this.service.activeToolState() === 'rotate' ? true : false\"\n [color]=\"this.service.activeToolState() === 'rotate' ? 'primary' : 'default'\"\n>\n <i class=\"fa-solid fa-rotate\"></i>\n</ax-button>\n", dependencies: [{ kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltip", "axTooltipPlacement", "axTooltipOpenAfter", "axTooltipCloseAfter"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
206
175
|
}
|
207
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorToolSelectorComponent, decorators: [{
|
208
177
|
type: Component,
|
209
178
|
args: [{ selector: 'ax-image-editor-tool-selector', encapsulation: ViewEncapsulation.None, imports: [AXButtonComponent, AXDecoratorModule, AXTooltipDirective], template: "<ax-button\n axTooltip=\"pen\"\n axTooltipPlacement=\"top\"\n (onClick)=\"changeToolHandler('pen')\"\n look=\"blank\"\n [selected]=\"this.service.activeToolState() === 'pen' ? true : false\"\n [color]=\"this.service.activeToolState() === 'pen' ? 'primary' : 'default'\"\n>\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n</ax-button>\n\n<ax-button\n axTooltip=\"highlight\"\n axTooltipPlacement=\"top\"\n (onClick)=\"changeToolHandler('highlight')\"\n look=\"blank\"\n [selected]=\"this.service.activeToolState() === 'highlight' ? true : false\"\n [color]=\"this.service.activeToolState() === 'highlight' ? 'primary' : 'default'\"\n>\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n</ax-button>\n\n<ax-button\n axTooltip=\"crop\"\n axTooltipPlacement=\"top\"\n (onClick)=\"changeToolHandler('crop')\"\n look=\"blank\"\n [selected]=\"this.service.activeToolState() === 'crop' ? true : false\"\n [color]=\"this.service.activeToolState() === 'crop' ? 'primary' : 'default'\"\n>\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n\n<ax-button\n axTooltip=\"rotate\"\n axTooltipPlacement=\"top\"\n (onClick)=\"changeToolHandler('rotate')\"\n look=\"blank\"\n [selected]=\"this.service.activeToolState() === 'rotate' ? true : false\"\n [color]=\"this.service.activeToolState() === 'rotate' ? 'primary' : 'default'\"\n>\n <i class=\"fa-solid fa-rotate\"></i>\n</ax-button>\n" }]
|
210
179
|
}] });
|
211
180
|
|
181
|
+
/**
|
182
|
+
* paint mode.
|
183
|
+
* @category Components
|
184
|
+
*/
|
185
|
+
class AXImageEditorCropperWindowComponent {
|
186
|
+
constructor() {
|
187
|
+
this.showGrid = input(true);
|
188
|
+
this.service = inject(AXImageEditorService);
|
189
|
+
this.ngZone = inject(NgZone);
|
190
|
+
this.selectedHandle = signal(null);
|
191
|
+
this.panState = signal(false);
|
192
|
+
this.elementRef = inject(ElementRef);
|
193
|
+
this.cropperWindow = viewChild('r');
|
194
|
+
this.currentX = signal(-45);
|
195
|
+
this.currentY = signal(-45);
|
196
|
+
this.prevX = signal(0);
|
197
|
+
this.prevY = signal(0);
|
198
|
+
this.renderer = inject(Renderer2);
|
199
|
+
this.platformID = inject(PLATFORM_ID);
|
200
|
+
this.#eff = effect(() => {
|
201
|
+
const host = this.elementRef.nativeElement;
|
202
|
+
if (this.service.cropperRatio() === '1:1') {
|
203
|
+
host.style.width = `${150}px`;
|
204
|
+
host.style.height = `${150}px`;
|
205
|
+
}
|
206
|
+
else if (this.service.cropperRatio() === '16:9') {
|
207
|
+
host.style.width = `${266.6}px`;
|
208
|
+
host.style.height = `${150}px`;
|
209
|
+
}
|
210
|
+
else {
|
211
|
+
host.style.width = `${150}px`;
|
212
|
+
host.style.height = `${150}px`;
|
213
|
+
}
|
214
|
+
});
|
215
|
+
this.#init = afterNextRender(() => {
|
216
|
+
const host = this.elementRef.nativeElement;
|
217
|
+
this.ngZone.runOutsideAngular(() => {
|
218
|
+
this.mouseMoveEvent = this.renderer.listen(document, 'mousemove', this.changeSizeHandler.bind(this));
|
219
|
+
this.mouseUpEvent = this.renderer.listen(document, 'mouseup', this.clearSelector.bind(this));
|
220
|
+
this.mouseDownEvent = this.renderer.listen(host, 'mousedown', this.panDown.bind(this));
|
221
|
+
this.mouseMoveEvent2 = this.renderer.listen(host, 'mousemove', this.panMove.bind(this));
|
222
|
+
this.mouseUpEvent2 = this.renderer.listen(host, 'mouseup', this.panUp.bind(this));
|
223
|
+
this.mouseLeaveEvent = this.renderer.listen(host, 'mouseleave', this.panUp.bind(this));
|
224
|
+
});
|
225
|
+
});
|
226
|
+
this.#positionChange = effect(() => {
|
227
|
+
this.setPosition(this.currentX(), this.currentY());
|
228
|
+
});
|
229
|
+
this.edgeCase = false;
|
230
|
+
}
|
231
|
+
#eff;
|
232
|
+
#init;
|
233
|
+
ngOnDestroy() {
|
234
|
+
if (isPlatformBrowser(this.platformID) && this.mouseMoveEvent) {
|
235
|
+
this.mouseMoveEvent();
|
236
|
+
}
|
237
|
+
if (isPlatformBrowser(this.platformID) && this.mouseUpEvent) {
|
238
|
+
this.mouseUpEvent();
|
239
|
+
}
|
240
|
+
if (isPlatformBrowser(this.platformID) && this.mouseDownEvent) {
|
241
|
+
this.mouseDownEvent();
|
242
|
+
}
|
243
|
+
if (isPlatformBrowser(this.platformID) && this.mouseMoveEvent2) {
|
244
|
+
this.mouseMoveEvent2();
|
245
|
+
}
|
246
|
+
if (isPlatformBrowser(this.platformID) && this.mouseUpEvent2) {
|
247
|
+
this.mouseUpEvent2();
|
248
|
+
}
|
249
|
+
if (isPlatformBrowser(this.platformID) && this.mouseLeaveEvent) {
|
250
|
+
this.mouseLeaveEvent();
|
251
|
+
}
|
252
|
+
}
|
253
|
+
#positionChange;
|
254
|
+
panMove(e) {
|
255
|
+
if (this.selectedHandle())
|
256
|
+
return;
|
257
|
+
if (!this.panState())
|
258
|
+
return;
|
259
|
+
const currentX = e.clientX;
|
260
|
+
const currentY = e.clientY;
|
261
|
+
const deltaX = currentX - this.prevX();
|
262
|
+
const deltaY = currentY - this.prevY();
|
263
|
+
this.currentX.update((prev) => prev + deltaX);
|
264
|
+
this.currentY.update((prev) => prev + deltaY);
|
265
|
+
this.prevX.set(currentX);
|
266
|
+
this.prevY.set(currentY);
|
267
|
+
}
|
268
|
+
panDown(e) {
|
269
|
+
if (this.selectedHandle())
|
270
|
+
return;
|
271
|
+
this.panState.set(true);
|
272
|
+
this.prevX.set(e.clientX);
|
273
|
+
this.prevY.set(e.clientY);
|
274
|
+
}
|
275
|
+
panUp() {
|
276
|
+
if (this.selectedHandle())
|
277
|
+
return;
|
278
|
+
this.panState.set(false);
|
279
|
+
}
|
280
|
+
getCropperArea() {
|
281
|
+
return this.elementRef.nativeElement.getBoundingClientRect();
|
282
|
+
}
|
283
|
+
setPosition(posX, posY) {
|
284
|
+
const el = this.elementRef.nativeElement;
|
285
|
+
el.style.transform = `translate(${posX}px, ${posY}px)`;
|
286
|
+
}
|
287
|
+
handleSelector(e, value) {
|
288
|
+
if (this.panState())
|
289
|
+
return;
|
290
|
+
const host = this.elementRef.nativeElement;
|
291
|
+
this.startX = e.clientX;
|
292
|
+
this.startY = e.clientY;
|
293
|
+
this.startWidth = host.offsetWidth;
|
294
|
+
this.startHeight = host.offsetHeight;
|
295
|
+
this.startLeft = host.offsetLeft;
|
296
|
+
this.startTop = host.offsetTop;
|
297
|
+
this.selectedHandle.set(value);
|
298
|
+
}
|
299
|
+
changeSizeHandler(e) {
|
300
|
+
if (this.panState())
|
301
|
+
return;
|
302
|
+
if (!this.selectedHandle())
|
303
|
+
return;
|
304
|
+
const host = this.elementRef.nativeElement;
|
305
|
+
const rect = host.getBoundingClientRect();
|
306
|
+
const dy = e.clientY - this.startY;
|
307
|
+
const dx = e.clientX - this.startX;
|
308
|
+
if (rect.width < 20 || rect.height < 20) {
|
309
|
+
this.edgeCase = true;
|
310
|
+
return;
|
311
|
+
}
|
312
|
+
switch (this.selectedHandle()) {
|
313
|
+
case 'right':
|
314
|
+
host.style.width = `${e.movementX + rect.width}px`;
|
315
|
+
break;
|
316
|
+
case 'top':
|
317
|
+
host.style.height = `${this.startHeight - dy}px`;
|
318
|
+
host.style.top = `${this.startTop + dy}px`;
|
319
|
+
break;
|
320
|
+
case 'left':
|
321
|
+
host.style.width = `${this.startWidth - dx}px`;
|
322
|
+
host.style.left = `${this.startLeft + dx}px`;
|
323
|
+
break;
|
324
|
+
case 'bottom':
|
325
|
+
host.style.height = `${rect.height + e.movementY}px`;
|
326
|
+
break;
|
327
|
+
case 'right-top':
|
328
|
+
if (this.service.cropperRatio() === '1:1') {
|
329
|
+
host.style.height = `${this.startHeight - dy}px`;
|
330
|
+
host.style.top = `${this.startTop + dy}px`;
|
331
|
+
host.style.width = `${this.startHeight - dy}px`;
|
332
|
+
}
|
333
|
+
else if (this.service.cropperRatio() === '16:9') {
|
334
|
+
host.style.height = `${this.startHeight - dy}px`;
|
335
|
+
host.style.top = `${this.startTop + dy}px`;
|
336
|
+
host.style.width = `${(this.startHeight - dy) * 1.77}px`;
|
337
|
+
}
|
338
|
+
else {
|
339
|
+
host.style.height = `${this.startHeight - dy}px`;
|
340
|
+
host.style.top = `${this.startTop + dy}px`;
|
341
|
+
host.style.width = `${e.movementX + rect.width}px`;
|
342
|
+
}
|
343
|
+
break;
|
344
|
+
case 'bottom-right':
|
345
|
+
if (this.service.cropperRatio() === '1:1') {
|
346
|
+
host.style.width = `${e.movementX + rect.width}px`;
|
347
|
+
host.style.height = `${e.movementX + rect.width}px`;
|
348
|
+
}
|
349
|
+
else if (this.service.cropperRatio() === '16:9') {
|
350
|
+
host.style.height = `${e.movementX + rect.height}px`;
|
351
|
+
host.style.width = `${(e.movementX + rect.height) * 1.77}px`;
|
352
|
+
}
|
353
|
+
else {
|
354
|
+
host.style.height = `${rect.height + e.movementY}px`;
|
355
|
+
host.style.width = `${e.movementX + rect.width}px`;
|
356
|
+
}
|
357
|
+
break;
|
358
|
+
case 'bottom-left':
|
359
|
+
if (this.service.cropperRatio() === '1:1') {
|
360
|
+
host.style.height = `${this.startWidth - dx}px`;
|
361
|
+
host.style.width = `${this.startWidth - dx}px`;
|
362
|
+
host.style.left = `${this.startLeft + dx}px`;
|
363
|
+
}
|
364
|
+
else if (this.service.cropperRatio() === '16:9') {
|
365
|
+
host.style.height = `${(this.startWidth - dx) / 1.77}px`;
|
366
|
+
host.style.width = `${this.startWidth - dx}px`;
|
367
|
+
host.style.left = `${this.startLeft + dx}px`;
|
368
|
+
}
|
369
|
+
else {
|
370
|
+
host.style.height = `${rect.height + e.movementY}px`;
|
371
|
+
host.style.width = `${this.startWidth - dx}px`;
|
372
|
+
host.style.left = `${this.startLeft + dx}px`;
|
373
|
+
}
|
374
|
+
break;
|
375
|
+
case 'left-top':
|
376
|
+
if (this.service.cropperRatio() === '1:1') {
|
377
|
+
host.style.width = `${this.startWidth - dx}px`;
|
378
|
+
host.style.left = `${this.startLeft + dx}px`;
|
379
|
+
host.style.height = `${this.startWidth - dx}px`;
|
380
|
+
host.style.top = `${this.startLeft + dx}px`;
|
381
|
+
}
|
382
|
+
else if (this.service.cropperRatio() === '16:9') {
|
383
|
+
host.style.width = `${this.startWidth - dx}px`;
|
384
|
+
host.style.left = `${this.startLeft + dx}px`;
|
385
|
+
host.style.height = `${(this.startWidth - dx) / 1.77}px`;
|
386
|
+
host.style.top = `${this.startLeft + dx}px`;
|
387
|
+
}
|
388
|
+
else {
|
389
|
+
host.style.width = `${this.startWidth - dx}px`;
|
390
|
+
host.style.left = `${this.startLeft + dx}px`;
|
391
|
+
host.style.height = `${this.startHeight - dy}px`;
|
392
|
+
host.style.top = `${this.startTop + dy}px`;
|
393
|
+
}
|
394
|
+
}
|
395
|
+
}
|
396
|
+
clearSelector() {
|
397
|
+
if (this.panState())
|
398
|
+
return;
|
399
|
+
const host = this.elementRef.nativeElement;
|
400
|
+
if (this.edgeCase) {
|
401
|
+
host.style.height = `20px`;
|
402
|
+
host.style.width = `20px`;
|
403
|
+
this.edgeCase = false;
|
404
|
+
}
|
405
|
+
this.selectedHandle.set(null);
|
406
|
+
}
|
407
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorCropperWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
408
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: AXImageEditorCropperWindowComponent, isStandalone: true, selector: "ax-image-editor-cropper-window", inputs: { showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "cropperWindow", first: true, predicate: ["r"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [ngStyle]=\"!showGrid() && { border: '1px dashed white' }\" #r class=\"ax-image-cropper-window-container\">\n @if (!this.service.cropperRatio()) {\n <div (mousedown)=\"handleSelector($event, 'right')\" class=\"ax-image-right-handle ax-handle-shape\"></div>\n <div (mousedown)=\"handleSelector($event, 'top')\" class=\"ax-image-top-handle ax-handle-shape\"></div>\n <div (mousedown)=\"handleSelector($event, 'left')\" class=\"ax-image-left-handle ax-handle-shape\"></div>\n <div (mousedown)=\"handleSelector($event, 'bottom')\" class=\"ax-image-bottom-handle ax-handle-shape\"></div>\n }\n\n <div (mousedown)=\"handleSelector($event, 'right-top')\" class=\"ax-image-right-top-handle ax-handle-shape\"></div>\n <div (mousedown)=\"handleSelector($event, 'bottom-right')\" class=\"ax-image-bottom-right-handle ax-handle-shape\"></div>\n <div (mousedown)=\"handleSelector($event, 'bottom-left')\" class=\"ax-image-bottom-left-handle ax-handle-shape\"></div>\n <div (mousedown)=\"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: ["ax-image-editor-cropper-window{position:absolute;top:45%;left:45%;-webkit-user-select:none;user-select:none}ax-image-editor-cropper-window .ax-image-cropper-window-container{position:relative;height:100%;cursor:move;outline:rgba(0,0,0,.7) solid 100vmax;display:grid;grid-template-columns:repeat(3,1fr)}ax-image-editor-cropper-window .ax-image-cropper-window-container .ax-grid-item{border:1px dashed rgba(255,255,255,.5)}ax-image-editor-cropper-window .ax-handle-shape{width:1rem;height:1rem;border:1px dashed white;background-color:gray;position:absolute;-webkit-user-select:none;user-select:none}ax-image-editor-cropper-window .ax-image-right-top-handle{top:-.5rem;right:-.5rem;cursor:ne-resize}ax-image-editor-cropper-window .ax-image-bottom-right-handle{bottom:-.5rem;right:-.5rem;cursor:se-resize}ax-image-editor-cropper-window .ax-image-right-handle{right:-.5rem;top:calc(50% - .5rem);cursor:e-resize}ax-image-editor-cropper-window .ax-image-bottom-left-handle{bottom:-.5rem;left:-.5rem;cursor:sw-resize}ax-image-editor-cropper-window .ax-image-left-top-handle{top:-.5rem;left:-.5rem;cursor:nw-resize}ax-image-editor-cropper-window .ax-image-bottom-handle{bottom:-.5rem;right:calc(50% - .5rem);cursor:s-resize}ax-image-editor-cropper-window .ax-image-left-handle{left:-.5rem;top:calc(50% - .5rem);cursor:w-resize}ax-image-editor-cropper-window .ax-image-top-handle{top:-.5rem;right:calc(50% - .5rem);cursor:n-resize}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
409
|
+
}
|
410
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorCropperWindowComponent, decorators: [{
|
411
|
+
type: Component,
|
412
|
+
args: [{ selector: 'ax-image-editor-cropper-window', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule], template: "<div [ngStyle]=\"!showGrid() && { border: '1px dashed white' }\" #r class=\"ax-image-cropper-window-container\">\n @if (!this.service.cropperRatio()) {\n <div (mousedown)=\"handleSelector($event, 'right')\" class=\"ax-image-right-handle ax-handle-shape\"></div>\n <div (mousedown)=\"handleSelector($event, 'top')\" class=\"ax-image-top-handle ax-handle-shape\"></div>\n <div (mousedown)=\"handleSelector($event, 'left')\" class=\"ax-image-left-handle ax-handle-shape\"></div>\n <div (mousedown)=\"handleSelector($event, 'bottom')\" class=\"ax-image-bottom-handle ax-handle-shape\"></div>\n }\n\n <div (mousedown)=\"handleSelector($event, 'right-top')\" class=\"ax-image-right-top-handle ax-handle-shape\"></div>\n <div (mousedown)=\"handleSelector($event, 'bottom-right')\" class=\"ax-image-bottom-right-handle ax-handle-shape\"></div>\n <div (mousedown)=\"handleSelector($event, 'bottom-left')\" class=\"ax-image-bottom-left-handle ax-handle-shape\"></div>\n <div (mousedown)=\"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: ["ax-image-editor-cropper-window{position:absolute;top:45%;left:45%;-webkit-user-select:none;user-select:none}ax-image-editor-cropper-window .ax-image-cropper-window-container{position:relative;height:100%;cursor:move;outline:rgba(0,0,0,.7) solid 100vmax;display:grid;grid-template-columns:repeat(3,1fr)}ax-image-editor-cropper-window .ax-image-cropper-window-container .ax-grid-item{border:1px dashed rgba(255,255,255,.5)}ax-image-editor-cropper-window .ax-handle-shape{width:1rem;height:1rem;border:1px dashed white;background-color:gray;position:absolute;-webkit-user-select:none;user-select:none}ax-image-editor-cropper-window .ax-image-right-top-handle{top:-.5rem;right:-.5rem;cursor:ne-resize}ax-image-editor-cropper-window .ax-image-bottom-right-handle{bottom:-.5rem;right:-.5rem;cursor:se-resize}ax-image-editor-cropper-window .ax-image-right-handle{right:-.5rem;top:calc(50% - .5rem);cursor:e-resize}ax-image-editor-cropper-window .ax-image-bottom-left-handle{bottom:-.5rem;left:-.5rem;cursor:sw-resize}ax-image-editor-cropper-window .ax-image-left-top-handle{top:-.5rem;left:-.5rem;cursor:nw-resize}ax-image-editor-cropper-window .ax-image-bottom-handle{bottom:-.5rem;right:calc(50% - .5rem);cursor:s-resize}ax-image-editor-cropper-window .ax-image-left-handle{left:-.5rem;top:calc(50% - .5rem);cursor:w-resize}ax-image-editor-cropper-window .ax-image-top-handle{top:-.5rem;right:calc(50% - .5rem);cursor:n-resize}\n"] }]
|
413
|
+
}] });
|
414
|
+
|
212
415
|
class AXImageEditorViewComponent extends MXBaseComponent {
|
213
416
|
/** @ignore */
|
214
417
|
resizeWindow() {
|
@@ -238,6 +441,14 @@ class AXImageEditorViewComponent extends MXBaseComponent {
|
|
238
441
|
/** @ignore */
|
239
442
|
constructor() {
|
240
443
|
super();
|
444
|
+
/**
|
445
|
+
* its change grid display state.
|
446
|
+
*/
|
447
|
+
this.showGrid = input(true);
|
448
|
+
/**
|
449
|
+
* its change grid display state.
|
450
|
+
*/
|
451
|
+
this.lockRatio = signal(false);
|
241
452
|
/**
|
242
453
|
* its receive image src.
|
243
454
|
*/
|
@@ -245,33 +456,27 @@ class AXImageEditorViewComponent extends MXBaseComponent {
|
|
245
456
|
/** @ignore */
|
246
457
|
this.canvasElem = viewChild('canvasElem');
|
247
458
|
/** @ignore */
|
459
|
+
this.cropperWindow = viewChild('f');
|
460
|
+
/** @ignore */
|
248
461
|
this.ctx = signal(null);
|
249
462
|
/** @ignore */
|
250
463
|
this.service = inject(AXImageEditorService);
|
251
464
|
/** @ignore */
|
252
|
-
this.cropImageData = signal(null);
|
253
|
-
/** @ignore */
|
254
465
|
this.isMouseDown = signal(false);
|
255
466
|
/** @ignore */
|
256
|
-
this.cropStartX = signal(0);
|
257
|
-
/** @ignore */
|
258
|
-
this.cropStartY = signal(0);
|
259
|
-
/** @ignore */
|
260
|
-
this.cropEndX = signal(0);
|
261
|
-
/** @ignore */
|
262
|
-
this.cropEndY = signal(0);
|
263
|
-
/** @ignore */
|
264
467
|
this.isDrawRectangleCreated = signal(false);
|
265
468
|
/** @ignore */
|
266
469
|
this.parent = inject(AXImageEditorContainerComponent);
|
470
|
+
/** @ignore */
|
267
471
|
this.renderer = inject(Renderer2);
|
268
472
|
/** @ignore */
|
269
473
|
this.imageAspect = computed(() => {
|
270
474
|
return this.service.initialImage().width / this.service.initialImage().height;
|
271
475
|
});
|
476
|
+
/** @ignore */
|
272
477
|
this.imageEditorHistory = signal([]);
|
478
|
+
/** @ignore */
|
273
479
|
this.imageEditorHistoryPointer = linkedSignal(() => this.imageEditorHistory().length - 1);
|
274
|
-
this.ngZone = inject(NgZone);
|
275
480
|
afterNextRender(() => {
|
276
481
|
this.resizeEventListener = this.renderer.listen(window, 'resize', this.resizeWindow.bind(this));
|
277
482
|
//load image
|
@@ -299,20 +504,6 @@ class AXImageEditorViewComponent extends MXBaseComponent {
|
|
299
504
|
this.imageChanged();
|
300
505
|
}
|
301
506
|
});
|
302
|
-
effect(() => {
|
303
|
-
if (!this.ctx())
|
304
|
-
return;
|
305
|
-
this.ctx().globalAlpha = 1;
|
306
|
-
if (this.service.activeToolState() === 'crop') {
|
307
|
-
this.ctx().filter = 'brightness(40%)';
|
308
|
-
}
|
309
|
-
else {
|
310
|
-
this.ctx().filter = 'brightness(100%)';
|
311
|
-
}
|
312
|
-
if (!this.service.newImage())
|
313
|
-
return;
|
314
|
-
this.ctx().drawImage(this.service.newImage(), 0, 0, this.service.newImage().width, this.service.newImage().height);
|
315
|
-
});
|
316
507
|
effect(() => {
|
317
508
|
if (!this.service.rotate().userInteract || !this.ctx())
|
318
509
|
return;
|
@@ -371,186 +562,41 @@ class AXImageEditorViewComponent extends MXBaseComponent {
|
|
371
562
|
/** @ignore */
|
372
563
|
mouseDownHandler(e) {
|
373
564
|
this.isMouseDown.set(true);
|
374
|
-
if (this.service.
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
return;
|
382
|
-
this.penConfigHandler(this.service.penType());
|
383
|
-
this.ctx().beginPath();
|
384
|
-
this.ctx().moveTo(e.offsetX, e.offsetY);
|
385
|
-
this.ctx().lineTo(e.offsetX, e.offsetY);
|
386
|
-
this.ctx().stroke();
|
387
|
-
}
|
565
|
+
if (!this.service.penType())
|
566
|
+
return;
|
567
|
+
this.penConfigHandler(this.service.penType());
|
568
|
+
this.ctx().beginPath();
|
569
|
+
this.ctx().moveTo(e.offsetX, e.offsetY);
|
570
|
+
this.ctx().lineTo(e.offsetX, e.offsetY);
|
571
|
+
this.ctx().stroke();
|
388
572
|
}
|
389
573
|
/** @ignore */
|
390
574
|
mouseMoveHandler(e) {
|
391
575
|
if (!this.isMouseDown())
|
392
576
|
return;
|
393
|
-
if (this.service.
|
394
|
-
this.ctx().globalCompositeOperation = 'screen';
|
395
|
-
this.cropEndX.set(e.offsetX);
|
396
|
-
this.cropEndY.set(e.offsetY);
|
397
|
-
this.drawSelection();
|
398
|
-
}
|
399
|
-
else {
|
400
|
-
if (!this.service.penType())
|
401
|
-
return;
|
402
|
-
this.ctx().lineTo(e.offsetX, e.offsetY);
|
403
|
-
this.ctx().stroke();
|
404
|
-
}
|
405
|
-
}
|
406
|
-
/** @ignore */
|
407
|
-
mouseUpHandler() {
|
408
|
-
this.isMouseDown.set(false);
|
409
|
-
if (this.service.activeToolState() === 'crop' && this.cropEndX()) {
|
410
|
-
this.ctx().globalCompositeOperation = 'source-over';
|
411
|
-
this.cropImageFunction();
|
412
|
-
}
|
413
|
-
else {
|
414
|
-
this.ctx().closePath();
|
415
|
-
this.saveImageChange();
|
416
|
-
}
|
417
|
-
}
|
418
|
-
/** @ignore */
|
419
|
-
touchStartHandler(e) {
|
420
|
-
this.isMouseDown.set(true);
|
421
|
-
const offsetX = e.touches[0].clientX - this.getBoundingCanvasHandler().left;
|
422
|
-
const offsetY = e.touches[0].clientY - this.getBoundingCanvasHandler().top;
|
423
|
-
if (this.service.activeToolState() === 'crop') {
|
424
|
-
this.cropStartX.set(offsetX);
|
425
|
-
this.cropStartY.set(offsetY);
|
426
|
-
this.cropEndX.set(0);
|
427
|
-
}
|
428
|
-
else {
|
429
|
-
if (!this.service.penType())
|
430
|
-
return;
|
431
|
-
this.penConfigHandler(this.service.penType());
|
432
|
-
this.ctx().beginPath();
|
433
|
-
this.ctx().moveTo(offsetX, offsetY);
|
434
|
-
this.ctx().lineTo(offsetX, offsetY);
|
435
|
-
this.ctx().stroke();
|
436
|
-
}
|
437
|
-
}
|
438
|
-
/** @ignore */
|
439
|
-
touchMoveHandler(e) {
|
440
|
-
e.preventDefault(); // prevent page from scroll
|
441
|
-
if (!this.isMouseDown())
|
577
|
+
if (!this.service.penType())
|
442
578
|
return;
|
443
|
-
|
444
|
-
|
445
|
-
if (this.service.activeToolState() === 'crop') {
|
446
|
-
this.ctx().globalCompositeOperation = 'screen';
|
447
|
-
this.cropEndX.set(offsetX);
|
448
|
-
this.cropEndY.set(offsetY);
|
449
|
-
this.drawSelection();
|
450
|
-
}
|
451
|
-
else {
|
452
|
-
if (!this.service.penType())
|
453
|
-
return;
|
454
|
-
this.ctx().lineTo(offsetX, offsetY);
|
455
|
-
this.ctx().stroke();
|
456
|
-
}
|
579
|
+
this.ctx().lineTo(e.offsetX, e.offsetY);
|
580
|
+
this.ctx().stroke();
|
457
581
|
}
|
458
582
|
/** @ignore */
|
459
|
-
|
583
|
+
mouseUpHandler() {
|
460
584
|
this.isMouseDown.set(false);
|
461
|
-
|
462
|
-
|
463
|
-
this.cropImageFunction();
|
464
|
-
}
|
465
|
-
else {
|
466
|
-
this.ctx().closePath();
|
467
|
-
this.saveImageChange();
|
468
|
-
}
|
469
|
-
}
|
470
|
-
/** @ignore */
|
471
|
-
drawSelection() {
|
472
|
-
this.ngZone.runOutsideAngular(() => {
|
473
|
-
const cropWidth = this.cropEndX() - this.cropStartX();
|
474
|
-
const cropHeight = this.cropEndY() - this.cropStartY();
|
475
|
-
this.ctx().clearRect(0, 0, this.canvasElem().nativeElement.width, this.canvasElem().nativeElement.height);
|
476
|
-
this.ctx().drawImage(this.service.newImage(), 0, 0);
|
477
|
-
this.ctx().strokeStyle = 'white';
|
478
|
-
this.ctx().setLineDash([4, 10]);
|
479
|
-
this.ctx().lineWidth = 2;
|
480
|
-
this.ctx().strokeRect(this.cropStartX(), this.cropStartY(), cropWidth, cropHeight);
|
481
|
-
});
|
482
|
-
this.isDrawRectangleCreated.set(true);
|
483
|
-
}
|
484
|
-
/** @ignore */
|
485
|
-
cropImageFunction() {
|
486
|
-
this.ctx().clearRect(0, 0, this.canvasElem().nativeElement.width, this.canvasElem().nativeElement.height);
|
487
|
-
this.ctx().drawImage(this.service.newImage(), 0, 0);
|
488
|
-
let imageData;
|
489
|
-
if (this.cropStartX() < this.cropEndX() && this.cropStartY() > this.cropEndY()) {
|
490
|
-
imageData = this.ctx().getImageData(this.cropStartX(), this.cropEndY(), this.cropEndX() - this.cropStartX(), this.cropStartY() - this.cropEndY());
|
491
|
-
}
|
492
|
-
else if (this.cropStartX() > this.cropEndX() && this.cropStartY() > this.cropEndY()) {
|
493
|
-
imageData = this.ctx().getImageData(this.cropEndX(), this.cropEndY(), this.cropStartX() - this.cropEndX(), this.cropStartY() - this.cropEndY());
|
494
|
-
}
|
495
|
-
else if (this.cropStartX() < this.cropEndX() && this.cropStartY() < this.cropEndY()) {
|
496
|
-
imageData = this.ctx().getImageData(this.cropStartX(), this.cropStartY(), this.cropEndX() - this.cropStartX(), this.cropEndY() - this.cropStartY());
|
497
|
-
}
|
498
|
-
else if (this.cropStartX() > this.cropEndX() && this.cropStartY() < this.cropEndY()) {
|
499
|
-
imageData = this.ctx().getImageData(this.cropEndX(), this.cropStartY(), this.cropStartX() - this.cropEndX(), this.cropEndY() - this.cropStartY());
|
500
|
-
}
|
501
|
-
const data = imageData.data;
|
502
|
-
const brightnessFactor = 2.4; // Increase brightness by 20%
|
503
|
-
for (let i = 0; i < data.length; i += 4) {
|
504
|
-
data[i] = data[i] * brightnessFactor; // Red
|
505
|
-
data[i + 1] = data[i + 1] * brightnessFactor; // Green
|
506
|
-
data[i + 2] = data[i + 2] * brightnessFactor; // Blue
|
507
|
-
}
|
508
|
-
if (this.cropStartX() < this.cropEndX() && this.cropStartY() > this.cropEndY()) {
|
509
|
-
this.ctx().putImageData(imageData, this.cropStartX(), this.cropEndY());
|
510
|
-
}
|
511
|
-
else if (this.cropStartX() > this.cropEndX() && this.cropStartY() > this.cropEndY()) {
|
512
|
-
this.ctx().putImageData(imageData, this.cropEndX(), this.cropEndY());
|
513
|
-
}
|
514
|
-
else if (this.cropStartX() < this.cropEndX() && this.cropStartY() < this.cropEndY()) {
|
515
|
-
this.ctx().putImageData(imageData, this.cropStartX(), this.cropStartY());
|
516
|
-
}
|
517
|
-
else if (this.cropStartX() > this.cropEndX() && this.cropStartY() < this.cropEndY()) {
|
518
|
-
this.ctx().putImageData(imageData, this.cropEndX(), this.cropStartY());
|
519
|
-
}
|
520
|
-
this.cropImageData.set(imageData);
|
585
|
+
this.ctx().closePath();
|
586
|
+
this.saveImageChange();
|
521
587
|
}
|
522
588
|
/** @ignore */
|
523
589
|
cropButtonHandler() {
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
this.
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
cropWidth = this.cropEndX() - this.cropStartX();
|
533
|
-
cropHeight = this.cropStartY() - this.cropEndY();
|
534
|
-
}
|
535
|
-
else if (this.cropStartX() > this.cropEndX() && this.cropStartY() > this.cropEndY()) {
|
536
|
-
cropWidth = this.cropStartX() - this.cropEndX();
|
537
|
-
cropHeight = this.cropStartY() - this.cropEndY();
|
538
|
-
}
|
539
|
-
else if (this.cropStartX() < this.cropEndX() && this.cropStartY() < this.cropEndY()) {
|
540
|
-
cropWidth = this.cropEndX() - this.cropStartX();
|
541
|
-
cropHeight = this.cropEndY() - this.cropStartY();
|
542
|
-
}
|
543
|
-
else if (this.cropStartX() > this.cropEndX() && this.cropStartY() < this.cropEndY()) {
|
544
|
-
cropWidth = this.cropStartX() - this.cropEndX();
|
545
|
-
cropHeight = this.cropEndY() - this.cropStartY();
|
546
|
-
}
|
547
|
-
this.canvasElem().nativeElement.width = cropWidth;
|
548
|
-
this.canvasElem().nativeElement.height = cropHeight;
|
549
|
-
this.ctx().putImageData(this.cropImageData(), 0, 0);
|
590
|
+
const cropRect = this.cropperWindow().getCropperArea();
|
591
|
+
const canvasRect = this.canvasElem().nativeElement.getClientRects()[0];
|
592
|
+
const dx = cropRect.x - canvasRect.x;
|
593
|
+
const dy = cropRect.y - canvasRect.y;
|
594
|
+
const imageData = this.ctx().getImageData(dx, dy, cropRect.width, cropRect.height);
|
595
|
+
this.canvasElem().nativeElement.width = cropRect.width;
|
596
|
+
this.canvasElem().nativeElement.height = cropRect.height;
|
597
|
+
this.ctx().putImageData(imageData, 0, 0);
|
550
598
|
this.saveImageChange();
|
551
|
-
this.cropImageData.set(null);
|
552
599
|
this.service.activeToolState.set(null);
|
553
|
-
this.isDrawRectangleCreated.set(false);
|
554
600
|
}
|
555
601
|
/** @ignore */
|
556
602
|
rotateImage() {
|
@@ -588,12 +634,12 @@ class AXImageEditorViewComponent extends MXBaseComponent {
|
|
588
634
|
get __hostStyle() {
|
589
635
|
return `width: ${this.service.initialImage()?.width}px; height: ${this.service.initialImage()?.height}px`;
|
590
636
|
}
|
591
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1
|
592
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
637
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
638
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", 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 } }, host: { properties: { "style": "this.__hostStyle" } }, 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: ["ax-image-editor-view{position:relative;display:flex;justify-content:center;align-items:center;background-color:#fff;width:100%;touch-action:none;overflow:hidden}ax-image-editor-view .ax-canvas-element{cursor:crosshair}ax-image-editor-view .ax-crop-save{position:absolute;top:0;right:0;margin:1rem}\n"], dependencies: [{ kind: "component", type: AXImageEditorCropperWindowComponent, selector: "ax-image-editor-cropper-window", inputs: ["showGrid"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
593
639
|
}
|
594
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
640
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorViewComponent, decorators: [{
|
595
641
|
type: Component,
|
596
|
-
args: [{ selector: 'ax-image-editor-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<canvas\n tabindex=\"1\"\n (
|
642
|
+
args: [{ selector: 'ax-image-editor-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXImageEditorCropperWindowComponent], 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: ["ax-image-editor-view{position:relative;display:flex;justify-content:center;align-items:center;background-color:#fff;width:100%;touch-action:none;overflow:hidden}ax-image-editor-view .ax-canvas-element{cursor:crosshair}ax-image-editor-view .ax-crop-save{position:absolute;top:0;right:0;margin:1rem}\n"] }]
|
597
643
|
}], ctorParameters: () => [], propDecorators: { __hostStyle: [{
|
598
644
|
type: HostBinding,
|
599
645
|
args: ['style']
|
@@ -610,29 +656,10 @@ class AXImageEditorContainerComponent extends classes((MXInputBaseValueComponent
|
|
610
656
|
this.service = inject(AXImageEditorService);
|
611
657
|
this.imageEditorContainer = viewChild('f');
|
612
658
|
this.view = contentChild(AXImageEditorViewComponent);
|
613
|
-
/** @ignore */
|
614
|
-
this.dialogService = inject(AXDialogService);
|
615
|
-
/** @ignore */
|
616
|
-
this.options = signal({
|
617
|
-
color: 'primary',
|
618
|
-
title: 'Attention',
|
619
|
-
vertical: false,
|
620
|
-
content: 'Do you want to save changes?',
|
621
|
-
orientation: 'vertical',
|
622
|
-
draggable: true,
|
623
|
-
});
|
624
659
|
}
|
625
660
|
save() {
|
626
661
|
if (this.service.initialImage() !== this.service.newImage()) {
|
627
|
-
this.
|
628
|
-
.confirm(this.options().title, this.options().content, this.options().color, this.options().orientation, this.options().draggable)
|
629
|
-
.then((data) => {
|
630
|
-
if (data.result) {
|
631
|
-
this.service.initialImage.set(this.service.newImage());
|
632
|
-
this.commitValue(this.service.imageBlob(), true);
|
633
|
-
}
|
634
|
-
})
|
635
|
-
.catch(() => this.commitValue(null));
|
662
|
+
this.commitValue(this.service.imageBlob(), true);
|
636
663
|
}
|
637
664
|
else {
|
638
665
|
this.commitValue(null);
|
@@ -641,8 +668,8 @@ class AXImageEditorContainerComponent extends classes((MXInputBaseValueComponent
|
|
641
668
|
cropButtonHandler() {
|
642
669
|
this.view().cropButtonHandler();
|
643
670
|
}
|
644
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1
|
645
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1
|
671
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorContainerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
672
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: AXImageEditorContainerComponent, isStandalone: true, selector: "ax-image-editor-container", inputs: { look: "look" }, outputs: { onValueChanged: "onValueChanged" }, providers: [
|
646
673
|
AXImageEditorService,
|
647
674
|
{ provide: AXComponent, useExisting: AXImageEditorContainerComponent },
|
648
675
|
{ provide: AXFocusableComponent, useExisting: AXImageEditorContainerComponent },
|
@@ -653,9 +680,9 @@ class AXImageEditorContainerComponent extends classes((MXInputBaseValueComponent
|
|
653
680
|
useExisting: forwardRef(() => AXImageEditorContainerComponent),
|
654
681
|
multi: true,
|
655
682
|
},
|
656
|
-
], queries: [{ propertyName: "view", first: true, predicate: AXImageEditorViewComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "imageEditorContainer", first: true, predicate: ["f"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (service.isImageLoad()) {\n <div #f class=\"ax-editor-container ax-{{ look }}\">\n <ax-
|
683
|
+
], queries: [{ propertyName: "view", first: true, predicate: AXImageEditorViewComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "imageEditorContainer", first: true, predicate: ["f"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (service.isImageLoad()) {\n <div #f class=\"ax-editor-container ax-{{ look }}\">\n <ng-content select=\"ax-header\"></ng-content>\n\n <ng-content select=\"ax-image-editor-view\"> </ng-content>\n\n @if (service.activeToolState()) {\n <ax-toolbar class=\"ax-secondary-toolbar\">\n <ax-prefix>\n @switch (service.activeToolState()) {\n @case ('pen') {\n <ax-image-editor-pen></ax-image-editor-pen>\n }\n @case ('crop') {\n <ax-image-editor-crop (cropPressed)=\"cropButtonHandler()\"></ax-image-editor-crop>\n }\n @case ('highlight') {\n <ax-image-editor-highlight></ax-image-editor-highlight>\n }\n @case ('rotate') {\n <ax-image-editor-rotate></ax-image-editor-rotate>\n }\n }\n </ax-prefix>\n </ax-toolbar>\n }\n\n <ax-toolbar class=\"ax-main-toolbar\">\n <ax-content>\n <ax-image-editor-tool-selector></ax-image-editor-tool-selector>\n </ax-content>\n </ax-toolbar>\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", styles: ["ax-image-editor-container{width:fit-content;display:block}ax-image-editor-container>.ax-editor-container{display:block;height:auto!important;--ax-comp-editor-space-start-size: 0;--ax-comp-editor-space-end-size: 0}ax-image-editor-container .ax-loading-spinner-container{display:flex;justify-content:center;align-items:center}ax-image-editor-container .ax-main-toolbar{justify-content:center;padding:.2rem}ax-image-editor-container .ax-secondary-toolbar{padding:.2rem;border-bottom:1px solid rgba(var(--ax-sys-color-border-surface));justify-content:center}ax-image-editor-container ax-header{width:100%}ax-image-editor-container ax-header ax-toolbar{justify-content:space-between}ax-image-editor-container ax-header .ax-start-toolbar-divider{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.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: "component", type: AXLoadingSpinnerComponent, selector: "ax-loading-spinner", inputs: ["text", "color", "size", "stroke"] }, { kind: "ngmodule", type: AXToolBarModule }, { kind: "component", type: i2.AXToolBarComponent, selector: "ax-toolbar" }, { kind: "component", type: AXImageEditorCropComponent, selector: "ax-image-editor-crop", outputs: ["cropPressed"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: AXImageEditorToolSelectorComponent, selector: "ax-image-editor-tool-selector" }, { kind: "component", type: AXImageEditorPenComponent, selector: "ax-image-editor-pen" }, { kind: "component", type: AXImageEditorHighlightComponent, selector: "ax-image-editor-highlight" }, { kind: "component", type: AXImageEditorRotateComponent, selector: "ax-image-editor-rotate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
657
684
|
}
|
658
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
685
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorContainerComponent, decorators: [{
|
659
686
|
type: Component,
|
660
687
|
args: [{ selector: 'ax-image-editor-container', encapsulation: ViewEncapsulation.None, outputs: ['onValueChanged'], inputs: ['look'], providers: [
|
661
688
|
AXImageEditorService,
|
@@ -679,8 +706,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
|
|
679
706
|
AXImageEditorPenComponent,
|
680
707
|
AXImageEditorHighlightComponent,
|
681
708
|
AXImageEditorRotateComponent,
|
682
|
-
|
683
|
-
|
709
|
+
], template: "@if (service.isImageLoad()) {\n <div #f class=\"ax-editor-container ax-{{ look }}\">\n <ng-content select=\"ax-header\"></ng-content>\n\n <ng-content select=\"ax-image-editor-view\"> </ng-content>\n\n @if (service.activeToolState()) {\n <ax-toolbar class=\"ax-secondary-toolbar\">\n <ax-prefix>\n @switch (service.activeToolState()) {\n @case ('pen') {\n <ax-image-editor-pen></ax-image-editor-pen>\n }\n @case ('crop') {\n <ax-image-editor-crop (cropPressed)=\"cropButtonHandler()\"></ax-image-editor-crop>\n }\n @case ('highlight') {\n <ax-image-editor-highlight></ax-image-editor-highlight>\n }\n @case ('rotate') {\n <ax-image-editor-rotate></ax-image-editor-rotate>\n }\n }\n </ax-prefix>\n </ax-toolbar>\n }\n\n <ax-toolbar class=\"ax-main-toolbar\">\n <ax-content>\n <ax-image-editor-tool-selector></ax-image-editor-tool-selector>\n </ax-content>\n </ax-toolbar>\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", styles: ["ax-image-editor-container{width:fit-content;display:block}ax-image-editor-container>.ax-editor-container{display:block;height:auto!important;--ax-comp-editor-space-start-size: 0;--ax-comp-editor-space-end-size: 0}ax-image-editor-container .ax-loading-spinner-container{display:flex;justify-content:center;align-items:center}ax-image-editor-container .ax-main-toolbar{justify-content:center;padding:.2rem}ax-image-editor-container .ax-secondary-toolbar{padding:.2rem;border-bottom:1px solid rgba(var(--ax-sys-color-border-surface));justify-content:center}ax-image-editor-container ax-header{width:100%}ax-image-editor-container ax-header ax-toolbar{justify-content:space-between}ax-image-editor-container ax-header .ax-start-toolbar-divider{display:none}\n"] }]
|
710
|
+
}] });
|
711
|
+
|
712
|
+
/**
|
713
|
+
* paint mode.
|
714
|
+
* @category Components
|
715
|
+
*/
|
716
|
+
class AXImageEditorHistoryComponent {
|
717
|
+
constructor() {
|
718
|
+
this.service = inject(AXImageEditorService);
|
719
|
+
}
|
720
|
+
UndoHandler() {
|
721
|
+
this.service.undoPressed.set(true);
|
722
|
+
}
|
723
|
+
RedoHandler() {
|
724
|
+
this.service.redoPressed.set(true);
|
725
|
+
}
|
726
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
727
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.1", type: AXImageEditorHistoryComponent, isStandalone: true, selector: "ax-image-editor-history", ngImport: i0, template: "<ax-button axTooltip=\"Undo\" axTooltipPlacement=\"top\" (onClick)=\"UndoHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-undo\"></ax-icon>\n</ax-button>\n\n<ax-button axTooltip=\"Redo\" axTooltipPlacement=\"top\" (onClick)=\"RedoHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-redo\"></ax-icon>\n</ax-button>\n", dependencies: [{ kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltip", "axTooltipPlacement", "axTooltipOpenAfter", "axTooltipCloseAfter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
728
|
+
}
|
729
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorHistoryComponent, decorators: [{
|
730
|
+
type: Component,
|
731
|
+
args: [{ selector: 'ax-image-editor-history', encapsulation: ViewEncapsulation.None, imports: [AXButtonComponent, AXDecoratorModule, AXTooltipDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-button axTooltip=\"Undo\" axTooltipPlacement=\"top\" (onClick)=\"UndoHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-undo\"></ax-icon>\n</ax-button>\n\n<ax-button axTooltip=\"Redo\" axTooltipPlacement=\"top\" (onClick)=\"RedoHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-redo\"></ax-icon>\n</ax-button>\n" }]
|
684
732
|
}] });
|
685
733
|
|
686
734
|
const COMPONENT = [
|
@@ -692,7 +740,7 @@ const COMPONENT = [
|
|
692
740
|
AXImageEditorPenComponent,
|
693
741
|
AXImageEditorHighlightComponent,
|
694
742
|
AXImageEditorRotateComponent,
|
695
|
-
|
743
|
+
AXImageEditorCropperWindowComponent,
|
696
744
|
];
|
697
745
|
const MODULES = [
|
698
746
|
AXButtonModule,
|
@@ -707,8 +755,8 @@ const MODULES = [
|
|
707
755
|
AXTooltipModule,
|
708
756
|
];
|
709
757
|
class AXImageEditorModule {
|
710
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1
|
711
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1
|
758
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
759
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorModule, imports: [AXButtonModule,
|
712
760
|
FormsModule,
|
713
761
|
AXRangeSliderModule,
|
714
762
|
AXSelectBoxModule,
|
@@ -725,7 +773,7 @@ class AXImageEditorModule {
|
|
725
773
|
AXImageEditorPenComponent,
|
726
774
|
AXImageEditorHighlightComponent,
|
727
775
|
AXImageEditorRotateComponent,
|
728
|
-
|
776
|
+
AXImageEditorCropperWindowComponent], exports: [AXImageEditorViewComponent,
|
729
777
|
AXImageEditorContainerComponent,
|
730
778
|
AXImageEditorCropComponent,
|
731
779
|
AXImageEditorHistoryComponent,
|
@@ -733,17 +781,10 @@ class AXImageEditorModule {
|
|
733
781
|
AXImageEditorPenComponent,
|
734
782
|
AXImageEditorHighlightComponent,
|
735
783
|
AXImageEditorRotateComponent,
|
736
|
-
|
737
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1
|
738
|
-
AXImageEditorCropComponent,
|
739
|
-
AXImageEditorHistoryComponent,
|
740
|
-
AXImageEditorToolSelectorComponent,
|
741
|
-
AXImageEditorPenComponent,
|
742
|
-
AXImageEditorHighlightComponent,
|
743
|
-
AXImageEditorRotateComponent,
|
744
|
-
AXimageEditorHeaderComponent] }); }
|
784
|
+
AXImageEditorCropperWindowComponent] }); }
|
785
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorModule, imports: [MODULES, COMPONENT] }); }
|
745
786
|
}
|
746
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
787
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorModule, decorators: [{
|
747
788
|
type: NgModule,
|
748
789
|
args: [{
|
749
790
|
imports: [...MODULES, ...COMPONENT],
|
@@ -756,5 +797,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
|
|
756
797
|
* Generated bundle index. Do not edit.
|
757
798
|
*/
|
758
799
|
|
759
|
-
export { AXImageEditorContainerComponent, AXImageEditorCropComponent, AXImageEditorHighlightComponent, AXImageEditorHistoryComponent, AXImageEditorModule, AXImageEditorPenComponent, AXImageEditorRotateComponent, AXImageEditorService, AXImageEditorToolSelectorComponent, AXImageEditorViewComponent
|
800
|
+
export { AXImageEditorContainerComponent, AXImageEditorCropComponent, AXImageEditorCropperWindowComponent, AXImageEditorHighlightComponent, AXImageEditorHistoryComponent, AXImageEditorModule, AXImageEditorPenComponent, AXImageEditorRotateComponent, AXImageEditorService, AXImageEditorToolSelectorComponent, AXImageEditorViewComponent };
|
760
801
|
//# sourceMappingURL=acorex-components-image-editor.mjs.map
|