UNPKG

@junte/ui

Version:

Quality Angular UI components kit

233 lines 21.2 kB
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