@taiga-ui/kit
Version:
Taiga UI Angular main components kit
128 lines • 18.4 kB
JavaScript
import { Directive, inject, Input } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { tuiAsControl, TuiControl } from '@taiga-ui/cdk/classes';
import { TuiActiveZone } from '@taiga-ui/cdk/directives/active-zone';
import { TuiNativeValidator } from '@taiga-ui/cdk/directives/native-validator';
import { TUI_IS_MOBILE, tuiFallbackValueProvider } from '@taiga-ui/cdk/tokens';
import { tuiGetClipboardDataText, tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
import { tuiAsTextfieldAccessor, TuiTextfieldBase, TuiTextfieldMultiComponent, } from '@taiga-ui/core/components/textfield';
import { TuiDropdownDirective, tuiDropdownOpen } from '@taiga-ui/core/directives/dropdown';
import { TUI_ITEMS_HANDLERS } from '@taiga-ui/core/directives/items-handlers';
import { filter } from 'rxjs';
import { TUI_INPUT_CHIP_OPTIONS } from './input-chip.options';
import * as i0 from "@angular/core";
import * as i1 from "@taiga-ui/cdk/directives/native-validator";
import * as i2 from "@taiga-ui/core/components/textfield";
class TuiInputChipDirective extends TuiControl {
constructor() {
super(...arguments);
this.handlers = inject(TUI_ITEMS_HANDLERS);
this.options = inject(TUI_INPUT_CHIP_OPTIONS);
this.mobile = inject(TUI_IS_MOBILE);
this.textfield = inject(TuiTextfieldMultiComponent);
this.open = tuiDropdownOpen();
this.dropdown = inject(TuiDropdownDirective);
this.sub = inject(TuiActiveZone)
.tuiActiveZoneChange.pipe(filter((active) => !active), takeUntilDestroyed())
.subscribe(() => {
this.onEnter();
this.textfield.value.set('');
});
this.separator = this.options.separator;
this.unique = this.options.unique;
this.el = tuiInjectElement();
}
setValue(value) {
this.textfield.value.set('');
this.onChange(this.unique ? Array.from(new Set(value.reverse())).reverse() : value);
}
onEnter() {
const value = this.textfield.value().trim();
const items = this.separator ? value.split(this.separator) : [value];
const valid = items.filter((item) => item && !this.handlers.disabledItemHandler()(item));
if (!value || !valid.length) {
return;
}
this.setValue([...this.value(), ...valid]);
this.scrollTo();
}
onInput() {
this.open.set(!!this.dropdown.content);
if (this.separator && this.textfield.value().match(this.separator)) {
this.onEnter();
}
else {
this.scrollTo();
}
}
onPaste(event) {
const value = 'dataTransfer' in event
? event.dataTransfer?.getData('text/plain') || ''
: tuiGetClipboardDataText(event);
this.textfield.value.set(value);
this.onEnter();
}
onBackspace(key) {
// (keydown.backspace) doesn't emit event on empty input in ios safari
if (key === 'Backspace' &&
!this.textfield.value() &&
this.interactive() &&
(this.mobile || !this.textfield.item)) {
this.onChange(this.value().slice(0, -1));
}
}
scrollTo() {
let sign = 1;
try {
sign = this.textfield.el.matches(':dir(rtl)') ? -1 : 1;
}
catch { }
// Allow change detection to run and add new tag to DOM
setTimeout(() => {
this.textfield.el.scrollTo({
left: sign * Number.MAX_SAFE_INTEGER,
top: Number.MAX_SAFE_INTEGER,
});
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputChipDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiInputChipDirective, isStandalone: true, selector: "input[tuiInputChip]", inputs: { separator: "separator", unique: "unique" }, host: { attributes: { "enterkeyhint": "enter" }, listeners: { "keydown.enter.prevent": "onEnter()", "keydown.zoneless": "onBackspace($event.key)", "input": "onInput()", "paste.prevent": "onPaste($event)", "drop.prevent": "onPaste($event)" }, properties: { "disabled": "disabled()" } }, providers: [
tuiAsControl(TuiInputChipDirective),
tuiFallbackValueProvider([]),
tuiAsTextfieldAccessor(TuiInputChipDirective),
], usesInheritance: true, hostDirectives: [{ directive: i1.TuiNativeValidator }, { directive: i2.TuiTextfieldBase, inputs: ["invalid", "invalid", "focused", "focused", "readOnly", "readOnly", "state", "state"] }], ngImport: i0 }); }
}
export { TuiInputChipDirective };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputChipDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: 'input[tuiInputChip]',
providers: [
tuiAsControl(TuiInputChipDirective),
tuiFallbackValueProvider([]),
tuiAsTextfieldAccessor(TuiInputChipDirective),
],
hostDirectives: [
TuiNativeValidator,
{
directive: TuiTextfieldBase,
inputs: ['invalid', 'focused', 'readOnly', 'state'],
},
],
host: {
enterkeyhint: 'enter',
'[disabled]': 'disabled()',
'(keydown.enter.prevent)': 'onEnter()',
'(keydown.zoneless)': 'onBackspace($event.key)',
'(input)': 'onInput()',
'(paste.prevent)': 'onPaste($event)',
'(drop.prevent)': 'onPaste($event)',
},
}]
}], propDecorators: { separator: [{
type: Input
}], unique: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2hpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXQvY29tcG9uZW50cy9pbnB1dC1jaGlwL2lucHV0LWNoaXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUMsYUFBYSxFQUFFLHdCQUF3QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0UsT0FBTyxFQUFDLHVCQUF1QixFQUFFLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFbEYsT0FBTyxFQUNILHNCQUFzQixFQUN0QixnQkFBZ0IsRUFDaEIsMEJBQTBCLEdBQzdCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFDLG9CQUFvQixFQUFFLGVBQWUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXpGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFNUIsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7Ozs7QUFFNUQsTUF5QmEscUJBQ1QsU0FBUSxVQUFlO0lBMUIzQjs7UUE2QnFCLGFBQVEsR0FBd0IsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0QsWUFBTyxHQUFHLE1BQU0sQ0FBQyxz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QUF3QixDQUFDLEVBQUUsQ0FBQztZQUM1QixzQkFBc0IsQ0FBQyxxQkFBcUIsQ0FBQztTQUNoRDs7U0FrQlEscUJBQXFCOzRGQUFyQixxQkFBcUI7a0JBekJqQyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUscUJBQXFCO29CQUMvQixTQUFTLEVBQUU7d0JBQ1AsWUFBWSx1QkFBdUI7d0JBQ25DLHdCQUF3QixDQUFDLEVBQUUsQ0FBQzt3QkFDNUIsc0JBQXNCLHVCQUF1QjtxQkFDaEQ7b0JBQ0QsY0FBYyxFQUFFO3dCQUNaLGtCQUFrQjt3QkFDbEI7NEJBQ0ksU0FBUyxFQUFFLGdCQUFnQjs0QkFDM0IsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDO3lCQUN0RDtxQkFDSjtvQkFDRCxJQUFJLEVBQUU7d0JBQ0YsWUFBWSxFQUFFLE9BQU87d0JBQ3JCLFlBQVksRUFBRSxZQUFZO3dCQUMxQix5QkFBeUIsRUFBRSxXQUFXO3dCQUN0QyxvQkFBb0IsRUFBRSx5QkFBeUI7d0JBQy9DLFNBQVMsRUFBRSxXQUFXO3dCQUN0QixpQkFBaUIsRUFBRSxpQkFBaUI7d0JBQ3BDLGdCQUFnQixFQUFFLGlCQUFpQjtxQkFDdEM7aUJBQ0o7OEJBdUJVLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxNQUFNO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHt0dWlBc0NvbnRyb2wsIFR1aUNvbnRyb2x9IGZyb20gJ0B0YWlnYS11aS9jZGsvY2xhc3Nlcyc7XG5pbXBvcnQge1R1aUFjdGl2ZVpvbmV9IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9hY3RpdmUtem9uZSc7XG5pbXBvcnQge1R1aU5hdGl2ZVZhbGlkYXRvcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL25hdGl2ZS12YWxpZGF0b3InO1xuaW1wb3J0IHtUVUlfSVNfTU9CSUxFLCB0dWlGYWxsYmFja1ZhbHVlUHJvdmlkZXJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvdG9rZW5zJztcbmltcG9ydCB7dHVpR2V0Q2xpcGJvYXJkRGF0YVRleHQsIHR1aUluamVjdEVsZW1lbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvZG9tJztcbmltcG9ydCB0eXBlIHtUdWlUZXh0ZmllbGRBY2Nlc3Nvcn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy90ZXh0ZmllbGQnO1xuaW1wb3J0IHtcbiAgICB0dWlBc1RleHRmaWVsZEFjY2Vzc29yLFxuICAgIFR1aVRleHRmaWVsZEJhc2UsXG4gICAgVHVpVGV4dGZpZWxkTXVsdGlDb21wb25lbnQsXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvdGV4dGZpZWxkJztcbmltcG9ydCB7VHVpRHJvcGRvd25EaXJlY3RpdmUsIHR1aURyb3Bkb3duT3Blbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9kcm9wZG93bic7XG5pbXBvcnQgdHlwZSB7VHVpSXRlbXNIYW5kbGVyc30gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9pdGVtcy1oYW5kbGVycyc7XG5pbXBvcnQge1RVSV9JVEVNU19IQU5ETEVSU30gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9pdGVtcy1oYW5kbGVycyc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7VFVJX0lOUFVUX0NISVBfT1BUSU9OU30gZnJvbSAnLi9pbnB1dC1jaGlwLm9wdGlvbnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnaW5wdXRbdHVpSW5wdXRDaGlwXScsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHR1aUFzQ29udHJvbChUdWlJbnB1dENoaXBEaXJlY3RpdmUpLFxuICAgICAgICB0dWlGYWxsYmFja1ZhbHVlUHJvdmlkZXIoW10pLFxuICAgICAgICB0dWlBc1RleHRmaWVsZEFjY2Vzc29yKFR1aUlucHV0Q2hpcERpcmVjdGl2ZSksXG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICBUdWlOYXRpdmVWYWxpZGF0b3IsXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogVHVpVGV4dGZpZWxkQmFzZSxcbiAgICAgICAgICAgIGlucHV0czogWydpbnZhbGlkJywgJ2ZvY3VzZWQnLCAncmVhZE9ubHknLCAnc3RhdGUnXSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgZW50ZXJrZXloaW50OiAnZW50ZXInLFxuICAgICAgICAnW2Rpc2FibGVkXSc6ICdkaXNhYmxlZCgpJyxcbiAgICAgICAgJyhrZXlkb3duLmVudGVyLnByZXZlbnQpJzogJ29uRW50ZXIoKScsXG4gICAgICAgICcoa2V5ZG93bi56b25lbGVzcyknOiAnb25CYWNrc3BhY2UoJGV2ZW50LmtleSknLFxuICAgICAgICAnKGlucHV0KSc6ICdvbklucHV0KCknLFxuICAgICAgICAnKHBhc3RlLnByZXZlbnQpJzogJ29uUGFzdGUoJGV2ZW50KScsXG4gICAgICAgICcoZHJvcC5wcmV2ZW50KSc6ICdvblBhc3RlKCRldmVudCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUlucHV0Q2hpcERpcmVjdGl2ZTxUPlxuICAgIGV4dGVuZHMgVHVpQ29udHJvbDxUW10+XG4gICAgaW1wbGVtZW50cyBUdWlUZXh0ZmllbGRBY2Nlc3NvcjxUW10+XG57XG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVyczogVHVpSXRlbXNIYW5kbGVyczxUPiA9IGluamVjdChUVUlfSVRFTVNfSEFORExFUlMpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9ucyA9IGluamVjdChUVUlfSU5QVVRfQ0hJUF9PUFRJT05TKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1vYmlsZSA9IGluamVjdChUVUlfSVNfTU9CSUxFKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRleHRmaWVsZCA9IGluamVjdChUdWlUZXh0ZmllbGRNdWx0aUNvbXBvbmVudCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBvcGVuID0gdHVpRHJvcGRvd25PcGVuKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkcm9wZG93biA9IGluamVjdChUdWlEcm9wZG93bkRpcmVjdGl2ZSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3ViID0gaW5qZWN0KFR1aUFjdGl2ZVpvbmUpXG4gICAgICAgIC50dWlBY3RpdmVab25lQ2hhbmdlLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGFjdGl2ZSkgPT4gIWFjdGl2ZSksXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25FbnRlcigpO1xuICAgICAgICAgICAgdGhpcy50ZXh0ZmllbGQudmFsdWUuc2V0KCcnKTtcbiAgICAgICAgfSk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXBhcmF0b3IgPSB0aGlzLm9wdGlvbnMuc2VwYXJhdG9yO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdW5pcXVlID0gdGhpcy5vcHRpb25zLnVuaXF1ZTtcblxuICAgIHB1YmxpYyByZWFkb25seSBlbCA9IHR1aUluamVjdEVsZW1lbnQ8SFRNTElucHV0RWxlbWVudD4oKTtcblxuICAgIHB1YmxpYyBzZXRWYWx1ZSh2YWx1ZTogVFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGV4dGZpZWxkLnZhbHVlLnNldCgnJyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoXG4gICAgICAgICAgICB0aGlzLnVuaXF1ZSA/IEFycmF5LmZyb20obmV3IFNldCh2YWx1ZS5yZXZlcnNlKCkpKS5yZXZlcnNlKCkgOiB2YWx1ZSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25FbnRlcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnRleHRmaWVsZC52YWx1ZSgpLnRyaW0oKTtcbiAgICAgICAgY29uc3QgaXRlbXM6IGFueVtdID0gdGhpcy5zZXBhcmF0b3IgPyB2YWx1ZS5zcGxpdCh0aGlzLnNlcGFyYXRvcikgOiBbdmFsdWVdO1xuICAgICAgICBjb25zdCB2YWxpZCA9IGl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAgIChpdGVtKSA9PiBpdGVtICYmICF0aGlzLmhhbmRsZXJzLmRpc2FibGVkSXRlbUhhbmRsZXIoKShpdGVtKSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWxpZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoWy4uLnRoaXMudmFsdWUoKSwgLi4udmFsaWRdKTtcbiAgICAgICAgdGhpcy5zY3JvbGxUbygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbklucHV0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9wZW4uc2V0KCEhdGhpcy5kcm9wZG93bi5jb250ZW50KTtcblxuICAgICAgICBpZiAodGhpcy5zZXBhcmF0b3IgJiYgdGhpcy50ZXh0ZmllbGQudmFsdWUoKS5tYXRjaCh0aGlzLnNlcGFyYXRvcikpIHtcbiAgICAgICAgICAgIHRoaXMub25FbnRlcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUbygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50IHwgRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgICdkYXRhVHJhbnNmZXInIGluIGV2ZW50XG4gICAgICAgICAgICAgICAgPyBldmVudC5kYXRhVHJhbnNmZXI/LmdldERhdGEoJ3RleHQvcGxhaW4nKSB8fCAnJ1xuICAgICAgICAgICAgICAgIDogdHVpR2V0Q2xpcGJvYXJkRGF0YVRleHQoZXZlbnQpO1xuXG4gICAgICAgIHRoaXMudGV4dGZpZWxkLnZhbHVlLnNldCh2YWx1ZSk7XG4gICAgICAgIHRoaXMub25FbnRlcigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkJhY2tzcGFjZShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyAoa2V5ZG93bi5iYWNrc3BhY2UpIGRvZXNuJ3QgZW1pdCBldmVudCBvbiBlbXB0eSBpbnB1dCBpbiBpb3Mgc2FmYXJpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGtleSA9PT0gJ0JhY2tzcGFjZScgJiZcbiAgICAgICAgICAgICF0aGlzLnRleHRmaWVsZC52YWx1ZSgpICYmXG4gICAgICAgICAgICB0aGlzLmludGVyYWN0aXZlKCkgJiZcbiAgICAgICAgICAgICh0aGlzLm1vYmlsZSB8fCAhdGhpcy50ZXh0ZmllbGQuaXRlbSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUoKS5zbGljZSgwLCAtMSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNjcm9sbFRvKCk6IHZvaWQge1xuICAgICAgICBsZXQgc2lnbiA9IDE7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNpZ24gPSB0aGlzLnRleHRmaWVsZC5lbC5tYXRjaGVzKCc6ZGlyKHJ0bCknKSA/IC0xIDogMTtcbiAgICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICAgIC8vIEFsbG93IGNoYW5nZSBkZXRlY3Rpb24gdG8gcnVuIGFuZCBhZGQgbmV3IHRhZyB0byBET01cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRleHRmaWVsZC5lbC5zY3JvbGxUbyh7XG4gICAgICAgICAgICAgICAgbGVmdDogc2lnbiAqIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgICAgICAgICAgIHRvcDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19