@universal-material/angular
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0.
88 lines • 15.4 kB
JavaScript
import { Component, EventEmitter, HostBinding, HostListener, Inject, InjectionToken, Input, Optional, Output } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../ripple/ripple.directive";
export const FORM_FIELD_DEFAULT_APPEARANCE = new InjectionToken('FORM_FIELD_DEFAULT_APPEARANCE');
export class FormFieldComponent {
set labelWidth(width) {
this._elementRef.nativeElement.style.setProperty('--u-text-field-label-width', `${width}px`);
this._elementRef.nativeElement.style.setProperty('--u-text-field-label-half-width', `${width / 2}px`);
}
get removeMarginStyle() {
return this.removeMargin ? '0' : '';
}
get appearance() {
return this._appearance;
}
set appearance(value) {
this._appearance = value;
if (!value || value === 'default') {
value = this._defaultAppearance;
}
if (value.indexOf('search') > -1) {
this._appearanceClass = 'u-search-field';
return;
}
this._appearanceClass = `u-text-field-${value}`;
}
constructor(_elementRef, defaultAppearance) {
this._elementRef = _elementRef;
this._input = null;
this._hasLabel = false;
this.selectionField = false;
this.invalid = false;
this.removeMargin = false;
this.supportingText = null;
this.errorText = null;
this.activated = new EventEmitter();
this._defaultAppearance = defaultAppearance || 'box';
this.appearance = this._defaultAppearance;
_elementRef.nativeElement.classList.add('u-form-field');
}
click() {
if (!this._input?.disabled) {
this._input?.focus();
this.activated.next();
}
}
mouseDown(e) {
if (!this._input?.disabled) {
e.preventDefault();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldComponent, deps: [{ token: i0.ElementRef }, { token: FORM_FIELD_DEFAULT_APPEARANCE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldComponent, selector: "u-form-field", inputs: { selectionField: "selectionField", invalid: "invalid", removeMargin: "removeMargin", supportingText: "supportingText", errorText: "errorText", appearance: "appearance" }, outputs: { activated: "activated" }, host: { listeners: { "mousedown": "mouseDown($event)" }, properties: { "class.u-form-field-selection": "this.selectionField", "style.margin-bottom": "this.removeMarginStyle" } }, ngImport: i0, template: "<div class=\"u-text-field\"\n tabindex=\"-1\"\n [ngClass]=\"_appearanceClass\"\n [class.u-text-field-hidden-label]=\"!_hasLabel\"\n [class.invalid]=\"invalid\"\n [class.disabled]=\"_input?.disabled\"\n [class.focus]=\"_input?.focused\"\n [class.empty]=\"_input?.empty\"\n (click)=\"click()\">\n <div\n uRipple\n [rippleDisabled]=\"_input?.disabled || !selectionField\"\n class=\"u-text-field-state\"></div>\n <ng-content></ng-content>\n\n</div>\n\n<ng-container *ngIf=\"invalid && (errorText || errorTextContainer.children.length); else supportingTextTemplate\">\n <div class=\"u-text-field-supporting-text\">{{errorText}}</div>\n</ng-container>\n<div class=\"u-text-field-supporting-text\"\n [class.d-none]=\"!invalid || !errorTextContainer.children.length\"\n #errorTextContainer>\n <ng-content select=\"[uErrorText]\"></ng-content>\n</div>\n\n<ng-template #supportingTextTemplate>\n <div\n *ngIf=\"supportingText\"\n class=\"u-text-field-supporting-text\">{{supportingText}}</div>\n <div class=\"u-text-field-supporting-text\"\n [class.d-none]=\"!supportingTextContainer.children.length\"\n #supportingTextContainer>\n <ng-content select=\"[uSupportingText]\"></ng-content>\n </div>\n</ng-template>\n", styles: [":host{display:block}.hide-helper-text{margin-top:0;max-height:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RippleDirective, selector: "[uRipple]", inputs: ["rippleConfig", "rippleDisabled"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldComponent, decorators: [{
type: Component,
args: [{ selector: 'u-form-field', standalone: false, template: "<div class=\"u-text-field\"\n tabindex=\"-1\"\n [ngClass]=\"_appearanceClass\"\n [class.u-text-field-hidden-label]=\"!_hasLabel\"\n [class.invalid]=\"invalid\"\n [class.disabled]=\"_input?.disabled\"\n [class.focus]=\"_input?.focused\"\n [class.empty]=\"_input?.empty\"\n (click)=\"click()\">\n <div\n uRipple\n [rippleDisabled]=\"_input?.disabled || !selectionField\"\n class=\"u-text-field-state\"></div>\n <ng-content></ng-content>\n\n</div>\n\n<ng-container *ngIf=\"invalid && (errorText || errorTextContainer.children.length); else supportingTextTemplate\">\n <div class=\"u-text-field-supporting-text\">{{errorText}}</div>\n</ng-container>\n<div class=\"u-text-field-supporting-text\"\n [class.d-none]=\"!invalid || !errorTextContainer.children.length\"\n #errorTextContainer>\n <ng-content select=\"[uErrorText]\"></ng-content>\n</div>\n\n<ng-template #supportingTextTemplate>\n <div\n *ngIf=\"supportingText\"\n class=\"u-text-field-supporting-text\">{{supportingText}}</div>\n <div class=\"u-text-field-supporting-text\"\n [class.d-none]=\"!supportingTextContainer.children.length\"\n #supportingTextContainer>\n <ng-content select=\"[uSupportingText]\"></ng-content>\n </div>\n</ng-template>\n", styles: [":host{display:block}.hide-helper-text{margin-top:0;max-height:0}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [FORM_FIELD_DEFAULT_APPEARANCE]
}] }]; }, propDecorators: { selectionField: [{
type: HostBinding,
args: ['class.u-form-field-selection']
}, {
type: Input
}], removeMarginStyle: [{
type: HostBinding,
args: ['style.margin-bottom']
}], invalid: [{
type: Input
}], removeMargin: [{
type: Input
}], supportingText: [{
type: Input
}], errorText: [{
type: Input
}], activated: [{
type: Output
}], appearance: [{
type: Input
}], mouseDown: [{
type: HostListener,
args: ['mousedown', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFHVCxZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDOzs7O0FBS3ZCLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLElBQUksY0FBYyxDQUFDLCtCQUErQixDQUFDLENBQUM7QUFRakcsTUFBTSxPQUFPLGtCQUFrQjtJQVc3QixJQUFJLFVBQVUsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsaUNBQWlDLEVBQUUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRUQsSUFDSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBUUQsSUFDSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxLQUEwQjtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUV6QixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDakMsS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUNqQztRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7WUFDekMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixLQUFLLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsWUFBcUIsV0FBdUIsRUFDbUIsaUJBQXNDO1FBRGhGLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBekM1QyxXQUFNLEdBQThCLElBQUksQ0FBQztRQUN6QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBR1QsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFZdkIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFDckMsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFDL0IsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUF1QjdDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxpQkFBaUIsSUFBSSxLQUFLLENBQUM7UUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDMUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxLQUFLO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFO1lBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFHRCxTQUFTLENBQUMsQ0FBYTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7WUFDMUIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQzsrR0FsRVUsa0JBQWtCLDRDQStDRyw2QkFBNkI7bUdBL0NsRCxrQkFBa0IsZ2NDMUIvQixrd0NBb0NBOzs0RkRWYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0UsY0FBYyxjQUdaLEtBQUs7OzBCQWlESixRQUFROzswQkFBSSxNQUFNOzJCQUFDLDZCQUE2Qjs0Q0F0Q3BELGNBQWM7c0JBRHRCLFdBQVc7dUJBQUMsOEJBQThCOztzQkFDMUMsS0FBSztnQkFRRixpQkFBaUI7c0JBRHBCLFdBQVc7dUJBQUMscUJBQXFCO2dCQUt6QixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksU0FBUztzQkFBbEIsTUFBTTtnQkFHSCxVQUFVO3NCQURiLEtBQUs7Z0JBbUNOLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGFiZWxEaXJlY3RpdmUgfSBmcm9tICcuL2xhYmVsLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJbnB1dEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9zaGFyZWQvaW5wdXQtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJy4vZm9ybS1maWVsZC1hcHBlYXJhbmNlJztcblxuZXhwb3J0IGNvbnN0IEZPUk1fRklFTERfREVGQVVMVF9BUFBFQVJBTkNFID0gbmV3IEluamVjdGlvblRva2VuKCdGT1JNX0ZJRUxEX0RFRkFVTFRfQVBQRUFSQU5DRScpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1LWZvcm0tZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tZmllbGQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZENvbXBvbmVudCB7XG5cbiAgX2FwcGVhcmFuY2VDbGFzcyE6IHN0cmluZztcbiAgX2FwcGVhcmFuY2UhOiBGb3JtRmllbGRBcHBlYXJhbmNlO1xuICBfZGVmYXVsdEFwcGVhcmFuY2U6IEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIF9pbnB1dDogSW5wdXRCYXNlQ29tcG9uZW50IHwgbnVsbCA9IG51bGw7XG4gIF9oYXNMYWJlbCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MudS1mb3JtLWZpZWxkLXNlbGVjdGlvbicpXG4gIEBJbnB1dCgpIHNlbGVjdGlvbkZpZWxkID0gZmFsc2U7XG5cbiAgc2V0IGxhYmVsV2lkdGgod2lkdGg6IG51bWJlcikge1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS11LXRleHQtZmllbGQtbGFiZWwtd2lkdGgnLCBgJHt3aWR0aH1weGApO1xuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS11LXRleHQtZmllbGQtbGFiZWwtaGFsZi13aWR0aCcsIGAke3dpZHRoIC8gMn1weGApO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5tYXJnaW4tYm90dG9tJylcbiAgZ2V0IHJlbW92ZU1hcmdpblN0eWxlKCkge1xuICAgIHJldHVybiB0aGlzLnJlbW92ZU1hcmdpbiA/ICcwJyA6ICcnO1xuICB9XG5cbiAgQElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuICBASW5wdXQoKSByZW1vdmVNYXJnaW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3VwcG9ydGluZ1RleHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBlcnJvclRleHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBAT3V0cHV0KCkgYWN0aXZhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBhcHBlYXJhbmNlKCk6IEZvcm1GaWVsZEFwcGVhcmFuY2Uge1xuICAgIHJldHVybiB0aGlzLl9hcHBlYXJhbmNlO1xuICB9XG4gIHNldCBhcHBlYXJhbmNlKHZhbHVlOiBGb3JtRmllbGRBcHBlYXJhbmNlKSB7XG4gICAgdGhpcy5fYXBwZWFyYW5jZSA9IHZhbHVlO1xuXG4gICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5pbmRleE9mKCdzZWFyY2gnKSA+IC0xKSB7XG4gICAgICB0aGlzLl9hcHBlYXJhbmNlQ2xhc3MgPSAndS1zZWFyY2gtZmllbGQnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2FwcGVhcmFuY2VDbGFzcyA9IGB1LXRleHQtZmllbGQtJHt2YWx1ZX1gO1xuICB9XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRk9STV9GSUVMRF9ERUZBVUxUX0FQUEVBUkFOQ0UpIGRlZmF1bHRBcHBlYXJhbmNlOiBGb3JtRmllbGRBcHBlYXJhbmNlKSB7XG4gICAgdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UgPSBkZWZhdWx0QXBwZWFyYW5jZSB8fCAnYm94JztcbiAgICB0aGlzLmFwcGVhcmFuY2UgPSB0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtcbiAgICBfZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3UtZm9ybS1maWVsZCcpO1xuICB9XG5cbiAgY2xpY2soKTogdm9pZCB7XG5cbiAgICBpZiAoIXRoaXMuX2lucHV0Py5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5faW5wdXQ/LmZvY3VzKCk7XG4gICAgICB0aGlzLmFjdGl2YXRlZC5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgbW91c2VEb3duKGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lucHV0Py5kaXNhYmxlZCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInUtdGV4dC1maWVsZFwiXG4gICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICBbbmdDbGFzc109XCJfYXBwZWFyYW5jZUNsYXNzXCJcbiAgICAgW2NsYXNzLnUtdGV4dC1maWVsZC1oaWRkZW4tbGFiZWxdPVwiIV9oYXNMYWJlbFwiXG4gICAgIFtjbGFzcy5pbnZhbGlkXT1cImludmFsaWRcIlxuICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiX2lucHV0Py5kaXNhYmxlZFwiXG4gICAgIFtjbGFzcy5mb2N1c109XCJfaW5wdXQ/LmZvY3VzZWRcIlxuICAgICBbY2xhc3MuZW1wdHldPVwiX2lucHV0Py5lbXB0eVwiXG4gICAgIChjbGljayk9XCJjbGljaygpXCI+XG4gIDxkaXZcbiAgICB1UmlwcGxlXG4gICAgW3JpcHBsZURpc2FibGVkXT1cIl9pbnB1dD8uZGlzYWJsZWQgfHwgIXNlbGVjdGlvbkZpZWxkXCJcbiAgICBjbGFzcz1cInUtdGV4dC1maWVsZC1zdGF0ZVwiPjwvZGl2PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaW52YWxpZCAmJiAoZXJyb3JUZXh0IHx8IGVycm9yVGV4dENvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGgpOyBlbHNlIHN1cHBvcnRpbmdUZXh0VGVtcGxhdGVcIj5cbiAgPGRpdiBjbGFzcz1cInUtdGV4dC1maWVsZC1zdXBwb3J0aW5nLXRleHRcIj57e2Vycm9yVGV4dH19PC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxkaXYgY2xhc3M9XCJ1LXRleHQtZmllbGQtc3VwcG9ydGluZy10ZXh0XCJcbiAgICAgW2NsYXNzLmQtbm9uZV09XCIhaW52YWxpZCB8fCAhZXJyb3JUZXh0Q29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aFwiXG4gICAgICNlcnJvclRleHRDb250YWluZXI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt1RXJyb3JUZXh0XVwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3N1cHBvcnRpbmdUZXh0VGVtcGxhdGU+XG4gIDxkaXZcbiAgICAqbmdJZj1cInN1cHBvcnRpbmdUZXh0XCJcbiAgICBjbGFzcz1cInUtdGV4dC1maWVsZC1zdXBwb3J0aW5nLXRleHRcIj57e3N1cHBvcnRpbmdUZXh0fX08L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInUtdGV4dC1maWVsZC1zdXBwb3J0aW5nLXRleHRcIlxuICAgICAgIFtjbGFzcy5kLW5vbmVdPVwiIXN1cHBvcnRpbmdUZXh0Q29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aFwiXG4gICAgICAgI3N1cHBvcnRpbmdUZXh0Q29udGFpbmVyPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlt1U3VwcG9ydGluZ1RleHRdXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=