@libs-ui/components-image-editor 0.2.30-6.1
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/README.md +254 -0
- package/defines/image-editor.define.d.ts +16 -0
- package/demo/image-editor-demo.component.d.ts +48 -0
- package/esm2022/defines/image-editor.define.mjs +89 -0
- package/esm2022/demo/image-editor-demo.component.mjs +154 -0
- package/esm2022/image-editor.component.mjs +781 -0
- package/esm2022/index.mjs +6 -0
- package/esm2022/interfaces/function-control-event.interface.mjs +2 -0
- package/esm2022/interfaces/image-editor.interface.mjs +2 -0
- package/esm2022/libs-ui-components-image-editor.mjs +5 -0
- package/esm2022/resize/resize.component.mjs +125 -0
- package/fesm2022/libs-ui-components-image-editor.mjs +1141 -0
- package/fesm2022/libs-ui-components-image-editor.mjs.map +1 -0
- package/image-editor.component.d.ts +117 -0
- package/index.d.ts +5 -0
- package/interfaces/function-control-event.interface.d.ts +4 -0
- package/interfaces/image-editor.interface.d.ts +52 -0
- package/package.json +35 -0
- package/resize/resize.component.d.ts +32 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './image-editor.component';
|
|
2
|
+
export * from './interfaces/image-editor.interface';
|
|
3
|
+
export * from './interfaces/function-control-event.interface';
|
|
4
|
+
export * from './resize/resize.component';
|
|
5
|
+
export * from './demo/image-editor-demo.component';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW1hZ2UtZWRpdG9yL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsb0NBQW9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ltYWdlLWVkaXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2ltYWdlLWVkaXRvci5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzaXplL3Jlc2l6ZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kZW1vL2ltYWdlLWVkaXRvci1kZW1vLmNvbXBvbmVudCc7Il19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC1ldmVudC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW1hZ2UtZWRpdG9yL3NyYy9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wtZXZlbnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlRWRpdG9yRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICBjcm9wSW1hZ2U6ICgpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgc2V0TG9hZGluZ1N0YXRlOiAobG9hZGluZzogYm9vbGVhbikgPT4gdm9pZDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZWRpdG9yLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL2ludGVyZmFjZXMvaW1hZ2UtZWRpdG9yLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVFlQRV9BU1BFQ1RfUkFUSU8gfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBJU2F2ZUZpbGUge1xuICBmaWxlOiBCbG9iO1xuICB1cmw6IHN0cmluZztcbiAgbW9kZTogVFlQRV9NT0RFX1NBVkU7XG59XG5cbmV4cG9ydCB0eXBlIFRZUEVfTU9ERV9TQVZFID0gJ3NhdmUtZmlsZScgfCAnc2F2ZS1hcGknIHwgJ3NhdmUtYXBpLWFzLW5ldy1maWxlJztcbmV4cG9ydCBpbnRlcmZhY2UgSUNyb3BSYXRpb0l0ZW0ge1xuICBrZXk6IFRZUEVfQVNQRUNUX1JBVElPO1xuICBpY29uOiBzdHJpbmc7XG4gIHZhbHVlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDcm9wU2l6ZSB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSZWN0Q2xpcCB7XG4gIHRvcDogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICByaWdodDogbnVtYmVyO1xuICBib3R0b206IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVzaXplRGF0YSB7XG4gIHJhdGlvOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBUWVBFX1JFU0laRV9TVEFURSA9ICdUTCcgfCAnQkwnIHwgJ1RSJyB8ICdCUicgfCAnVkwnIHwgJ1ZSJyB8ICdIVCcgfCAnSEInIHwgJ25vbmUnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0YXJ0TW91c2VEaW0ge1xuICBjbGllbnRYOiBudW1iZXI7XG4gIGNsaWVudFk6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIHRvcDogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIGltYWdlVG9wOiBudW1iZXI7XG4gIGltYWdlTGVmdDogbnVtYmVyO1xuICBpbWFnZVdpZHRoOiBudW1iZXI7XG4gIGltYWdlSGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0eWxlcyB7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIHRvcD86IG51bWJlcjtcbiAgbGVmdD86IG51bWJlcjtcbiAgZGlzcGxheT86IHN0cmluZztcbiAgc3JjPzogc3RyaW5nO1xuICBjbGlwPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBNT0RFX0VESVQgPSAnc2F2ZS1maWxlJyB8ICdzYXZlLWFwaSc7XG5cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLWltYWdlLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL2xpYnMtdWktY29tcG9uZW50cy1pbWFnZS1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from "@angular/core";
|
|
2
|
+
import { getDataUrl } from "../defines/image-editor.define";
|
|
3
|
+
import { TranslateModule } from "@ngx-translate/core";
|
|
4
|
+
import { LibsUiComponentsModalComponent } from "@libs-ui/components-modal";
|
|
5
|
+
import { LibsUiComponentsInputsValidComponent } from "@libs-ui/components-inputs-valid";
|
|
6
|
+
import { convertBase64ToBlob, convertBlobToFile, getLabelBySizeFile } from "@libs-ui/utils";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@ngx-translate/core";
|
|
9
|
+
export class LibsUiComponentsImageEditorResizeComponent {
|
|
10
|
+
buttonsFooter;
|
|
11
|
+
image = new Image();
|
|
12
|
+
originFileSize;
|
|
13
|
+
currentFileSize;
|
|
14
|
+
inputValidFunctionControl;
|
|
15
|
+
resizeData;
|
|
16
|
+
originWidth;
|
|
17
|
+
originHeight;
|
|
18
|
+
src;
|
|
19
|
+
zIndex;
|
|
20
|
+
mimetype;
|
|
21
|
+
outClose = new EventEmitter();
|
|
22
|
+
outSave = new EventEmitter();
|
|
23
|
+
constructor() {
|
|
24
|
+
this.buttonsFooter = [{
|
|
25
|
+
type: 'button-third',
|
|
26
|
+
label: 'i18n_cancel',
|
|
27
|
+
action: async () => this.outClose.emit()
|
|
28
|
+
}, {
|
|
29
|
+
label: 'i18n_save',
|
|
30
|
+
action: async () => {
|
|
31
|
+
this.outSave.emit(this.resizeData);
|
|
32
|
+
this.outClose.emit();
|
|
33
|
+
}
|
|
34
|
+
}];
|
|
35
|
+
this.inputValidFunctionControl = [];
|
|
36
|
+
}
|
|
37
|
+
async ngOnInit() {
|
|
38
|
+
const fileSize = await this.getFileSize();
|
|
39
|
+
this.currentFileSize = fileSize;
|
|
40
|
+
this.originFileSize = fileSize;
|
|
41
|
+
}
|
|
42
|
+
async handlerResizeRatio() {
|
|
43
|
+
let ratio = parseInt(`${this.resizeData.ratio}`);
|
|
44
|
+
if (!ratio || ratio < 0) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (ratio > 100) {
|
|
48
|
+
ratio = 100;
|
|
49
|
+
this.resizeData.ratio = ratio;
|
|
50
|
+
}
|
|
51
|
+
this.resizeData.width = Math.max(parseInt(`${this.originWidth * ratio / 100}`), 1);
|
|
52
|
+
this.resizeData.height = Math.max(parseInt(`${this.originHeight * ratio / 100}`), 1);
|
|
53
|
+
// this.inputValidFunctionControl.forEach(item => item.detectChanges());
|
|
54
|
+
this.currentFileSize = await this.getFileSize();
|
|
55
|
+
}
|
|
56
|
+
getFileSize() {
|
|
57
|
+
return new Promise((resolve) => {
|
|
58
|
+
this.image.onload = () => {
|
|
59
|
+
const canvas = document.createElement('canvas');
|
|
60
|
+
canvas.width = this.resizeData.width;
|
|
61
|
+
canvas.height = this.resizeData.height;
|
|
62
|
+
const ctx = canvas.getContext('2d');
|
|
63
|
+
if (ctx) {
|
|
64
|
+
ctx.drawImage(this.image, 0, 0, canvas.width, canvas.height);
|
|
65
|
+
}
|
|
66
|
+
const src = getDataUrl(canvas, this.mimetype, this.src);
|
|
67
|
+
const file = convertBase64ToBlob(src);
|
|
68
|
+
resolve(getLabelBySizeFile(convertBlobToFile(file, Date.now().toLocaleString()).size));
|
|
69
|
+
};
|
|
70
|
+
this.image.src = this.src;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
handlerResizeWidth() {
|
|
74
|
+
this.processResizeWidthOrHeight('width', 'height', this.originWidth, this.originHeight);
|
|
75
|
+
}
|
|
76
|
+
handlerResizeHeight() {
|
|
77
|
+
this.processResizeWidthOrHeight('height', 'width', this.originHeight, this.originWidth);
|
|
78
|
+
}
|
|
79
|
+
async processResizeWidthOrHeight(resizeBy, fieldResize, originByValue, originOtherValue) {
|
|
80
|
+
const value = parseInt(`${this.resizeData[resizeBy]}`);
|
|
81
|
+
if (!value || value > originByValue) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
this.resizeData[fieldResize] = Math.max(parseInt(`${originOtherValue * value / originByValue}`), 1);
|
|
85
|
+
this.resizeData.ratio = Math.max(parseInt(`${100 * value / originByValue}`), 1);
|
|
86
|
+
this.currentFileSize = await this.getFileSize();
|
|
87
|
+
}
|
|
88
|
+
handlerInputValidFunctionControl(event) {
|
|
89
|
+
this.inputValidFunctionControl.push(event);
|
|
90
|
+
}
|
|
91
|
+
handlerEvent(event) {
|
|
92
|
+
if (event === 'close') {
|
|
93
|
+
this.outClose.emit();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsImageEditorResizeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
97
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LibsUiComponentsImageEditorResizeComponent, isStandalone: true, selector: "libs-ui-components-image_editor-resize", inputs: { resizeData: "resizeData", originWidth: "originWidth", originHeight: "originHeight", src: "src", zIndex: "zIndex", mimetype: "mimetype" }, outputs: { outClose: "outClose", outSave: "outSave" }, ngImport: i0, template: "<libs_ui-components-modal [headerConfig]=\"{ignoreHeaderTheme: true}\"\n [mode]=\"'center'\"\n [width]=\"'500px'\"\n [height]=\"'auto'\"\n [title]=\"'i18n_resize' | translate\"\n [zIndex]=\"zIndex\"\n [buttonsFooter]=\"buttonsFooter\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom w-full h-full\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_ratio_size' | translate }} (%)\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[132px]'\"\n [dataType]=\"'int'\"\n [fieldNameBind]=\"'ratio'\"\n [(item)]=\"resizeData\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"100\"\n [valueUpDownNumber]=\"1\"\n [validRequired]=\"{isRequired: true}\"\n [ignoreShowError]=\"true\"\n (outValueChange)=\"handlerResizeRatio()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"mt-[16px] relative\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_width' | translate }}\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [maxValueNumber]=\"originWidth\"\n [minValueNumber]=\"1\"\n [fieldNameBind]=\"'width'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeWidth()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"flex items-center mt-[8px]\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_length' | translate }}\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"originHeight\"\n [fieldNameBind]=\"'height'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeHeight()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"absolute flex items-center left-[236px] top-[14px]\">\n <div\n class=\"w-[20px] h-[44px] libs-ui-border-top-general libs-ui-border-right-general libs-ui-border-bottom-general\">\n </div>\n <div class=\"ml-[6px] text-[#9ca2ad] libs-ui-icon-lock\"></div>\n </div>\n </div>\n <div class=\"mt-[16px]\">\n <div class=\"libs-ui-font-h6m text-[#6a7383] mb-[8px]\">{{ 'i18n_size_photo' | translate }}</div>\n <div class=\"libs-ui-font-h5r rounded-[4px] py-[8px] px-[16px] bg-[#f8f9fa] text-[#9ca2ad]\">\n {{ 'i18n_file_size_compare_when_resize' | translate:{current_size: currentFileSize, original_size: originFileSize} }}\n </div>\n </div>\n </div>\n</libs_ui-components-modal>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsModalComponent, selector: "libs_ui-components-modal", inputs: ["show", "mode", "isBackdropTransparent", "isBackgroundTransparentModal", "isSizeBackdropByWidthHeightInput", "hasShadowBoxWhenHiddenBackDropTransparent", "classIncludeModalWrapper", "zIndex", "width", "height", "maxWidth", "maxHeight", "minWidth", "isFullScreen", "disable", "ignoreCommunicateMicroEvent", "headerConfig", "bodyConfig", "footerConfig", "buttonsFooter", "title", "titleUseXssFilter", "titleUseTooltip", "titleUseInnerText"], outputs: ["showChange", "widthChange", "heightChange", "maxWidthChange", "maxHeightChange", "minWidthChange", "disableChange", "buttonsFooterChange", "outScrollContent", "outEvent", "outFunctionControl"] }, { kind: "component", type: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut", "debounceTimeValidate"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }] });
|
|
98
|
+
}
|
|
99
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsImageEditorResizeComponent, decorators: [{
|
|
100
|
+
type: Component,
|
|
101
|
+
args: [{ selector: 'libs-ui-components-image_editor-resize', standalone: true, imports: [
|
|
102
|
+
TranslateModule, LibsUiComponentsModalComponent, LibsUiComponentsInputsValidComponent
|
|
103
|
+
], template: "<libs_ui-components-modal [headerConfig]=\"{ignoreHeaderTheme: true}\"\n [mode]=\"'center'\"\n [width]=\"'500px'\"\n [height]=\"'auto'\"\n [title]=\"'i18n_resize' | translate\"\n [zIndex]=\"zIndex\"\n [buttonsFooter]=\"buttonsFooter\"\n (outEvent)=\"handlerEvent($event)\">\n <div class=\"libs-ui-modal-body-custom w-full h-full\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_ratio_size' | translate }} (%)\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[132px]'\"\n [dataType]=\"'int'\"\n [fieldNameBind]=\"'ratio'\"\n [(item)]=\"resizeData\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"100\"\n [valueUpDownNumber]=\"1\"\n [validRequired]=\"{isRequired: true}\"\n [ignoreShowError]=\"true\"\n (outValueChange)=\"handlerResizeRatio()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"mt-[16px] relative\">\n <div class=\"flex items-center\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_width' | translate }}\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [maxValueNumber]=\"originWidth\"\n [minValueNumber]=\"1\"\n [fieldNameBind]=\"'width'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeWidth()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"flex items-center mt-[8px]\">\n <div class=\"libs-ui-font-h7r mr-[4px] text-[#6a7383] w-[100px] shrink-0\">\n {{ 'i18n_length' | translate }}\n </div>\n <libs_ui-components-inputs-valid [ignoreWidthInput100]=\"true\"\n [classIncludeInput]=\"'w-[102px]'\"\n [dataType]=\"'int'\"\n [minValueNumber]=\"1\"\n [maxValueNumber]=\"originHeight\"\n [fieldNameBind]=\"'height'\"\n [(item)]=\"resizeData\"\n [unitsRight]=\"[{id: 'px', label: 'px'}]\"\n [keySelectedUnitRight]=\"'px'\"\n [valueUpDownNumber]=\"1\"\n (outValueChange)=\"handlerResizeHeight()\"\n (outFunctionsControl)=\"handlerInputValidFunctionControl($event)\" />\n </div>\n <div class=\"absolute flex items-center left-[236px] top-[14px]\">\n <div\n class=\"w-[20px] h-[44px] libs-ui-border-top-general libs-ui-border-right-general libs-ui-border-bottom-general\">\n </div>\n <div class=\"ml-[6px] text-[#9ca2ad] libs-ui-icon-lock\"></div>\n </div>\n </div>\n <div class=\"mt-[16px]\">\n <div class=\"libs-ui-font-h6m text-[#6a7383] mb-[8px]\">{{ 'i18n_size_photo' | translate }}</div>\n <div class=\"libs-ui-font-h5r rounded-[4px] py-[8px] px-[16px] bg-[#f8f9fa] text-[#9ca2ad]\">\n {{ 'i18n_file_size_compare_when_resize' | translate:{current_size: currentFileSize, original_size: originFileSize} }}\n </div>\n </div>\n </div>\n</libs_ui-components-modal>\n" }]
|
|
104
|
+
}], ctorParameters: () => [], propDecorators: { resizeData: [{
|
|
105
|
+
type: Input,
|
|
106
|
+
args: [{ required: true }]
|
|
107
|
+
}], originWidth: [{
|
|
108
|
+
type: Input,
|
|
109
|
+
args: [{ required: true }]
|
|
110
|
+
}], originHeight: [{
|
|
111
|
+
type: Input,
|
|
112
|
+
args: [{ required: true }]
|
|
113
|
+
}], src: [{
|
|
114
|
+
type: Input,
|
|
115
|
+
args: [{ required: true }]
|
|
116
|
+
}], zIndex: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}], mimetype: [{
|
|
119
|
+
type: Input
|
|
120
|
+
}], outClose: [{
|
|
121
|
+
type: Output
|
|
122
|
+
}], outSave: [{
|
|
123
|
+
type: Output
|
|
124
|
+
}] } });
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbWFnZS1lZGl0b3Ivc3JjL3Jlc2l6ZS9yZXNpemUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2ltYWdlLWVkaXRvci9zcmMvcmVzaXplL3Jlc2l6ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFJdEQsT0FBTyxFQUFFLDhCQUE4QixFQUFvQixNQUFNLDJCQUEyQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFXNUYsTUFBTSxPQUFPLDBDQUEwQztJQUUzQyxhQUFhLENBQWlCO0lBQzlCLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3BCLGNBQWMsQ0FBVTtJQUN4QixlQUFlLENBQVU7SUFFM0IseUJBQXlCLENBQXlDO0lBRS9DLFVBQVUsQ0FBZTtJQUN6QixXQUFXLENBQVU7SUFDckIsWUFBWSxDQUFVO0lBQ3RCLEdBQUcsQ0FBVTtJQUMvQixNQUFNLENBQVU7SUFDaEIsUUFBUSxDQUFVO0lBRVIsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDcEMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7SUFFN0Q7UUFDRSxJQUFJLENBQUMsYUFBYSxH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aEYsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRVMsZ0NBQWdDLENBQUMsS0FBc0M7UUFDL0UsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRVMsWUFBWSxDQUFDLEtBQXVCO1FBQzVDLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7d0dBeEdVLDBDQUEwQzs0RkFBMUMsMENBQTBDLDZTQ25CdkQsODFHQTRFQSwyQ0Q1REksZUFBZSw0RkFBRSw4QkFBOEIsbXRCQUFFLG9DQUFvQzs7NEZBRzVFLDBDQUEwQztrQkFUdEQsU0FBUzsrQkFFRSx3Q0FBd0MsY0FFdEMsSUFBSSxXQUNQO3dCQUNQLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxvQ0FBb0M7cUJBQ3RGO3dEQVcwQixVQUFVO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxXQUFXO3NCQUFyQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxZQUFZO3NCQUF0QyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxHQUFHO3NCQUE3QixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRWEsUUFBUTtzQkFBMUIsTUFBTTtnQkFDWSxPQUFPO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBnZXREYXRhVXJsIH0gZnJvbSBcIi4uL2RlZmluZXMvaW1hZ2UtZWRpdG9yLmRlZmluZVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IElCdXR0b24gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblwiO1xuaW1wb3J0IHsgSUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWlucHV0cy12YWxpZFwiO1xuaW1wb3J0IHsgSVJlc2l6ZURhdGEgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9pbWFnZS1lZGl0b3IuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTW9kYWxDb21wb25lbnQsIFRZUEVfTU9EQUxfRVZFTlQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1tb2RhbFwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLXZhbGlkXCI7XG5pbXBvcnQgeyBjb252ZXJ0QmFzZTY0VG9CbG9iLCBjb252ZXJ0QmxvYlRvRmlsZSwgZ2V0TGFiZWxCeVNpemVGaWxlIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnMtdWktY29tcG9uZW50cy1pbWFnZV9lZGl0b3ItcmVzaXplJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc2l6ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNNb2RhbENvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0ltYWdlRWRpdG9yUmVzaXplQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwcm90ZWN0ZWQgYnV0dG9uc0Zvb3RlcjogQXJyYXk8SUJ1dHRvbj47XG4gIHByb3RlY3RlZCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICBwcm90ZWN0ZWQgb3JpZ2luRmlsZVNpemUhOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBjdXJyZW50RmlsZVNpemUhOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBpbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sOiBBcnJheTxJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50PjtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSByZXNpemVEYXRhITogSVJlc2l6ZURhdGE7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG9yaWdpbldpZHRoITogbnVtYmVyO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBvcmlnaW5IZWlnaHQhOiBudW1iZXI7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNyYyE6IHN0cmluZztcbiAgQElucHV0KCkgekluZGV4PzogbnVtYmVyO1xuICBASW5wdXQoKSBtaW1ldHlwZT86IHN0cmluZztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgb3V0Q2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBvdXRTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxJUmVzaXplRGF0YT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJ1dHRvbnNGb290ZXIgPSBbe1xuICAgICAgdHlwZTogJ2J1dHRvbi10aGlyZCcsXG4gICAgICBsYWJlbDogJ2kxOG5fY2FuY2VsJyxcbiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vdXRDbG9zZS5lbWl0KClcbiAgICB9LCB7XG4gICAgICBsYWJlbDogJ2kxOG5fc2F2ZScsXG4gICAgICBhY3Rpb246IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5vdXRTYXZlLmVtaXQodGhpcy5yZXNpemVEYXRhKTtcbiAgICAgICAgdGhpcy5vdXRDbG9zZS5lbWl0KCk7XG4gICAgICB9XG4gICAgfV07XG4gICAgdGhpcy5pbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sID0gW107XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlU2l6ZSA9IGF3YWl0IHRoaXMuZ2V0RmlsZVNpemUoKTtcblxuICAgIHRoaXMuY3VycmVudEZpbGVTaXplID0gZmlsZVNpemU7XG4gICAgdGhpcy5vcmlnaW5GaWxlU2l6ZSA9IGZpbGVTaXplO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJSZXNpemVSYXRpbygpIHtcbiAgICBsZXQgcmF0aW8gPSBwYXJzZUludChgJHt0aGlzLnJlc2l6ZURhdGEucmF0aW99YCk7XG5cbiAgICBpZiAoIXJhdGlvIHx8IHJhdGlvIDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmF0aW8gPiAxMDApIHtcbiAgICAgIHJhdGlvID0gMTAwO1xuICAgICAgdGhpcy5yZXNpemVEYXRhLnJhdGlvID0gcmF0aW87XG4gICAgfVxuICAgIHRoaXMucmVzaXplRGF0YS53aWR0aCA9IE1hdGgubWF4KHBhcnNlSW50KGAke3RoaXMub3JpZ2luV2lkdGggKiByYXRpbyAvIDEwMH1gKSwgMSk7XG4gICAgdGhpcy5yZXNpemVEYXRhLmhlaWdodCA9IE1hdGgubWF4KHBhcnNlSW50KGAke3RoaXMub3JpZ2luSGVpZ2h0ICogcmF0aW8gLyAxMDB9YCksIDEpO1xuICAgIC8vIHRoaXMuaW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbC5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5kZXRlY3RDaGFuZ2VzKCkpO1xuICAgIHRoaXMuY3VycmVudEZpbGVTaXplID0gYXdhaXQgdGhpcy5nZXRGaWxlU2l6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxlU2l6ZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5pbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHRoaXMucmVzaXplRGF0YS53aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IHRoaXMucmVzaXplRGF0YS5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLmltYWdlLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNyYyA9IGdldERhdGFVcmwoY2FudmFzLCB0aGlzLm1pbWV0eXBlLCB0aGlzLnNyYyk7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBjb252ZXJ0QmFzZTY0VG9CbG9iKHNyYyk7XG5cbiAgICAgICAgcmVzb2x2ZShnZXRMYWJlbEJ5U2l6ZUZpbGUoY29udmVydEJsb2JUb0ZpbGUoZmlsZSwgRGF0ZS5ub3coKS50b0xvY2FsZVN0cmluZygpKS5zaXplKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5pbWFnZS5zcmMgPSB0aGlzLnNyYztcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUmVzaXplV2lkdGgoKSB7XG4gICAgdGhpcy5wcm9jZXNzUmVzaXplV2lkdGhPckhlaWdodCgnd2lkdGgnLCAnaGVpZ2h0JywgdGhpcy5vcmlnaW5XaWR0aCwgdGhpcy5vcmlnaW5IZWlnaHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZXNpemVIZWlnaHQoKSB7XG4gICAgdGhpcy5wcm9jZXNzUmVzaXplV2lkdGhPckhlaWdodCgnaGVpZ2h0JywgJ3dpZHRoJywgdGhpcy5vcmlnaW5IZWlnaHQsIHRoaXMub3JpZ2luV2lkdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzUmVzaXplV2lkdGhPckhlaWdodChyZXNpemVCeTogJ3dpZHRoJyB8ICdoZWlnaHQnLCBmaWVsZFJlc2l6ZTogJ3dpZHRoJyB8ICdoZWlnaHQnLCBvcmlnaW5CeVZhbHVlOiBudW1iZXIsIG9yaWdpbk90aGVyVmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoYCR7dGhpcy5yZXNpemVEYXRhW3Jlc2l6ZUJ5XX1gKTtcblxuICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPiBvcmlnaW5CeVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVzaXplRGF0YVtmaWVsZFJlc2l6ZV0gPSBNYXRoLm1heChwYXJzZUludChgJHtvcmlnaW5PdGhlclZhbHVlICogdmFsdWUgLyBvcmlnaW5CeVZhbHVlfWApLCAxKTtcbiAgICB0aGlzLnJlc2l6ZURhdGEucmF0aW8gPSBNYXRoLm1heChwYXJzZUludChgJHsxMDAgKiB2YWx1ZSAvIG9yaWdpbkJ5VmFsdWV9YCksIDEpO1xuICAgIHRoaXMuY3VycmVudEZpbGVTaXplID0gYXdhaXQgdGhpcy5nZXRGaWxlU2l6ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sKGV2ZW50OiBJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5pbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sLnB1c2goZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJFdmVudChldmVudDogVFlQRV9NT0RBTF9FVkVOVCkge1xuICAgIGlmIChldmVudCA9PT0gJ2Nsb3NlJykge1xuICAgICAgdGhpcy5vdXRDbG9zZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbn0iLCI8bGlic191aS1jb21wb25lbnRzLW1vZGFsIFtoZWFkZXJDb25maWddPVwie2lnbm9yZUhlYWRlclRoZW1lOiB0cnVlfVwiXG4gIFttb2RlXT1cIidjZW50ZXInXCJcbiAgW3dpZHRoXT1cIic1MDBweCdcIlxuICBbaGVpZ2h0XT1cIidhdXRvJ1wiXG4gIFt0aXRsZV09XCInaTE4bl9yZXNpemUnIHwgdHJhbnNsYXRlXCJcbiAgW3pJbmRleF09XCJ6SW5kZXhcIlxuICBbYnV0dG9uc0Zvb3Rlcl09XCJidXR0b25zRm9vdGVyXCJcbiAgKG91dEV2ZW50KT1cImhhbmRsZXJFdmVudCgkZXZlbnQpXCI+XG4gIDxkaXYgY2xhc3M9XCJsaWJzLXVpLW1vZGFsLWJvZHktY3VzdG9tIHctZnVsbCBoLWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDdyIG1yLVs0cHhdIHRleHQtWyM2YTczODNdIHctWzEwMHB4XSBzaHJpbmstMFwiPlxuICAgICAgICB7eyAnaTE4bl9yYXRpb19zaXplJyB8IHRyYW5zbGF0ZSB9fSAoJSlcbiAgICAgIDwvZGl2PlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWQgW2lnbm9yZVdpZHRoSW5wdXQxMDBdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVJbnB1dF09XCIndy1bMTMycHhdJ1wiXG4gICAgICAgIFtkYXRhVHlwZV09XCInaW50J1wiXG4gICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cIidyYXRpbydcIlxuICAgICAgICBbKGl0ZW0pXT1cInJlc2l6ZURhdGFcIlxuICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwiMVwiXG4gICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCIxMDBcIlxuICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwiMVwiXG4gICAgICAgIFt2YWxpZFJlcXVpcmVkXT1cIntpc1JlcXVpcmVkOiB0cnVlfVwiXG4gICAgICAgIFtpZ25vcmVTaG93RXJyb3JdPVwidHJ1ZVwiXG4gICAgICAgIChvdXRWYWx1ZUNoYW5nZSk9XCJoYW5kbGVyUmVzaXplUmF0aW8oKVwiXG4gICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtdC1bMTZweF0gcmVsYXRpdmVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg3ciBtci1bNHB4XSB0ZXh0LVsjNmE3MzgzXSB3LVsxMDBweF0gc2hyaW5rLTBcIj5cbiAgICAgICAgICB7eyAnaTE4bl93aWR0aCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkIFtpZ25vcmVXaWR0aElucHV0MTAwXT1cInRydWVcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVJbnB1dF09XCIndy1bMTAycHhdJ1wiXG4gICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICBbbWF4VmFsdWVOdW1iZXJdPVwib3JpZ2luV2lkdGhcIlxuICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIxXCJcbiAgICAgICAgICBbZmllbGROYW1lQmluZF09XCInd2lkdGgnXCJcbiAgICAgICAgICBbKGl0ZW0pXT1cInJlc2l6ZURhdGFcIlxuICAgICAgICAgIFt1bml0c1JpZ2h0XT1cIlt7aWQ6ICdweCcsIGxhYmVsOiAncHgnfV1cIlxuICAgICAgICAgIFtrZXlTZWxlY3RlZFVuaXRSaWdodF09XCIncHgnXCJcbiAgICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwiMVwiXG4gICAgICAgICAgKG91dFZhbHVlQ2hhbmdlKT1cImhhbmRsZXJSZXNpemVXaWR0aCgpXCJcbiAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVySW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbCgkZXZlbnQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG10LVs4cHhdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDdyIG1yLVs0cHhdIHRleHQtWyM2YTczODNdIHctWzEwMHB4XSBzaHJpbmstMFwiPlxuICAgICAgICAgIHt7ICdpMThuX2xlbmd0aCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkIFtpZ25vcmVXaWR0aElucHV0MTAwXT1cInRydWVcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVJbnB1dF09XCIndy1bMTAycHhdJ1wiXG4gICAgICAgICAgW2RhdGFUeXBlXT1cIidpbnQnXCJcbiAgICAgICAgICBbbWluVmFsdWVOdW1iZXJdPVwiMVwiXG4gICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm9yaWdpbkhlaWdodFwiXG4gICAgICAgICAgW2ZpZWxkTmFtZUJpbmRdPVwiJ2hlaWdodCdcIlxuICAgICAgICAgIFsoaXRlbSldPVwicmVzaXplRGF0YVwiXG4gICAgICAgICAgW3VuaXRzUmlnaHRdPVwiW3tpZDogJ3B4JywgbGFiZWw6ICdweCd9XVwiXG4gICAgICAgICAgW2tleVNlbGVjdGVkVW5pdFJpZ2h0XT1cIidweCdcIlxuICAgICAgICAgIFt2YWx1ZVVwRG93bk51bWJlcl09XCIxXCJcbiAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlclJlc2l6ZUhlaWdodCgpXCJcbiAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVySW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbCgkZXZlbnQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGZsZXggaXRlbXMtY2VudGVyIGxlZnQtWzIzNnB4XSB0b3AtWzE0cHhdXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInctWzIwcHhdIGgtWzQ0cHhdIGxpYnMtdWktYm9yZGVyLXRvcC1nZW5lcmFsIGxpYnMtdWktYm9yZGVyLXJpZ2h0LWdlbmVyYWwgbGlicy11aS1ib3JkZXItYm90dG9tLWdlbmVyYWxcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC1bNnB4XSB0ZXh0LVsjOWNhMmFkXSBsaWJzLXVpLWljb24tbG9ja1wiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm10LVsxNnB4XVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNm0gdGV4dC1bIzZhNzM4M10gbWItWzhweF1cIj57eyAnaTE4bl9zaXplX3Bob3RvJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNXIgcm91bmRlZC1bNHB4XSBweS1bOHB4XSBweC1bMTZweF0gYmctWyNmOGY5ZmFdIHRleHQtWyM5Y2EyYWRdXCI+XG4gICAgICAgIHt7ICdpMThuX2ZpbGVfc2l6ZV9jb21wYXJlX3doZW5fcmVzaXplJyB8IHRyYW5zbGF0ZTp7Y3VycmVudF9zaXplOiBjdXJyZW50RmlsZVNpemUsIG9yaWdpbmFsX3NpemU6IG9yaWdpbkZpbGVTaXplfSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9saWJzX3VpLWNvbXBvbmVudHMtbW9kYWw+XG4iXX0=
|