@doku-dev/doku-fragment
Version:
A new Angular UI library that moving away from Bootstrap and built from scratch.
158 lines • 22.5 kB
JavaScript
import { CommonModule } from '@angular/common';
import { ChangeDetectionStrategy, Component, ContentChild, Host, HostBinding, Input, Optional, ViewChild, ViewEncapsulation, } from '@angular/core';
import { ReplaySubject, takeUntil } from 'rxjs';
import { DokuRadioCustomAppearanceContext } from './context';
import { DokuRadioCustomAppearance } from './radio-custom-appearance.directive';
import { DOKU_RADIO, DOKU_RADIO_BUILT_IN_APPEARANCE } from './token';
import * as i0 from "@angular/core";
import * as i1 from "./radio-group.component";
let nextId = 1;
export class DokuRadio {
constructor(cdr, appRef, renderer, radioGroup) {
this.cdr = cdr;
this.appRef = appRef;
this.renderer = renderer;
this.radioGroup = radioGroup;
/**
* Analog to HTML 'name' attribute used to group radios for unique selection.
* @default 'd-radio-name-[nextId]''
*/
this.name = `d-radio-name-${nextId++}`;
/**
* The value of this radio button.
* @default ''
*/
this.value = '';
/**
* Whether this radio button is checked.
* @default false
*/
this.checked = false;
/**
* Whether the radio button is disabled.
* @default false
*/
this.disabled = false;
/**
* The size of the radio button indicator.
* @default 'medium'
*/
this.size = 'medium';
this.customAppearanceContext = new DokuRadioCustomAppearanceContext();
this.hasIndicator = false;
this.destroy$ = new ReplaySubject();
}
get classes() {
return ['d-radio', `d-radio-${this.size}`];
}
get hasCustomAppearance() {
return !!this.customAppearance || !!this.builtInAppearance;
}
ngAfterViewInit() {
this.cdr.detectChanges();
if (this.hasCustomAppearance) {
this.createAndAppendCustomAppearance();
setTimeout(() => this.appendIndicator({ appendChildTo: this.container?.nativeElement, hidden: true }), 0);
this.label?.nativeElement?.remove();
}
else {
this.appendIndicator();
}
this.watchGroupChanges();
}
ngOnChanges() {
this.updateCustomAppearanceContext();
}
ngOnDestroy() {
this.destroy$.next(true);
this.destroy$.complete();
}
onCheckedChange(ev) {
this.checked = ev.target.checked;
this.cdr.detectChanges();
if (this.hasCustomAppearance) {
this.updateCustomAppearanceContext();
}
this.checkedChangeCallback?.(this.value, this.checked);
}
appendIndicator(props) {
if (!this.indicator || this.hasIndicator)
return;
const viewRef = this.indicator.createEmbeddedView(null);
this.appRef.attachView(viewRef);
viewRef.rootNodes.forEach((node) => {
if (props?.hidden)
this.renderer.setStyle(node, 'display', 'none');
if (props?.appendChildTo) {
this.renderer.appendChild(props.appendChildTo, node);
}
else {
this.renderer.insertBefore(this.container?.nativeElement, node, this.label?.nativeElement);
}
});
this.hasIndicator = true;
this.destroy$.subscribe(() => viewRef.destroy());
}
createAndAppendCustomAppearance() {
const templateRef = this.customAppearance?.templateRef || this.builtInAppearance?.template?.templateRef;
if (!templateRef)
return;
const viewRef = templateRef.createEmbeddedView(this.customAppearanceContext);
this.appRef.attachView(viewRef);
viewRef.rootNodes.forEach((node) => {
this.renderer.appendChild(this.container?.nativeElement, node);
});
this.destroy$.subscribe(() => viewRef.destroy());
}
updateCustomAppearanceContext() {
this.customAppearanceContext.checked = this.checked;
this.customAppearanceContext.disabled = this.disabled;
this.customAppearanceContext.value = this.value;
}
watchGroupChanges() {
this.radioGroup?.['_notifyChanges$'].pipe(takeUntil(this.destroy$)).subscribe(() => {
this.checked = this.value === this.radioGroup?.value;
this.disabled = this.disabled || !!this.radioGroup?.disabled;
this.updateCustomAppearanceContext();
});
}
}
DokuRadio.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuRadio, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ApplicationRef }, { token: i0.Renderer2 }, { token: i1.DokuRadioGroup, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Component });
DokuRadio.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DokuRadio, isStandalone: true, selector: "doku-radio", inputs: { name: "name", value: "value", checked: "checked", disabled: "disabled", size: "size" }, host: { properties: { "class": "this.classes" } }, providers: [{ provide: DOKU_RADIO, useExisting: DokuRadio }], queries: [{ propertyName: "customAppearance", first: true, predicate: DokuRadioCustomAppearance, descendants: true }, { propertyName: "builtInAppearance", first: true, predicate: DOKU_RADIO_BUILT_IN_APPEARANCE, descendants: true }], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "indicator", first: true, predicate: ["indicator"], descendants: true }, { propertyName: "label", first: true, predicate: ["label"], descendants: true }], exportAs: ["dokuRadio"], usesOnChanges: true, ngImport: i0, template: "<label #container class=\"d-radio-container\">\n <span #label class=\"d-radio-label\"><ng-content></ng-content></span>\n</label>\n\n<ng-template #indicator>\n <input\n type=\"radio\"\n class=\"d-radio-input\"\n [name]=\"name\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"onCheckedChange($event)\"\n />\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuRadio, decorators: [{
type: Component,
args: [{ selector: 'doku-radio', exportAs: 'dokuRadio', standalone: true, imports: [CommonModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: DOKU_RADIO, useExisting: DokuRadio }], template: "<label #container class=\"d-radio-container\">\n <span #label class=\"d-radio-label\"><ng-content></ng-content></span>\n</label>\n\n<ng-template #indicator>\n <input\n type=\"radio\"\n class=\"d-radio-input\"\n [name]=\"name\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"onCheckedChange($event)\"\n />\n</ng-template>\n" }]
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ApplicationRef }, { type: i0.Renderer2 }, { type: i1.DokuRadioGroup, decorators: [{
type: Optional
}, {
type: Host
}] }]; }, propDecorators: { name: [{
type: Input
}], value: [{
type: Input
}], checked: [{
type: Input
}], disabled: [{
type: Input
}], size: [{
type: Input
}], container: [{
type: ViewChild,
args: ['container']
}], indicator: [{
type: ViewChild,
args: ['indicator']
}], label: [{
type: ViewChild,
args: ['label']
}], customAppearance: [{
type: ContentChild,
args: [DokuRadioCustomAppearance]
}], builtInAppearance: [{
type: ContentChild,
args: [DOKU_RADIO_BUILT_IN_APPEARANCE]
}], classes: [{
type: HostBinding,
args: ['class']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9rdS1mcmFnbWVudC9zcmMvbGliL3JhZGlvL3JhZGlvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rva3UtZnJhZ21lbnQvc3JjL2xpYi9yYWRpby9yYWRpby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUVaLElBQUksRUFDSixXQUFXLEVBQ1gsS0FBSyxFQUdMLFFBQVEsRUFHUixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUdoRixPQUFPLEVBQUUsVUFBVSxFQUFFLDhCQUE4QixFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFFckUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBWWYsTUFBTSxPQUFPLFNBQVM7SUE4Q3BCLFlBQ1UsR0FBc0IsRUFDdEIsTUFBc0IsRUFDdEIsUUFBbUIsRUFDQyxVQUEyQjtRQUgvQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ0MsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7UUFqRHpEOzs7V0FHRztRQUNNLFNBQUksR0FBRyxnQkFBZ0IsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUUzQzs7O1dBR0c7UUFDTSxVQUFLLEdB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QUs7c0JBQWhDLFNBQVM7dUJBQUMsT0FBTztnQkFHVixnQkFBZ0I7c0JBRHZCLFlBQVk7dUJBQUMseUJBQXlCO2dCQUkvQixpQkFBaUI7c0JBRHhCLFlBQVk7dUJBQUMsOEJBQThCO2dCQWdCOUIsT0FBTztzQkFEcEIsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBIb3N0LFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERva3VSYWRpb0N1c3RvbUFwcGVhcmFuY2VDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IERva3VSYWRpb0N1c3RvbUFwcGVhcmFuY2UgfSBmcm9tICcuL3JhZGlvLWN1c3RvbS1hcHBlYXJhbmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEb2t1UmFkaW9Hcm91cCB9IGZyb20gJy4vcmFkaW8tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IERva3VSYWRpb0J1aWx0SW5BcHBlYXJhbmNlIH0gZnJvbSAnLi9yYWRpby5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRE9LVV9SQURJTywgRE9LVV9SQURJT19CVUlMVF9JTl9BUFBFQVJBTkNFIH0gZnJvbSAnLi90b2tlbic7XG5cbmxldCBuZXh0SWQgPSAxO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkb2t1LXJhZGlvJyxcbiAgZXhwb3J0QXM6ICdkb2t1UmFkaW8nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogRE9LVV9SQURJTywgdXNlRXhpc3Rpbmc6IERva3VSYWRpbyB9XSxcbn0pXG5leHBvcnQgY2xhc3MgRG9rdVJhZGlvIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogQW5hbG9nIHRvIEhUTUwgJ25hbWUnIGF0dHJpYnV0ZSB1c2VkIHRvIGdyb3VwIHJhZGlvcyBmb3IgdW5pcXVlIHNlbGVjdGlvbi5cbiAgICogQGRlZmF1bHQgJ2QtcmFkaW8tbmFtZS1bbmV4dElkXScnXG4gICAqL1xuICBASW5wdXQoKSBuYW1lID0gYGQtcmFkaW8tbmFtZS0ke25leHRJZCsrfWA7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGlzIHJhZGlvIGJ1dHRvbi5cbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByYWRpbyBidXR0b24gaXMgY2hlY2tlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIGNoZWNrZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcmFkaW8gYnV0dG9uIGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIHJhZGlvIGJ1dHRvbiBpbmRpY2F0b3IuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBASW5wdXQoKSBzaXplOiAnbWVkaXVtJyB8ICdzbWFsbCcgPSAnbWVkaXVtJztcblxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBwcml2YXRlIGNvbnRhaW5lcj86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2luZGljYXRvcicpIHByaXZhdGUgaW5kaWNhdG9yPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnbGFiZWwnKSBwcml2YXRlIGxhYmVsPzogRWxlbWVudFJlZjtcblxuICBAQ29udGVudENoaWxkKERva3VSYWRpb0N1c3RvbUFwcGVhcmFuY2UpXG4gIHByaXZhdGUgY3VzdG9tQXBwZWFyYW5jZT86IERva3VSYWRpb0N1c3RvbUFwcGVhcmFuY2U7XG5cbiAgQENvbnRlbnRDaGlsZChET0tVX1JBRElPX0JVSUxUX0lOX0FQUEVBUkFOQ0UpXG4gIHByaXZhdGUgYnVpbHRJbkFwcGVhcmFuY2U/OiBEb2t1UmFkaW9CdWlsdEluQXBwZWFyYW5jZTtcblxuICBwcm90ZWN0ZWQgY3VzdG9tQXBwZWFyYW5jZUNvbnRleHQgPSBuZXcgRG9rdVJhZGlvQ3VzdG9tQXBwZWFyYW5jZUNvbnRleHQoKTtcbiAgcHJvdGVjdGVkIGhhc0luZGljYXRvciA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgY2hlY2tlZENoYW5nZUNhbGxiYWNrPzogKHZhbHVlOiBzdHJpbmcsIGNoZWNrZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBPcHRpb25hbCgpIEBIb3N0KCkgcHJpdmF0ZSByYWRpb0dyb3VwPzogRG9rdVJhZGlvR3JvdXBcbiAgKSB7fVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBwcm90ZWN0ZWQgZ2V0IGNsYXNzZXMoKTogTmdDbGFzc1snbmdDbGFzcyddIHtcbiAgICByZXR1cm4gWydkLXJhZGlvJywgYGQtcmFkaW8tJHt0aGlzLnNpemV9YF07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGhhc0N1c3RvbUFwcGVhcmFuY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jdXN0b21BcHBlYXJhbmNlIHx8ICEhdGhpcy5idWlsdEluQXBwZWFyYW5jZTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgaWYgKHRoaXMuaGFzQ3VzdG9tQXBwZWFyYW5jZSkge1xuICAgICAgdGhpcy5jcmVhdGVBbmRBcHBlbmRDdXN0b21BcHBlYXJhbmNlKCk7XG4gICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiB0aGlzLmFwcGVuZEluZGljYXRvcih7IGFwcGVuZENoaWxkVG86IHRoaXMuY29udGFpbmVyPy5uYXRpdmVFbGVtZW50LCBoaWRkZW46IHRydWUgfSksXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICAodGhpcy5sYWJlbD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk/LnJlbW92ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcGVuZEluZGljYXRvcigpO1xuICAgIH1cblxuICAgIHRoaXMud2F0Y2hHcm91cENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQ3VzdG9tQXBwZWFyYW5jZUNvbnRleHQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25DaGVja2VkQ2hhbmdlKGV2OiBFdmVudCkge1xuICAgIHRoaXMuY2hlY2tlZCA9IChldi50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgaWYgKHRoaXMuaGFzQ3VzdG9tQXBwZWFyYW5jZSkge1xuICAgICAgdGhpcy51cGRhdGVDdXN0b21BcHBlYXJhbmNlQ29udGV4dCgpO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrZWRDaGFuZ2VDYWxsYmFjaz8uKHRoaXMudmFsdWUsIHRoaXMuY2hlY2tlZCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZEluZGljYXRvcihwcm9wcz86IHsgYXBwZW5kQ2hpbGRUbz86IEhUTUxFbGVtZW50OyBoaWRkZW4/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuaW5kaWNhdG9yIHx8IHRoaXMuaGFzSW5kaWNhdG9yKSByZXR1cm47XG4gICAgY29uc3Qgdmlld1JlZiA9IHRoaXMuaW5kaWNhdG9yLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKTtcbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KHZpZXdSZWYpO1xuICAgIHZpZXdSZWYucm9vdE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChwcm9wcz8uaGlkZGVuKSB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG5vZGUsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgIGlmIChwcm9wcz8uYXBwZW5kQ2hpbGRUbykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHByb3BzLmFwcGVuZENoaWxkVG8sIG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUodGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsIG5vZGUsIHRoaXMubGFiZWw/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaGFzSW5kaWNhdG9yID0gdHJ1ZTtcbiAgICB0aGlzLmRlc3Ryb3kkLnN1YnNjcmliZSgoKSA9PiB2aWV3UmVmLmRlc3Ryb3koKSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFuZEFwcGVuZEN1c3RvbUFwcGVhcmFuY2UoKSB7XG4gICAgY29uc3QgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQgPVxuICAgICAgdGhpcy5jdXN0b21BcHBlYXJhbmNlPy50ZW1wbGF0ZVJlZiB8fCB0aGlzLmJ1aWx0SW5BcHBlYXJhbmNlPy50ZW1wbGF0ZT8udGVtcGxhdGVSZWY7XG4gICAgaWYgKCF0ZW1wbGF0ZVJlZikgcmV0dXJuO1xuXG4gICAgY29uc3Qgdmlld1JlZiA9IHRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLmN1c3RvbUFwcGVhcmFuY2VDb250ZXh0KTtcbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KHZpZXdSZWYpO1xuICAgIHZpZXdSZWYucm9vdE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsIG5vZGUpO1xuICAgIH0pO1xuICAgIHRoaXMuZGVzdHJveSQuc3Vic2NyaWJlKCgpID0+IHZpZXdSZWYuZGVzdHJveSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ3VzdG9tQXBwZWFyYW5jZUNvbnRleHQoKSB7XG4gICAgdGhpcy5jdXN0b21BcHBlYXJhbmNlQ29udGV4dC5jaGVja2VkID0gdGhpcy5jaGVja2VkO1xuICAgIHRoaXMuY3VzdG9tQXBwZWFyYW5jZUNvbnRleHQuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICAgIHRoaXMuY3VzdG9tQXBwZWFyYW5jZUNvbnRleHQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXRjaEdyb3VwQ2hhbmdlcygpIHtcbiAgICB0aGlzLnJhZGlvR3JvdXA/LlsnX25vdGlmeUNoYW5nZXMkJ10ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrZWQgPSB0aGlzLnZhbHVlID09PSB0aGlzLnJhZGlvR3JvdXA/LnZhbHVlO1xuICAgICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQgfHwgISF0aGlzLnJhZGlvR3JvdXA/LmRpc2FibGVkO1xuICAgICAgdGhpcy51cGRhdGVDdXN0b21BcHBlYXJhbmNlQ29udGV4dCgpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8bGFiZWwgI2NvbnRhaW5lciBjbGFzcz1cImQtcmFkaW8tY29udGFpbmVyXCI+XG4gIDxzcGFuICNsYWJlbCBjbGFzcz1cImQtcmFkaW8tbGFiZWxcIj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuPC9sYWJlbD5cblxuPG5nLXRlbXBsYXRlICNpbmRpY2F0b3I+XG4gIDxpbnB1dFxuICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgY2xhc3M9XCJkLXJhZGlvLWlucHV0XCJcbiAgICBbbmFtZV09XCJuYW1lXCJcbiAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgKGNoYW5nZSk9XCJvbkNoZWNrZWRDaGFuZ2UoJGV2ZW50KVwiXG4gIC8+XG48L25nLXRlbXBsYXRlPlxuIl19