@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.
Files changed (128) hide show
  1. package/common/lib/classes/datasource.class.d.ts +2 -2
  2. package/fesm2022/acorex-components-action-sheet.mjs +12 -12
  3. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  4. package/fesm2022/acorex-components-alert.mjs +7 -7
  5. package/fesm2022/acorex-components-audio-wave.mjs +7 -7
  6. package/fesm2022/acorex-components-autocomplete.mjs +7 -7
  7. package/fesm2022/acorex-components-avatar.mjs +10 -10
  8. package/fesm2022/acorex-components-badge.mjs +7 -7
  9. package/fesm2022/acorex-components-bottom-navigation.mjs +10 -10
  10. package/fesm2022/acorex-components-breadcrumbs.mjs +10 -10
  11. package/fesm2022/acorex-components-button-group.mjs +10 -10
  12. package/fesm2022/acorex-components-button.mjs +13 -13
  13. package/fesm2022/acorex-components-calendar.mjs +13 -13
  14. package/fesm2022/acorex-components-check-box.mjs +7 -7
  15. package/fesm2022/acorex-components-chips.mjs +7 -7
  16. package/fesm2022/acorex-components-circular-progress.mjs +7 -7
  17. package/fesm2022/acorex-components-collapse.mjs +10 -10
  18. package/fesm2022/acorex-components-color-box.mjs +7 -7
  19. package/fesm2022/acorex-components-color-palette.mjs +25 -25
  20. package/fesm2022/acorex-components-comment.mjs +28 -28
  21. package/fesm2022/acorex-components-common.mjs +91 -91
  22. package/fesm2022/acorex-components-common.mjs.map +1 -1
  23. package/fesm2022/acorex-components-conversation.mjs +49 -49
  24. package/fesm2022/acorex-components-cron-job.mjs +46 -46
  25. package/fesm2022/acorex-components-data-pager.mjs +31 -31
  26. package/fesm2022/acorex-components-data-table.mjs +38 -38
  27. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  28. package/fesm2022/acorex-components-datetime-box.mjs +7 -7
  29. package/fesm2022/acorex-components-datetime-input.mjs +7 -7
  30. package/fesm2022/acorex-components-datetime-picker.mjs +7 -7
  31. package/fesm2022/acorex-components-decorators.mjs +25 -25
  32. package/fesm2022/acorex-components-dialog.mjs +10 -10
  33. package/fesm2022/acorex-components-drawer.mjs +13 -13
  34. package/fesm2022/acorex-components-dropdown-button.mjs +7 -7
  35. package/fesm2022/acorex-components-dropdown.mjs +13 -13
  36. package/fesm2022/acorex-components-file-explorer.mjs +25 -25
  37. package/fesm2022/acorex-components-file-explorer.mjs.map +1 -1
  38. package/fesm2022/acorex-components-form.mjs +16 -16
  39. package/fesm2022/acorex-components-grid-layout-builder.mjs +192 -112
  40. package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
  41. package/fesm2022/acorex-components-image-editor.mjs +343 -302
  42. package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
  43. package/fesm2022/acorex-components-image.mjs +7 -7
  44. package/fesm2022/acorex-components-json-viewer.mjs +7 -7
  45. package/fesm2022/acorex-components-kbd.mjs +10 -10
  46. package/fesm2022/acorex-components-label.mjs +7 -7
  47. package/fesm2022/acorex-components-list.mjs +7 -7
  48. package/fesm2022/acorex-components-loading-dialog.mjs +10 -10
  49. package/fesm2022/acorex-components-loading.mjs +16 -16
  50. package/fesm2022/acorex-components-map.mjs +10 -10
  51. package/fesm2022/acorex-components-media-viewer.mjs +34 -34
  52. package/fesm2022/acorex-components-menu.mjs +20 -20
  53. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  54. package/fesm2022/acorex-components-navbar.mjs +7 -7
  55. package/fesm2022/acorex-components-notification.mjs +49 -33
  56. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  57. package/fesm2022/acorex-components-number-box.mjs +7 -7
  58. package/fesm2022/acorex-components-otp.mjs +7 -7
  59. package/fesm2022/acorex-components-page.mjs +10 -10
  60. package/fesm2022/acorex-components-paint.mjs +20 -49
  61. package/fesm2022/acorex-components-paint.mjs.map +1 -1
  62. package/fesm2022/acorex-components-password-box.mjs +10 -10
  63. package/fesm2022/acorex-components-pdf-reader.mjs +7 -7
  64. package/fesm2022/acorex-components-phone-box.mjs +7 -7
  65. package/fesm2022/acorex-components-picker.mjs +13 -13
  66. package/fesm2022/acorex-components-popover.mjs +7 -7
  67. package/fesm2022/acorex-components-popup.mjs +10 -10
  68. package/fesm2022/acorex-components-progress-bar.mjs +7 -7
  69. package/fesm2022/acorex-components-qrcode.mjs +7 -7
  70. package/fesm2022/acorex-components-query-builder.mjs +7 -7
  71. package/fesm2022/acorex-components-radio.mjs +7 -7
  72. package/fesm2022/acorex-components-rail-navigation.mjs +13 -13
  73. package/fesm2022/acorex-components-range-slider.mjs +7 -7
  74. package/fesm2022/acorex-components-rate-picker.mjs +7 -7
  75. package/fesm2022/acorex-components-rest-api-generator.mjs +22 -22
  76. package/fesm2022/acorex-components-result.mjs +7 -7
  77. package/fesm2022/acorex-components-routing-progress.mjs +7 -7
  78. package/fesm2022/acorex-components-scheduler.mjs +13 -13
  79. package/fesm2022/acorex-components-scss.mjs +4 -4
  80. package/fesm2022/acorex-components-search-box.mjs +7 -7
  81. package/fesm2022/acorex-components-select-box.mjs +7 -7
  82. package/fesm2022/acorex-components-selection-list.mjs +7 -7
  83. package/fesm2022/acorex-components-side-menu.mjs +13 -13
  84. package/fesm2022/acorex-components-skeleton.mjs +7 -7
  85. package/fesm2022/acorex-components-slider.mjs +7 -7
  86. package/fesm2022/acorex-components-sliding-item.mjs +13 -13
  87. package/fesm2022/acorex-components-sliding-item.mjs.map +1 -1
  88. package/fesm2022/acorex-components-step-wizard.mjs +13 -13
  89. package/fesm2022/acorex-components-switch.mjs +10 -10
  90. package/fesm2022/acorex-components-tabs.mjs +13 -13
  91. package/fesm2022/acorex-components-tag-box.mjs +7 -7
  92. package/fesm2022/acorex-components-tag.mjs +7 -7
  93. package/fesm2022/acorex-components-text-area.mjs +7 -7
  94. package/fesm2022/acorex-components-text-box.mjs +10 -10
  95. package/fesm2022/acorex-components-time-line.mjs +10 -10
  96. package/fesm2022/acorex-components-toast.mjs +51 -15
  97. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  98. package/fesm2022/acorex-components-toolbar.mjs +7 -7
  99. package/fesm2022/acorex-components-tooltip.mjs +10 -10
  100. package/fesm2022/acorex-components-tree-view.mjs +178 -163
  101. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  102. package/fesm2022/acorex-components-uploader.mjs +22 -22
  103. package/fesm2022/acorex-components-video-player.mjs +7 -7
  104. package/fesm2022/acorex-components-wysiwyg.mjs +31 -31
  105. package/grid-layout-builder/lib/grid-layout-container.component.d.ts +8 -23
  106. package/grid-layout-builder/lib/grid-layout-widget.component.d.ts +27 -3
  107. package/grid-layout-builder/lib/types.d.ts +82 -25
  108. package/grid-layout-builder/lib/utility.d.ts +7 -0
  109. package/image-editor/index.d.ts +1 -1
  110. package/image-editor/lib/image-editor-container/image-editor-container.component.d.ts +1 -13
  111. package/image-editor/lib/image-editor-cropper-window/image-editor-cropper-window.component.d.ts +47 -0
  112. package/image-editor/lib/image-editor-tools/image-editor-crop/image-editor-crop.component.d.ts +1 -0
  113. package/image-editor/lib/image-editor-view/image-editor-view.component.d.ts +17 -24
  114. package/image-editor/lib/image-editor.module.d.ts +2 -2
  115. package/image-editor/lib/image-editor.service.d.ts +1 -0
  116. package/notification/lib/notification.class.d.ts +2 -0
  117. package/notification/lib/notification.component.d.ts +7 -6
  118. package/notification/lib/notification.config.d.ts +1 -0
  119. package/package.json +1 -1
  120. package/paint/lib/paint/paint-view/paint-view.component.d.ts +0 -6
  121. package/rest-api-generator/lib/request-headers/request-headers.component.d.ts +1 -1
  122. package/toast/lib/toast.class.d.ts +2 -0
  123. package/toast/lib/toast.component.d.ts +7 -0
  124. package/toast/lib/toast.config.d.ts +1 -0
  125. package/tree-view/lib/tree-view-item.component.d.ts +8 -12
  126. package/tree-view/lib/tree-view.class.d.ts +4 -20
  127. package/tree-view/lib/tree-view.component.d.ts +25 -16
  128. 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 { AXDecoratorModule, AXDecoratorIconComponent } from '@acorex/components/decorators';
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 { CommonModule } from '@angular/common';
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, computed, linkedSignal, NgZone, afterNextRender, effect, HostBinding, contentChild, forwardRef, NgModule } from '@angular/core';
12
- import * as i1$1 from '@angular/forms';
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.8", ngImport: i0, type: AXImageEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
38
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: AXImageEditorService }); }
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.8", ngImport: i0, type: AXImageEditorService, decorators: [{
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
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: AXImageEditorCropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
57
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.8", 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", 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
- }
59
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: AXImageEditorCropComponent, decorators: [{
60
- 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" }]
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.8", ngImport: i0, type: AXimageEditorHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
98
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.8", 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 }); }
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.8", ngImport: i0, type: AXimageEditorHeaderComponent, decorators: [{
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-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"] }]
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.8", ngImport: i0, type: AXImageEditorHighlightComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
126
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.8", 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 }); }
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.8", ngImport: i0, type: AXImageEditorHighlightComponent, decorators: [{
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.8", ngImport: i0, type: AXImageEditorPenComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
154
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.8", 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 }); }
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.8", ngImport: i0, type: AXImageEditorPenComponent, decorators: [{
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.8", ngImport: i0, type: AXImageEditorRotateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
179
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.8", 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 }); }
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.8", ngImport: i0, type: AXImageEditorRotateComponent, decorators: [{
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.8", ngImport: i0, type: AXImageEditorToolSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
205
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.8", 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 }); }
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.8", ngImport: i0, type: AXImageEditorToolSelectorComponent, decorators: [{
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.activeToolState() === 'crop') {
375
- this.cropStartX.set(e.offsetX);
376
- this.cropStartY.set(e.offsetY);
377
- this.cropEndX.set(0);
378
- }
379
- else {
380
- if (!this.service.penType())
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.activeToolState() === 'crop') {
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
- const offsetX = e.touches[0].clientX - this.getBoundingCanvasHandler().left;
444
- const offsetY = e.touches[0].clientY - this.getBoundingCanvasHandler().top;
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
- touchEndHandler() {
583
+ mouseUpHandler() {
460
584
  this.isMouseDown.set(false);
461
- if (this.service.activeToolState() === 'crop' && this.cropEndX()) {
462
- this.ctx().globalCompositeOperation = 'source-over';
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
- if (!this.isDrawRectangleCreated())
525
- return;
526
- let cropWidth;
527
- let cropHeight;
528
- this.service.rotate.update((prev) => {
529
- return { userInteract: false, state: prev.state };
530
- });
531
- if (this.cropStartX() < this.cropEndX() && this.cropStartY() > this.cropEndY()) {
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.8", ngImport: i0, type: AXImageEditorViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
592
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.1.8", type: AXImageEditorViewComponent, isStandalone: true, selector: "ax-image-editor-view", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style": "this.__hostStyle" } }, viewQueries: [{ propertyName: "canvasElem", first: true, predicate: ["canvasElem"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<canvas\n tabindex=\"1\"\n (mousedown)=\"mouseDownHandler($event)\"\n (mouseup)=\"mouseUpHandler()\"\n (mousemove)=\"mouseMoveHandler($event)\"\n (touchstart)=\"touchStartHandler($event)\"\n (touchend)=\"touchEndHandler()\"\n (touchmove)=\"touchMoveHandler($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n></canvas>\n", styles: ["ax-image-editor-view{position:relative;display:flex;justify-content:center;align-items:center;background-color:#fff;width:100%}ax-image-editor-view .ax-canvas-element{cursor:crosshair}ax-image-editor-view .ax-crop-save{position:absolute;top:0;right:0;margin:1rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
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.8", ngImport: i0, type: AXImageEditorViewComponent, decorators: [{
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 (mousedown)=\"mouseDownHandler($event)\"\n (mouseup)=\"mouseUpHandler()\"\n (mousemove)=\"mouseMoveHandler($event)\"\n (touchstart)=\"touchStartHandler($event)\"\n (touchend)=\"touchEndHandler()\"\n (touchmove)=\"touchMoveHandler($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n></canvas>\n", styles: ["ax-image-editor-view{position:relative;display:flex;justify-content:center;align-items:center;background-color:#fff;width:100%}ax-image-editor-view .ax-canvas-element{cursor:crosshair}ax-image-editor-view .ax-crop-save{position:absolute;top:0;right:0;margin:1rem}\n"] }]
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.dialogService
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.8", ngImport: i0, type: AXImageEditorContainerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
645
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.8", type: AXImageEditorContainerComponent, isStandalone: true, selector: "ax-image-editor-container", inputs: { look: "look" }, outputs: { onValueChanged: "onValueChanged" }, providers: [
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-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 }); }
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.8", ngImport: i0, type: AXImageEditorContainerComponent, decorators: [{
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
- 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"] }]
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
- AXimageEditorHeaderComponent,
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.8", ngImport: i0, type: AXImageEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
711
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.8", ngImport: i0, type: AXImageEditorModule, imports: [AXButtonModule,
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
- AXimageEditorHeaderComponent], exports: [AXImageEditorViewComponent,
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
- AXimageEditorHeaderComponent] }); }
737
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.8", ngImport: i0, type: AXImageEditorModule, imports: [MODULES, AXImageEditorContainerComponent,
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.8", ngImport: i0, type: AXImageEditorModule, decorators: [{
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, AXimageEditorHeaderComponent };
800
+ export { AXImageEditorContainerComponent, AXImageEditorCropComponent, AXImageEditorCropperWindowComponent, AXImageEditorHighlightComponent, AXImageEditorHistoryComponent, AXImageEditorModule, AXImageEditorPenComponent, AXImageEditorRotateComponent, AXImageEditorService, AXImageEditorToolSelectorComponent, AXImageEditorViewComponent };
760
801
  //# sourceMappingURL=acorex-components-image-editor.mjs.map