ng-ipa-library 1.4.3 → 1.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -49,6 +49,21 @@ export class IPAFormService {
49
49
  }
50
50
  return isValid || !value ? null : { checkId: true };
51
51
  }
52
+ static validHijriDate(control) {
53
+ const date = control.value;
54
+ const isValid = IPAFormService.checkHijriDateValid(date);
55
+ return isValid
56
+ ? null
57
+ : {
58
+ ngbDate: {
59
+ invalid: date?.year +
60
+ '-' +
61
+ (date?.month > 10 ? date?.month : '0' + date?.month) +
62
+ '-' +
63
+ (date?.day > 10 ? date?.day : '0' + date?.day),
64
+ },
65
+ };
66
+ }
52
67
  getErrorMessage(control, patternErrorMsg = '', isArabic) {
53
68
  for (const propertyName in control?.errors) {
54
69
  if (control?.errors.hasOwnProperty(propertyName) &&
@@ -134,6 +149,13 @@ export class IPAFormService {
134
149
  }
135
150
  return msg;
136
151
  }
152
+ static checkHijriDateValid(date) {
153
+ return !(momentHijri.iDaysInMonth(date?.year, date?.month - 1) < date?.day ||
154
+ date?.day <= 0 ||
155
+ date?.month <= 0 ||
156
+ date?.month > 12 ||
157
+ date?.year?.toString().length !== 4);
158
+ }
137
159
  static convertToEn(value) {
138
160
  let newValue = '';
139
161
  for (let i = 0; i < value.length; i++) {
@@ -265,4 +287,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
265
287
  providedIn: 'root',
266
288
  }]
267
289
  }], ctorParameters: function () { return [{ type: i1.NgbDateParserFormatter }]; } });
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhLWZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWlwYS1saWJyYXJ5L3NyYy9saWIvaXBhLWZvcm0vaXBhLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sV0FBVyxNQUFNLGNBQWMsQ0FBQzs7O0FBT3ZDLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLGVBQXVDO1FBQXZDLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtJQUFHLENBQUM7SUFFL0Q7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQXdCO1FBQzVDLE1BQU0sV0FBVyxHQUNmLHVEQUF1RCxDQUFDLElBQUksQ0FDMUQsT0FBTyxDQUFDLEtBQUssQ0FDZCxDQUFDO1FBQ0osT0FBTyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUF3QjtRQUMvQyxNQUFNLFdBQVcsR0FDZixrRkFBa0YsQ0FBQyxJQUFJLENBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQ2QsQ0FBQztRQUNKLE9BQU8sV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQXdCO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sV0FB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VFUsY0FBYzsrR0FBZCxjQUFjLGNBRmIsTUFBTTsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IG1vbWVudEhpanJpIGZyb20gJ21vbWVudC1oaWpyaSc7XHJcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSVBBRm9ybVNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyc2VyRm9ybWF0dGVyOiBOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBjaGVjayBsaW5rIGlzIHZhbGlkLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBsaW5rVmFsaWRhdGlvbihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBpc1ZhbGlkTGluayA9XHJcbiAgICAgIC9eKChodHRwcz86XFwvXFwvKVtcXHctXSsoXFwuW2Etei1dKykrXFwuPyg6XFxkKyk/KFxcL1xcUyopPykkLy50ZXN0KFxyXG4gICAgICAgIGNvbnRyb2wudmFsdWVcclxuICAgICAgKTtcclxuICAgIHJldHVybiBpc1ZhbGlkTGluayB8fCAhY29udHJvbC52YWx1ZSA/IG51bGwgOiB7IGxpbms6IHRydWUgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNoZWNrIG1wNCBsaW5rIGlzIHZhbGlkLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBtcDRMaW5rVmFsaWRhdGlvbihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBpc1ZhbGlkTGluayA9XHJcbiAgICAgIC9eKChodHRwcz86XFwvXFwvKVtcXHctXSsoXFwuW2Etei1dKykrXFwuPyg6XFxkKyk/KFxcL1xcUyopPyhcXC9bXFx3XFx1MDYwMC1cXHUwNkZGXStcXC5tcDQpKSQvLnRlc3QoXHJcbiAgICAgICAgY29udHJvbC52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgcmV0dXJuIGlzVmFsaWRMaW5rIHx8ICFjb250cm9sLnZhbHVlID8gbnVsbCA6IHsgbGlua01QNDogdHJ1ZSB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogY2hlY2sgbW9iaWxlIG51bWJlciBpcyB2YWxpZC5cclxuICAgKi9cclxuICBzdGF0aWMgbW9iaWxlTm8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgaXNWYWxpZExpbmsgPSAvXjA1XFxkezh9JC8udGVzdChjb250cm9sLnZhbHVlKTtcclxuICAgIHJldHVybiBpc1ZhbGlkTGluayB8fCAhY29udHJvbC52YWx1ZSA/IG51bGwgOiB7IG1vYmlsZU5vOiB0cnVlIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjaGVjayBlbWFpbCBpcyB2YWxpZC5cclxuICAgKi9cclxuICBzdGF0aWMgZW1haWwoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgaXNWYWxpZExpbmsgPVxyXG4gICAgICAvXigoW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXSsoXFwuW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFtePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl0rXFwuKStbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdezIsfSkkLy50ZXN0KFxyXG4gICAgICAgIGNvbnRyb2wudmFsdWVcclxuICAgICAgKTtcclxuICAgIHJldHVybiBpc1ZhbGlkTGluayB8fCAhY29udHJvbC52YWx1ZSA/IG51bGwgOiB7IEVtYWlsOiB0cnVlIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjaGVjayBuYXRpb25hbCBJRCBvciBpcWFtYSBJRCBpcyB2YWxpZC5cclxuICAgKi9cclxuICBzdGF0aWMgY2hlY2tJRChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBsZXQgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgaWYgKFxyXG4gICAgICBJUEFGb3JtU2VydmljZS5uYXRpb25hbElkVmFsaWRhdGUodmFsdWUpIHx8XHJcbiAgICAgIElQQUZvcm1TZXJ2aWNlLmlxYW1hSWRWYWxpZGF0ZSh2YWx1ZSlcclxuICAgICkge1xyXG4gICAgICBpc1ZhbGlkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc1ZhbGlkIHx8ICF2YWx1ZSA/IG51bGwgOiB7IGNoZWNrSWQ6IHRydWUgfTtcclxuICB9XHJcblxyXG4gIGdldEVycm9yTWVzc2FnZShcclxuICAgIGNvbnRyb2w6IEZvcm1Db250cm9sLFxyXG4gICAgcGF0dGVybkVycm9yTXNnID0gJycsXHJcbiAgICBpc0FyYWJpYzogYm9vbGVhblxyXG4gICk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gY29udHJvbD8uZXJyb3JzKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb250cm9sPy5lcnJvcnMuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSAmJlxyXG4gICAgICAgIChjb250cm9sLnRvdWNoZWQgfHwgY29udHJvbC5kaXJ0eSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsaWRhdG9yRXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgY29udHJvbC5lcnJvcnNbcHJvcGVydHlOYW1lXSxcclxuICAgICAgICAgIHBhdHRlcm5FcnJvck1zZyxcclxuICAgICAgICAgIGlzQXJhYmljXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjb252ZXJ0IGdyZWdvcmlhbiBkYXRlIHRvIGhpanJpIGRhdGUgKEJhc2VkIG9uIFVtbSBhbC1RdXJhIGNhbGN1bGF0aW9ucykuXHJcbiAgICogQHBhcmFtIGRhdGU6IGdyZWdvcmlhbiBkYXRlXHJcbiAgICogQHBhcmFtIGZvcm1hdDogaUREID0+IGRheTog2aHZpSwgaU1NID0+IG1vbnRoOiDZoNmkLCBpTU1NID0+IG1vbnRoOiDYsdio2YrYuSDZoixcclxuICAgKiAgICAgICAgICAgICAgIGlNTU1NID0+INix2KjZiti5INin2YTYq9in2YbZiiwgIGlZWSA9PiB5ZWFyOiDZpNmiLCBpWVlZWSA9PiB5ZWFyOiDZodmk2aTZoixcclxuICAgKiAgICAgICAgICAgICAgIGRkID0+INmGLCBkZGQgPT4g2KXYq9mG2YrZhiwgZGRkZCA9PiDYp9mE2KXYq9mG2YrZhlxyXG4gICAqIEBleGFtcGxlICdpWVlZWS9pTS9pRNmH2YAg2KfZhNmF2YjYp9mB2YIgWVlZWS9NL0TZhSdcclxuICAgKiAgICAgICAgICAgJ9mh2aTZpNmiL9mg2aQv2aHZpdmH2YAg2KfZhNmF2YjYp9mB2YIg2aLZoNmi2aAv2aHZoS/Zo9mgJ1xyXG4gICAqL1xyXG4gIGNvbnZlcnRUb0hpanJpRGF0ZShcclxuICAgIGRhdGU6IHN0cmluZyxcclxuICAgIGZvcm1hdCA9ICdpWVlZWS1pTU0taUREJyxcclxuICAgIGxhbmcgPSAnYXItU0EnXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIG1vbWVudEhpanJpLmxvY2FsZShsYW5nKTtcclxuICAgIHJldHVybiBtb21lbnRIaWpyaShkYXRlKS5mb3JtYXQoZm9ybWF0KTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb0dyZWdvcmlhbkRhdGUoXHJcbiAgICBkYXRlOiBNb21lbnQsXHJcbiAgICBmb3JtYXQgPSAnWVlZWS1NTS1ERCcsXHJcbiAgICBsYW5nID0gJ2VuJ1xyXG4gICk6IHN0cmluZyB7XHJcbiAgICBtb21lbnRIaWpyaS5sb2NhbGUobGFuZyk7XHJcbiAgICBjb25zdCBtID0gbW9tZW50SGlqcmkuaUNvbnZlcnQudG9HcmVnb3JpYW4oXHJcbiAgICAgIGRhdGUueWVhcigpLFxyXG4gICAgICBkYXRlLm1vbnRoKCksXHJcbiAgICAgIGRhdGUuZGF0ZSgpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIG1vbWVudEhpanJpKG5ldyBEYXRlKG0uZ3ksIG0uZ20sIG0uZ2QpKS5mb3JtYXQoZm9ybWF0KTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRIaWpyaURhdGUoKSB7XHJcbiAgICBtb21lbnRIaWpyaS5sb2NhbGUoJ2VuJyk7XHJcbiAgICByZXR1cm4gbW9tZW50SGlqcmkoKS5mb3JtYXQoJ2lZWVlZL2lNTS9pREQnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmFsaWRhdG9yRXJyb3JNZXNzYWdlKFxyXG4gICAgdmFsaWRhdG9yTmFtZTogc3RyaW5nLFxyXG4gICAgdmFsaWRhdG9yVmFsdWU6IGFueSxcclxuICAgIHBhdHRlcm5FcnJvck1zZzogc3RyaW5nLFxyXG4gICAgaXNBcmFiaWM6IGJvb2xlYW5cclxuICApOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbGlkYXRvck5hbWUgPT09ICdwYXR0ZXJuJykge1xyXG4gICAgICB2YWxpZGF0b3JWYWx1ZSA9IHRoaXMuYWRkUGF0dGVybk1zZyh2YWxpZGF0b3JWYWx1ZSwgcGF0dGVybkVycm9yTXNnKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbmZpZzogYW55ID0ge1xyXG4gICAgICByZXF1aXJlZDogaXNBcmFiaWMgPyAn2YfYsNinINin2YTYrdmC2YQg2YXYt9mE2YjYqCcgOiAndGhpcyBmaWVsZCByZXF1aXJlZCcsXHJcbiAgICAgIHBhdHRlcm46IGAke3ZhbGlkYXRvclZhbHVlLm1lc3NhZ2V9YCxcclxuICAgICAgRW1haWw6XHJcbiAgICAgICAgKGlzQXJhYmljID8gJ9iu2LfYoyDZgdmKINin2YTYqNix2YrYryDYp9mE2KfZhNmD2KrYsdmI2YbZiiAnIDogJ0ludmFsaWQgZW1haWwgJykgK1xyXG4gICAgICAgICcoZXhhbXBsZUBleGFtcGxlLmNvbSknLFxyXG4gICAgICBtYXhsZW5ndGg6IGlzQXJhYmljXHJcbiAgICAgICAgPyBg2KrYrNin2YjYsiDYudiv2K8g2KfZhNit2YLZhCDYp9mE2YXYs9mF2YjYrSDYqNmH2KcgKCR7dmFsaWRhdG9yVmFsdWUucmVxdWlyZWRMZW5ndGh9KSDYrdix2YFgXHJcbiAgICAgICAgOiBgdGhpcyBmaWVsZCBpcyBtb3JlIHRoYW4gKCR7dmFsaWRhdG9yVmFsdWUucmVxdWlyZWRMZW5ndGh9KSBsZXR0ZXJgLFxyXG4gICAgICBtaW5sZW5ndGg6IGlzQXJhYmljXHJcbiAgICAgICAgPyBg2LnZhNmJINin2YTYo9mC2YQg2LnYr9ivICR7dmFsaWRhdG9yVmFsdWUucmVxdWlyZWRMZW5ndGh9INit2LHZgWBcclxuICAgICAgICA6IGB0aGlzIGZpZWxkIGlzIGxlc3MgdGhhbiAoJHt2YWxpZGF0b3JWYWx1ZS5yZXF1aXJlZExlbmd0aH0pIGxldHRlcmAsXHJcbiAgICAgIG1pbjogaXNBcmFiaWNcclxuICAgICAgICA/IGDYsdmC2YUg2KfZg9io2LEg2YXZhiDYo9mIINmK2LPYp9mI2YogJHt2YWxpZGF0b3JWYWx1ZS5taW59YFxyXG4gICAgICAgIDogYG51bWJlciBtb3JlIHRoYW4gb3IgZXF1YWwgKCR7dmFsaWRhdG9yVmFsdWUubWlufSlgLFxyXG4gICAgICBtYXg6IGlzQXJhYmljXHJcbiAgICAgICAgPyBg2LHZgtmFINin2LXYutixINmF2YYg2KPZiCDZitiz2KfZiNmKICR7dmFsaWRhdG9yVmFsdWUubWF4fWBcclxuICAgICAgICA6IGBudW1iZXIgbGVzcyB0aGFuIG9yIGVxdWFsICgke3ZhbGlkYXRvclZhbHVlLm1pbn0pYCxcclxuICAgICAgbmdiRGF0ZTogdGhpcy5nZXROZ2JEYXRlcGlja2VyRXJyb3JNc2codmFsaWRhdG9yVmFsdWUpLFxyXG4gICAgICBjaGVja0lkOiBpc0FyYWJpY1xyXG4gICAgICAgID8gJ9ix2YLZhSDYp9mE2YfZiNmK2Kkg2KPZiCDYp9mE2KfZgtin2YXYqSDYutmK2LEg2LXYrdmK2K0nXHJcbiAgICAgICAgOiAnV3JvbmcgSUQgb3IgSXFhbWEgbnVtYmVyJyxcclxuICAgICAgbGluazpcclxuICAgICAgICAoaXNBcmFiaWMgPyAn2KfZhNix2KfYqNi3INi62YrYsSDYtdit2YrYrSAnIDogJ1dyb25nIGxpbmsgJykgK1xyXG4gICAgICAgICcoaHR0cDovL2V4YW1wbGUuY29tKScsXHJcbiAgICAgIGxpbmtNUDQ6XHJcbiAgICAgICAgKGlzQXJhYmljID8gJ9ix2KfYqNi3IE1QNCDYutmK2LEg2LXYrdmK2K0gJyA6ICdXcm9uZyBNUDQgbGluayAnKSArXHJcbiAgICAgICAgJyhodHRwOi8vZXhhbXBsZS5jb20vZXhhbXBsZS5tcDQpJyxcclxuICAgICAgbW9iaWxlTm86XHJcbiAgICAgICAgKGlzQXJhYmljID8gJ9iu2LfYoyDZgdmKINix2YLZhSDYp9mE2KzZiNin2YQgJyA6ICdXcm9uZyBtb2JpbGUgbnVtYmVyICcpICtcclxuICAgICAgICAnKDA1eHh4eHh4eHgpJyxcclxuICAgIH07XHJcbiAgICByZXR1cm4gY29uZmlnW3ZhbGlkYXRvck5hbWVdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRQYXR0ZXJuTXNnKHZhbGlkYXRvclZhbHVlOiBhbnksIHBhdHRlcm5FcnJvck1zZzogc3RyaW5nKSB7XHJcbiAgICBsZXQgcGF0dGVybiA9IHtcclxuICAgICAgLi4udmFsaWRhdG9yVmFsdWUsXHJcbiAgICAgIG1lc3NhZ2U6IHBhdHRlcm5FcnJvck1zZyxcclxuICAgIH07XHJcbiAgICByZXR1cm4gcGF0dGVybjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TmdiRGF0ZXBpY2tlckVycm9yTXNnKHZhbGlkYXRvclZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1zZyA9ICcnO1xyXG4gICAgaWYgKHZhbGlkYXRvclZhbHVlLm1heERhdGUpIHtcclxuICAgICAgbXNnID0gYNin2YTYqtin2LHZitiuINin2YTZhdiv2K7ZhCBcIiR7dGhpcy5wYXJzZXJGb3JtYXR0ZXIuZm9ybWF0KFxyXG4gICAgICAgIHZhbGlkYXRvclZhbHVlLm1heERhdGUuYWN0dWFsXHJcbiAgICAgICl9XCIg2KfZg9io2LEg2YXZhiDYqtin2LHZitiuINin2YTZitmI2YUgXCIke3RoaXMucGFyc2VyRm9ybWF0dGVyLmZvcm1hdChcclxuICAgICAgICB2YWxpZGF0b3JWYWx1ZS5tYXhEYXRlLm1heERhdGVcclxuICAgICAgKX1cImA7XHJcbiAgICB9IGVsc2UgaWYgKHZhbGlkYXRvclZhbHVlLm1pbkRhdGUpIHtcclxuICAgICAgbXNnID0gYNin2YTYqtin2LHZitiuINin2YTZhdiv2K7ZhCBcIiR7dGhpcy5wYXJzZXJGb3JtYXR0ZXIuZm9ybWF0KFxyXG4gICAgICAgIHZhbGlkYXRvclZhbHVlLm1pbkRhdGUuYWN0dWFsXHJcbiAgICAgICl9XCIg2YrYrNioINin2YYg2YrZg9mI2YYg2KfZg9io2LEg2YXZhiDYo9mIINmK2LPYp9mI2Yog2KrYp9ix2YrYriDYp9mE2KjYr9in2YrYqSBcIiR7dGhpcy5wYXJzZXJGb3JtYXR0ZXIuZm9ybWF0KFxyXG4gICAgICAgIHZhbGlkYXRvclZhbHVlLm1pbkRhdGUubWluRGF0ZVxyXG4gICAgICApfVwiYDtcclxuICAgIH0gZWxzZSBpZiAodmFsaWRhdG9yVmFsdWUuaW52YWxpZCkge1xyXG4gICAgICBtc2cgPSBg2KfZhNiq2KfYsdmK2K4g2KfZhNmF2K/YrtmEINi62YrYsSDYtdit2YrYrSAke3ZhbGlkYXRvclZhbHVlLmludmFsaWR9LmA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbXNnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgY29udmVydFRvRW4odmFsdWU6IHN0cmluZykge1xyXG4gICAgbGV0IG5ld1ZhbHVlID0gJyc7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjaCA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgIGlmIChjaCA+PSAxNTg0ICYmIGNoIDw9IDE2NTApIHtcclxuICAgICAgICBsZXQgbmV3Q2hhciA9IGNoIC0gMTU4NDtcclxuICAgICAgICBuZXdWYWx1ZSA9IG5ld1ZhbHVlICsgU3RyaW5nLmZyb21DaGFyQ29kZShuZXdDaGFyKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdWYWx1ZSA9IG5ld1ZhbHVlICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG5hdGlvbmFsSWRWYWxpZGF0ZShjaXZpbElkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChjaXZpbElkKSB7XHJcbiAgICAgIGxldCBzdHJJRCA9IHRoaXMuY29udmVydFRvRW4oY2l2aWxJZCk7XHJcbiAgICAgIGxldCBkaWdpdHMgPSAnJztcclxuICAgICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgICB3aGlsZSAoY291bnRlciA8IDkpIHtcclxuICAgICAgICBpZiAoKGNvdW50ZXIgKyAxKSAlIDIgPT0gMCkge1xyXG4gICAgICAgICAgZGlnaXRzID0gZGlnaXRzICsgc3RySUQuc3Vic3RyaW5nKGNvdW50ZXIsIGNvdW50ZXIgKyAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZGlnaXRzID1cclxuICAgICAgICAgICAgZGlnaXRzICsgKCtzdHJJRC5zdWJzdHJpbmcoY291bnRlciwgY291bnRlciArIDEpICogMikudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY291bnRlcisrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBpbnRTdW0gPSAwO1xyXG4gICAgICBsZXQgaW50U3VtVGVtcCA9IDA7XHJcbiAgICAgIGxldCBzdHJTdW07XHJcbiAgICAgIGxldCBpbnRPZGRTdW1EaWdpdDtcclxuICAgICAgbGV0IENoZWNrRGlnaXQ7XHJcbiAgICAgIGNvdW50ZXIgPSAwO1xyXG4gICAgICB3aGlsZSAoY291bnRlciA8IGRpZ2l0cy5sZW5ndGgpIHtcclxuICAgICAgICBpbnRTdW1UZW1wID0gK2RpZ2l0cy5jaGFyQXQoY291bnRlcikgKiAxO1xyXG4gICAgICAgIGludFN1bSArPSBpbnRTdW1UZW1wO1xyXG4gICAgICAgIGNvdW50ZXIrKztcclxuICAgICAgfVxyXG4gICAgICBzdHJTdW0gPSBpbnRTdW0udG9TdHJpbmcoKTtcclxuICAgICAgaWYgKHN0clN1bS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIGludE9kZFN1bURpZ2l0ID0gaW50U3VtO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGludE9kZFN1bURpZ2l0ID0gc3RyU3VtLnN1YnN0cmluZyhzdHJTdW0ubGVuZ3RoLCBzdHJTdW0ubGVuZ3RoIC0gMSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGludE9kZFN1bURpZ2l0ID09IDApIHtcclxuICAgICAgICBDaGVja0RpZ2l0ID0gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBDaGVja0RpZ2l0ID0gKDEwIC0gK2ludE9kZFN1bURpZ2l0KS50b1N0cmluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBQdWJsaWNJRCA9IHRoaXMuY29udmVydFRvRW4oY2l2aWxJZCk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBDaGVja0RpZ2l0ID09XHJcbiAgICAgICAgICBQdWJsaWNJRC5zdWJzdHJpbmcoUHVibGljSUQubGVuZ3RoIC0gMSwgUHVibGljSUQubGVuZ3RoKSAmJlxyXG4gICAgICAgIHN0cklELmxlbmd0aCA9PSAxMCAmJlxyXG4gICAgICAgIHN0cklELnN1YnN0cmluZygwLCAxKSA9PSAnMSdcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBpcWFtYUlkVmFsaWRhdGUoY2l2aWxJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoY2l2aWxJZCkge1xyXG4gICAgICBsZXQgc3RySUQgPSB0aGlzLmNvbnZlcnRUb0VuKGNpdmlsSWQpO1xyXG4gICAgICBsZXQgZGlnaXRzID0gJyc7XHJcbiAgICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgICAgd2hpbGUgKGNvdW50ZXIgPCA5KSB7XHJcbiAgICAgICAgaWYgKChjb3VudGVyICsgMSkgJSAyID09IDApIHtcclxuICAgICAgICAgIGRpZ2l0cyA9IGRpZ2l0cyArIHN0cklELnN1YnN0cmluZyhjb3VudGVyLCBjb3VudGVyICsgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRpZ2l0cyA9XHJcbiAgICAgICAgICAgIGRpZ2l0cyArICgrc3RySUQuc3Vic3RyaW5nKGNvdW50ZXIsIGNvdW50ZXIgKyAxKSAqIDIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvdW50ZXIrKztcclxuICAgICAgfVxyXG4gICAgICBsZXQgaW50U3VtID0gMDtcclxuICAgICAgbGV0IGludFN1bVRlbXAgPSAwO1xyXG4gICAgICBsZXQgc3RyU3VtO1xyXG4gICAgICBsZXQgaW50T2RkU3VtRGlnaXQ7XHJcbiAgICAgIGxldCBDaGVja0RpZ2l0O1xyXG4gICAgICBjb3VudGVyID0gMDtcclxuICAgICAgd2hpbGUgKGNvdW50ZXIgPCBkaWdpdHMubGVuZ3RoKSB7XHJcbiAgICAgICAgaW50U3VtVGVtcCA9ICtkaWdpdHMuY2hhckF0KGNvdW50ZXIpICogMTtcclxuICAgICAgICBpbnRTdW0gKz0gaW50U3VtVGVtcDtcclxuICAgICAgICBjb3VudGVyKys7XHJcbiAgICAgIH1cclxuICAgICAgc3RyU3VtID0gaW50U3VtLnRvU3RyaW5nKCk7XHJcbiAgICAgIGlmIChzdHJTdW0ubGVuZ3RoID09IDEpIHtcclxuICAgICAgICBpbnRPZGRTdW1EaWdpdCA9IGludFN1bTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbnRPZGRTdW1EaWdpdCA9IHN0clN1bS5zdWJzdHJpbmcoc3RyU3VtLmxlbmd0aCwgc3RyU3VtLmxlbmd0aCAtIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpbnRPZGRTdW1EaWdpdCA9PSAwKSB7XHJcbiAgICAgICAgQ2hlY2tEaWdpdCA9IDA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgQ2hlY2tEaWdpdCA9ICgxMCAtICtpbnRPZGRTdW1EaWdpdCkudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgUHVibGljSUQgPSB0aGlzLmNvbnZlcnRUb0VuKGNpdmlsSWQpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgQ2hlY2tEaWdpdCA9PVxyXG4gICAgICAgICAgUHVibGljSUQuc3Vic3RyaW5nKFB1YmxpY0lELmxlbmd0aCAtIDEsIFB1YmxpY0lELmxlbmd0aCkgJiZcclxuICAgICAgICBzdHJJRC5sZW5ndGggPT0gMTAgJiZcclxuICAgICAgICBzdHJJRC5zdWJzdHJpbmcoMCwgMSkgPT0gJzInXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhLWZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWlwYS1saWJyYXJ5L3NyYy9saWIvaXBhLWZvcm0vaXBhLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sV0FBVyxNQUFNLGNBQWMsQ0FBQzs7O0FBT3ZDLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLGVBQXVDO1FBQXZDLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtJQUFHLENBQUM7SUFFL0Q7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQXdCO1FBQzVDLE1BQU0sV0FBVyxHQUNmLHVEQUF1RCxDQUFDLElBQUksQ0FDMUQsT0FBTyxDQUFDLEtBQUssQ0FDZCxDQUFDO1FBQ0osT0FBTyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUF3QjtRQUMvQyxNQUFNLFdBQVcsR0FDZixrRkFBa0YsQ0FBQyxJQUFJLENBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQ2QsQ0FBQztRQUNKLE9BQU8sV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQXdCO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sV0FB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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgbW9tZW50SGlqcmkgZnJvbSAnbW9tZW50LWhpanJpJztcclxuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgTmdiRGF0ZSwgTmdiRGF0ZVBhcnNlckZvcm1hdHRlciB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJUEFGb3JtU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJzZXJGb3JtYXR0ZXI6IE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNoZWNrIGxpbmsgaXMgdmFsaWQuXHJcbiAgICovXHJcbiAgc3RhdGljIGxpbmtWYWxpZGF0aW9uKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IGlzVmFsaWRMaW5rID1cclxuICAgICAgL14oKGh0dHBzPzpcXC9cXC8pW1xcdy1dKyhcXC5bYS16LV0rKStcXC4/KDpcXGQrKT8oXFwvXFxTKik/KSQvLnRlc3QoXHJcbiAgICAgICAgY29udHJvbC52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgcmV0dXJuIGlzVmFsaWRMaW5rIHx8ICFjb250cm9sLnZhbHVlID8gbnVsbCA6IHsgbGluazogdHJ1ZSB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogY2hlY2sgbXA0IGxpbmsgaXMgdmFsaWQuXHJcbiAgICovXHJcbiAgc3RhdGljIG1wNExpbmtWYWxpZGF0aW9uKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IGlzVmFsaWRMaW5rID1cclxuICAgICAgL14oKGh0dHBzPzpcXC9cXC8pW1xcdy1dKyhcXC5bYS16LV0rKStcXC4/KDpcXGQrKT8oXFwvXFxTKik/KFxcL1tcXHdcXHUwNjAwLVxcdTA2RkZdK1xcLm1wNCkpJC8udGVzdChcclxuICAgICAgICBjb250cm9sLnZhbHVlXHJcbiAgICAgICk7XHJcbiAgICByZXR1cm4gaXNWYWxpZExpbmsgfHwgIWNvbnRyb2wudmFsdWUgPyBudWxsIDogeyBsaW5rTVA0OiB0cnVlIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjaGVjayBtb2JpbGUgbnVtYmVyIGlzIHZhbGlkLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBtb2JpbGVObyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBpc1ZhbGlkTGluayA9IC9eMDVcXGR7OH0kLy50ZXN0KGNvbnRyb2wudmFsdWUpO1xyXG4gICAgcmV0dXJuIGlzVmFsaWRMaW5rIHx8ICFjb250cm9sLnZhbHVlID8gbnVsbCA6IHsgbW9iaWxlTm86IHRydWUgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNoZWNrIGVtYWlsIGlzIHZhbGlkLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBlbWFpbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBpc1ZhbGlkTGluayA9XHJcbiAgICAgIC9eKChbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdKyhcXC5bXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdKykqKXwoXFxcIi4rXFxcIikpQCgoW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXStcXC4pK1tePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl17Mix9KSQvLnRlc3QoXHJcbiAgICAgICAgY29udHJvbC52YWx1ZVxyXG4gICAgICApO1xyXG4gICAgcmV0dXJuIGlzVmFsaWRMaW5rIHx8ICFjb250cm9sLnZhbHVlID8gbnVsbCA6IHsgRW1haWw6IHRydWUgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNoZWNrIG5hdGlvbmFsIElEIG9yIGlxYW1hIElEIGlzIHZhbGlkLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBjaGVja0lEKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGxldCBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAoXHJcbiAgICAgIElQQUZvcm1TZXJ2aWNlLm5hdGlvbmFsSWRWYWxpZGF0ZSh2YWx1ZSkgfHxcclxuICAgICAgSVBBRm9ybVNlcnZpY2UuaXFhbWFJZFZhbGlkYXRlKHZhbHVlKVxyXG4gICAgKSB7XHJcbiAgICAgIGlzVmFsaWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVmFsaWQgfHwgIXZhbHVlID8gbnVsbCA6IHsgY2hlY2tJZDogdHJ1ZSB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHZhbGlkSGlqcmlEYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IGRhdGU6IE5nYkRhdGUgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgY29uc3QgaXNWYWxpZCA9IElQQUZvcm1TZXJ2aWNlLmNoZWNrSGlqcmlEYXRlVmFsaWQoZGF0ZSk7XHJcbiAgICByZXR1cm4gaXNWYWxpZFxyXG4gICAgICA/IG51bGxcclxuICAgICAgOiB7XHJcbiAgICAgICAgICBuZ2JEYXRlOiB7XHJcbiAgICAgICAgICAgIGludmFsaWQ6XHJcbiAgICAgICAgICAgICAgZGF0ZT8ueWVhciArXHJcbiAgICAgICAgICAgICAgJy0nICtcclxuICAgICAgICAgICAgICAoZGF0ZT8ubW9udGggPiAxMCA/IGRhdGU/Lm1vbnRoIDogJzAnICsgZGF0ZT8ubW9udGgpICtcclxuICAgICAgICAgICAgICAnLScgK1xyXG4gICAgICAgICAgICAgIChkYXRlPy5kYXkgPiAxMCA/IGRhdGU/LmRheSA6ICcwJyArIGRhdGU/LmRheSksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvck1lc3NhZ2UoXHJcbiAgICBjb250cm9sOiBGb3JtQ29udHJvbCxcclxuICAgIHBhdHRlcm5FcnJvck1zZyA9ICcnLFxyXG4gICAgaXNBcmFiaWM6IGJvb2xlYW5cclxuICApOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIGNvbnRyb2w/LmVycm9ycykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY29udHJvbD8uZXJyb3JzLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkgJiZcclxuICAgICAgICAoY29udHJvbC50b3VjaGVkIHx8IGNvbnRyb2wuZGlydHkpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhbGlkYXRvckVycm9yTWVzc2FnZShcclxuICAgICAgICAgIHByb3BlcnR5TmFtZSxcclxuICAgICAgICAgIGNvbnRyb2wuZXJyb3JzW3Byb3BlcnR5TmFtZV0sXHJcbiAgICAgICAgICBwYXR0ZXJuRXJyb3JNc2csXHJcbiAgICAgICAgICBpc0FyYWJpY1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogY29udmVydCBncmVnb3JpYW4gZGF0ZSB0byBoaWpyaSBkYXRlIChCYXNlZCBvbiBVbW0gYWwtUXVyYSBjYWxjdWxhdGlvbnMpLlxyXG4gICAqIEBwYXJhbSBkYXRlOiBncmVnb3JpYW4gZGF0ZVxyXG4gICAqIEBwYXJhbSBmb3JtYXQ6IGlERCA9PiBkYXk6INmh2aUsIGlNTSA9PiBtb250aDog2aDZpCwgaU1NTSA9PiBtb250aDog2LHYqNmK2Lkg2aIsXHJcbiAgICogICAgICAgICAgICAgICBpTU1NTSA9PiDYsdio2YrYuSDYp9mE2KvYp9mG2YosICBpWVkgPT4geWVhcjog2aTZoiwgaVlZWVkgPT4geWVhcjog2aHZpNmk2aIsXHJcbiAgICogICAgICAgICAgICAgICBkZCA9PiDZhiwgZGRkID0+INil2KvZhtmK2YYsIGRkZGQgPT4g2KfZhNil2KvZhtmK2YZcclxuICAgKiBAZXhhbXBsZSAnaVlZWVkvaU0vaUTZh9mAINin2YTZhdmI2KfZgdmCIFlZWVkvTS9E2YUnXHJcbiAgICogICAgICAgICAgICfZodmk2aTZoi/ZoNmkL9mh2aXZh9mAINin2YTZhdmI2KfZgdmCINmi2aDZotmgL9mh2aEv2aPZoCdcclxuICAgKi9cclxuICBjb252ZXJ0VG9IaWpyaURhdGUoXHJcbiAgICBkYXRlOiBzdHJpbmcsXHJcbiAgICBmb3JtYXQgPSAnaVlZWVktaU1NLWlERCcsXHJcbiAgICBsYW5nID0gJ2FyLVNBJ1xyXG4gICk6IHN0cmluZyB7XHJcbiAgICBtb21lbnRIaWpyaS5sb2NhbGUobGFuZyk7XHJcbiAgICByZXR1cm4gbW9tZW50SGlqcmkoZGF0ZSkuZm9ybWF0KGZvcm1hdCk7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9HcmVnb3JpYW5EYXRlKFxyXG4gICAgZGF0ZTogTW9tZW50LFxyXG4gICAgZm9ybWF0ID0gJ1lZWVktTU0tREQnLFxyXG4gICAgbGFuZyA9ICdlbidcclxuICApOiBzdHJpbmcge1xyXG4gICAgbW9tZW50SGlqcmkubG9jYWxlKGxhbmcpO1xyXG4gICAgY29uc3QgbSA9IG1vbWVudEhpanJpLmlDb252ZXJ0LnRvR3JlZ29yaWFuKFxyXG4gICAgICBkYXRlLnllYXIoKSxcclxuICAgICAgZGF0ZS5tb250aCgpLFxyXG4gICAgICBkYXRlLmRhdGUoKVxyXG4gICAgKTtcclxuICAgIHJldHVybiBtb21lbnRIaWpyaShuZXcgRGF0ZShtLmd5LCBtLmdtLCBtLmdkKSkuZm9ybWF0KGZvcm1hdCk7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50SGlqcmlEYXRlKCkge1xyXG4gICAgbW9tZW50SGlqcmkubG9jYWxlKCdlbicpO1xyXG4gICAgcmV0dXJuIG1vbWVudEhpanJpKCkuZm9ybWF0KCdpWVlZWS9pTU0vaUREJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFZhbGlkYXRvckVycm9yTWVzc2FnZShcclxuICAgIHZhbGlkYXRvck5hbWU6IHN0cmluZyxcclxuICAgIHZhbGlkYXRvclZhbHVlOiBhbnksXHJcbiAgICBwYXR0ZXJuRXJyb3JNc2c6IHN0cmluZyxcclxuICAgIGlzQXJhYmljOiBib29sZWFuXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWxpZGF0b3JOYW1lID09PSAncGF0dGVybicpIHtcclxuICAgICAgdmFsaWRhdG9yVmFsdWUgPSB0aGlzLmFkZFBhdHRlcm5Nc2codmFsaWRhdG9yVmFsdWUsIHBhdHRlcm5FcnJvck1zZyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb25maWc6IGFueSA9IHtcclxuICAgICAgcmVxdWlyZWQ6IGlzQXJhYmljID8gJ9mH2LDYpyDYp9mE2K3ZgtmEINmF2LfZhNmI2KgnIDogJ3RoaXMgZmllbGQgcmVxdWlyZWQnLFxyXG4gICAgICBwYXR0ZXJuOiBgJHt2YWxpZGF0b3JWYWx1ZS5tZXNzYWdlfWAsXHJcbiAgICAgIEVtYWlsOlxyXG4gICAgICAgIChpc0FyYWJpYyA/ICfYrti32KMg2YHZiiDYp9mE2KjYsdmK2K8g2KfZhNin2YTZg9iq2LHZiNmG2YogJyA6ICdJbnZhbGlkIGVtYWlsICcpICtcclxuICAgICAgICAnKGV4YW1wbGVAZXhhbXBsZS5jb20pJyxcclxuICAgICAgbWF4bGVuZ3RoOiBpc0FyYWJpY1xyXG4gICAgICAgID8gYNiq2KzYp9mI2LIg2LnYr9ivINin2YTYrdmC2YQg2KfZhNmF2LPZhdmI2K0g2KjZh9inICgke3ZhbGlkYXRvclZhbHVlLnJlcXVpcmVkTGVuZ3RofSkg2K3YsdmBYFxyXG4gICAgICAgIDogYHRoaXMgZmllbGQgaXMgbW9yZSB0aGFuICgke3ZhbGlkYXRvclZhbHVlLnJlcXVpcmVkTGVuZ3RofSkgbGV0dGVyYCxcclxuICAgICAgbWlubGVuZ3RoOiBpc0FyYWJpY1xyXG4gICAgICAgID8gYNi52YTZiSDYp9mE2KPZgtmEINi52K/YryAke3ZhbGlkYXRvclZhbHVlLnJlcXVpcmVkTGVuZ3RofSDYrdix2YFgXHJcbiAgICAgICAgOiBgdGhpcyBmaWVsZCBpcyBsZXNzIHRoYW4gKCR7dmFsaWRhdG9yVmFsdWUucmVxdWlyZWRMZW5ndGh9KSBsZXR0ZXJgLFxyXG4gICAgICBtaW46IGlzQXJhYmljXHJcbiAgICAgICAgPyBg2LHZgtmFINin2YPYqNixINmF2YYg2KPZiCDZitiz2KfZiNmKICR7dmFsaWRhdG9yVmFsdWUubWlufWBcclxuICAgICAgICA6IGBudW1iZXIgbW9yZSB0aGFuIG9yIGVxdWFsICgke3ZhbGlkYXRvclZhbHVlLm1pbn0pYCxcclxuICAgICAgbWF4OiBpc0FyYWJpY1xyXG4gICAgICAgID8gYNix2YLZhSDYp9i12LrYsSDZhdmGINij2Ygg2YrYs9in2YjZiiAke3ZhbGlkYXRvclZhbHVlLm1heH1gXHJcbiAgICAgICAgOiBgbnVtYmVyIGxlc3MgdGhhbiBvciBlcXVhbCAoJHt2YWxpZGF0b3JWYWx1ZS5taW59KWAsXHJcbiAgICAgIG5nYkRhdGU6IHRoaXMuZ2V0TmdiRGF0ZXBpY2tlckVycm9yTXNnKHZhbGlkYXRvclZhbHVlKSxcclxuICAgICAgY2hlY2tJZDogaXNBcmFiaWNcclxuICAgICAgICA/ICfYsdmC2YUg2KfZhNmH2YjZitipINij2Ygg2KfZhNin2YLYp9mF2Kkg2LrZitixINi12K3ZititJ1xyXG4gICAgICAgIDogJ1dyb25nIElEIG9yIElxYW1hIG51bWJlcicsXHJcbiAgICAgIGxpbms6XHJcbiAgICAgICAgKGlzQXJhYmljID8gJ9in2YTYsdin2KjYtyDYutmK2LEg2LXYrdmK2K0gJyA6ICdXcm9uZyBsaW5rICcpICtcclxuICAgICAgICAnKGh0dHA6Ly9leGFtcGxlLmNvbSknLFxyXG4gICAgICBsaW5rTVA0OlxyXG4gICAgICAgIChpc0FyYWJpYyA/ICfYsdin2KjYtyBNUDQg2LrZitixINi12K3ZititICcgOiAnV3JvbmcgTVA0IGxpbmsgJykgK1xyXG4gICAgICAgICcoaHR0cDovL2V4YW1wbGUuY29tL2V4YW1wbGUubXA0KScsXHJcbiAgICAgIG1vYmlsZU5vOlxyXG4gICAgICAgIChpc0FyYWJpYyA/ICfYrti32KMg2YHZiiDYsdmC2YUg2KfZhNis2YjYp9mEICcgOiAnV3JvbmcgbW9iaWxlIG51bWJlciAnKSArXHJcbiAgICAgICAgJygwNXh4eHh4eHh4KScsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGNvbmZpZ1t2YWxpZGF0b3JOYW1lXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkUGF0dGVybk1zZyh2YWxpZGF0b3JWYWx1ZTogYW55LCBwYXR0ZXJuRXJyb3JNc2c6IHN0cmluZykge1xyXG4gICAgbGV0IHBhdHRlcm4gPSB7XHJcbiAgICAgIC4uLnZhbGlkYXRvclZhbHVlLFxyXG4gICAgICBtZXNzYWdlOiBwYXR0ZXJuRXJyb3JNc2csXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHBhdHRlcm47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE5nYkRhdGVwaWNrZXJFcnJvck1zZyh2YWxpZGF0b3JWYWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIGxldCBtc2cgPSAnJztcclxuICAgIGlmICh2YWxpZGF0b3JWYWx1ZS5tYXhEYXRlKSB7XHJcbiAgICAgIG1zZyA9IGDYp9mE2KrYp9ix2YrYriDYp9mE2YXYr9iu2YQgXCIke3RoaXMucGFyc2VyRm9ybWF0dGVyLmZvcm1hdChcclxuICAgICAgICB2YWxpZGF0b3JWYWx1ZS5tYXhEYXRlLmFjdHVhbFxyXG4gICAgICApfVwiINin2YPYqNixINmF2YYg2KrYp9ix2YrYriDYp9mE2YrZiNmFIFwiJHt0aGlzLnBhcnNlckZvcm1hdHRlci5mb3JtYXQoXHJcbiAgICAgICAgdmFsaWRhdG9yVmFsdWUubWF4RGF0ZS5tYXhEYXRlXHJcbiAgICAgICl9XCJgO1xyXG4gICAgfSBlbHNlIGlmICh2YWxpZGF0b3JWYWx1ZS5taW5EYXRlKSB7XHJcbiAgICAgIG1zZyA9IGDYp9mE2KrYp9ix2YrYriDYp9mE2YXYr9iu2YQgXCIke3RoaXMucGFyc2VyRm9ybWF0dGVyLmZvcm1hdChcclxuICAgICAgICB2YWxpZGF0b3JWYWx1ZS5taW5EYXRlLmFjdHVhbFxyXG4gICAgICApfVwiINmK2KzYqCDYp9mGINmK2YPZiNmGINin2YPYqNixINmF2YYg2KPZiCDZitiz2KfZiNmKINiq2KfYsdmK2K4g2KfZhNio2K/Yp9mK2KkgXCIke3RoaXMucGFyc2VyRm9ybWF0dGVyLmZvcm1hdChcclxuICAgICAgICB2YWxpZGF0b3JWYWx1ZS5taW5EYXRlLm1pbkRhdGVcclxuICAgICAgKX1cImA7XHJcbiAgICB9IGVsc2UgaWYgKHZhbGlkYXRvclZhbHVlLmludmFsaWQpIHtcclxuICAgICAgbXNnID0gYNin2YTYqtin2LHZitiuINin2YTZhdiv2K7ZhCDYutmK2LEg2LXYrdmK2K0gJHt2YWxpZGF0b3JWYWx1ZS5pbnZhbGlkfS5gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1zZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGNoZWNrSGlqcmlEYXRlVmFsaWQoZGF0ZTogTmdiRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEoXHJcbiAgICAgIG1vbWVudEhpanJpLmlEYXlzSW5Nb250aChkYXRlPy55ZWFyLCBkYXRlPy5tb250aCAtIDEpIDwgZGF0ZT8uZGF5IHx8XHJcbiAgICAgIGRhdGU/LmRheSA8PSAwIHx8XHJcbiAgICAgIGRhdGU/Lm1vbnRoIDw9IDAgfHxcclxuICAgICAgZGF0ZT8ubW9udGggPiAxMiB8fFxyXG4gICAgICBkYXRlPy55ZWFyPy50b1N0cmluZygpLmxlbmd0aCAhPT0gNFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGNvbnZlcnRUb0VuKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGxldCBuZXdWYWx1ZSA9ICcnO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgY2ggPSB2YWx1ZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICBpZiAoY2ggPj0gMTU4NCAmJiBjaCA8PSAxNjUwKSB7XHJcbiAgICAgICAgbGV0IG5ld0NoYXIgPSBjaCAtIDE1ODQ7XHJcbiAgICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZSArIFN0cmluZy5mcm9tQ2hhckNvZGUobmV3Q2hhcik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBuYXRpb25hbElkVmFsaWRhdGUoY2l2aWxJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoY2l2aWxJZCkge1xyXG4gICAgICBsZXQgc3RySUQgPSB0aGlzLmNvbnZlcnRUb0VuKGNpdmlsSWQpO1xyXG4gICAgICBsZXQgZGlnaXRzID0gJyc7XHJcbiAgICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgICAgd2hpbGUgKGNvdW50ZXIgPCA5KSB7XHJcbiAgICAgICAgaWYgKChjb3VudGVyICsgMSkgJSAyID09IDApIHtcclxuICAgICAgICAgIGRpZ2l0cyA9IGRpZ2l0cyArIHN0cklELnN1YnN0cmluZyhjb3VudGVyLCBjb3VudGVyICsgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRpZ2l0cyA9XHJcbiAgICAgICAgICAgIGRpZ2l0cyArICgrc3RySUQuc3Vic3RyaW5nKGNvdW50ZXIsIGNvdW50ZXIgKyAxKSAqIDIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvdW50ZXIrKztcclxuICAgICAgfVxyXG4gICAgICBsZXQgaW50U3VtID0gMDtcclxuICAgICAgbGV0IGludFN1bVRlbXAgPSAwO1xyXG4gICAgICBsZXQgc3RyU3VtO1xyXG4gICAgICBsZXQgaW50T2RkU3VtRGlnaXQ7XHJcbiAgICAgIGxldCBDaGVja0RpZ2l0O1xyXG4gICAgICBjb3VudGVyID0gMDtcclxuICAgICAgd2hpbGUgKGNvdW50ZXIgPCBkaWdpdHMubGVuZ3RoKSB7XHJcbiAgICAgICAgaW50U3VtVGVtcCA9ICtkaWdpdHMuY2hhckF0KGNvdW50ZXIpICogMTtcclxuICAgICAgICBpbnRTdW0gKz0gaW50U3VtVGVtcDtcclxuICAgICAgICBjb3VudGVyKys7XHJcbiAgICAgIH1cclxuICAgICAgc3RyU3VtID0gaW50U3VtLnRvU3RyaW5nKCk7XHJcbiAgICAgIGlmIChzdHJTdW0ubGVuZ3RoID09IDEpIHtcclxuICAgICAgICBpbnRPZGRTdW1EaWdpdCA9IGludFN1bTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbnRPZGRTdW1EaWdpdCA9IHN0clN1bS5zdWJzdHJpbmcoc3RyU3VtLmxlbmd0aCwgc3RyU3VtLmxlbmd0aCAtIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpbnRPZGRTdW1EaWdpdCA9PSAwKSB7XHJcbiAgICAgICAgQ2hlY2tEaWdpdCA9IDA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgQ2hlY2tEaWdpdCA9ICgxMCAtICtpbnRPZGRTdW1EaWdpdCkudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgUHVibGljSUQgPSB0aGlzLmNvbnZlcnRUb0VuKGNpdmlsSWQpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgQ2hlY2tEaWdpdCA9PVxyXG4gICAgICAgICAgUHVibGljSUQuc3Vic3RyaW5nKFB1YmxpY0lELmxlbmd0aCAtIDEsIFB1YmxpY0lELmxlbmd0aCkgJiZcclxuICAgICAgICBzdHJJRC5sZW5ndGggPT0gMTAgJiZcclxuICAgICAgICBzdHJJRC5zdWJzdHJpbmcoMCwgMSkgPT0gJzEnXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgaXFhbWFJZFZhbGlkYXRlKGNpdmlsSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGNpdmlsSWQpIHtcclxuICAgICAgbGV0IHN0cklEID0gdGhpcy5jb252ZXJ0VG9FbihjaXZpbElkKTtcclxuICAgICAgbGV0IGRpZ2l0cyA9ICcnO1xyXG4gICAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICAgIHdoaWxlIChjb3VudGVyIDwgOSkge1xyXG4gICAgICAgIGlmICgoY291bnRlciArIDEpICUgMiA9PSAwKSB7XHJcbiAgICAgICAgICBkaWdpdHMgPSBkaWdpdHMgKyBzdHJJRC5zdWJzdHJpbmcoY291bnRlciwgY291bnRlciArIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkaWdpdHMgPVxyXG4gICAgICAgICAgICBkaWdpdHMgKyAoK3N0cklELnN1YnN0cmluZyhjb3VudGVyLCBjb3VudGVyICsgMSkgKiAyKS50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb3VudGVyKys7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGludFN1bSA9IDA7XHJcbiAgICAgIGxldCBpbnRTdW1UZW1wID0gMDtcclxuICAgICAgbGV0IHN0clN1bTtcclxuICAgICAgbGV0IGludE9kZFN1bURpZ2l0O1xyXG4gICAgICBsZXQgQ2hlY2tEaWdpdDtcclxuICAgICAgY291bnRlciA9IDA7XHJcbiAgICAgIHdoaWxlIChjb3VudGVyIDwgZGlnaXRzLmxlbmd0aCkge1xyXG4gICAgICAgIGludFN1bVRlbXAgPSArZGlnaXRzLmNoYXJBdChjb3VudGVyKSAqIDE7XHJcbiAgICAgICAgaW50U3VtICs9IGludFN1bVRlbXA7XHJcbiAgICAgICAgY291bnRlcisrO1xyXG4gICAgICB9XHJcbiAgICAgIHN0clN1bSA9IGludFN1bS50b1N0cmluZygpO1xyXG4gICAgICBpZiAoc3RyU3VtLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgaW50T2RkU3VtRGlnaXQgPSBpbnRTdW07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW50T2RkU3VtRGlnaXQgPSBzdHJTdW0uc3Vic3RyaW5nKHN0clN1bS5sZW5ndGgsIHN0clN1bS5sZW5ndGggLSAxKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaW50T2RkU3VtRGlnaXQgPT0gMCkge1xyXG4gICAgICAgIENoZWNrRGlnaXQgPSAwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIENoZWNrRGlnaXQgPSAoMTAgLSAraW50T2RkU3VtRGlnaXQpLnRvU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IFB1YmxpY0lEID0gdGhpcy5jb252ZXJ0VG9FbihjaXZpbElkKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIENoZWNrRGlnaXQgPT1cclxuICAgICAgICAgIFB1YmxpY0lELnN1YnN0cmluZyhQdWJsaWNJRC5sZW5ndGggLSAxLCBQdWJsaWNJRC5sZW5ndGgpICYmXHJcbiAgICAgICAgc3RySUQubGVuZ3RoID09IDEwICYmXHJcbiAgICAgICAgc3RySUQuc3Vic3RyaW5nKDAsIDEpID09ICcyJ1xyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL21vZGVscy9hcGlSZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBBcGlSZXNwb25zZSB7XHJcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxufVxyXG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pcGEtbGlicmFyeS9zcmMvbGliL21vZGVscy9hcGlSZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBBcGlSZXNwb25zZSB7XHJcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBlcnJvcnM/OiBzdHJpbmdbXTtcclxufVxyXG4iXX0=
@@ -105,6 +105,21 @@ class IPAFormService {
105
105
  }
