@wertzui/ngx-restworld-client 7.2.0 → 8.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/esm2020/lib/components/restworld-file/restworld-file.component.mjs +57 -0
- package/esm2020/lib/components/restworld-form/restworld-form.component.mjs +188 -0
- package/esm2020/lib/components/restworld-id-navigation/restworld-id-navigation.component.mjs +65 -0
- package/esm2020/lib/components/restworld-image/restworld-image.component.mjs +164 -0
- package/esm2020/lib/components/restworld-inputs/restworld-inputs.mjs +306 -0
- package/esm2020/lib/components/restworld-label/restworld-label.component.mjs +24 -0
- package/esm2020/lib/components/restworld-menu-button/restworld-menu-button.component.mjs +40 -0
- package/esm2020/lib/components/restworld-table/restworld-table.component.mjs +157 -0
- package/esm2020/lib/components/restworld-validation-errors/restworld-validation-errors.component.mjs +21 -0
- package/esm2020/lib/models/o-data.mjs +2 -0
- package/esm2020/lib/models/restworld-image.mjs +2 -0
- package/esm2020/lib/models/restworld-options.mjs +2 -2
- package/esm2020/lib/models/special-properties.mjs +6 -0
- package/esm2020/lib/models/templating.mjs +2 -0
- package/esm2020/lib/restworld-client.module.mjs +83 -25
- package/esm2020/lib/services/o-data.service.mjs +6 -3
- package/esm2020/lib/services/restworld-client-collection.mjs +7 -7
- package/esm2020/lib/services/restworld-client.mjs +40 -29
- package/esm2020/lib/services/settings.service.mjs +5 -5
- package/esm2020/lib/views/restworld-edit-view/restworld-edit-view.component.mjs +24 -255
- package/esm2020/lib/views/restworld-list-view/restworld-list-view.component.mjs +49 -101
- package/esm2020/public-api.mjs +17 -6
- package/fesm2015/wertzui-ngx-restworld-client.mjs +1373 -1017
- package/fesm2015/wertzui-ngx-restworld-client.mjs.map +1 -1
- package/fesm2020/wertzui-ngx-restworld-client.mjs +1322 -978
- package/fesm2020/wertzui-ngx-restworld-client.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/components/restworld-avatar/restworld-avatar.component.d.ts +1 -0
- package/lib/components/restworld-avatar/restworld-avatar.component.d.ts.map +1 -0
- package/lib/{views/restworld-file-view/restworld-file-view.component.d.ts → components/restworld-file/restworld-file.component.d.ts} +4 -3
- package/lib/components/restworld-file/restworld-file.component.d.ts.map +1 -0
- package/lib/components/restworld-form/restworld-form.component.d.ts +53 -0
- package/lib/components/restworld-form/restworld-form.component.d.ts.map +1 -0
- package/lib/components/restworld-id-navigation/restworld-id-navigation.component.d.ts +27 -0
- package/lib/components/restworld-id-navigation/restworld-id-navigation.component.d.ts.map +1 -0
- package/lib/components/restworld-image/restworld-image.component.d.ts +62 -0
- package/lib/components/restworld-image/restworld-image.component.d.ts.map +1 -0
- package/lib/components/restworld-inputs/restworld-inputs.d.ts +146 -0
- package/lib/components/restworld-inputs/restworld-inputs.d.ts.map +1 -0
- package/lib/components/restworld-label/restworld-label.component.d.ts +14 -0
- package/lib/components/restworld-label/restworld-label.component.d.ts.map +1 -0
- package/lib/components/restworld-menu-button/restworld-menu-button.component.d.ts +12 -0
- package/lib/components/restworld-menu-button/restworld-menu-button.component.d.ts.map +1 -0
- package/lib/components/restworld-table/restworld-table.component.d.ts +54 -0
- package/lib/components/restworld-table/restworld-table.component.d.ts.map +1 -0
- package/lib/components/restworld-validation-errors/restworld-validation-errors.component.d.ts +15 -0
- package/lib/components/restworld-validation-errors/restworld-validation-errors.component.d.ts.map +1 -0
- package/lib/constants/link-names.d.ts +1 -0
- package/lib/constants/link-names.d.ts.map +1 -0
- package/lib/models/api-url.d.ts +1 -0
- package/lib/models/api-url.d.ts.map +1 -0
- package/lib/models/client-settings.d.ts +1 -0
- package/lib/models/client-settings.d.ts.map +1 -0
- package/lib/models/o-data.d.ts +7 -0
- package/lib/models/o-data.d.ts.map +1 -0
- package/lib/models/problem-details.d.ts +1 -0
- package/lib/models/problem-details.d.ts.map +1 -0
- package/lib/models/restworld-image.d.ts +28 -0
- package/lib/models/restworld-image.d.ts.map +1 -0
- package/lib/models/restworld-options.d.ts +2 -1
- package/lib/models/restworld-options.d.ts.map +1 -0
- package/lib/models/special-properties.d.ts +9 -0
- package/lib/models/special-properties.d.ts.map +1 -0
- package/lib/models/templating.d.ts +8 -0
- package/lib/models/templating.d.ts.map +1 -0
- package/lib/pipes/as.pipe.d.ts +1 -0
- package/lib/pipes/as.pipe.d.ts.map +1 -0
- package/lib/pipes/safe-url.pipe.d.ts +1 -0
- package/lib/pipes/safe-url.pipe.d.ts.map +1 -0
- package/lib/restworld-client.module.d.ts +45 -37
- package/lib/restworld-client.module.d.ts.map +1 -0
- package/lib/services/avatar-generator.d.ts +1 -0
- package/lib/services/avatar-generator.d.ts.map +1 -0
- package/lib/services/form.service.d.ts +1 -0
- package/lib/services/form.service.d.ts.map +1 -0
- package/lib/services/o-data.service.d.ts +1 -0
- package/lib/services/o-data.service.d.ts.map +1 -0
- package/lib/services/restworld-client-collection.d.ts +9 -8
- package/lib/services/restworld-client-collection.d.ts.map +1 -0
- package/lib/services/restworld-client.d.ts +12 -4
- package/lib/services/restworld-client.d.ts.map +1 -0
- package/lib/services/settings.service.d.ts +3 -2
- package/lib/services/settings.service.d.ts.map +1 -0
- package/lib/views/restworld-edit-view/restworld-edit-view.component.d.ts +16 -68
- package/lib/views/restworld-edit-view/restworld-edit-view.component.d.ts.map +1 -0
- package/lib/views/restworld-list-view/restworld-list-view.component.d.ts +25 -41
- package/lib/views/restworld-list-view/restworld-list-view.component.d.ts.map +1 -0
- package/package.json +6 -6
- package/public-api.d.ts +17 -5
- package/public-api.d.ts.map +1 -0
- package/wertzui-ngx-restworld-client.d.ts.map +1 -0
- package/esm2020/lib/views/restworld-edit-form/restworld-edit-form.component.mjs +0 -233
- package/esm2020/lib/views/restworld-file-view/restworld-file-view.component.mjs +0 -57
- package/esm2020/lib/views/restworld-image-view/restworld-image-view.component.mjs +0 -139
- package/lib/views/restworld-edit-form/restworld-edit-form.component.d.ts +0 -74
- package/lib/views/restworld-image-view/restworld-image-view.component.d.ts +0 -57
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { Component, forwardRef, Input, ViewChildren } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import { ImageCropperComponent } from 'ngx-image-cropper';
|
|
4
|
+
import { FileUpload } from 'primeng/fileupload';
|
|
5
|
+
import { Dialog } from 'primeng/dialog';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common";
|
|
8
|
+
import * as i2 from "@angular/forms";
|
|
9
|
+
import * as i3 from "primeng/tooltip";
|
|
10
|
+
import * as i4 from "primeng/inputtext";
|
|
11
|
+
import * as i5 from "primeng/button";
|
|
12
|
+
import * as i6 from "primeng/ripple";
|
|
13
|
+
import * as i7 from "primeng/fileupload";
|
|
14
|
+
import * as i8 from "ngx-image-cropper";
|
|
15
|
+
import * as i9 from "primeng/dialog";
|
|
16
|
+
import * as i10 from "primeng/colorpicker";
|
|
17
|
+
import * as i11 from "../../pipes/safe-url.pipe";
|
|
18
|
+
export class RestWorldImageComponent {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.disabled = false;
|
|
21
|
+
this.displayCropDialog = false;
|
|
22
|
+
}
|
|
23
|
+
get alt() {
|
|
24
|
+
return this.property.prompt ?? this.property.name;
|
|
25
|
+
}
|
|
26
|
+
get accept() {
|
|
27
|
+
return this.property.restWorldImage.accept ?? this.property.placeholder ?? "image/*";
|
|
28
|
+
}
|
|
29
|
+
get fileName() {
|
|
30
|
+
return this.property.name + "." + (this.property.restWorldImage.format ?? ".png");
|
|
31
|
+
}
|
|
32
|
+
get alignImage() {
|
|
33
|
+
return this.property.restWorldImage.alignImage;
|
|
34
|
+
}
|
|
35
|
+
get aspectRatio() {
|
|
36
|
+
return this.property.restWorldImage.aspectRatio;
|
|
37
|
+
}
|
|
38
|
+
get backgroundColor() {
|
|
39
|
+
return this.property.restWorldImage.backgroundColor;
|
|
40
|
+
}
|
|
41
|
+
set backgroundColor(value) {
|
|
42
|
+
this.property.restWorldImage.backgroundColor = value;
|
|
43
|
+
}
|
|
44
|
+
get canvasRotation() {
|
|
45
|
+
return this.property.restWorldImage.canvasRotation;
|
|
46
|
+
}
|
|
47
|
+
get containWithinAspectRatio() {
|
|
48
|
+
return this.property.restWorldImage.containWithinAspectRatio;
|
|
49
|
+
}
|
|
50
|
+
get cropper() {
|
|
51
|
+
return this.property.restWorldImage.cropper;
|
|
52
|
+
}
|
|
53
|
+
get cropperMaxHeight() {
|
|
54
|
+
return this.property.restWorldImage.cropperMaxHeight;
|
|
55
|
+
}
|
|
56
|
+
get cropperMaxWidth() {
|
|
57
|
+
return this.property.restWorldImage.cropperMaxWidth;
|
|
58
|
+
}
|
|
59
|
+
get cropperMinHeight() {
|
|
60
|
+
return this.property.restWorldImage.cropperMinHeight;
|
|
61
|
+
}
|
|
62
|
+
get cropperMinWidth() {
|
|
63
|
+
return this.property.restWorldImage.cropperMinWidth;
|
|
64
|
+
}
|
|
65
|
+
get cropperStaticHeight() {
|
|
66
|
+
return this.property.restWorldImage.cropperStaticHeight;
|
|
67
|
+
}
|
|
68
|
+
get cropperStaticWidth() {
|
|
69
|
+
return this.property.restWorldImage.cropperStaticWidth;
|
|
70
|
+
}
|
|
71
|
+
get format() {
|
|
72
|
+
return this.property.restWorldImage.format;
|
|
73
|
+
}
|
|
74
|
+
get imageQuality() {
|
|
75
|
+
return this.property.restWorldImage.imageQuality;
|
|
76
|
+
}
|
|
77
|
+
get initialStepSize() {
|
|
78
|
+
return this.property.restWorldImage.initialStepSize;
|
|
79
|
+
}
|
|
80
|
+
get maintainAspectRatio() {
|
|
81
|
+
return this.property.restWorldImage.maintainAspectRatio;
|
|
82
|
+
}
|
|
83
|
+
get onlyScaleDown() {
|
|
84
|
+
return this.property.restWorldImage.onlyScaleDown;
|
|
85
|
+
}
|
|
86
|
+
get resizeToWidth() {
|
|
87
|
+
return this.property.restWorldImage.resizeToWidth;
|
|
88
|
+
}
|
|
89
|
+
get resizeToHeight() {
|
|
90
|
+
return this.property.restWorldImage.resizeToHeight;
|
|
91
|
+
}
|
|
92
|
+
get roundCropper() {
|
|
93
|
+
return this.property.restWorldImage.roundCropper;
|
|
94
|
+
}
|
|
95
|
+
writeValue(obj) {
|
|
96
|
+
this.uri = obj;
|
|
97
|
+
}
|
|
98
|
+
registerOnChange(fn) {
|
|
99
|
+
this.onChange = fn;
|
|
100
|
+
}
|
|
101
|
+
registerOnTouched() {
|
|
102
|
+
// not needed for this component, but needed to implement the interface
|
|
103
|
+
}
|
|
104
|
+
setDisabledState(isDisabled) {
|
|
105
|
+
this.disabled = isDisabled;
|
|
106
|
+
}
|
|
107
|
+
ngOnInit() {
|
|
108
|
+
// If no background color is set, we set it to white.
|
|
109
|
+
// Otherwise the color picker would show red, the input would be empty and the image cropper would show transparent.
|
|
110
|
+
if (!this.backgroundColor)
|
|
111
|
+
this.backgroundColor = '#ffffff';
|
|
112
|
+
}
|
|
113
|
+
ngAfterViewInit() {
|
|
114
|
+
// We need to trigger imageLoadedInView each time, after the opening animation of the dialog has been completed.
|
|
115
|
+
// Otherwise the image cropper initially (and after every window resize) thinks that the image size is 0x0,
|
|
116
|
+
// because the opening animation hast just begun when the image cropper is first shown.
|
|
117
|
+
this.dialogs?.map(d => d.onShow.subscribe(() => this.imageCroppers?.forEach(i => { i.imageLoadedInView(); })));
|
|
118
|
+
}
|
|
119
|
+
showCropDialog() {
|
|
120
|
+
this.displayCropDialog = true;
|
|
121
|
+
}
|
|
122
|
+
imageChanged(event) {
|
|
123
|
+
this.tempImageFile = event.files[0];
|
|
124
|
+
this.showCropDialog();
|
|
125
|
+
}
|
|
126
|
+
croppedImageChanged(event) {
|
|
127
|
+
this.tempCroppedUri = event.base64;
|
|
128
|
+
}
|
|
129
|
+
acceptCroppedImage() {
|
|
130
|
+
this.uri = this.tempCroppedUri;
|
|
131
|
+
this.onChange?.(this.uri);
|
|
132
|
+
this.closeCropDialog();
|
|
133
|
+
}
|
|
134
|
+
closeCropDialog() {
|
|
135
|
+
this.fileUploads?.forEach(f => f.clear());
|
|
136
|
+
this.displayCropDialog = false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
RestWorldImageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: RestWorldImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
140
|
+
RestWorldImageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.3", type: RestWorldImageComponent, selector: "rw-image", inputs: { property: "property" }, providers: [{
|
|
141
|
+
provide: NG_VALUE_ACCESSOR,
|
|
142
|
+
useExisting: forwardRef(() => RestWorldImageComponent),
|
|
143
|
+
multi: true
|
|
144
|
+
}], viewQueries: [{ propertyName: "fileUploads", predicate: FileUpload, descendants: true }, { propertyName: "imageCroppers", predicate: ImageCropperComponent, descendants: true }, { propertyName: "dialogs", predicate: Dialog, descendants: true }], ngImport: i0, template: "<div class=\"flex align-items-center\">\r\n <p-button *ngIf=\"!uri\" [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No image present\"></p-button>\r\n <a *ngIf=\"uri\" [href]=\"uri | safeUrl\" [download]=\"fileName || 'download'\" class=\"mr-1\" pButton pTooltip=\"Download image\" icon=\"pi pi-download\"></a>\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" mode=\"basic\" [auto]=\"true\" [accept]=\"accept || 'image/*'\" [customUpload]=\"true\" (uploadHandler)=\"imageChanged($event)\" pTooltip=\"Upload new image\"></p-fileUpload>\r\n <img *ngIf=\"uri\" class=\"thumbnail\" [src]=\"uri | safeUrl\" [alt]=\"alt\" (click)=\"showCropDialog()\" pTooltip=\"Zoom and crop\" />\r\n</div>\r\n\r\n<p-dialog [header]=\"alt ?? ''\" [(visible)]=\"displayCropDialog\">\r\n <image-cropper\r\n [autoCrop]=\"true\"\r\n (imageCropped)=\"croppedImageChanged($event)\"\r\n [alignImage]=\"alignImage ?? 'center'\"\r\n [aspectRatio]=\"aspectRatio ?? 1\"\r\n [backgroundColor]=\"backgroundColor ?? null\"\r\n [canvasRotation]=\"canvasRotation ?? 0\"\r\n [containWithinAspectRatio]=\"containWithinAspectRatio ?? false\"\r\n [cropper]=\"cropper ?? { x1: -100, y1: -100, x2: 10000, y2: 10000 }\"\r\n [cropperMaxHeight]=\"cropperMaxHeight ?? 0\"\r\n [cropperMaxWidth]=\"cropperMaxWidth ?? 0\"\r\n [cropperMinHeight]=\"cropperMinHeight ?? 0\"\r\n [cropperMinWidth]=\"cropperMinWidth ?? 0\"\r\n [cropperStaticHeight]=\"cropperStaticHeight ?? 0\"\r\n [cropperStaticWidth]=\"cropperStaticWidth ?? 0\"\r\n [format]=\"format ?? 'png'\"\r\n [imageQuality]=\"imageQuality ?? 92\"\r\n [initialStepSize]=\"initialStepSize ?? 3\"\r\n [maintainAspectRatio]=\"maintainAspectRatio ?? true\"\r\n [onlyScaleDown]=\"onlyScaleDown ?? false\"\r\n [resizeToWidth]=\"resizeToWidth ?? 0\"\r\n [resizeToHeight]=\"resizeToHeight ?? 0\"\r\n [roundCropper]=\"roundCropper ?? false\"\r\n [imageFile]=\"tempImageFile!\"\r\n [imageURL]=\"uri!\"\r\n ></image-cropper>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"flex-auto align-items-center\">\r\n <span>Background color: </span>\r\n <p-colorPicker [(ngModel)]=\"backgroundColor\" appendTo=\"body\" class=\"ml-1 mr-1\"></p-colorPicker>\r\n <input pInputText [(ngModel)]=\"backgroundColor\" />\r\n </div>\r\n <button type=\"button\" pButton pRipple (click)=\"acceptCroppedImage()\" class=\"mr-2\">Ok</button>\r\n <button type=\"button\" pButton pRipple (click)=\"closeCropDialog()\">Cancel</button>\r\n </div>\r\n</p-dialog>\r\n", styles: ["img.thumbnail{height:calc(1rem + 18px);cursor:zoom-in;border-radius:3px}a{text-decoration:none}a.p-button-icon-only span.p-button-label{height:1rem!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i4.InputText, selector: "[pInputText]" }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i6.Ripple, selector: "[pRipple]" }, { kind: "component", type: i7.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError"] }, { kind: "component", type: i8.ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "format", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "cropper", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange"] }, { kind: "component", type: i9.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: i10.ColorPicker, selector: "p-colorPicker", inputs: ["style", "styleClass", "inline", "format", "appendTo", "disabled", "tabindex", "inputId", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onChange", "onShow", "onHide"] }, { kind: "pipe", type: i11.SafeUrlPipe, name: "safeUrl" }] });
|
|
145
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.3", ngImport: i0, type: RestWorldImageComponent, decorators: [{
|
|
146
|
+
type: Component,
|
|
147
|
+
args: [{ selector: 'rw-image', providers: [{
|
|
148
|
+
provide: NG_VALUE_ACCESSOR,
|
|
149
|
+
useExisting: forwardRef(() => RestWorldImageComponent),
|
|
150
|
+
multi: true
|
|
151
|
+
}], template: "<div class=\"flex align-items-center\">\r\n <p-button *ngIf=\"!uri\" [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No image present\"></p-button>\r\n <a *ngIf=\"uri\" [href]=\"uri | safeUrl\" [download]=\"fileName || 'download'\" class=\"mr-1\" pButton pTooltip=\"Download image\" icon=\"pi pi-download\"></a>\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" mode=\"basic\" [auto]=\"true\" [accept]=\"accept || 'image/*'\" [customUpload]=\"true\" (uploadHandler)=\"imageChanged($event)\" pTooltip=\"Upload new image\"></p-fileUpload>\r\n <img *ngIf=\"uri\" class=\"thumbnail\" [src]=\"uri | safeUrl\" [alt]=\"alt\" (click)=\"showCropDialog()\" pTooltip=\"Zoom and crop\" />\r\n</div>\r\n\r\n<p-dialog [header]=\"alt ?? ''\" [(visible)]=\"displayCropDialog\">\r\n <image-cropper\r\n [autoCrop]=\"true\"\r\n (imageCropped)=\"croppedImageChanged($event)\"\r\n [alignImage]=\"alignImage ?? 'center'\"\r\n [aspectRatio]=\"aspectRatio ?? 1\"\r\n [backgroundColor]=\"backgroundColor ?? null\"\r\n [canvasRotation]=\"canvasRotation ?? 0\"\r\n [containWithinAspectRatio]=\"containWithinAspectRatio ?? false\"\r\n [cropper]=\"cropper ?? { x1: -100, y1: -100, x2: 10000, y2: 10000 }\"\r\n [cropperMaxHeight]=\"cropperMaxHeight ?? 0\"\r\n [cropperMaxWidth]=\"cropperMaxWidth ?? 0\"\r\n [cropperMinHeight]=\"cropperMinHeight ?? 0\"\r\n [cropperMinWidth]=\"cropperMinWidth ?? 0\"\r\n [cropperStaticHeight]=\"cropperStaticHeight ?? 0\"\r\n [cropperStaticWidth]=\"cropperStaticWidth ?? 0\"\r\n [format]=\"format ?? 'png'\"\r\n [imageQuality]=\"imageQuality ?? 92\"\r\n [initialStepSize]=\"initialStepSize ?? 3\"\r\n [maintainAspectRatio]=\"maintainAspectRatio ?? true\"\r\n [onlyScaleDown]=\"onlyScaleDown ?? false\"\r\n [resizeToWidth]=\"resizeToWidth ?? 0\"\r\n [resizeToHeight]=\"resizeToHeight ?? 0\"\r\n [roundCropper]=\"roundCropper ?? false\"\r\n [imageFile]=\"tempImageFile!\"\r\n [imageURL]=\"uri!\"\r\n ></image-cropper>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"flex-auto align-items-center\">\r\n <span>Background color: </span>\r\n <p-colorPicker [(ngModel)]=\"backgroundColor\" appendTo=\"body\" class=\"ml-1 mr-1\"></p-colorPicker>\r\n <input pInputText [(ngModel)]=\"backgroundColor\" />\r\n </div>\r\n <button type=\"button\" pButton pRipple (click)=\"acceptCroppedImage()\" class=\"mr-2\">Ok</button>\r\n <button type=\"button\" pButton pRipple (click)=\"closeCropDialog()\">Cancel</button>\r\n </div>\r\n</p-dialog>\r\n", styles: ["img.thumbnail{height:calc(1rem + 18px);cursor:zoom-in;border-radius:3px}a{text-decoration:none}a.p-button-icon-only span.p-button-label{height:1rem!important}\n"] }]
|
|
152
|
+
}], propDecorators: { property: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], fileUploads: [{
|
|
155
|
+
type: ViewChildren,
|
|
156
|
+
args: [FileUpload]
|
|
157
|
+
}], imageCroppers: [{
|
|
158
|
+
type: ViewChildren,
|
|
159
|
+
args: [ImageCropperComponent]
|
|
160
|
+
}], dialogs: [{
|
|
161
|
+
type: ViewChildren,
|
|
162
|
+
args: [Dialog]
|
|
163
|
+
}] } });
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWltYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtaW1hZ2UvcmVzdHdvcmxkLWltYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtaW1hZ2UvcmVzdHdvcmxkLWltYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQWdDLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFzQyxxQkFBcUIsRUFBZ0IsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFBOzs7Ozs7Ozs7Ozs7O0FBZXZDLE1BQU0sT0FBTyx1QkFBdUI7SUFWcEM7UUEwSFMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUdqQixzQkFBaUIsR0FBRyxLQUFLLENBQUM7S0F3RGxDO0lBcEtDLElBQVcsR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQztJQUN2RixDQUFDO0lB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LENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7O29IQTFLVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixxRUFOdkIsQ0FBQztZQUNWLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztZQUN0RCxLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUMsMERBd0dZLFVBQVUsbUVBSVYscUJBQXFCLDZEQUdyQixNQUFNLGdEQ2hJdEIsMDRGQTRDQTsyRkR6QmEsdUJBQXVCO2tCQVZuQyxTQUFTOytCQUNFLFVBQVUsYUFHVCxDQUFDOzRCQUNWLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDOzRCQUN0RCxLQUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDOzhCQU9LLFFBQVE7c0JBRGQsS0FBSztnQkFtR04sV0FBVztzQkFEVixZQUFZO3VCQUFDLFVBQVU7Z0JBS3hCLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxxQkFBcUI7Z0JBSW5DLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ3JvcHBlclBvc2l0aW9uLCBJbWFnZUNyb3BwZWRFdmVudCwgSW1hZ2VDcm9wcGVyQ29tcG9uZW50LCBPdXRwdXRGb3JtYXQgfSBmcm9tICduZ3gtaW1hZ2UtY3JvcHBlcic7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdwcmltZW5nL2ZpbGV1cGxvYWQnO1xyXG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICdwcmltZW5nL2RpYWxvZydcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAnQHdlcnR6dWkvbmd4LWhhbC1jbGllbnQnO1xyXG5pbXBvcnQgeyBSZXN0V29ybGRJbWFnZSB9IGZyb20gJy4uLy4uL21vZGVscy9yZXN0d29ybGQtaW1hZ2UnXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWltYWdlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWltYWdlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW1hZ2UuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW3tcclxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmVzdFdvcmxkSW1hZ2VDb21wb25lbnQpLFxyXG4gICAgbXVsdGk6IHRydWVcclxuICB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkSW1hZ2VDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZT86IEZ1bmN0aW9uO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBwcm9wZXJ0eSE6IFByb3BlcnR5ICYgeyByZXN0V29ybGRJbWFnZTogUmVzdFdvcmxkSW1hZ2V9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWx0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkucHJvbXB0ID8/IHRoaXMucHJvcGVydHkubmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWNjZXB0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkucmVzdFdvcmxkSW1hZ2UuYWNjZXB0ID8/IHRoaXMucHJvcGVydHkucGxhY2Vob2xkZXIgPz8gXCJpbWFnZS8qXCI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGZpbGVOYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkubmFtZSArIFwiLlwiICsgKHRoaXMucHJvcGVydHkucmVzdFdvcmxkSW1hZ2UuZm9ybWF0ID8/IFwiLnBuZ1wiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWxpZ25JbWFnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LnJlc3RXb3JsZEltYWdlLmFsaWduSW1hZ2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFzcGVjdFJhdGlvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkucmVzdFdvcmxkSW1hZ2UuYXNwZWN0UmF0aW87XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGJhY2tncm91bmRDb2xvcigpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LnJlc3RXb3JsZEltYWdlLmJhY2tncm91bmRDb2xvcjtcclxuICB9XHJcbiAgcHVibGljIHNldCBiYWNrZ3JvdW5kQ29sb3IodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5wcm9wZXJ0eS5yZXN0V29ybGRJbWFnZS5iYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FudmFzUm90YXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5yZXN0V29ybGRJbWFnZS5jYW52YXNSb3RhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29udGFpbldpdGhpbkFzcGVjdFJhdGlvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkucmVzdFdvcmxkSW1hZ2UuY29udGFpbldpdGhpbkFzcGVjdFJhdGlvO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjcm9wcGVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkucmVzdFdvcmxkSW1hZ2UuY3JvcHBlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3JvcHBlck1heEhlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LnJlc3RXb3JsZEltYWdlLmNyb3BwZXJNYXhIZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNyb3BwZXJNYXhXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LnJlc3RXb3JsZEltYWdlLmNyb3BwZXJNYXhXaWR0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3JvcHBlck1pbkhlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LnJlc3RXb3JsZEltYWdlLmNyb3BwZXJNaW5IZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNyb3BwZXJNaW5XaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LnJlc3RXb3JsZEltYWdlLmNyb3BwZXJNaW5XaWR0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3JvcHBlclN0YXRpY0hlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LnJlc3RXb3JsZEltYWdlLmNyb3BwZXJTdGF0aWNIZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNyb3BwZXJTdGF0aWNXaWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LnJlc3RXb3JsZEltYWdlLmNyb3BwZXJTdGF0aWNXaWR0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZm9ybWF0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkucmVzdFdvcmxkSW1hZ2UuZm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpbWFnZVF1YWxpdHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5yZXN0V29ybGRJbWFnZS5pbWFnZVF1YWxpdHk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGluaXRpYWxTdGVwU2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LnJlc3RXb3JsZEltYWdlLmluaXRpYWxTdGVwU2l6ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWFpbnRhaW5Bc3BlY3RSYXRpbygpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LnJlc3RXb3JsZEltYWdlLm1haW50YWluQXNwZWN0UmF0aW87XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG9ubHlTY2FsZURvd24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5yZXN0V29ybGRJbWFnZS5vbmx5U2NhbGVEb3duO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZXNpemVUb1dpZHRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkucmVzdFdvcmxkSW1hZ2UucmVzaXplVG9XaWR0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVzaXplVG9IZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5yZXN0V29ybGRJbWFnZS5yZXNpemVUb0hlaWdodDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcm91bmRDcm9wcGVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkucmVzdFdvcmxkSW1hZ2Uucm91bmRDcm9wcGVyO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZHJlbihGaWxlVXBsb2FkKVxyXG4gIGZpbGVVcGxvYWRzPzogUXVlcnlMaXN0PEZpbGVVcGxvYWQ+O1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZHJlbihJbWFnZUNyb3BwZXJDb21wb25lbnQpXHJcbiAgaW1hZ2VDcm9wcGVycz86IFF1ZXJ5TGlzdDxJbWFnZUNyb3BwZXJDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKERpYWxvZylcclxuICBkaWFsb2dzPzogUXVlcnlMaXN0PERpYWxvZz47XHJcblxyXG4gIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1cmk/OiBzdHJpbmcgfCBudWxsO1xyXG4gIHB1YmxpYyB0ZW1wSW1hZ2VGaWxlPzogRmlsZTtcclxuICBwdWJsaWMgZGlzcGxheUNyb3BEaWFsb2cgPSBmYWxzZTtcclxuICBwdWJsaWMgdGVtcENyb3BwZWRVcmk/OiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICB3cml0ZVZhbHVlKG9iaj86IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgIHRoaXMudXJpID0gb2JqO1xyXG4gIH1cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuPzogRnVuY3Rpb24pOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoKTogdm9pZCB7XHJcbiAgICAvLyBub3QgbmVlZGVkIGZvciB0aGlzIGNvbXBvbmVudCwgYnV0IG5lZWRlZCB0byBpbXBsZW1lbnQgdGhlIGludGVyZmFjZVxyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIElmIG5vIGJhY2tncm91bmQgY29sb3IgaXMgc2V0LCB3ZSBzZXQgaXQgdG8gd2hpdGUuXHJcbiAgICAvLyBPdGhlcndpc2UgdGhlIGNvbG9yIHBpY2tlciB3b3VsZCBzaG93IHJlZCwgdGhlIGlucHV0IHdvdWxkIGJlIGVtcHR5IGFuZCB0aGUgaW1hZ2UgY3JvcHBlciB3b3VsZCBzaG93IHRyYW5zcGFyZW50LlxyXG4gICAgaWYgKCF0aGlzLmJhY2tncm91bmRDb2xvcilcclxuICAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSAnI2ZmZmZmZic7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvLyBXZSBuZWVkIHRvIHRyaWdnZXIgaW1hZ2VMb2FkZWRJblZpZXcgZWFjaCB0aW1lLCBhZnRlciB0aGUgb3BlbmluZyBhbmltYXRpb24gb2YgdGhlIGRpYWxvZyBoYXMgYmVlbiBjb21wbGV0ZWQuXHJcbiAgICAvLyBPdGhlcndpc2UgdGhlIGltYWdlIGNyb3BwZXIgaW5pdGlhbGx5IChhbmQgYWZ0ZXIgZXZlcnkgd2luZG93IHJlc2l6ZSkgdGhpbmtzIHRoYXQgdGhlIGltYWdlIHNpemUgaXMgMHgwLFxyXG4gICAgLy8gYmVjYXVzZSB0aGUgb3BlbmluZyBhbmltYXRpb24gaGFzdCBqdXN0IGJlZ3VuIHdoZW4gdGhlIGltYWdlIGNyb3BwZXIgaXMgZmlyc3Qgc2hvd24uXHJcbiAgICB0aGlzLmRpYWxvZ3M/Lm1hcChkID0+IGQub25TaG93LnN1YnNjcmliZSgoKSA9PlxyXG4gICAgICB0aGlzLmltYWdlQ3JvcHBlcnM/LmZvckVhY2goaSA9PiB7IGkuaW1hZ2VMb2FkZWRJblZpZXcoKTsgfSlcclxuICAgICkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dDcm9wRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNwbGF5Q3JvcERpYWxvZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW1hZ2VDaGFuZ2VkKGV2ZW50OiB7IGZpbGVzOiBGaWxlW10gfSk6IHZvaWQge1xyXG4gICAgdGhpcy50ZW1wSW1hZ2VGaWxlID0gZXZlbnQuZmlsZXNbMF07XHJcbiAgICB0aGlzLnNob3dDcm9wRGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JvcHBlZEltYWdlQ2hhbmdlZChldmVudDogSW1hZ2VDcm9wcGVkRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMudGVtcENyb3BwZWRVcmkgPSBldmVudC5iYXNlNjQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWNjZXB0Q3JvcHBlZEltYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy51cmkgPSB0aGlzLnRlbXBDcm9wcGVkVXJpO1xyXG4gICAgdGhpcy5vbkNoYW5nZT8uKHRoaXMudXJpKTtcclxuICAgIHRoaXMuY2xvc2VDcm9wRGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VDcm9wRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlVXBsb2Fkcz8uZm9yRWFjaChmID0+IGYuY2xlYXIoKSk7XHJcbiAgICB0aGlzLmRpc3BsYXlDcm9wRGlhbG9nID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gIDxwLWJ1dHRvbiAqbmdJZj1cIiF1cmlcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiIGljb249XCJwaSBwaS1kb3dubG9hZFwiIGNsYXNzPVwibXItMVwiIHBUb29sdGlwPVwiTm8gaW1hZ2UgcHJlc2VudFwiPjwvcC1idXR0b24+XHJcbiAgPGEgKm5nSWY9XCJ1cmlcIiBbaHJlZl09XCJ1cmkgfCBzYWZlVXJsXCIgW2Rvd25sb2FkXT1cImZpbGVOYW1lIHx8ICdkb3dubG9hZCdcIiBjbGFzcz1cIm1yLTFcIiBwQnV0dG9uIHBUb29sdGlwPVwiRG93bmxvYWQgaW1hZ2VcIiBpY29uPVwicGkgcGktZG93bmxvYWRcIj48L2E+XHJcbiAgPHAtZmlsZVVwbG9hZCBjbGFzcz1cIm1yLTFcIiBjaG9vc2VJY29uPVwicGktdXBsb2FkIGZhcyBmYS11cGxvYWRcIiBtb2RlPVwiYmFzaWNcIiBbYXV0b109XCJ0cnVlXCIgW2FjY2VwdF09XCJhY2NlcHQgfHwgJ2ltYWdlLyonXCIgW2N1c3RvbVVwbG9hZF09XCJ0cnVlXCIgKHVwbG9hZEhhbmRsZXIpPVwiaW1hZ2VDaGFuZ2VkKCRldmVudClcIiBwVG9vbHRpcD1cIlVwbG9hZCBuZXcgaW1hZ2VcIj48L3AtZmlsZVVwbG9hZD5cclxuICA8aW1nICpuZ0lmPVwidXJpXCIgY2xhc3M9XCJ0aHVtYm5haWxcIiBbc3JjXT1cInVyaSB8IHNhZmVVcmxcIiBbYWx0XT1cImFsdFwiIChjbGljayk9XCJzaG93Q3JvcERpYWxvZygpXCIgcFRvb2x0aXA9XCJab29tIGFuZCBjcm9wXCIgLz5cclxuPC9kaXY+XHJcblxyXG48cC1kaWFsb2cgW2hlYWRlcl09XCJhbHQgPz8gJydcIiBbKHZpc2libGUpXT1cImRpc3BsYXlDcm9wRGlhbG9nXCI+XHJcbiAgPGltYWdlLWNyb3BwZXJcclxuICAgICAgICAgICAgICAgICAgW2F1dG9Dcm9wXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAoaW1hZ2VDcm9wcGVkKT1cImNyb3BwZWRJbWFnZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFthbGlnbkltYWdlXT1cImFsaWduSW1hZ2UgPz8gJ2NlbnRlcidcIlxyXG4gICAgICAgICAgICAgICAgICBbYXNwZWN0UmF0aW9dPVwiYXNwZWN0UmF0aW8gPz8gMVwiXHJcbiAgICAgICAgICAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiYmFja2dyb3VuZENvbG9yID8/IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICBbY2FudmFzUm90YXRpb25dPVwiY2FudmFzUm90YXRpb24gPz8gMFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjb250YWluV2l0aGluQXNwZWN0UmF0aW9dPVwiY29udGFpbldpdGhpbkFzcGVjdFJhdGlvID8/IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgW2Nyb3BwZXJdPVwiY3JvcHBlciA/PyB7IHgxOiAtMTAwLCB5MTogLTEwMCwgeDI6IDEwMDAwLCB5MjogMTAwMDAgfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjcm9wcGVyTWF4SGVpZ2h0XT1cImNyb3BwZXJNYXhIZWlnaHQgPz8gMFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjcm9wcGVyTWF4V2lkdGhdPVwiY3JvcHBlck1heFdpZHRoID8/IDBcIlxyXG4gICAgICAgICAgICAgICAgICBbY3JvcHBlck1pbkhlaWdodF09XCJjcm9wcGVyTWluSGVpZ2h0ID8/IDBcIlxyXG4gICAgICAgICAgICAgICAgICBbY3JvcHBlck1pbldpZHRoXT1cImNyb3BwZXJNaW5XaWR0aCA/PyAwXCJcclxuICAgICAgICAgICAgICAgICAgW2Nyb3BwZXJTdGF0aWNIZWlnaHRdPVwiY3JvcHBlclN0YXRpY0hlaWdodCA/PyAwXCJcclxuICAgICAgICAgICAgICAgICAgW2Nyb3BwZXJTdGF0aWNXaWR0aF09XCJjcm9wcGVyU3RhdGljV2lkdGggPz8gMFwiXHJcbiAgICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiZm9ybWF0ID8/ICdwbmcnXCJcclxuICAgICAgICAgICAgICAgICAgW2ltYWdlUXVhbGl0eV09XCJpbWFnZVF1YWxpdHkgPz8gOTJcIlxyXG4gICAgICAgICAgICAgICAgICBbaW5pdGlhbFN0ZXBTaXplXT1cImluaXRpYWxTdGVwU2l6ZSA/PyAzXCJcclxuICAgICAgICAgICAgICAgICAgW21haW50YWluQXNwZWN0UmF0aW9dPVwibWFpbnRhaW5Bc3BlY3RSYXRpbyA/PyB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW29ubHlTY2FsZURvd25dPVwib25seVNjYWxlRG93biA/PyBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZXNpemVUb1dpZHRoXT1cInJlc2l6ZVRvV2lkdGggPz8gMFwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZXNpemVUb0hlaWdodF09XCJyZXNpemVUb0hlaWdodCA/PyAwXCJcclxuICAgICAgICAgICAgICAgICAgW3JvdW5kQ3JvcHBlcl09XCJyb3VuZENyb3BwZXIgPz8gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICBbaW1hZ2VGaWxlXT1cInRlbXBJbWFnZUZpbGUhXCJcclxuICAgICAgICAgICAgICAgICAgW2ltYWdlVVJMXT1cInVyaSFcIlxyXG4gICAgICAgICAgICAgICAgID48L2ltYWdlLWNyb3BwZXI+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtYXV0byBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPHNwYW4+QmFja2dyb3VuZCBjb2xvcjombmJzcDs8L3NwYW4+XHJcbiAgICAgIDxwLWNvbG9yUGlja2VyIFsobmdNb2RlbCldPVwiYmFja2dyb3VuZENvbG9yXCIgYXBwZW5kVG89XCJib2R5XCIgY2xhc3M9XCJtbC0xIG1yLTFcIj48L3AtY29sb3JQaWNrZXI+XHJcbiAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IFsobmdNb2RlbCldPVwiYmFja2dyb3VuZENvbG9yXCIgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJhY2NlcHRDcm9wcGVkSW1hZ2UoKVwiIGNsYXNzPVwibXItMlwiPk9rPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cImNsb3NlQ3JvcERpYWxvZygpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvcC1kaWFsb2c+XHJcbiJdfQ==
|