@jermeo/ionic4-datepicker
Version:
ionic4-datepicker inspired by rajeshwar patlolla ionic1 datepicker
283 lines • 20.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/ionic4-datepicker.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, forwardRef, Input, ElementRef, Renderer2 } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { ModalController } from '@ionic/angular';
import { Ionic4DatepickerModalComponent } from './ionic4-datepicker-modal/ionic4-datepicker-modal.component';
import * as moment_ from 'moment';
/** @type {?} */
var moment = moment_;
/** @type {?} */
var noop = (/**
* @return {?}
*/
function () {
});
var ɵ0 = noop;
/** @type {?} */
export var CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
function () { return Ionic4DatepickerComponent; })),
multi: true
};
var Ionic4DatepickerComponent = /** @class */ (function () {
function Ionic4DatepickerComponent(modalCtrl, el, renderer2) {
this.modalCtrl = modalCtrl;
this.el = el;
this.renderer2 = renderer2;
this.selectedDate = {};
this.innerValue = '';
// Placeholders for the callbacks which are later provided
// by the Control Value Accessor
this.onTouchedCallback = noop;
this.onChangeCallback = noop;
}
/**
* @return {?}
*/
Ionic4DatepickerComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
if (this.inputDateConfig.clearButton !== false) {
this.closeIcon = document.createElement('ion-icon');
this.closeIcon.name = 'close-circle';
this.closeIcon.className = 'clearButton';
this.closeIcon.style.position = 'absolute';
this.closeIcon.style.right = '8px';
this.closeIcon.style.bottom = '0px';
this.closeIcon.style.fontSize = '18px';
this.closeIcon.style.color = '#A9A9A9';
this.closeIcon.style.zIndex = '5';
if (this.el.nativeElement.parentNode.nodeName === 'ION-ITEM') {
this.closeIcon.style.bottom = '30%';
}
this.el.nativeElement.setAttribute('style', 'position: relative; width: 100%;');
this.el.nativeElement.appendChild(this.closeIcon);
this.renderer2.listen(this.closeIcon, 'click', (/**
* @param {?} event
* @return {?}
*/
function (event) {
// Do something with 'event'
// console.log('button clicks');
_this.selectedDate = new Date();
_this.value = '';
}));
}
};
/**
* @param {?} value
* @return {?}
*/
Ionic4DatepickerComponent.prototype.onChangeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
// console.log('onChangeValue =>' , value);
if (this.inputDateConfig.clearButton !== false) {
if (!value) {
this.closeIcon.style.visibility = 'hidden';
}
else {
this.closeIcon.style.visibility = 'visible';
}
}
};
/**
* @param {?} value
* @return {?}
*/
Ionic4DatepickerComponent.prototype.openDatePicker = /**
* @param {?} value
* @return {?}
*/
function (value) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var datePickerModal;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
// console.log('openDatePicker');
if (value) {
this.selectedDate.date = value;
}
return [4 /*yield*/, this.modalCtrl.create({
component: Ionic4DatepickerModalComponent,
cssClass: 'li-ionic4-datePicker',
componentProps: { 'objConfig': this.inputDateConfig, 'selectedDate': this.selectedDate.date }
})];
case 1:
datePickerModal = _a.sent();
return [4 /*yield*/, datePickerModal.present()];
case 2:
_a.sent();
datePickerModal.onDidDismiss()
.then((/**
* @param {?} data
* @return {?}
*/
function (data) {
// console.log(data);
if (data.data && data.data.date && data.data.date !== 'Invalid date') {
_this.selectedDate.date = data.data.date;
_this.value = data.data.date;
}
}));
return [2 /*return*/];
}
});
});
};
Object.defineProperty(Ionic4DatepickerComponent.prototype, "value", {
// get accessor
get:
// get accessor
/**
* @return {?}
*/
function () {
return this.innerValue;
},
// set accessor including call the onchange callback
set:
// set accessor including call the onchange callback
/**
* @param {?} v
* @return {?}
*/
function (v) {
if (v !== this.innerValue) {
this.innerValue = v;
this.onChangeCallback(v);
}
this.onChangeValue(v);
},
enumerable: true,
configurable: true
});
// Set touched on blur
// Set touched on blur
/**
* @return {?}
*/
Ionic4DatepickerComponent.prototype.onBlur =
// Set touched on blur
/**
* @return {?}
*/
function () {
this.onTouchedCallback();
};
// From ControlValueAccessor interface
// From ControlValueAccessor interface
/**
* @param {?} value
* @return {?}
*/
Ionic4DatepickerComponent.prototype.writeValue =
// From ControlValueAccessor interface
/**
* @param {?} value
* @return {?}
*/
function (value) {
if (value !== this.innerValue) {
this.innerValue = value;
}
this.onChangeValue(value);
};
// From ControlValueAccessor interface
// From ControlValueAccessor interface
/**
* @param {?} fn
* @return {?}
*/
Ionic4DatepickerComponent.prototype.registerOnChange =
// From ControlValueAccessor interface
/**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onChangeCallback = fn;
};
// From ControlValueAccessor interface
// From ControlValueAccessor interface
/**
* @param {?} fn
* @return {?}
*/
Ionic4DatepickerComponent.prototype.registerOnTouched =
// From ControlValueAccessor interface
/**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onTouchedCallback = fn;
};
Ionic4DatepickerComponent.decorators = [
{ type: Component, args: [{
selector: 'li-ionic4-datepicker',
template: "<input type=\"text\" class=\"li-dp-input\" (focus)=\"$event.preventDefault()\" (click)=\"openDatePicker(value)\" readonly\n [(ngModel)]=\"value\" start />",
providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR],
styles: [":host input{font-size:16px;margin:6px 0;border:0;border-bottom:1px solid #ccc;width:100%;padding:12px}@media (min-width:768px){:host input{font-size:18px}}:host input.has-focus,:host input:focus{outline:0;box-shadow:unset}"]
}] }
];
/** @nocollapse */
Ionic4DatepickerComponent.ctorParameters = function () { return [
{ type: ModalController },
{ type: ElementRef },
{ type: Renderer2 }
]; };
Ionic4DatepickerComponent.propDecorators = {
inputDateConfig: [{ type: Input }]
};
return Ionic4DatepickerComponent;
}());
export { Ionic4DatepickerComponent };
if (false) {
/** @type {?} */
Ionic4DatepickerComponent.prototype.inputDateConfig;
/** @type {?} */
Ionic4DatepickerComponent.prototype.closeIcon;
/** @type {?} */
Ionic4DatepickerComponent.prototype.selectedDate;
/**
* @type {?}
* @private
*/
Ionic4DatepickerComponent.prototype.innerValue;
/**
* @type {?}
* @private
*/
Ionic4DatepickerComponent.prototype.onTouchedCallback;
/**
* @type {?}
* @private
*/
Ionic4DatepickerComponent.prototype.onChangeCallback;
/**
* @type {?}
* @private
*/
Ionic4DatepickerComponent.prototype.modalCtrl;
/** @type {?} */
Ionic4DatepickerComponent.prototype.el;
/** @type {?} */
Ionic4DatepickerComponent.prototype.renderer2;
}
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9uaWM0LWRhdGVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGplcm1lby9pb25pYzQtZGF0ZXBpY2tlci8iLCJzb3VyY2VzIjpbImxpYi9pb25pYzQtZGF0ZXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUM3RyxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQzs7SUFFNUIsTUFBTSxHQUFHLE9BQU87O0lBRWhCLElBQUk7OztBQUFHO0FBQ2IsQ0FBQyxDQUFBOzs7QUFFRCxNQUFNLEtBQU8sbUNBQW1DLEdBQVE7SUFDdEQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVTs7O0lBQUMsY0FBTSxPQUFBLHlCQUF5QixFQUF6QixDQUF5QixFQUFDO0lBQ3hELEtBQUssRUFBRSxJQUFJO0NBQ1o7QUFDRDtJQW1CRSxtQ0FDVSxTQUEwQixFQUMzQixFQUFjLEVBQ2QsU0FBb0I7UUFGbkIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDM0IsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFYN0IsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFDZixlQUFVLEdBQVEsRUFBRSxDQUFDOzs7UUFJckIsc0JBQWlCLEdBQWUsSUFBSSxDQUFDO1FBQ3JDLHFCQUFnQixHQUFxQixJQUFJLENBQUM7SUFNOUMsQ0FBQzs7OztJQUVMLDRDQUFROzs7SUFBUjtRQUFBLGlCQTJC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RSxDQUFDO0lBQzdCLENBQUM7SUFFRCxzQ0FBc0M7Ozs7OztJQUN0QyxxREFBaUI7Ozs7OztJQUFqQixVQUFrQixFQUFPO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7Z0JBM0hGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyx5S0FBaUQ7b0JBRWpELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDOztpQkFDakQ7Ozs7Z0JBbkJRLGVBQWU7Z0JBRnVCLFVBQVU7Z0JBQUUsU0FBUzs7O2tDQXdCakUsS0FBSzs7SUFvSFIsZ0NBQUM7Q0FBQSxBQTVIRCxJQTRIQztTQXRIWSx5QkFBeUI7OztJQUVwQyxvREFBOEI7O0lBRTlCLDhDQUFVOztJQUNWLGlEQUF1Qjs7Ozs7SUFDdkIsK0NBQTZCOzs7OztJQUk3QixzREFBNkM7Ozs7O0lBQzdDLHFEQUFrRDs7Ozs7SUFHaEQsOENBQWtDOztJQUNsQyx1Q0FBcUI7O0lBQ3JCLDhDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBmb3J3YXJkUmVmLCBJbnB1dCwgRWxlbWVudFJlZiwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nTW9kZWwgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBJb25pYzREYXRlcGlja2VyTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2lvbmljNC1kYXRlcGlja2VyLW1vZGFsL2lvbmljNC1kYXRlcGlja2VyLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gJ21vbWVudCc7XG5cbmNvbnN0IG1vbWVudCA9IG1vbWVudF87XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuXG5leHBvcnQgY29uc3QgQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElvbmljNERhdGVwaWNrZXJDb21wb25lbnQpLFxuICBtdWx0aTogdHJ1ZVxufTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpLWlvbmljNC1kYXRlcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lvbmljNC1kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW9uaWM0LWRhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1JdXG59KVxuZXhwb3J0IGNsYXNzIElvbmljNERhdGVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBASW5wdXQoKSBpbnB1dERhdGVDb25maWc6IGFueTtcblxuICBjbG9zZUljb247XG4gIHNlbGVjdGVkRGF0ZTogYW55ID0ge307XG4gIHByaXZhdGUgaW5uZXJWYWx1ZTogYW55ID0gJyc7XG5cbiAgLy8gUGxhY2Vob2xkZXJzIGZvciB0aGUgY2FsbGJhY2tzIHdoaWNoIGFyZSBsYXRlciBwcm92aWRlZFxuICAvLyBieSB0aGUgQ29udHJvbCBWYWx1ZSBBY2Nlc3NvclxuICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHB1YmxpYyBlbDogRWxlbWVudFJlZixcbiAgICBwdWJsaWMgcmVuZGVyZXIyOiBSZW5kZXJlcjJcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIGlmICh0aGlzLmlucHV0RGF0ZUNvbmZpZy5jbGVhckJ1dHRvbiAhPT0gZmFsc2UpIHtcblxuICAgICAgdGhpcy5jbG9zZUljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpb24taWNvbicpO1xuICAgICAgdGhpcy5jbG9zZUljb24ubmFtZSA9ICdjbG9zZS1jaXJjbGUnO1xuICAgICAgdGhpcy5jbG9zZUljb24uY2xhc3NOYW1lID0gJ2NsZWFyQnV0dG9uJztcbiAgICAgIHRoaXMuY2xvc2VJY29uLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgIHRoaXMuY2xvc2VJY29uLnN0eWxlLnJpZ2h0ID0gJzhweCc7XG4gICAgICB0aGlzLmNsb3NlSWNvbi5zdHlsZS5ib3R0b20gPSAnMHB4JztcbiAgICAgIHRoaXMuY2xvc2VJY29uLnN0eWxlLmZvbnRTaXplID0gJzE4cHgnO1xuICAgICAgdGhpcy5jbG9zZUljb24uc3R5bGUuY29sb3IgPSAnI0E5QTlBOSc7XG4gICAgICB0aGlzLmNsb3NlSWNvbi5zdHlsZS56SW5kZXggPSAnNSc7XG5cbiAgICAgIGlmICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gJ0lPTi1JVEVNJykge1xuICAgICAgICB0aGlzLmNsb3NlSWNvbi5zdHlsZS5ib3R0b20gPSAnMzAlJztcbiAgICAgIH1cbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3Bvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDEwMCU7Jyk7XG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5jbG9zZUljb24pO1xuXG4gICAgICB0aGlzLnJlbmRlcmVyMi5saXN0ZW4odGhpcy5jbG9zZUljb24sICdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAvLyBEbyBzb21ldGhpbmcgd2l0aCAnZXZlbnQnXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdidXR0b24gY2xpY2tzJyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VWYWx1ZSh2YWx1ZSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdvbkNoYW5nZVZhbHVlID0+JyAsIHZhbHVlKTtcbiAgICBpZiAodGhpcy5pbnB1dERhdGVDb25maWcuY2xlYXJCdXR0b24gIT09IGZhbHNlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VJY29uLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xvc2VJY29uLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb3BlbkRhdGVQaWNrZXIodmFsdWUpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnb3BlbkRhdGVQaWNrZXInKTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmRhdGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlUGlja2VyTW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBJb25pYzREYXRlcGlja2VyTW9kYWxDb21wb25lbnQsXG4gICAgICBjc3NDbGFzczogJ2xpLWlvbmljNC1kYXRlUGlja2VyJyxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7ICdvYmpDb25maWcnOiB0aGlzLmlucHV0RGF0ZUNvbmZpZywgJ3NlbGVjdGVkRGF0ZSc6IHRoaXMuc2VsZWN0ZWREYXRlLmRhdGUgIH1cbiAgICB9KTtcbiAgICBhd2FpdCBkYXRlUGlja2VyTW9kYWwucHJlc2VudCgpO1xuXG4gICAgZGF0ZVBpY2tlck1vZGFsLm9uRGlkRGlzbWlzcygpXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgaWYgKGRhdGEuZGF0YSAmJiBkYXRhLmRhdGEuZGF0ZSAmJiBkYXRhLmRhdGEuZGF0ZSAhPT0gJ0ludmFsaWQgZGF0ZScpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5kYXRlID0gZGF0YS5kYXRhLmRhdGU7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEuZGF0YS5kYXRlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIGdldCBhY2Nlc3NvclxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pbm5lclZhbHVlO1xuICB9XG5cbiAgLy8gc2V0IGFjY2Vzc29yIGluY2x1ZGluZyBjYWxsIHRoZSBvbmNoYW5nZSBjYWxsYmFja1xuICBzZXQgdmFsdWUodjogYW55KSB7XG4gICAgaWYgKHYgIT09IHRoaXMuaW5uZXJWYWx1ZSkge1xuICAgICAgdGhpcy5pbm5lclZhbHVlID0gdjtcbiAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh2KTtcbiAgICB9XG4gICAgdGhpcy5vbkNoYW5nZVZhbHVlKHYpO1xuICB9XG5cbiAgLy8gU2V0IHRvdWNoZWQgb24gYmx1clxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG59XG4iXX0=