UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

109 lines 19.9 kB
import { ChangeDetectionStrategy, Component, computed, Directive, effect, inject, ViewEncapsulation, } from '@angular/core'; import { TUI_IDENTITY_VALUE_TRANSFORMER, TuiNonNullableValueTransformer, TuiValueTransformer, } from '@taiga-ui/cdk/classes'; import { TUI_ALLOW_SIGNAL_WRITES } from '@taiga-ui/cdk/constants'; import { TUI_IS_MOBILE } from '@taiga-ui/cdk/tokens'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { tuiClamp } from '@taiga-ui/cdk/utils/math'; import { tuiWithStyles } from '@taiga-ui/cdk/utils/miscellaneous'; import { tuiInjectAuxiliary } from '@taiga-ui/core/components/textfield'; import { TuiInputNumberDirective, tuiInputNumberOptionsProvider, TuiWithQuantumValueTransformer, } from '@taiga-ui/kit/components/input-number'; import { TuiSliderComponent } from '@taiga-ui/kit/components/slider'; import { filter, fromEvent, switchMap, tap } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "@taiga-ui/kit/components/input-number"; class TuiInputSliderDirective { constructor() { this.isMobile = inject(TUI_IS_MOBILE); this.el = tuiInjectElement(); this.slider = tuiInjectAuxiliary((x) => x instanceof TuiSliderComponent); this.controlTransformer = inject(TuiValueTransformer, { self: true }); this.keyStepsTransformer = computed(() => this.slider()?.keySteps?.transformer() ?? TUI_IDENTITY_VALUE_TRANSFORMER); this.inputNumber = inject(TuiInputNumberDirective, { self: true }); this.value = computed(() => this.controlTransformer.toControlValue(this.inputNumber.value())); this.nothing = tuiWithStyles(TuiInputSliderStyles); this.textfieldToSliderSync = effect(() => { const slider = this.slider(); if (!slider) { return; } if (slider.keySteps?.transformer() && Number.isFinite(slider.keySteps?.totalSteps)) { // TODO(v5): move all if-condition body inside `TuiSliderKeyStepsBase` slider.min = 0; slider.step = 1; slider.max = slider.keySteps?.totalSteps ?? 100; } else { slider.min = this.inputNumber.min(); slider.max = this.inputNumber.max(); } slider.value = this.keyStepsTransformer().fromControlValue(this.value()); slider.el.disabled = !this.inputNumber.interactive(); }, TUI_ALLOW_SIGNAL_WRITES); this.sliderInitEffect = effect((onCleanup) => { const slider = this.slider(); if (!slider) { return; } slider.el.style.setProperty('--tui-slider-track-color', 'transparent'); slider.el.setAttribute('tabindex', '-1'); if (slider.keySteps) { slider.keySteps.value = this.value; } const subscription = fromEvent(slider.el, 'input') .pipe(tap(() => this.inputNumber.setValue(this.keyStepsTransformer().toControlValue(slider.el.valueAsNumber))), filter(() => !this.isMobile), switchMap(() => fromEvent(this.el.ownerDocument, 'pointerup', { once: true }))) .subscribe(() => this.el.focus()); onCleanup(() => subscription.unsubscribe()); }); } onStep(coefficient) { const slider = this.slider(); if (slider && this.inputNumber.interactive()) { const newValue = tuiClamp(slider.keySteps?.takeStep(coefficient) ?? slider.value + coefficient * slider.step, this.inputNumber.min(), this.inputNumber.max()); this.inputNumber.setValue(newValue); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputSliderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiInputSliderDirective, isStandalone: true, selector: "input[tuiInputSlider]", host: { listeners: { "blur": "inputNumber.setValue(value() ?? null)", "keydown.arrowUp": "onStep(1)", "keydown.arrowDown": "onStep(-1)" } }, providers: [ tuiInputNumberOptionsProvider({ valueTransformer: new TuiNonNullableValueTransformer(), }), ], hostDirectives: [{ directive: i1.TuiInputNumberDirective, inputs: ["min", "min", "max", "max", "prefix", "prefix", "postfix", "postfix", "invalid", "invalid", "readOnly", "readOnly"] }, { directive: i1.TuiWithQuantumValueTransformer }], ngImport: i0 }); } } export { TuiInputSliderDirective }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputSliderDirective, decorators: [{ type: Directive, args: [{ standalone: true, selector: 'input[tuiInputSlider]', providers: [ tuiInputNumberOptionsProvider({ valueTransformer: new TuiNonNullableValueTransformer(), }), ], hostDirectives: [ { directive: TuiInputNumberDirective, inputs: ['min', 'max', 'prefix', 'postfix', 'invalid', 'readOnly'], }, TuiWithQuantumValueTransformer, ], host: { '(blur)': 'inputNumber.setValue(value() ?? null)', '(keydown.arrowUp)': 'onStep(1)', '(keydown.arrowDown)': 'onStep(-1)', }, }] }] }); class TuiInputSliderStyles { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputSliderStyles, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiInputSliderStyles, isStandalone: true, selector: "ng-component", host: { classAttribute: "tui-input-slider" }, ngImport: i0, template: '', isInline: true, styles: ["tui-textfield [tuiInputSlider]~.t-content .t-clear{display:none!important}\n", "tui-textfield [tuiInputSlider]~[tuiSlider]:disabled{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputSliderStyles, decorators: [{ type: Component, args: [{ standalone: true, template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'tui-input-slider', }, styles: ["tui-textfield [tuiInputSlider]~.t-content .t-clear{display:none!important}\n", "tui-textfield [tuiInputSlider]~[tuiSlider]:disabled{display:none}\n"] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtc2xpZGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdC9jb21wb25lbnRzL2lucHV0LXNsaWRlci9pbnB1dC1zbGlkZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsbUJBQW1CLEdBQ3RCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUNILHVCQUF1QixFQUN2Qiw2QkFBNkIsRUFDN0IsOEJBQThCLEdBQ2pDLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7O0FBRXZELE1BcUJhLHVCQUF1QjtJQXJCcEM7UUFzQnFCLGFBQVEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakMsT0FBRSxHQUFHLGdCQUFn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QztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsU0FBUyxFQUFFO3dCQUNQLDZCQUE2QixDQUFDOzRCQUMxQixnQkFBZ0IsRUFBRSxJQUFJLDhCQUE4QixFQUFFO3lCQUN6RCxDQUFDO3FCQUNMO29CQUNELGNBQWMsRUFBRTt3QkFDWjs0QkFDSSxTQUFTLEVBQUUsdUJBQXVCOzRCQUNsQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQzt5QkFDckU7d0JBQ0QsOEJBQThCO3FCQUNqQztvQkFDRCxJQUFJLEVBQUU7d0JBQ0YsUUFBUSxFQUFFLHVDQUF1Qzt3QkFDakQsbUJBQW1CLEVBQUUsV0FBVzt3QkFDaEMscUJBQXFCLEVBQUUsWUFBWTtxQkFDdEM7aUJBQ0o7O0FBZ0dELE1BZU0sb0JBQW9COytHQUFwQixvQkFBb0I7bUdBQXBCLG9CQUFvQixzSEFiWixFQUFFOzs0RkFhVixvQkFBb0I7a0JBZnpCLFNBQVM7aUNBQ00sSUFBSSxZQUNOLEVBQUUsaUJBT0csaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDRixLQUFLLEVBQUUsa0JBQWtCO3FCQUM1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIERpcmVjdGl2ZSxcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgVFVJX0lERU5USVRZX1ZBTFVFX1RSQU5TRk9STUVSLFxuICAgIFR1aU5vbk51bGxhYmxlVmFsdWVUcmFuc2Zvcm1lcixcbiAgICBUdWlWYWx1ZVRyYW5zZm9ybWVyLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NsYXNzZXMnO1xuaW1wb3J0IHtUVUlfQUxMT1dfU0lHTkFMX1dSSVRFU30gZnJvbSAnQHRhaWdhLXVpL2Nkay9jb25zdGFudHMnO1xuaW1wb3J0IHtUVUlfSVNfTU9CSUxFfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3Rva2Vucyc7XG5pbXBvcnQge3R1aUluamVjdEVsZW1lbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvZG9tJztcbmltcG9ydCB7dHVpQ2xhbXB9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWF0aCc7XG5pbXBvcnQge3R1aVdpdGhTdHlsZXN9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5pbXBvcnQge3R1aUluamVjdEF1eGlsaWFyeX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy90ZXh0ZmllbGQnO1xuaW1wb3J0IHtcbiAgICBUdWlJbnB1dE51bWJlckRpcmVjdGl2ZSxcbiAgICB0dWlJbnB1dE51bWJlck9wdGlvbnNQcm92aWRlcixcbiAgICBUdWlXaXRoUXVhbnR1bVZhbHVlVHJhbnNmb3JtZXIsXG59IGZyb20gJ0B0YWlnYS11aS9raXQvY29tcG9uZW50cy9pbnB1dC1udW1iZXInO1xuaW1wb3J0IHtUdWlTbGlkZXJDb21wb25lbnR9IGZyb20gJ0B0YWlnYS11aS9raXQvY29tcG9uZW50cy9zbGlkZXInO1xuaW1wb3J0IHtmaWx0ZXIsIGZyb21FdmVudCwgc3dpdGNoTWFwLCB0YXB9IGZyb20gJ3J4anMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnaW5wdXRbdHVpSW5wdXRTbGlkZXJdJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgdHVpSW5wdXROdW1iZXJPcHRpb25zUHJvdmlkZXIoe1xuICAgICAgICAgICAgdmFsdWVUcmFuc2Zvcm1lcjogbmV3IFR1aU5vbk51bGxhYmxlVmFsdWVUcmFuc2Zvcm1lcigpLFxuICAgICAgICB9KSxcbiAgICBdLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogVHVpSW5wdXROdW1iZXJEaXJlY3RpdmUsXG4gICAgICAgICAgICBpbnB1dHM6IFsnbWluJywgJ21heCcsICdwcmVmaXgnLCAncG9zdGZpeCcsICdpbnZhbGlkJywgJ3JlYWRPbmx5J10sXG4gICAgICAgIH0sXG4gICAgICAgIFR1aVdpdGhRdWFudHVtVmFsdWVUcmFuc2Zvcm1lcixcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhibHVyKSc6ICdpbnB1dE51bWJlci5zZXRWYWx1ZSh2YWx1ZSgpID8/IG51bGwpJyxcbiAgICAgICAgJyhrZXlkb3duLmFycm93VXApJzogJ29uU3RlcCgxKScsXG4gICAgICAgICcoa2V5ZG93bi5hcnJvd0Rvd24pJzogJ29uU3RlcCgtMSknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUlucHV0U2xpZGVyRGlyZWN0aXZlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzTW9iaWxlID0gaW5qZWN0KFRVSV9JU19NT0JJTEUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWwgPSB0dWlJbmplY3RFbGVtZW50PEhUTUxJbnB1dEVsZW1lbnQ+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzbGlkZXIgPSB0dWlJbmplY3RBdXhpbGlhcnk8VHVpU2xpZGVyQ29tcG9uZW50PihcbiAgICAgICAgKHgpID0+IHggaW5zdGFuY2VvZiBUdWlTbGlkZXJDb21wb25lbnQsXG4gICAgKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbFRyYW5zZm9ybWVyID0gaW5qZWN0PFxuICAgICAgICBUdWlWYWx1ZVRyYW5zZm9ybWVyPG51bWJlciB8IG51bGwsIG51bWJlcj5cbiAgICA+KFR1aVZhbHVlVHJhbnNmb3JtZXIsIHtzZWxmOiB0cnVlfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleVN0ZXBzVHJhbnNmb3JtZXIgPSBjb21wdXRlZChcbiAgICAgICAgKCkgPT4gdGhpcy5zbGlkZXIoKT8ua2V5U3RlcHM/LnRyYW5zZm9ybWVyKCkgPz8gVFVJX0lERU5USVRZX1ZBTFVFX1RSQU5TRk9STUVSLFxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5wdXROdW1iZXIgPSBpbmplY3QoVHVpSW5wdXROdW1iZXJEaXJlY3RpdmUsIHtzZWxmOiB0cnVlfSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHZhbHVlID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5jb250cm9sVHJhbnNmb3JtZXIudG9Db250cm9sVmFsdWUodGhpcy5pbnB1dE51bWJlci52YWx1ZSgpKSxcbiAgICApO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5vdGhpbmcgPSB0dWlXaXRoU3R5bGVzKFR1aUlucHV0U2xpZGVyU3R5bGVzKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSB0ZXh0ZmllbGRUb1NsaWRlclN5bmMgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBzbGlkZXIgPSB0aGlzLnNsaWRlcigpO1xuXG4gICAgICAgIGlmICghc2xpZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBzbGlkZXIua2V5U3RlcHM/LnRyYW5zZm9ybWVyKCkgJiZcbiAgICAgICAgICAgIE51bWJlci5pc0Zpbml0ZShzbGlkZXIua2V5U3RlcHM/LnRvdGFsU3RlcHMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gVE9ETyh2NSk6IG1vdmUgYWxsIGlmLWNvbmRpdGlvbiBib2R5IGluc2lkZSBgVHVpU2xpZGVyS2V5U3RlcHNCYXNlYFxuICAgICAgICAgICAgc2xpZGVyLm1pbiA9IDA7XG4gICAgICAgICAgICBzbGlkZXIuc3RlcCA9IDE7XG4gICAgICAgICAgICBzbGlkZXIubWF4ID0gc2xpZGVyLmtleVN0ZXBzPy50b3RhbFN0ZXBzID8/IDEwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNsaWRlci5taW4gPSB0aGlzLmlucHV0TnVtYmVyLm1pbigpO1xuICAgICAgICAgICAgc2xpZGVyLm1heCA9IHRoaXMuaW5wdXROdW1iZXIubWF4KCk7XG4gICAgICAgIH1cblxuICAgICAgICBzbGlkZXIudmFsdWUgPSB0aGlzLmtleVN0ZXBzVHJhbnNmb3JtZXIoKS5mcm9tQ29udHJvbFZhbHVlKHRoaXMudmFsdWUoKSk7XG4gICAgICAgIHNsaWRlci5lbC5kaXNhYmxlZCA9ICF0aGlzLmlucHV0TnVtYmVyLmludGVyYWN0aXZlKCk7XG4gICAgfSwgVFVJX0FMTE9XX1NJR05BTF9XUklURVMpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNsaWRlckluaXRFZmZlY3QgPSBlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuICAgICAgICBjb25zdCBzbGlkZXIgPSB0aGlzLnNsaWRlcigpO1xuXG4gICAgICAgIGlmICghc2xpZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzbGlkZXIuZWwuc3R5bGUuc2V0UHJvcGVydHkoJy0tdHVpLXNsaWRlci10cmFjay1jb2xvcicsICd0cmFuc3BhcmVudCcpO1xuICAgICAgICBzbGlkZXIuZWwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuXG4gICAgICAgIGlmIChzbGlkZXIua2V5U3RlcHMpIHtcbiAgICAgICAgICAgIHNsaWRlci5rZXlTdGVwcy52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoc2xpZGVyLmVsLCAnaW5wdXQnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXROdW1iZXIuc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmtleVN0ZXBzVHJhbnNmb3JtZXIoKS50b0NvbnRyb2xWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXIuZWwudmFsdWVBc051bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuaXNNb2JpbGUpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5lbC5vd25lckRvY3VtZW50LCAncG9pbnRlcnVwJywge29uY2U6IHRydWV9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmVsLmZvY3VzKCkpO1xuXG4gICAgICAgIG9uQ2xlYW51cCgoKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgfSk7XG5cbiAgICBwcm90ZWN0ZWQgb25TdGVwKGNvZWZmaWNpZW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2xpZGVyID0gdGhpcy5zbGlkZXIoKTtcblxuICAgICAgICBpZiAoc2xpZGVyICYmIHRoaXMuaW5wdXROdW1iZXIuaW50ZXJhY3RpdmUoKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0dWlDbGFtcChcbiAgICAgICAgICAgICAgICBzbGlkZXIua2V5U3RlcHM/LnRha2VTdGVwKGNvZWZmaWNpZW50KSA/P1xuICAgICAgICAgICAgICAgICAgICBzbGlkZXIudmFsdWUgKyBjb2VmZmljaWVudCAqIHNsaWRlci5zdGVwLFxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXROdW1iZXIubWluKCksXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dE51bWJlci5tYXgoKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuaW5wdXROdW1iZXIuc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgLy8gVE9ETzogdHVpLXRleHRmaWVsZDpoYXMoW3R1aUlucHV0U2xpZGVyXSkgLnQtY2xlYXJcbiAgICAgICAgJ3R1aS10ZXh0ZmllbGQgW3R1aUlucHV0U2xpZGVyXSB+IC50LWNvbnRlbnQgLnQtY2xlYXIge2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudH0nLFxuICAgICAgICAvLyBUT0RPOiB0dWktdGV4dGZpZWxkOmhhcyhbdHVpSW5wdXRTbGlkZXJdKSBbdHVpU2xpZGVyXTpkaXNhYmxlZFxuICAgICAgICAndHVpLXRleHRmaWVsZCBbdHVpSW5wdXRTbGlkZXJdIH4gW3R1aVNsaWRlcl06ZGlzYWJsZWQge2Rpc3BsYXk6IG5vbmV9JyxcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3R1aS1pbnB1dC1zbGlkZXInLFxuICAgIH0sXG59KVxuY2xhc3MgVHVpSW5wdXRTbGlkZXJTdHlsZXMge31cbiJdfQ==