@acorex/components 19.11.0-next.4 → 19.11.0-next.5
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-form.mjs +16 -16
- package/fesm2022/acorex-components-grid-layout-builder.mjs +189 -112
- package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-components-image-editor.mjs +298 -241
- 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 +10 -10
- 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 +79 -25
- package/grid-layout-builder/lib/utility.d.ts +7 -0
- package/image-editor/index.d.ts +1 -0
- package/image-editor/lib/image-editor-container/image-editor-container.component.d.ts +1 -0
- package/image-editor/lib/image-editor-cropper-window/image-editor-cropper-window.component.d.ts +48 -0
- package/image-editor/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.d.ts +3 -1
- 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 -1
- 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
@@ -6,9 +6,10 @@ import { AXDialogService, AXDialogModule } from '@acorex/components/dialog';
|
|
6
6
|
import { AXLoadingSpinnerComponent, AXLoadingModule } from '@acorex/components/loading';
|
7
7
|
import * as i2 from '@acorex/components/toolbar';
|
8
8
|
import { AXToolBarModule } from '@acorex/components/toolbar';
|
9
|
-
import
|
9
|
+
import * as i1$2 from '@angular/common';
|
10
|
+
import { CommonModule, isPlatformBrowser } from '@angular/common';
|
10
11
|
import * as i0 from '@angular/core';
|
11
|
-
import { signal, Injectable, inject, output, ViewEncapsulation, Component, ChangeDetectionStrategy, input, viewChild, Renderer2,
|
12
|
+
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
13
|
import * as i1$1 from '@angular/forms';
|
13
14
|
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
|
14
15
|
import { classes } from 'polytype';
|
@@ -34,10 +35,10 @@ class AXImageEditorService {
|
|
34
35
|
this.undoPressed = signal(false);
|
35
36
|
this.redoPressed = signal(false);
|
36
37
|
}
|
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
|
38
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
39
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorService }); }
|
39
40
|
}
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorService, decorators: [{
|
41
42
|
type: Injectable
|
42
43
|
}] });
|
43
44
|
|
@@ -49,16 +50,20 @@ class AXImageEditorCropComponent {
|
|
49
50
|
constructor() {
|
50
51
|
this.service = inject(AXImageEditorService);
|
51
52
|
this.cropPressed = output();
|
53
|
+
this.lockRatioPressed = output();
|
52
54
|
}
|
53
55
|
cropButtonHandler() {
|
54
56
|
this.cropPressed.emit();
|
55
57
|
}
|
56
|
-
|
57
|
-
|
58
|
+
lockRatioHandler() {
|
59
|
+
this.lockRatioPressed.emit();
|
60
|
+
}
|
61
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorCropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
62
|
+
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", lockRatioPressed: "lockRatioPressed" }, ngImport: i0, template: "<ax-button (click)=\"cropButtonHandler()\" class=\"ax-crop-save ax-sm\" text=\"Crop\"></ax-button>\n<ax-button (click)=\"lockRatioHandler()\" class=\"ax-crop-save ax-sm\" text=\"Lock Ratio\"></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 }); }
|
58
63
|
}
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorCropComponent, decorators: [{
|
60
65
|
type: Component,
|
61
|
-
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" }]
|
66
|
+
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<ax-button (click)=\"lockRatioHandler()\" class=\"ax-crop-save ax-sm\" text=\"Lock Ratio\"></ax-button>\n" }]
|
62
67
|
}] });
|
63
68
|
|
64
69
|
/**
|
@@ -75,10 +80,10 @@ class AXImageEditorHistoryComponent {
|
|
75
80
|
RedoHandler() {
|
76
81
|
this.service.redoPressed.set(true);
|
77
82
|
}
|
78
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1
|
79
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1
|
83
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
84
|
+
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.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
85
|
}
|
81
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorHistoryComponent, decorators: [{
|
82
87
|
type: Component,
|
83
88
|
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
89
|
}] });
|
@@ -94,10 +99,10 @@ class AXimageEditorHeaderComponent {
|
|
94
99
|
saveHandler() {
|
95
100
|
this.parent.save();
|
96
101
|
}
|
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
|
102
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXimageEditorHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
103
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.1", type: AXimageEditorHeaderComponent, isStandalone: true, selector: "ax-image-editor-header", ngImport: i0, template: "<ax-toolbar>\n <ax-prefix>\n <ax-image-editor-history></ax-image-editor-history>\n </ax-prefix>\n\n <ax-suffix>\n <ax-button type=\"submit\" (onClick)=\"saveHandler()\" axTooltip=\"Save\" axTooltipPlacement=\"top\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-save\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n</ax-toolbar>\n", styles: ["ax-image-editor-header{width:100%}ax-image-editor-header ax-toolbar{justify-content:space-between}ax-image-editor-header .ax-start-toolbar-divider{display:none}\n"], dependencies: [{ kind: "component", type: AXImageEditorHistoryComponent, selector: "ax-image-editor-history" }, { 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: "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.AXToolBarComponent, selector: "ax-toolbar" }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltip", "axTooltipPlacement", "axTooltipOpenAfter", "axTooltipCloseAfter"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
99
104
|
}
|
100
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXimageEditorHeaderComponent, decorators: [{
|
101
106
|
type: Component,
|
102
107
|
args: [{ selector: 'ax-image-editor-header', encapsulation: ViewEncapsulation.None, imports: [AXImageEditorHistoryComponent, AXButtonComponent, AXDecoratorModule, AXToolBarModule, AXTooltipDirective], template: "<ax-toolbar>\n <ax-prefix>\n <ax-image-editor-history></ax-image-editor-history>\n </ax-prefix>\n\n <ax-suffix>\n <ax-button type=\"submit\" (onClick)=\"saveHandler()\" axTooltip=\"Save\" axTooltipPlacement=\"top\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-save\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n</ax-toolbar>\n", styles: ["ax-image-editor-header{width:100%}ax-image-editor-header ax-toolbar{justify-content:space-between}ax-image-editor-header .ax-start-toolbar-divider{display:none}\n"] }]
|
103
108
|
}] });
|
@@ -122,10 +127,10 @@ class AXImageEditorHighlightComponent {
|
|
122
127
|
valueHandler(e) {
|
123
128
|
this.service.highlightWidth.set(e);
|
124
129
|
}
|
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
|
130
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorHighlightComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
131
|
+
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$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.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
132
|
}
|
128
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorHighlightComponent, decorators: [{
|
129
134
|
type: Component,
|
130
135
|
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
136
|
}] });
|
@@ -150,10 +155,10 @@ class AXImageEditorPenComponent {
|
|
150
155
|
valueHandler(e) {
|
151
156
|
this.service.penWidth.set(e);
|
152
157
|
}
|
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
|
158
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorPenComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
159
|
+
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$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.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
160
|
}
|
156
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorPenComponent, decorators: [{
|
157
162
|
type: Component,
|
158
163
|
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
164
|
}] });
|
@@ -175,10 +180,10 @@ class AXImageEditorRotateComponent {
|
|
175
180
|
rotateLeftHandler() {
|
176
181
|
this.service.rotate.set({ state: -90, userInteract: true });
|
177
182
|
}
|
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
|
183
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorRotateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
184
|
+
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
185
|
}
|
181
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
186
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorRotateComponent, decorators: [{
|
182
187
|
type: Component,
|
183
188
|
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
189
|
}] });
|
@@ -201,14 +206,224 @@ class AXImageEditorToolSelectorComponent {
|
|
201
206
|
this.service.penType.set(tool);
|
202
207
|
}
|
203
208
|
}
|
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
|
209
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorToolSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
210
|
+
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.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltip", "axTooltipPlacement", "axTooltipOpenAfter", "axTooltipCloseAfter"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
206
211
|
}
|
207
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
212
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorToolSelectorComponent, decorators: [{
|
208
213
|
type: Component,
|
209
214
|
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
215
|
}] });
|
211
216
|
|
217
|
+
/**
|
218
|
+
* paint mode.
|
219
|
+
* @category Components
|
220
|
+
*/
|
221
|
+
class AXImageEditorCropperWindowComponent {
|
222
|
+
constructor() {
|
223
|
+
this.width = input.required();
|
224
|
+
this.height = input.required();
|
225
|
+
this.showGrid = input(true);
|
226
|
+
this.lockRatio = input(false);
|
227
|
+
this.ngZone = inject(NgZone);
|
228
|
+
this.selectedHandle = signal(null);
|
229
|
+
this.panState = signal(false);
|
230
|
+
this.elementRef = inject(ElementRef);
|
231
|
+
this.cropperWindow = viewChild('r');
|
232
|
+
this.currentX = signal(-45);
|
233
|
+
this.currentY = signal(-45);
|
234
|
+
this.prevX = signal(0);
|
235
|
+
this.prevY = signal(0);
|
236
|
+
this.renderer = inject(Renderer2);
|
237
|
+
this.platformID = inject(PLATFORM_ID);
|
238
|
+
this.#eff = effect(() => {
|
239
|
+
if (this.lockRatio()) {
|
240
|
+
const host = this.elementRef.nativeElement;
|
241
|
+
host.style.width = `${this.width()}px`;
|
242
|
+
host.style.height = `${this.height()}px`;
|
243
|
+
}
|
244
|
+
});
|
245
|
+
this.#init = afterNextRender(() => {
|
246
|
+
const host = this.elementRef.nativeElement;
|
247
|
+
host.style.width = `${this.width()}px`;
|
248
|
+
host.style.height = `${this.height()}px`;
|
249
|
+
this.ngZone.runOutsideAngular(() => {
|
250
|
+
this.mouseMoveEvent = this.renderer.listen(document, 'mousemove', this.changeSizeHandler.bind(this));
|
251
|
+
this.mouseUpEvent = this.renderer.listen(document, 'mouseup', this.clearSelector.bind(this));
|
252
|
+
this.mouseDownEvent = this.renderer.listen(host, 'mousedown', this.panDown.bind(this));
|
253
|
+
this.mouseMoveEvent2 = this.renderer.listen(host, 'mousemove', this.panMove.bind(this));
|
254
|
+
this.mouseUpEvent2 = this.renderer.listen(host, 'mouseup', this.panUp.bind(this));
|
255
|
+
this.mouseLeaveEvent = this.renderer.listen(host, 'mouseleave', this.panUp.bind(this));
|
256
|
+
});
|
257
|
+
});
|
258
|
+
this.#positionChange = effect(() => {
|
259
|
+
this.setPosition(this.currentX(), this.currentY());
|
260
|
+
});
|
261
|
+
this.edgeCase = false;
|
262
|
+
}
|
263
|
+
#eff;
|
264
|
+
#init;
|
265
|
+
ngOnDestroy() {
|
266
|
+
if (isPlatformBrowser(this.platformID) && this.mouseMoveEvent) {
|
267
|
+
this.mouseMoveEvent();
|
268
|
+
}
|
269
|
+
if (isPlatformBrowser(this.platformID) && this.mouseUpEvent) {
|
270
|
+
this.mouseUpEvent();
|
271
|
+
}
|
272
|
+
if (isPlatformBrowser(this.platformID) && this.mouseDownEvent) {
|
273
|
+
this.mouseDownEvent();
|
274
|
+
}
|
275
|
+
if (isPlatformBrowser(this.platformID) && this.mouseMoveEvent2) {
|
276
|
+
this.mouseMoveEvent2();
|
277
|
+
}
|
278
|
+
if (isPlatformBrowser(this.platformID) && this.mouseUpEvent2) {
|
279
|
+
this.mouseUpEvent2();
|
280
|
+
}
|
281
|
+
if (isPlatformBrowser(this.platformID) && this.mouseLeaveEvent) {
|
282
|
+
this.mouseLeaveEvent();
|
283
|
+
}
|
284
|
+
}
|
285
|
+
#positionChange;
|
286
|
+
panMove(e) {
|
287
|
+
if (this.selectedHandle())
|
288
|
+
return;
|
289
|
+
if (!this.panState())
|
290
|
+
return;
|
291
|
+
const currentX = e.clientX;
|
292
|
+
const currentY = e.clientY;
|
293
|
+
const deltaX = currentX - this.prevX();
|
294
|
+
const deltaY = currentY - this.prevY();
|
295
|
+
this.currentX.update((prev) => prev + deltaX);
|
296
|
+
this.currentY.update((prev) => prev + deltaY);
|
297
|
+
this.prevX.set(currentX);
|
298
|
+
this.prevY.set(currentY);
|
299
|
+
}
|
300
|
+
panDown(e) {
|
301
|
+
if (this.selectedHandle())
|
302
|
+
return;
|
303
|
+
this.panState.set(true);
|
304
|
+
this.prevX.set(e.clientX);
|
305
|
+
this.prevY.set(e.clientY);
|
306
|
+
}
|
307
|
+
panUp() {
|
308
|
+
if (this.selectedHandle())
|
309
|
+
return;
|
310
|
+
this.panState.set(false);
|
311
|
+
}
|
312
|
+
getCropperArea() {
|
313
|
+
return this.elementRef.nativeElement.getBoundingClientRect();
|
314
|
+
}
|
315
|
+
setPosition(posX, posY) {
|
316
|
+
const el = this.elementRef.nativeElement;
|
317
|
+
el.style.transform = `translate(${posX}px, ${posY}px)`;
|
318
|
+
}
|
319
|
+
handleSelector(e, value) {
|
320
|
+
if (this.panState())
|
321
|
+
return;
|
322
|
+
const host = this.elementRef.nativeElement;
|
323
|
+
this.startX = e.clientX;
|
324
|
+
this.startY = e.clientY;
|
325
|
+
this.startWidth = host.offsetWidth;
|
326
|
+
this.startHeight = host.offsetHeight;
|
327
|
+
this.startLeft = host.offsetLeft;
|
328
|
+
this.startTop = host.offsetTop;
|
329
|
+
this.selectedHandle.set(value);
|
330
|
+
}
|
331
|
+
changeSizeHandler(e) {
|
332
|
+
if (this.panState())
|
333
|
+
return;
|
334
|
+
if (!this.selectedHandle())
|
335
|
+
return;
|
336
|
+
const host = this.elementRef.nativeElement;
|
337
|
+
const rect = host.getBoundingClientRect();
|
338
|
+
const dy = e.clientY - this.startY;
|
339
|
+
const dx = e.clientX - this.startX;
|
340
|
+
if (rect.width < 20 || rect.height < 20) {
|
341
|
+
this.edgeCase = true;
|
342
|
+
return;
|
343
|
+
}
|
344
|
+
switch (this.selectedHandle()) {
|
345
|
+
case 'right':
|
346
|
+
host.style.width = `${e.movementX + rect.width}px`;
|
347
|
+
break;
|
348
|
+
case 'top':
|
349
|
+
host.style.height = `${this.startHeight - dy}px`;
|
350
|
+
host.style.top = `${this.startTop + dy}px`;
|
351
|
+
break;
|
352
|
+
case 'left':
|
353
|
+
host.style.width = `${this.startWidth - dx}px`;
|
354
|
+
host.style.left = `${this.startLeft + dx}px`;
|
355
|
+
break;
|
356
|
+
case 'bottom':
|
357
|
+
host.style.height = `${rect.height + e.movementY}px`;
|
358
|
+
break;
|
359
|
+
case 'right-top':
|
360
|
+
if (this.lockRatio()) {
|
361
|
+
host.style.height = `${this.startHeight - dy}px`;
|
362
|
+
host.style.top = `${this.startTop + dy}px`;
|
363
|
+
host.style.width = `${this.startHeight - dy}px`;
|
364
|
+
}
|
365
|
+
else {
|
366
|
+
host.style.height = `${this.startHeight - dy}px`;
|
367
|
+
host.style.top = `${this.startTop + dy}px`;
|
368
|
+
host.style.width = `${e.movementX + rect.width}px`;
|
369
|
+
}
|
370
|
+
break;
|
371
|
+
case 'bottom-right':
|
372
|
+
if (this.lockRatio()) {
|
373
|
+
host.style.width = `${e.movementX + rect.width}px`;
|
374
|
+
host.style.height = `${e.movementX + rect.width}px`;
|
375
|
+
}
|
376
|
+
else {
|
377
|
+
host.style.height = `${rect.height + e.movementY}px`;
|
378
|
+
host.style.width = `${e.movementX + rect.width}px`;
|
379
|
+
}
|
380
|
+
break;
|
381
|
+
case 'bottom-left':
|
382
|
+
if (this.lockRatio()) {
|
383
|
+
host.style.height = `${this.startWidth - dx}px`;
|
384
|
+
host.style.width = `${this.startWidth - dx}px`;
|
385
|
+
host.style.left = `${this.startLeft + dx}px`;
|
386
|
+
}
|
387
|
+
else {
|
388
|
+
host.style.height = `${rect.height + e.movementY}px`;
|
389
|
+
host.style.width = `${this.startWidth - dx}px`;
|
390
|
+
host.style.left = `${this.startLeft + dx}px`;
|
391
|
+
}
|
392
|
+
break;
|
393
|
+
case 'left-top':
|
394
|
+
if (this.lockRatio()) {
|
395
|
+
host.style.width = `${this.startWidth - dx}px`;
|
396
|
+
host.style.left = `${this.startLeft + dx}px`;
|
397
|
+
host.style.height = `${this.startWidth - dx}px`;
|
398
|
+
host.style.top = `${this.startLeft + dx}px`;
|
399
|
+
}
|
400
|
+
else {
|
401
|
+
host.style.width = `${this.startWidth - dx}px`;
|
402
|
+
host.style.left = `${this.startLeft + dx}px`;
|
403
|
+
host.style.height = `${this.startHeight - dy}px`;
|
404
|
+
host.style.top = `${this.startTop + dy}px`;
|
405
|
+
}
|
406
|
+
}
|
407
|
+
}
|
408
|
+
clearSelector() {
|
409
|
+
if (this.panState())
|
410
|
+
return;
|
411
|
+
const host = this.elementRef.nativeElement;
|
412
|
+
if (this.edgeCase) {
|
413
|
+
host.style.height = `20px`;
|
414
|
+
host.style.width = `20px`;
|
415
|
+
this.edgeCase = false;
|
416
|
+
}
|
417
|
+
this.selectedHandle.set(null);
|
418
|
+
}
|
419
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorCropperWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
420
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: AXImageEditorCropperWindowComponent, isStandalone: true, selector: "ax-image-editor-cropper-window", inputs: { width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: true, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: true, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, lockRatio: { classPropertyName: "lockRatio", publicName: "lockRatio", 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.lockRatio()) {\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 }); }
|
421
|
+
}
|
422
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorCropperWindowComponent, decorators: [{
|
423
|
+
type: Component,
|
424
|
+
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.lockRatio()) {\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"] }]
|
425
|
+
}] });
|
426
|
+
|
212
427
|
class AXImageEditorViewComponent extends MXBaseComponent {
|
213
428
|
/** @ignore */
|
214
429
|
resizeWindow() {
|
@@ -238,6 +453,14 @@ class AXImageEditorViewComponent extends MXBaseComponent {
|
|
238
453
|
/** @ignore */
|
239
454
|
constructor() {
|
240
455
|
super();
|
456
|
+
/**
|
457
|
+
* its change grid display state.
|
458
|
+
*/
|
459
|
+
this.showGrid = input(true);
|
460
|
+
/**
|
461
|
+
* its change grid display state.
|
462
|
+
*/
|
463
|
+
this.lockRatio = signal(false);
|
241
464
|
/**
|
242
465
|
* its receive image src.
|
243
466
|
*/
|
@@ -245,33 +468,27 @@ class AXImageEditorViewComponent extends MXBaseComponent {
|
|
245
468
|
/** @ignore */
|
246
469
|
this.canvasElem = viewChild('canvasElem');
|
247
470
|
/** @ignore */
|
471
|
+
this.cropperWindow = viewChild('f');
|
472
|
+
/** @ignore */
|
248
473
|
this.ctx = signal(null);
|
249
474
|
/** @ignore */
|
250
475
|
this.service = inject(AXImageEditorService);
|
251
476
|
/** @ignore */
|
252
|
-
this.cropImageData = signal(null);
|
253
|
-
/** @ignore */
|
254
477
|
this.isMouseDown = signal(false);
|
255
478
|
/** @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
479
|
this.isDrawRectangleCreated = signal(false);
|
265
480
|
/** @ignore */
|
266
481
|
this.parent = inject(AXImageEditorContainerComponent);
|
482
|
+
/** @ignore */
|
267
483
|
this.renderer = inject(Renderer2);
|
268
484
|
/** @ignore */
|
269
485
|
this.imageAspect = computed(() => {
|
270
486
|
return this.service.initialImage().width / this.service.initialImage().height;
|
271
487
|
});
|
488
|
+
/** @ignore */
|
272
489
|
this.imageEditorHistory = signal([]);
|
490
|
+
/** @ignore */
|
273
491
|
this.imageEditorHistoryPointer = linkedSignal(() => this.imageEditorHistory().length - 1);
|
274
|
-
this.ngZone = inject(NgZone);
|
275
492
|
afterNextRender(() => {
|
276
493
|
this.resizeEventListener = this.renderer.listen(window, 'resize', this.resizeWindow.bind(this));
|
277
494
|
//load image
|
@@ -299,20 +516,6 @@ class AXImageEditorViewComponent extends MXBaseComponent {
|
|
299
516
|
this.imageChanged();
|
300
517
|
}
|
301
518
|
});
|
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
519
|
effect(() => {
|
317
520
|
if (!this.service.rotate().userInteract || !this.ctx())
|
318
521
|
return;
|
@@ -371,186 +574,41 @@ class AXImageEditorViewComponent extends MXBaseComponent {
|
|
371
574
|
/** @ignore */
|
372
575
|
mouseDownHandler(e) {
|
373
576
|
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
|
-
}
|
577
|
+
if (!this.service.penType())
|
578
|
+
return;
|
579
|
+
this.penConfigHandler(this.service.penType());
|
580
|
+
this.ctx().beginPath();
|
581
|
+
this.ctx().moveTo(e.offsetX, e.offsetY);
|
582
|
+
this.ctx().lineTo(e.offsetX, e.offsetY);
|
583
|
+
this.ctx().stroke();
|
388
584
|
}
|
389
585
|
/** @ignore */
|
390
586
|
mouseMoveHandler(e) {
|
391
587
|
if (!this.isMouseDown())
|
392
588
|
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())
|
589
|
+
if (!this.service.penType())
|
442
590
|
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
|
-
}
|
591
|
+
this.ctx().lineTo(e.offsetX, e.offsetY);
|
592
|
+
this.ctx().stroke();
|
457
593
|
}
|
458
594
|
/** @ignore */
|
459
|
-
|
595
|
+
mouseUpHandler() {
|
460
596
|
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);
|
597
|
+
this.ctx().closePath();
|
598
|
+
this.saveImageChange();
|
521
599
|
}
|
522
600
|
/** @ignore */
|
523
601
|
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);
|
602
|
+
const cropRect = this.cropperWindow().getCropperArea();
|
603
|
+
const canvasRect = this.canvasElem().nativeElement.getClientRects()[0];
|
604
|
+
const dx = cropRect.x - canvasRect.x;
|
605
|
+
const dy = cropRect.y - canvasRect.y;
|
606
|
+
const imageData = this.ctx().getImageData(dx, dy, cropRect.width, cropRect.height);
|
607
|
+
this.canvasElem().nativeElement.width = cropRect.width;
|
608
|
+
this.canvasElem().nativeElement.height = cropRect.height;
|
609
|
+
this.ctx().putImageData(imageData, 0, 0);
|
550
610
|
this.saveImageChange();
|
551
|
-
this.cropImageData.set(null);
|
552
611
|
this.service.activeToolState.set(null);
|
553
|
-
this.isDrawRectangleCreated.set(false);
|
554
612
|
}
|
555
613
|
/** @ignore */
|
556
614
|
rotateImage() {
|
@@ -588,12 +646,12 @@ class AXImageEditorViewComponent extends MXBaseComponent {
|
|
588
646
|
get __hostStyle() {
|
589
647
|
return `width: ${this.service.initialImage()?.width}px; height: ${this.service.initialImage()?.height}px`;
|
590
648
|
}
|
591
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1
|
592
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
649
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
650
|
+
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 [lockRatio]=\"lockRatio()\" [showGrid]=\"showGrid()\" #f [width]=\"150\" [height]=\"150\"></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: ["width", "height", "showGrid", "lockRatio"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
593
651
|
}
|
594
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
652
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorViewComponent, decorators: [{
|
595
653
|
type: Component,
|
596
|
-
args: [{ selector: 'ax-image-editor-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<canvas\n tabindex=\"1\"\n (
|
654
|
+
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 [lockRatio]=\"lockRatio()\" [showGrid]=\"showGrid()\" #f [width]=\"150\" [height]=\"150\"></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
655
|
}], ctorParameters: () => [], propDecorators: { __hostStyle: [{
|
598
656
|
type: HostBinding,
|
599
657
|
args: ['style']
|
@@ -641,8 +699,11 @@ class AXImageEditorContainerComponent extends classes((MXInputBaseValueComponent
|
|
641
699
|
cropButtonHandler() {
|
642
700
|
this.view().cropButtonHandler();
|
643
701
|
}
|
644
|
-
|
645
|
-
|
702
|
+
lockRatioHandler() {
|
703
|
+
this.view().lockRatio.update((prev) => !prev);
|
704
|
+
}
|
705
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorContainerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
706
|
+
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
707
|
AXImageEditorService,
|
647
708
|
{ provide: AXComponent, useExisting: AXImageEditorContainerComponent },
|
648
709
|
{ provide: AXFocusableComponent, useExisting: AXImageEditorContainerComponent },
|
@@ -653,9 +714,9 @@ class AXImageEditorContainerComponent extends classes((MXInputBaseValueComponent
|
|
653
714
|
useExisting: forwardRef(() => AXImageEditorContainerComponent),
|
654
715
|
multi: true,
|
655
716
|
},
|
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-image-editor-header></ax-image-editor-header>\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}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: "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" }, { kind: "component", type: AXimageEditorHeaderComponent, selector: "ax-image-editor-header" }], encapsulation: i0.ViewEncapsulation.None }); }
|
717
|
+
], 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-image-editor-header></ax-image-editor-header>\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 (lockRatioPressed)=\"lockRatioHandler()\" (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}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: "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", "lockRatioPressed"] }, { 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" }, { kind: "component", type: AXimageEditorHeaderComponent, selector: "ax-image-editor-header" }], encapsulation: i0.ViewEncapsulation.None }); }
|
657
718
|
}
|
658
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
719
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorContainerComponent, decorators: [{
|
659
720
|
type: Component,
|
660
721
|
args: [{ selector: 'ax-image-editor-container', encapsulation: ViewEncapsulation.None, outputs: ['onValueChanged'], inputs: ['look'], providers: [
|
661
722
|
AXImageEditorService,
|
@@ -680,7 +741,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
|
|
680
741
|
AXImageEditorHighlightComponent,
|
681
742
|
AXImageEditorRotateComponent,
|
682
743
|
AXimageEditorHeaderComponent,
|
683
|
-
], template: "@if (service.isImageLoad()) {\n <div #f class=\"ax-editor-container ax-{{ look }}\">\n <ax-image-editor-header></ax-image-editor-header>\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}\n"] }]
|
744
|
+
], template: "@if (service.isImageLoad()) {\n <div #f class=\"ax-editor-container ax-{{ look }}\">\n <ax-image-editor-header></ax-image-editor-header>\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 (lockRatioPressed)=\"lockRatioHandler()\" (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}\n"] }]
|
684
745
|
}] });
|
685
746
|
|
686
747
|
const COMPONENT = [
|
@@ -693,6 +754,7 @@ const COMPONENT = [
|
|
693
754
|
AXImageEditorHighlightComponent,
|
694
755
|
AXImageEditorRotateComponent,
|
695
756
|
AXimageEditorHeaderComponent,
|
757
|
+
AXImageEditorCropperWindowComponent,
|
696
758
|
];
|
697
759
|
const MODULES = [
|
698
760
|
AXButtonModule,
|
@@ -707,8 +769,8 @@ const MODULES = [
|
|
707
769
|
AXTooltipModule,
|
708
770
|
];
|
709
771
|
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
|
772
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
773
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorModule, imports: [AXButtonModule,
|
712
774
|
FormsModule,
|
713
775
|
AXRangeSliderModule,
|
714
776
|
AXSelectBoxModule,
|
@@ -725,7 +787,8 @@ class AXImageEditorModule {
|
|
725
787
|
AXImageEditorPenComponent,
|
726
788
|
AXImageEditorHighlightComponent,
|
727
789
|
AXImageEditorRotateComponent,
|
728
|
-
AXimageEditorHeaderComponent
|
790
|
+
AXimageEditorHeaderComponent,
|
791
|
+
AXImageEditorCropperWindowComponent], exports: [AXImageEditorViewComponent,
|
729
792
|
AXImageEditorContainerComponent,
|
730
793
|
AXImageEditorCropComponent,
|
731
794
|
AXImageEditorHistoryComponent,
|
@@ -733,17 +796,11 @@ class AXImageEditorModule {
|
|
733
796
|
AXImageEditorPenComponent,
|
734
797
|
AXImageEditorHighlightComponent,
|
735
798
|
AXImageEditorRotateComponent,
|
736
|
-
AXimageEditorHeaderComponent
|
737
|
-
|
738
|
-
|
739
|
-
AXImageEditorHistoryComponent,
|
740
|
-
AXImageEditorToolSelectorComponent,
|
741
|
-
AXImageEditorPenComponent,
|
742
|
-
AXImageEditorHighlightComponent,
|
743
|
-
AXImageEditorRotateComponent,
|
744
|
-
AXimageEditorHeaderComponent] }); }
|
799
|
+
AXimageEditorHeaderComponent,
|
800
|
+
AXImageEditorCropperWindowComponent] }); }
|
801
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorModule, imports: [MODULES, COMPONENT] }); }
|
745
802
|
}
|
746
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1
|
803
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: AXImageEditorModule, decorators: [{
|
747
804
|
type: NgModule,
|
748
805
|
args: [{
|
749
806
|
imports: [...MODULES, ...COMPONENT],
|
@@ -756,5 +813,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImpor
|
|
756
813
|
* Generated bundle index. Do not edit.
|
757
814
|
*/
|
758
815
|
|
759
|
-
export { AXImageEditorContainerComponent, AXImageEditorCropComponent, AXImageEditorHighlightComponent, AXImageEditorHistoryComponent, AXImageEditorModule, AXImageEditorPenComponent, AXImageEditorRotateComponent, AXImageEditorService, AXImageEditorToolSelectorComponent, AXImageEditorViewComponent, AXimageEditorHeaderComponent };
|
816
|
+
export { AXImageEditorContainerComponent, AXImageEditorCropComponent, AXImageEditorCropperWindowComponent, AXImageEditorHighlightComponent, AXImageEditorHistoryComponent, AXImageEditorModule, AXImageEditorPenComponent, AXImageEditorRotateComponent, AXImageEditorService, AXImageEditorToolSelectorComponent, AXImageEditorViewComponent, AXimageEditorHeaderComponent };
|
760
817
|
//# sourceMappingURL=acorex-components-image-editor.mjs.map
|