@junte/ui
Version:
Quality Angular UI components kit
233 lines • 21.2 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, ContentChildren, HostBinding, Input, QueryList, ViewChild } from '@angular/core';
import { RouterLinkActive } from '@angular/router';
import { PropertyApi } from '../../core/decorators/api';
import { Context } from '../../core/enums/context';
import { Feature } from '../../core/enums/feature';
import { Outline } from '../../core/enums/outline';
import { Position } from '../../core/enums/position';
import { UI } from '../../core/enums/ui';
import { UrlMatching } from '../../core/enums/url';
import { BadgeComponent } from '../../elements/badge/badge.component';
import { LinkTarget } from './enums';
let LinkComponent = class LinkComponent {
constructor() {
this.host = 'jnt-link-host';
this.ui = UI;
this._target = LinkTarget.self;
this._matching = UrlMatching.fullMatch;
this.externalLink = true;
this._context = Context.text;
this._outline = Outline.transparent;
this.disabled = false;
this._orphan = false;
this.features = [];
}
get withTitle() {
return !!this.title;
}
// TODO: we must find better solution
get linkActive() {
return !!this.linkRef ? this.linkRef.isActive : false;
}
set outline(outline) {
this._outline = outline || Outline.transparent;
}
set __icon__(icon) {
this.icon = (typeof (icon) === 'string'
? { icon: icon, position: Position.left } : icon);
}
get position() {
return !!this.icon ? this.icon.position : null;
}
set source(source) {
if (!!source) {
this.externalLink = !Array.isArray(source);
this._source = source;
}
else {
this._orphan = true;
}
}
get source() {
return this._source;
}
set target(target) {
this._target = target || LinkTarget.self;
}
get target() {
return this._target;
}
set matching(matching) {
this._matching = matching || UrlMatching.fullMatch;
}
get matching() {
return this._matching;
}
set context(context) {
this._context = context || Context.text;
}
};
__decorate([
HostBinding('attr.host'),
__metadata("design:type", Object)
], LinkComponent.prototype, "host", void 0);
__decorate([
HostBinding('attr.data-context'),
__metadata("design:type", String)
], LinkComponent.prototype, "_context", void 0);
__decorate([
HostBinding('attr.data-outline'),
__metadata("design:type", Object)
], LinkComponent.prototype, "_outline", void 0);
__decorate([
HostBinding('attr.data-with-title'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], LinkComponent.prototype, "withTitle", null);
__decorate([
Input(),
__metadata("design:type", Boolean)
], LinkComponent.prototype, "collapsed", void 0);
__decorate([
HostBinding('attr.data-active'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], LinkComponent.prototype, "linkActive", null);
__decorate([
PropertyApi({
description: 'Disable link',
type: 'boolean',
default: 'false'
}),
HostBinding('attr.data-disabled'),
Input(),
__metadata("design:type", Object)
], LinkComponent.prototype, "disabled", void 0);
__decorate([
PropertyApi({
description: 'Link outline',
path: 'ui.outline',
default: Outline.transparent,
options: [Outline.transparent,
Outline.ghost,
Outline.fill]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], LinkComponent.prototype, "outline", null);
__decorate([
PropertyApi({
description: 'Icon for link',
type: 'string',
name: 'icon'
}),
Input('icon'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], LinkComponent.prototype, "__icon__", null);
__decorate([
HostBinding('attr.data-position'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], LinkComponent.prototype, "position", null);
__decorate([
PropertyApi({
description: 'Link title',
type: 'string'
}),
Input(),
__metadata("design:type", String)
], LinkComponent.prototype, "title", void 0);
__decorate([
PropertyApi({
description: 'Link query params',
type: '{[k: string]: any}'
}),
Input(),
__metadata("design:type", Object)
], LinkComponent.prototype, "queryParams", void 0);
__decorate([
PropertyApi({
description: 'Link source',
type: 'string | string[]'
}),
Input(),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], LinkComponent.prototype, "source", null);
__decorate([
HostBinding('attr.data-orphan'),
__metadata("design:type", Object)
], LinkComponent.prototype, "_orphan", void 0);
__decorate([
PropertyApi({
description: 'Link target',
path: 'ui.target',
default: LinkTarget.self,
options: [LinkTarget.blank,
LinkTarget.self,
LinkTarget.parent,
LinkTarget.top]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], LinkComponent.prototype, "target", null);
__decorate([
PropertyApi({
description: 'Fragment for link #anchor',
default: 'null',
}),
Input(),
__metadata("design:type", String)
], LinkComponent.prototype, "fragment", void 0);
__decorate([
PropertyApi({
description: 'Matching to activate link',
path: 'ui.matching',
default: UrlMatching.fullMatch,
options: [UrlMatching.fullMatch, UrlMatching.wildcard]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], LinkComponent.prototype, "matching", null);
__decorate([
PropertyApi({
description: 'Show chevron near link',
path: 'ui.feature',
options: [Feature.dropdown],
}),
HostBinding('attr.data-features'),
Input(),
__metadata("design:type", Array)
], LinkComponent.prototype, "features", void 0);
__decorate([
PropertyApi({
description: 'Link context',
path: 'ui.context',
default: Context.text,
options: [Context.text, Context.box]
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], LinkComponent.prototype, "context", null);
__decorate([
ViewChild(RouterLinkActive),
__metadata("design:type", RouterLinkActive)
], LinkComponent.prototype, "linkRef", void 0);
__decorate([
ContentChildren(BadgeComponent),
__metadata("design:type", QueryList)
], LinkComponent.prototype, "badges", void 0);
LinkComponent = __decorate([
Component({
selector: 'jnt-link',
template: "<ng-container *ngIf=\"externalLink; else internalLinkTemplate\">\n <ng-container *ngIf=\"!!source; else emptySourceTemplate\">\n <a child-of=\"jnt-link-host\" data-link [href]=\"source\" [target]=\"'_' + target\">\n <ng-container *ngTemplateOutlet=\"linkTemplate\"></ng-container>\n </a>\n </ng-container>\n <ng-template #emptySourceTemplate>\n <a child-of=\"jnt-link-host\" data-link>\n <ng-container *ngTemplateOutlet=\"linkTemplate\"></ng-container>\n </a>\n </ng-template>\n</ng-container>\n\n<ng-template #internalLinkTemplate>\n <a child-of=\"jnt-link-host\" data-link #link=\"routerLinkActive\" routerLinkActive [attr.data-active]=\"link.isActive\"\n [routerLink]=\"source\"\n [routerLinkActiveOptions]=\"{exact: matching === ui.matching.fullMatch}\"\n [queryParams]=\"queryParams\"\n [fragment]=\"fragment\">\n <ng-container *ngTemplateOutlet=\"linkTemplate\"></ng-container>\n </a>\n</ng-template>\n\n<ng-template #linkTemplate>\n <span child-of=\"jnt-link-host\" data-title *ngIf=\"!!icon || !!title\">\n <jnt-icon child-of=\"jnt-link-host\" *ngIf=\"!!icon && icon.position === ui.position.left\" [icon]=\"icon?.icon\"></jnt-icon>\n <span child-of=\"jnt-link-host\" *ngIf=\"!!title\" [innerHTML]=\"title | sanitizeHtml\"></span>\n <jnt-icon child-of=\"jnt-link-host\" *ngIf=\"!!icon && icon.position === ui.position.right\" [icon]=\"icon?.icon\"></jnt-icon>\n </span>\n <div child-of=\"jnt-link-host\" data-empty *ngIf=\"collapsed && !icon\"></div>\n <ng-container *ngIf=\"!!badges.length\">\n <jnt-badge child-of=\"jnt-link-host\" data-badge *ngFor=\"let badge of badges\"\n [color]=\"badge.color\"\n [value]=\"badge.value\"\n [text]=\"badge.text\"\n [position]=\"ui.position.inline\">\n </jnt-badge>\n </ng-container>\n <jnt-icon child-of=\"jnt-link-host\" *ngIf=\"features | includes : ui.feature.dropdown\"\n [icon]=\"ui.icons.selectClose\" data-toggle>\n </jnt-icon>\n</ng-template>"
})
], LinkComponent);
export { LinkComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AanVudGUvdWkvIiwic291cmNlcyI6WyJsaWIvbmF2aWdhdGlvbi9saW5rL2xpbmsuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBV3JDLElBQWEsYUFBYSxHQUExQixNQUFhLGFBQWE7SUFBMUI7UUFFcUMsU0FBSSxHQUFHLGVBQWUsQ0FBQztRQUUxRCxPQUFFLEdBQUcsRUFBRSxDQUFDO1FBSUEsWUFBTyxHQUFlLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdEMsY0FBUyxHQUFnQixXQUFXLENBQUMsU0FBUyxDQUFDO1FBRXZELGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBR3BCLGFBQVEsR0FBWSxPQUFPLENBQUMsSUFBSSxDQUFDO1FBR2pDLGFB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IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBIb3N0QmluZGluZywgSW5wdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rQWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFByb3BlcnR5QXBpIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzL2FwaSc7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy9jb250ZXh0JztcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL2ZlYXR1cmUnO1xuaW1wb3J0IHsgT3V0bGluZSB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvb3V0bGluZSc7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvcG9zaXRpb24nO1xuaW1wb3J0IHsgVUkgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL3VpJztcbmltcG9ydCB7IFVybE1hdGNoaW5nIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy91cmwnO1xuaW1wb3J0IHsgQmFkZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9iYWRnZS9iYWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlua1RhcmdldCB9IGZyb20gJy4vZW51bXMnO1xuXG5pbnRlcmZhY2UgSWNvbiB7XG4gIGljb246IHN0cmluZztcbiAgcG9zaXRpb246IFBvc2l0aW9uO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdqbnQtbGluaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9saW5rLmVuY2Fwc3VsYXRlZC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBMaW5rQ29tcG9uZW50IHtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaG9zdCcpIHJlYWRvbmx5IGhvc3QgPSAnam50LWxpbmstaG9zdCc7XG5cbiAgdWkgPSBVSTtcbiAgaWNvbjogSWNvbjtcblxuICBwcml2YXRlIF9zb3VyY2U6IHN0cmluZyB8IGFueVtdO1xuICBwcml2YXRlIF90YXJnZXQ6IExpbmtUYXJnZXQgPSBMaW5rVGFyZ2V0LnNlbGY7XG4gIHByaXZhdGUgX21hdGNoaW5nOiBVcmxNYXRjaGluZyA9IFVybE1hdGNoaW5nLmZ1bGxNYXRjaDtcblxuICBleHRlcm5hbExpbmsgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWNvbnRleHQnKVxuICBfY29udGV4dDogQ29udGV4dCA9IENvbnRleHQudGV4dDtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1vdXRsaW5lJylcbiAgX291dGxpbmUgPSBPdXRsaW5lLnRyYW5zcGFyZW50O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXdpdGgtdGl0bGUnKVxuICBnZXQgd2l0aFRpdGxlKCkge1xuICAgIHJldHVybiAhIXRoaXMudGl0bGU7XG4gIH1cblxuICBASW5wdXQoKSBjb2xsYXBzZWQ6IGJvb2xlYW47XG5cbiAgLy8gVE9ETzogd2UgbXVzdCBmaW5kIGJldHRlciBzb2x1dGlvblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1hY3RpdmUnKVxuICBnZXQgbGlua0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmxpbmtSZWYgPyB0aGlzLmxpbmtSZWYuaXNBY3RpdmUgOiBmYWxzZTtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdEaXNhYmxlIGxpbmsnLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiAnZmFsc2UnXG4gIH0pXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWRpc2FibGVkJylcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnTGluayBvdXRsaW5lJyxcbiAgICBwYXRoOiAndWkub3V0bGluZScsXG4gICAgZGVmYXVsdDogT3V0bGluZS50cmFuc3BhcmVudCxcbiAgICBvcHRpb25zOiBbT3V0bGluZS50cmFuc3BhcmVudCxcbiAgICAgIE91dGxpbmUuZ2hvc3QsXG4gICAgICBPdXRsaW5lLmZpbGxdXG4gIH0pXG4gIEBJbnB1dCgpIHNldCBvdXRsaW5lKG91dGxpbmU6IE91dGxpbmUpIHtcbiAgICB0aGlzLl9vdXRsaW5lID0gb3V0bGluZSB8fCBPdXRsaW5lLnRyYW5zcGFyZW50O1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0ljb24gZm9yIGxpbmsnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIG5hbWU6ICdpY29uJ1xuICB9KVxuICBASW5wdXQoJ2ljb24nKVxuICBzZXQgX19pY29uX18oaWNvbjogc3RyaW5nIHwgSWNvbikge1xuICAgIHRoaXMuaWNvbiA9ICh0eXBlb2YgKGljb24pID09PSAnc3RyaW5nJ1xuICAgICAgPyB7aWNvbjogaWNvbiwgcG9zaXRpb246IFBvc2l0aW9uLmxlZnR9IDogaWNvbikgYXMgSWNvbjtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXBvc2l0aW9uJykgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiAhIXRoaXMuaWNvbiA/IHRoaXMuaWNvbi5wb3NpdGlvbiA6IG51bGw7XG4gIH1cblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnTGluayB0aXRsZScsXG4gICAgdHlwZTogJ3N0cmluZydcbiAgfSlcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnTGluayBxdWVyeSBwYXJhbXMnLFxuICAgIHR5cGU6ICd7W2s6IHN0cmluZ106IGFueX0nXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHF1ZXJ5UGFyYW1zOiB7W2s6IHN0cmluZ106IGFueX07XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0xpbmsgc291cmNlJyxcbiAgICB0eXBlOiAnc3RyaW5nIHwgc3RyaW5nW10nXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBzb3VyY2Uoc291cmNlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGlmICghIXNvdXJjZSkge1xuICAgICAgdGhpcy5leHRlcm5hbExpbmsgPSAhQXJyYXkuaXNBcnJheShzb3VyY2UpO1xuICAgICAgdGhpcy5fc291cmNlID0gc291cmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcnBoYW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLW9ycGhhbicpXG4gIF9vcnBoYW4gPSBmYWxzZTtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnTGluayB0YXJnZXQnLFxuICAgIHBhdGg6ICd1aS50YXJnZXQnLFxuICAgIGRlZmF1bHQ6IExpbmtUYXJnZXQuc2VsZixcbiAgICBvcHRpb25zOiBbTGlua1RhcmdldC5ibGFuayxcbiAgICAgIExpbmtUYXJnZXQuc2VsZixcbiAgICAgIExpbmtUYXJnZXQucGFyZW50LFxuICAgICAgTGlua1RhcmdldC50b3BdXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCB0YXJnZXQodGFyZ2V0OiBMaW5rVGFyZ2V0KSB7XG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0IHx8IExpbmtUYXJnZXQuc2VsZjtcbiAgfVxuXG4gIGdldCB0YXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdGcmFnbWVudCBmb3IgbGluayAjYW5jaG9yJyxcbiAgICBkZWZhdWx0OiAnbnVsbCcsXG4gIH0pXG4gIEBJbnB1dCgpXG4gIGZyYWdtZW50OiBzdHJpbmc7XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ01hdGNoaW5nIHRvIGFjdGl2YXRlIGxpbmsnLFxuICAgIHBhdGg6ICd1aS5tYXRjaGluZycsXG4gICAgZGVmYXVsdDogVXJsTWF0Y2hpbmcuZnVsbE1hdGNoLFxuICAgIG9wdGlvbnM6IFtVcmxNYXRjaGluZy5mdWxsTWF0Y2gsIFVybE1hdGNoaW5nLndpbGRjYXJkXVxuICB9KVxuICBASW5wdXQoKVxuICBzZXQgbWF0Y2hpbmcobWF0Y2hpbmc6IFVybE1hdGNoaW5nKSB7XG4gICAgdGhpcy5fbWF0Y2hpbmcgPSBtYXRjaGluZyB8fCBVcmxNYXRjaGluZy5mdWxsTWF0Y2g7XG4gIH1cblxuICBnZXQgbWF0Y2hpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21hdGNoaW5nO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1Nob3cgY2hldnJvbiBuZWFyIGxpbmsnLFxuICAgIHBhdGg6ICd1aS5mZWF0dXJlJyxcbiAgICBvcHRpb25zOiBbRmVhdHVyZS5kcm9wZG93bl0sXG4gIH0pXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWZlYXR1cmVzJylcbiAgQElucHV0KClcbiAgZmVhdHVyZXM6IEZlYXR1cmVbXSA9IFtdO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdMaW5rIGNvbnRleHQnLFxuICAgIHBhdGg6ICd1aS5jb250ZXh0JyxcbiAgICBkZWZhdWx0OiBDb250ZXh0LnRleHQsXG4gICAgb3B0aW9uczogW0NvbnRleHQudGV4dCwgQ29udGV4dC5ib3hdXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBjb250ZXh0KGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICB0aGlzLl9jb250ZXh0ID0gY29udGV4dCB8fCBDb250ZXh0LnRleHQ7XG4gIH1cblxuICBAVmlld0NoaWxkKFJvdXRlckxpbmtBY3RpdmUpXG4gIGxpbmtSZWY6IFJvdXRlckxpbmtBY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihCYWRnZUNvbXBvbmVudClcbiAgYmFkZ2VzOiBRdWVyeUxpc3Q8QmFkZ2VDb21wb25lbnQ+O1xufVxuIl19