@coreui/angular
Version:
CoreUI Components Library for Angular
173 lines • 21.1 kB
JavaScript
import { booleanAttribute, Component, ContentChildren, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';
import { NgTemplateOutlet } from '@angular/common';
import { animate, state, style, transition, trigger } from '@angular/animations';
import { TemplateIdDirective } from '../shared';
import { ButtonCloseDirective } from '../button';
import * as i0 from "@angular/core";
export class AlertComponent {
constructor() {
/**
* Sets the color context of the component to one of CoreUI’s themed colors.
*
* @type Colors
* @default 'primary'
*/
this.color = 'primary';
/**
* Default role for alert. [docs]
* @type string
* @default 'alert'
*/
this.role = 'alert';
/**
* Event triggered on the alert dismiss.
*/
this.visibleChange = new EventEmitter();
this.templates = {};
/**
* Optionally adds a close button to alert and allow it to self dismiss.
* @type boolean
* @default false
*/
this.dismissible = false;
/**
* Adds animation for dismissible alert.
* @type boolean
*/
this.fade = false;
this.#visible = true;
}
/**
* Toggle the visibility of alert component.
* @type boolean
*/
set visible(value) {
if (this.#visible !== value) {
this.#visible = value;
this.visibleChange.emit(value);
}
}
;
get visible() {
return this.#visible;
}
#visible;
get animationDisabled() {
return !this.fade;
}
get animateType() {
return this.visible ? 'show' : 'hide';
}
get hostClasses() {
return {
alert: true,
'alert-dismissible': this.dismissible,
fade: this.fade,
show: !this.hide,
[`alert-${this.color}`]: !!this.color && this.variant !== 'solid',
[`bg-${this.color}`]: !!this.color && this.variant === 'solid',
'text-white': !!this.color && this.variant === 'solid'
};
}
onAnimationStart($event) {
this.onAnimationEvent($event);
}
onAnimationDone($event) {
this.onAnimationEvent($event);
}
ngAfterContentInit() {
this.contentTemplates.forEach((child) => {
this.templates[child.id] = child.templateRef;
});
}
onAnimationEvent(event) {
this.hide = event.phaseName === 'start' && event.toState === 'show';
if (event.phaseName === 'done') {
this.hide = (event.toState === 'hide' || event.toState === 'void');
if (event.toState === 'show') {
this.hide = false;
}
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: AlertComponent, isStandalone: true, selector: "c-alert", inputs: { color: "color", role: "role", variant: "variant", dismissible: ["dismissible", "dismissible", booleanAttribute], fade: ["fade", "fade", booleanAttribute], visible: ["visible", "visible", booleanAttribute] }, outputs: { visibleChange: "visibleChange" }, host: { listeners: { "@fadeInOut.start": "onAnimationStart($event)", "@fadeInOut.done": "onAnimationDone($event)" }, properties: { "attr.role": "this.role", "@.disabled": "this.animationDisabled", "@fadeInOut": "this.animateType", "class": "this.hostClasses" } }, queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], exportAs: ["cAlert"], ngImport: i0, template: "@if (visible || !hide) {\n @if (dismissible) {\n <ng-container *ngTemplateOutlet=\"templates?.alertButtonCloseTemplate || defaultAlertButtonCloseTemplate\" />\n }\n <ng-content />\n}\n<ng-template #defaultAlertButtonCloseTemplate>\n <button (click)=\"visible=false\" aria-label=\"Close\" cButtonClose></button>\n</ng-template>\n", styles: [":host{display:block;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ButtonCloseDirective, selector: "[cButtonClose]", inputs: ["white"] }], animations: [
trigger('fadeInOut', [
state('show', style({ opacity: 1, height: '*', padding: '*', border: '*', margin: '*' })),
state('hide', style({ opacity: 0, height: 0, padding: 0, border: 0, margin: 0 })),
state('void', style({ opacity: 0, height: 0, padding: 0, border: 0, margin: 0 })),
transition('show => hide', [
animate('.3s ease-out')
]),
transition('hide => show', [
animate('.3s ease-in')
]),
transition('show => void', [
animate('.3s ease-out')
]),
transition('void => show', [
animate('.3s ease-in')
])
])
] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AlertComponent, decorators: [{
type: Component,
args: [{ selector: 'c-alert', exportAs: 'cAlert', standalone: true, imports: [NgTemplateOutlet, ButtonCloseDirective], animations: [
trigger('fadeInOut', [
state('show', style({ opacity: 1, height: '*', padding: '*', border: '*', margin: '*' })),
state('hide', style({ opacity: 0, height: 0, padding: 0, border: 0, margin: 0 })),
state('void', style({ opacity: 0, height: 0, padding: 0, border: 0, margin: 0 })),
transition('show => hide', [
animate('.3s ease-out')
]),
transition('hide => show', [
animate('.3s ease-in')
]),
transition('show => void', [
animate('.3s ease-out')
]),
transition('void => show', [
animate('.3s ease-in')
])
])
], template: "@if (visible || !hide) {\n @if (dismissible) {\n <ng-container *ngTemplateOutlet=\"templates?.alertButtonCloseTemplate || defaultAlertButtonCloseTemplate\" />\n }\n <ng-content />\n}\n<ng-template #defaultAlertButtonCloseTemplate>\n <button (click)=\"visible=false\" aria-label=\"Close\" cButtonClose></button>\n</ng-template>\n", styles: [":host{display:block;overflow:hidden}\n"] }]
}], propDecorators: { color: [{
type: Input
}], role: [{
type: HostBinding,
args: ['attr.role']
}, {
type: Input
}], variant: [{
type: Input
}], visibleChange: [{
type: Output
}], contentTemplates: [{
type: ContentChildren,
args: [TemplateIdDirective, { descendants: true }]
}], dismissible: [{
type: Input,
args: [{ transform: booleanAttribute }]
}], fade: [{
type: Input,
args: [{ transform: booleanAttribute }]
}], visible: [{
type: Input,
args: [{ transform: booleanAttribute }]
}], animationDisabled: [{
type: HostBinding,
args: ['@.disabled']
}], animateType: [{
type: HostBinding,
args: ['@fadeInOut']
}], hostClasses: [{
type: HostBinding,
args: ['class']
}], onAnimationStart: [{
type: HostListener,
args: ['@fadeInOut.start', ['$event']]
}], onAnimationDone: [{
type: HostListener,
args: ['@fadeInOut.done', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9hbGVydC9hbGVydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQWtCLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBK0JqRCxNQUFNLE9BQU8sY0FBYztJQTNCM0I7UUE4QkU7Ozs7O1dBS0c7UUFDTSxVQUFLLEdBQVcsU0FBUyxDQUFDO1FBQ25DOzs7O1dBSUc7UUFFTSxTQUFJLEdBQUcsT0FBTyxDQUFDO1FBTXhCOztXQUVHO1FBQ08sa0JBQWEsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwRSxjQUFTLEdBQVEsRUFBRSxDQUFDO1FBR3BCOzs7O1dBSUc7UUFDcUMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFckU7OztXQUdHO1FBQ3FDLFNBQUksR0FBWSxLQUFLLENBQUM7UUFrQjlELGFBQVEsR0FBWSxJQUFJLENBQUM7S0FrRDFCO0lBbEVDOzs7T0FHRztJQUNILElBQ0ksT0FBTyxDQUFD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U0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWVsQyxpQkFBaUI7c0JBRHBCLFdBQVc7dUJBQUMsWUFBWTtnQkFNckIsV0FBVztzQkFEZCxXQUFXO3VCQUFDLFlBQVk7Z0JBTXJCLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxPQUFPO2dCQWNwQixnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNNUMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBhbmltYXRlLCBBbmltYXRpb25FdmVudCwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5cbmltcG9ydCB7IENvbG9ycyB9IGZyb20gJy4uL2NvcmV1aS50eXBlcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZUlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vc2hhcmVkJztcbmltcG9ydCB7IEJ1dHRvbkNsb3NlRGlyZWN0aXZlIH0gZnJvbSAnLi4vYnV0dG9uJztcblxudHlwZSBBbmltYXRlVHlwZSA9ICgnaGlkZScgfCAnc2hvdycpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLWFsZXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsZXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWxlcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdjQWxlcnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldCwgQnV0dG9uQ2xvc2VEaXJlY3RpdmVdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZmFkZUluT3V0JywgW1xuICAgICAgc3RhdGUoJ3Nob3cnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIGhlaWdodDogJyonLCBwYWRkaW5nOiAnKicsIGJvcmRlcjogJyonLCBtYXJnaW46ICcqJyB9KSksXG4gICAgICBzdGF0ZSgnaGlkZScsIHN0eWxlKHsgb3BhY2l0eTogMCwgaGVpZ2h0OiAwLCBwYWRkaW5nOiAwLCBib3JkZXI6IDAsIG1hcmdpbjogMCB9KSksXG4gICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsgb3BhY2l0eTogMCwgaGVpZ2h0OiAwLCBwYWRkaW5nOiAwLCBib3JkZXI6IDAsIG1hcmdpbjogMCB9KSksXG4gICAgICB0cmFuc2l0aW9uKCdzaG93ID0+IGhpZGUnLCBbXG4gICAgICAgIGFuaW1hdGUoJy4zcyBlYXNlLW91dCcpXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ2hpZGUgPT4gc2hvdycsIFtcbiAgICAgICAgYW5pbWF0ZSgnLjNzIGVhc2UtaW4nKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCdzaG93ID0+IHZvaWQnLCBbXG4gICAgICAgIGFuaW1hdGUoJy4zcyBlYXNlLW91dCcpXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gc2hvdycsIFtcbiAgICAgICAgYW5pbWF0ZSgnLjNzIGVhc2UtaW4nKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFsZXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG5cbiAgaGlkZSE6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb2xvciBjb250ZXh0IG9mIHRoZSBjb21wb25lbnQgdG8gb25lIG9mIENvcmVVSeKAmXMgdGhlbWVkIGNvbG9ycy5cbiAgICpcbiAgICogQHR5cGUgQ29sb3JzXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgQElucHV0KCkgY29sb3I6IENvbG9ycyA9ICdwcmltYXJ5JztcbiAgLyoqXG4gICAqIERlZmF1bHQgcm9sZSBmb3IgYWxlcnQuIFtkb2NzXVxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ2FsZXJ0J1xuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICBASW5wdXQoKSByb2xlID0gJ2FsZXJ0JztcbiAgLyoqXG4gICAqIFNldCB0aGUgYWxlcnQgdmFyaWFudCB0byBhIHNvbGlkLlxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICovXG4gIEBJbnB1dCgpIHZhcmlhbnQ/OiAnc29saWQnIHwgc3RyaW5nO1xuICAvKipcbiAgICogRXZlbnQgdHJpZ2dlcmVkIG9uIHRoZSBhbGVydCBkaXNtaXNzLlxuICAgKi9cbiAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgdGVtcGxhdGVzOiBhbnkgPSB7fTtcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZUlkRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGNvbnRlbnRUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVJZERpcmVjdGl2ZT47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgYWRkcyBhIGNsb3NlIGJ1dHRvbiB0byBhbGVydCBhbmQgYWxsb3cgaXQgdG8gc2VsZiBkaXNtaXNzLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzbWlzc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQWRkcyBhbmltYXRpb24gZm9yIGRpc21pc3NpYmxlIGFsZXJ0LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmFkZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgYWxlcnQgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy4jdmlzaWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuI3Zpc2libGUgPSB2YWx1ZTtcbiAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgZ2V0IHZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3Zpc2libGU7XG4gIH1cblxuICAjdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCdALmRpc2FibGVkJylcbiAgZ2V0IGFuaW1hdGlvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5mYWRlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdAZmFkZUluT3V0JylcbiAgZ2V0IGFuaW1hdGVUeXBlKCk6IEFuaW1hdGVUeXBlIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlID8gJ3Nob3cnIDogJ2hpZGUnO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3NlcygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBhbGVydDogdHJ1ZSxcbiAgICAgICdhbGVydC1kaXNtaXNzaWJsZSc6IHRoaXMuZGlzbWlzc2libGUsXG4gICAgICBmYWRlOiB0aGlzLmZhZGUsXG4gICAgICBzaG93OiAhdGhpcy5oaWRlLFxuICAgICAgW2BhbGVydC0ke3RoaXMuY29sb3J9YF06ICEhdGhpcy5jb2xvciAmJiB0aGlzLnZhcmlhbnQgIT09ICdzb2xpZCcsXG4gICAgICBbYGJnLSR7dGhpcy5jb2xvcn1gXTogISF0aGlzLmNvbG9yICYmIHRoaXMudmFyaWFudCA9PT0gJ3NvbGlkJyxcbiAgICAgICd0ZXh0LXdoaXRlJzogISF0aGlzLmNvbG9yICYmIHRoaXMudmFyaWFudCA9PT0gJ3NvbGlkJ1xuICAgIH07XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdAZmFkZUluT3V0LnN0YXJ0JywgWyckZXZlbnQnXSlcbiAgb25BbmltYXRpb25TdGFydCgkZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5vbkFuaW1hdGlvbkV2ZW50KCRldmVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdAZmFkZUluT3V0LmRvbmUnLCBbJyRldmVudCddKVxuICBvbkFuaW1hdGlvbkRvbmUoJGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25BbmltYXRpb25FdmVudCgkZXZlbnQpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudFRlbXBsYXRlcy5mb3JFYWNoKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgfSk7XG4gIH1cblxuICBvbkFuaW1hdGlvbkV2ZW50KGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaGlkZSA9IGV2ZW50LnBoYXNlTmFtZSA9PT0gJ3N0YXJ0JyAmJiBldmVudC50b1N0YXRlID09PSAnc2hvdyc7XG4gICAgaWYgKGV2ZW50LnBoYXNlTmFtZSA9PT0gJ2RvbmUnKSB7XG4gICAgICB0aGlzLmhpZGUgPSAoZXZlbnQudG9TdGF0ZSA9PT0gJ2hpZGUnIHx8IGV2ZW50LnRvU3RhdGUgPT09ICd2b2lkJyk7XG4gICAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ3Nob3cnKSB7XG4gICAgICAgIHRoaXMuaGlkZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiQGlmICh2aXNpYmxlIHx8ICFoaWRlKSB7XG4gIEBpZiAoZGlzbWlzc2libGUpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzPy5hbGVydEJ1dHRvbkNsb3NlVGVtcGxhdGUgfHwgZGVmYXVsdEFsZXJ0QnV0dG9uQ2xvc2VUZW1wbGF0ZVwiIC8+XG4gIH1cbiAgPG5nLWNvbnRlbnQgLz5cbn1cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEFsZXJ0QnV0dG9uQ2xvc2VUZW1wbGF0ZT5cbiAgPGJ1dHRvbiAoY2xpY2spPVwidmlzaWJsZT1mYWxzZVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNCdXR0b25DbG9zZT48L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=