UNPKG

xui

Version:

xUI Components for Angular

84 lines 15 kB
import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, Optional, SkipSelf, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core'; import { TemplatePortal } from '@angular/cdk/portal'; import { PANEL_BAR_ACCESSOR } from './panelbar.types'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/cdk/portal"; import * as i3 from "../icon/icon.component"; export class PanelBarItemComponent { get offset() { return this.parentItem ? this.parentItem.offset + 1 : 0; } get paddingLeft() { return 8 + this.offset * 24; } get hasContent() { return this.content ?? this._children ?? this.contentDirective ?? this.contentRef.nativeElement.children.length; } constructor(panelBar, viewContainerRef, parentItem) { this.panelBar = panelBar; this.viewContainerRef = viewContainerRef; this.parentItem = parentItem; this.expanded = false; } ngOnInit() { const content = this.contentDirective ?? this.panelBar.itemTemplate ?? this.contentTemplate; this.contentPortal = new TemplatePortal(content, this.viewContainerRef, { $implicit: { title: this.title, content: this.content } }); const title = this.titleDirective ?? this.titleTemplate; this.titlePortal = new TemplatePortal(title, this.viewContainerRef, { $implicit: { title: this.title, content: this.content } }); } clickItem() { if (this.hasContent) { this.expanded = !this.expanded; // TODO; emit event } else { // TODO: emit click event? } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: PanelBarItemComponent, deps: [{ token: PANEL_BAR_ACCESSOR }, { token: i0.ViewContainerRef }, { token: PanelBarItemComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: PanelBarItemComponent, selector: "xui-panelbar-item", inputs: { title: "title", content: "content", icon: "icon", iconClass: "iconClass", expanded: "expanded", _children: "_children" }, viewQueries: [{ propertyName: "contentTemplate", first: true, predicate: ["contentTemplate"], descendants: true, static: true }, { propertyName: "titleTemplate", first: true, predicate: ["titleTemplate"], descendants: true, static: true }, { propertyName: "contentRef", first: true, predicate: ["contentRef"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"x-panelbar-item\">\n <div (click)=\"clickItem()\" class=\"x-panelbar-item-title\" [style.padding-left.px]=\"paddingLeft\">\n <ng-template [cdkPortalOutlet]=\"titlePortal\"></ng-template>\n <div class=\"x-panelbar-item-spacer\"></div>\n <xui-icon class=\"x-panelbar-item-chevron\" *ngIf=\"hasContent\">{{\n expanded ? 'chevron-down' : 'chevron-up'\n }}</xui-icon>\n </div>\n\n <div [style.display]=\"expanded ? 'block' : 'none'\" #contentRef>\n <ng-container *ngIf=\"contentDirective || content\">\n <ng-template [cdkPortalOutlet]=\"contentPortal\"></ng-template>\n </ng-container>\n <ng-content select=\"xui-panelbar-item\"></ng-content>\n\n <xui-panelbar-item *ngFor=\"let child of _children\" [title]=\"child.title\" [_children]=\"child.children\">\n </xui-panelbar-item>\n </div>\n</div>\n\n<ng-template #contentTemplate>\n <div class=\"x-panelbar-item-content\" [style.padding-left.px]=\"paddingLeft\">\n {{ content }}\n </div>\n</ng-template>\n\n<ng-template #titleTemplate>\n <xui-icon [class]=\"iconClass\" *ngIf=\"icon\">{{ icon }}</xui-icon>\n {{ title }}\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: i3.IconComponent, selector: "xui-icon" }, { kind: "component", type: PanelBarItemComponent, selector: "xui-panelbar-item", inputs: ["title", "content", "icon", "iconClass", "expanded", "_children"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: PanelBarItemComponent, decorators: [{ type: Component, args: [{ selector: 'xui-panelbar-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"x-panelbar-item\">\n <div (click)=\"clickItem()\" class=\"x-panelbar-item-title\" [style.padding-left.px]=\"paddingLeft\">\n <ng-template [cdkPortalOutlet]=\"titlePortal\"></ng-template>\n <div class=\"x-panelbar-item-spacer\"></div>\n <xui-icon class=\"x-panelbar-item-chevron\" *ngIf=\"hasContent\">{{\n expanded ? 'chevron-down' : 'chevron-up'\n }}</xui-icon>\n </div>\n\n <div [style.display]=\"expanded ? 'block' : 'none'\" #contentRef>\n <ng-container *ngIf=\"contentDirective || content\">\n <ng-template [cdkPortalOutlet]=\"contentPortal\"></ng-template>\n </ng-container>\n <ng-content select=\"xui-panelbar-item\"></ng-content>\n\n <xui-panelbar-item *ngFor=\"let child of _children\" [title]=\"child.title\" [_children]=\"child.children\">\n </xui-panelbar-item>\n </div>\n</div>\n\n<ng-template #contentTemplate>\n <div class=\"x-panelbar-item-content\" [style.padding-left.px]=\"paddingLeft\">\n {{ content }}\n </div>\n</ng-template>\n\n<ng-template #titleTemplate>\n <xui-icon [class]=\"iconClass\" *ngIf=\"icon\">{{ icon }}</xui-icon>\n {{ title }}\n</ng-template>\n" }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [PANEL_BAR_ACCESSOR] }] }, { type: i0.ViewContainerRef }, { type: PanelBarItemComponent, decorators: [{ type: Optional }, { type: SkipSelf }] }]; }, propDecorators: { title: [{ type: Input }], content: [{ type: Input }], icon: [{ type: Input }], iconClass: [{ type: Input }], expanded: [{ type: Input }], _children: [{ type: Input }], contentTemplate: [{ type: ViewChild, args: ['contentTemplate', { static: true }] }], titleTemplate: [{ type: ViewChild, args: ['titleTemplate', { static: true }] }], contentRef: [{ type: ViewChild, args: ['contentRef', { static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxiYXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3h1aS9zcmMvcGFuZWxiYXIvcGFuZWxiYXItaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3h1aS9zcmMvcGFuZWxiYXIvcGFuZWxiYXItaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBVSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQWtDLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBUXRGLE1BQU0sT0FBTyxxQkFBcUI7SUFvQmhDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUNsSCxDQUFDO0lBRUQsWUFDc0MsUUFBMEIsRUFDdEQsZ0JBQWtDLEVBQ1YsVUFBaUM7UUFGN0IsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFDdEQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNWLGVBQVUsR0FBVixVQUFVLENBQXVCO1FBdkIxRCxhQUFRLEdBQUcsS0FBSyxDQUFDO0lBd0J2QixDQUFDO0lBRUosUUFBUTtRQUNOLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzVGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN0RSxTQUFTLEVBQWdCO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzthQUN0QjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDbEUsU0FBUyxFQUFnQjtnQkFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDdEI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvQixtQkFBbUI7U0FDcEI7YUFBTTtZQUNMLDBCQUEwQjtTQUMzQjtJQUNILENBQUM7OEdBL0RVLHFCQUFxQixrQkFpQ3RCLGtCQUFrQjtrR0FqQ2pCLHFCQUFxQix1aEJDdEJsQyx5bkNBOEJBLHFmRFJhLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBRVosdUJBQXVCLENBQUMsTUFBTTs7MEJBbUM1QyxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBRXpCLFFBQVE7OzBCQUFJLFFBQVE7NENBM0JkLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUUwQyxlQUFlO3NCQUE5RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDQSxhQUFhO3NCQUExRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0QsVUFBVTtzQkFBcEQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2tpcFNlbGYsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb3J0YWwsIFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBQQU5FTF9CQVJfQUNDRVNTT1IsIFBhbmVsQmFyQWNjZXNzb3IsIFBhbmVsQmFySXRlbSB9IGZyb20gJy4vcGFuZWxiYXIudHlwZXMnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneHVpLXBhbmVsYmFyLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFuZWxiYXItaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBhbmVsQmFySXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHBhbmRlZDogQm9vbGVhbklucHV0O1xuICBjb250ZW50UG9ydGFsPzogUG9ydGFsPHVua25vd24+O1xuICB0aXRsZVBvcnRhbD86IFBvcnRhbDx1bmtub3duPjtcblxuICBjb250ZW50RGlyZWN0aXZlPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIHRpdGxlRGlyZWN0aXZlPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgdGl0bGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvbnRlbnQ6IGFueTtcbiAgQElucHV0KCkgaWNvbj86IHN0cmluZztcbiAgQElucHV0KCkgaWNvbkNsYXNzPzogc3RyaW5nO1xuICBASW5wdXQoKSBleHBhbmRlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIF9jaGlsZHJlbj86IFBhbmVsQmFySXRlbVtdO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnRUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRlbnRUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICBAVmlld0NoaWxkKCd0aXRsZVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgdGl0bGVUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICBAVmlld0NoaWxkKCdjb250ZW50UmVmJywgeyBzdGF0aWM6IHRydWUgfSkgY29udGVudFJlZiE6IEVsZW1lbnRSZWY7XG5cbiAgZ2V0IG9mZnNldCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudEl0ZW0gPyB0aGlzLnBhcmVudEl0ZW0ub2Zmc2V0ICsgMSA6IDA7XG4gIH1cblxuICBnZXQgcGFkZGluZ0xlZnQoKSB7XG4gICAgcmV0dXJuIDggKyB0aGlzLm9mZnNldCAqIDI0O1xuICB9XG5cbiAgZ2V0IGhhc0NvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudCA/PyB0aGlzLl9jaGlsZHJlbiA/PyB0aGlzLmNvbnRlbnREaXJlY3RpdmUgPz8gdGhpcy5jb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChQQU5FTF9CQVJfQUNDRVNTT1IpIHByaXZhdGUgcGFuZWxCYXI6IFBhbmVsQmFyQWNjZXNzb3IsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHByaXZhdGUgcGFyZW50SXRlbTogUGFuZWxCYXJJdGVtQ29tcG9uZW50XG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50RGlyZWN0aXZlID8/IHRoaXMucGFuZWxCYXIuaXRlbVRlbXBsYXRlID8/IHRoaXMuY29udGVudFRlbXBsYXRlO1xuICAgIHRoaXMuY29udGVudFBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbChjb250ZW50LCB0aGlzLnZpZXdDb250YWluZXJSZWYsIHtcbiAgICAgICRpbXBsaWNpdDogPFBhbmVsQmFySXRlbT57XG4gICAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnRcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy50aXRsZURpcmVjdGl2ZSA/PyB0aGlzLnRpdGxlVGVtcGxhdGU7XG4gICAgdGhpcy50aXRsZVBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aXRsZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmLCB7XG4gICAgICAkaW1wbGljaXQ6IDxQYW5lbEJhckl0ZW0+e1xuICAgICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgICAgY29udGVudDogdGhpcy5jb250ZW50XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjbGlja0l0ZW0oKSB7XG4gICAgaWYgKHRoaXMuaGFzQ29udGVudCkge1xuICAgICAgdGhpcy5leHBhbmRlZCA9ICF0aGlzLmV4cGFuZGVkO1xuICAgICAgLy8gVE9ETzsgZW1pdCBldmVudFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBlbWl0IGNsaWNrIGV2ZW50P1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIngtcGFuZWxiYXItaXRlbVwiPlxuICA8ZGl2IChjbGljayk9XCJjbGlja0l0ZW0oKVwiIGNsYXNzPVwieC1wYW5lbGJhci1pdGVtLXRpdGxlXCIgW3N0eWxlLnBhZGRpbmctbGVmdC5weF09XCJwYWRkaW5nTGVmdFwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbY2RrUG9ydGFsT3V0bGV0XT1cInRpdGxlUG9ydGFsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwieC1wYW5lbGJhci1pdGVtLXNwYWNlclwiPjwvZGl2PlxuICAgIDx4dWktaWNvbiBjbGFzcz1cIngtcGFuZWxiYXItaXRlbS1jaGV2cm9uXCIgKm5nSWY9XCJoYXNDb250ZW50XCI+e3tcbiAgICAgIGV4cGFuZGVkID8gJ2NoZXZyb24tZG93bicgOiAnY2hldnJvbi11cCdcbiAgICB9fTwveHVpLWljb24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgW3N0eWxlLmRpc3BsYXldPVwiZXhwYW5kZWQgPyAnYmxvY2snIDogJ25vbmUnXCIgI2NvbnRlbnRSZWY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnREaXJlY3RpdmUgfHwgY29udGVudFwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtjZGtQb3J0YWxPdXRsZXRdPVwiY29udGVudFBvcnRhbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwieHVpLXBhbmVsYmFyLWl0ZW1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICA8eHVpLXBhbmVsYmFyLWl0ZW0gKm5nRm9yPVwibGV0IGNoaWxkIG9mIF9jaGlsZHJlblwiIFt0aXRsZV09XCJjaGlsZC50aXRsZVwiIFtfY2hpbGRyZW5dPVwiY2hpbGQuY2hpbGRyZW5cIj5cbiAgICA8L3h1aS1wYW5lbGJhci1pdGVtPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnRUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIngtcGFuZWxiYXItaXRlbS1jb250ZW50XCIgW3N0eWxlLnBhZGRpbmctbGVmdC5weF09XCJwYWRkaW5nTGVmdFwiPlxuICAgIHt7IGNvbnRlbnQgfX1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RpdGxlVGVtcGxhdGU+XG4gIDx4dWktaWNvbiBbY2xhc3NdPVwiaWNvbkNsYXNzXCIgKm5nSWY9XCJpY29uXCI+e3sgaWNvbiB9fTwveHVpLWljb24+XG4gIHt7IHRpdGxlIH19XG48L25nLXRlbXBsYXRlPlxuIl19