@taiga-ui/kit
Version:
Taiga UI Angular main components kit
118 lines • 19.4 kB
JavaScript
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, tuiIsElement, tuiIsInput } 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, } from '@taiga-ui/kit/components/input-number';
import { TuiSliderComponent } from '@taiga-ui/kit/components/slider';
import { filter, fromEvent } 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.element = tuiInjectElement();
this.inputNumber = inject(TuiInputNumberDirective, { self: true });
this.slider = tuiInjectAuxiliary((x) => x instanceof TuiSliderComponent);
this.controlTransformer = inject(TuiValueTransformer, { self: true });
this.value = computed(() => this.controlTransformer.toControlValue(this.inputNumber.value()));
this.keyStepsTransformer = computed(() => this.slider()?.keySteps?.transformer() ?? TUI_IDENTITY_VALUE_TRANSFORMER);
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');
if (slider.keySteps) {
slider.keySteps.value = this.value;
}
const subscription = fromEvent(slider.el, 'input', (x) => x.target)
.pipe(filter(tuiIsElement), filter(tuiIsInput))
.subscribe((x) => this.onSliderInput(x.valueAsNumber));
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);
}
}
onBlur() {
if (!this.element.value) {
this.inputNumber.setValue(this.value() ?? null);
}
}
onSliderInput(value) {
this.inputNumber.setValue(this.keyStepsTransformer().toControlValue(value));
if (!this.isMobile) {
this.element.focus();
}
}
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": "onBlur()", "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"] }], 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'],
},
],
host: {
'(blur)': 'onBlur()',
'(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"], 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"] }]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtc2xpZGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdC9jb21wb25lbnRzL2lucHV0LXNsaWRlci9pbnB1dC1zbGlkZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsbUJBQW1CLEdBQ3RCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDbkYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLDZCQUE2QixHQUNoQyxNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7QUFFdkMsTUFvQmEsdUJBQXVCO0lBcEJwQztRQXFCcUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqQyxZQUFPLEdBQUcsZ0JBQWdCLEVBQW9CLENBQUM7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LEVBQUUsSUFBSSw4QkFBOEIsRUFBRTthQUN6RCxDQUFDO1NBQ0w7O1NBYVEsdUJBQXVCOzRGQUF2Qix1QkFBdUI7a0JBcEJuQyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxTQUFTLEVBQUU7d0JBQ1AsNkJBQTZCLENBQUM7NEJBQzFCLGdCQUFnQixFQUFFLElBQUksOEJBQThCLEVBQUU7eUJBQ3pELENBQUM7cUJBQ0w7b0JBQ0QsY0FBYyxFQUFFO3dCQUNaOzRCQUNJLFNBQVMsRUFBRSx1QkFBdUI7NEJBQ2xDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDO3lCQUNyRTtxQkFDSjtvQkFDRCxJQUFJLEVBQUU7d0JBQ0YsUUFBUSxFQUFFLFVBQVU7d0JBQ3BCLG1CQUFtQixFQUFFLFdBQVc7d0JBQ2hDLHFCQUFxQixFQUFFLFlBQVk7cUJBQ3RDO2lCQUNKOztBQWlHRCxNQWFNLG9CQUFvQjsrR0FBcEIsb0JBQW9CO21HQUFwQixvQkFBb0Isc0hBWFosRUFBRTs7NEZBV1Ysb0JBQW9CO2tCQWJ6QixTQUFTO2lDQUNNLElBQUksWUFDTixFQUFFLGlCQUtHLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0YsS0FBSyxFQUFFLGtCQUFrQjtxQkFDNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBEaXJlY3RpdmUsXG4gICAgZWZmZWN0LFxuICAgIGluamVjdCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIFRVSV9JREVOVElUWV9WQUxVRV9UUkFOU0ZPUk1FUixcbiAgICBUdWlOb25OdWxsYWJsZVZhbHVlVHJhbnNmb3JtZXIsXG4gICAgVHVpVmFsdWVUcmFuc2Zvcm1lcixcbn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jbGFzc2VzJztcbmltcG9ydCB7VFVJX0FMTE9XX1NJR05BTF9XUklURVN9IGZyb20gJ0B0YWlnYS11aS9jZGsvY29uc3RhbnRzJztcbmltcG9ydCB7VFVJX0lTX01PQklMRX0gZnJvbSAnQHRhaWdhLXVpL2Nkay90b2tlbnMnO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50LCB0dWlJc0VsZW1lbnQsIHR1aUlzSW5wdXR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvZG9tJztcbmltcG9ydCB7dHVpQ2xhbXB9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWF0aCc7XG5pbXBvcnQge3R1aVdpdGhTdHlsZXN9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5pbXBvcnQge3R1aUluamVjdEF1eGlsaWFyeX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy90ZXh0ZmllbGQnO1xuaW1wb3J0IHtcbiAgICBUdWlJbnB1dE51bWJlckRpcmVjdGl2ZSxcbiAgICB0dWlJbnB1dE51bWJlck9wdGlvbnNQcm92aWRlcixcbn0gZnJvbSAnQHRhaWdhLXVpL2tpdC9jb21wb25lbnRzL2lucHV0LW51bWJlcic7XG5pbXBvcnQge1R1aVNsaWRlckNvbXBvbmVudH0gZnJvbSAnQHRhaWdhLXVpL2tpdC9jb21wb25lbnRzL3NsaWRlcic7XG5pbXBvcnQge2ZpbHRlciwgZnJvbUV2ZW50fSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2lucHV0W3R1aUlucHV0U2xpZGVyXScsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHR1aUlucHV0TnVtYmVyT3B0aW9uc1Byb3ZpZGVyKHtcbiAgICAgICAgICAgIHZhbHVlVHJhbnNmb3JtZXI6IG5ldyBUdWlOb25OdWxsYWJsZVZhbHVlVHJhbnNmb3JtZXIoKSxcbiAgICAgICAgfSksXG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmU6IFR1aUlucHV0TnVtYmVyRGlyZWN0aXZlLFxuICAgICAgICAgICAgaW5wdXRzOiBbJ21pbicsICdtYXgnLCAncHJlZml4JywgJ3Bvc3RmaXgnLCAnaW52YWxpZCcsICdyZWFkT25seSddLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnKGJsdXIpJzogJ29uQmx1cigpJyxcbiAgICAgICAgJyhrZXlkb3duLmFycm93VXApJzogJ29uU3RlcCgxKScsXG4gICAgICAgICcoa2V5ZG93bi5hcnJvd0Rvd24pJzogJ29uU3RlcCgtMSknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUlucHV0U2xpZGVyRGlyZWN0aXZlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzTW9iaWxlID0gaW5qZWN0KFRVSV9JU19NT0JJTEUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudCA9IHR1aUluamVjdEVsZW1lbnQ8SFRNTElucHV0RWxlbWVudD4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlucHV0TnVtYmVyID0gaW5qZWN0KFR1aUlucHV0TnVtYmVyRGlyZWN0aXZlLCB7c2VsZjogdHJ1ZX0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2xpZGVyID0gdHVpSW5qZWN0QXV4aWxpYXJ5PFR1aVNsaWRlckNvbXBvbmVudD4oXG4gICAgICAgICh4KSA9PiB4IGluc3RhbmNlb2YgVHVpU2xpZGVyQ29tcG9uZW50LFxuICAgICk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xUcmFuc2Zvcm1lciA9IGluamVjdDxcbiAgICAgICAgVHVpVmFsdWVUcmFuc2Zvcm1lcjxudW1iZXIgfCBudWxsLCBudW1iZXI+XG4gICAgPihUdWlWYWx1ZVRyYW5zZm9ybWVyLCB7c2VsZjogdHJ1ZX0pO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSB2YWx1ZSA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMuY29udHJvbFRyYW5zZm9ybWVyLnRvQ29udHJvbFZhbHVlKHRoaXMuaW5wdXROdW1iZXIudmFsdWUoKSksXG4gICAgKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5U3RlcHNUcmFuc2Zvcm1lciA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PiB0aGlzLnNsaWRlcigpPy5rZXlTdGVwcz8udHJhbnNmb3JtZXIoKSA/PyBUVUlfSURFTlRJVFlfVkFMVUVfVFJBTlNGT1JNRVIsXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBub3RoaW5nID0gdHVpV2l0aFN0eWxlcyhUdWlJbnB1dFNsaWRlclN0eWxlcyk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGV4dGZpZWxkVG9TbGlkZXJTeW5jID0gZWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2xpZGVyID0gdGhpcy5zbGlkZXIoKTtcblxuICAgICAgICBpZiAoIXNsaWRlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgc2xpZGVyLmtleVN0ZXBzPy50cmFuc2Zvcm1lcigpICYmXG4gICAgICAgICAgICBOdW1iZXIuaXNGaW5pdGUoc2xpZGVyLmtleVN0ZXBzPy50b3RhbFN0ZXBzKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRPRE8odjUpOiBtb3ZlIGFsbCBpZi1jb25kaXRpb24gYm9keSBpbnNpZGUgYFR1aVNsaWRlcktleVN0ZXBzQmFzZWBcbiAgICAgICAgICAgIHNsaWRlci5taW4gPSAwO1xuICAgICAgICAgICAgc2xpZGVyLnN0ZXAgPSAxO1xuICAgICAgICAgICAgc2xpZGVyLm1heCA9IHNsaWRlci5rZXlTdGVwcz8udG90YWxTdGVwcyA/PyAxMDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbGlkZXIubWluID0gdGhpcy5pbnB1dE51bWJlci5taW4oKTtcbiAgICAgICAgICAgIHNsaWRlci5tYXggPSB0aGlzLmlucHV0TnVtYmVyLm1heCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2xpZGVyLnZhbHVlID0gdGhpcy5rZXlTdGVwc1RyYW5zZm9ybWVyKCkuZnJvbUNvbnRyb2xWYWx1ZSh0aGlzLnZhbHVlKCkpO1xuICAgICAgICBzbGlkZXIuZWwuZGlzYWJsZWQgPSAhdGhpcy5pbnB1dE51bWJlci5pbnRlcmFjdGl2ZSgpO1xuICAgIH0sIFRVSV9BTExPV19TSUdOQUxfV1JJVEVTKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBzbGlkZXJJbml0RWZmZWN0ID0gZWZmZWN0KChvbkNsZWFudXApID0+IHtcbiAgICAgICAgY29uc3Qgc2xpZGVyID0gdGhpcy5zbGlkZXIoKTtcblxuICAgICAgICBpZiAoIXNsaWRlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2xpZGVyLmVsLnN0eWxlLnNldFByb3BlcnR5KCctLXR1aS1zbGlkZXItdHJhY2stY29sb3InLCAndHJhbnNwYXJlbnQnKTtcblxuICAgICAgICBpZiAoc2xpZGVyLmtleVN0ZXBzKSB7XG4gICAgICAgICAgICBzbGlkZXIua2V5U3RlcHMudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHNsaWRlci5lbCwgJ2lucHV0JywgKHgpID0+IHgudGFyZ2V0KVxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKHR1aUlzRWxlbWVudCksIGZpbHRlcih0dWlJc0lucHV0KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHRoaXMub25TbGlkZXJJbnB1dCh4LnZhbHVlQXNOdW1iZXIpKTtcblxuICAgICAgICBvbkNsZWFudXAoKCkgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgIH0pO1xuXG4gICAgcHJvdGVjdGVkIG9uU3RlcChjb2VmZmljaWVudDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNsaWRlciA9IHRoaXMuc2xpZGVyKCk7XG5cbiAgICAgICAgaWYgKHNsaWRlciAmJiB0aGlzLmlucHV0TnVtYmVyLmludGVyYWN0aXZlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdHVpQ2xhbXAoXG4gICAgICAgICAgICAgICAgc2xpZGVyLmtleVN0ZXBzPy50YWtlU3RlcChjb2VmZmljaWVudCkgPz9cbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyLnZhbHVlICsgY29lZmZpY2llbnQgKiBzbGlkZXIuc3RlcCxcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0TnVtYmVyLm1pbigpLFxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXROdW1iZXIubWF4KCksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmlucHV0TnVtYmVyLnNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0TnVtYmVyLnNldFZhbHVlKHRoaXMudmFsdWUoKSA/PyBudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25TbGlkZXJJbnB1dCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXROdW1iZXIuc2V0VmFsdWUodGhpcy5rZXlTdGVwc1RyYW5zZm9ybWVyKCkudG9Db250cm9sVmFsdWUodmFsdWUpKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgLy8gVE9ETzogdHVpLXRleHRmaWVsZDpoYXMoW3R1aUlucHV0U2xpZGVyXSkgLnQtY2xlYXJcbiAgICAgICAgJ3R1aS10ZXh0ZmllbGQgW3R1aUlucHV0U2xpZGVyXSB+IC50LWNvbnRlbnQgLnQtY2xlYXIge2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudH0nLFxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndHVpLWlucHV0LXNsaWRlcicsXG4gICAgfSxcbn0pXG5jbGFzcyBUdWlJbnB1dFNsaWRlclN0eWxlcyB7fVxuIl19