@firestitch/content 12.2.4 → 12.2.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. package/app/interfaces/content-config.d.ts +2 -0
  2. package/app/modules/content-layouts/components/content-layout-editor/content-layout-editor.component.d.ts +41 -0
  3. package/app/modules/content-layouts/components/content-layout-editor/index.d.ts +1 -0
  4. package/app/modules/content-layouts/components/index.d.ts +3 -0
  5. package/app/modules/content-layouts/fs-content-layouts.module.d.ts +21 -20
  6. package/app/modules/content-pages/components/content-page-editor/content-page-editor.component.d.ts +43 -0
  7. package/app/modules/content-pages/components/content-page-editor/index.d.ts +1 -0
  8. package/app/modules/content-pages/components/index.d.ts +3 -0
  9. package/app/modules/content-pages/fs-content-pages.module.d.ts +22 -20
  10. package/app/modules/editor/components/editor/editor.component.d.ts +15 -32
  11. package/bundles/firestitch-content.umd.js +397 -251
  12. package/bundles/firestitch-content.umd.js.map +1 -1
  13. package/esm2015/app/interfaces/content-config.js +1 -1
  14. package/esm2015/app/modules/content-layouts/components/content-layout-editor/content-layout-editor.component.js +95 -0
  15. package/esm2015/app/modules/content-layouts/components/content-layout-editor/index.js +2 -0
  16. package/esm2015/app/modules/content-layouts/components/content-layouts/content-layouts.component.js +4 -11
  17. package/esm2015/app/modules/content-layouts/components/index.js +4 -0
  18. package/esm2015/app/modules/content-layouts/fs-content-layouts.module.js +10 -7
  19. package/esm2015/app/modules/content-pages/components/content-page-editor/content-page-editor.component.js +99 -0
  20. package/esm2015/app/modules/content-pages/components/content-page-editor/index.js +2 -0
  21. package/esm2015/app/modules/content-pages/components/content-pages/content-pages.component.js +4 -11
  22. package/esm2015/app/modules/content-pages/components/index.js +4 -0
  23. package/esm2015/app/modules/content-pages/fs-content-pages.module.js +9 -2
  24. package/esm2015/app/modules/editor/components/editor/editor.component.js +41 -65
  25. package/fesm2015/firestitch-content.js +243 -105
  26. package/fesm2015/firestitch-content.js.map +1 -1
  27. package/package.json +1 -1
@@ -1,55 +1,37 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, } from '@angular/core';
2
- import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, } from '@angular/core';
3
2
  import { FsMessage } from '@firestitch/message';
4
3
  import { Subject } from 'rxjs';
5
- import { takeUntil, tap } from 'rxjs/operators';
6
4
  import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/material/dialog";