106
106
  return isValid || !value ? null : { checkId: true };
107
107
  }
108
+ static validHijriDate(control) {
109
+ const date = control.value;
110
+ const isValid = IPAFormService.checkHijriDateValid(date);
111
+ return isValid
112
+ ? null
113
+ : {
114
+ ngbDate: {
115
+ invalid: (date === null || date === void 0 ? void 0 : date.year) +
116
+ '-' +
117
+ ((date === null || date === void 0 ? void 0 : date.month) > 10 ? date === null || date === void 0 ? void 0 : date.month : '0' + (date === null || date === void 0 ? void 0 : date.month)) +
118
+ '-' +
119
+ ((date === null || date === void 0 ? void 0 : date.day) > 10 ? date === null || date === void 0 ? void 0 : date.day : '0' + (date === null || date === void 0 ? void 0 : date.day)),
120
+ },
121
+ };
122
+ }
108
123
  getErrorMessage(control, patternErrorMsg = '', isArabic) {
109
124
  for (const propertyName in control === null || control === void 0 ? void 0 : control.errors) {
110
125
  if ((control === null || control === void 0 ? void 0 : control.errors.hasOwnProperty(propertyName)) &&
@@ -187,6 +202,14 @@ class IPAFormService {
187
202
  }
188
203
  return msg;
189
204
  }
205
+ static checkHijriDateValid(date) {
206
+ var _a;
207
+ return !(momentHijri.iDaysInMonth(date === null || date === void 0 ? void 0 : date.year, (date === null || date === void 0 ? void 0 : date.month) - 1) < (date === null || date === void 0 ? void 0 : date.day) ||
208
+ (date === null || date === void 0 ? void 0 : date.day) <= 0 ||
209
+ (date === null || date === void 0 ? void 0 : date.month) <= 0 ||
210
+ (date === null || date === void 0 ? void 0 : date.month) > 12 ||
211
+ ((_a = date === null || date === void 0 ? void 0 : date.year) === null || _a === void 0 ? void 0 : _a.toString().length) !== 4);
212
+ }
190
213
  static convertToEn(value) {
191
214
  let newValue = '';
192
215
  for (let i = 0; i < value.length; i++) {
@@ -500,7 +523,6 @@ class DropdownInputComponent {
500
523
  control === null || control === void 0 ? void 0 : control.setValidators(validators);
501
524
  control === null || control === void 0 ? void 0 : control.updateValueAndValidity();
502
525
  this.formControl = control;
503
- this.formControl.patchValue('');
504
526
  }
505
527
  onChange(event) { }
506
528
  onTouched() { }
@@ -636,7 +658,7 @@ class FileUploadComponent {
636
658
  this.currentFiles = [];
637
659
  }
638
660
  ngOnInit() {
639
- this.label = this.isArabicForm ? 'رفع ' : 'Upload ' + this.label;
661
+ this.label = (this.isArabicForm ? 'رفع ' : 'Upload ') + this.label;
640
662
  this.config = {
641
663
  url: this.apiUrl,
642
664
  method: this.method,
@@ -924,10 +946,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
924
946
  }] } });
925
947
 
926
948
  class DatepickerComponent {
927
- constructor(ipaFormService, calendar, controlDir, config) {
949
+ constructor(ipaFormService, calendar, controlDir, config, cd) {
928
950
  this.ipaFormService = ipaFormService;
929
951
  this.calendar = calendar;
930
952
  this.controlDir = controlDir;
953
+ this.cd = cd;
931
954
  this.label = 'datepicker';
932
955
  this.patternErrorMsg = 'invalid pattern';
933
956
  this.required = false;
@@ -936,10 +959,16 @@ class DatepickerComponent {
936
959
  this.formControl = new FormControl('');
937
960
  this.controlDir.valueAccessor = this;
938
961
  config.container = null;
962
+ config.placement = 'bottom-center';
963
+ }
964
+ ngAfterContentChecked() {
965
+ this.cd.detectChanges();
939
966
  }
940
967
  ngOnInit() {
941
968
  const control = this.controlDir.control;
942
969
  const validators = (control === null || control === void 0 ? void 0 : control.validator) ? [control.validator] : [];
970
+ if (this.isHijriDatepicker)
971
+ validators.push(IPAFormService.validHijriDate);
943
972
  control === null || control === void 0 ? void 0 : control.setValidators(validators);
944
973
  control === null || control === void 0 ? void 0 : control.updateValueAndValidity();
945
974
  this.formControl = control;
@@ -966,15 +995,15 @@ class DatepickerComponent {
966
995
  return this.errorMsg;
967
996
  }
968
997
  }
969
- DatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DatepickerComponent, deps: [{ token: IPAFormService }, { token: i2.NgbCalendar }, { token: i2$1.NgControl, self: true }, { token: i2.NgbInputDatepickerConfig }], target: i0.ɵɵFactoryTarget.Component });
970
- DatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: DatepickerComponent, selector: "ipa-datepicker", inputs: { id: "id", label: "label", patternErrorMsg: "patternErrorMsg", required: "required", maxDate: "maxDate", minDate: "minDate", classes: "classes", containerClasses: "containerClasses", isArabicForm: "isArabicForm" }, viewQueries: [{ propertyName: "datepicker", first: true, predicate: ["d"], descendants: true }], ngImport: i0, template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\"\r\n title=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"openDatepicker($event)\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"], directives: [{ type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
998
+ DatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DatepickerComponent, deps: [{ token: IPAFormService }, { token: i2.NgbCalendar }, { token: i2$1.NgControl, self: true }, { token: i2.NgbInputDatepickerConfig }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
999
+ DatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: DatepickerComponent, selector: "ipa-datepicker", inputs: { id: "id", label: "label", patternErrorMsg: "patternErrorMsg", required: "required", maxDate: "maxDate", minDate: "minDate", classes: "classes", containerClasses: "containerClasses", isArabicForm: "isArabicForm" }, viewQueries: [{ propertyName: "datepicker", first: true, predicate: ["d"], descendants: true }], ngImport: i0, template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\"\r\n placeholder=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"openDatepicker($event)\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"], directives: [{ type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
971
1000
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: DatepickerComponent, decorators: [{
972
1001
  type: Component,
973
- args: [{ selector: 'ipa-datepicker', template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\"\r\n title=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"openDatepicker($event)\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"] }]
1002
+ args: [{ selector: 'ipa-datepicker', template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\"\r\n placeholder=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"openDatepicker($event)\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"] }]
974
1003
  }], ctorParameters: function () {
975
1004
  return [{ type: IPAFormService }, { type: i2.NgbCalendar }, { type: i2$1.NgControl, decorators: [{
976
1005
  type: Self
977
- }] }, { type: i2.NgbInputDatepickerConfig }];
1006
+ }] }, { type: i2.NgbInputDatepickerConfig }, { type: i0.ChangeDetectorRef }];
978
1007
  }, propDecorators: { datepicker: [{
979
1008
  type: ViewChild,
980
1009
  args: ['d']
@@ -1034,18 +1063,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
1034
1063
  }] });
1035
1064
 
1036
1065
  class HijriDatepickerComponent extends DatepickerComponent {
1066
+ constructor() {
1067
+ super(...arguments);
1068
+ this.isHijriDatepicker = true;
1069
+ }
1037
1070
  }
1038
1071
  HijriDatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: HijriDatepickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1039
1072
  HijriDatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: HijriDatepickerComponent, selector: "ipa-hijri-datepicker", providers: [
1040
1073
  { provide: NgbCalendar, useClass: NgbCalendarIslamicUmalqura },
1041
1074
  { provide: NgbDatepickerI18n, useClass: IslamicI18n },
1042
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\"\r\n title=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"openDatepicker($event)\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"], directives: [{ type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1075
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\"\r\n placeholder=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"openDatepicker($event)\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"], directives: [{ type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1043
1076
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: HijriDatepickerComponent, decorators: [{
1044
1077
  type: Component,
1045
1078
  args: [{ selector: 'ipa-hijri-datepicker', providers: [
1046
1079
  { provide: NgbCalendar, useClass: NgbCalendarIslamicUmalqura },
1047
1080
  { provide: NgbDatepickerI18n, useClass: IslamicI18n },
1048
- ], template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\"\r\n title=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"openDatepicker($event)\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"] }]
1081
+ ], template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\"\r\n placeholder=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"openDatepicker($event)\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"] }]
1049
1082
  }] });
1050
1083
 
1051
1084
  const WEEKDAYS = ['ن', 'ث', 'ر', 'خ', 'ج', 'س', 'ح'];
@@ -1084,18 +1117,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
1084
1117
  }] });
