@talrace/ngx-noder 0.0.2 → 0.0.3
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/esm2022/lib/+shared/add-link-dialog/add-link-dialog.component.mjs +67 -0
- package/esm2022/lib/+shared/editor/core/edit.session.mjs +7 -10
- package/esm2022/lib/+shared/editor/core/editor.mjs +7 -5
- package/esm2022/lib/+shared/editor/core/helpers/paragraph.helper.mjs +53 -16
- package/esm2022/lib/+shared/editor/core/helpers/position.helper.mjs +4 -1
- package/esm2022/lib/+shared/editor/core/models/line-info.model.mjs +1 -1
- package/esm2022/lib/+shared/editor/core/paging/pages.wrap.mjs +19 -12
- package/esm2022/lib/+shared/editor/core/paging/paragraph.mjs +3 -3
- package/esm2022/lib/+shared/editor/core/paging/text-line-info.mjs +3 -3
- package/esm2022/lib/+shared/editor/custom-components/external-element/models/external-element.model.mjs +3 -2
- package/esm2022/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.mjs +4 -3
- package/esm2022/lib/+shared/editor/custom-components/table/cell-resizer/cell-resizer.mjs +4 -4
- package/esm2022/lib/+shared/editor/custom-components/table/components/table.component.mjs +116 -10
- package/esm2022/lib/+shared/editor/custom-components/table/selection/table-selection.mjs +7 -1
- package/esm2022/lib/+shared/editor/editor.component.mjs +6 -4
- package/esm2022/lib/+shared/editor/execution/regulator.service.mjs +3 -3
- package/esm2022/lib/+shared/editor/operations/helpers/table-operations.helper.mjs +6 -3
- package/esm2022/lib/+shared/helpers/revision.helper.mjs +91 -0
- package/esm2022/lib/+shared/helpers/validation.helper.mjs +7 -0
- package/esm2022/lib/models/generated/cell.model.mjs +1 -1
- package/esm2022/public-api.mjs +5 -2
- package/fesm2022/talrace-ngx-noder.mjs +384 -79
- package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
- package/lib/+shared/add-link-dialog/add-link-dialog.component.d.ts +26 -0
- package/lib/+shared/editor/core/editor.d.ts +2 -1
- package/lib/+shared/editor/core/helpers/paragraph.helper.d.ts +5 -2
- package/lib/+shared/editor/core/models/line-info.model.d.ts +1 -0
- package/lib/+shared/editor/core/paging/pages.wrap.d.ts +6 -5
- package/lib/+shared/editor/core/paging/paragraph.d.ts +5 -2
- package/lib/+shared/editor/core/paging/text-line-info.d.ts +2 -0
- package/lib/+shared/editor/custom-components/external-element/models/external-element.model.d.ts +2 -1
- package/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.d.ts +2 -1
- package/lib/+shared/editor/custom-components/table/cell-resizer/cell-resizer.d.ts +1 -0
- package/lib/+shared/editor/custom-components/table/components/table.component.d.ts +18 -1
- package/lib/+shared/editor/editor.component.d.ts +2 -1
- package/lib/+shared/editor/execution/regulator.service.d.ts +1 -1
- package/lib/+shared/helpers/revision.helper.d.ts +15 -0
- package/lib/+shared/helpers/validation.helper.d.ts +5 -0
- package/lib/models/generated/cell.model.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +4 -1
- package/src/lib/+shared/confirm-dialog/_theme.scss +30 -0
- package/src/lib/+shared/editor/_theme.scss +7 -0
- package/src/lib/+shared/editor-toolbar/_theme.scss +7 -0
- package/src/scss/_fonts.scss +3 -0
- package/src/scss/_mixins.scss +49 -0
- package/src/scss/_variables.scss +1 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ReactiveFormsModule, Validators } from '@angular/forms';
|
|
4
|
+
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
5
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
6
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
7
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
8
|
+
import { MatInputModule } from '@angular/material/input';
|
|
9
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
10
|
+
import { ValidationHelper } from '../helpers/validation.helper';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/material/dialog";
|
|
13
|
+
import * as i2 from "@angular/forms";
|
|
14
|
+
import * as i3 from "@angular/material/button";
|
|
15
|
+
import * as i4 from "@angular/material/form-field";
|
|
16
|
+
import * as i5 from "@angular/material/icon";
|
|
17
|
+
import * as i6 from "@angular/material/input";
|
|
18
|
+
export class AddLinkDialogOptions {
|
|
19
|
+
constructor(fields) {
|
|
20
|
+
if (fields) {
|
|
21
|
+
Object.assign(this, fields);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class AddLinkDialogComponent {
|
|
26
|
+
constructor(dialogRef, data, fb) {
|
|
27
|
+
this.dialogRef = dialogRef;
|
|
28
|
+
this.data = data;
|
|
29
|
+
this.fb = fb;
|
|
30
|
+
dialogRef.disableClose = true;
|
|
31
|
+
this.form = this.fb.group({
|
|
32
|
+
text: [data.text, Validators.required],
|
|
33
|
+
link: [data.link, [Validators.required, ValidationHelper.urlValidator]]
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
onClose() {
|
|
37
|
+
this.dialogRef.close();
|
|
38
|
+
}
|
|
39
|
+
onApply() {
|
|
40
|
+
this.dialogRef.close({ text: this.form.controls.text.value, link: this.form.controls.link.value });
|
|
41
|
+
}
|
|
42
|
+
onEnter() {
|
|
43
|
+
if (this.form.invalid) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.onApply();
|
|
47
|
+
}
|
|
48
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: AddLinkDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
49
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: AddLinkDialogComponent, isStandalone: true, selector: "app-add-link-dialog", ngImport: i0, template: "<div mat-dialog-title>{{ data.title }}</div>\n<div\n mat-dialog-content\n [formGroup]=\"form\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ data.textPlaceholder }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.text\"\n (keydown.enter)=\"onEnter()\"\n required />\n <mat-error>The {{ data.textPlaceholder }} is required.</mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ data.linkPlaceholder }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.link\"\n (keydown.enter)=\"onEnter()\"\n required />\n <mat-error>The {{ data.linkPlaceholder }} is required.</mat-error>\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-cancel-thin\"></mat-icon>\n Cancel\n </button>\n <button\n mat-raised-button\n color=\"primary\"\n class=\"apply-btn\"\n [disabled]=\"form.invalid\"\n (click)=\"onApply()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-done-thin\"></mat-icon>\n Apply\n </button>\n</div>\n", styles: [":host{height:300px;width:430px;display:block;overflow:hidden}:host ::ng-deep .mdc-text-field--outlined{--mdc-outlined-text-field-container-shape: 12px;height:48px}:host ::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:12px}.mat-mdc-dialog-title{font-weight:600;padding-top:5px}mat-form-field{width:100%}.mat-mdc-dialog-content{padding-top:10px;padding-bottom:0}.mat-mdc-dialog-actions{display:flex;justify-content:center;align-items:center;padding-top:5px;height:25%}.mat-mdc-dialog-actions button{width:30%;height:100%;letter-spacing:1px;border-radius:8px}.mat-mdc-dialog-actions button .apply-btn{font-weight:400}.mat-mdc-dialog-actions button .mat-icon{font-size:24px;height:24px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
50
|
+
}
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: AddLinkDialogComponent, decorators: [{
|
|
52
|
+
type: Component,
|
|
53
|
+
args: [{ standalone: true, imports: [
|
|
54
|
+
CommonModule,
|
|
55
|
+
MatButtonModule,
|
|
56
|
+
MatDialogModule,
|
|
57
|
+
MatFormFieldModule,
|
|
58
|
+
MatIconModule,
|
|
59
|
+
MatInputModule,
|
|
60
|
+
ReactiveFormsModule,
|
|
61
|
+
TranslateModule
|
|
62
|
+
], selector: 'app-add-link-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div mat-dialog-title>{{ data.title }}</div>\n<div\n mat-dialog-content\n [formGroup]=\"form\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ data.textPlaceholder }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.text\"\n (keydown.enter)=\"onEnter()\"\n required />\n <mat-error>The {{ data.textPlaceholder }} is required.</mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ data.linkPlaceholder }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.link\"\n (keydown.enter)=\"onEnter()\"\n required />\n <mat-error>The {{ data.linkPlaceholder }} is required.</mat-error>\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-cancel-thin\"></mat-icon>\n Cancel\n </button>\n <button\n mat-raised-button\n color=\"primary\"\n class=\"apply-btn\"\n [disabled]=\"form.invalid\"\n (click)=\"onApply()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-done-thin\"></mat-icon>\n Apply\n </button>\n</div>\n", styles: [":host{height:300px;width:430px;display:block;overflow:hidden}:host ::ng-deep .mdc-text-field--outlined{--mdc-outlined-text-field-container-shape: 12px;height:48px}:host ::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:12px}.mat-mdc-dialog-title{font-weight:600;padding-top:5px}mat-form-field{width:100%}.mat-mdc-dialog-content{padding-top:10px;padding-bottom:0}.mat-mdc-dialog-actions{display:flex;justify-content:center;align-items:center;padding-top:5px;height:25%}.mat-mdc-dialog-actions button{width:30%;height:100%;letter-spacing:1px;border-radius:8px}.mat-mdc-dialog-actions button .apply-btn{font-weight:400}.mat-mdc-dialog-actions button .mat-icon{font-size:24px;height:24px}\n"] }]
|
|
63
|
+
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: AddLinkDialogOptions, decorators: [{
|
|
64
|
+
type: Inject,
|
|
65
|
+
args: [MAT_DIALOG_DATA]
|
|
66
|
+
}] }, { type: i2.FormBuilder }] });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWxpbmstZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliLytzaGFyZWQvYWRkLWxpbmstZGlhbG9nL2FkZC1saW5rLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi8rc2hhcmVkL2FkZC1saW5rLWRpYWxvZy9hZGQtbGluay1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBdUMsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7OztBQUVoRSxNQUFNLE9BQU8sb0JBQW9CO0lBTzdCLFlBQW1CLE1BQXNDO1FBQ3JELElBQUksTUFBTSxFQUFFO1lBQ1IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDL0I7SUFDTCxDQUFDO0NBQ0o7QUFtQkQsTUFBTSxPQUFPLHNCQUFzQjtJQUcvQixZQUNXLFNBQStDLEVBQ3RCLElBQTBCLEVBQ2xELEVBQWU7UUFGaEIsY0FBUyxHQUFULFNBQVMsQ0FBc0M7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBc0I7UUFDbEQsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUV2QixTQUFTLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3RCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN0QyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMxRSxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbkIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7OEdBN0JRLHNCQUFzQiw4Q0FLbkIsZUFBZTtrR0FMbEIsc0JBQXNCLCtFQzNDbkMsdzFDQTRDQSwweEJEZlEsWUFBWSw4QkFDWixlQUFlLDJOQUNmLGVBQWUseWJBQ2Ysa0JBQWtCLHVZQUNsQixhQUFhLG1MQUNiLGNBQWMsMFdBQ2QsbUJBQW1CLG1sQ0FDbkIsZUFBZTs7MkZBT1Ysc0JBQXNCO2tCQWpCbEMsU0FBUztpQ0FDTSxJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixlQUFlO3FCQUNsQixZQUNTLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNOzswQkFPMUMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ01vZHVsZSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmltcG9ydCB7IFZhbGlkYXRpb25IZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL3ZhbGlkYXRpb24uaGVscGVyJztcblxuZXhwb3J0IGNsYXNzIEFkZExpbmtEaWFsb2dPcHRpb25zIHtcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZztcbiAgICBwdWJsaWMgdGV4dDogc3RyaW5nO1xuICAgIHB1YmxpYyB0ZXh0UGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICBwdWJsaWMgbGluazogc3RyaW5nO1xuICAgIHB1YmxpYyBsaW5rUGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihmaWVsZHM/OiBQYXJ0aWFsPEFkZExpbmtEaWFsb2dPcHRpb25zPikge1xuICAgICAgICBpZiAoZmllbGRzKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGZpZWxkcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0RGlhbG9nTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGVcbiAgICBdLFxuICAgIHNlbGVjdG9yOiAnYXBwLWFkZC1saW5rLWRpYWxvZycsXG4gICAgdGVtcGxhdGVVcmw6ICdhZGQtbGluay1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydhZGQtbGluay1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBZGRMaW5rRGlhbG9nQ29tcG9uZW50IHtcbiAgICBmb3JtOiBGb3JtR3JvdXA8eyB0ZXh0OiBGb3JtQ29udHJvbDxzdHJpbmc+OyBsaW5rOiBGb3JtQ29udHJvbDxzdHJpbmc+IH0+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxBZGRMaW5rRGlhbG9nQ29tcG9uZW50PixcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBBZGRMaW5rRGlhbG9nT3B0aW9ucyxcbiAgICAgICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcbiAgICApIHtcbiAgICAgICAgZGlhbG9nUmVmLmRpc2FibGVDbG9zZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgdGV4dDogW2RhdGEudGV4dCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBsaW5rOiBbZGF0YS5saW5rLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdGlvbkhlbHBlci51cmxWYWxpZGF0b3JdXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIH1cblxuICAgIG9uQXBwbHkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHsgdGV4dDogdGhpcy5mb3JtLmNvbnRyb2xzLnRleHQudmFsdWUsIGxpbms6IHRoaXMuZm9ybS5jb250cm9scy5saW5rLnZhbHVlIH0pO1xuICAgIH1cblxuICAgIG9uRW50ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkFwcGx5KCk7XG4gICAgfVxufVxuIiwiPGRpdiBtYXQtZGlhbG9nLXRpdGxlPnt7IGRhdGEudGl0bGUgfX08L2Rpdj5cbjxkaXZcbiAgICBtYXQtZGlhbG9nLWNvbnRlbnRcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBkYXRhLnRleHRQbGFjZWhvbGRlciB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybS5jb250cm9scy50ZXh0XCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uRW50ZXIoKVwiXG4gICAgICAgICAgICByZXF1aXJlZCAvPlxuICAgICAgICA8bWF0LWVycm9yPlRoZSB7eyBkYXRhLnRleHRQbGFjZWhvbGRlciB9fSBpcyByZXF1aXJlZC48L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IGRhdGEubGlua1BsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtLmNvbnRyb2xzLmxpbmtcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25FbnRlcigpXCJcbiAgICAgICAgICAgIHJlcXVpcmVkIC8+XG4gICAgICAgIDxtYXQtZXJyb3I+VGhlIHt7IGRhdGEubGlua1BsYWNlaG9sZGVyIH19IGlzIHJlcXVpcmVkLjwvbWF0LWVycm9yPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAoY2xpY2spPVwib25DbG9zZSgpXCI+XG4gICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgZm9udFNldD1cIm5jLWljb25cIlxuICAgICAgICAgICAgZm9udEljb249XCJpY29uLWNhbmNlbC10aGluXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgQ2FuY2VsXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBjbGFzcz1cImFwcGx5LWJ0blwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAoY2xpY2spPVwib25BcHBseSgpXCI+XG4gICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgZm9udFNldD1cIm5jLWljb25cIlxuICAgICAgICAgICAgZm9udEljb249XCJpY29uLWRvbmUtdGhpblwiPjwvbWF0LWljb24+XG4gICAgICAgIEFwcGx5XG4gICAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
|