UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

387 lines 54.1 kB
import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import { BaseDialogComponent } from '../../controls/dialog/base-dialog.component'; import { DialogService } from '../../controls/dialog/dialog.service'; import { SchemaUtilities } from '../schema/schema-utilities'; import { SchemaFormContentComponent } from './schema-form-content.component'; import { SchemaFormEditorSchemaTextComponent } from './schema-form-editor-schema-text.component'; import { SchemaFormEditorSchemaTreeComponent } from './schema-form-editor-schema-tree.component'; import { SchemaFormEditorUtilities } from './schema-form-editor-utilities'; import * as i0 from "@angular/core"; import * as i1 from "../../controls/dialog/dialog.service"; import * as i2 from "@angular/common"; import * as i3 from "@angular/forms"; import * as i4 from "../loading-wheel/loading-wheel.component"; import * as i5 from "../dialog/dialog.component"; import * as i6 from "../pivot/pivot.component"; import * as i7 from "../pivot/pivot-tab.component"; import * as i8 from "../split-view/split-view.component"; import * as i9 from "./schema-form-content.component"; import * as i10 from "./schema-form-editor-data.component"; import * as i11 from "./schema-form-editor-form-view-model.component"; import * as i12 from "./schema-form-editor-schema-tree.component"; import * as i13 from "./schema-form-editor-schema-text.component"; const _c0 = ["previewForm"]; const _c1 = ["schemaTree"]; const _c2 = ["schemaText"]; function SchemaFormEditorComponent_sme_loading_wheel_6_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "sme-loading-wheel"); } } function SchemaFormEditorComponent_sme_split_view_7_div_2_div_12_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div")(1, "i"); i0.ɵɵtext(2); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r10 = i0.ɵɵnextContext(3); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r10.strings.PreviewForm.EmptySchemaMessage); } } function SchemaFormEditorComponent_sme_split_view_7_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 15)(1, "div", 16)(2, "div", 17); i0.ɵɵtext(3); i0.ɵɵelementEnd(); i0.ɵɵelementStart(4, "div", 18); i0.ɵɵtext(5); i0.ɵɵelementStart(6, "span", 19); i0.ɵɵtext(7); i0.ɵɵelementEnd()()(); i0.ɵɵelementStart(8, "div", 20)(9, "div", 21); i0.ɵɵelement(10, "sme-schema-form-content", 22, 23); i0.ɵɵtemplate(12, SchemaFormEditorComponent_sme_split_view_7_div_2_div_12_Template, 3, 1, "div", 3); i0.ɵɵelementEnd()()(); } if (rf & 2) { const ctx_r3 = i0.ɵɵnextContext(2); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(ctx_r3.strings.PreviewForm.Title); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r3.strings.PreviewForm.ValidationResult.Title); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r3.getPreviewFormValidationResult()); i0.ɵɵadvance(3); i0.ɵɵproperty("schema", ctx_r3.schema)("data", ctx_r3.data)("formController", ctx_r3.formController)("isEditorMode", true); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx_r3.shouldShowEmptySchemaText()); } } function SchemaFormEditorComponent_sme_split_view_7_div_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 24)(1, "h3"); i0.ɵɵtext(2); i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "ul")(4, "li"); i0.ɵɵtext(5); i0.ɵɵelementEnd(); i0.ɵɵelementStart(6, "li"); i0.ɵɵtext(7); i0.ɵɵelementEnd(); i0.ɵɵelementStart(8, "li"); i0.ɵɵtext(9); i0.ɵɵelementEnd(); i0.ɵɵelementStart(10, "li"); i0.ɵɵtext(11); i0.ɵɵelementEnd(); i0.ɵɵelementStart(12, "li"); i0.ɵɵtext(13); i0.ɵɵelementEnd(); i0.ɵɵelementStart(14, "li")(15, "strong"); i0.ɵɵtext(16); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(17, "li")(18, "strong"); i0.ɵɵtext(19); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(20, "li")(21, "strong"); i0.ɵɵtext(22); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(23, "li"); i0.ɵɵtext(24); i0.ɵɵelementEnd(); i0.ɵɵelementStart(25, "li"); i0.ɵɵtext(26); i0.ɵɵelementEnd(); i0.ɵɵelementStart(27, "li"); i0.ɵɵtext(28); i0.ɵɵelementEnd()()(); } if (rf & 2) { const ctx_r4 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r4.strings.Welcome.Title); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(ctx_r4.strings.Welcome.Row1); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r4.strings.Welcome.Row2); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r4.strings.Welcome.Row3); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r4.strings.Welcome.Row4); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r4.strings.Welcome.Row5); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(ctx_r4.strings.Welcome.Row6); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(ctx_r4.strings.Welcome.Row7); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(ctx_r4.strings.Welcome.Row8); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r4.strings.Welcome.Row9); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r4.strings.Welcome.Row10); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r4.strings.Welcome.Row11); } } function SchemaFormEditorComponent_sme_split_view_7_ng_template_8_Template(rf, ctx) { if (rf & 1) { const _r14 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div", 25)(1, "div", 20); i0.ɵɵelement(2, "sme-schema-form-editor-schema-tree", 26, 27)(4, "sme-schema-form-editor-schema-text", 26, 28); i0.ɵɵelementEnd(); i0.ɵɵelementStart(6, "div", 29)(7, "div", 30)(8, "span"); i0.ɵɵtext(9); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(10, "div", 30)(11, "select", 31); i0.ɵɵlistener("ngModelChange", function SchemaFormEditorComponent_sme_split_view_7_ng_template_8_Template_select_ngModelChange_11_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r13.schemaView = $event); }); i0.ɵɵelementStart(12, "option", 32); i0.ɵɵtext(13); i0.ɵɵelementEnd(); i0.ɵɵelementStart(14, "option", 33); i0.ɵɵtext(15); i0.ɵɵelementEnd()()(); i0.ɵɵelementStart(16, "div", 30)(17, "button", 34); i0.ɵɵlistener("click", function SchemaFormEditorComponent_sme_split_view_7_ng_template_8_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r14); const ctx_r15 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r15.applySchema()); }); i0.ɵɵtext(18); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(19, "div", 35)(20, "span", 36); i0.ɵɵtext(21); i0.ɵɵelementEnd(); i0.ɵɵelementStart(22, "button", 37); i0.ɵɵlistener("click", function SchemaFormEditorComponent_sme_split_view_7_ng_template_8_Template_button_click_22_listener() { i0.ɵɵrestoreView(_r14); const ctx_r16 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r16.goToCodeView()); }); i0.ɵɵtext(23); i0.ɵɵelementEnd()()()(); } if (rf & 2) { const ctx_r6 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); i0.ɵɵproperty("schema", ctx_r6.editingSchema)("hidden", ctx_r6.schemaView != "visual"); i0.ɵɵadvance(2); i0.ɵɵproperty("schema", ctx_r6.editingSchema)("hidden", ctx_r6.schemaView != "code"); i0.ɵɵadvance(5); i0.ɵɵtextInterpolate(ctx_r6.strings.SchemaView.Title); i0.ɵɵadvance(2); i0.ɵɵproperty("ngModel", ctx_r6.schemaView); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r6.strings.SchemaView.Visual); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r6.strings.SchemaView.Code); i0.ɵɵadvance(2); i0.ɵɵproperty("disabled", !ctx_r6.shouldEnableApplySchemaButton()); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r6.strings.ApplySchemaButton.Text); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(ctx_r6.strings.SwitchToCodeViewMessage); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(ctx_r6.strings.GoToCodeViewButton.Text); } } function SchemaFormEditorComponent_sme_split_view_7_ng_template_10_Template(rf, ctx) { if (rf & 1) { const _r18 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div", 25)(1, "div", 20)(2, "sme-schema-form-editor-data", 38); i0.ɵɵlistener("dataChange", function SchemaFormEditorComponent_sme_split_view_7_ng_template_10_Template_sme_schema_form_editor_data_dataChange_2_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r17.data = $event); }); i0.ɵɵelementEnd()()(); } if (rf & 2) { const ctx_r7 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); i0.ɵɵproperty("data", ctx_r7.data); } } function SchemaFormEditorComponent_sme_split_view_7_ng_template_12_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "sme-schema-form-editor-form-view-model", 39); } if (rf & 2) { const ctx_r8 = i0.ɵɵnextContext(2); i0.ɵɵproperty("schema", ctx_r8.editingSchema); } } function SchemaFormEditorComponent_sme_split_view_7_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "sme-split-view", 7)(1, "sme-split-view-pane"); i0.ɵɵtemplate(2, SchemaFormEditorComponent_sme_split_view_7_div_2_Template, 13, 8, "div", 8); i0.ɵɵtemplate(3, SchemaFormEditorComponent_sme_split_view_7_div_3_Template, 29, 12, "div", 9); i0.ɵɵelementEnd(); i0.ɵɵelementStart(4, "sme-split-view-content")(5, "sme-pivot", 10)(6, "sme-pivot-tab", 11, 12); i0.ɵɵtemplate(8, SchemaFormEditorComponent_sme_split_view_7_ng_template_8_Template, 24, 12, "ng-template"); i0.ɵɵelementEnd(); i0.ɵɵelementStart(9, "sme-pivot-tab", 13); i0.ɵɵtemplate(10, SchemaFormEditorComponent_sme_split_view_7_ng_template_10_Template, 3, 1, "ng-template"); i0.ɵɵelementEnd(); i0.ɵɵelementStart(11, "sme-pivot-tab", 14); i0.ɵɵtemplate(12, SchemaFormEditorComponent_sme_split_view_7_ng_template_12_Template, 1, 1, "ng-template"); i0.ɵɵelementEnd()()()(); } if (rf & 2) { const _r5 = i0.ɵɵreference(7); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵproperty("isExpanded", true)("paneDistance", ctx_r2.previewFormWidth); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", !ctx_r2.shouldShowWelcomeText()); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r2.shouldShowWelcomeText()); i0.ɵɵadvance(2); i0.ɵɵproperty("selection", _r5)("switchTabByShowHide", true); } } export class SchemaFormEditorComponent extends BaseDialogComponent { constructor(dialogService, elementRef) { super(dialogService); this.elementRef = elementRef; this.strings = MsftSme.getStrings().MsftSmeShell.Angular.SchemaForm.Editor; this.isInitialized = false; this.internalSchemaView = 'visual'; this.applySchemaButtonHasBeenClicked = false; this.showLoading = true; this.previewFormWidth = 570; this.isOpen = false; this.schemaChange = new EventEmitter(); this.dataChange = new EventEmitter(); this.id = 'schema-form-editor' + MsftSme.getUniqueId(); } get schemaView() { return this.internalSchemaView; } set schemaView(value) { this.internalSchemaView = value; if (this.isInitialized) { if (value === 'code') { this.editingSchema = this.schemaTreeComponent.generateSchema(); } else { this.editingSchema = this.schemaTextComponent.generateSchema(); } } } get data() { return this.internalData; } set data(value) { this.internalData = value; this.dataChange.emit(value); } /** * Shows the dialog. * * @param options The options for the dialog. * @return The dialog result subject. */ show(options) { if (!options) { throw new Error('ConfirmationDialogComponent.show: Options are required to show the dialog.'); } if (!this.schema) { this.schema = { properties: [] }; } if (!this.data) { this.data = {}; } const result = super.show(options); this.editingSchema = SchemaFormEditorUtilities.deepCopy(this.schema); this.internalSchemaView = 'visual'; this.isInitialized = true; this.showLoading = true; this.isOpen = true; setTimeout(() => { const splitViewElement = this.elementRef.nativeElement.querySelector('sme-dialog-content sme-split-view'); if (splitViewElement) { this.previewFormWidth = splitViewElement.offsetWidth / 3 + 20; } setTimeout(() => { this.showLoading = false; }); }); return result; } /** * The method to call when the close button is clicked. */ onClose() { this.isOpen = false; this.hide(); } applySchema() { if (this.schemaView === 'code') { this.editingSchema = SchemaFormEditorUtilities.deepCopy(this.schemaTextComponent.generateSchema()); } else { this.editingSchema = SchemaFormEditorUtilities.deepCopy(this.schemaTreeComponent.generateSchema()); } this.schema = SchemaFormEditorUtilities.deepCopy(this.editingSchema); this.data = SchemaUtilities.setUpFormData(this.data, this.schema); this.dataChange.emit(this.data); this.schemaChange.emit(this.schema); this.applySchemaButtonHasBeenClicked = true; } shouldEnableApplySchemaButton() { return this.schemaView === 'code' || (this.schemaTreeComponent && this.schemaTreeComponent.isPropertyFormValid); } getPreviewFormValidationResult() { return (this.previewFormComponent && this.previewFormComponent.isFormValid) ? this.strings.PreviewForm.ValidationResult.Passed : this.strings.PreviewForm.ValidationResult.Failed; } goToCodeView() { this.schemaView = 'code'; } shouldShowWelcomeText() { return !this.applySchemaButtonHasBeenClicked && !(this.schema && this.schema.properties && this.schema.properties.length > 0) && !this.schema.options; } shouldShowEmptySchemaText() { return this.applySchemaButtonHasBeenClicked && this.schema && this.schema.properties && this.schema.properties.length === 0 && !this.schema.options; } } /** @nocollapse */ SchemaFormEditorComponent.ɵfac = function SchemaFormEditorComponent_Factory(t) { return new (t || SchemaFormEditorComponent)(i0.ɵɵdirectiveInject(i1.DialogService), i0.ɵɵdirectiveInject(i0.ElementRef)); }; /** @nocollapse */ SchemaFormEditorComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: SchemaFormEditorComponent, selectors: [["sme-schema-form-editor"]], viewQuery: function SchemaFormEditorComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(_c0, 5); i0.ɵɵviewQuery(_c1, 5); i0.ɵɵviewQuery(_c2, 5); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.previewFormComponent = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.schemaTreeComponent = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.schemaTextComponent = _t.first); } }, inputs: { schema: "schema", data: "data", formController: "formController" }, outputs: { schemaChange: "schemaChange", dataChange: "dataChange" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 12, vars: 4, consts: [["dialogMode", "fullscreen", "sme-lint-disable", ""], ["dialog", ""], ["id", "sme-dialog-title"], [4, "ngIf"], ["orientation", "left", 3, "isExpanded", "paneDistance", 4, "ngIf"], [1, "sme-layout-float-right"], ["type", "button", 3, "click"], ["orientation", "left", 3, "isExpanded", "paneDistance"], ["class", "sme-layout-absolute-phone-up sme-position-inset-none sme-arrange-stack-v sme-padding-horizontal-xs sme-margin-left-sm", 4, "ngIf"], ["class", "sme-layout-absolute-phone-up sme-position-inset-none sme-arrange-stack-v sme-padding-horizontal-xs sme-margin-left-sm sme-arrange-overflow-auto", 4, "ngIf"], [1, "sme-layout-absolute-phone-up", "sme-position-inset-none", "sme-position-stretch-v", "sme-padding-horizontal-xs", "sme-margin-right-sm", 3, "selection", "switchTabByShowHide"], ["label", "Schema"], ["ex1Tab1", ""], ["label", "Data"], ["label", "Form View Model Contract"], [1, "sme-layout-absolute-phone-up", "sme-position-inset-none", "sme-arrange-stack-v", "sme-padding-horizontal-xs", "sme-margin-left-sm"], [1, "sme-position-flex-none", "sme-padding-vertical-xs", "sme-arrange-stack-h", "sme-padding-right-lg"], [1, "sme-position-flex-auto"], [1, "sme-position-flex-none"], [1, "sme-schema-form-editor-preview-form-validation-result"], [1, "sme-position-flex-auto", "sme-layout-relative"], [1, "sme-layout-absolute-phone-up", "sme-position-inset-none", "sme-arrange-overflow-auto"], [1, "previewForm", 3, "schema", "data", "formController", "isEditorMode"], ["previewForm", ""], [1, "sme-layout-absolute-phone-up", "sme-position-inset-none", "sme-arrange-stack-v", "sme-padding-horizontal-xs", "sme-margin-left-sm", "sme-arrange-overflow-auto"], [1, "sme-layout-absolute-phone-up", "sme-position-inset-none", "sme-arrange-stack-v"], [3, "schema", "hidden"], ["schemaTree", ""], ["schemaText", ""], [1, "sme-position-flex-none", "sme-arrange-stack-h"], [1, "sme-position-flex-align-center", "sme-padding-inset-xs"], [1, "sme-schema-form-editor-schema-view-dropdown", 3, "ngModel", "ngModelChange"], ["value", "visual"], ["value", "code"], [3, "disabled", "click"], [1, "sme-padding-inset-xs", "sme-arrange-stack-h", "sme-position-flex-auto", "sme-arrange-overflow-hide-x"], [1, "sme-position-flex-align-center", "sme-arrange-overflow-hide-x", "sme-arrange-ws-nowrap", "sme-arrange-ellipsis", "sme-margin-right-sm"], [1, "sme-position-flex-none", "sme-margin-left-sm", 3, "click"], [3, "data", "dataChange"], [3, "schema"]], template: function SchemaFormEditorComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "sme-dialog", 0, 1)(2, "sme-dialog-header")(3, "h3", 2); i0.ɵɵtext(4); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(5, "sme-dialog-content"); i0.ɵɵtemplate(6, SchemaFormEditorComponent_sme_loading_wheel_6_Template, 1, 0, "sme-loading-wheel", 3); i0.ɵɵtemplate(7, SchemaFormEditorComponent_sme_split_view_7_Template, 13, 6, "sme-split-view", 4); i0.ɵɵelementEnd(); i0.ɵɵelementStart(8, "sme-dialog-footer")(9, "div", 5)(10, "button", 6); i0.ɵɵlistener("click", function SchemaFormEditorComponent_Template_button_click_10_listener() { return ctx.onClose(); }); i0.ɵɵtext(11); i0.ɵɵelementEnd()()()(); } if (rf & 2) { const _r0 = i0.ɵɵreference(1); i0.ɵɵadvance(4); i0.ɵɵtextInterpolate(ctx.strings.Title); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx.showLoading); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", _r0.visible); i0.ɵɵadvance(4); i0.ɵɵtextInterpolate(ctx.strings.CloseButton.Text); } }, dependencies: [i2.NgIf, i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i3.SelectControlValueAccessor, i3.NgControlStatus, i3.NgModel, i4.LoadingWheelComponent, i5.DialogComponent, i5.DialogContentComponent, i5.DialogFooterComponent, i5.DialogHeaderComponent, i6.PivotComponent, i7.PivotTabComponent, i8.SplitViewComponent, i8.SplitViewContentComponent, i8.SplitViewPaneComponent, i9.SchemaFormContentComponent, i10.SchemaFormEditorDataComponent, i11.SchemaFormEditorFormViewModelComponent, i12.SchemaFormEditorSchemaTreeComponent, i13.SchemaFormEditorSchemaTextComponent], styles: ["[_nghost-%COMP%] .syntax-editor .property{color:#0000ca}[_nghost-%COMP%] .syntax-editor .property-type{color:green}"] }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchemaFormEditorComponent, [{ type: Component, args: [{ selector: 'sme-schema-form-editor', template: "<sme-dialog #dialog dialogMode=\"fullscreen\" sme-lint-disable>\r\n <sme-dialog-header>\r\n <h3 id=\"sme-dialog-title\">{{ strings.Title }}</h3>\r\n </sme-dialog-header>\r\n <sme-dialog-content>\r\n <sme-loading-wheel *ngIf=\"showLoading\"></sme-loading-wheel>\r\n <sme-split-view orientation=\"left\" [isExpanded]=\"true\" [paneDistance]=\"previewFormWidth\" *ngIf=\"dialog.visible\">\r\n <sme-split-view-pane>\r\n <div *ngIf=\"!shouldShowWelcomeText()\" class=\"sme-layout-absolute-phone-up sme-position-inset-none sme-arrange-stack-v sme-padding-horizontal-xs sme-margin-left-sm\">\r\n <div class=\"sme-position-flex-none sme-padding-vertical-xs sme-arrange-stack-h sme-padding-right-lg\">\r\n <div class=\"sme-position-flex-auto\">{{strings.PreviewForm.Title}}</div>\r\n <div class=\"sme-position-flex-none\">{{strings.PreviewForm.ValidationResult.Title}}<span class=\"sme-schema-form-editor-preview-form-validation-result\">{{getPreviewFormValidationResult()}}</span></div>\r\n </div>\r\n <div class=\"sme-position-flex-auto sme-layout-relative\">\r\n <div class=\"sme-layout-absolute-phone-up sme-position-inset-none sme-arrange-overflow-auto\">\r\n <sme-schema-form-content #previewForm class=\"previewForm\" [schema]=\"schema\" [data]=\"data\" [formController]=\"formController\"\r\n [isEditorMode]=\"true\"></sme-schema-form-content>\r\n <div *ngIf=\"shouldShowEmptySchemaText()\">\r\n <i>{{strings.PreviewForm.EmptySchemaMessage}}</i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"shouldShowWelcomeText()\" class=\"sme-layout-absolute-phone-up sme-position-inset-none sme-arrange-stack-v sme-padding-horizontal-xs sme-margin-left-sm sme-arrange-overflow-auto\">\r\n <h3>{{strings.Welcome.Title}}</h3>\r\n <ul>\r\n <li>{{strings.Welcome.Row1}}</li>\r\n <li>{{strings.Welcome.Row2}}</li>\r\n <li>{{strings.Welcome.Row3}}</li>\r\n <li>{{strings.Welcome.Row4}}</li>\r\n <li>{{strings.Welcome.Row5}}</li>\r\n <li><strong>{{strings.Welcome.Row6}}</strong></li>\r\n <li><strong>{{strings.Welcome.Row7}}</strong></li>\r\n <li><strong>{{strings.Welcome.Row8}}</strong></li>\r\n <li>{{strings.Welcome.Row9}}</li>\r\n <li>{{strings.Welcome.Row10}}</li>\r\n <li>{{strings.Welcome.Row11}}</li>\r\n </ul>\r\n </div>\r\n </sme-split-view-pane>\r\n <sme-split-view-content>\r\n <sme-pivot [selection]=\"ex1Tab1\" [switchTabByShowHide]=\"true\" class=\"sme-layout-absolute-phone-up sme-position-inset-none sme-position-stretch-v sme-padding-horizontal-xs sme-margin-right-sm\">\r\n <sme-pivot-tab #ex1Tab1 label=\"Schema\">\r\n <ng-template>\r\n <div class=\"sme-layout-absolute-phone-up sme-position-inset-none sme-arrange-stack-v\">\r\n <div class=\"sme-position-flex-auto sme-layout-relative\">\r\n <sme-schema-form-editor-schema-tree #schemaTree [schema]=\"editingSchema\" [hidden]=\"schemaView!='visual'\"></sme-schema-form-editor-schema-tree>\r\n <sme-schema-form-editor-schema-text #schemaText [schema]=\"editingSchema\" [hidden]=\"schemaView!='code'\"></sme-schema-form-editor-schema-text>\r\n </div>\r\n <div class=\"sme-position-flex-none sme-arrange-stack-h\">\r\n <div class=\"sme-position-flex-align-center sme-padding-inset-xs\">\r\n <span>{{strings.SchemaView.Title}}</span>\r\n </div>\r\n <div class=\"sme-position-flex-align-center sme-padding-inset-xs\">\r\n <select [(ngModel)]=\"schemaView\" class='sme-schema-form-editor-schema-view-dropdown'>\r\n <option value=\"visual\">{{strings.SchemaView.Visual}}</option>\r\n <option value=\"code\">{{strings.SchemaView.Code}}</option>\r\n </select>\r\n </div>\r\n <div class=\"sme-position-flex-align-center sme-padding-inset-xs\">\r\n <button (click)=\"applySchema()\" [disabled]=\"!shouldEnableApplySchemaButton()\">{{strings.ApplySchemaButton.Text}}</button>\r\n </div>\r\n <div class=\"sme-padding-inset-xs sme-arrange-stack-h sme-position-flex-auto sme-arrange-overflow-hide-x\">\r\n <span class=\"sme-position-flex-align-center sme-arrange-overflow-hide-x sme-arrange-ws-nowrap sme-arrange-ellipsis sme-margin-right-sm\">{{strings.SwitchToCodeViewMessage}}</span>\r\n <button class=\"sme-position-flex-none sme-margin-left-sm\" (click)=\"goToCodeView()\">{{strings.GoToCodeViewButton.Text}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </sme-pivot-tab>\r\n <sme-pivot-tab label=\"Data\">\r\n <ng-template>\r\n <div class=\"sme-layout-absolute-phone-up sme-position-inset-none sme-arrange-stack-v\">\r\n <div class=\"sme-position-flex-auto sme-layout-relative\">\r\n <sme-schema-form-editor-data [(data)]=\"data\"></sme-schema-form-editor-data>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </sme-pivot-tab>\r\n <sme-pivot-tab label=\"Form View Model Contract\">\r\n <ng-template>\r\n <sme-schema-form-editor-form-view-model [schema]=\"editingSchema\"></sme-schema-form-editor-form-view-model>\r\n </ng-template>\r\n </sme-pivot-tab>\r\n </sme-pivot>\r\n </sme-split-view-content>\r\n </sme-split-view>\r\n </sme-dialog-content>\r\n <sme-dialog-footer>\r\n <div class=\"sme-layout-float-right\">\r\n <button type=\"button\" (click)=\"onClose()\">{{ strings.CloseButton.Text }}</button>\r\n </div>\r\n </sme-dialog-footer>\r\n</sme-dialog>\r\n", styles: [":host::ng-deep .syntax-editor .property{color:#0000ca}:host::ng-deep .syntax-editor .property-type{color:green}\n"] }] }], function () { return [{ type: i1.DialogService }, { type: i0.ElementRef }]; }, { previewFormComponent: [{ type: ViewChild, args: ['previewForm'] }], schemaTreeComponent: [{ type: ViewChild, args: ['schemaTree'] }], schemaTextComponent: [{ type: ViewChild, args: ['schemaText'] }], schema: [{ type: Input }], schemaChange: [{ type: Output }], data: [{ type: Input }], dataChange: [{ type: Output }], formController: [{ type: Input }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLWZvcm0tZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3NjaGVtYS1mb3JtL3NjaGVtYS1mb3JtLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9zY2hlbWEtZm9ybS9zY2hlbWEtZm9ybS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlGLE9BQU8sRUFBRSxtQkFBbUIsRUFBK0IsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDTHZFLG9DQUEyRDs7O0lBWWpELDJCQUF5QyxRQUFBO0lBQ3BDLFlBQTBDO0lBQUEsaUJBQUksRUFBQTs7O0lBQTlDLGVBQTBDO0lBQTFDLG9FQUEwQzs7O0lBVnJELCtCQUFvSyxjQUFBLGNBQUE7SUFFNUgsWUFBNkI7SUFBQSxpQkFBTTtJQUN2RSwrQkFBb0M7SUFBQSxZQUE4QztJQUFBLGdDQUFvRTtJQUFBLFlBQW9DO0lBQUEsaUJB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QU0sQ0FBQyxVQUFVO2VBQzdFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUN2RSxDQUFDOztxSEF6SlEseUJBQXlCOzJHQUF6Qix5QkFBeUI7Ozs7Ozs7Ozs7UUMzQnRDLHdDQUE2RCx3QkFBQSxZQUFBO1FBRS9CLFlBQW1CO1FBQUEsaUJBQUssRUFBQTtRQUVwRCwwQ0FBb0I7UUFDbEIsc0dBQTJEO1FBQzNELGlHQWdGaUI7UUFDbkIsaUJBQXFCO1FBQ3JCLHlDQUFtQixhQUFBLGlCQUFBO1FBRU8sdUdBQVMsYUFBUyxJQUFDO1FBQUMsYUFBOEI7UUFBQSxpQkFBUyxFQUFBLEVBQUEsRUFBQTs7O1FBeEZ6RCxlQUFtQjtRQUFuQix1Q0FBbUI7UUFHekIsZUFBaUI7UUFBakIsc0NBQWlCO1FBQ3FELGVBQW9CO1FBQXBCLGtDQUFvQjtRQW9GbEUsZUFBOEI7UUFBOUIsa0RBQThCOzt1RkQvRGpFLHlCQUF5QjtjQUxyQyxTQUFTOzJCQUNJLHdCQUF3Qjt5RkFhMUIsb0JBQW9CO2tCQUQzQixTQUFTO21CQUFDLGFBQWE7WUFJaEIsbUJBQW1CO2tCQUQxQixTQUFTO21CQUFDLFlBQVk7WUFJZixtQkFBbUI7a0JBRDFCLFNBQVM7bUJBQUMsWUFBWTtZQXlCaEIsTUFBTTtrQkFEWixLQUFLO1lBSUMsWUFBWTtrQkFEbEIsTUFBTTtZQUlJLElBQUk7a0JBRGQsS0FBSztZQVVDLFVBQVU7a0JBRGhCLE1BQU07WUFJQSxjQUFjO2tCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJhc2VEaWFsb2dDb21wb25lbnQsIERpYWxvZ09wdGlvbnMsIERpYWxvZ1Jlc3VsdCB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL2RpYWxvZy9iYXNlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29udHJvbHMvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RyaW5ncyB9IGZyb20gJy4uLy4uL2dlbmVyYXRlZC9zdHJpbmdzJztcclxuaW1wb3J0IHsgRGF0YVNjaGVtYSwgRm9ybURhdGEgfSBmcm9tICcuLi9zY2hlbWEvc2NoZW1hLW1vZGVscyc7XHJcbmltcG9ydCB7IFNjaGVtYVV0aWxpdGllcyB9IGZyb20gJy4uL3NjaGVtYS9zY2hlbWEtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgU2NoZW1hRm9ybUNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuL3NjaGVtYS1mb3JtLWNvbnRlbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hRm9ybUVkaXRvclNjaGVtYVRleHRDb21wb25lbnQgfSBmcm9tICcuL3NjaGVtYS1mb3JtLWVkaXRvci1zY2hlbWEtdGV4dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTY2hlbWFGb3JtRWRpdG9yU2NoZW1hVHJlZUNvbXBvbmVudCB9IGZyb20gJy4vc2NoZW1hLWZvcm0tZWRpdG9yLXNjaGVtYS10cmVlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNjaGVtYUZvcm1FZGl0b3JVdGlsaXRpZXMgfSBmcm9tICcuL3NjaGVtYS1mb3JtLWVkaXRvci11dGlsaXRpZXMnO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBjb25maXJtYXRpb24gZGlhbG9nIHJlc3VsdC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yUmVzdWx0IGV4dGVuZHMgRGlhbG9nUmVzdWx0IHtcclxuICAgIC8qKlxyXG4gICAgICogV2FzIHRoZSBkaWFsb2cgc3VibWl0IGJ1dHRvbiBjbGlja2VkP1xyXG4gICAgICovXHJcbiAgICBjb25maXJtZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtc2NoZW1hLWZvcm0tZWRpdG9yJyxcclxuICAgIHN0eWxlVXJsczogWycuL3NjaGVtYS1mb3JtLWVkaXRvci5jb21wb25lbnQuY3NzJ10sXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2NoZW1hLWZvcm0tZWRpdG9yLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2NoZW1hRm9ybUVkaXRvckNvbXBvbmVudCBleHRlbmRzIEJhc2VEaWFsb2dDb21wb25lbnQ8RGlhbG9nT3B0aW9ucywgRWRpdG9yUmVzdWx0PiB7XHJcbiAgICBwdWJsaWMgc3RyaW5ncyA9IE1zZnRTbWUuZ2V0U3RyaW5nczxTdHJpbmdzPigpLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yO1xyXG5cclxuICAgIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbFNjaGVtYVZpZXcgPSAndmlzdWFsJztcclxuICAgIHByaXZhdGUgaW50ZXJuYWxEYXRhOiBGb3JtRGF0YTtcclxuICAgIHByaXZhdGUgYXBwbHlTY2hlbWFCdXR0b25IYXNCZWVuQ2xpY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3ByZXZpZXdGb3JtJylcclxuICAgIHByaXZhdGUgcHJldmlld0Zvcm1Db21wb25lbnQ6IFNjaGVtYUZvcm1Db250ZW50Q29tcG9uZW50O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3NjaGVtYVRyZWUnKVxyXG4gICAgcHJpdmF0ZSBzY2hlbWFUcmVlQ29tcG9uZW50OiBTY2hlbWFGb3JtRWRpdG9yU2NoZW1hVHJlZUNvbXBvbmVudDtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdzY2hlbWFUZXh0JylcclxuICAgIHByaXZhdGUgc2NoZW1hVGV4dENvbXBvbmVudDogU2NoZW1hRm9ybUVkaXRvclNjaGVtYVRleHRDb21wb25lbnQ7XHJcblxyXG4gICAgcHVibGljIHNob3dMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBlZGl0aW5nU2NoZW1hOiBEYXRhU2NoZW1hO1xyXG4gICAgcHVibGljIHByZXZpZXdGb3JtV2lkdGggPSA1NzA7XHJcblxyXG4gICAgcHVibGljIGlzT3BlbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgc2NoZW1hVmlldygpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsU2NoZW1hVmlldztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgc2NoZW1hVmlldyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbFNjaGVtYVZpZXcgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09ICdjb2RlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0aW5nU2NoZW1hID0gdGhpcy5zY2hlbWFUcmVlQ29tcG9uZW50LmdlbmVyYXRlU2NoZW1hKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRpbmdTY2hlbWEgPSB0aGlzLnNjaGVtYVRleHRDb21wb25lbnQuZ2VuZXJhdGVTY2hlbWEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNjaGVtYTogRGF0YVNjaGVtYTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBzY2hlbWFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRhU2NoZW1hPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVNjaGVtYT4oKTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBkYXRhKCk6IEZvcm1EYXRhIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbERhdGE7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IGRhdGEodmFsdWU6IEZvcm1EYXRhKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbERhdGEgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgZGF0YUNoYW5nZTogRXZlbnRFbWl0dGVyPEZvcm1EYXRhPiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybURhdGE+KCk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmb3JtQ29udHJvbGxlcjogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG4gICAgICAgIHN1cGVyKGRpYWxvZ1NlcnZpY2UpO1xyXG5cclxuICAgICAgICB0aGlzLmlkID0gJ3NjaGVtYS1mb3JtLWVkaXRvcicgKyBNc2Z0U21lLmdldFVuaXF1ZUlkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93cyB0aGUgZGlhbG9nLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgZGlhbG9nLlxyXG4gICAgICogQHJldHVybiBUaGUgZGlhbG9nIHJlc3VsdCBzdWJqZWN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvdyhvcHRpb25zOiBEaWFsb2dPcHRpb25zKTogU3ViamVjdDxFZGl0b3JSZXN1bHQ+IHtcclxuICAgICAgICBpZiAoIW9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQuc2hvdzogT3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gc2hvdyB0aGUgZGlhbG9nLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnNjaGVtYSkge1xyXG4gICAgICAgICAgICB0aGlzLnNjaGVtYSA9IHtcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLnNob3cob3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nU2NoZW1hID0gU2NoZW1hRm9ybUVkaXRvclV0aWxpdGllcy5kZWVwQ29weSh0aGlzLnNjaGVtYSk7XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxTY2hlbWFWaWV3ID0gJ3Zpc3VhbCc7XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzcGxpdFZpZXdFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcignc21lLWRpYWxvZy1jb250ZW50IHNtZS1zcGxpdC12aWV3Jyk7XHJcbiAgICAgICAgICAgIGlmIChzcGxpdFZpZXdFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdGb3JtV2lkdGggPVxyXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0Vmlld0VsZW1lbnQub2Zmc2V0V2lkdGggLyAzICsgMjA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0byBjYWxsIHdoZW4gdGhlIGNsb3NlIGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25DbG9zZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhcHBseVNjaGVtYSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zY2hlbWFWaWV3ID09PSAnY29kZScpIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0aW5nU2NoZW1hID0gU2NoZW1hRm9ybUVkaXRvclV0aWxpdGllcy5kZWVwQ29weSh0aGlzLnNjaGVtYVRleHRDb21wb25lbnQuZ2VuZXJhdGVTY2hlbWEoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0aW5nU2NoZW1hID0gU2NoZW1hRm9ybUVkaXRvclV0aWxpdGllcy5kZWVwQ29weSh0aGlzLnNjaGVtYVRyZWVDb21wb25lbnQuZ2VuZXJhdGVTY2hlbWEoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNjaGVtYSA9IFNjaGVtYUZvcm1FZGl0b3JVdGlsaXRpZXMuZGVlcENvcHkodGhpcy5lZGl0aW5nU2NoZW1hKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBTY2hlbWFVdGlsaXRpZXMuc2V0VXBGb3JtRGF0YSh0aGlzLmRhdGEsIHRoaXMuc2NoZW1hKTtcclxuICAgICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdCh0aGlzLmRhdGEpO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hQ2hhbmdlLmVtaXQodGhpcy5zY2hlbWEpO1xyXG5cclxuICAgICAgICB0aGlzLmFwcGx5U2NoZW1hQnV0dG9uSGFzQmVlbkNsaWNrZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG91bGRFbmFibGVBcHBseVNjaGVtYUJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFWaWV3ID09PSAnY29kZScgfHwgKHRoaXMuc2NoZW1hVHJlZUNvbXBvbmVudCAmJiB0aGlzLnNjaGVtYVRyZWVDb21wb25lbnQuaXNQcm9wZXJ0eUZvcm1WYWxpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFByZXZpZXdGb3JtVmFsaWRhdGlvblJlc3VsdCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5wcmV2aWV3Rm9ybUNvbXBvbmVudCAmJiB0aGlzLnByZXZpZXdGb3JtQ29tcG9uZW50LmlzRm9ybVZhbGlkKVxyXG4gICAgICAgICAgICA/IHRoaXMuc3RyaW5ncy5QcmV2aWV3Rm9ybS5WYWxpZGF0aW9uUmVzdWx0LlBhc3NlZCA6IHRoaXMuc3RyaW5ncy5QcmV2aWV3Rm9ybS5WYWxpZGF0aW9uUmVzdWx0LkZhaWxlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ29Ub0NvZGVWaWV3KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2NoZW1hVmlldyA9ICdjb2RlJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvdWxkU2hvd1dlbGNvbWVUZXh0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5hcHBseVNjaGVtYUJ1dHRvbkhhc0JlZW5DbGlja2VkXHJcbiAgICAgICAgICAgICYmICEodGhpcy5zY2hlbWEgJiYgdGhpcy5zY2hlbWEucHJvcGVydGllcyAmJiB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICYmICF0aGlzLnNjaGVtYS5vcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG91bGRTaG93RW1wdHlTY2hlbWFUZXh0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5U2NoZW1hQnV0dG9uSGFzQmVlbkNsaWNrZWQgJiYgdGhpcy5zY2hlbWEgJiYgdGhpcy5zY2hlbWEucHJvcGVydGllc1xyXG4gICAgICAgICAgICAmJiB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5zY2hlbWEub3B0aW9ucztcclxuICAgIH1cclxufVxyXG4iLCI8c21lLWRpYWxvZyAjZGlhbG9nIGRpYWxvZ01vZGU9XCJmdWxsc2NyZWVuXCIgc21lLWxpbnQtZGlzYWJsZT5cclxuICA8c21lLWRpYWxvZy1oZWFkZXI+XHJcbiAgICA8aDMgaWQ9XCJzbWUtZGlhbG9nLXRpdGxlXCI+e3sgc3RyaW5ncy5UaXRsZSB9fTwvaDM+XHJcbiAgPC9zbWUtZGlhbG9nLWhlYWRlcj5cclxuICA8c21lLWRpYWxvZy1jb250ZW50PlxyXG4gICAgPHNtZS1sb2FkaW5nLXdoZWVsICpuZ0lmPVwic2hvd0xvYWRpbmdcIj48L3NtZS1sb2FkaW5nLXdoZWVsPlxyXG4gICAgPHNtZS1zcGxpdC12aWV3IG9yaWVudGF0aW9uPVwibGVmdFwiIFtpc0V4cGFuZGVkXT1cInRydWVcIiBbcGFuZURpc3RhbmNlXT1cInByZXZpZXdGb3JtV2lkdGhcIiAqbmdJZj1cImRpYWxvZy52aXNpYmxlXCI+XHJcbiAgICAgIDxzbWUtc3BsaXQtdmlldy1wYW5lPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvdWxkU2hvd1dlbGNvbWVUZXh0KClcIiBjbGFzcz1cInNtZS1sYXlvdXQtYWJzb2x1dGUtcGhvbmUtdXAgc21lLXBvc2l0aW9uLWluc2V0LW5vbmUgc21lLWFycmFuZ2Utc3RhY2stdiBzbWUtcGFkZGluZy1ob3Jpem9udGFsLXhzIHNtZS1tYXJnaW4tbGVmdC1zbVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLXBhZGRpbmctdmVydGljYWwteHMgc21lLWFycmFuZ2Utc3RhY2staCBzbWUtcGFkZGluZy1yaWdodC1sZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0b1wiPnt7c3RyaW5ncy5QcmV2aWV3Rm9ybS5UaXRsZX19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lXCI+e3tzdHJpbmdzLlByZXZpZXdGb3JtLlZhbGlkYXRpb25SZXN1bHQuVGl0bGV9fTxzcGFuIGNsYXNzPVwic21lLXNjaGVtYS1mb3JtLWVkaXRvci1wcmV2aWV3LWZvcm0tdmFsaWRhdGlvbi1yZXN1bHRcIj57e2dldFByZXZpZXdGb3JtVmFsaWRhdGlvblJlc3VsdCgpfX08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1sYXlvdXQtcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1sYXlvdXQtYWJzb2x1dGUtcGhvbmUtdXAgc21lLXBvc2l0aW9uLWluc2V0LW5vbmUgc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgICAgICAgIDxzbWUtc2NoZW1hLWZvcm0tY29udGVudCAjcHJldmlld0Zvcm0gY2xhc3M9XCJwcmV2aWV3Rm9ybVwiIFtzY2hlbWFdPVwic2NoZW1hXCIgW2RhdGFdPVwiZGF0YVwiIFtmb3JtQ29udHJvbGxlcl09XCJmb3JtQ29udHJvbGxlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0VkaXRvck1vZGVdPVwidHJ1ZVwiPjwvc21lLXNjaGVtYS1mb3JtLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3VsZFNob3dFbXB0eVNjaGVtYVRleHQoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGk+e3tzdHJpbmdzLlByZXZpZXdGb3JtLkVtcHR5U2NoZW1hTWVzc2FnZX19PC9pPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG91bGRTaG93V2VsY29tZVRleHQoKVwiIGNsYXNzPVwic21lLWxheW91dC1hYnNvbHV0ZS1waG9uZS11cCBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1wYWRkaW5nLWhvcml6b250YWwteHMgc21lLW1hcmdpbi1sZWZ0LXNtIHNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG9cIj5cclxuICAgICAgICAgIDxoMz57e3N0cmluZ3MuV2VsY29tZS5UaXRsZX19PC9oMz5cclxuICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpPnt7c3RyaW5ncy5XZWxjb21lLlJvdzF9fTwvbGk+XHJcbiAgICAgICAgICAgIDxsaT57e3N0cmluZ3MuV2VsY29tZS5Sb3cyfX08L2xpPlxyXG4gICAgICAgICAgICA8bGk+e3tzdHJpbmdzLldlbGNvbWUuUm93M319PC9saT5cclxuICAgICAgICAgICAgPGxpPnt7c3RyaW5ncy5XZWxjb21lLlJvdzR9fTwvbGk+XHJcbiAgICAgICAgICAgIDxsaT57e3N0cmluZ3MuV2VsY29tZS5Sb3c1fX08L2xpPlxyXG4gICAgICAgICAgICA8bGk+PHN0cm9uZz57e3N0cmluZ3MuV2VsY29tZS5Sb3c2fX08L3N0cm9uZz48L2xpPlxyXG4gICAgICAgICAgICA8bGk+PHN0cm9uZz57e3N0cmluZ3MuV2VsY29tZS5Sb3c3fX08L3N0cm9uZz48L2xpPlxyXG4gICAgICAgICAgICA8bGk+PHN0cm9uZz57e3N0cmluZ3MuV2VsY29tZS5Sb3c4fX08L3N0cm9uZz48L2xpPlxyXG4gICAgICAgICAgICA8bGk+e3tzdHJpbmdzLldlbGNvbWUuUm93OX19PC9saT5cclxuICAgICAgICAgICAgPGxpPnt7c3RyaW5ncy5XZWxjb21lLlJvdzEwfX08L2xpPlxyXG4gICAgICAgICAgICA8bGk+e3tzdHJpbmdzLldlbGNvbWUuUm93MTF9fTwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3NtZS1zcGxpdC12aWV3LXBhbmU+XHJcbiAgICAgIDxzbWUtc3BsaXQtdmlldy1jb250ZW50PlxyXG4gICAgICAgIDxzbWUtcGl2b3QgW3NlbGVjdGlvbl09XCJleDFUYWIxXCIgW3N3aXRjaFRhYkJ5U2hvd0hpZGVdPVwidHJ1ZVwiIGNsYXNzPVwic21lLWxheW91dC1hYnNvbHV0ZS1waG9uZS11cCBzbWUtcG9zaXRpb24taW5zZXQtbm9uZSBzbWUtcG9zaXRpb24tc3RyZXRjaC12IHNtZS1wYWRkaW5nLWhvcml6b250YWwteHMgc21lLW1hcmdpbi1yaWdodC1zbVwiPlxyXG4gICAgICAgICAgPHNtZS1waXZvdC10YWIgI2V4MVRhYjEgbGFiZWw9XCJTY2hlbWFcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlLXBob25lLXVwIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lIHNtZS1hcnJhbmdlLXN0YWNrLXZcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1sYXlvdXQtcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPHNtZS1zY2hlbWEtZm9ybS1lZGl0b3Itc2NoZW1hLXRyZWUgI3NjaGVtYVRyZWUgW3NjaGVtYV09XCJlZGl0aW5nU2NoZW1hXCIgW2hpZGRlbl09XCJzY2hlbWFWaWV3IT0ndmlzdWFsJ1wiPjwvc21lLXNjaGVtYS1mb3JtLWVkaXRvci1zY2hlbWEtdHJlZT5cclxuICAgICAgICAgICAgICAgICAgPHNtZS1zY2hlbWEtZm9ybS1lZGl0b3Itc2NoZW1hLXRleHQgI3NjaGVtYVRleHQgW3NjaGVtYV09XCJlZGl0aW5nU2NoZW1hXCIgW2hpZGRlbl09XCJzY2hlbWFWaWV3IT0nY29kZSdcIj48L