UNPKG

@foblex/flow

Version:

An Angular library designed to simplify the creation and manipulation of dynamic flow. Provides components for flows, nodes, and connections, automating node manipulation and inter-node connections.

113 lines 20.4 kB
import { ChangeDetectionStrategy, Component, ContentChildren, inject, Input, numberAttribute, ViewChild } from "@angular/core"; import { CONNECTION_GRADIENT, CONNECTION_PATH, CONNECTION_TEXT, FConnectionDragHandleEndComponent, FConnectionSelectionComponent, } from '../common'; import { EFConnectionBehavior } from '../common'; import { EFConnectionType } from '../common'; import { FConnectionCenterDirective } from '../f-connection-center'; import { NotifyDataChangedRequest } from '../../f-storage'; import { F_CONNECTION } from '../common/f-connection.injection-token'; //TODO: Need to deal with cyclic dependencies, since in some cases an error occurs when importing them ../common // TypeError: Class extends value undefined is not a constructor or null // at f-connection-for-create.component.ts:34:11 import { FConnectionBase } from '../common/f-connection-base'; import { castToEnum } from '@foblex/utils'; import { FMediator } from '@foblex/mediator'; import { AddConnectionForCreateToStoreRequest, RemoveConnectionForCreateFromStoreRequest } from '../../domain'; import * as i0 from "@angular/core"; import * as i1 from "../f-connection-builder"; import * as i2 from "@angular/common"; import * as i3 from "../common/f-connection-text/f-connection-text.component"; import * as i4 from "../common/f-drag-handle/f-connection-drag-handle-end.component"; import * as i5 from "../common/f-gradient/f-connection-gradient.component"; import * as i6 from "../common/f-path/f-connection-path.component"; import * as i7 from "../common/f-selection/f-connection-selection.component"; let uniqueId = 0; export class FConnectionForCreateComponent extends FConnectionBase { fId = `f-connection-for-create-${uniqueId++}`; fText = ''; fTextStartOffset = ''; fStartColor = 'black'; fEndColor = 'black'; fOutputId; fInputId; fRadius = 8; fOffset = 12; fBehavior = EFConnectionBehavior.FIXED; fType = EFConnectionType.STRAIGHT; fDraggingDisabled = false; fSelectionDisabled = false; fDefs; fPath; fGradient; fDragHandle; fSelection; fTextComponent; fConnectionCenter; fConnectionCenters; get boundingElement() { return this.fPath.hostElement; } _fMediator = inject(FMediator); constructor(elementReference, fConnectionFactory) { super(elementReference, fConnectionFactory); } ngOnInit() { this._fMediator.execute(new AddConnectionForCreateToStoreRequest(this)); } ngAfterViewInit() { this.hide(); } ngOnChanges() { this._fMediator.execute(new NotifyDataChangedRequest()); } ngOnDestroy() { this._fMediator.execute(new RemoveConnectionForCreateFromStoreRequest()); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionForCreateComponent, deps: [{ token: i0.ElementRef }, { token: i1.FConnectionFactory }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.13", type: FConnectionForCreateComponent, selector: "f-connection-for-create", inputs: { fStartColor: "fStartColor", fEndColor: "fEndColor", fRadius: ["fRadius", "fRadius", numberAttribute], fOffset: ["fOffset", "fOffset", numberAttribute], fBehavior: ["fBehavior", "fBehavior", (value) => castToEnum(value, 'fBehavior', EFConnectionBehavior)], fType: "fType" }, host: { classAttribute: "f-component f-connection f-connection-for-create" }, providers: [{ provide: F_CONNECTION, useExisting: FConnectionForCreateComponent }], queries: [{ propertyName: "fConnectionCenters", predicate: FConnectionCenterDirective, descendants: true }], viewQueries: [{ propertyName: "fDefs", first: true, predicate: ["defs"], descendants: true, static: true }, { propertyName: "fPath", first: true, predicate: CONNECTION_PATH, descendants: true, static: true }, { propertyName: "fGradient", first: true, predicate: CONNECTION_GRADIENT, descendants: true, static: true }, { propertyName: "fDragHandle", first: true, predicate: FConnectionDragHandleEndComponent, descendants: true, static: true }, { propertyName: "fSelection", first: true, predicate: FConnectionSelectionComponent, descendants: true, static: true }, { propertyName: "fTextComponent", first: true, predicate: CONNECTION_TEXT, descendants: true, static: true }, { propertyName: "fConnectionCenter", first: true, predicate: ["fConnectionCenter"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<svg xmlns=\"http://www.w3.org/2000/svg\">\n <defs #defs></defs>\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path\n [attr.d]=\"path\">\n </path>\n <circle f-connection-drag-handle-end></circle>\n </g>\n <text f-connection-text></text>\n </g>\n <ng-content></ng-content>\n</svg>\n<div #fConnectionCenter class=\"f-connection-center\" *ngIf=\"fConnectionCenters.length\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n</div>\n", styles: [":host{pointer-events:none;position:absolute}:host svg{overflow:visible}:host svg .f-connection-group{pointer-events:all}:host .f-connection-center{pointer-events:all}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.FConnectionTextComponent, selector: "text[f-connection-text]" }, { kind: "component", type: i4.FConnectionDragHandleEndComponent, selector: "circle[f-connection-drag-handle-end]" }, { kind: "component", type: i5.FConnectionGradientComponent, selector: "linearGradient[fConnectionGradient]" }, { kind: "component", type: i6.FConnectionPathComponent, selector: "path[f-connection-path]" }, { kind: "component", type: i7.FConnectionSelectionComponent, selector: "path[fConnectionSelection]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionForCreateComponent, decorators: [{ type: Component, args: [{ selector: "f-connection-for-create", changeDetection: ChangeDetectionStrategy.OnPush, host: { class: "f-component f-connection f-connection-for-create" }, providers: [{ provide: F_CONNECTION, useExisting: FConnectionForCreateComponent }], template: "<svg xmlns=\"http://www.w3.org/2000/svg\">\n <defs #defs></defs>\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path\n [attr.d]=\"path\">\n </path>\n <circle f-connection-drag-handle-end></circle>\n </g>\n <text f-connection-text></text>\n </g>\n <ng-content></ng-content>\n</svg>\n<div #fConnectionCenter class=\"f-connection-center\" *ngIf=\"fConnectionCenters.length\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n</div>\n", styles: [":host{pointer-events:none;position:absolute}:host svg{overflow:visible}:host svg .f-connection-group{pointer-events:all}:host .f-connection-center{pointer-events:all}\n"] }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.FConnectionFactory }], propDecorators: { fStartColor: [{ type: Input }], fEndColor: [{ type: Input }], fRadius: [{ type: Input, args: [{ transform: numberAttribute }] }], fOffset: [{ type: Input, args: [{ transform: numberAttribute }] }], fBehavior: [{ type: Input, args: [{ transform: (value) => castToEnum(value, 'fBehavior', EFConnectionBehavior) }] }], fType: [{ type: Input }], fDefs: [{ type: ViewChild, args: ['defs', { static: true }] }], fPath: [{ type: ViewChild, args: [CONNECTION_PATH, { static: true }] }], fGradient: [{ type: ViewChild, args: [CONNECTION_GRADIENT, { static: true }] }], fDragHandle: [{ type: ViewChild, args: [FConnectionDragHandleEndComponent, { static: true }] }], fSelection: [{ type: ViewChild, args: [FConnectionSelectionComponent, { static: true }] }], fTextComponent: [{ type: ViewChild, args: [CONNECTION_TEXT, { static: true }] }], fConnectionCenter: [{ type: ViewChild, args: ['fConnectionCenter', { static: false }] }], fConnectionCenters: [{ type: ContentChildren, args: [FConnectionCenterDirective, { descendants: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1jb25uZWN0aW9uLWZvci1jcmVhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9mLWNvbm5lY3Rpb24vZi1jb25uZWN0aW9uLWZvci1jcmVhdGUvZi1jb25uZWN0aW9uLWZvci1jcmVhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9mLWNvbm5lY3Rpb24vZi1jb25uZWN0aW9uLWZvci1jcmVhdGUvZi1jb25uZWN0aW9uLWZvci1jcmVhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUVmLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUtmLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLGlDQUFpQyxFQUFFLDZCQUE2QixHQUVqRSxNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXBFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RSxnSEFBZ0g7QUFDaEgsd0VBQXdFO0FBQ3hFLGdEQUFnRDtBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0s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QyxLQUFjLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixDQUFDLEVBQUU7Z0JBSTlFLEtBQUs7c0JBRHBCLEtBQUs7Z0JBUVUsS0FBSztzQkFEcEIsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUluQixLQUFLO3NCQURwQixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTVCLFNBQVM7c0JBRHhCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUloQyxXQUFXO3NCQUQxQixTQUFTO3VCQUFDLGlDQUFpQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJOUMsVUFBVTtzQkFEekIsU0FBUzt1QkFBQyw2QkFBNkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTFDLGNBQWM7c0JBRDdCLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJNUIsaUJBQWlCO3NCQURoQyxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJMUMsa0JBQWtCO3NCQUR4QixlQUFlO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgQ09OTkVDVElPTl9HUkFESUVOVCxcbiAgQ09OTkVDVElPTl9QQVRILCBDT05ORUNUSU9OX1RFWFQsXG4gIEZDb25uZWN0aW9uRHJhZ0hhbmRsZUVuZENvbXBvbmVudCwgRkNvbm5lY3Rpb25TZWxlY3Rpb25Db21wb25lbnQsIElDb25uZWN0aW9uR3JhZGllbnQsXG4gIElDb25uZWN0aW9uUGF0aCwgSUNvbm5lY3Rpb25UZXh0LFxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRUZDb25uZWN0aW9uQmVoYXZpb3IgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRUZDb25uZWN0aW9uVHlwZSB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBGQ29ubmVjdGlvbkNlbnRlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2YtY29ubmVjdGlvbi1jZW50ZXInO1xuaW1wb3J0IHsgRkNvbm5lY3Rpb25GYWN0b3J5IH0gZnJvbSAnLi4vZi1jb25uZWN0aW9uLWJ1aWxkZXInO1xuaW1wb3J0IHsgTm90aWZ5RGF0YUNoYW5nZWRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZi1zdG9yYWdlJztcbmltcG9ydCB7IEZfQ09OTkVDVElPTiB9IGZyb20gJy4uL2NvbW1vbi9mLWNvbm5lY3Rpb24uaW5qZWN0aW9uLXRva2VuJztcbi8vVE9ETzogTmVlZCB0byBkZWFsIHdpdGggY3ljbGljIGRlcGVuZGVuY2llcywgc2luY2UgaW4gc29tZSBjYXNlcyBhbiBlcnJvciBvY2N1cnMgd2hlbiBpbXBvcnRpbmcgdGhlbSAuLi9jb21tb25cbi8vIFR5cGVFcnJvcjogQ2xhc3MgZXh0ZW5kcyB2YWx1ZSB1bmRlZmluZWQgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFxuLy8gYXQgZi1jb25uZWN0aW9uLWZvci1jcmVhdGUuY29tcG9uZW50LnRzOjM0OjExXG5pbXBvcnQgeyBGQ29ubmVjdGlvbkJhc2UgfSBmcm9tICcuLi9jb21tb24vZi1jb25uZWN0aW9uLWJhc2UnO1xuaW1wb3J0IHsgY2FzdFRvRW51bSB9IGZyb20gJ0Bmb2JsZXgvdXRpbHMnO1xuaW1wb3J0IHsgRk1lZGlhdG9yIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQgeyBBZGRDb25uZWN0aW9uRm9yQ3JlYXRlVG9TdG9yZVJlcXVlc3QsIFJlbW92ZUNvbm5lY3Rpb25Gb3JDcmVhdGVGcm9tU3RvcmVSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZG9tYWluJztcblxubGV0IHVuaXF1ZUlkOiBudW1iZXIgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiZi1jb25uZWN0aW9uLWZvci1jcmVhdGVcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9mLWNvbm5lY3Rpb24tZm9yLWNyZWF0ZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFsgXCIuL2YtY29ubmVjdGlvbi1mb3ItY3JlYXRlLmNvbXBvbmVudC5zY3NzXCIgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogXCJmLWNvbXBvbmVudCBmLWNvbm5lY3Rpb24gZi1jb25uZWN0aW9uLWZvci1jcmVhdGVcIlxuICB9LFxuICBwcm92aWRlcnM6IFsgeyBwcm92aWRlOiBGX0NPTk5FQ1RJT04sIHVzZUV4aXN0aW5nOiBGQ29ubmVjdGlvbkZvckNyZWF0ZUNvbXBvbmVudCB9IF0sXG59KVxuZXhwb3J0IGNsYXNzIEZDb25uZWN0aW9uRm9yQ3JlYXRlQ29tcG9uZW50XG4gIGV4dGVuZHMgRkNvbm5lY3Rpb25CYXNlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIG92ZXJyaWRlIGZJZDogc3RyaW5nID0gYGYtY29ubmVjdGlvbi1mb3ItY3JlYXRlLSR7IHVuaXF1ZUlkKysgfWA7XG5cbiAgcHVibGljIG92ZXJyaWRlIGZUZXh0OiBzdHJpbmcgPSAnJztcblxuICBwdWJsaWMgb3ZlcnJpZGUgZlRleHRTdGFydE9mZnNldDogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG92ZXJyaWRlIGZTdGFydENvbG9yOiBzdHJpbmcgPSAnYmxhY2snO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvdmVycmlkZSBmRW5kQ29sb3I6IHN0cmluZyA9ICdibGFjayc7XG5cbiAgcHVibGljIG92ZXJyaWRlIGZPdXRwdXRJZCE6IHN0cmluZztcblxuICBwdWJsaWMgb3ZlcnJpZGUgZklucHV0SWQhOiBzdHJpbmc7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgcHVibGljIG92ZXJyaWRlIGZSYWRpdXM6IG51bWJlciA9IDg7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgcHVibGljIG92ZXJyaWRlIGZPZmZzZXQ6IG51bWJlciA9IDEyO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogKHZhbHVlOiB1bmtub3duKSA9PiBjYXN0VG9FbnVtKHZhbHVlLCAnZkJlaGF2aW9yJywgRUZDb25uZWN0aW9uQmVoYXZpb3IpIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBmQmVoYXZpb3I6IEVGQ29ubmVjdGlvbkJlaGF2aW9yID0gRUZDb25uZWN0aW9uQmVoYXZpb3IuRklYRUQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG92ZXJyaWRlIGZUeXBlOiBFRkNvbm5lY3Rpb25UeXBlIHwgc3RyaW5nID0gRUZDb25uZWN0aW9uVHlwZS5TVFJBSUdIVDtcblxuICBwdWJsaWMgb3ZlcnJpZGUgZkRyYWdnaW5nRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgb3ZlcnJpZGUgZlNlbGVjdGlvbkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnZGVmcycsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBmRGVmcyE6IEVsZW1lbnRSZWY8U1ZHRGVmc0VsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoQ09OTkVDVElPTl9QQVRILCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgZlBhdGghOiBJQ29ubmVjdGlvblBhdGg7XG5cbiAgQFZpZXdDaGlsZChDT05ORUNUSU9OX0dSQURJRU5ULCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgZkdyYWRpZW50ITogSUNvbm5lY3Rpb25HcmFkaWVudDtcblxuICBAVmlld0NoaWxkKEZDb25uZWN0aW9uRHJhZ0hhbmRsZUVuZENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIG92ZXJyaWRlIGZEcmFnSGFuZGxlITogRkNvbm5lY3Rpb25EcmFnSGFuZGxlRW5kQ29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoRkNvbm5lY3Rpb25TZWxlY3Rpb25Db21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBmU2VsZWN0aW9uITogRkNvbm5lY3Rpb25TZWxlY3Rpb25Db21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZChDT05ORUNUSU9OX1RFWFQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBmVGV4dENvbXBvbmVudCE6IElDb25uZWN0aW9uVGV4dDtcblxuICBAVmlld0NoaWxkKCdmQ29ubmVjdGlvbkNlbnRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgZkNvbm5lY3Rpb25DZW50ZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKEZDb25uZWN0aW9uQ2VudGVyRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHB1YmxpYyBmQ29ubmVjdGlvbkNlbnRlcnMhOiBRdWVyeUxpc3Q8RkNvbm5lY3Rpb25DZW50ZXJEaXJlY3RpdmU+O1xuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgYm91bmRpbmdFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZlBhdGguaG9zdEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIF9mTWVkaWF0b3IgPSBpbmplY3QoRk1lZGlhdG9yKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbGVtZW50UmVmZXJlbmNlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBmQ29ubmVjdGlvbkZhY3Rvcnk6IEZDb25uZWN0aW9uRmFjdG9yeVxuICApIHtcbiAgICBzdXBlcihlbGVtZW50UmVmZXJlbmNlLCBmQ29ubmVjdGlvbkZhY3RvcnkpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlKG5ldyBBZGRDb25uZWN0aW9uRm9yQ3JlYXRlVG9TdG9yZVJlcXVlc3QodGhpcykpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmhpZGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9mTWVkaWF0b3IuZXhlY3V0ZShuZXcgTm90aWZ5RGF0YUNoYW5nZWRSZXF1ZXN0KCkpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlKG5ldyBSZW1vdmVDb25uZWN0aW9uRm9yQ3JlYXRlRnJvbVN0b3JlUmVxdWVzdCgpKTtcbiAgfVxufVxuIiwiPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gIDxkZWZzICNkZWZzPjwvZGVmcz5cbiAgPGcgY2xhc3M9XCJmLWNvbm5lY3Rpb24tZ3JvdXBcIj5cbiAgICA8bGluZWFyR3JhZGllbnQgZkNvbm5lY3Rpb25HcmFkaWVudD48L2xpbmVhckdyYWRpZW50PlxuICAgIDxwYXRoIGZDb25uZWN0aW9uU2VsZWN0aW9uIFthdHRyLmRdPVwicGF0aFwiPjwvcGF0aD5cbiAgICA8Zz5cbiAgICAgIDxwYXRoIGYtY29ubmVjdGlvbi1wYXRoXG4gICAgICAgICAgICBbYXR0ci5kXT1cInBhdGhcIj5cbiAgICAgIDwvcGF0aD5cbiAgICAgIDxjaXJjbGUgZi1jb25uZWN0aW9uLWRyYWctaGFuZGxlLWVuZD48L2NpcmNsZT5cbiAgICA8L2c+XG4gICAgPHRleHQgZi1jb25uZWN0aW9uLXRleHQ+PC90ZXh0PlxuICA8L2c+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvc3ZnPlxuPGRpdiAjZkNvbm5lY3Rpb25DZW50ZXIgY2xhc3M9XCJmLWNvbm5lY3Rpb24tY2VudGVyXCIgKm5nSWY9XCJmQ29ubmVjdGlvbkNlbnRlcnMubGVuZ3RoXCI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIltmQ29ubmVjdGlvbkNlbnRlcl1cIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==