UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

89 lines 21.8 kB
import { NgIf } from '@angular/common'; import { ChangeDetectionStrategy, Component, computed, inject, Input, signal, ViewEncapsulation, } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { MaskitoDirective } from '@maskito/angular'; import { maskitoAddOnFocusPlugin, maskitoPrefixPostprocessorGenerator, maskitoRemoveOnBlurPlugin, } from '@maskito/kit'; import { tuiAsControl, TuiControl } from '@taiga-ui/cdk/classes'; import { tuiFallbackValueProvider } from '@taiga-ui/cdk/tokens'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { tuiDirectiveBinding } from '@taiga-ui/cdk/utils/miscellaneous'; import { TuiTextfieldContent, TuiWithTextfield } from '@taiga-ui/core/components/textfield'; import { TuiIcons } from '@taiga-ui/core/directives/icons'; import { TuiSlider, tuiSliderOptionsProvider } from '@taiga-ui/kit/components/slider'; import { tuiMaskito } from '@taiga-ui/kit/utils'; import { TUI_INPUT_COLOR_OPTIONS } from './input-color.options'; import * as i0 from "@angular/core"; import * as i1 from "@maskito/angular"; import * as i2 from "@taiga-ui/core/components/textfield"; import * as i3 from "@angular/forms"; import * as i4 from "@taiga-ui/kit/components/slider"; const REGEX = /[0-9a-fA-F]/; class TuiInputColor extends TuiControl { constructor() { super(...arguments); this.options = inject(TUI_INPUT_COLOR_OPTIONS); this.el = tuiInjectElement(); this.list = this.el.getAttribute('list'); this.format = signal(this.options.format); this.align = signal(this.options.align); this.icon = tuiDirectiveBinding(TuiIcons, 'iconStart', computed(() => this.align() === 'left' ? '"data:image/svg+xml;utf8,<svg xmlns=http://www.w3.org/2000/svg></svg>"' : ''), {}); this.maskito = tuiMaskito(computed((length = this.format().length * 2) => ({ mask: ['#', ...Array.from({ length }).fill(REGEX)], postprocessors: [maskitoPrefixPostprocessorGenerator('#')], plugins: [maskitoAddOnFocusPlugin('#'), maskitoRemoveOnBlurPlugin('#')], overwriteMode: 'replace', }))); this.filled = computed(() => this.format() === 'hex' ? this.value().length === 7 : this.value().length === 9); this.opacity = computed(() => this.filled() && this.format() === 'hexa' ? Number.parseInt(this.value().slice(-2), 16) : 255); } set alignSetter(align) { this.align.set(align); } set formatSetter(mode) { this.format.set(mode); } onInput(value) { this.onChange(this.format() === 'hex' ? value : `${value}${toHex(this.opacity())}`); } onOpacity(opacity) { const value = this.filled() ? this.value().slice(0, 7) : '#000000'; this.onChange(`${value}${toHex(opacity)}`); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputColor, deps: null, target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiInputColor, isStandalone: true, selector: "input[tuiInputColor]", inputs: { alignSetter: ["align", "alignSetter"], formatSetter: ["format", "formatSetter"] }, host: { attributes: { "ngSkipHydration": "true", "inputmode": "numeric", "spellcheck": "false" }, listeners: { "input": "onChange($event.target.value)" }, properties: { "disabled": "disabled()", "value": "value()", "attr.list": "null" } }, providers: [ tuiAsControl(TuiInputColor), tuiFallbackValueProvider(''), tuiSliderOptionsProvider({ trackColor: 'transparent' }), ], usesInheritance: true, hostDirectives: [{ directive: i1.MaskitoDirective }, { directive: i2.TuiWithTextfield }], ngImport: i0, template: "<ng-container *tuiTextfieldContent>\n <input\n #input\n tabindex=\"-1\"\n type=\"color\"\n class=\"tui-input-color_picker\"\n [attr.list]=\"list\"\n [class.tui-input-color_left]=\"align() === 'left'\"\n [disabled]=\"!interactive()\"\n [style.--t-opacity]=\"filled() ? opacity() / 255 : 0\"\n [value]=\"value().length > 6 ? value().slice(0, 7) : ''\"\n (input)=\"onInput(input.value)\"\n />\n <input\n *ngIf=\"format() === 'hexa' && interactive()\"\n max=\"255\"\n tuiSlider\n type=\"range\"\n [ngModel]=\"opacity()\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"onOpacity($event)\"\n (pointerdown.stop)=\"el.focus()\"\n />\n</ng-container>\n", styles: [".tui-input-color_picker.tui-input-color_picker{position:relative;font-size:1rem;inline-size:calc(var(--t-height) / 2);block-size:calc(var(--t-height) / 2);border:none;border-radius:100%;padding:0!important;overflow:hidden;cursor:pointer;background:repeating-conic-gradient(var(--tui-border-normal) 0% 25%,transparent 0% 50%);box-shadow:0 0 0 1px var(--tui-border-normal)}.tui-input-color_picker.tui-input-color_picker:disabled{cursor:default}tui-textfield[data-size=s] .tui-input-color_picker{margin-inline-end:.25rem}tui-textfield[data-size=l] .tui-input-color_picker{margin-inline-end:-.25rem}.tui-input-color_picker.tui-input-color_left{position:absolute;top:50%;left:calc(var(--t-height) / 4);inset-inline-start:calc(var(--t-height) / 4);transform:translateY(-50%)}.tui-input-color_picker::-webkit-color-swatch-wrapper{padding:0}.tui-input-color_picker::-webkit-color-swatch{border:none;opacity:var(--t-opacity)}.tui-input-color_picker::-moz-color-swatch{border:none;opacity:var(--t-opacity)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.TuiSliderComponent, selector: "input[type=range][tuiSlider]", inputs: ["size", "segments"] }, { kind: "directive", type: TuiTextfieldContent, selector: "ng-template[tuiTextfieldContent]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } } export { TuiInputColor }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputColor, decorators: [{ type: Component, args: [{ standalone: true, selector: 'input[tuiInputColor]', imports: [FormsModule, NgIf, TuiSlider, TuiTextfieldContent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [ tuiAsControl(TuiInputColor), tuiFallbackValueProvider(''), tuiSliderOptionsProvider({ trackColor: 'transparent' }), ], hostDirectives: [MaskitoDirective, TuiWithTextfield], host: { ngSkipHydration: 'true', inputmode: 'numeric', spellcheck: 'false', '[disabled]': 'disabled()', '[value]': 'value()', '[attr.list]': 'null', '(input)': 'onChange($event.target.value)', }, template: "<ng-container *tuiTextfieldContent>\n <input\n #input\n tabindex=\"-1\"\n type=\"color\"\n class=\"tui-input-color_picker\"\n [attr.list]=\"list\"\n [class.tui-input-color_left]=\"align() === 'left'\"\n [disabled]=\"!interactive()\"\n [style.--t-opacity]=\"filled() ? opacity() / 255 : 0\"\n [value]=\"value().length > 6 ? value().slice(0, 7) : ''\"\n (input)=\"onInput(input.value)\"\n />\n <input\n *ngIf=\"format() === 'hexa' && interactive()\"\n max=\"255\"\n tuiSlider\n type=\"range\"\n [ngModel]=\"opacity()\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"onOpacity($event)\"\n (pointerdown.stop)=\"el.focus()\"\n />\n</ng-container>\n", styles: [".tui-input-color_picker.tui-input-color_picker{position:relative;font-size:1rem;inline-size:calc(var(--t-height) / 2);block-size:calc(var(--t-height) / 2);border:none;border-radius:100%;padding:0!important;overflow:hidden;cursor:pointer;background:repeating-conic-gradient(var(--tui-border-normal) 0% 25%,transparent 0% 50%);box-shadow:0 0 0 1px var(--tui-border-normal)}.tui-input-color_picker.tui-input-color_picker:disabled{cursor:default}tui-textfield[data-size=s] .tui-input-color_picker{margin-inline-end:.25rem}tui-textfield[data-size=l] .tui-input-color_picker{margin-inline-end:-.25rem}.tui-input-color_picker.tui-input-color_left{position:absolute;top:50%;left:calc(var(--t-height) / 4);inset-inline-start:calc(var(--t-height) / 4);transform:translateY(-50%)}.tui-input-color_picker::-webkit-color-swatch-wrapper{padding:0}.tui-input-color_picker::-webkit-color-swatch{border:none;opacity:var(--t-opacity)}.tui-input-color_picker::-moz-color-swatch{border:none;opacity:var(--t-opacity)}\n"] }] }], propDecorators: { alignSetter: [{ type: Input, args: ['align'] }], formatSetter: [{ type: Input, args: ['format'] }] } }); function toHex(value) { return value.toString(16).padStart(2, '0'); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY29sb3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvaW5wdXQtY29sb3IvaW5wdXQtY29sb3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvaW5wdXQtY29sb3IvaW5wdXQtY29sb3IudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUNILHVCQUF1QixFQUN2QixtQ0FBbUMsRUFDbkMseUJBQXlCLEdBQzVCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGdCQUFnQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDMUYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRXpELE9BQU8sRUFBQyxTQUFTLEVBQUUsd0JBQXdCLEVBQUMsTUFBTSxpQ0FBaUMs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ckIsS0FBSzt1QkFBQyxPQUFPO2dCQU1ILFlBQVk7c0JBRHRCLEtBQUs7dUJBQUMsUUFBUTs7QUFrQm5CLFNBQVMsS0FBSyxDQUFDLEtBQWE7SUFDeEIsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBzaWduYWwsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtNYXNraXRvRGlyZWN0aXZlfSBmcm9tICdAbWFza2l0by9hbmd1bGFyJztcbmltcG9ydCB7XG4gICAgbWFza2l0b0FkZE9uRm9jdXNQbHVnaW4sXG4gICAgbWFza2l0b1ByZWZpeFBvc3Rwcm9jZXNzb3JHZW5lcmF0b3IsXG4gICAgbWFza2l0b1JlbW92ZU9uQmx1clBsdWdpbixcbn0gZnJvbSAnQG1hc2tpdG8va2l0JztcbmltcG9ydCB7dHVpQXNDb250cm9sLCBUdWlDb250cm9sfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NsYXNzZXMnO1xuaW1wb3J0IHt0dWlGYWxsYmFja1ZhbHVlUHJvdmlkZXJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvdG9rZW5zJztcbmltcG9ydCB7dHVpSW5qZWN0RWxlbWVudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHt0dWlEaXJlY3RpdmVCaW5kaW5nfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL21pc2NlbGxhbmVvdXMnO1xuaW1wb3J0IHtUdWlUZXh0ZmllbGRDb250ZW50LCBUdWlXaXRoVGV4dGZpZWxkfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL3RleHRmaWVsZCc7XG5pbXBvcnQge1R1aUljb25zfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2ljb25zJztcbmltcG9ydCB7dHlwZSBUdWlIb3Jpem9udGFsRGlyZWN0aW9ufSBmcm9tICdAdGFpZ2EtdWkvY29yZS90eXBlcyc7XG5pbXBvcnQge1R1aVNsaWRlciwgdHVpU2xpZGVyT3B0aW9uc1Byb3ZpZGVyfSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvc2xpZGVyJztcbmltcG9ydCB7dHVpTWFza2l0b30gZnJvbSAnQHRhaWdhLXVpL2tpdC91dGlscyc7XG5cbmltcG9ydCB7VFVJX0lOUFVUX0NPTE9SX09QVElPTlMsIHR5cGUgVHVpSW5wdXRDb2xvck9wdGlvbnN9IGZyb20gJy4vaW5wdXQtY29sb3Iub3B0aW9ucyc7XG5cbmNvbnN0IFJFR0VYID0gL1swLTlhLWZBLUZdLztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2lucHV0W3R1aUlucHV0Q29sb3JdJyxcbiAgICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIE5nSWYsIFR1aVNsaWRlciwgVHVpVGV4dGZpZWxkQ29udGVudF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWNvbG9yLnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2lucHV0LWNvbG9yLnN0eWxlLmxlc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB0dWlBc0NvbnRyb2woVHVpSW5wdXRDb2xvciksXG4gICAgICAgIHR1aUZhbGxiYWNrVmFsdWVQcm92aWRlcignJyksXG4gICAgICAgIHR1aVNsaWRlck9wdGlvbnNQcm92aWRlcih7dHJhY2tDb2xvcjogJ3RyYW5zcGFyZW50J30pLFxuICAgIF0sXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtNYXNraXRvRGlyZWN0aXZlLCBUdWlXaXRoVGV4dGZpZWxkXSxcbiAgICBob3N0OiB7XG4gICAgICAgIG5nU2tpcEh5ZHJhdGlvbjogJ3RydWUnLFxuICAgICAgICBpbnB1dG1vZGU6ICdudW1lcmljJyxcbiAgICAgICAgc3BlbGxjaGVjazogJ2ZhbHNlJyxcbiAgICAgICAgJ1tkaXNhYmxlZF0nOiAnZGlzYWJsZWQoKScsXG4gICAgICAgICdbdmFsdWVdJzogJ3ZhbHVlKCknLFxuICAgICAgICAnW2F0dHIubGlzdF0nOiAnbnVsbCcsXG4gICAgICAgICcoaW5wdXQpJzogJ29uQ2hhbmdlKCRldmVudC50YXJnZXQudmFsdWUpJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBUdWlJbnB1dENvbG9yIGV4dGVuZHMgVHVpQ29udHJvbDxzdHJpbmc+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3B0aW9ucyA9IGluamVjdChUVUlfSU5QVVRfQ09MT1JfT1BUSU9OUyk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVsID0gdHVpSW5qZWN0RWxlbWVudDxIVE1MSW5wdXRFbGVtZW50PigpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBsaXN0ID0gdGhpcy5lbC5nZXRBdHRyaWJ1dGUoJ2xpc3QnKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZm9ybWF0ID0gc2lnbmFsKHRoaXMub3B0aW9ucy5mb3JtYXQpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBhbGlnbiA9IHNpZ25hbDxUdWlIb3Jpem9udGFsRGlyZWN0aW9uPih0aGlzLm9wdGlvbnMuYWxpZ24pO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGljb24gPSB0dWlEaXJlY3RpdmVCaW5kaW5nKFxuICAgICAgICBUdWlJY29ucyxcbiAgICAgICAgJ2ljb25TdGFydCcsXG4gICAgICAgIGNvbXB1dGVkKCgpID0+XG4gICAgICAgICAgICB0aGlzLmFsaWduKCkgPT09ICdsZWZ0J1xuICAgICAgICAgICAgICAgID8gJ1wiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz1odHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zz48L3N2Zz5cIidcbiAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICApLFxuICAgICAgICB7fSxcbiAgICApO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG1hc2tpdG8gPSB0dWlNYXNraXRvKFxuICAgICAgICBjb21wdXRlZCgobGVuZ3RoID0gdGhpcy5mb3JtYXQoKS5sZW5ndGggKiAyKSA9PiAoe1xuICAgICAgICAgICAgbWFzazogWycjJywgLi4uQXJyYXkuZnJvbTxSZWdFeHA+KHtsZW5ndGh9KS5maWxsKFJFR0VYKV0sXG4gICAgICAgICAgICBwb3N0cHJvY2Vzc29yczogW21hc2tpdG9QcmVmaXhQb3N0cHJvY2Vzc29yR2VuZXJhdG9yKCcjJyldLFxuICAgICAgICAgICAgcGx1Z2luczogW21hc2tpdG9BZGRPbkZvY3VzUGx1Z2luKCcjJyksIG1hc2tpdG9SZW1vdmVPbkJsdXJQbHVnaW4oJyMnKV0sXG4gICAgICAgICAgICBvdmVyd3JpdGVNb2RlOiAncmVwbGFjZScsXG4gICAgICAgIH0pKSxcbiAgICApO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbGxlZCA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMuZm9ybWF0KCkgPT09ICdoZXgnID8gdGhpcy52YWx1ZSgpLmxlbmd0aCA9PT0gNyA6IHRoaXMudmFsdWUoKS5sZW5ndGggPT09IDksXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBvcGFjaXR5ID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5maWxsZWQoKSAmJiB0aGlzLmZvcm1hdCgpID09PSAnaGV4YSdcbiAgICAgICAgICAgID8gTnVtYmVyLnBhcnNlSW50KHRoaXMudmFsdWUoKS5zbGljZSgtMiksIDE2KVxuICAgICAgICAgICAgOiAyNTUsXG4gICAgKTtcblxuICAgIEBJbnB1dCgnYWxpZ24nKVxuICAgIHB1YmxpYyBzZXQgYWxpZ25TZXR0ZXIoYWxpZ246IFR1aUlucHV0Q29sb3JPcHRpb25zWydhbGlnbiddKSB7XG4gICAgICAgIHRoaXMuYWxpZ24uc2V0KGFsaWduKTtcbiAgICB9XG5cbiAgICBASW5wdXQoJ2Zvcm1hdCcpXG4gICAgcHVibGljIHNldCBmb3JtYXRTZXR0ZXIobW9kZTogVHVpSW5wdXRDb2xvck9wdGlvbnNbJ2Zvcm1hdCddKSB7XG4gICAgICAgIHRoaXMuZm9ybWF0LnNldChtb2RlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25JbnB1dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoXG4gICAgICAgICAgICB0aGlzLmZvcm1hdCgpID09PSAnaGV4JyA/IHZhbHVlIDogYCR7dmFsdWV9JHt0b0hleCh0aGlzLm9wYWNpdHkoKSl9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25PcGFjaXR5KG9wYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZmlsbGVkKCkgPyB0aGlzLnZhbHVlKCkuc2xpY2UoMCwgNykgOiAnIzAwMDAwMCc7XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZShgJHt2YWx1ZX0ke3RvSGV4KG9wYWNpdHkpfWApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9IZXgodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpO1xufVxuIiwiPG5nLWNvbnRhaW5lciAqdHVpVGV4dGZpZWxkQ29udGVudD5cbiAgICA8aW5wdXRcbiAgICAgICAgI2lucHV0XG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICBjbGFzcz1cInR1aS1pbnB1dC1jb2xvcl9waWNrZXJcIlxuICAgICAgICBbYXR0ci5saXN0XT1cImxpc3RcIlxuICAgICAgICBbY2xhc3MudHVpLWlucHV0LWNvbG9yX2xlZnRdPVwiYWxpZ24oKSA9PT0gJ2xlZnQnXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFpbnRlcmFjdGl2ZSgpXCJcbiAgICAgICAgW3N0eWxlLi0tdC1vcGFjaXR5XT1cImZpbGxlZCgpID8gb3BhY2l0eSgpIC8gMjU1IDogMFwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZSgpLmxlbmd0aCA+IDYgPyB2YWx1ZSgpLnNsaWNlKDAsIDcpIDogJydcIlxuICAgICAgICAoaW5wdXQpPVwib25JbnB1dChpbnB1dC52YWx1ZSlcIlxuICAgIC8+XG4gICAgPGlucHV0XG4gICAgICAgICpuZ0lmPVwiZm9ybWF0KCkgPT09ICdoZXhhJyAmJiBpbnRlcmFjdGl2ZSgpXCJcbiAgICAgICAgbWF4PVwiMjU1XCJcbiAgICAgICAgdHVpU2xpZGVyXG4gICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgIFtuZ01vZGVsXT1cIm9wYWNpdHkoKVwiXG4gICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbk9wYWNpdHkoJGV2ZW50KVwiXG4gICAgICAgIChwb2ludGVyZG93bi5zdG9wKT1cImVsLmZvY3VzKClcIlxuICAgIC8+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==