@rdlabo/ionic-angular-photo-editor 2.0.1 → 19.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/rdlabo-ionic-angular-photo-editor.mjs +14 -14
- package/fesm2022/rdlabo-ionic-angular-photo-editor.mjs.map +1 -1
- package/lib/ion-components.d.ts +1 -1
- package/lib/pages/photo-editor.page.d.ts +2 -2
- package/package.json +3 -5
- package/esm2022/lib/dictionaries.mjs +0 -27
- package/esm2022/lib/filter-preset.mjs +0 -43
- package/esm2022/lib/ion-components.mjs +0 -3
- package/esm2022/lib/pages/photo-editor.page.mjs +0 -187
- package/esm2022/lib/pages/photo-viewer.page.mjs +0 -101
- package/esm2022/lib/photoEditorErrors.mjs +0 -7
- package/esm2022/lib/service/helper.service.mjs +0 -44
- package/esm2022/lib/service/photo-file.service.mjs +0 -146
- package/esm2022/lib/types.mjs +0 -2
- package/esm2022/public-api.mjs +0 -8
- package/esm2022/rdlabo-ionic-angular-photo-editor.mjs +0 -5
|
@@ -1,187 +0,0 @@
|
|
|
1
|
-
import { Component, inject, Input, signal, ViewChild } from '@angular/core';
|
|
2
|
-
import { CommonModule, NgOptimizedImage } from '@angular/common';
|
|
3
|
-
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import { IonContent, ModalController } from '@ionic/angular/standalone';
|
|
5
|
-
import ImageEditor from 'tui-image-editor';
|
|
6
|
-
import { filterPreset } from '../filter-preset';
|
|
7
|
-
import { toObservable } from '@angular/core/rxjs-interop';
|
|
8
|
-
import { HelperService } from '../service/helper.service';
|
|
9
|
-
import { ionComponents } from '../ion-components';
|
|
10
|
-
import { dictionaryForEditor } from '../dictionaries';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@ionic/angular/standalone";
|
|
13
|
-
export class PhotoEditorPage {
|
|
14
|
-
set labels(d) {
|
|
15
|
-
this.dictionary = Object.assign(this.dictionary, d);
|
|
16
|
-
this.filterPreset = filterPreset(this.dictionary);
|
|
17
|
-
}
|
|
18
|
-
constructor() {
|
|
19
|
-
this.dictionary = dictionaryForEditor();
|
|
20
|
-
this.filterPreset = filterPreset(this.dictionary);
|
|
21
|
-
this.requireSquare = false;
|
|
22
|
-
this.$filters = signal([]);
|
|
23
|
-
this.$footerMenu = signal('menu');
|
|
24
|
-
this.$currentCrop = signal('cover');
|
|
25
|
-
this.$currentRotate = signal(0);
|
|
26
|
-
this.$photoCrop = signal({
|
|
27
|
-
width: 0,
|
|
28
|
-
height: 0,
|
|
29
|
-
});
|
|
30
|
-
this.$isCropped = signal(false);
|
|
31
|
-
this.footerMenu$ = toObservable(this.$footerMenu);
|
|
32
|
-
this.$adoptFilter = signal(undefined);
|
|
33
|
-
this.initSubscription$ = [];
|
|
34
|
-
this.filterImageSize = 240;
|
|
35
|
-
this.service = inject(HelperService);
|
|
36
|
-
this.modalCtrl = inject(ModalController);
|
|
37
|
-
this.canvasContainerObserver = new MutationObserver((mutationsList) => {
|
|
38
|
-
if (mutationsList.find((mutation) => mutation.type === 'attributes' && mutation.attributeName === 'style')) {
|
|
39
|
-
// Cover the image editor with the parent element
|
|
40
|
-
this.editorRef.nativeElement.style.minWidth = mutationsList[0].target.parentElement.style.maxWidth;
|
|
41
|
-
this.editorRef.nativeElement.style.minHeight = mutationsList[0].target.parentElement.style.maxHeight;
|
|
42
|
-
this.$photoCrop.set({
|
|
43
|
-
width: mutationsList[0].target.parentElement.querySelector('canvas').width,
|
|
44
|
-
height: mutationsList[0].target.parentElement.querySelector('canvas').height,
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
this.service.initializeEditorIcons();
|
|
49
|
-
}
|
|
50
|
-
ngOnInit() {
|
|
51
|
-
this.initSubscription$.push(this.footerMenu$.subscribe((value) => {
|
|
52
|
-
if (value === 'filter') {
|
|
53
|
-
this.initializeFilterMenu().then();
|
|
54
|
-
}
|
|
55
|
-
if (value === 'crop') {
|
|
56
|
-
this.editorInstance.startDrawingMode('CROPPER');
|
|
57
|
-
this.changeCrop(this.requireSquare ? '1' : 'cover');
|
|
58
|
-
}
|
|
59
|
-
}));
|
|
60
|
-
}
|
|
61
|
-
ngOnDestroy() {
|
|
62
|
-
this.initSubscription$.forEach((subscription) => subscription.unsubscribe());
|
|
63
|
-
}
|
|
64
|
-
async ionViewDidEnter() {
|
|
65
|
-
this.editorInstance = new ImageEditor(this.editorRef.nativeElement, {
|
|
66
|
-
cssMaxWidth: this.ionContent.el.clientWidth - 32,
|
|
67
|
-
cssMaxHeight: this.ionContent.el.clientHeight - 32,
|
|
68
|
-
});
|
|
69
|
-
this.service.waitToFindDom(this.editorRef.nativeElement, '.tui-image-editor-canvas-container').then(() => {
|
|
70
|
-
this.canvasContainerObserver.observe(this.editorRef.nativeElement.querySelector('.tui-image-editor-canvas-container'), {
|
|
71
|
-
attributes: true,
|
|
72
|
-
childList: false,
|
|
73
|
-
subtree: true,
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
const blob = await fetch(this.value).then((res) => res.blob());
|
|
77
|
-
await this.editorInstance.loadImageFromFile(new File([blob], 'data.png', { type: blob.type }));
|
|
78
|
-
this.$footerMenu.set(this.requireSquare ? 'crop' : 'menu');
|
|
79
|
-
}
|
|
80
|
-
ionViewDidLeave() {
|
|
81
|
-
this.editorInstance.destroy();
|
|
82
|
-
this.canvasContainerObserver.disconnect();
|
|
83
|
-
}
|
|
84
|
-
changeCrop(crop) {
|
|
85
|
-
const rect = crop === 'cover' ? this.$photoCrop().width / this.$photoCrop().height : crop === '16/9' ? 16 / 9 : 1;
|
|
86
|
-
this.editorInstance.setCropzoneRect(crop !== 'auto' ? rect : undefined);
|
|
87
|
-
this.$currentCrop.set(crop);
|
|
88
|
-
}
|
|
89
|
-
async rotate() {
|
|
90
|
-
this.editorInstance.stopDrawingMode();
|
|
91
|
-
await this.editorInstance.rotate(90);
|
|
92
|
-
this.$currentRotate.update((value) => value + 90);
|
|
93
|
-
this.editorInstance.startDrawingMode('CROPPER');
|
|
94
|
-
requestAnimationFrame(() => this.changeCrop(this.$currentCrop()));
|
|
95
|
-
}
|
|
96
|
-
async closeCrop(type) {
|
|
97
|
-
if (this.$footerMenu() === 'crop') {
|
|
98
|
-
if (type === 'cancel') {
|
|
99
|
-
await this.editorInstance.rotate(this.$currentRotate() * -1);
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
await this.editorInstance.crop(this.editorInstance.getCropzoneRect());
|
|
103
|
-
this.$isCropped.set(true);
|
|
104
|
-
}
|
|
105
|
-
this.$currentRotate.set(0);
|
|
106
|
-
this.$currentCrop.set('cover');
|
|
107
|
-
this.editorInstance.stopDrawingMode();
|
|
108
|
-
}
|
|
109
|
-
else if (this.$footerMenu() === 'brightness') {
|
|
110
|
-
if (type === 'cancel' && this.editorInstance.hasFilter('brightness')) {
|
|
111
|
-
await this.editorInstance.removeFilter('brightness');
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
this.$footerMenu.set('menu');
|
|
115
|
-
}
|
|
116
|
-
async changeRange(event) {
|
|
117
|
-
if (this.editorInstance.hasFilter('brightness')) {
|
|
118
|
-
await this.editorInstance.removeFilter('brightness');
|
|
119
|
-
}
|
|
120
|
-
this.editorInstance.applyFilter('brightness', {
|
|
121
|
-
brightness: Number(event.detail.value) / 255,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
imageSave() {
|
|
125
|
-
const value = this.editorInstance.toDataURL();
|
|
126
|
-
this.modalCtrl.dismiss({ value });
|
|
127
|
-
}
|
|
128
|
-
async initializeFilterMenu() {
|
|
129
|
-
const filters = [];
|
|
130
|
-
const defaultInstance = new ImageEditor(document.createElement('div'), {
|
|
131
|
-
cssMaxWidth: this.filterImageSize,
|
|
132
|
-
cssMaxHeight: (this.$photoCrop().height * this.filterImageSize) / this.$photoCrop().width,
|
|
133
|
-
});
|
|
134
|
-
const blob = await fetch(this.editorInstance.toDataURL({
|
|
135
|
-
multiplier: this.filterImageSize / this.$photoCrop().width,
|
|
136
|
-
})).then((res) => res.blob());
|
|
137
|
-
await defaultInstance.loadImageFromFile(new File([blob], 'defaultInstance.png', { type: blob.type }));
|
|
138
|
-
for (const filter of this.filterPreset) {
|
|
139
|
-
if (filter.type !== 'Default') {
|
|
140
|
-
await defaultInstance.applyFilter(filter.type, filter.option);
|
|
141
|
-
}
|
|
142
|
-
filters.push({
|
|
143
|
-
name: filter.name,
|
|
144
|
-
type: filter.type,
|
|
145
|
-
option: filter.option,
|
|
146
|
-
data: defaultInstance.toDataURL(),
|
|
147
|
-
width: this.filterImageSize,
|
|
148
|
-
height: (this.$photoCrop().height * this.filterImageSize) / this.$photoCrop().width,
|
|
149
|
-
});
|
|
150
|
-
if (filter.type !== 'Default') {
|
|
151
|
-
await defaultInstance.removeFilter(filter.type);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
this.$filters.set(filters);
|
|
155
|
-
defaultInstance.destroy();
|
|
156
|
-
}
|
|
157
|
-
async filterImage(filter) {
|
|
158
|
-
if (this.$adoptFilter()) {
|
|
159
|
-
await this.editorInstance.removeFilter(this.$adoptFilter().type);
|
|
160
|
-
}
|
|
161
|
-
if (filter.type === 'Default') {
|
|
162
|
-
this.$adoptFilter.set(undefined);
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
await this.editorInstance.applyFilter(filter.type, filter.option);
|
|
166
|
-
this.$adoptFilter.set(filter);
|
|
167
|
-
}
|
|
168
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: PhotoEditorPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
169
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: PhotoEditorPage, isStandalone: true, selector: "app-editor-image", inputs: { requireSquare: "requireSquare", value: "value", labels: "labels" }, providers: [HelperService], viewQueries: [{ propertyName: "editorRef", first: true, predicate: ["imageEditor"], descendants: true, static: true }, { propertyName: "ionContent", first: true, predicate: IonContent, descendants: true }], ngImport: i0, template: "<ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"start\"\n ><ion-button (click)=\"modalCtrl.dismiss()\"><ion-icon name=\"close-outline\" slot=\"icon-only\"></ion-icon></ion-button\n ></ion-buttons>\n <ion-buttons slot=\"end\">\n <ion-button\n color=\"photo-editor-primary\"\n fill=\"outline\"\n [disabled]=\"!['menu', 'filter'].includes($footerMenu())\"\n (click)=\"imageSave()\"\n >\n {{ dictionary.save }}\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\" [scrollY]=\"false\">\n <div #imageEditor></div>\n</ion-content>\n<ion-footer>\n <ion-toolbar>\n @if (this.$footerMenu() === 'menu') {\n <aside class=\"ion-justify-content-center\">\n <button (click)=\"$footerMenu.set('crop')\">\n <ion-text>{{ dictionary.crop }}</ion-text>\n <ion-icon name=\"crop-outline\" size=\"large\"></ion-icon>\n </button>\n <button (click)=\"$footerMenu.set('filter')\">\n <ion-text>{{ dictionary.filter }}</ion-text>\n <ion-icon name=\"color-filter-outline\" size=\"large\"></ion-icon>\n </button>\n <button (click)=\"$footerMenu.set('brightness')\">\n <ion-text>{{ dictionary.brightness }}</ion-text>\n <ion-icon name=\"sunny-outline\" size=\"large\"></ion-icon>\n </button>\n </aside>\n }\n\n @if (this.$footerMenu() === 'filter') {\n <aside>\n @for (item of $filters(); track item) {\n <button (click)=\"filterImage(item)\">\n <ion-text>{{ item.name }}</ion-text>\n <span class=\"image-filter-box\" [style.background-image]=\"'url(' + item.data + ')'\"></span>\n </button>\n }\n </aside>\n }\n\n @if (this.$footerMenu() === 'crop' && !requireSquare) {\n <ion-buttons class=\"ion-justify-content-center submenu-icon-buttons\">\n <ion-button (click)=\"changeCrop('cover')\" [color]=\"$currentCrop() === 'cover' ? 'success' : undefined\">\n <ion-icon name=\"expand-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"changeCrop('16/9')\" [color]=\"$currentCrop() === '16/9' ? 'success' : undefined\">\n <ion-icon name=\"tablet-landscape-outline\" slot=\"icon-only\" style=\"transform: scale(1, 0.8)\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"changeCrop('1')\" [color]=\"$currentCrop() === '1' ? 'success' : undefined\">\n <ion-icon name=\"square-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"changeCrop('auto')\" [color]=\"$currentCrop() === 'auto' ? 'success' : undefined\">\n <ion-icon name=\"crop-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"rotate()\"><ion-icon name=\"refresh-outline\" slot=\"icon-only\"></ion-icon></ion-button>\n </ion-buttons>\n }\n\n @if (['brightness'].includes(this.$footerMenu())) {\n <div class=\"ion-padding ion-margin\">\n <ion-range [pin]=\"true\" [min]=\"-100\" [max]=\"100\" (ionChange)=\"changeRange($any($event))\"></ion-range>\n </div>\n }\n </ion-toolbar>\n @if (this.$footerMenu() !== 'menu') {\n <ion-toolbar mode=\"md\">\n @if (this.$footerMenu() === 'filter') {\n <ion-buttons class=\"ion-justify-content-center\" style=\"margin: 0 8px\">\n <ion-button fill=\"outline\" shape=\"round\" (click)=\"this.$footerMenu.set('menu')\">\u623B\u308B</ion-button>\n </ion-buttons>\n } @else {\n <ion-buttons slot=\"start\" style=\"min-width: 60px\">\n @if (!requireSquare || $isCropped()) {\n <ion-button (click)=\"closeCrop('cancel')\"><ion-icon name=\"close-outline\" slot=\"icon-only\"></ion-icon></ion-button>\n }</ion-buttons\n ><ion-text class=\"footer-title\">\n @if ($footerMenu() === 'crop') {\n {{ dictionary.crop }}\n } @else if ($footerMenu() === 'brightness') {\n {{ dictionary.brightness }}\n }</ion-text\n ><ion-buttons slot=\"end\"\n ><ion-button (click)=\"closeCrop('apply')\"\n ><ion-icon name=\"checkmark-outline\" color=\"photo-editor-success\" slot=\"icon-only\"></ion-icon></ion-button\n ></ion-buttons>\n }\n </ion-toolbar>\n }\n</ion-footer>\n", styles: [":host{--editor-background: var(--ion-photo-editor-background, --ion-color-step-100, #2a2a2a);--editor-background-tint: var(--ion-photo-editor-background-tint, --ion-color-step-200, #414141);--editor-color: var(--ion-photo-editor-color, --ion-color-step-950, #f0f0f0);--editor-color-tint: var(--ion-photo-editor-color-tint, --ion-color-step-850, #dbdbdb);--ion-color-photo-editor-primary: var(--ion-photo-editor-primary, --ion-color-primary, #4d8dff);--ion-color-photo-editor-danger: var(--ion-photo-editor-danger, #f24c58);--ion-color-photo-editor-success: var(--ion-photo-editor-success, #2dd55b)}.ion-color-photo-editor-primary{--ion-color-base: var(--ion-color-photo-editor-primary)}.ion-color-photo-editor-danger{--ion-color-base: var(--ion-color-photo-editor-danger)}.ion-color-photo-editor-success{--ion-color-base: var(--ion-color-photo-editor-success)}ion-content,ion-toolbar,ion-header,ion-footer{background:var(--editor-background)!important;--background: var(--editor-background) !important}\n", "ion-content{--background: var(--editor-background)}ion-content>div{width:100%;height:100%;max-width:100%;max-height:100%;display:grid;align-items:center;justify-items:center}aside{display:flex;overflow-x:scroll;margin-top:16px;min-height:120px}aside ion-icon{color:var(--editor-color);border:1px solid var(--editor-background-tint);border-radius:50%;padding:16px}aside button{width:120px;display:block;flex:1;background:transparent;margin:0 8px 16px}aside button ion-text{display:block;color:var(--editor-color);margin-bottom:8px;font-size:.8rem}aside button span.image-filter-box{width:96px;height:64px;border-radius:8px;overflow:hidden;display:block;background-position:center,center;background-size:cover}ion-header ion-button,ion-footer ion-button{--color: var(--editor-color) !important}ion-footer ion-toolbar ion-text.footer-title{color:var(--editor-color)!important;display:block;text-align:center}ion-footer ion-toolbar ion-range{--bar-background: var(--editor-color);--bar-background-active: var(--editor-color);--bar-height: 2px;--bar-border-radius: 8px;--knob-background: var(--editor-color);--knob-size: 20px;--pin-background: none;--pin-color: var(--editor-color)}ion-footer ion-toolbar ion-buttons[slot=start] ion-button,ion-footer ion-toolbar ion-buttons[slot=end] ion-button{--background: var(--editor-background-tint) !important;--border-radius: 50%;margin:0 8px;min-width:32px;min-height:32px}ion-footer ion-toolbar ion-buttons.submenu-icon-buttons ion-button{margin:16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonRange, selector: "ion-range", inputs: ["activeBarStart", "color", "debounce", "disabled", "dualKnobs", "label", "labelPlacement", "max", "min", "mode", "name", "pin", "pinFormatter", "snaps", "step", "ticks", "value"] }] }); }
|
|
170
|
-
}
|
|
171
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: PhotoEditorPage, decorators: [{
|
|
172
|
-
type: Component,
|
|
173
|
-
args: [{ selector: 'app-editor-image', standalone: true, imports: [CommonModule, FormsModule, NgOptimizedImage, ...ionComponents], providers: [HelperService], template: "<ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"start\"\n ><ion-button (click)=\"modalCtrl.dismiss()\"><ion-icon name=\"close-outline\" slot=\"icon-only\"></ion-icon></ion-button\n ></ion-buttons>\n <ion-buttons slot=\"end\">\n <ion-button\n color=\"photo-editor-primary\"\n fill=\"outline\"\n [disabled]=\"!['menu', 'filter'].includes($footerMenu())\"\n (click)=\"imageSave()\"\n >\n {{ dictionary.save }}\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\" [scrollY]=\"false\">\n <div #imageEditor></div>\n</ion-content>\n<ion-footer>\n <ion-toolbar>\n @if (this.$footerMenu() === 'menu') {\n <aside class=\"ion-justify-content-center\">\n <button (click)=\"$footerMenu.set('crop')\">\n <ion-text>{{ dictionary.crop }}</ion-text>\n <ion-icon name=\"crop-outline\" size=\"large\"></ion-icon>\n </button>\n <button (click)=\"$footerMenu.set('filter')\">\n <ion-text>{{ dictionary.filter }}</ion-text>\n <ion-icon name=\"color-filter-outline\" size=\"large\"></ion-icon>\n </button>\n <button (click)=\"$footerMenu.set('brightness')\">\n <ion-text>{{ dictionary.brightness }}</ion-text>\n <ion-icon name=\"sunny-outline\" size=\"large\"></ion-icon>\n </button>\n </aside>\n }\n\n @if (this.$footerMenu() === 'filter') {\n <aside>\n @for (item of $filters(); track item) {\n <button (click)=\"filterImage(item)\">\n <ion-text>{{ item.name }}</ion-text>\n <span class=\"image-filter-box\" [style.background-image]=\"'url(' + item.data + ')'\"></span>\n </button>\n }\n </aside>\n }\n\n @if (this.$footerMenu() === 'crop' && !requireSquare) {\n <ion-buttons class=\"ion-justify-content-center submenu-icon-buttons\">\n <ion-button (click)=\"changeCrop('cover')\" [color]=\"$currentCrop() === 'cover' ? 'success' : undefined\">\n <ion-icon name=\"expand-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"changeCrop('16/9')\" [color]=\"$currentCrop() === '16/9' ? 'success' : undefined\">\n <ion-icon name=\"tablet-landscape-outline\" slot=\"icon-only\" style=\"transform: scale(1, 0.8)\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"changeCrop('1')\" [color]=\"$currentCrop() === '1' ? 'success' : undefined\">\n <ion-icon name=\"square-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"changeCrop('auto')\" [color]=\"$currentCrop() === 'auto' ? 'success' : undefined\">\n <ion-icon name=\"crop-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button (click)=\"rotate()\"><ion-icon name=\"refresh-outline\" slot=\"icon-only\"></ion-icon></ion-button>\n </ion-buttons>\n }\n\n @if (['brightness'].includes(this.$footerMenu())) {\n <div class=\"ion-padding ion-margin\">\n <ion-range [pin]=\"true\" [min]=\"-100\" [max]=\"100\" (ionChange)=\"changeRange($any($event))\"></ion-range>\n </div>\n }\n </ion-toolbar>\n @if (this.$footerMenu() !== 'menu') {\n <ion-toolbar mode=\"md\">\n @if (this.$footerMenu() === 'filter') {\n <ion-buttons class=\"ion-justify-content-center\" style=\"margin: 0 8px\">\n <ion-button fill=\"outline\" shape=\"round\" (click)=\"this.$footerMenu.set('menu')\">\u623B\u308B</ion-button>\n </ion-buttons>\n } @else {\n <ion-buttons slot=\"start\" style=\"min-width: 60px\">\n @if (!requireSquare || $isCropped()) {\n <ion-button (click)=\"closeCrop('cancel')\"><ion-icon name=\"close-outline\" slot=\"icon-only\"></ion-icon></ion-button>\n }</ion-buttons\n ><ion-text class=\"footer-title\">\n @if ($footerMenu() === 'crop') {\n {{ dictionary.crop }}\n } @else if ($footerMenu() === 'brightness') {\n {{ dictionary.brightness }}\n }</ion-text\n ><ion-buttons slot=\"end\"\n ><ion-button (click)=\"closeCrop('apply')\"\n ><ion-icon name=\"checkmark-outline\" color=\"photo-editor-success\" slot=\"icon-only\"></ion-icon></ion-button\n ></ion-buttons>\n }\n </ion-toolbar>\n }\n</ion-footer>\n", styles: [":host{--editor-background: var(--ion-photo-editor-background, --ion-color-step-100, #2a2a2a);--editor-background-tint: var(--ion-photo-editor-background-tint, --ion-color-step-200, #414141);--editor-color: var(--ion-photo-editor-color, --ion-color-step-950, #f0f0f0);--editor-color-tint: var(--ion-photo-editor-color-tint, --ion-color-step-850, #dbdbdb);--ion-color-photo-editor-primary: var(--ion-photo-editor-primary, --ion-color-primary, #4d8dff);--ion-color-photo-editor-danger: var(--ion-photo-editor-danger, #f24c58);--ion-color-photo-editor-success: var(--ion-photo-editor-success, #2dd55b)}.ion-color-photo-editor-primary{--ion-color-base: var(--ion-color-photo-editor-primary)}.ion-color-photo-editor-danger{--ion-color-base: var(--ion-color-photo-editor-danger)}.ion-color-photo-editor-success{--ion-color-base: var(--ion-color-photo-editor-success)}ion-content,ion-toolbar,ion-header,ion-footer{background:var(--editor-background)!important;--background: var(--editor-background) !important}\n", "ion-content{--background: var(--editor-background)}ion-content>div{width:100%;height:100%;max-width:100%;max-height:100%;display:grid;align-items:center;justify-items:center}aside{display:flex;overflow-x:scroll;margin-top:16px;min-height:120px}aside ion-icon{color:var(--editor-color);border:1px solid var(--editor-background-tint);border-radius:50%;padding:16px}aside button{width:120px;display:block;flex:1;background:transparent;margin:0 8px 16px}aside button ion-text{display:block;color:var(--editor-color);margin-bottom:8px;font-size:.8rem}aside button span.image-filter-box{width:96px;height:64px;border-radius:8px;overflow:hidden;display:block;background-position:center,center;background-size:cover}ion-header ion-button,ion-footer ion-button{--color: var(--editor-color) !important}ion-footer ion-toolbar ion-text.footer-title{color:var(--editor-color)!important;display:block;text-align:center}ion-footer ion-toolbar ion-range{--bar-background: var(--editor-color);--bar-background-active: var(--editor-color);--bar-height: 2px;--bar-border-radius: 8px;--knob-background: var(--editor-color);--knob-size: 20px;--pin-background: none;--pin-color: var(--editor-color)}ion-footer ion-toolbar ion-buttons[slot=start] ion-button,ion-footer ion-toolbar ion-buttons[slot=end] ion-button{--background: var(--editor-background-tint) !important;--border-radius: 50%;margin:0 8px;min-width:32px;min-height:32px}ion-footer ion-toolbar ion-buttons.submenu-icon-buttons ion-button{margin:16px}\n"] }]
|
|
174
|
-
}], ctorParameters: () => [], propDecorators: { requireSquare: [{
|
|
175
|
-
type: Input
|
|
176
|
-
}], value: [{
|
|
177
|
-
type: Input
|
|
178
|
-
}], labels: [{
|
|
179
|
-
type: Input
|
|
180
|
-
}], editorRef: [{
|
|
181
|
-
type: ViewChild,
|
|
182
|
-
args: ['imageEditor', { static: true }]
|
|
183
|
-
}], ionContent: [{
|
|
184
|
-
type: ViewChild,
|
|
185
|
-
args: [IonContent]
|
|
186
|
-
}] } });
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG8tZWRpdG9yLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waG90by1lZGl0b3Ivc3JjL2xpYi9wYWdlcy9waG90by1lZGl0b3IucGFnZS50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Bob3RvLWVkaXRvci9zcmMvbGliL3BhZ2VzL3Bob3RvLWVkaXRvci5wYWdlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQWdELE1BQU0sMkJBQTJCLENBQUM7QUFDdEgsT0FBTyxXQUFXLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFVdEQsTUFBTSxPQUFPLGVBQWU7SUFNMUIsSUFBYSxNQUFNLENBQUMsQ0FBdUI7UUFDekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsSUFBSSxD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QUFDLFdBQVcsQ0FBQyxNQUFlO1FBQy9CLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQzs4R0F2TFUsZUFBZTtrR0FBZixlQUFlLDZJQUZmLENBQUMsYUFBYSxDQUFDLCtLQWNmLFVBQVUsZ0RDakN2Qiw4eklBb0dBLDYvRURsRlksWUFBWSw4QkFBRSxXQUFXOzsyRkFHeEIsZUFBZTtrQkFSM0IsU0FBUzsrQkFDRSxrQkFBa0IsY0FHaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLGFBQWEsQ0FBQyxhQUM3RCxDQUFDLGFBQWEsQ0FBQzt3REFNakIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ08sTUFBTTtzQkFBbEIsS0FBSztnQkFLc0MsU0FBUztzQkFBcEQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNuQixVQUFVO3NCQUFoQyxTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ09wdGltaXplZEltYWdlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uQ29udGVudCwgTW9kYWxDb250cm9sbGVyLCBSYW5nZUN1c3RvbUV2ZW50LCBWaWV3RGlkRW50ZXIsIFZpZXdEaWRMZWF2ZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IEltYWdlRWRpdG9yIGZyb20gJ3R1aS1pbWFnZS1lZGl0b3InO1xuaW1wb3J0IHsgZmlsdGVyUHJlc2V0IH0gZnJvbSAnLi4vZmlsdGVyLXByZXNldCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IElEaWN0aW9uYXJ5Rm9yRWRpdG9yLCBJRmlsdGVyLCBJUGhvdG9FZGl0b3JEaXNtaXNzLCBJU2l6ZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL2hlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IGlvbkNvbXBvbmVudHMgfSBmcm9tICcuLi9pb24tY29tcG9uZW50cyc7XG5pbXBvcnQgeyBkaWN0aW9uYXJ5Rm9yRWRpdG9yIH0gZnJvbSAnLi4vZGljdGlvbmFyaWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWVkaXRvci1pbWFnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9waG90by1lZGl0b3IucGFnZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS5zY3NzJywgJy4vcGhvdG8tZWRpdG9yLnBhZ2Uuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTmdPcHRpbWl6ZWRJbWFnZSwgLi4uaW9uQ29tcG9uZW50c10sXG4gIHByb3ZpZGVyczogW0hlbHBlclNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBQaG90b0VkaXRvclBhZ2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgVmlld0RpZEVudGVyLCBWaWV3RGlkTGVhdmUge1xuICBwcm90ZWN0ZWQgZGljdGlvbmFyeTogSURpY3Rpb25hcnlGb3JFZGl0b3IgPSBkaWN0aW9uYXJ5Rm9yRWRpdG9yKCk7XG4gIHByb3RlY3RlZCBmaWx0ZXJQcmVzZXQgPSBmaWx0ZXJQcmVzZXQodGhpcy5kaWN0aW9uYXJ5KTtcblxuICBASW5wdXQoKSByZXF1aXJlU3F1YXJlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHZhbHVlITogc3RyaW5nO1xuICBASW5wdXQoKSBzZXQgbGFiZWxzKGQ6IElEaWN0aW9uYXJ5Rm9yRWRpdG9yKSB7XG4gICAgdGhpcy5kaWN0aW9uYXJ5ID0gT2JqZWN0LmFzc2lnbih0aGlzLmRpY3Rpb25hcnksIGQpO1xuICAgIHRoaXMuZmlsdGVyUHJlc2V0ID0gZmlsdGVyUHJlc2V0KHRoaXMuZGljdGlvbmFyeSk7XG4gIH1cblxuICBAVmlld0NoaWxkKCdpbWFnZUVkaXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIGVkaXRvclJlZiE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoSW9uQ29udGVudCkgaW9uQ29udGVudCE6IHtcbiAgICBlbDogSW9uQ29udGVudCAmIEhUTUxFbGVtZW50O1xuICB9O1xuXG4gICRmaWx0ZXJzID0gc2lnbmFsPElGaWx0ZXJbXT4oW10pO1xuICAkZm9vdGVyTWVudSA9IHNpZ25hbDwnZmlsdGVyJyB8ICdtZW51JyB8ICdjcm9wJyB8ICdicmlnaHRuZXNzJz4oJ21lbnUnKTtcbiAgJGN1cnJlbnRDcm9wID0gc2lnbmFsPCdjb3ZlcicgfCAnMTYvOScgfCAnMScgfCAnYXV0byc+KCdjb3ZlcicpO1xuICAkY3VycmVudFJvdGF0ZSA9IHNpZ25hbDxudW1iZXI+KDApO1xuICAkcGhvdG9Dcm9wID0gc2lnbmFsPElTaXplPih7XG4gICAgd2lkdGg6IDAsXG4gICAgaGVpZ2h0OiAwLFxuICB9KTtcbiAgJGlzQ3JvcHBlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBmb290ZXJNZW51JCA9IHRvT2JzZXJ2YWJsZSh0aGlzLiRmb290ZXJNZW51KTtcbiAgcHJpdmF0ZSAkYWRvcHRGaWx0ZXIgPSBzaWduYWw8SUZpbHRlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBlZGl0b3JJbnN0YW5jZSE6IEltYWdlRWRpdG9yO1xuICBwcml2YXRlIGluaXRTdWJzY3JpcHRpb24kOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlckltYWdlU2l6ZSA9IDI0MDtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlID0gaW5qZWN0KEhlbHBlclNlcnZpY2UpO1xuXG4gIG1vZGFsQ3RybCA9IGluamVjdChNb2RhbENvbnRyb2xsZXIpO1xuXG4gIHByaXZhdGUgY2FudmFzQ29udGFpbmVyT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zTGlzdDogTXV0YXRpb25SZWNvcmRbXSkgPT4ge1xuICAgIGlmIChtdXRhdGlvbnNMaXN0LmZpbmQoKG11dGF0aW9uKSA9PiBtdXRhdGlvbi50eXBlID09PSAnYXR0cmlidXRlcycgJiYgbXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ3N0eWxlJykpIHtcbiAgICAgIC8vIENvdmVyIHRoZSBpbWFnZSBlZGl0b3Igd2l0aCB0aGUgcGFyZW50IGVsZW1lbnRcbiAgICAgIHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluV2lkdGggPSBtdXRhdGlvbnNMaXN0WzBdLnRhcmdldC5wYXJlbnRFbGVtZW50IS5zdHlsZS5tYXhXaWR0aDtcbiAgICAgIHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0ID0gbXV0YXRpb25zTGlzdFswXS50YXJnZXQucGFyZW50RWxlbWVudCEuc3R5bGUubWF4SGVpZ2h0O1xuXG4gICAgICB0aGlzLiRwaG90b0Nyb3Auc2V0KHtcbiAgICAgICAgd2lkdGg6IG11dGF0aW9uc0xpc3RbMF0udGFyZ2V0LnBhcmVudEVsZW1lbnQhLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpIS53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBtdXRhdGlvbnNMaXN0WzBdLnRhcmdldC5wYXJlbnRFbGVtZW50IS5xdWVyeVNlbGVjdG9yKCdjYW52YXMnKSEuaGVpZ2h0LFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNlcnZpY2UuaW5pdGlhbGl6ZUVkaXRvckljb25zKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRTdWJzY3JpcHRpb24kLnB1c2goXG4gICAgICB0aGlzLmZvb3Rlck1lbnUkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnZmlsdGVyJykge1xuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZpbHRlck1lbnUoKS50aGVuKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSAnY3JvcCcpIHtcbiAgICAgICAgICB0aGlzLmVkaXRvckluc3RhbmNlLnN0YXJ0RHJhd2luZ01vZGUoJ0NST1BQRVInKTtcbiAgICAgICAgICB0aGlzLmNoYW5nZUNyb3AodGhpcy5yZXF1aXJlU3F1YXJlID8gJzEnIDogJ2NvdmVyJyk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmluaXRTdWJzY3JpcHRpb24kLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgYXN5bmMgaW9uVmlld0RpZEVudGVyKCkge1xuICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UgPSBuZXcgSW1hZ2VFZGl0b3IodGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudCwge1xuICAgICAgY3NzTWF4V2lkdGg6IHRoaXMuaW9uQ29udGVudC5lbC5jbGllbnRXaWR0aCAtIDMyLFxuICAgICAgY3NzTWF4SGVpZ2h0OiB0aGlzLmlvbkNvbnRlbnQuZWwuY2xpZW50SGVpZ2h0IC0gMzIsXG4gICAgfSk7XG4gICAgdGhpcy5zZXJ2aWNlLndhaXRUb0ZpbmREb20odGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudCwgJy50dWktaW1hZ2UtZWRpdG9yLWNhbnZhcy1jb250YWluZXInKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuY2FudmFzQ29udGFpbmVyT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50dWktaW1hZ2UtZWRpdG9yLWNhbnZhcy1jb250YWluZXInKSwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBjaGlsZExpc3Q6IGZhbHNlLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IGZldGNoKHRoaXMudmFsdWUpLnRoZW4oKHJlcykgPT4gcmVzLmJsb2IoKSk7XG4gICAgYXdhaXQgdGhpcy5lZGl0b3JJbnN0YW5jZS5sb2FkSW1hZ2VGcm9tRmlsZShuZXcgRmlsZShbYmxvYl0sICdkYXRhLnBuZycsIHsgdHlwZTogYmxvYi50eXBlIH0pKTtcbiAgICB0aGlzLiRmb290ZXJNZW51LnNldCh0aGlzLnJlcXVpcmVTcXVhcmUgPyAnY3JvcCcgOiAnbWVudScpO1xuICB9XG5cbiAgaW9uVmlld0RpZExlYXZlKCkge1xuICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UuZGVzdHJveSgpO1xuICAgIHRoaXMuY2FudmFzQ29udGFpbmVyT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgY2hhbmdlQ3JvcChjcm9wOiAnY292ZXInIHwgJzE2LzknIHwgJzEnIHwgJ2F1dG8nKSB7XG4gICAgY29uc3QgcmVjdCA9IGNyb3AgPT09ICdjb3ZlcicgPyB0aGlzLiRwaG90b0Nyb3AoKS53aWR0aCAvIHRoaXMuJHBob3RvQ3JvcCgpLmhlaWdodCA6IGNyb3AgPT09ICcxNi85JyA/IDE2IC8gOSA6IDE7XG4gICAgdGhpcy5lZGl0b3JJbnN0YW5jZS5zZXRDcm9wem9uZVJlY3QoY3JvcCAhPT0gJ2F1dG8nID8gcmVjdCA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy4kY3VycmVudENyb3Auc2V0KGNyb3ApO1xuICB9XG5cbiAgYXN5bmMgcm90YXRlKCkge1xuICAgIHRoaXMuZWRpdG9ySW5zdGFuY2Uuc3RvcERyYXdpbmdNb2RlKCk7XG4gICAgYXdhaXQgdGhpcy5lZGl0b3JJbnN0YW5jZS5yb3RhdGUoOTApO1xuICAgIHRoaXMuJGN1cnJlbnRSb3RhdGUudXBkYXRlKCh2YWx1ZSkgPT4gdmFsdWUgKyA5MCk7XG4gICAgdGhpcy5lZGl0b3JJbnN0YW5jZS5zdGFydERyYXdpbmdNb2RlKCdDUk9QUEVSJyk7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuY2hhbmdlQ3JvcCh0aGlzLiRjdXJyZW50Q3JvcCgpKSk7XG4gIH1cblxuICBhc3luYyBjbG9zZUNyb3AodHlwZTogJ2NhbmNlbCcgfCAnYXBwbHknKSB7XG4gICAgaWYgKHRoaXMuJGZvb3Rlck1lbnUoKSA9PT0gJ2Nyb3AnKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ2NhbmNlbCcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5lZGl0b3JJbnN0YW5jZS5yb3RhdGUodGhpcy4kY3VycmVudFJvdGF0ZSgpICogLTEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5lZGl0b3JJbnN0YW5jZS5jcm9wKHRoaXMuZWRpdG9ySW5zdGFuY2UuZ2V0Q3JvcHpvbmVSZWN0KCkpO1xuICAgICAgICB0aGlzLiRpc0Nyb3BwZWQuc2V0KHRydWUpO1xuICAgICAgfVxuICAgICAgdGhpcy4kY3VycmVudFJvdGF0ZS5zZXQoMCk7XG4gICAgICB0aGlzLiRjdXJyZW50Q3JvcC5zZXQoJ2NvdmVyJyk7XG4gICAgICB0aGlzLmVkaXRvckluc3RhbmNlLnN0b3BEcmF3aW5nTW9kZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4kZm9vdGVyTWVudSgpID09PSAnYnJpZ2h0bmVzcycpIHtcbiAgICAgIGlmICh0eXBlID09PSAnY2FuY2VsJyAmJiB0aGlzLmVkaXRvckluc3RhbmNlLmhhc0ZpbHRlcignYnJpZ2h0bmVzcycpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZWRpdG9ySW5zdGFuY2UucmVtb3ZlRmlsdGVyKCdicmlnaHRuZXNzJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuJGZvb3Rlck1lbnUuc2V0KCdtZW51Jyk7XG4gIH1cblxuICBhc3luYyBjaGFuZ2VSYW5nZShldmVudDogUmFuZ2VDdXN0b21FdmVudCkge1xuICAgIGlmICh0aGlzLmVkaXRvckluc3RhbmNlLmhhc0ZpbHRlcignYnJpZ2h0bmVzcycpKSB7XG4gICAgICBhd2FpdCB0aGlzLmVkaXRvckluc3RhbmNlLnJlbW92ZUZpbHRlcignYnJpZ2h0bmVzcycpO1xuICAgIH1cbiAgICB0aGlzLmVkaXRvckluc3RhbmNlLmFwcGx5RmlsdGVyKCdicmlnaHRuZXNzJywge1xuICAgICAgYnJpZ2h0bmVzczogTnVtYmVyKGV2ZW50LmRldGFpbC52YWx1ZSkgLyAyNTUsXG4gICAgfSk7XG4gIH1cblxuICBpbWFnZVNhdmUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmVkaXRvckluc3RhbmNlLnRvRGF0YVVSTCgpO1xuICAgIHRoaXMubW9kYWxDdHJsLmRpc21pc3MoeyB2YWx1ZSB9IGFzIElQaG90b0VkaXRvckRpc21pc3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplRmlsdGVyTWVudSgpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBJRmlsdGVyW10gPSBbXTtcblxuICAgIGNvbnN0IGRlZmF1bHRJbnN0YW5jZSA9IG5ldyBJbWFnZUVkaXRvcihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwge1xuICAgICAgY3NzTWF4V2lkdGg6IHRoaXMuZmlsdGVySW1hZ2VTaXplLFxuICAgICAgY3NzTWF4SGVpZ2h0OiAodGhpcy4kcGhvdG9Dcm9wKCkuaGVpZ2h0ICogdGhpcy5maWx0ZXJJbWFnZVNpemUpIC8gdGhpcy4kcGhvdG9Dcm9wKCkud2lkdGgsXG4gICAgfSk7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IGZldGNoKFxuICAgICAgdGhpcy5lZGl0b3JJbnN0YW5jZS50b0RhdGFVUkwoe1xuICAgICAgICBtdWx0aXBsaWVyOiB0aGlzLmZpbHRlckltYWdlU2l6ZSAvIHRoaXMuJHBob3RvQ3JvcCgpLndpZHRoLFxuICAgICAgfSksXG4gICAgKS50aGVuKChyZXMpID0+IHJlcy5ibG9iKCkpO1xuICAgIGF3YWl0IGRlZmF1bHRJbnN0YW5jZS5sb2FkSW1hZ2VGcm9tRmlsZShuZXcgRmlsZShbYmxvYl0sICdkZWZhdWx0SW5zdGFuY2UucG5nJywgeyB0eXBlOiBibG9iLnR5cGUgfSkpO1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgdGhpcy5maWx0ZXJQcmVzZXQpIHtcbiAgICAgIGlmIChmaWx0ZXIudHlwZSAhPT0gJ0RlZmF1bHQnKSB7XG4gICAgICAgIGF3YWl0IGRlZmF1bHRJbnN0YW5jZS5hcHBseUZpbHRlcihmaWx0ZXIudHlwZSwgZmlsdGVyLm9wdGlvbik7XG4gICAgICB9XG4gICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICBuYW1lOiBmaWx0ZXIubmFtZSxcbiAgICAgICAgdHlwZTogZmlsdGVyLnR5cGUsXG4gICAgICAgIG9wdGlvbjogZmlsdGVyLm9wdGlvbixcbiAgICAgICAgZGF0YTogZGVmYXVsdEluc3RhbmNlLnRvRGF0YVVSTCgpLFxuICAgICAgICB3aWR0aDogdGhpcy5maWx0ZXJJbWFnZVNpemUsXG4gICAgICAgIGhlaWdodDogKHRoaXMuJHBob3RvQ3JvcCgpLmhlaWdodCAqIHRoaXMuZmlsdGVySW1hZ2VTaXplKSAvIHRoaXMuJHBob3RvQ3JvcCgpLndpZHRoLFxuICAgICAgfSk7XG4gICAgICBpZiAoZmlsdGVyLnR5cGUgIT09ICdEZWZhdWx0Jykge1xuICAgICAgICBhd2FpdCBkZWZhdWx0SW5zdGFuY2UucmVtb3ZlRmlsdGVyKGZpbHRlci50eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy4kZmlsdGVycy5zZXQoZmlsdGVycyk7XG4gICAgZGVmYXVsdEluc3RhbmNlLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGFzeW5jIGZpbHRlckltYWdlKGZpbHRlcjogSUZpbHRlcikge1xuICAgIGlmICh0aGlzLiRhZG9wdEZpbHRlcigpKSB7XG4gICAgICBhd2FpdCB0aGlzLmVkaXRvckluc3RhbmNlLnJlbW92ZUZpbHRlcih0aGlzLiRhZG9wdEZpbHRlcigpIS50eXBlKTtcbiAgICB9XG4gICAgaWYgKGZpbHRlci50eXBlID09PSAnRGVmYXVsdCcpIHtcbiAgICAgIHRoaXMuJGFkb3B0RmlsdGVyLnNldCh1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmVkaXRvckluc3RhbmNlLmFwcGx5RmlsdGVyKGZpbHRlci50eXBlLCBmaWx0ZXIub3B0aW9uKTtcbiAgICB0aGlzLiRhZG9wdEZpbHRlci5zZXQoZmlsdGVyKTtcbiAgfVxufVxuIiwiPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhcj5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCJcbiAgICAgID48aW9uLWJ1dHRvbiAoY2xpY2spPVwibW9kYWxDdHJsLmRpc21pc3MoKVwiPjxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPjwvaW9uLWJ1dHRvblxuICAgID48L2lvbi1idXR0b25zPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICA8aW9uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInBob3RvLWVkaXRvci1wcmltYXJ5XCJcbiAgICAgICAgZmlsbD1cIm91dGxpbmVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIVsnbWVudScsICdmaWx0ZXInXS5pbmNsdWRlcygkZm9vdGVyTWVudSgpKVwiXG4gICAgICAgIChjbGljayk9XCJpbWFnZVNhdmUoKVwiXG4gICAgICA+XG4gICAgICAgIHt7IGRpY3Rpb25hcnkuc2F2ZSB9fVxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCIgW3Njcm9sbFldPVwiZmFsc2VcIj5cbiAgPGRpdiAjaW1hZ2VFZGl0b3I+PC9kaXY+XG48L2lvbi1jb250ZW50PlxuPGlvbi1mb290ZXI+XG4gIDxpb24tdG9vbGJhcj5cbiAgICBAaWYgKHRoaXMuJGZvb3Rlck1lbnUoKSA9PT0gJ21lbnUnKSB7XG4gICAgICA8YXNpZGUgY2xhc3M9XCJpb24tanVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCIkZm9vdGVyTWVudS5zZXQoJ2Nyb3AnKVwiPlxuICAgICAgICAgIDxpb24tdGV4dD57eyBkaWN0aW9uYXJ5LmNyb3AgfX08L2lvbi10ZXh0PlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY3JvcC1vdXRsaW5lXCIgc2l6ZT1cImxhcmdlXCI+PC9pb24taWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cIiRmb290ZXJNZW51LnNldCgnZmlsdGVyJylcIj5cbiAgICAgICAgICA8aW9uLXRleHQ+e3sgZGljdGlvbmFyeS5maWx0ZXIgfX08L2lvbi10ZXh0PlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY29sb3ItZmlsdGVyLW91dGxpbmVcIiBzaXplPVwibGFyZ2VcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiJGZvb3Rlck1lbnUuc2V0KCdicmlnaHRuZXNzJylcIj5cbiAgICAgICAgICA8aW9uLXRleHQ+e3sgZGljdGlvbmFyeS5icmlnaHRuZXNzIH19PC9pb24tdGV4dD5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInN1bm55LW91dGxpbmVcIiBzaXplPVwibGFyZ2VcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvYXNpZGU+XG4gICAgfVxuXG4gICAgQGlmICh0aGlzLiRmb290ZXJNZW51KCkgPT09ICdmaWx0ZXInKSB7XG4gICAgICA8YXNpZGU+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgJGZpbHRlcnMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImZpbHRlckltYWdlKGl0ZW0pXCI+XG4gICAgICAgICAgICA8aW9uLXRleHQ+e3sgaXRlbS5uYW1lIH19PC9pb24tdGV4dD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW1hZ2UtZmlsdGVyLWJveFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cIid1cmwoJyArIGl0ZW0uZGF0YSArICcpJ1wiPjwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9hc2lkZT5cbiAgICB9XG5cbiAgICBAaWYgKHRoaXMuJGZvb3Rlck1lbnUoKSA9PT0gJ2Nyb3AnICYmICFyZXF1aXJlU3F1YXJlKSB7XG4gICAgICA8aW9uLWJ1dHRvbnMgY2xhc3M9XCJpb24tanVzdGlmeS1jb250ZW50LWNlbnRlciBzdWJtZW51LWljb24tYnV0dG9uc1wiPlxuICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiY2hhbmdlQ3JvcCgnY292ZXInKVwiIFtjb2xvcl09XCIkY3VycmVudENyb3AoKSA9PT0gJ2NvdmVyJyA/ICdzdWNjZXNzJyA6IHVuZGVmaW5lZFwiPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiZXhwYW5kLW91dGxpbmVcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiY2hhbmdlQ3JvcCgnMTYvOScpXCIgW2NvbG9yXT1cIiRjdXJyZW50Q3JvcCgpID09PSAnMTYvOScgPyAnc3VjY2VzcycgOiB1bmRlZmluZWRcIj5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRhYmxldC1sYW5kc2NhcGUtb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIiBzdHlsZT1cInRyYW5zZm9ybTogc2NhbGUoMSwgMC44KVwiPjwvaW9uLWljb24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImNoYW5nZUNyb3AoJzEnKVwiIFtjb2xvcl09XCIkY3VycmVudENyb3AoKSA9PT0gJzEnID8gJ3N1Y2Nlc3MnIDogdW5kZWZpbmVkXCI+XG4gICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJzcXVhcmUtb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJjaGFuZ2VDcm9wKCdhdXRvJylcIiBbY29sb3JdPVwiJGN1cnJlbnRDcm9wKCkgPT09ICdhdXRvJyA/ICdzdWNjZXNzJyA6IHVuZGVmaW5lZFwiPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY3JvcC1vdXRsaW5lXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJvdGF0ZSgpXCI+PGlvbi1pY29uIG5hbWU9XCJyZWZyZXNoLW91dGxpbmVcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj48L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1idXR0b25zPlxuICAgIH1cblxuICAgIEBpZiAoWydicmlnaHRuZXNzJ10uaW5jbHVkZXModGhpcy4kZm9vdGVyTWVudSgpKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImlvbi1wYWRkaW5nIGlvbi1tYXJnaW5cIj5cbiAgICAgICAgPGlvbi1yYW5nZSBbcGluXT1cInRydWVcIiBbbWluXT1cIi0xMDBcIiBbbWF4XT1cIjEwMFwiIChpb25DaGFuZ2UpPVwiY2hhbmdlUmFuZ2UoJGFueSgkZXZlbnQpKVwiPjwvaW9uLXJhbmdlPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2lvbi10b29sYmFyPlxuICBAaWYgKHRoaXMuJGZvb3Rlck1lbnUoKSAhPT0gJ21lbnUnKSB7XG4gICAgPGlvbi10b29sYmFyIG1vZGU9XCJtZFwiPlxuICAgICAgQGlmICh0aGlzLiRmb290ZXJNZW51KCkgPT09ICdmaWx0ZXInKSB7XG4gICAgICAgIDxpb24tYnV0dG9ucyBjbGFzcz1cImlvbi1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgc3R5bGU9XCJtYXJnaW46IDAgOHB4XCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBzaGFwZT1cInJvdW5kXCIgKGNsaWNrKT1cInRoaXMuJGZvb3Rlck1lbnUuc2V0KCdtZW51JylcIj7miLvjgos8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiIHN0eWxlPVwibWluLXdpZHRoOiA2MHB4XCI+XG4gICAgICAgICAgQGlmICghcmVxdWlyZVNxdWFyZSB8fCAkaXNDcm9wcGVkKCkpIHtcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJjbG9zZUNyb3AoJ2NhbmNlbCcpXCI+PGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+PC9pb24tYnV0dG9uPlxuICAgICAgICAgIH08L2lvbi1idXR0b25zXG4gICAgICAgID48aW9uLXRleHQgY2xhc3M9XCJmb290ZXItdGl0bGVcIj5cbiAgICAgICAgICBAaWYgKCRmb290ZXJNZW51KCkgPT09ICdjcm9wJykge1xuICAgICAgICAgICAge3sgZGljdGlvbmFyeS5jcm9wIH19XG4gICAgICAgICAgfSBAZWxzZSBpZiAoJGZvb3Rlck1lbnUoKSA9PT0gJ2JyaWdodG5lc3MnKSB7XG4gICAgICAgICAgICB7eyBkaWN0aW9uYXJ5LmJyaWdodG5lc3MgfX1cbiAgICAgICAgICB9PC9pb24tdGV4dFxuICAgICAgICA+PGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIlxuICAgICAgICAgID48aW9uLWJ1dHRvbiAoY2xpY2spPVwiY2xvc2VDcm9wKCdhcHBseScpXCJcbiAgICAgICAgICAgID48aW9uLWljb24gbmFtZT1cImNoZWNrbWFyay1vdXRsaW5lXCIgY29sb3I9XCJwaG90by1lZGl0b3Itc3VjY2Vzc1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPjwvaW9uLWJ1dHRvblxuICAgICAgICA+PC9pb24tYnV0dG9ucz5cbiAgICAgIH1cbiAgICA8L2lvbi10b29sYmFyPlxuICB9XG48L2lvbi1mb290ZXI+XG4iXX0=
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, inject, Input, ViewChild } from '@angular/core';
|
|
2
|
-
import { IonicSlides, ModalController } from '@ionic/angular/standalone';
|
|
3
|
-
import { Navigation, Zoom } from 'swiper/modules';
|
|
4
|
-
import { fromEvent, throttleTime, withLatestFrom, zipWith } from 'rxjs';
|
|
5
|
-
import { NgFor, NgIf } from '@angular/common';
|
|
6
|
-
import { ionComponents } from '../ion-components';
|
|
7
|
-
import { HelperService } from '../service/helper.service';
|
|
8
|
-
import { register } from 'swiper/element/bundle';
|
|
9
|
-
import { dictionaryForViewer } from '../dictionaries';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@ionic/angular/standalone";
|
|
12
|
-
export class PhotoViewerPage {
|
|
13
|
-
set labels(d) {
|
|
14
|
-
this.dictionary = Object.assign(this.dictionary, d);
|
|
15
|
-
}
|
|
16
|
-
constructor() {
|
|
17
|
-
this.dictionary = dictionaryForViewer();
|
|
18
|
-
this.imageUrls = [];
|
|
19
|
-
this.index = 0;
|
|
20
|
-
this.isCircle = false;
|
|
21
|
-
this.enableDelete = false;
|
|
22
|
-
this.enableFooterSafeArea = false;
|
|
23
|
-
this.modalCtrl = inject(ModalController);
|
|
24
|
-
this.el = inject(ElementRef);
|
|
25
|
-
this.service = inject(HelperService);
|
|
26
|
-
register();
|
|
27
|
-
this.service.initializeViewerIcons();
|
|
28
|
-
}
|
|
29
|
-
async ngOnInit() {
|
|
30
|
-
this.service.waitToFindDom(this.el.nativeElement, 'swiper-container').then(() => {
|
|
31
|
-
Object.assign(this.swiper.nativeElement, {
|
|
32
|
-
modules: [Navigation, Zoom, IonicSlides],
|
|
33
|
-
initialSlide: this.index,
|
|
34
|
-
slidesPerView: 1,
|
|
35
|
-
pagination: {
|
|
36
|
-
enabled: true,
|
|
37
|
-
clickable: true,
|
|
38
|
-
},
|
|
39
|
-
zoom: true,
|
|
40
|
-
});
|
|
41
|
-
this.swiper.nativeElement.initialize();
|
|
42
|
-
this.swiper.nativeElement.swiper.zoom.enable();
|
|
43
|
-
this.swiper.nativeElement.swiper.activeIndex = this.index;
|
|
44
|
-
this.swiper.nativeElement.swiper.update();
|
|
45
|
-
});
|
|
46
|
-
this.watchSwipe$ = fromEvent(this.el.nativeElement, 'touchstart')
|
|
47
|
-
.pipe(zipWith(fromEvent(this.el.nativeElement, 'touchend').pipe(withLatestFrom(fromEvent(this.el.nativeElement, 'touchmove')))), throttleTime(1))
|
|
48
|
-
.subscribe(([touchstart, [_, touchmove]]) => {
|
|
49
|
-
const touchstartClientX = touchstart.touches ? touchstart.touches[0].clientX : touchstart.detail[1].clientX;
|
|
50
|
-
const touchmoveClientX = touchmove.touches ? touchmove.touches[0].clientX : touchmove.detail[1].clientX;
|
|
51
|
-
const touchstartClientY = touchstart.touches ? touchstart.touches[0].clientY : touchstart.detail[1].clientY;
|
|
52
|
-
const touchmoveClientY = touchmove.touches ? touchmove.touches[0].clientY : touchmove.detail[1].clientY;
|
|
53
|
-
const xDiff = touchstartClientX - touchmoveClientX;
|
|
54
|
-
const yDiff = touchstartClientY - touchmoveClientY;
|
|
55
|
-
const slides = this.swiper.nativeElement.querySelectorAll('swiper-slide');
|
|
56
|
-
const isZoomed = Array.from(slides).find((slide) => {
|
|
57
|
-
return ['swiper-slide-zoomed', 'swiper-slide-active'].every((c) => slide.classList.contains(c));
|
|
58
|
-
});
|
|
59
|
-
const threshold = touchmove.touches ? -50 : -5;
|
|
60
|
-
if (!isZoomed && Math.abs(xDiff) < Math.abs(threshold) && yDiff < threshold && touchstart.timeStamp <= touchmove.timeStamp) {
|
|
61
|
-
this.watchSwipe$.unsubscribe();
|
|
62
|
-
this.modalCtrl.dismiss();
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
ngOnDestroy() {
|
|
67
|
-
if (this.watchSwipe$ && !this.watchSwipe$.closed) {
|
|
68
|
-
this.watchSwipe$.unsubscribe();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
remove() {
|
|
72
|
-
this.modalCtrl.dismiss({
|
|
73
|
-
delete: {
|
|
74
|
-
index: this.swiper.nativeElement.swiper.activeIndex,
|
|
75
|
-
value: this.imageUrls[this.swiper.nativeElement.swiper.activeIndex],
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: PhotoViewerPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
80
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: PhotoViewerPage, isStandalone: true, selector: "app-photo-image", inputs: { imageUrls: "imageUrls", index: "index", isCircle: "isCircle", enableDelete: "enableDelete", enableFooterSafeArea: "enableFooterSafeArea", labels: "labels" }, providers: [HelperService], viewQueries: [{ propertyName: "swiper", first: true, predicate: ["swiper"], descendants: true }], ngImport: i0, template: "<ion-header [translucent]=\"true\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"modalCtrl.dismiss()\" class=\"viewer-close-button\">\n <ion-icon name=\"close-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n @if (enableDelete) {\n <ion-buttons slot=\"end\">\n <ion-button color=\"photo-editor-danger\" fill=\"outline\" (click)=\"remove()\">{{ dictionary.delete }}</ion-button>\n </ion-buttons>\n }\n </ion-toolbar>\n</ion-header>\n\n<ion-content [fullscreen]=\"true\">\n <swiper-container #swiper>\n @for (url of imageUrls; track url) {\n <swiper-slide>\n <div class=\"swiper-zoom-container\"><img [src]=\"url\" alt=\"\" [class.circle]=\"isCircle\" /></div>\n </swiper-slide>\n }\n </swiper-container>\n</ion-content>\n\n@if (enableFooterSafeArea) {\n <!-- use for safe area-->\n <ion-footer>\n <ion-toolbar style=\"--border-width: 0; --min-height: 0\"></ion-toolbar>\n </ion-footer>\n}\n", styles: [":host{--editor-background: var(--ion-photo-editor-background, --ion-color-step-100, #2a2a2a);--editor-background-tint: var(--ion-photo-editor-background-tint, --ion-color-step-200, #414141);--editor-color: var(--ion-photo-editor-color, --ion-color-step-950, #f0f0f0);--editor-color-tint: var(--ion-photo-editor-color-tint, --ion-color-step-850, #dbdbdb);--ion-color-photo-editor-primary: var(--ion-photo-editor-primary, --ion-color-primary, #4d8dff);--ion-color-photo-editor-danger: var(--ion-photo-editor-danger, #f24c58);--ion-color-photo-editor-success: var(--ion-photo-editor-success, #2dd55b)}.ion-color-photo-editor-primary{--ion-color-base: var(--ion-color-photo-editor-primary)}.ion-color-photo-editor-danger{--ion-color-base: var(--ion-color-photo-editor-danger)}.ion-color-photo-editor-success{--ion-color-base: var(--ion-color-photo-editor-success)}ion-content,ion-toolbar,ion-header,ion-footer{background:var(--editor-background)!important;--background: var(--editor-background) !important}\n", "ion-button.viewer-close-button{--color: var(--editor-color) !important}img.circle{border-radius:50%;display:block;padding:16px}swiper-container{height:100%;max-height:100%}swiper-slide{height:100%;max-height:100%;display:flex;justify-content:center;align-items:center}swiper-slide img{display:block;object-fit:contain;max-width:100%;max-height:100%}\n"], dependencies: [{ kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }] }); }
|
|
81
|
-
}
|
|
82
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: PhotoViewerPage, decorators: [{
|
|
83
|
-
type: Component,
|
|
84
|
-
args: [{ selector: 'app-photo-image', standalone: true, imports: [NgFor, NgIf, ...ionComponents], schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [HelperService], template: "<ion-header [translucent]=\"true\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"modalCtrl.dismiss()\" class=\"viewer-close-button\">\n <ion-icon name=\"close-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n @if (enableDelete) {\n <ion-buttons slot=\"end\">\n <ion-button color=\"photo-editor-danger\" fill=\"outline\" (click)=\"remove()\">{{ dictionary.delete }}</ion-button>\n </ion-buttons>\n }\n </ion-toolbar>\n</ion-header>\n\n<ion-content [fullscreen]=\"true\">\n <swiper-container #swiper>\n @for (url of imageUrls; track url) {\n <swiper-slide>\n <div class=\"swiper-zoom-container\"><img [src]=\"url\" alt=\"\" [class.circle]=\"isCircle\" /></div>\n </swiper-slide>\n }\n </swiper-container>\n</ion-content>\n\n@if (enableFooterSafeArea) {\n <!-- use for safe area-->\n <ion-footer>\n <ion-toolbar style=\"--border-width: 0; --min-height: 0\"></ion-toolbar>\n </ion-footer>\n}\n", styles: [":host{--editor-background: var(--ion-photo-editor-background, --ion-color-step-100, #2a2a2a);--editor-background-tint: var(--ion-photo-editor-background-tint, --ion-color-step-200, #414141);--editor-color: var(--ion-photo-editor-color, --ion-color-step-950, #f0f0f0);--editor-color-tint: var(--ion-photo-editor-color-tint, --ion-color-step-850, #dbdbdb);--ion-color-photo-editor-primary: var(--ion-photo-editor-primary, --ion-color-primary, #4d8dff);--ion-color-photo-editor-danger: var(--ion-photo-editor-danger, #f24c58);--ion-color-photo-editor-success: var(--ion-photo-editor-success, #2dd55b)}.ion-color-photo-editor-primary{--ion-color-base: var(--ion-color-photo-editor-primary)}.ion-color-photo-editor-danger{--ion-color-base: var(--ion-color-photo-editor-danger)}.ion-color-photo-editor-success{--ion-color-base: var(--ion-color-photo-editor-success)}ion-content,ion-toolbar,ion-header,ion-footer{background:var(--editor-background)!important;--background: var(--editor-background) !important}\n", "ion-button.viewer-close-button{--color: var(--editor-color) !important}img.circle{border-radius:50%;display:block;padding:16px}swiper-container{height:100%;max-height:100%}swiper-slide{height:100%;max-height:100%;display:flex;justify-content:center;align-items:center}swiper-slide img{display:block;object-fit:contain;max-width:100%;max-height:100%}\n"] }]
|
|
85
|
-
}], ctorParameters: () => [], propDecorators: { imageUrls: [{
|
|
86
|
-
type: Input
|
|
87
|
-
}], index: [{
|
|
88
|
-
type: Input
|
|
89
|
-
}], isCircle: [{
|
|
90
|
-
type: Input
|
|
91
|
-
}], enableDelete: [{
|
|
92
|
-
type: Input
|
|
93
|
-
}], enableFooterSafeArea: [{
|
|
94
|
-
type: Input
|
|
95
|
-
}], labels: [{
|
|
96
|
-
type: Input
|
|
97
|
-
}], swiper: [{
|
|
98
|
-
type: ViewChild,
|
|
99
|
-
args: ['swiper']
|
|
100
|
-
}] } });
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG8tdmlld2VyLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waG90by1lZGl0b3Ivc3JjL2xpYi9wYWdlcy9waG90by12aWV3ZXIucGFnZS50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Bob3RvLWVkaXRvci9zcmMvbGliL3BhZ2VzL3Bob3RvLXZpZXdlci5wYWdlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFnQixZQUFZLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFXdEQsTUFBTSxPQUFPLGVBQWU7SUFRMUIsSUFBYSxNQUFNLENBQUMsQ0FBdUI7UUFDekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQVNEO1FBbEJVLGVBQVUs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LFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUNyQixNQUFNLEVBQUU7Z0JBQ04sS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxXQUFXO2dCQUNuRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO2FBQ3BFO1NBQ3FCLENBQUMsQ0FBQztJQUM1QixDQUFDOzhHQXpGVSxlQUFlO2tHQUFmLGVBQWUsc09BRmYsQ0FBQyxhQUFhLENBQUMsNEhDbkI1Qiw4L0JBK0JBOzsyRkRWYSxlQUFlO2tCQVQzQixTQUFTOytCQUNFLGlCQUFpQixjQUdmLElBQUksV0FDUCxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxhQUFhLENBQUMsV0FDL0IsQ0FBQyxzQkFBc0IsQ0FBQyxhQUN0QixDQUFDLGFBQWEsQ0FBQzt3REFLakIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDTyxNQUFNO3NCQUFsQixLQUFLO2dCQUllLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uaWNTbGlkZXMsIE1vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbiwgWm9vbSB9IGZyb20gJ3N3aXBlci9tb2R1bGVzJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uLCB0aHJvdHRsZVRpbWUsIHdpdGhMYXRlc3RGcm9tLCB6aXBXaXRoIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTd2lwZXJDb250YWluZXIgfSBmcm9tICdzd2lwZXIvZWxlbWVudCc7XG5pbXBvcnQgeyBpb25Db21wb25lbnRzIH0gZnJvbSAnLi4vaW9uLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSURpY3Rpb25hcnlGb3JWaWV3ZXIsIElQaG90b1ZpZXdlckRpc21pc3MgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gJ3N3aXBlci9lbGVtZW50L2J1bmRsZSc7XG5pbXBvcnQgeyBkaWN0aW9uYXJ5Rm9yVmlld2VyIH0gZnJvbSAnLi4vZGljdGlvbmFyaWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBob3RvLWltYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Bob3RvLXZpZXdlci5wYWdlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb3JlLnNjc3MnLCAnLi9waG90by12aWV3ZXIucGFnZS5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0ZvciwgTmdJZiwgLi4uaW9uQ29tcG9uZW50c10sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgcHJvdmlkZXJzOiBbSGVscGVyU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIFBob3RvVmlld2VyUGFnZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJvdGVjdGVkIGRpY3Rpb25hcnk6IElEaWN0aW9uYXJ5Rm9yVmlld2VyID0gZGljdGlvbmFyeUZvclZpZXdlcigpO1xuXG4gIEBJbnB1dCgpIGltYWdlVXJsczogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgaW5kZXg6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIGlzQ2lyY2xlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZURlbGV0ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBlbmFibGVGb290ZXJTYWZlQXJlYSA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgbGFiZWxzKGQ6IElEaWN0aW9uYXJ5Rm9yVmlld2VyKSB7XG4gICAgdGhpcy5kaWN0aW9uYXJ5ID0gT2JqZWN0LmFzc2lnbih0aGlzLmRpY3Rpb25hcnksIGQpO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnc3dpcGVyJykgc3dpcGVyITogRWxlbWVudFJlZjxTd2lwZXJDb250YWluZXI+O1xuXG4gIHdhdGNoU3dpcGUkITogU3Vic2NyaXB0aW9uO1xuICByZWFkb25seSBtb2RhbEN0cmwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlID0gaW5qZWN0KEhlbHBlclNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHJlZ2lzdGVyKCk7XG4gICAgdGhpcy5zZXJ2aWNlLmluaXRpYWxpemVWaWV3ZXJJY29ucygpO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLndhaXRUb0ZpbmREb20odGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnc3dpcGVyLWNvbnRhaW5lcicpLnRoZW4oKCkgPT4ge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnN3aXBlci5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgIG1vZHVsZXM6IFtOYXZpZ2F0aW9uLCBab29tLCBJb25pY1NsaWRlc10sXG4gICAgICAgIGluaXRpYWxTbGlkZTogdGhpcy5pbmRleCxcbiAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgY2xpY2thYmxlOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB6b29tOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnN3aXBlci5uYXRpdmVFbGVtZW50LmluaXRpYWxpemUoKTtcbiAgICAgIHRoaXMuc3dpcGVyLm5hdGl2ZUVsZW1lbnQuc3dpcGVyLnpvb20uZW5hYmxlKCk7XG5cbiAgICAgIHRoaXMuc3dpcGVyLm5hdGl2ZUVsZW1lbnQuc3dpcGVyLmFjdGl2ZUluZGV4ID0gdGhpcy5pbmRleDtcbiAgICAgIHRoaXMuc3dpcGVyLm5hdGl2ZUVsZW1lbnQuc3dpcGVyLnVwZGF0ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy53YXRjaFN3aXBlJCA9IGZyb21FdmVudDxUb3VjaEV2ZW50Pih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd0b3VjaHN0YXJ0JylcbiAgICAgIC5waXBlKFxuICAgICAgICB6aXBXaXRoKFxuICAgICAgICAgIGZyb21FdmVudDxUb3VjaEV2ZW50Pih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd0b3VjaGVuZCcpLnBpcGUoXG4gICAgICAgICAgICB3aXRoTGF0ZXN0RnJvbShmcm9tRXZlbnQ8VG91Y2hFdmVudD4odGhpcy5lbC5uYXRpdmVFbGVtZW50LCAndG91Y2htb3ZlJykpLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICAgIHRocm90dGxlVGltZSgxKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFt0b3VjaHN0YXJ0LCBbXywgdG91Y2htb3ZlXV0pID0+IHtcbiAgICAgICAgY29uc3QgdG91Y2hzdGFydENsaWVudFggPSB0b3VjaHN0YXJ0LnRvdWNoZXMgPyB0b3VjaHN0YXJ0LnRvdWNoZXNbMF0uY2xpZW50WCA6ICh0b3VjaHN0YXJ0IGFzIGFueSkuZGV0YWlsWzFdLmNsaWVudFg7XG4gICAgICAgIGNvbnN0IHRvdWNobW92ZUNsaWVudFggPSB0b3VjaG1vdmUudG91Y2hlcyA/IHRvdWNobW92ZS50b3VjaGVzWzBdLmNsaWVudFggOiAodG91Y2htb3ZlIGFzIGFueSkuZGV0YWlsWzFdLmNsaWVudFg7XG5cbiAgICAgICAgY29uc3QgdG91Y2hzdGFydENsaWVudFkgPSB0b3VjaHN0YXJ0LnRvdWNoZXMgPyB0b3VjaHN0YXJ0LnRvdWNoZXNbMF0uY2xpZW50WSA6ICh0b3VjaHN0YXJ0IGFzIGFueSkuZGV0YWlsWzFdLmNsaWVudFk7XG4gICAgICAgIGNvbnN0IHRvdWNobW92ZUNsaWVudFkgPSB0b3VjaG1vdmUudG91Y2hlcyA/IHRvdWNobW92ZS50b3VjaGVzWzBdLmNsaWVudFkgOiAodG91Y2htb3ZlIGFzIGFueSkuZGV0YWlsWzFdLmNsaWVudFk7XG5cbiAgICAgICAgY29uc3QgeERpZmYgPSB0b3VjaHN0YXJ0Q2xpZW50WCAtIHRvdWNobW92ZUNsaWVudFg7XG4gICAgICAgIGNvbnN0IHlEaWZmID0gdG91Y2hzdGFydENsaWVudFkgLSB0b3VjaG1vdmVDbGllbnRZO1xuXG4gICAgICAgIGNvbnN0IHNsaWRlcyA9ICh0aGlzLnN3aXBlciBhcyBhbnkpLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3dpcGVyLXNsaWRlJykgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgICAgY29uc3QgaXNab29tZWQgPSBBcnJheS5mcm9tKHNsaWRlcykuZmluZCgoc2xpZGU6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFsnc3dpcGVyLXNsaWRlLXpvb21lZCcsICdzd2lwZXItc2xpZGUtYWN0aXZlJ10uZXZlcnkoKGMpID0+IHNsaWRlLmNsYXNzTGlzdC5jb250YWlucyhjKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IHRvdWNobW92ZS50b3VjaGVzID8gLTUwIDogLTU7XG5cbiAgICAgICAgaWYgKCFpc1pvb21lZCAmJiBNYXRoLmFicyh4RGlmZikgPCBNYXRoLmFicyh0aHJlc2hvbGQpICYmIHlEaWZmIDwgdGhyZXNob2xkICYmIHRvdWNoc3RhcnQudGltZVN0YW1wIDw9IHRvdWNobW92ZS50aW1lU3RhbXApIHtcbiAgICAgICAgICB0aGlzLndhdGNoU3dpcGUkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLndhdGNoU3dpcGUkICYmICF0aGlzLndhdGNoU3dpcGUkLmNsb3NlZCkge1xuICAgICAgdGhpcy53YXRjaFN3aXBlJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZSgpIHtcbiAgICB0aGlzLm1vZGFsQ3RybC5kaXNtaXNzKHtcbiAgICAgIGRlbGV0ZToge1xuICAgICAgICBpbmRleDogdGhpcy5zd2lwZXIubmF0aXZlRWxlbWVudC5zd2lwZXIuYWN0aXZlSW5kZXgsXG4gICAgICAgIHZhbHVlOiB0aGlzLmltYWdlVXJsc1t0aGlzLnN3aXBlci5uYXRpdmVFbGVtZW50LnN3aXBlci5hY3RpdmVJbmRleF0sXG4gICAgICB9LFxuICAgIH0gYXMgSVBob3RvVmlld2VyRGlzbWlzcyk7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyIFt0cmFuc2x1Y2VudF09XCJ0cnVlXCI+XG4gIDxpb24tdG9vbGJhcj5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwibW9kYWxDdHJsLmRpc21pc3MoKVwiIGNsYXNzPVwidmlld2VyLWNsb3NlLWJ1dHRvblwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuICAgIEBpZiAoZW5hYmxlRGVsZXRlKSB7XG4gICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cInBob3RvLWVkaXRvci1kYW5nZXJcIiBmaWxsPVwib3V0bGluZVwiIChjbGljayk9XCJyZW1vdmUoKVwiPnt7IGRpY3Rpb25hcnkuZGVsZXRlIH19PC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICB9XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudCBbZnVsbHNjcmVlbl09XCJ0cnVlXCI+XG4gIDxzd2lwZXItY29udGFpbmVyICNzd2lwZXI+XG4gICAgQGZvciAodXJsIG9mIGltYWdlVXJsczsgdHJhY2sgdXJsKSB7XG4gICAgICA8c3dpcGVyLXNsaWRlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3dpcGVyLXpvb20tY29udGFpbmVyXCI+PGltZyBbc3JjXT1cInVybFwiIGFsdD1cIlwiIFtjbGFzcy5jaXJjbGVdPVwiaXNDaXJjbGVcIiAvPjwvZGl2PlxuICAgICAgPC9zd2lwZXItc2xpZGU+XG4gICAgfVxuICA8L3N3aXBlci1jb250YWluZXI+XG48L2lvbi1jb250ZW50PlxuXG5AaWYgKGVuYWJsZUZvb3RlclNhZmVBcmVhKSB7XG4gIDwhLS0gdXNlIGZvciBzYWZlIGFyZWEtLT5cbiAgPGlvbi1mb290ZXI+XG4gICAgPGlvbi10b29sYmFyIHN0eWxlPVwiLS1ib3JkZXItd2lkdGg6IDA7IC0tbWluLWhlaWdodDogMFwiPjwvaW9uLXRvb2xiYXI+XG4gIDwvaW9uLWZvb3Rlcj5cbn1cbiJdfQ==
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export var PhotoEditorErrors;
|
|
2
|
-
(function (PhotoEditorErrors) {
|
|
3
|
-
PhotoEditorErrors["initialize"] = "input dom is not found";
|
|
4
|
-
PhotoEditorErrors["cancel"] = "user canceled";
|
|
5
|
-
PhotoEditorErrors["type"] = "upload file is not image.";
|
|
6
|
-
})(PhotoEditorErrors || (PhotoEditorErrors = {}));
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG9FZGl0b3JFcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9waG90by1lZGl0b3Ivc3JjL2xpYi9waG90b0VkaXRvckVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxpQkFJWDtBQUpELFdBQVksaUJBQWlCO0lBQzNCLDBEQUF1QyxDQUFBO0lBQ3ZDLDZDQUEwQixDQUFBO0lBQzFCLHVEQUFvQyxDQUFBO0FBQ3RDLENBQUMsRUFKVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBSTVCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gUGhvdG9FZGl0b3JFcnJvcnMge1xuICAnaW5pdGlhbGl6ZScgPSAnaW5wdXQgZG9tIGlzIG5vdCBmb3VuZCcsXG4gICdjYW5jZWwnID0gJ3VzZXIgY2FuY2VsZWQnLFxuICAndHlwZScgPSAndXBsb2FkIGZpbGUgaXMgbm90IGltYWdlLicsXG59XG4iXX0=
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { addIcons } from 'ionicons';
|
|
3
|
-
import { checkmarkOutline, closeOutline, colorFilterOutline, cropOutline, expandOutline, refreshOutline, removeOutline, send, squareOutline, sunnyOutline, tabletLandscapeOutline, } from 'ionicons/icons';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class HelperService {
|
|
6
|
-
constructor() { }
|
|
7
|
-
initializeViewerIcons() {
|
|
8
|
-
addIcons({
|
|
9
|
-
closeOutline,
|
|
10
|
-
removeOutline,
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
initializeEditorIcons() {
|
|
14
|
-
addIcons({
|
|
15
|
-
closeOutline,
|
|
16
|
-
send,
|
|
17
|
-
cropOutline,
|
|
18
|
-
colorFilterOutline,
|
|
19
|
-
sunnyOutline,
|
|
20
|
-
expandOutline,
|
|
21
|
-
tabletLandscapeOutline,
|
|
22
|
-
squareOutline,
|
|
23
|
-
refreshOutline,
|
|
24
|
-
checkmarkOutline,
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
waitToFindDom(nativeElement, selector) {
|
|
28
|
-
return new Promise((resolve) => {
|
|
29
|
-
const interval = setInterval(() => {
|
|
30
|
-
const find = nativeElement.querySelector(selector);
|
|
31
|
-
if (find) {
|
|
32
|
-
clearInterval(interval);
|
|
33
|
-
resolve();
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: HelperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
39
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: HelperService }); }
|
|
40
|
-
}
|
|
41
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: HelperService, decorators: [{
|
|
42
|
-
type: Injectable
|
|
43
|
-
}], ctorParameters: () => [] });
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9waG90by1lZGl0b3Ivc3JjL2xpYi9zZXJ2aWNlL2hlbHBlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLGFBQWEsRUFDYixjQUFjLEVBQ2QsYUFBYSxFQUNiLElBQUksRUFDSixhQUFhLEVBQ2IsWUFBWSxFQUNaLHNCQUFzQixHQUN2QixNQUFNLGdCQUFnQixDQUFDOztBQUd4QixNQUFNLE9BQU8sYUFBYTtJQUN4QixnQkFBZSxDQUFDO0lBRWhCLHFCQUFxQjtRQUNuQixRQUFRLENBQUM7WUFDUCxZQUFZO1lBQ1osYUFBYTtTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsUUFBUSxDQUFDO1lBQ1AsWUFBWTtZQUNaLElBQUk7WUFDSixXQUFXO1lBQ1gsa0JBQWtCO1lBQ2xCLFlBQVk7WUFDWixhQUFhO1lBQ2Isc0JBQXNCO1lBQ3RCLGFBQWE7WUFDYixjQUFjO1lBQ2QsZ0JBQWdCO1NBQ2pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsYUFBMEIsRUFBRSxRQUFnQjtRQUN4RCxPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDaEMsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDVCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hCLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0FuQ1UsYUFBYTtrSEFBYixhQUFhOzsyRkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBjaGVja21hcmtPdXRsaW5lLFxuICBjbG9zZU91dGxpbmUsXG4gIGNvbG9yRmlsdGVyT3V0bGluZSxcbiAgY3JvcE91dGxpbmUsXG4gIGV4cGFuZE91dGxpbmUsXG4gIHJlZnJlc2hPdXRsaW5lLFxuICByZW1vdmVPdXRsaW5lLFxuICBzZW5kLFxuICBzcXVhcmVPdXRsaW5lLFxuICBzdW5ueU91dGxpbmUsXG4gIHRhYmxldExhbmRzY2FwZU91dGxpbmUsXG59IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEhlbHBlclNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgaW5pdGlhbGl6ZVZpZXdlckljb25zKCk6IHZvaWQge1xuICAgIGFkZEljb25zKHtcbiAgICAgIGNsb3NlT3V0bGluZSxcbiAgICAgIHJlbW92ZU91dGxpbmUsXG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXplRWRpdG9ySWNvbnMoKTogdm9pZCB7XG4gICAgYWRkSWNvbnMoe1xuICAgICAgY2xvc2VPdXRsaW5lLFxuICAgICAgc2VuZCxcbiAgICAgIGNyb3BPdXRsaW5lLFxuICAgICAgY29sb3JGaWx0ZXJPdXRsaW5lLFxuICAgICAgc3VubnlPdXRsaW5lLFxuICAgICAgZXhwYW5kT3V0bGluZSxcbiAgICAgIHRhYmxldExhbmRzY2FwZU91dGxpbmUsXG4gICAgICBzcXVhcmVPdXRsaW5lLFxuICAgICAgcmVmcmVzaE91dGxpbmUsXG4gICAgICBjaGVja21hcmtPdXRsaW5lLFxuICAgIH0pO1xuICB9XG5cbiAgd2FpdFRvRmluZERvbShuYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudCwgc2VsZWN0b3I6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbmQgPSBuYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICBpZiAoZmluZCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|