@doku-dev/doku-fragment
Version:
A new Angular UI library that moving away from Bootstrap and built from scratch.
111 lines • 17.6 kB
JavaScript
import { CommonModule } from '@angular/common';
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Optional, Output, Self, ViewEncapsulation, } from '@angular/core';
import { ReplaySubject, takeUntil } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "@angular/common";
let uniqueId = 1;
export class DokuCheckbox {
constructor(cdr, ngControl) {
this.cdr = cdr;
this.ngControl = ngControl;
/**
* Unique id of the checkbox. By default, it's auto-generated.
* @default `d-checkbox-[uniqueId]`
*/
this.id = `d-checkbox-${uniqueId++}`;
/**
* Whether the checkbox is disabled.
*
* If using reactive forms, the value will be replaced.
* Use form control's method to disable the Checkbox.
*
* @default false
*/
this.disabled = false;
/**
* Whether the checkbox is checked.
*
* If using reactive forms or template-drive forms, the value will be replaced.
*
* @default false
*/
this.checked = false;
/**
* The size of the checkbox.
* @default 'medium'
*/
this.size = 'medium';
/**
* An event emitted when checked is changed.
*/
this.checkedChange = new EventEmitter();
this.destroy$ = new ReplaySubject();
if (this.ngControl) {
this.ngControl.valueAccessor = this;
}
}
get classes() {
return [`d-checkbox`, `d-checkbox-${this.size}`];
}
ngOnInit() {
this.checkedChange.pipe(takeUntil(this.destroy$)).subscribe(() => {
this.onChange?.(this.checked);
this.onTouched?.();
});
}
ngOnDestroy() {
this.destroy$.next(true);
this.destroy$.complete();
}
writeValue(value) {
this.checked = value;
this.cdr.detectChanges();
}
registerOnTouched(fn) {
this.onTouched = fn;
}
registerOnChange(fn) {
this.onChange = fn;
}
setDisabledState(isDisabled) {
this.disabled = isDisabled;
this.cdr.detectChanges();
}
onCheckboxChange() {
if (this.disabled)
return;
this.checked = !this.checked;
this.checkedChange.emit(this.checked);
}
}
DokuCheckbox.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuCheckbox, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
DokuCheckbox.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DokuCheckbox, isStandalone: true, selector: "doku-checkbox", inputs: { id: "id", disabled: "disabled", checked: "checked", size: "size" }, outputs: { checkedChange: "checkedChange" }, host: { properties: { "class.d-checkbox-disabled": "this.disabled", "class.d-checkbox-checked": "this.checked", "class": "this.classes" } }, exportAs: ["dokuCheckbox"], ngImport: i0, template: "<div class=\"d-checkbox-indicator\">\n <input\n #input\n type=\"checkbox\"\n [id]=\"id\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"onCheckboxChange()\"\n />\n <span *ngIf=\"checked\" class=\"d-checkbox-indicator-icon\" (click)=\"input.click()\">\n <ng-container *ngIf=\"checked\" [ngTemplateOutlet]=\"iconCheck\"></ng-container>\n </span>\n</div>\n\n<div class=\"d-checkbox-content\">\n <label [for]=\"id\" class=\"d-checkbox-label\"><ng-content></ng-content></label>\n <ng-content select=\"doku-checkbox-sub-label\"></ng-content>\n</div>\n\n<ng-template #iconCheck>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M17.3183 4.55752C17.3765 4.61558 17.4227 4.68455 17.4542 4.76048C17.4857 4.83641 17.5019 4.91781 17.5019 5.00002C17.5019 5.08223 17.4857 5.16363 17.4542 5.23956C17.4227 5.31549 17.3765 5.38446 17.3183 5.44252L8.56829 14.1925C8.51023 14.2507 8.44126 14.2969 8.36533 14.3284C8.2894 14.3599 8.208 14.3761 8.12579 14.3761C8.04358 14.3761 7.96218 14.3599 7.88625 14.3284C7.81032 14.2969 7.74135 14.2507 7.68329 14.1925L3.30829 9.81752C3.19093 9.70016 3.125 9.54099 3.125 9.37502C3.125 9.20905 3.19093 9.04988 3.30829 8.93252C3.42565 8.81516 3.58482 8.74923 3.75079 8.74923C3.91676 8.74923 4.07593 8.81516 4.19329 8.93252L8.12579 12.8663L16.4333 4.55752C16.4913 4.49931 16.5603 4.45314 16.6362 4.42163C16.7122 4.39012 16.7936 4.3739 16.8758 4.3739C16.958 4.3739 17.0394 4.39012 17.1153 4.42163C17.1913 4.45314 17.2602 4.49931 17.3183 4.55752Z\"\n fill=\"currentColor\"\n />\n </svg>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuCheckbox, decorators: [{
type: Component,
args: [{ selector: 'doku-checkbox', exportAs: 'dokuCheckbox', standalone: true, imports: [CommonModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"d-checkbox-indicator\">\n <input\n #input\n type=\"checkbox\"\n [id]=\"id\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"onCheckboxChange()\"\n />\n <span *ngIf=\"checked\" class=\"d-checkbox-indicator-icon\" (click)=\"input.click()\">\n <ng-container *ngIf=\"checked\" [ngTemplateOutlet]=\"iconCheck\"></ng-container>\n </span>\n</div>\n\n<div class=\"d-checkbox-content\">\n <label [for]=\"id\" class=\"d-checkbox-label\"><ng-content></ng-content></label>\n <ng-content select=\"doku-checkbox-sub-label\"></ng-content>\n</div>\n\n<ng-template #iconCheck>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M17.3183 4.55752C17.3765 4.61558 17.4227 4.68455 17.4542 4.76048C17.4857 4.83641 17.5019 4.91781 17.5019 5.00002C17.5019 5.08223 17.4857 5.16363 17.4542 5.23956C17.4227 5.31549 17.3765 5.38446 17.3183 5.44252L8.56829 14.1925C8.51023 14.2507 8.44126 14.2969 8.36533 14.3284C8.2894 14.3599 8.208 14.3761 8.12579 14.3761C8.04358 14.3761 7.96218 14.3599 7.88625 14.3284C7.81032 14.2969 7.74135 14.2507 7.68329 14.1925L3.30829 9.81752C3.19093 9.70016 3.125 9.54099 3.125 9.37502C3.125 9.20905 3.19093 9.04988 3.30829 8.93252C3.42565 8.81516 3.58482 8.74923 3.75079 8.74923C3.91676 8.74923 4.07593 8.81516 4.19329 8.93252L8.12579 12.8663L16.4333 4.55752C16.4913 4.49931 16.5603 4.45314 16.6362 4.42163C16.7122 4.39012 16.7936 4.3739 16.8758 4.3739C16.958 4.3739 17.0394 4.39012 17.1153 4.42163C17.1913 4.45314 17.2602 4.49931 17.3183 4.55752Z\"\n fill=\"currentColor\"\n />\n </svg>\n</ng-template>\n" }]
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
type: Optional
}, {
type: Self
}] }]; }, propDecorators: { id: [{
type: Input
}], disabled: [{
type: HostBinding,
args: ['class.d-checkbox-disabled']
}, {
type: Input
}], checked: [{
type: HostBinding,
args: ['class.d-checkbox-checked']
}, {
type: Input
}], size: [{
type: Input
}], checkedChange: [{
type: Output
}], classes: [{
type: HostBinding,
args: ['class']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9rdS1mcmFnbWVudC9zcmMvbGliL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rva3UtZnJhZ21lbnQvc3JjL2xpYi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBRWhELElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQVdqQixNQUFNLE9BQU8sWUFBWTtJQTJDdkIsWUFBb0IsR0FBc0IsRUFBOEIsU0FBb0I7UUFBeEUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBOEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQTFDNUY7OztXQUdHO1FBQ00sT0FBRSxHQUFHLGNBQWMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUV6Qzs7Ozs7OztXQU9HO1FBR0gsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQjs7Ozs7O1dBTUc7UUFHSCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCOzs7V0FHRztRQUNNLFNBQUksR0FBdUIsUUFBUSxDQUFDO1FBRTdDOztXQUVHO1FBQ08sa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTlDLGFBQVEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBR3JDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsSUFDYyxPQUFPO1FBQ25CLE9BQU8sQ0FBQyxZQUFZLEVBQUUsY0FBYyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQy9ELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUtELFVBQVUsQ0FBQyxLQUFjO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQXVCO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBRSxVQUFtQjtRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFUyxnQkFBZ0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7O3lHQTNGVSxZQUFZOzZGQUFaLFlBQVksNldDN0J6QiwrcERBNkJBLDJDRExZLFlBQVk7MkZBS1gsWUFBWTtrQkFUeEIsU0FBUzsrQkFDRSxlQUFlLFlBQ2YsY0FBYyxjQUNaLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxpQkFFUixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNOzswQkE2Q0YsUUFBUTs7MEJBQUksSUFBSTs0Q0F0Q3BELEVBQUU7c0JBQVYsS0FBSztnQkFZTixRQUFRO3NCQUZQLFdBQVc7dUJBQUMsMkJBQTJCOztzQkFDdkMsS0FBSztnQkFZTixPQUFPO3NCQUZOLFdBQVc7dUJBQUMsMEJBQTBCOztzQkFDdEMsS0FBSztnQkFPRyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFXTyxPQUFPO3NCQURwQixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2VsZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5sZXQgdW5pcXVlSWQgPSAxO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkb2t1LWNoZWNrYm94JyxcbiAgZXhwb3J0QXM6ICdkb2t1Q2hlY2tib3gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERva3VDaGVja2JveCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWQgb2YgdGhlIGNoZWNrYm94LiBCeSBkZWZhdWx0LCBpdCdzIGF1dG8tZ2VuZXJhdGVkLlxuICAgKiBAZGVmYXVsdCBgZC1jaGVja2JveC1bdW5pcXVlSWRdYFxuICAgKi9cbiAgQElucHV0KCkgaWQgPSBgZC1jaGVja2JveC0ke3VuaXF1ZUlkKyt9YDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2hlY2tib3ggaXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIElmIHVzaW5nIHJlYWN0aXZlIGZvcm1zLCB0aGUgdmFsdWUgd2lsbCBiZSByZXBsYWNlZC5cbiAgICogVXNlIGZvcm0gY29udHJvbCdzIG1ldGhvZCB0byBkaXNhYmxlIHRoZSBDaGVja2JveC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZC1jaGVja2JveC1kaXNhYmxlZCcpXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQuXG4gICAqXG4gICAqIElmIHVzaW5nIHJlYWN0aXZlIGZvcm1zIG9yIHRlbXBsYXRlLWRyaXZlIGZvcm1zLCB0aGUgdmFsdWUgd2lsbCBiZSByZXBsYWNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZC1jaGVja2JveC1jaGVja2VkJylcbiAgQElucHV0KClcbiAgY2hlY2tlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY2hlY2tib3guXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBASW5wdXQoKSBzaXplOiAnc21hbGwnIHwgJ21lZGl1bScgPSAnbWVkaXVtJztcblxuICAvKipcbiAgICogQW4gZXZlbnQgZW1pdHRlZCB3aGVuIGNoZWNrZWQgaXMgY2hhbmdlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBjaGVja2VkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgQE9wdGlvbmFsKCkgQFNlbGYoKSBwcml2YXRlIG5nQ29udHJvbDogTmdDb250cm9sKSB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgcHJvdGVjdGVkIGdldCBjbGFzc2VzKCk6IE5nQ2xhc3NbJ25nQ2xhc3MnXSB7XG4gICAgcmV0dXJuIFtgZC1jaGVja2JveGAsIGBkLWNoZWNrYm94LSR7dGhpcy5zaXplfWBdO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja2VkQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5vbkNoYW5nZT8uKHRoaXMuY2hlY2tlZCk7XG4gICAgICB0aGlzLm9uVG91Y2hlZD8uKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25DaGFuZ2U/OiAoXzogYW55KSA9PiB2b2lkO1xuICBvblRvdWNoZWQ/OiAoKSA9PiB2b2lkO1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrZWQgPSB2YWx1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNoZWNrYm94Q2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgICB0aGlzLmNoZWNrZWRDaGFuZ2UuZW1pdCh0aGlzLmNoZWNrZWQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZC1jaGVja2JveC1pbmRpY2F0b3JcIj5cbiAgPGlucHV0XG4gICAgI2lucHV0XG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICBbaWRdPVwiaWRcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKClcIlxuICAvPlxuICA8c3BhbiAqbmdJZj1cImNoZWNrZWRcIiBjbGFzcz1cImQtY2hlY2tib3gtaW5kaWNhdG9yLWljb25cIiAoY2xpY2spPVwiaW5wdXQuY2xpY2soKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja2VkXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaWNvbkNoZWNrXCI+PC9uZy1jb250YWluZXI+XG4gIDwvc3Bhbj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZC1jaGVja2JveC1jb250ZW50XCI+XG4gIDxsYWJlbCBbZm9yXT1cImlkXCIgY2xhc3M9XCJkLWNoZWNrYm94LWxhYmVsXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbGFiZWw+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImRva3UtY2hlY2tib3gtc3ViLWxhYmVsXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjaWNvbkNoZWNrPlxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCI+XG4gICAgPHBhdGhcbiAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICBkPVwiTTE3LjMxODMgNC41NTc1MkMxNy4zNzY1IDQuNjE1NTggMTcuNDIyNyA0LjY4NDU1IDE3LjQ1NDIgNC43NjA0OEMxNy40ODU3IDQuODM2NDEgMTcuNTAxOSA0LjkxNzgxIDE3LjUwMTkgNS4wMDAwMkMxNy41MDE5IDUuMDgyMjMgMTcuNDg1NyA1LjE2MzYzIDE3LjQ1NDIgNS4yMzk1NkMxNy40MjI3IDUuMzE1NDkgMTcuMzc2NSA1LjM4NDQ2IDE3LjMxODMgNS40NDI1Mkw4LjU2ODI5IDE0LjE5MjVDOC41MTAyMyAxNC4yNTA3IDguNDQxMjYgMTQuMjk2OSA4LjM2NTMzIDE0LjMyODRDOC4yODk0IDE0LjM1OTkgOC4yMDggMTQuMzc2MSA4LjEyNTc5IDE0LjM3NjFDOC4wNDM1OCAxNC4zNzYxIDcuOTYyMTggMTQuMzU5OSA3Ljg4NjI1IDE0LjMyODRDNy44MTAzMiAxNC4yOTY5IDcuNzQxMzUgMTQuMjUwNyA3LjY4MzI5IDE0LjE5MjVMMy4zMDgyOSA5LjgxNzUyQzMuMTkwOTMgOS43MDAxNiAzLjEyNSA5LjU0MDk5IDMuMTI1IDkuMzc1MDJDMy4xMjUgOS4yMDkwNSAzLjE5MDkzIDkuMDQ5ODggMy4zMDgyOSA4LjkzMjUyQzMuNDI1NjUgOC44MTUxNiAzLjU4NDgyIDguNzQ5MjMgMy43NTA3OSA4Ljc0OTIzQzMuOTE2NzYgOC43NDkyMyA0LjA3NTkzIDguODE1MTYgNC4xOTMyOSA4LjkzMjUyTDguMTI1NzkgMTIuODY2M0wxNi40MzMzIDQuNTU3NTJDMTYuNDkxMyA0LjQ5OTMxIDE2LjU2MDMgNC40NTMxNCAxNi42MzYyIDQuNDIxNjNDMTYuNzEyMiA0LjM5MDEyIDE2Ljc5MzYgNC4zNzM5IDE2Ljg3NTggNC4zNzM5QzE2Ljk1OCA0LjM3MzkgMTcuMDM5NCA0LjM5MDEyIDE3LjExNTMgNC40MjE2M0MxNy4xOTEzIDQuNDUzMTQgMTcuMjYwMiA0LjQ5OTMxIDE3LjMxODMgNC41NTc1MlpcIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgLz5cbiAgPC9zdmc+XG48L25nLXRlbXBsYXRlPlxuIl19