1085
1118
 
1086
1119
  class GregorianDatepickerComponent extends DatepickerComponent {
1120
+ constructor() {
1121
+ super(...arguments);
1122
+ this.isHijriDatepicker = false;
1123
+ }
1087
1124
  }
1088
1125
  GregorianDatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: GregorianDatepickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1089
1126
  GregorianDatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: GregorianDatepickerComponent, selector: "ipa-gregorian-datepicker", providers: [
1090
1127
  { provide: NgbCalendar, useClass: NgbCalendarGregorian },
1091
1128
  { provide: NgbDatepickerI18n, useClass: Gregorian18n },
1092
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\"\r\n title=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"openDatepicker($event)\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"], directives: [{ type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1129
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\"\r\n placeholder=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"openDatepicker($event)\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"], directives: [{ type: i2.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1093
1130
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: GregorianDatepickerComponent, decorators: [{
1094
1131
  type: Component,
1095
1132
  args: [{ selector: 'ipa-gregorian-datepicker', providers: [
1096
1133
  { provide: NgbCalendar, useClass: NgbCalendarGregorian },
1097
1134
  { provide: NgbDatepickerI18n, useClass: Gregorian18n },
1098
- ], template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\"\r\n title=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"openDatepicker($event)\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"] }]
1135
+ ], template: "<div class=\"form-floating input-group {{containerClasses}}\">\r\n <input id=\"{{id}}\"\r\n [ngClass]=\"{'is-invalid is-invalid:focus': (controlDir.control?.invalid && (controlDir.control?.dirty || controlDir.control?.touched)) && errorMsg,'is-valid is-valid:focus': (controlDir.control?.valid && (controlDir.control?.dirty || controlDir.control?.touched) && (errorMsg || controlDir.value))}\"\r\n class=\"form-control {{classes}}\" [formControl]=\"formControl\" [firstDayOfWeek]=\"7\" ngbDatepicker\r\n #d=\"ngbDatepicker\" [maxDate]=\"maxDate\" [minDate]=\"minDate\" [footerTemplate]=\"footerTemplate\"\r\n [required]=\"required\" style=\"outline: unset; z-index: unset !important;\" autocomplete=\"off\" (blur)=\"onTouched()\"\r\n placeholder=\"{{label}}\">\r\n <label for=\"{{id}}\">{{label}}</label>\r\n <span class=\"input-group-text calenderBtn\" (click)=\"openDatepicker($event)\">\r\n <i class=\"far fa-calendar-alt fa-lg\"></i>\r\n </span>\r\n <div class=\"invalid-feedback\" *ngIf=\"errorMessage !== null\">\r\n {{errorMsg}}\r\n </div>\r\n <ng-template #footerTemplate style=\"text-align: center;\">\r\n <hr>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm m-2 \" style=\"width: auto; float: right;\"\r\n (click)=\"formControl.patchValue(today);d.navigateTo(today);\">\u0627\u0644\u064A\u0648\u0645</button>\r\n <button type=\"button\" class=\"btn btn-secondary btn-sm m-2\" style=\"width: auto; float: left;\"\r\n (click)=\"formControl.patchValue(null);d.close()\">\u0645\u0633\u062D</button>\r\n </ng-template>\r\n</div>", styles: [".calenderBtn{cursor:pointer;background-color:transparent;color:#6c757d;border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.calenderBtn:hover{color:#fff;background-color:#6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}\n"] }]
1099
1136
  }] });
