@blox/material
Version:
Material Components for Angular
155 lines • 18.2 kB
JavaScript
import { Directive, ElementRef, HostBinding, Input, Renderer2, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
import { asBoolean, asBooleanOrNull } from '../../utils/value.utils';
import { AbstractMdcRipple } from '../ripple/abstract.mdc.ripple';
import { MdcEventRegistry } from '../../utils/mdc.event.registry';
/**
* Directive for making an element a ripple surface. The ripple can be customized
* with the provided
* <a href="https://github.com/material-components/material-components-web/tree/master/packages/mdc-ripple#sass-apis"
* target="_blank">Sass Mixins</a>.
* Alternatively you can set the <code>surface</code> to get a default styled ripple.
*/
export class MdcRippleDirective extends AbstractMdcRipple {
constructor(_elm, renderer, registry, doc) {
super(_elm, renderer, registry, doc);
this._elm = _elm;
this._initialized = false;
this._on = false;
this._disabled = null;
this._surface = false;
this._dim = null;
}
ngAfterContentInit() {
if (this._on)
this.initRipple();
this._initialized = true;
}
ngOnDestroy() {
this.destroyRipple();
}
/** @internal */
isRippleSurfaceDisabled() {
return this._disabled == null ? super.isRippleSurfaceDisabled() : this._disabled;
}
/** @internal */
computeRippleBoundingRect() {
if (this._dim == null)
return super.computeRippleBoundingRect();
const { left, top } = this._elm.nativeElement.getBoundingClientRect();
return {
left,
top,
width: this._dim,
height: this._dim,
right: left + this._dim,
bottom: top + this._dim,
};
}
/**
* Set this input to false to remove the ripple effect from the surface.
*/
get mdcRipple() {
return this._on;
}
set mdcRipple(value) {
const newValue = asBoolean(value);
if (newValue !== this._on) {
this._on = newValue;
if (this._initialized) {
if (newValue)
this.initRipple();
else
this.destroyRipple();
}
}
}
/**
* When this input has a value other than false, the ripple is unbounded.
* Surfaces for bounded ripples should have <code>overflow</code> set to hidden,
* while surfaces for unbounded ripples should have it set to <code>visible</code>.
*/
get unbounded() {
return this.isRippleUnbounded();
}
set unbounded(value) {
this.setRippleUnbounded(asBoolean(value));
}
/** @internal */
get _attrUnbounded() {
return this.unbounded ? "" : null;
}
/**
* This input sets the dimension of the ripple.
* This input can be set to null for returning to the defaults, which uses the surface
* element to compute the bounds of the ripple.
*/
get dimension() {
return this._dim;
}
set dimension(value) {
this._dim = value == null ? null : +value;
this.layout();
}
/**
* This input can be used to programmatically enable/disable the ripple.
* When true, the ripple effect will be disabled, when false the ripple
* effect will be enabled. When not set, or <code>null</code> (default)
* the ripple effect enabled/disabled state depend on whether or not the
* surface element has the <code>disabled</code> attribute set.
*/
get disabled() {
return this._disabled;
}
set disabled(value) {
this._disabled = asBooleanOrNull(value);
}
/**
* When this input has a value other than false, the ripple element will get the
* "mdc-ripple-surface" class. That class has styling for bounded and unbounded
* ripples in accordance with your theme customizations. Without this property,
* you have to supply your own ripple styles, using the provided
* <a href="https://github.com/material-components/material-components-web/tree/master/packages/mdc-ripple#sass-apis"
* target="_blank">Sass Mixins</a>.
*
* To apply a standard surface ripple, set the value to `true`, `"primary"`, or `"accent"`.
* The values primary and accent set the ripple color to the theme primary or secondary color.
*/
get surface() {
return !!this._surface;
}
set surface(value) {
if (value === 'primary' || value === 'accent')
this._surface = value;
else
this._surface = asBoolean(value);
}
get _surfacePrimary() {
return this._surface === 'primary';
}
get _surfaceAccent() {
return this._surface === 'accent';
}
}
MdcRippleDirective.decorators = [
{ type: Directive, args: [{
selector: '[mdcRipple]'
},] }
];
MdcRippleDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 },
{ type: MdcEventRegistry },
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
];
MdcRippleDirective.propDecorators = {
mdcRipple: [{ type: Input }],
unbounded: [{ type: Input }],
_attrUnbounded: [{ type: HostBinding, args: ['attr.data-mdc-ripple-is-unbounded',] }],
dimension: [{ type: Input }],
disabled: [{ type: Input }],
surface: [{ type: Input }, { type: HostBinding, args: ['class.mdc-ripple-surface',] }],
_surfacePrimary: [{ type: HostBinding, args: ['class.mdc-ripple-surface--primary',] }],
_surfaceAccent: [{ type: HostBinding, args: ['class.mdc-ripple-surface--accent',] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRjLnJpcHBsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9yaXBwbGUvbWRjLnJpcHBsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQWEsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVsRTs7Ozs7O0dBTUc7QUFJSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsaUJBQWlCO0lBT3JELFlBQW1CLElBQWdCLEVBQUUsUUFBbUIsRUFBRSxRQUEwQixFQUFvQixHQUFRO1FBQzVHLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFlLENBQUMsQ0FBQztRQURsQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBTjNCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLFFBQUcsR0FBRyxLQUFLLENBQUM7UUFDWixjQUFTLEdBQW1CLElBQUksQ0FBQztRQUNqQyxhQUFRLEdBQW1DLEtBQUssQ0FBQztRQUNqRCxTQUFJLEdBQWtCLElBQUksQ0FBQztJQUluQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxJQUFJLENBQUMsR0FBRztZQUNSLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUks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UyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFJRCxJQUFzRCxlQUFlO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQXFELGNBQWM7UUFDL0QsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQztJQUN0QyxDQUFDOzs7WUFySkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxhQUFhO2FBQzFCOzs7WUFmcUMsVUFBVTtZQUFpQyxTQUFTO1lBSWpGLGdCQUFnQjs0Q0FtQmtFLE1BQU0sU0FBQyxRQUFROzs7d0JBcUNyRyxLQUFLO3dCQXdCTCxLQUFLOzZCQVdMLFdBQVcsU0FBQyxtQ0FBbUM7d0JBUy9DLEtBQUs7dUJBa0JMLEtBQUs7c0JBcUJMLEtBQUssWUFBSSxXQUFXLFNBQUMsMEJBQTBCOzhCQWEvQyxXQUFXLFNBQUMsbUNBQW1DOzZCQUkvQyxXQUFXLFNBQUMsa0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBhc0Jvb2xlYW4sIGFzQm9vbGVhbk9yTnVsbCB9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbHVlLnV0aWxzJztcclxuaW1wb3J0IHsgQWJzdHJhY3RNZGNSaXBwbGUgfSBmcm9tICcuLi9yaXBwbGUvYWJzdHJhY3QubWRjLnJpcHBsZSc7XHJcbmltcG9ydCB7IE1kY0V2ZW50UmVnaXN0cnkgfSBmcm9tICcuLi8uLi91dGlscy9tZGMuZXZlbnQucmVnaXN0cnknO1xyXG5cclxuLyoqXHJcbiAqIERpcmVjdGl2ZSBmb3IgbWFraW5nIGFuIGVsZW1lbnQgYSByaXBwbGUgc3VyZmFjZS4gVGhlIHJpcHBsZSBjYW4gYmUgY3VzdG9taXplZFxyXG4gKiB3aXRoIHRoZSBwcm92aWRlZFxyXG4gKiA8YSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbWRjLXJpcHBsZSNzYXNzLWFwaXNcIlxyXG4gKiAgIHRhcmdldD1cIl9ibGFua1wiPlNhc3MgTWl4aW5zPC9hPi5cclxuICogQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHNldCB0aGUgPGNvZGU+c3VyZmFjZTwvY29kZT4gdG8gZ2V0IGEgZGVmYXVsdCBzdHlsZWQgcmlwcGxlLlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1ttZGNSaXBwbGVdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTWRjUmlwcGxlRGlyZWN0aXZlIGV4dGVuZHMgQWJzdHJhY3RNZGNSaXBwbGUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX29uID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBfc3VyZmFjZTogYm9vbGVhbiB8ICdwcmltYXJ5JyB8ICdhY2NlbnQnID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9kaW06IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBfZWxtOiBFbGVtZW50UmVmLCByZW5kZXJlcjogUmVuZGVyZXIyLCByZWdpc3RyeTogTWRjRXZlbnRSZWdpc3RyeSwgQEluamVjdChET0NVTUVOVCkgZG9jOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihfZWxtLCByZW5kZXJlciwgcmVnaXN0cnksIGRvYyBhcyBEb2N1bWVudCk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX29uKVxyXG4gICAgICAgICAgICB0aGlzLmluaXRSaXBwbGUoKTtcclxuICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lSaXBwbGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBwcm90ZWN0ZWQgaXNSaXBwbGVTdXJmYWNlRGlzYWJsZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkID09IG51bGwgPyBzdXBlci5pc1JpcHBsZVN1cmZhY2VEaXNhYmxlZCgpIDogdGhpcy5fZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgcHJvdGVjdGVkIGNvbXB1dGVSaXBwbGVCb3VuZGluZ1JlY3QoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RpbSA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVJpcHBsZUJvdW5kaW5nUmVjdCgpO1xyXG4gICAgICAgIGNvbnN0IHtsZWZ0LCB0b3B9ID0gdGhpcy5fZWxtLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGVmdCxcclxuICAgICAgICAgICAgdG9wLFxyXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5fZGltLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuX2RpbSxcclxuICAgICAgICAgICAgcmlnaHQ6IGxlZnQgKyB0aGlzLl9kaW0sXHJcbiAgICAgICAgICAgIGJvdHRvbTogdG9wICsgdGhpcy5fZGltLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhpcyBpbnB1dCB0byBmYWxzZSB0byByZW1vdmUgdGhlIHJpcHBsZSBlZmZlY3QgZnJvbSB0aGUgc3VyZmFjZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgZ2V0IG1kY1JpcHBsZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb247XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IG1kY1JpcHBsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gYXNCb29sZWFuKHZhbHVlKTtcclxuICAgICAgICBpZiAobmV3VmFsdWUgIT09IHRoaXMuX29uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFJpcHBsZSgpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveVJpcHBsZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9tZGNSaXBwbGU6IGJvb2xlYW4gfCAnJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZW4gdGhpcyBpbnB1dCBoYXMgYSB2YWx1ZSBvdGhlciB0aGFuIGZhbHNlLCB0aGUgcmlwcGxlIGlzIHVuYm91bmRlZC5cclxuICAgICAqIFN1cmZhY2VzIGZvciBib3VuZGVkIHJpcHBsZXMgc2hvdWxkIGhhdmUgPGNvZGU+b3ZlcmZsb3c8L2NvZGU+IHNldCB0byBoaWRkZW4sXHJcbiAgICAgKiB3aGlsZSBzdXJmYWNlcyBmb3IgdW5ib3VuZGVkIHJpcHBsZXMgc2hvdWxkIGhhdmUgaXQgc2V0IHRvIDxjb2RlPnZpc2libGU8L2NvZGU+LlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBnZXQgdW5ib3VuZGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzUmlwcGxlVW5ib3VuZGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHVuYm91bmRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuc2V0UmlwcGxlVW5ib3VuZGVkKGFzQm9vbGVhbih2YWx1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV91bmJvdW5kZWQ6IGJvb2xlYW4gfCAnJztcclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1tZGMtcmlwcGxlLWlzLXVuYm91bmRlZCcpIGdldCBfYXR0clVuYm91bmRlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51bmJvdW5kZWQgPyBcIlwiIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaW5wdXQgc2V0cyB0aGUgZGltZW5zaW9uIG9mIHRoZSByaXBwbGUuXHJcbiAgICAgKiBUaGlzIGlucHV0IGNhbiBiZSBzZXQgdG8gbnVsbCBmb3IgcmV0dXJuaW5nIHRvIHRoZSBkZWZhdWx0cywgd2hpY2ggdXNlcyB0aGUgc3VyZmFjZVxyXG4gICAgICogZWxlbWVudCB0byBjb21wdXRlIHRoZSBib3VuZHMgb2YgdGhlIHJpcHBsZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgZ2V0IGRpbWVuc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGltO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBkaW1lbnNpb24odmFsdWU6IG51bWJlciB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLl9kaW0gPSB2YWx1ZSA9PSBudWxsID8gbnVsbCA6ICt2YWx1ZTtcclxuICAgICAgICB0aGlzLmxheW91dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaW1lbnNpb246IHN0cmluZyB8IG51bWJlciB8IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlucHV0IGNhbiBiZSB1c2VkIHRvIHByb2dyYW1tYXRpY2FsbHkgZW5hYmxlL2Rpc2FibGUgdGhlIHJpcHBsZS5cclxuICAgICAqIFdoZW4gdHJ1ZSwgdGhlIHJpcHBsZSBlZmZlY3Qgd2lsbCBiZSBkaXNhYmxlZCwgd2hlbiBmYWxzZSB0aGUgcmlwcGxlXHJcbiAgICAgKiBlZmZlY3Qgd2lsbCBiZSBlbmFibGVkLiBXaGVuIG5vdCBzZXQsIG9yIDxjb2RlPm51bGw8L2NvZGU+IChkZWZhdWx0KVxyXG4gICAgICogdGhlIHJpcHBsZSBlZmZlY3QgZW5hYmxlZC9kaXNhYmxlZCBzdGF0ZSBkZXBlbmQgb24gd2hldGhlciBvciBub3QgdGhlXHJcbiAgICAgKiBzdXJmYWNlIGVsZW1lbnQgaGFzIHRoZSA8Y29kZT5kaXNhYmxlZDwvY29kZT4gYXR0cmlidXRlIHNldC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgZ2V0IGRpc2FibGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBhc0Jvb2xlYW5Pck51bGwodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9ib29sZWFuOiBib29sZWFuIHwgbnVsbCB8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiB0aGlzIGlucHV0IGhhcyBhIHZhbHVlIG90aGVyIHRoYW4gZmFsc2UsIHRoZSByaXBwbGUgZWxlbWVudCB3aWxsIGdldCB0aGVcclxuICAgICAqIFwibWRjLXJpcHBsZS1zdXJmYWNlXCIgY2xhc3MuIFRoYXQgY2xhc3MgaGFzIHN0eWxpbmcgZm9yIGJvdW5kZWQgYW5kIHVuYm91bmRlZFxyXG4gICAgICogcmlwcGxlcyBpbiBhY2NvcmRhbmNlIHdpdGggeW91ciB0aGVtZSBjdXN0b21pemF0aW9ucy4gV2l0aG91dCB0aGlzIHByb3BlcnR5LFxyXG4gICAgICogeW91IGhhdmUgdG8gc3VwcGx5IHlvdXIgb3duIHJpcHBsZSBzdHlsZXMsIHVzaW5nIHRoZSBwcm92aWRlZFxyXG4gICAgICogPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL3RyZWUvbWFzdGVyL3BhY2thZ2VzL21kYy1yaXBwbGUjc2Fzcy1hcGlzXCJcclxuICAgICAqICAgdGFyZ2V0PVwiX2JsYW5rXCI+U2FzcyBNaXhpbnM8L2E+LlxyXG4gICAgICogXHJcbiAgICAgKiBUbyBhcHBseSBhIHN0YW5kYXJkIHN1cmZhY2UgcmlwcGxlLCBzZXQgdGhlIHZhbHVlIHRvIGB0cnVlYCwgYFwicHJpbWFyeVwiYCwgb3IgYFwiYWNjZW50XCJgLlxyXG4gICAgICogVGhlIHZhbHVlcyBwcmltYXJ5IGFuZCBhY2NlbnQgc2V0IHRoZSByaXBwbGUgY29sb3IgdG8gdGhlIHRoZW1lIHByaW1hcnkgb3Igc2Vjb25kYXJ5IGNvbG9yLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzLm1kYy1yaXBwbGUtc3VyZmFjZScpIGdldCBzdXJmYWNlKCkge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuX3N1cmZhY2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHN1cmZhY2UodmFsdWU6IGJvb2xlYW4gfCAncHJpbWFyeScgfCAnYWNjZW50Jykge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ3ByaW1hcnknIHx8IHZhbHVlID09PSAnYWNjZW50JylcclxuICAgICAgICAgICAgdGhpcy5fc3VyZmFjZSA9IHZhbHVlO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5fc3VyZmFjZSA9IGFzQm9vbGVhbih2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N1cmZhY2U6IGJvb2xlYW4gfCAncHJpbWFyeScgfCAnYWNjZW50JyB8ICcnO1xyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWRjLXJpcHBsZS1zdXJmYWNlLS1wcmltYXJ5JykgZ2V0IF9zdXJmYWNlUHJpbWFyeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3VyZmFjZSA9PT0gJ3ByaW1hcnknO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWRjLXJpcHBsZS1zdXJmYWNlLS1hY2NlbnQnKSBnZXQgX3N1cmZhY2VBY2NlbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cmZhY2UgPT09ICdhY2NlbnQnO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==