8
- import * as i2 from "@firestitch/message";
9
- import * as i3 from "@firestitch/dialog";
10
- import * as i4 from "@angular/material/button";
11
- import * as i5 from "@angular/material/icon";
12
- import * as i6 from "angular-split";
13
- import * as i7 from "@firestitch/label";
14
- import * as i8 from "@firestitch/text-editor";
15
- import * as i9 from "@firestitch/form";
16
- import * as i10 from "@angular/material/button-toggle";
17
- import * as i11 from "@angular/forms";
18
- import * as i12 from "@firestitch/common";
19
- import * as i13 from "@firestitch/skeleton";
5
+ import * as i1 from "@firestitch/message";
6
+ import * as i2 from "angular-split";
7
+ import * as i3 from "@firestitch/label";
8
+ import * as i4 from "@firestitch/text-editor";
9
+ import * as i5 from "@angular/forms";
10
+ import * as i6 from "@firestitch/form";
11
+ import * as i7 from "@firestitch/common";
12
+ import * as i8 from "@firestitch/skeleton";
20
13
  export class EditorComponent {
21
- constructor(_data, _dialogRef, _message, _cdRef) {
22
- this._data = _data;
23
- this._dialogRef = _dialogRef;
14
+ constructor(_message, _cdRef) {
24
15
  this._message = _message;
25
16
  this._cdRef = _cdRef;
17
+ this.showHtml = false;
18
+ this.showScss = false;
19
+ this.showJs = false;
20
+ this.showGlobalScss = false;
21
+ this.changed = new EventEmitter();
26
22
  this.resizing = false;
27
- this.editors = {
28
- html: true,
29
- scss: true,
30
- js: false,
31
- globalScss: false,
32
- };
33
23
  this._destroy$ = new Subject();
34
24
  }
35
25
  ngOnInit() {
36
- this._dialogRef.addPanelClass('fs-content-editor-overlay-pane');
37
- this.title = this._data.title;
38
- this.contentPage = this._data.contentPage;
39
- this._config = this._data.contentConfig;
40
- this._save = this._data.save;
41
26
  this.initTextEditors();
42
27
  this.initGlobalContentStyle();
43
28
  }
44
- editorToggleChange(event) {
45
- this.editors[event.value] = !this.editors[event.value];
46
- }
47
29
  ngOnDestroy() {
48
30
  this._destroy$.next();
49
31
  this._destroy$.complete();
50
32
  }
51
33
  globalScssChange() {
52
- this._config.saveContentStyle(this.contentStyle)
34
+ this.contentConfig.saveContentStyle(this.contentStyle)
53
35
  .subscribe((contentStyle) => {
54
36
  this.contentStyle = contentStyle;
55
37
  this._message.success('Saved Changes');
@@ -79,46 +61,40 @@ export class EditorComponent {
79
61
  };
80
62
  }
81
63
  initGlobalContentStyle() {
82
- this._config.loadContentStyle()
64
+ this.contentConfig.loadContentStyle()
83
65
  .subscribe((contentStyle) => {
84
- this.contentStyle = contentStyle;
85
- this._cdRef.markForCheck();
86
- });
87
- }
88
- saveContentPage() {
89
- this._save({
90
- id: this.contentPage.id,
91
- styles: this.contentPage.styles,
92
- content: this.contentPage.content,
93
- js: this.contentPage.js,
94
- })
95
- .pipe(tap((contentPage) => {
96
- this.contentPage = Object.assign(Object.assign({}, this.contentPage), contentPage);
97
- this._cdRef.markForCheck();
98
- this._message.success('Saved Changes');
99
- }))
100
- .subscribe();
101
- }
102
- openSettings() {
103
- this._data.openSettings(this.contentPage)
104
- .pipe(takeUntil(this._destroy$))
105
- .subscribe((contentPage) => {
106
- this.contentPage = Object.assign(Object.assign({}, this.contentPage), contentPage);
66
+ this.contentStyle = contentStyle || {};
107
67
  this._cdRef.markForCheck();
108
68
  });
109
69
  }
110
70
  }
111
- EditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EditorComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2.FsMessage }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
112
- EditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: EditorComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>\n <div class=\"title-container\">\n <div class=\"title\">\n {{title}}\n <div class=\"small\">{{contentPage.name}}</div> \n </div>\n <a\n (click)=\"openSettings()\"\n mat-icon-button>\n <mat-icon>settings</mat-icon>\n </a> \n </div>\n </h1>\n <div mat-dialog-content>\n <div class=\"container\">\n <as-split [unit]=\"'percent'\" [gutterSize]=\"25\"> \n <as-split-area [size]=\"70\" [visible]=\"editors.html\" [order]=\"1\">\n <div class=\"editor-container\">\n <fs-label>HTML</fs-label>\n <fs-text-editor \n [(ngModel)]=\"contentPage.content\" \n name=\"html\"\n [fsModelChangeOptions]=\"{ debounce: 300 }\"\n (fsModelChange)=\"saveContentPage()\"\n [config]=\"htmlConfig\">\n </fs-text-editor> \n </div>\n </as-split-area>\n <as-split-area [size]=\"30\" [visible]=\"editors.scss\" [order]=\"2\">\n <div class=\"editor-container\">\n <fs-label>SCSS</fs-label>\n <fs-text-editor \n [(ngModel)]=\"contentPage.styles\" \n name=\"scss\"\n [fsModelChangeOptions]=\"{ debounce: 300 }\"\n (fsModelChange)=\"saveContentPage()\"\n [config]=\"scssConfig\">\n </fs-text-editor> \n </div>\n </as-split-area>\n <as-split-area [size]=\"30\" [visible]=\"editors.js\" [order]=\"3\">\n <div class=\"editor-container\">\n <fs-label>JS</fs-label>\n <fs-text-editor \n [(ngModel)]=\"contentPage.js\" \n name=\"js\"\n [fsModelChangeOptions]=\"{ debounce: 300 }\"\n (fsModelChange)=\"saveContentPage()\"\n [config]=\"jsConfig\">\n </fs-text-editor> \n </div>\n </as-split-area>\n <as-split-area [size]=\"30\" [visible]=\"editors.globalScss\" [order]=\"4\">\n <div class=\"editor-container\">\n <fs-label>Global SCSS</fs-label>\n <ng-container *fsSkeleton=\"contentStyle\">\n <fs-text-editor \n [(ngModel)]=\"contentStyle.scss\" \n name=\"globalScss\"\n [fsModelChangeOptions]=\"{ debounce: 300 }\"\n (fsModelChange)=\"globalScssChange()\"\n [config]=\"globalScssConfig\">\n </fs-text-editor> \n </ng-container> \n </div>\n </as-split-area>\n </as-split>\n </div>\n </div>\n\n <div mat-dialog-actions>\n <fs-form-dialog-actions\n [save]=\"false\"\n [done]=\"true\">\n </fs-form-dialog-actions>\n <div class=\"toggles\">\n <mat-button-toggle-group multiple>\n <mat-button-toggle value=\"html\" [checked]=\"editors.html\" (change)=\"editorToggleChange($event)\">HTML</mat-button-toggle>\n <mat-button-toggle value=\"scss\" [checked]=\"editors.scss\" (change)=\"editorToggleChange($event)\">SCSS</mat-button-toggle>\n <mat-button-toggle value=\"js\" [checked]=\"editors.js\" (change)=\"editorToggleChange($event)\">JS</mat-button-toggle>\n <mat-button-toggle value=\"globalScss\" [checked]=\"editors.globalScss\" (change)=\"editorToggleChange($event)\">Global SCSS</mat-button-toggle>\n </mat-button-toggle-group> \n </div>\n </div>\n</fs-dialog>\n\n", styles: ["::ng-deep .fs-content-editor-overlay-pane .mat-dialog-container{border-radius:0}:host ::ng-deep .as-split-gutter{background-color:unset!important}fs-dialog{display:flex;height:100%;flex-direction:column}fs-dialog ::ng-deep .mat-dialog-content{max-height:none;flex:1;overflow:hidden}.mat-dialog-actions fs-form-dialog-actions{width:auto}.mat-dialog-actions .toggles{display:flex;justify-content:flex-end;justify-self:baseline;flex:1}.container{height:100%;display:flex;flex-direction:column}.editor-container{height:100%;border-radius:5px;display:flex;flex-direction:column}.editor-container fs-text-editor{flex:1}.title-container{display:flex;align-items:center}.title-container .title{flex:1}.title-container .title .small{line-height:normal}\n"], components: [{ type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileActionPlacement", "mobileWidth", "mode"] }, { type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.SplitComponent, selector: "as-split", inputs: ["direction", "unit", "gutterSize", "gutterStep", "restrictMove", "useTransition", "disabled", "dir", "gutterDblClickDuration", "gutterClickDeltaPx", "gutterAriaLabel"], outputs: ["transitionEnd", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"], exportAs: ["asSplit"] }, { type: i7.FsLabelComponent, selector: "fs-label" }, { type: i8.FsTextEditorComponent, selector: "fs-text-editor", inputs: ["config", "scrollable"], outputs: ["ready", "blur"] }, { type: i9.FsFormDialogActionsComponent, selector: "fs-form-dialog-actions", inputs: ["save", "create", "close", "done", "closeData", "name"] }, { type: i10.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i6.SplitAreaDirective, selector: "as-split-area, [as-split-area]", inputs: ["order", "size", "minSize", "maxSize", "lockSize", "visible"], exportAs: ["asSplitArea"] }, { type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { type: i12.FsModelChangeDirective, selector: "[fsModelChange]", inputs: ["fsModelChangeOptions"], outputs: ["fsModelChange"] }, { type: i13.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i10.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
71
+ EditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EditorComponent, deps: [{ token: i1.FsMessage }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
72
+ EditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: EditorComponent, selector: "app-editor", inputs: { showHtml: "showHtml", showScss: "showScss", showJs: "showJs", showGlobalScss: "showGlobalScss", html: "html", scss: "scss", js: "js", contentConfig: "contentConfig" }, outputs: { changed: "changed" }, ngImport: i0, template: "<as-split [unit]=\"'percent'\" [gutterSize]=\"25\"> \n <as-split-area [size]=\"70\" [visible]=\"showHtml\" [order]=\"1\">\n <div class=\"editor-container\">\n <fs-label>HTML</fs-label>\n <fs-text-editor \n [(ngModel)]=\"html\" \n name=\"html\"\n [fsModelChangeOptions]=\"{ debounce: 300 }\"\n (fsModelChange)=\"changed.emit({ type: 'html', value: $event })\"\n [config]=\"htmlConfig\">\n </fs-text-editor> \n </div>\n </as-split-area>\n <as-split-area [size]=\"30\" [visible]=\"showScss\" [order]=\"2\">\n <div class=\"editor-container\">\n <fs-label>SCSS</fs-label>\n <fs-text-editor \n [(ngModel)]=\"scss\" \n name=\"scss\"\n [fsModelChangeOptions]=\"{ debounce: 300 }\"\n (fsModelChange)=\"changed.emit({ type: 'scss', value: $event })\"\n [config]=\"scssConfig\">\n </fs-text-editor> \n </div>\n </as-split-area>\n <as-split-area [size]=\"30\" [visible]=\"showJs\" [order]=\"3\">\n <div class=\"editor-container\">\n <fs-label>JS</fs-label>\n <fs-text-editor \n [(ngModel)]=\"js\" \n name=\"js\"\n [fsModelChangeOptions]=\"{ debounce: 300 }\"\n (fsModelChange)=\"changed.emit({ type: 'js', value: $event })\"\n [config]=\"jsConfig\">\n </fs-text-editor> \n </div>\n </as-split-area>\n <as-split-area [size]=\"30\" [visible]=\"showGlobalScss\" [order]=\"4\">\n <div class=\"editor-container\">\n <fs-label>Global SCSS</fs-label>\n <ng-container *fsSkeleton=\"contentStyle\">\n <fs-text-editor \n [(ngModel)]=\"contentStyle.scss\" \n name=\"globalScss\"\n [fsModelChangeOptions]=\"{ debounce: 300 }\"\n (fsModelChange)=\"globalScssChange()\"\n [config]=\"globalScssConfig\">\n </fs-text-editor> \n </ng-container> \n </div>\n </as-split-area>\n</as-split>\n", styles: [":host ::ng-deep .as-split-gutter{background-color:unset!important}.editor-container{height:100%;border-radius:5px;display:flex;flex-direction:column}.editor-container fs-text-editor{flex:1}\n"], components: [{ type: i2.SplitComponent, selector: "as-split", inputs: ["direction", "unit", "gutterSize", "gutterStep", "restrictMove", "useTransition", "disabled", "dir", "gutterDblClickDuration", "gutterClickDeltaPx", "gutterAriaLabel"], outputs: ["transitionEnd", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"], exportAs: ["asSplit"] }, { type: i3.FsLabelComponent, selector: "fs-label" }, { type: i4.FsTextEditorComponent, selector: "fs-text-editor", inputs: ["config", "scrollable"], outputs: ["ready", "blur"] }], directives: [{ type: i2.SplitAreaDirective, selector: "as-split-area, [as-split-area]", inputs: ["order", "size", "minSize", "maxSize", "lockSize", "visible"], exportAs: ["asSplitArea"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i6.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { type: i7.FsModelChangeDirective, selector: "[fsModelChange]", inputs: ["fsModelChangeOptions"], outputs: ["fsModelChange"] }, { type: i8.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
113
73
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EditorComponent, decorators: [{
114
74
  type: Component,
115
75
  args: [{
76
+ selector: 'app-editor',
116
77
  templateUrl: './editor.component.html',
117
78
  styleUrls: ['./editor.component.scss'],
118
79
  changeDetection: ChangeDetectionStrategy.OnPush,
119
80
  }]
120
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
121
- type: Inject,
122
- args: [MAT_DIALOG_DATA]
123
- }] }, { type: i1.MatDialogRef }, { type: i2.FsMessage }, { type: i0.ChangeDetectorRef }]; } });
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxNQUFNLEdBR1AsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFJaEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFVaEQsTUFBTSxPQUFPLGVBQWU7SUFnQzFCLFlBQ21DLEtBTWhDLEVBQ08sVUFBeUMsRUFDekMsUUFBbUIsRUFDbkIsTUFBeUI7UUFUQSxVQUFLLEdBQUwsS0FBSyxDQU1yQztRQUNPLGVBQVUsR0FBVixVQUFVLENBQStCO1FBQ3pDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUE1QjVCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsWUFBTyxHQUFHO1lBQ2YsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsSUFBSTtZQUNWLEVBQUUsRUFBRSxLQUFLO1lBQ1QsVUFBVSxFQUFFLEtBQUs7U0FDbEIsQ0FBQztRQVFNLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBY3JDLENB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QUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVNLFlBQVk7UUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUN0QyxJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsV0FBVyxtQ0FDWCxJQUFJLENBQUMsV0FBVyxHQUNoQixXQUFXLENBQ2YsQ0FBQztZQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs2R0F4SVUsZUFBZSxrQkFpQ2hCLGVBQWU7aUdBakNkLGVBQWUsb0RDM0I1Qix1NkdBdUZBOzRGRDVEYSxlQUFlO2tCQUwzQixTQUFTO21CQUFDO29CQUNULFdBQVcsRUFBRSx5QkFBeUI7b0JBQ3RDLFNBQVMsRUFBRSxDQUFDLHlCQUF5QixDQUFDO29CQUN0QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OzBCQWtDSSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5qZWN0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZUNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzVGV4dEVkaXRvckNvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL3RleHQtZWRpdG9yJztcblxuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRnNDb250ZW50Q29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgY29udGVudFBhZ2U6IHtcbiAgICBpZD86IG51bWJlcjtcbiAgICBzdHlsZXM/OiBzdHJpbmc7XG4gICAgY29udGVudD86IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIGpzPzogc3RyaW5nO1xuICB9O1xuXG4gIHB1YmxpYyBjb250ZW50U3R5bGU6IHtcbiAgICBzY3NzPzogc3RyaW5nO1xuICB9O1xuXG4gIHB1YmxpYyByZXNpemluZyA9IGZhbHNlO1xuICBwdWJsaWMgdGl0bGU7XG4gIHB1YmxpYyBlZGl0b3JzID0ge1xuICAgIGh0bWw6IHRydWUsXG4gICAgc2NzczogdHJ1ZSxcbiAgICBqczogZmFsc2UsXG4gICAgZ2xvYmFsU2NzczogZmFsc2UsXG4gIH07XG5cbiAgcHVibGljIHNjc3NDb25maWc6IEZzVGV4dEVkaXRvckNvbmZpZztcbiAgcHVibGljIGdsb2JhbFNjc3NDb25maWc6IEZzVGV4dEVkaXRvckNvbmZpZztcbiAgcHVibGljIGh0bWxDb25maWc6IEZzVGV4dEVkaXRvckNvbmZpZztcbiAgcHVibGljIGpzQ29uZmlnOiBGc1RleHRFZGl0b3JDb25maWc7XG5cbiAgcHJpdmF0ZSBfY29uZmlnOiBGc0NvbnRlbnRDb25maWc7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfc2F2ZTogKGRhdGEpID0+IE9ic2VydmFibGU8YW55PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBfZGF0YToge1xuICAgICAgY29udGVudFBhZ2U6IGFueTtcbiAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICBzYXZlOiAoZGF0YSkgPT4gT2JzZXJ2YWJsZTxhbnk+O1xuICAgICAgb3BlblNldHRpbmdzOiAoZGF0YSkgPT4gT2JzZXJ2YWJsZTxhbnk+O1xuICAgICAgY29udGVudENvbmZpZzogRnNDb250ZW50Q29uZmlnO1xuICAgIH0sXG4gICAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RWRpdG9yQ29tcG9uZW50PixcbiAgICBwcml2YXRlIF9tZXNzYWdlOiBGc01lc3NhZ2UsXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2RpYWxvZ1JlZi5hZGRQYW5lbENsYXNzKCdmcy1jb250ZW50LWVkaXRvci1vdmVybGF5LXBhbmUnKTtcbiAgICB0aGlzLnRpdGxlID0gdGhpcy5fZGF0YS50aXRsZTtcbiAgICB0aGlzLmNvbnRlbnRQYWdlID0gdGhpcy5fZGF0YS5jb250ZW50UGFnZTtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9kYXRhLmNvbnRlbnRDb25maWc7XG4gICAgdGhpcy5fc2F2ZSA9IHRoaXMuX2RhdGEuc2F2ZTtcbiAgICB0aGlzLmluaXRUZXh0RWRpdG9ycygpO1xuICAgIHRoaXMuaW5pdEdsb2JhbENvbnRlbnRTdHlsZSgpO1xuICB9XG5cbiAgcHVibGljIGVkaXRvclRvZ2dsZUNoYW5nZShldmVudDogTWF0QnV0dG9uVG9nZ2xlQ2hhbmdlKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3JzW2V2ZW50LnZhbHVlXSA9ICF0aGlzLmVkaXRvcnNbZXZlbnQudmFsdWVdO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGdsb2JhbFNjc3NDaGFuZ2UoKSB7XG4gICAgdGhpcy5fY29uZmlnLnNhdmVDb250ZW50U3R5bGUodGhpcy5jb250ZW50U3R5bGUpXG4gICAgICAuc3Vic2NyaWJlKChjb250ZW50U3R5bGUpID0+IHtcbiAgICAgICAgdGhpcy5jb250ZW50U3R5bGUgPSBjb250ZW50U3R5bGU7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU2F2ZWQgQ2hhbmdlcycpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGluaXRUZXh0RWRpdG9ycygpIHtcbiAgICB0aGlzLnNjc3NDb25maWcgPSB7XG4gICAgICB0YWJTaXplOiAyLFxuICAgICAgbGFuZ3VhZ2U6ICdzY3NzJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgIH07XG4gICAgdGhpcy5qc0NvbmZpZyA9IHtcbiAgICAgIHRhYlNpemU6IDIsXG4gICAgICBsYW5ndWFnZTogJ2pzJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgIH07XG4gICAgdGhpcy5odG1sQ29uZmlnID0ge1xuICAgICAgdGFiU2l6ZTogMixcbiAgICAgIGxhbmd1YWdlOiAnaHRtbCcsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB9O1xuICAgIHRoaXMuZ2xvYmFsU2Nzc0NvbmZpZyA9IHtcbiAgICAgIHRhYlNpemU6IDIsXG4gICAgICBsYW5ndWFnZTogJ3Njc3MnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0R2xvYmFsQ29udGVudFN0eWxlKCkge1xuICAgIHRoaXMuX2NvbmZpZy5sb2FkQ29udGVudFN0eWxlKClcbiAgICAgIC5zdWJzY3JpYmUoKGNvbnRlbnRTdHlsZSkgPT4ge1xuICAgICAgICB0aGlzLmNvbnRlbnRTdHlsZSA9IGNvbnRlbnRTdHlsZTtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlQ29udGVudFBhZ2UoKSB7XG4gICAgdGhpcy5fc2F2ZSh7XG4gICAgICBpZDogdGhpcy5jb250ZW50UGFnZS5pZCxcbiAgICAgIHN0eWxlczogdGhpcy5jb250ZW50UGFnZS5zdHlsZXMsXG4gICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnRQYWdlLmNvbnRlbnQsXG4gICAgICBqczogdGhpcy5jb250ZW50UGFnZS5qcyxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoY29udGVudFBhZ2UpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbnRlbnRQYWdlID0ge1xuICAgICAgICAgICAgLi4udGhpcy5jb250ZW50UGFnZSxcbiAgICAgICAgICAgIC4uLmNvbnRlbnRQYWdlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTYXZlZCBDaGFuZ2VzJyk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9wZW5TZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLl9kYXRhLm9wZW5TZXR0aW5ncyh0aGlzLmNvbnRlbnRQYWdlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChjb250ZW50UGFnZSkgPT4ge1xuICAgICAgICB0aGlzLmNvbnRlbnRQYWdlID0ge1xuICAgICAgICAgIC4uLnRoaXMuY29udGVudFBhZ2UsXG4gICAgICAgICAgLi4uY29udGVudFBhZ2UsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxufVxuIiwiPGZzLWRpYWxvZz5cbiAgPGgxIG1hdC1kaWFsb2ctdGl0bGU+XG4gICAgPGRpdiBjbGFzcz1cInRpdGxlLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgIHt7dGl0bGV9fVxuICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGxcIj57e2NvbnRlbnRQYWdlLm5hbWV9fTwvZGl2PiAgIFxuICAgICAgPC9kaXY+XG4gICAgICA8YVxuICAgICAgICAgIChjbGljayk9XCJvcGVuU2V0dGluZ3MoKVwiXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uPlxuICAgICAgICA8bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPlxuICAgICAgPC9hPiAgIFxuICAgIDwvZGl2PlxuICA8L2gxPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICA8YXMtc3BsaXQgW3VuaXRdPVwiJ3BlcmNlbnQnXCIgW2d1dHRlclNpemVdPVwiMjVcIj4gXG4gICAgICAgIDxhcy1zcGxpdC1hcmVhIFtzaXplXT1cIjcwXCIgW3Zpc2libGVdPVwiZWRpdG9ycy5odG1sXCIgW29yZGVyXT1cIjFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGZzLWxhYmVsPkhUTUw8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgPGZzLXRleHQtZWRpdG9yIFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbnRlbnRQYWdlLmNvbnRlbnRcIiBcbiAgICAgICAgICAgICAgbmFtZT1cImh0bWxcIlxuICAgICAgICAgICAgICBbZnNNb2RlbENoYW5nZU9wdGlvbnNdPVwieyBkZWJvdW5jZTogMzAwIH1cIlxuICAgICAgICAgICAgICAoZnNNb2RlbENoYW5nZSk9XCJzYXZlQ29udGVudFBhZ2UoKVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwiaHRtbENvbmZpZ1wiPlxuICAgICAgICAgICAgPC9mcy10ZXh0LWVkaXRvcj4gICAgICAgICAgICAgIFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FzLXNwbGl0LWFyZWE+XG4gICAgICAgIDxhcy1zcGxpdC1hcmVhIFtzaXplXT1cIjMwXCIgW3Zpc2libGVdPVwiZWRpdG9ycy5zY3NzXCIgW29yZGVyXT1cIjJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGZzLWxhYmVsPlNDU1M8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgPGZzLXRleHQtZWRpdG9yIFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbnRlbnRQYWdlLnN0eWxlc1wiIFxuICAgICAgICAgICAgICBuYW1lPVwic2Nzc1wiXG4gICAgICAgICAgICAgIFtmc01vZGVsQ2hhbmdlT3B0aW9uc109XCJ7IGRlYm91bmNlOiAzMDAgfVwiXG4gICAgICAgICAgICAgIChmc01vZGVsQ2hhbmdlKT1cInNhdmVDb250ZW50UGFnZSgpXCJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJzY3NzQ29uZmlnXCI+XG4gICAgICAgICAgICA8L2ZzLXRleHQtZWRpdG9yPiAgICBcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcy1zcGxpdC1hcmVhPlxuICAgICAgICA8YXMtc3BsaXQtYXJlYSBbc2l6ZV09XCIzMFwiICBbdmlzaWJsZV09XCJlZGl0b3JzLmpzXCIgW29yZGVyXT1cIjNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGZzLWxhYmVsPkpTPC9mcy1sYWJlbD5cbiAgICAgICAgICAgIDxmcy10ZXh0LWVkaXRvciBcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb250ZW50UGFnZS5qc1wiIFxuICAgICAgICAgICAgICBuYW1lPVwianNcIlxuICAgICAgICAgICAgICBbZnNNb2RlbENoYW5nZU9wdGlvbnNdPVwieyBkZWJvdW5jZTogMzAwIH1cIlxuICAgICAgICAgICAgICAoZnNNb2RlbENoYW5nZSk9XCJzYXZlQ29udGVudFBhZ2UoKVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwianNDb25maWdcIj5cbiAgICAgICAgICAgIDwvZnMtdGV4dC1lZGl0b3I+ICAgIFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FzLXNwbGl0LWFyZWE+XG4gICAgICAgIDxhcy1zcGxpdC1hcmVhIFtzaXplXT1cIjMwXCIgW3Zpc2libGVdPVwiZWRpdG9ycy5nbG9iYWxTY3NzXCIgW29yZGVyXT1cIjRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGZzLWxhYmVsPkdsb2JhbCBTQ1NTPC9mcy1sYWJlbD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmZzU2tlbGV0b249XCJjb250ZW50U3R5bGVcIj5cbiAgICAgICAgICAgICAgPGZzLXRleHQtZWRpdG9yIFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29udGVudFN0eWxlLnNjc3NcIiBcbiAgICAgICAgICAgICAgICBuYW1lPVwiZ2xvYmFsU2Nzc1wiXG4gICAgICAgICAgICAgICAgW2ZzTW9kZWxDaGFuZ2VPcHRpb25zXT1cInsgZGVib3VuY2U6IDMwMCB9XCJcbiAgICAgICAgICAgICAgICAoZnNNb2RlbENoYW5nZSk9XCJnbG9iYWxTY3NzQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgIFtjb25maWddPVwiZ2xvYmFsU2Nzc0NvbmZpZ1wiPlxuICAgICAgICAgICAgICA8L2ZzLXRleHQtZWRpdG9yPiBcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgIFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FzLXNwbGl0LWFyZWE+XG4gICAgICA8L2FzLXNwbGl0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8ZnMtZm9ybS1kaWFsb2ctYWN0aW9uc1xuICAgICAgW3NhdmVdPVwiZmFsc2VcIlxuICAgICAgW2RvbmVdPVwidHJ1ZVwiPlxuICAgIDwvZnMtZm9ybS1kaWFsb2ctYWN0aW9ucz5cbiAgICA8ZGl2IGNsYXNzPVwidG9nZ2xlc1wiPlxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIG11bHRpcGxlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJodG1sXCIgW2NoZWNrZWRdPVwiZWRpdG9ycy5odG1sXCIgKGNoYW5nZSk9XCJlZGl0b3JUb2dnbGVDaGFuZ2UoJGV2ZW50KVwiPkhUTUw8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJzY3NzXCIgW2NoZWNrZWRdPVwiZWRpdG9ycy5zY3NzXCIgKGNoYW5nZSk9XCJlZGl0b3JUb2dnbGVDaGFuZ2UoJGV2ZW50KVwiPlNDU1M8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJqc1wiIFtjaGVja2VkXT1cImVkaXRvcnMuanNcIiAoY2hhbmdlKT1cImVkaXRvclRvZ2dsZUNoYW5nZSgkZXZlbnQpXCI+SlM8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJnbG9iYWxTY3NzXCIgW2NoZWNrZWRdPVwiZWRpdG9ycy5nbG9iYWxTY3NzXCIgKGNoYW5nZSk9XCJlZGl0b3JUb2dnbGVDaGFuZ2UoJGV2ZW50KVwiPkdsb2JhbCBTQ1NTPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+ICAgICAgXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mcy1kaWFsb2c+XG5cbiJdfQ==
81
+ }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { showHtml: [{
82
+ type: Input
83
+ }], showScss: [{
84
+ type: Input
85
+ }], showJs: [{
86
+ type: Input
87
+ }], showGlobalScss: [{
88
+ type: Input
89
+ }], html: [{
90
+ type: Input
91
+ }], scss: [{
92
+ type: Input
93
+ }], js: [{
94
+ type: Input
95
+ }], contentConfig: [{
96
+ type: Input
97
+ }], changed: [{
98
+ type: Output
99
+ }] } });
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFJaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7OztBQVcvQixNQUFNLE9BQU8sZUFBZTtJQTRCMUIsWUFDVSxRQUFtQixFQUNuQixNQUF5QjtRQUR6QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBNUJuQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBT3RCLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBbUMsQ0FBQztRQU14RSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBUWhCLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBS3JDLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzthQUNuRCxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztZQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixPQUFPLEVBQUUsQ0FBQztZQUNWLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxPQUFPLEVBQUUsQ0FBQztZQUNWLFFBQVEsRUFBRSxJQUFJO1lBQ2QsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixPQUFPLEVBQUUsQ0FBQztZQUNWLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRztZQUN0QixPQUFPLEVBQUUsQ0FBQztZQUNWLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQztJQUNKLENBQUM7SUFFTSxzQkFBc0I7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRTthQUNsQyxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OzZHQWpGVSxlQUFlO2lHQUFmLGVBQWUscVFDM0I1QixtNURBb0RBOzRGRHpCYSxlQUFlO2tCQU4zQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixXQUFXLEVBQUUseUJBQXlCO29CQUN0QyxTQUFTLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztvQkFDdEMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEO2dJQUdpQixRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxjQUFjO3NCQUE3QixLQUFLO2dCQUVVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxFQUFFO3NCQUFqQixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBRVcsT0FBTztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzVGV4dEVkaXRvckNvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL3RleHQtZWRpdG9yJztcblxuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZzQ29udGVudENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgcHVibGljIHNob3dIdG1sID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93U2NzcyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd0pzID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93R2xvYmFsU2NzcyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBodG1sO1xuICBASW5wdXQoKSBwdWJsaWMgc2NzcztcbiAgQElucHV0KCkgcHVibGljIGpzIDtcbiAgQElucHV0KCkgcHVibGljIGNvbnRlbnRDb25maWc6IEZzQ29udGVudENvbmZpZztcblxuICBAT3V0cHV0KCkgcHVibGljIGNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdHlwZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+KCk7XG5cbiAgcHVibGljIGNvbnRlbnRTdHlsZToge1xuICAgIHNjc3M/OiBzdHJpbmc7XG4gIH07XG5cbiAgcHVibGljIHJlc2l6aW5nID0gZmFsc2U7XG4gIHB1YmxpYyB0aXRsZTtcblxuICBwdWJsaWMgc2Nzc0NvbmZpZzogRnNUZXh0RWRpdG9yQ29uZmlnO1xuICBwdWJsaWMgZ2xvYmFsU2Nzc0NvbmZpZzogRnNUZXh0RWRpdG9yQ29uZmlnO1xuICBwdWJsaWMgaHRtbENvbmZpZzogRnNUZXh0RWRpdG9yQ29uZmlnO1xuICBwdWJsaWMganNDb25maWc6IEZzVGV4dEVkaXRvckNvbmZpZztcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfbWVzc2FnZTogRnNNZXNzYWdlLFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRUZXh0RWRpdG9ycygpO1xuICAgIHRoaXMuaW5pdEdsb2JhbENvbnRlbnRTdHlsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGdsb2JhbFNjc3NDaGFuZ2UoKSB7XG4gICAgdGhpcy5jb250ZW50Q29uZmlnLnNhdmVDb250ZW50U3R5bGUodGhpcy5jb250ZW50U3R5bGUpXG4gICAgICAuc3Vic2NyaWJlKChjb250ZW50U3R5bGUpID0+IHtcbiAgICAgICAgdGhpcy5jb250ZW50U3R5bGUgPSBjb250ZW50U3R5bGU7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU2F2ZWQgQ2hhbmdlcycpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGluaXRUZXh0RWRpdG9ycygpIHtcbiAgICB0aGlzLnNjc3NDb25maWcgPSB7XG4gICAgICB0YWJTaXplOiAyLFxuICAgICAgbGFuZ3VhZ2U6ICdzY3NzJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgIH07XG4gICAgdGhpcy5qc0NvbmZpZyA9IHtcbiAgICAgIHRhYlNpemU6IDIsXG4gICAgICBsYW5ndWFnZTogJ2pzJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgIH07XG4gICAgdGhpcy5odG1sQ29uZmlnID0ge1xuICAgICAgdGFiU2l6ZTogMixcbiAgICAgIGxhbmd1YWdlOiAnaHRtbCcsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB9O1xuICAgIHRoaXMuZ2xvYmFsU2Nzc0NvbmZpZyA9IHtcbiAgICAgIHRhYlNpemU6IDIsXG4gICAgICBsYW5ndWFnZTogJ3Njc3MnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0R2xvYmFsQ29udGVudFN0eWxlKCkge1xuICAgIHRoaXMuY29udGVudENvbmZpZy5sb2FkQ29udGVudFN0eWxlKClcbiAgICAgIC5zdWJzY3JpYmUoKGNvbnRlbnRTdHlsZSkgPT4ge1xuICAgICAgICB0aGlzLmNvbnRlbnRTdHlsZSA9IGNvbnRlbnRTdHlsZSB8fCB7fTtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG59XG4iLCI8YXMtc3BsaXQgW3VuaXRdPVwiJ3BlcmNlbnQnXCIgW2d1dHRlclNpemVdPVwiMjVcIj4gXG4gIDxhcy1zcGxpdC1hcmVhIFtzaXplXT1cIjcwXCIgW3Zpc2libGVdPVwic2hvd0h0bWxcIiBbb3JkZXJdPVwiMVwiPlxuICAgIDxkaXYgY2xhc3M9XCJlZGl0b3ItY29udGFpbmVyXCI+XG4gICAgICA8ZnMtbGFiZWw+SFRNTDwvZnMtbGFiZWw+XG4gICAgICA8ZnMtdGV4dC1lZGl0b3IgXG4gICAgICAgIFsobmdNb2RlbCldPVwiaHRtbFwiIFxuICAgICAgICBuYW1lPVwiaHRtbFwiXG4gICAgICAgIFtmc01vZGVsQ2hhbmdlT3B0aW9uc109XCJ7IGRlYm91bmNlOiAzMDAgfVwiXG4gICAgICAgIChmc01vZGVsQ2hhbmdlKT1cImNoYW5nZWQuZW1pdCh7IHR5cGU6ICdodG1sJywgdmFsdWU6ICRldmVudCB9KVwiXG4gICAgICAgIFtjb25maWddPVwiaHRtbENvbmZpZ1wiPlxuICAgICAgPC9mcy10ZXh0LWVkaXRvcj4gICAgICAgICAgICAgIFxuICAgIDwvZGl2PlxuICA8L2FzLXNwbGl0LWFyZWE+XG4gIDxhcy1zcGxpdC1hcmVhIFtzaXplXT1cIjMwXCIgW3Zpc2libGVdPVwic2hvd1Njc3NcIiBbb3JkZXJdPVwiMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJlZGl0b3ItY29udGFpbmVyXCI+XG4gICAgICA8ZnMtbGFiZWw+U0NTUzwvZnMtbGFiZWw+XG4gICAgICA8ZnMtdGV4dC1lZGl0b3IgXG4gICAgICAgIFsobmdNb2RlbCldPVwic2Nzc1wiIFxuICAgICAgICBuYW1lPVwic2Nzc1wiXG4gICAgICAgIFtmc01vZGVsQ2hhbmdlT3B0aW9uc109XCJ7IGRlYm91bmNlOiAzMDAgfVwiXG4gICAgICAgIChmc01vZGVsQ2hhbmdlKT1cImNoYW5nZWQuZW1pdCh7IHR5cGU6ICdzY3NzJywgdmFsdWU6ICRldmVudCB9KVwiXG4gICAgICAgIFtjb25maWddPVwic2Nzc0NvbmZpZ1wiPlxuICAgICAgPC9mcy10ZXh0LWVkaXRvcj4gICAgXG4gICAgPC9kaXY+XG4gIDwvYXMtc3BsaXQtYXJlYT5cbiAgPGFzLXNwbGl0LWFyZWEgW3NpemVdPVwiMzBcIiAgW3Zpc2libGVdPVwic2hvd0pzXCIgW29yZGVyXT1cIjNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiPlxuICAgICAgPGZzLWxhYmVsPkpTPC9mcy1sYWJlbD5cbiAgICAgIDxmcy10ZXh0LWVkaXRvciBcbiAgICAgICAgWyhuZ01vZGVsKV09XCJqc1wiIFxuICAgICAgICBuYW1lPVwianNcIlxuICAgICAgICBbZnNNb2RlbENoYW5nZU9wdGlvbnNdPVwieyBkZWJvdW5jZTogMzAwIH1cIlxuICAgICAgICAoZnNNb2RlbENoYW5nZSk9XCJjaGFuZ2VkLmVtaXQoeyB0eXBlOiAnanMnLCB2YWx1ZTogJGV2ZW50IH0pXCJcbiAgICAgICAgW2NvbmZpZ109XCJqc0NvbmZpZ1wiPlxuICAgICAgPC9mcy10ZXh0LWVkaXRvcj4gICAgXG4gICAgPC9kaXY+XG4gIDwvYXMtc3BsaXQtYXJlYT5cbiAgPGFzLXNwbGl0LWFyZWEgW3NpemVdPVwiMzBcIiBbdmlzaWJsZV09XCJzaG93R2xvYmFsU2Nzc1wiIFtvcmRlcl09XCI0XCI+XG4gICAgPGRpdiBjbGFzcz1cImVkaXRvci1jb250YWluZXJcIj5cbiAgICAgIDxmcy1sYWJlbD5HbG9iYWwgU0NTUzwvZnMtbGFiZWw+XG4gICAgICA8bmctY29udGFpbmVyICpmc1NrZWxldG9uPVwiY29udGVudFN0eWxlXCI+XG4gICAgICAgIDxmcy10ZXh0LWVkaXRvciBcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbnRlbnRTdHlsZS5zY3NzXCIgXG4gICAgICAgICAgbmFtZT1cImdsb2JhbFNjc3NcIlxuICAgICAgICAgIFtmc01vZGVsQ2hhbmdlT3B0aW9uc109XCJ7IGRlYm91bmNlOiAzMDAgfVwiXG4gICAgICAgICAgKGZzTW9kZWxDaGFuZ2UpPVwiZ2xvYmFsU2Nzc0NoYW5nZSgpXCJcbiAgICAgICAgICBbY29uZmlnXT1cImdsb2JhbFNjc3NDb25maWdcIj5cbiAgICAgICAgPC9mcy10ZXh0LWVkaXRvcj4gXG4gICAgICA8L25nLWNvbnRhaW5lcj4gICBcbiAgICA8L2Rpdj5cbiAgPC9hcy1zcGxpdC1hcmVhPlxuPC9hcy1zcGxpdD5cbiJdfQ==