1100
1137
 
1101
1138
  class ShareButtonComponent {
@@ -1342,7 +1379,6 @@ class ErrorInterceptor {
1342
1379
  return next.handle(req);
1343
1380
  }
1344
1381
  return next.handle(req).pipe(catchError((error) => {
1345
- var _a;
1346
1382
  const response = error.error;
1347
1383
  const toastrConfig = {
1348
1384
  disableTimeOut: true,
@@ -1351,17 +1387,13 @@ class ErrorInterceptor {
1351
1387
  };
1352
1388
  switch (response.statusCode) {
1353
1389
  case 500:
1354
- const msg = response.innerException + ' ' + ((_a = response.stackTrace) !== null && _a !== void 0 ? _a : '');
1355
- const toastr = this.toastrService.error(msg, response.message, toastrConfig);
1356
- toastr.onShown.subscribe(() => {
1357
- this.addCopyButton(response.message + '\n' + msg);
1358
- });
1390
+ this.show500ErrorMsg(response, toastrConfig);
1359
1391
  break;
1360
1392
  default:
1361
- this.toastrService.error('', response.message, toastrConfig);
1393
+ this.showErrorMsg(response, toastrConfig);
1362
1394
  break;
1363
1395
  }
1364
- return throwError(error);
1396
+ return throwError(() => error);
1365
1397
  }));
1366
1398
  }
1367
1399
  isException(req) {
@@ -1372,6 +1404,27 @@ class ErrorInterceptor {
1372
1404
  }
1373
1405
  return false;
1374
1406
  }
1407
+ showErrorMsg(response, toastrConfig) {
1408
+ if (response.errors && response.errors.length > 0) {
1409
+ toastrConfig.enableHtml = true;
1410
+ let msg = '';
1411
+ response.errors.forEach((error) => {
1412
+ msg += `<li>${error}</li>`;
1413
+ });
1414
+ this.toastrService.error(`<ul>${msg}</ul>`, response.message, toastrConfig);
1415
+ }
1416
+ else {
1417
+ this.toastrService.error('', response.message, toastrConfig);
1418
+ }
1419
+ }
1420
+ show500ErrorMsg(response, toastrConfig) {
1421
+ var _a;
1422
+ const msg = response.innerException + ' ' + ((_a = response.stackTrace) !== null && _a !== void 0 ? _a : '');
1423
+ const toastr = this.toastrService.error(msg, response.message, toastrConfig);
1424
+ toastr.onShown.subscribe(() => {
1425
+ this.addCopyButton(response.message + '\n' + msg);
1426
+ });
1427
+ }
1375
1428
  addCopyButton(message) {
1376
1429
  const messageToast = document.getElementsByClassName('toast-message')[0];
1377
1430
  const icon = document.createElement('i');