@covalent/core
Version:
Core Teradata UI Platform for layouts, icons, custom components and themes. This should be added as a dependency for any project that wants to use layouts, icons and themes for Angular Material.
206 lines • 24.3 kB
JavaScript
/* tslint:disable */
import { Directive, Input, Optional, ElementRef, HostBinding, HostListener, } from '@angular/core';
import { CovalentSideSheet } from './side-sheet';
import { _closeSideSheetVia, CovalentSideSheetRef } from './side-sheet-ref';
import * as i0 from "@angular/core";
import * as i1 from "./side-sheet-ref";
import * as i2 from "./side-sheet";
/** Counter used to generate unique IDs for dialog elements. */
let dialogElementUid = 0;
/**
* Button that will close the current dialog.
*/
export class CovalentSideSheetCloseDirective {
dialogRef;
_elementRef;
_dialog;
/** Screenreader label for the button. */
ariaLabel;
/** Default to "button" to prevents accidental form submits. */
type = 'button';
/** Dialog close input. */
dialogResult;
_CovalentSideSheetClose;
onClick($event) {
this._onButtonClick($event);
}
constructor(dialogRef, _elementRef, _dialog) {
this.dialogRef = dialogRef;
this._elementRef = _elementRef;
this._dialog = _dialog;
}
ngOnInit() {
if (!this.dialogRef) {
// When this directive is included in a dialog via TemplateRef (rather than being
// in a Component), the DialogRef isn't available via injection because embedded
// views cannot be given a custom injector. Instead, we look up the DialogRef by
// ID. This must occur in `onInit`, as the ID binding for the dialog container won't
// be resolved at constructor time.
this.dialogRef = getClosestDialog(this._elementRef, this._dialog.openSideSheets);
}
}
ngOnChanges(changes) {
const proxiedChange = changes['_CovalentSideSheetClose'] ||
changes['_CovalentSideSheetCloseResult'];
if (proxiedChange) {
this.dialogResult = proxiedChange.currentValue;
}
}
_onButtonClick(event) {
// Determinate the focus origin using the click event, because using the FocusMonitor will
// result in incorrect origins. Most of the time, close buttons will be auto focused in the
// dialog, and therefore clicking the button won't result in a focus change. This means that
// the FocusMonitor won't detect any origin change, and will always output `program`.
_closeSideSheetVia(this.dialogRef, event.screenX === 0 && event.screenY === 0 ? 'keyboard' : 'mouse', this.dialogResult);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CovalentSideSheetCloseDirective, deps: [{ token: i1.CovalentSideSheetRef, optional: true }, { token: i0.ElementRef }, { token: i2.CovalentSideSheet }], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: CovalentSideSheetCloseDirective, selector: "[td-side-sheet-close], [CovalentSideSheetClose]", inputs: { ariaLabel: ["aria-label", "ariaLabel"], type: "type", dialogResult: ["td-side-sheet-close", "dialogResult"], _CovalentSideSheetClose: ["CovalentSideSheetClose", "_CovalentSideSheetClose"] }, host: { listeners: { "click": "onClick($event)" }, properties: { "attr.arial-label": "this.ariaLabel", "attr.type": "this.type" } }, exportAs: ["CovalentSideSheetClose"], usesOnChanges: true, ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CovalentSideSheetCloseDirective, decorators: [{
type: Directive,
args: [{
selector: '[td-side-sheet-close], [CovalentSideSheetClose]',
exportAs: 'CovalentSideSheetClose',
}]
}], ctorParameters: () => [{ type: i1.CovalentSideSheetRef, decorators: [{
type: Optional
}] }, { type: i0.ElementRef }, { type: i2.CovalentSideSheet }], propDecorators: { ariaLabel: [{
type: HostBinding,
args: ['attr.arial-label']
}, {
type: Input,
args: ['aria-label']
}], type: [{
type: HostBinding,
args: ['attr.type']
}, {
type: Input
}], dialogResult: [{
type: Input,
args: ['td-side-sheet-close']
}], _CovalentSideSheetClose: [{
type: Input,
args: ['CovalentSideSheetClose']
}], onClick: [{
type: HostListener,
args: ['click', ['$event']]
}] } });
/**
* Title of a side sheet element. Stays fixed to the top of the side sheet when scrolling.
*/
export class CovalentSideSheetTitleDirective {
_dialogRef;
_elementRef;
_dialog;
/** Unique id for the dialog title. If none is supplied, it will be auto-generated. */
id = `td-side-sheet-title-${dialogElementUid++}`;
tdSideSheetTitle = true;
idAttr = this.id;
constructor(
// The dialog title directive is always used in combination with a `CovalentSideSheetRef`.
// tslint:disable-next-line: lightweight-tokens
_dialogRef, _elementRef, _dialog) {
this._dialogRef = _dialogRef;
this._elementRef = _elementRef;
this._dialog = _dialog;
}
ngOnInit() {
if (this._dialogRef) {
Promise.resolve().then(() => {
const container = this._dialogRef._containerInstance;
if (container && !container._ariaLabelledByQueue.includes(this.id)) {
container._ariaLabelledByQueue.push(this.id);
}
});
}
else {
this._dialogRef = getClosestDialog(this._elementRef, this._dialog.openSideSheets);
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CovalentSideSheetTitleDirective, deps: [{ token: i1.CovalentSideSheetRef, optional: true }, { token: i0.ElementRef }, { token: i2.CovalentSideSheet }], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: CovalentSideSheetTitleDirective, selector: "[td-side-sheet-title], [CovalentSideSheetTitle]", inputs: { id: "id" }, host: { properties: { "class.td-side-sheet-title": "this.tdSideSheetTitle", "attr.id": "this.idAttr" } }, exportAs: ["CovalentSideSheetTitle"], ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CovalentSideSheetTitleDirective, decorators: [{
type: Directive,
args: [{
selector: '[td-side-sheet-title], [CovalentSideSheetTitle]',
exportAs: 'CovalentSideSheetTitle',
}]
}], ctorParameters: () => [{ type: i1.CovalentSideSheetRef, decorators: [{
type: Optional
}] }, { type: i0.ElementRef }, { type: i2.CovalentSideSheet }], propDecorators: { id: [{
type: Input
}], tdSideSheetTitle: [{
type: HostBinding,
args: ['class.td-side-sheet-title']
}], idAttr: [{
type: HostBinding,
args: ['attr.id']
}] } });
/**
* Scrollable content container of a dialog.
*/
export class CovalentSideSheetContentDirective {
tdSideSheetContent = true;
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CovalentSideSheetContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: CovalentSideSheetContentDirective, selector: "[td-side-sheet-content], td-side-sheet-content, [CovalentSideSheetContent]", host: { properties: { "class.td-side-sheet-content": "this.tdSideSheetContent" } }, ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CovalentSideSheetContentDirective, decorators: [{
type: Directive,
args: [{
selector: `[td-side-sheet-content], td-side-sheet-content, [CovalentSideSheetContent]`,
}]
}], propDecorators: { tdSideSheetContent: [{
type: HostBinding,
args: ['class.td-side-sheet-content']
}] } });
/**
* Container for the bottom action buttons in a dialog.
* Stays fixed to the bottom when scrolling.
*/
export class CovalentSideSheetActionsDirective {
tdSideSheetActions = true;
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CovalentSideSheetActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: CovalentSideSheetActionsDirective, selector: "[td-side-sheet-actions], td-side-sheet-actions, [CovalentSideSheetActions]", host: { properties: { "class.td-side-sheet-actions": "this.tdSideSheetActions" } }, ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CovalentSideSheetActionsDirective, decorators: [{
type: Directive,
args: [{
selector: `[td-side-sheet-actions], td-side-sheet-actions, [CovalentSideSheetActions]`,
}]
}], propDecorators: { tdSideSheetActions: [{
type: HostBinding,
args: ['class.td-side-sheet-actions']
}] } });
/**
* Container for the wrapper part of the dialog
*/
export class CovalentSideSheetWrapperDirective {
tdSideSheetWrapper = true;
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CovalentSideSheetWrapperDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: CovalentSideSheetWrapperDirective, selector: "[td-side-sheet-wrapper], td-side-sheet-wrapper, [CovalentSideSheetWrapper]", host: { properties: { "class.td-side-sheet-wrapper": "this.tdSideSheetWrapper" } }, ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CovalentSideSheetWrapperDirective, decorators: [{
type: Directive,
args: [{
selector: `[td-side-sheet-wrapper], td-side-sheet-wrapper, [CovalentSideSheetWrapper]`,
}]
}], propDecorators: { tdSideSheetWrapper: [{
type: HostBinding,
args: ['class.td-side-sheet-wrapper']
}] } });
/**
* Finds the closest CovalentSideSheetRef to an element by looking at the DOM.
* @param element Element relative to which to look for a dialog.
* @param openDialogs References to the currently-open dialogs.
*/
function getClosestDialog(element, openDialogs) {
let parent = element.nativeElement.parentElement;
while (parent && !parent.classList.contains('td-side-sheet-container')) {
parent = parent.parentElement;
}
return parent
? openDialogs.find((dialog) => dialog.id === parent?.id) ?? openDialogs[0]
: openDialogs[0];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1zaGVldC5jb250ZW50LWRpcmVjdGl2ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc2lkZS1zaGVldC9zcmMvc2lkZS1zaGVldC5jb250ZW50LWRpcmVjdGl2ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFFUixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFFNUUsK0RBQStEO0FBQy9ELElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBRXpCOztHQUVHO0FBS0gsTUFBTSxPQUFPLCtCQUErQjtJQXFCckI7SUFDWDtJQUNBO0lBdEJWLHlDQUF5QztJQUd6QyxTQUFTLENBQVU7SUFFbkIsK0RBQStEO0lBRy9ELElBQUksR0FBa0MsUUFBUSxDQUFDO0lBRS9DLDBCQUEwQjtJQUNJLFlBQVksQ0FBTTtJQUVmLHVCQUF1QixDQUFNO0lBRTNCLE9BQU8sQ0FBQyxNQUFrQjtRQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxZQUNxQixTQUFvQyxFQUMvQyxXQUFvQyxFQUNwQyxPQUEwQjtRQUZmLGNBQVMsR0FBVCxTQUFTLENBQTJCO1FBQy9DLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUFtQjtJQUNqQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsaUZBQWlGO1lBQ2pGLGdGQUFnRjtZQUNoRixnRkFBZ0Y7WUFD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UUFBUSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztRQUN2RSxNQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUNoQyxDQUFDO0lBRUQsT0FBTyxNQUFNO1FBQ1gsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogdHNsaW50OmRpc2FibGUgKi9cbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb3ZhbGVudFNpZGVTaGVldCB9IGZyb20gJy4vc2lkZS1zaGVldCc7XG5pbXBvcnQgeyBfY2xvc2VTaWRlU2hlZXRWaWEsIENvdmFsZW50U2lkZVNoZWV0UmVmIH0gZnJvbSAnLi9zaWRlLXNoZWV0LXJlZic7XG5cbi8qKiBDb3VudGVyIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcyBmb3IgZGlhbG9nIGVsZW1lbnRzLiAqL1xubGV0IGRpYWxvZ0VsZW1lbnRVaWQgPSAwO1xuXG4vKipcbiAqIEJ1dHRvbiB0aGF0IHdpbGwgY2xvc2UgdGhlIGN1cnJlbnQgZGlhbG9nLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGQtc2lkZS1zaGVldC1jbG9zZV0sIFtDb3ZhbGVudFNpZGVTaGVldENsb3NlXScsXG4gIGV4cG9ydEFzOiAnQ292YWxlbnRTaWRlU2hlZXRDbG9zZScsXG59KVxuZXhwb3J0IGNsYXNzIENvdmFsZW50U2lkZVNoZWV0Q2xvc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBTY3JlZW5yZWFkZXIgbGFiZWwgZm9yIHRoZSBidXR0b24uICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhbC1sYWJlbCcpXG4gIEBJbnB1dCgnYXJpYS1sYWJlbCcpXG4gIGFyaWFMYWJlbD86IHN0cmluZztcblxuICAvKiogRGVmYXVsdCB0byBcImJ1dHRvblwiIHRvIHByZXZlbnRzIGFjY2lkZW50YWwgZm9ybSBzdWJtaXRzLiAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIudHlwZScpXG4gIEBJbnB1dCgpXG4gIHR5cGU6ICdzdWJtaXQnIHwgJ2J1dHRvbicgfCAncmVzZXQnID0gJ2J1dHRvbic7XG5cbiAgLyoqIERpYWxvZyBjbG9zZSBpbnB1dC4gKi9cbiAgQElucHV0KCd0ZC1zaWRlLXNoZWV0LWNsb3NlJykgZGlhbG9nUmVzdWx0OiBhbnk7XG5cbiAgQElucHV0KCdDb3ZhbGVudFNpZGVTaGVldENsb3NlJykgX0NvdmFsZW50U2lkZVNoZWV0Q2xvc2U6IGFueTtcblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pIG9uQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5fb25CdXR0b25DbGljaygkZXZlbnQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIGRpYWxvZ1JlZjogQ292YWxlbnRTaWRlU2hlZXRSZWY8YW55PixcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIF9kaWFsb2c6IENvdmFsZW50U2lkZVNoZWV0XG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlhbG9nUmVmKSB7XG4gICAgICAvLyBXaGVuIHRoaXMgZGlyZWN0aXZlIGlzIGluY2x1ZGVkIGluIGEgZGlhbG9nIHZpYSBUZW1wbGF0ZVJlZiAocmF0aGVyIHRoYW4gYmVpbmdcbiAgICAgIC8vIGluIGEgQ29tcG9uZW50KSwgdGhlIERpYWxvZ1JlZiBpc24ndCBhdmFpbGFibGUgdmlhIGluamVjdGlvbiBiZWNhdXNlIGVtYmVkZGVkXG4gICAgICAvLyB2aWV3cyBjYW5ub3QgYmUgZ2l2ZW4gYSBjdXN0b20gaW5qZWN0b3IuIEluc3RlYWQsIHdlIGxvb2sgdXAgdGhlIERpYWxvZ1JlZiBieVxuICAgICAgLy8gSUQuIFRoaXMgbXVzdCBvY2N1ciBpbiBgb25Jbml0YCwgYXMgdGhlIElEIGJpbmRpbmcgZm9yIHRoZSBkaWFsb2cgY29udGFpbmVyIHdvbid0XG4gICAgICAvLyBiZSByZXNvbHZlZCBhdCBjb25zdHJ1Y3RvciB0aW1lLlxuICAgICAgdGhpcy5kaWFsb2dSZWYgPSBnZXRDbG9zZXN0RGlhbG9nKFxuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLFxuICAgICAgICB0aGlzLl9kaWFsb2cub3BlblNpZGVTaGVldHNcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IHByb3hpZWRDaGFuZ2UgPVxuICAgICAgY2hhbmdlc1snX0NvdmFsZW50U2lkZVNoZWV0Q2xvc2UnXSB8fFxuICAgICAgY2hhbmdlc1snX0NvdmFsZW50U2lkZVNoZWV0Q2xvc2VSZXN1bHQnXTtcblxuICAgIGlmIChwcm94aWVkQ2hhbmdlKSB7XG4gICAgICB0aGlzLmRpYWxvZ1Jlc3VsdCA9IHByb3hpZWRDaGFuZ2UuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIF9vbkJ1dHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgLy8gRGV0ZXJtaW5hdGUgdGhlIGZvY3VzIG9yaWdpbiB1c2luZyB0aGUgY2xpY2sgZXZlbnQsIGJlY2F1c2UgdXNpbmcgdGhlIEZvY3VzTW9uaXRvciB3aWxsXG4gICAgLy8gcmVzdWx0IGluIGluY29ycmVjdCBvcmlnaW5zLiBNb3N0IG9mIHRoZSB0aW1lLCBjbG9zZSBidXR0b25zIHdpbGwgYmUgYXV0byBmb2N1c2VkIGluIHRoZVxuICAgIC8vIGRpYWxvZywgYW5kIHRoZXJlZm9yZSBjbGlja2luZyB0aGUgYnV0dG9uIHdvbid0IHJlc3VsdCBpbiBhIGZvY3VzIGNoYW5nZS4gVGhpcyBtZWFucyB0aGF0XG4gICAgLy8gdGhlIEZvY3VzTW9uaXRvciB3b24ndCBkZXRlY3QgYW55IG9yaWdpbiBjaGFuZ2UsIGFuZCB3aWxsIGFsd2F5cyBvdXRwdXQgYHByb2dyYW1gLlxuICAgIF9jbG9zZVNpZGVTaGVldFZpYShcbiAgICAgIHRoaXMuZGlhbG9nUmVmLFxuICAgICAgZXZlbnQuc2NyZWVuWCA9PT0gMCAmJiBldmVudC5zY3JlZW5ZID09PSAwID8gJ2tleWJvYXJkJyA6ICdtb3VzZScsXG4gICAgICB0aGlzLmRpYWxvZ1Jlc3VsdFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaXRsZSBvZiBhIHNpZGUgc2hlZXQgZWxlbWVudC4gU3RheXMgZml4ZWQgdG8gdGhlIHRvcCBvZiB0aGUgc2lkZSBzaGVldCB3aGVuIHNjcm9sbGluZy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3RkLXNpZGUtc2hlZXQtdGl0bGVdLCBbQ292YWxlbnRTaWRlU2hlZXRUaXRsZV0nLFxuICBleHBvcnRBczogJ0NvdmFsZW50U2lkZVNoZWV0VGl0bGUnLFxufSlcbmV4cG9ydCBjbGFzcyBDb3ZhbGVudFNpZGVTaGVldFRpdGxlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqIFVuaXF1ZSBpZCBmb3IgdGhlIGRpYWxvZyB0aXRsZS4gSWYgbm9uZSBpcyBzdXBwbGllZCwgaXQgd2lsbCBiZSBhdXRvLWdlbmVyYXRlZC4gKi9cbiAgQElucHV0KCkgaWQgPSBgdGQtc2lkZS1zaGVldC10aXRsZS0ke2RpYWxvZ0VsZW1lbnRVaWQrK31gO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MudGQtc2lkZS1zaGVldC10aXRsZScpIHRkU2lkZVNoZWV0VGl0bGUgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5pZCcpIGlkQXR0ciA9IHRoaXMuaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy8gVGhlIGRpYWxvZyB0aXRsZSBkaXJlY3RpdmUgaXMgYWx3YXlzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIGBDb3ZhbGVudFNpZGVTaGVldFJlZmAuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBsaWdodHdlaWdodC10b2tlbnNcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9kaWFsb2dSZWY6IENvdmFsZW50U2lkZVNoZWV0UmVmPGFueT4sXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBDb3ZhbGVudFNpZGVTaGVldFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RpYWxvZ1JlZikge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7XG5cbiAgICAgICAgaWYgKGNvbnRhaW5lciAmJiAhY29udGFpbmVyLl9hcmlhTGFiZWxsZWRCeVF1ZXVlLmluY2x1ZGVzKHRoaXMuaWQpKSB7XG4gICAgICAgICAgY29udGFpbmVyLl9hcmlhTGFiZWxsZWRCeVF1ZXVlLnB1c2godGhpcy5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaWFsb2dSZWYgPSBnZXRDbG9zZXN0RGlhbG9nKFxuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLFxuICAgICAgICB0aGlzLl9kaWFsb2cub3BlblNpZGVTaGVldHNcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2Nyb2xsYWJsZSBjb250ZW50IGNvbnRhaW5lciBvZiBhIGRpYWxvZy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBgW3RkLXNpZGUtc2hlZXQtY29udGVudF0sIHRkLXNpZGUtc2hlZXQtY29udGVudCwgW0NvdmFsZW50U2lkZVNoZWV0Q29udGVudF1gLFxufSlcbmV4cG9ydCBjbGFzcyBDb3ZhbGVudFNpZGVTaGVldENvbnRlbnREaXJlY3RpdmUge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRkLXNpZGUtc2hlZXQtY29udGVudCcpIHRkU2lkZVNoZWV0Q29udGVudCA9IHRydWU7XG59XG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgYm90dG9tIGFjdGlvbiBidXR0b25zIGluIGEgZGlhbG9nLlxuICogU3RheXMgZml4ZWQgdG8gdGhlIGJvdHRvbSB3aGVuIHNjcm9sbGluZy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBgW3RkLXNpZGUtc2hlZXQtYWN0aW9uc10sIHRkLXNpZGUtc2hlZXQtYWN0aW9ucywgW0NvdmFsZW50U2lkZVNoZWV0QWN0aW9uc11gLFxufSlcbmV4cG9ydCBjbGFzcyBDb3ZhbGVudFNpZGVTaGVldEFjdGlvbnNEaXJlY3RpdmUge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRkLXNpZGUtc2hlZXQtYWN0aW9ucycpIHRkU2lkZVNoZWV0QWN0aW9ucyA9IHRydWU7XG59XG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgd3JhcHBlciBwYXJ0IG9mIHRoZSBkaWFsb2dcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBgW3RkLXNpZGUtc2hlZXQtd3JhcHBlcl0sIHRkLXNpZGUtc2hlZXQtd3JhcHBlciwgW0NvdmFsZW50U2lkZVNoZWV0V3JhcHBlcl1gLFxufSlcbmV4cG9ydCBjbGFzcyBDb3ZhbGVudFNpZGVTaGVldFdyYXBwZXJEaXJlY3RpdmUge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRkLXNpZGUtc2hlZXQtd3JhcHBlcicpIHRkU2lkZVNoZWV0V3JhcHBlciA9IHRydWU7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGNsb3Nlc3QgQ292YWxlbnRTaWRlU2hlZXRSZWYgdG8gYW4gZWxlbWVudCBieSBsb29raW5nIGF0IHRoZSBET00uXG4gKiBAcGFyYW0gZWxlbWVudCBFbGVtZW50IHJlbGF0aXZlIHRvIHdoaWNoIHRvIGxvb2sgZm9yIGEgZGlhbG9nLlxuICogQHBhcmFtIG9wZW5EaWFsb2dzIFJlZmVyZW5jZXMgdG8gdGhlIGN1cnJlbnRseS1vcGVuIGRpYWxvZ3MuXG4gKi9cbmZ1bmN0aW9uIGdldENsb3Nlc3REaWFsb2coXG4gIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICBvcGVuRGlhbG9nczogQ292YWxlbnRTaWRlU2hlZXRSZWY8YW55PltdXG4pOiBDb3ZhbGVudFNpZGVTaGVldFJlZjxhbnk+IHtcbiAgbGV0IHBhcmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cbiAgd2hpbGUgKHBhcmVudCAmJiAhcGFyZW50LmNsYXNzTGlzdC5jb250YWlucygndGQtc2lkZS1zaGVldC1jb250YWluZXInKSkge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuIHBhcmVudFxuICAgID8gb3BlbkRpYWxvZ3MuZmluZCgoZGlhbG9nKSA9PiBkaWFsb2cuaWQgPT09IHBhcmVudD8uaWQpID8/IG9wZW5EaWFsb2dzWzBdXG4gICAgOiBvcGVuRGlhbG9nc1swXTtcbn1cbiJdfQ==