barsa-auth 2.3.158 → 2.3.163

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, EventEmitter, inject, Input, Output, ChangeDetectionStrategy, Component, NgZone, ViewChild, ViewChildren, input, TemplateRef, ComponentFactoryResolver, NgModule } from '@angular/core';
2
+ import { signal, EventEmitter, inject, Input, Output, ChangeDetectionStrategy, Component, NgZone, ViewChild, ViewChildren, input, TemplateRef, NgModule } from '@angular/core';
3
3
  import * as i3 from 'barsa-novin-ray-core';
4
4
  import { BaseController, BarsaApi, ViewBase, forbiddenValidator, mobile_regex, BaseComponent, getUniqueId, validateAllFormFields, PortalService, ApplicationCtrlrService, BaseModule, DynamicComponentService, BarsaNovinRayCoreModule } from 'barsa-novin-ray-core';
5
5
  import * as i1 from '@angular/common';
@@ -102,7 +102,7 @@ class LoginUserPassController extends BaseController {
102
102
  class LoginVerificationController extends BaseController {
103
103
  constructor(view) {
104
104
  super(view);
105
- this.canVerify = signal(false);
105
+ this.canVerify = signal(false, ...(ngDevMode ? [{ debugName: "canVerify" }] : /* istanbul ignore next */ []));
106
106
  this._httpClient = view.injector.get(HttpClient);
107
107
  }
108
108
  get form() {
@@ -166,8 +166,8 @@ class EnterMobileComponent extends ViewBase {
166
166
  super();
167
167
  this.otpSent = new EventEmitter();
168
168
  this.controller = new LoginMobileController(this);
169
- this.loading = signal(false);
170
- this.isValid = signal(false);
169
+ this.loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
170
+ this.isValid = signal(false, ...(ngDevMode ? [{ debugName: "isValid" }] : /* istanbul ignore next */ []));
171
171
  /** Inserted by Angular inject() migration for backwards compatibility */
172
172
  this.fb = inject(FormBuilder);
173
173
  this.form = this.fb.group({
@@ -203,10 +203,10 @@ class EnterMobileComponent extends ViewBase {
203
203
  onSendCode() {
204
204
  this.controller.sendCode(this.otpProvider, this.form.value);
205
205
  }
206
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: EnterMobileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
207
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: EnterMobileComponent, isStandalone: false, selector: "ba-enter-mobile", inputs: { errorTemplate: "errorTemplate", otpProvider: "otpProvider", mobileDescription: "mobileDescription", usernameDescription: "usernameDescription", usernameLabel: "usernameLabel" }, outputs: { otpSent: "otpSent" }, usesInheritance: true, ngImport: i0, template: "<form class=\"tw-mt-2\" [formGroup]=\"form\">\r\n @if(usernameLabel){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\">\r\n {{usernameLabel}}\r\n </label>\r\n @if(usernameDescription){\r\n <div [innerHtml]=\"usernameDescription | sanitizeText\" class=\"tw-text-gray-500 tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched) && username?.errors.length\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">{{usernameLabel}} \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A</div>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"tw-mb-4\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 </label>\r\n @if(mobileDescription){\r\n <div [innerHtml]=\"mobileDescription | sanitizeText\" class=\"tw-text-gray-500 tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"mobile\"\r\n formControlName=\"mobile\"\r\n placeholder=\"09121234567\"\r\n maxlength=\"11\"\r\n type=\"tel\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"mobile.invalid && (mobile.dirty || mobile.touched) && mobile?.errors.length\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">\u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A</div>\r\n </div>\r\n </div>\r\n\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'\u0627\u0631\u0633\u0627\u0644 \u06A9\u062F \u062A\u0627\u06CC\u06CC\u062F'\"\r\n [valid]=\"isValid()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.ButtonLoadingComponent, selector: "bnrc-button-loading", inputs: ["valid", "loading", "text", "transparent"] }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i3.SanitizeTextPipe, name: "sanitizeText" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
206
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: EnterMobileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
207
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: EnterMobileComponent, isStandalone: false, selector: "ba-enter-mobile", inputs: { errorTemplate: "errorTemplate", otpProvider: "otpProvider", mobileDescription: "mobileDescription", usernameDescription: "usernameDescription", usernameLabel: "usernameLabel" }, outputs: { otpSent: "otpSent" }, usesInheritance: true, ngImport: i0, template: "<form class=\"tw-mt-2\" [formGroup]=\"form\">\r\n @if(usernameLabel){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\">\r\n {{usernameLabel}}\r\n </label>\r\n @if(usernameDescription){\r\n <div [innerHtml]=\"usernameDescription | sanitizeText\" class=\"tw-text-gray-500 tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched) && username?.errors.length\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">{{usernameLabel}} \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A</div>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"tw-mb-4\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 </label>\r\n @if(mobileDescription){\r\n <div [innerHtml]=\"mobileDescription | sanitizeText\" class=\"tw-text-gray-500 tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"mobile\"\r\n formControlName=\"mobile\"\r\n placeholder=\"09121234567\"\r\n maxlength=\"11\"\r\n type=\"tel\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"mobile.invalid && (mobile.dirty || mobile.touched) && mobile?.errors.length\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">\u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A</div>\r\n </div>\r\n </div>\r\n\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'\u0627\u0631\u0633\u0627\u0644 \u06A9\u062F \u062A\u0627\u06CC\u06CC\u062F'\"\r\n [valid]=\"isValid()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.ButtonLoadingComponent, selector: "bnrc-button-loading", inputs: ["valid", "loading", "text", "transparent"] }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i3.SanitizeTextPipe, name: "sanitizeText" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
208
208
  }
209
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: EnterMobileComponent, decorators: [{
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: EnterMobileComponent, decorators: [{
210
210
  type: Component,
211
211
  args: [{ selector: 'ba-enter-mobile', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<form class=\"tw-mt-2\" [formGroup]=\"form\">\r\n @if(usernameLabel){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\">\r\n {{usernameLabel}}\r\n </label>\r\n @if(usernameDescription){\r\n <div [innerHtml]=\"usernameDescription | sanitizeText\" class=\"tw-text-gray-500 tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched) && username?.errors.length\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">{{usernameLabel}} \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A</div>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"tw-mb-4\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 </label>\r\n @if(mobileDescription){\r\n <div [innerHtml]=\"mobileDescription | sanitizeText\" class=\"tw-text-gray-500 tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"mobile\"\r\n formControlName=\"mobile\"\r\n placeholder=\"09121234567\"\r\n maxlength=\"11\"\r\n type=\"tel\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"mobile.invalid && (mobile.dirty || mobile.touched) && mobile?.errors.length\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">\u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647 \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A</div>\r\n </div>\r\n </div>\r\n\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'\u0627\u0631\u0633\u0627\u0644 \u06A9\u062F \u062A\u0627\u06CC\u06CC\u062F'\"\r\n [valid]=\"isValid()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n" }]
212
212
  }], ctorParameters: () => [], propDecorators: { otpSent: [{
@@ -227,9 +227,9 @@ class TimerCountDownComponent extends BaseComponent {
227
227
  constructor() {
228
228
  super(...arguments);
229
229
  this.resend = new EventEmitter();
230
- this.showResend = signal(false);
231
- this.minutesText = signal('');
232
- this.secondText = signal('');
230
+ this.showResend = signal(false, ...(ngDevMode ? [{ debugName: "showResend" }] : /* istanbul ignore next */ []));
231
+ this.minutesText = signal('', ...(ngDevMode ? [{ debugName: "minutesText" }] : /* istanbul ignore next */ []));
232
+ this.secondText = signal('', ...(ngDevMode ? [{ debugName: "secondText" }] : /* istanbul ignore next */ []));
233
233
  }
234
234
  ngOnInit() {
235
235
  super.ngOnInit();
@@ -276,10 +276,10 @@ class TimerCountDownComponent extends BaseComponent {
276
276
  this.showResend.set(true);
277
277
  }
278
278
  }
279
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TimerCountDownComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
280
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: TimerCountDownComponent, isStandalone: false, selector: "ba-timer-countdown", inputs: { minutes: "minutes", loading: "loading" }, outputs: { resend: "resend" }, usesInheritance: true, ngImport: i0, template: "@if(showResend()){\r\n<bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'\u0627\u0631\u0633\u0627\u0644 \u0645\u062C\u062F\u062F'\"\r\n [valid]=\"true\"\r\n [loading]=\"loading\"\r\n [transparent]=\"true\"\r\n (click)=\"resend.emit()\"\r\n></bnrc-button-loading>\r\n}@else{\r\n<div class=\"tw-text-center\">\r\n <div\r\n id=\"timer\"\r\n class=\"tw-px-2 tw-flex tw-flex-row-reverse gap-2 tw-justify-center tw-uppercase\"\r\n style=\"align-items: center; color: var(--button-loading)\"\r\n [style.visibility]=\"minutesText() ? 'visible' : 'hidden'\"\r\n >\r\n <div>\r\n <span class=\"tw-text-xl\">{{ minutesText() }}</span>\r\n </div>\r\n <div class=\"tw-text-2xl\">:</div>\r\n <div>\r\n <span class=\"tw-text-xl\">{{ secondText() }}</span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n}\r\n", styles: [":host{display:block;width:10rem}:host ::ng-deep button{padding:4px!important}:host ::ng-deep .button__text{font-weight:400!important}\n"], dependencies: [{ kind: "component", type: i3.ButtonLoadingComponent, selector: "bnrc-button-loading", inputs: ["valid", "loading", "text", "transparent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
279
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TimerCountDownComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
280
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: TimerCountDownComponent, isStandalone: false, selector: "ba-timer-countdown", inputs: { minutes: "minutes", loading: "loading" }, outputs: { resend: "resend" }, usesInheritance: true, ngImport: i0, template: "@if(showResend()){\r\n<bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'\u0627\u0631\u0633\u0627\u0644 \u0645\u062C\u062F\u062F'\"\r\n [valid]=\"true\"\r\n [loading]=\"loading\"\r\n [transparent]=\"true\"\r\n (click)=\"resend.emit()\"\r\n></bnrc-button-loading>\r\n}@else{\r\n<div class=\"tw-text-center\">\r\n <div\r\n id=\"timer\"\r\n class=\"tw-px-2 tw-flex tw-flex-row-reverse gap-2 tw-justify-center tw-uppercase\"\r\n style=\"align-items: center; color: var(--button-loading)\"\r\n [style.visibility]=\"minutesText() ? 'visible' : 'hidden'\"\r\n >\r\n <div>\r\n <span class=\"tw-text-xl\">{{ minutesText() }}</span>\r\n </div>\r\n <div class=\"tw-text-2xl\">:</div>\r\n <div>\r\n <span class=\"tw-text-xl\">{{ secondText() }}</span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n}\r\n", styles: [":host{display:block;width:10rem}:host ::ng-deep button{padding:4px!important}:host ::ng-deep .button__text{font-weight:400!important}\n"], dependencies: [{ kind: "component", type: i3.ButtonLoadingComponent, selector: "bnrc-button-loading", inputs: ["valid", "loading", "text", "transparent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
281
281
  }
282
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TimerCountDownComponent, decorators: [{
282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: TimerCountDownComponent, decorators: [{
283
283
  type: Component,
284
284
  args: [{ selector: 'ba-timer-countdown', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if(showResend()){\r\n<bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'\u0627\u0631\u0633\u0627\u0644 \u0645\u062C\u062F\u062F'\"\r\n [valid]=\"true\"\r\n [loading]=\"loading\"\r\n [transparent]=\"true\"\r\n (click)=\"resend.emit()\"\r\n></bnrc-button-loading>\r\n}@else{\r\n<div class=\"tw-text-center\">\r\n <div\r\n id=\"timer\"\r\n class=\"tw-px-2 tw-flex tw-flex-row-reverse gap-2 tw-justify-center tw-uppercase\"\r\n style=\"align-items: center; color: var(--button-loading)\"\r\n [style.visibility]=\"minutesText() ? 'visible' : 'hidden'\"\r\n >\r\n <div>\r\n <span class=\"tw-text-xl\">{{ minutesText() }}</span>\r\n </div>\r\n <div class=\"tw-text-2xl\">:</div>\r\n <div>\r\n <span class=\"tw-text-xl\">{{ secondText() }}</span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n}\r\n", styles: [":host{display:block;width:10rem}:host ::ng-deep button{padding:4px!important}:host ::ng-deep .button__text{font-weight:400!important}\n"] }]
285
285
  }], propDecorators: { resend: [{
@@ -297,12 +297,12 @@ class VerificationComponent extends ViewBase {
297
297
  this.otpVerified = new EventEmitter();
298
298
  this.changeMobile = new EventEmitter();
299
299
  this.controller = new LoginVerificationController(this);
300
- this.capId = signal('-');
301
- this.resendLoading = signal(false);
302
- this.loading = signal(false);
303
- this.showCaptcha = signal(false);
300
+ this.capId = signal('-', ...(ngDevMode ? [{ debugName: "capId" }] : /* istanbul ignore next */ []));
301
+ this.resendLoading = signal(false, ...(ngDevMode ? [{ debugName: "resendLoading" }] : /* istanbul ignore next */ []));
302
+ this.loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
303
+ this.showCaptcha = signal(false, ...(ngDevMode ? [{ debugName: "showCaptcha" }] : /* istanbul ignore next */ []));
304
304
  this._ngZone = inject(NgZone);
305
- this.now = signal(getUniqueId(3));
305
+ this.now = signal(getUniqueId(3), ...(ngDevMode ? [{ debugName: "now" }] : /* istanbul ignore next */ []));
306
306
  this.fb = inject(FormBuilder);
307
307
  this.form = this.fb.group({
308
308
  in1: ['', Validators.compose([Validators.required, Validators.maxLength(6)])],
@@ -352,10 +352,10 @@ class VerificationComponent extends ViewBase {
352
352
  get canVerify() {
353
353
  return this.controller.canVerify();
354
354
  }
355
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: VerificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
356
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: VerificationComponent, isStandalone: false, selector: "ba-verification", inputs: { mobile: "mobile", otpProvider: "otpProvider", errorTemplate: "errorTemplate" }, outputs: { otpVerified: "otpVerified", changeMobile: "changeMobile" }, viewQueries: [{ propertyName: "_timerCountDown", first: true, predicate: TimerCountDownComponent, descendants: true }, { propertyName: "_loadingBtn", first: true, predicate: ["loadingBtn"], descendants: true }, { propertyName: "_inputsEl", predicate: ["inputv"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<form class=\"tw-pb-8 tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <label class=\"tw-block tw-w-full tw-text-gray-500 tw-text-md tw-font-bold tw-mb-4 tw-text-sm\">\r\n \u06A9\u062F \u0627\u0631\u0633\u0627\u0644 \u0634\u062F\u0647 \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 <strong>{{ mobile }}</strong> \u0631\u0627 \u0648\u0627\u0631\u062F \u0646\u0645\u0627\u06CC\u06CC\u062F.\r\n </label>\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-cursor-pointer tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4\"\r\n (click)=\"changeMobile.emit()\"\r\n >\u0648\u06CC\u0631\u0627\u06CC\u0634 \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"tw-w-6\">\r\n <path\r\n d=\"M5,18H9.24a1,1,0,0,0,.71-.29l6.92-6.93h0L19.71,8a1,1,0,0,0,0-1.42L15.47,2.29a1,1,0,0,0-1.42,0L11.23,5.12h0L4.29,12.05a1,1,0,0,0-.29.71V17A1,1,0,0,0,5,18ZM14.76,4.41l2.83,2.83L16.17,8.66,13.34,5.83ZM6,13.17l5.93-5.93,2.83,2.83L8.83,16H6ZM21,20H3a1,1,0,0,0,0,2H21a1,1,0,0,0,0-2Z\"\r\n fill=\"#316bec\"\r\n />\r\n </svg>\r\n </a>\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-3 tw-mb-4\">\r\n <input\r\n #inputv\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n maxlength=\"6\"\r\n tabindex=\"0\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n name=\"in1\"\r\n [autoUpdate]=\"true\"\r\n appWebotp\r\n formControlName=\"in1\"\r\n />\r\n <ba-timer-countdown [minutes]=\"2\" (resend)=\"onResendOtp()\" [loading]=\"resendLoading()\"></ba-timer-countdown>\r\n </div>\r\n <div\r\n *ngIf=\"in1.invalid && (in1.dirty || in1.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"in1.errors?.['required']\">\u06A9\u062F \u062A\u0627\u06CC\u06CC\u062F \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A</div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-2\">\r\n <bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'\u062A\u0627\u06CC\u06CC\u062F \u06A9\u062F'\"\r\n [valid]=\"canVerify\"\r\n [loading]=\"loading()\"\r\n (click)=\"onVerifyCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <div\r\n class=\"tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.ButtonLoadingComponent, selector: "bnrc-button-loading", inputs: ["valid", "loading", "text", "transparent"] }, { kind: "directive", type: i3.WebOtpDirective, selector: "[appWebotp]", inputs: ["autoUpdate"], outputs: ["otpRecieved"] }, { kind: "component", type: TimerCountDownComponent, selector: "ba-timer-countdown", inputs: ["minutes", "loading"], outputs: ["resend"] }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
355
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: VerificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
356
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.17", type: VerificationComponent, isStandalone: false, selector: "ba-verification", inputs: { mobile: "mobile", otpProvider: "otpProvider", errorTemplate: "errorTemplate" }, outputs: { otpVerified: "otpVerified", changeMobile: "changeMobile" }, viewQueries: [{ propertyName: "_timerCountDown", first: true, predicate: TimerCountDownComponent, descendants: true }, { propertyName: "_loadingBtn", first: true, predicate: ["loadingBtn"], descendants: true }, { propertyName: "_inputsEl", predicate: ["inputv"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<form class=\"tw-pb-8 tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <label class=\"tw-block tw-w-full tw-text-gray-500 tw-text-md tw-font-bold tw-mb-4 tw-text-sm\">\r\n \u06A9\u062F \u0627\u0631\u0633\u0627\u0644 \u0634\u062F\u0647 \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 <strong>{{ mobile }}</strong> \u0631\u0627 \u0648\u0627\u0631\u062F \u0646\u0645\u0627\u06CC\u06CC\u062F.\r\n </label>\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-cursor-pointer tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4\"\r\n (click)=\"changeMobile.emit()\"\r\n >\u0648\u06CC\u0631\u0627\u06CC\u0634 \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"tw-w-6\">\r\n <path\r\n d=\"M5,18H9.24a1,1,0,0,0,.71-.29l6.92-6.93h0L19.71,8a1,1,0,0,0,0-1.42L15.47,2.29a1,1,0,0,0-1.42,0L11.23,5.12h0L4.29,12.05a1,1,0,0,0-.29.71V17A1,1,0,0,0,5,18ZM14.76,4.41l2.83,2.83L16.17,8.66,13.34,5.83ZM6,13.17l5.93-5.93,2.83,2.83L8.83,16H6ZM21,20H3a1,1,0,0,0,0,2H21a1,1,0,0,0,0-2Z\"\r\n fill=\"#316bec\"\r\n />\r\n </svg>\r\n </a>\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-3 tw-mb-4\">\r\n <input\r\n #inputv\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n maxlength=\"6\"\r\n tabindex=\"0\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n name=\"in1\"\r\n [autoUpdate]=\"true\"\r\n appWebotp\r\n formControlName=\"in1\"\r\n />\r\n <ba-timer-countdown [minutes]=\"2\" (resend)=\"onResendOtp()\" [loading]=\"resendLoading()\"></ba-timer-countdown>\r\n </div>\r\n <div\r\n *ngIf=\"in1.invalid && (in1.dirty || in1.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"in1.errors?.['required']\">\u06A9\u062F \u062A\u0627\u06CC\u06CC\u062F \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A</div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-2\">\r\n <bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'\u062A\u0627\u06CC\u06CC\u062F \u06A9\u062F'\"\r\n [valid]=\"canVerify\"\r\n [loading]=\"loading()\"\r\n (click)=\"onVerifyCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <div\r\n class=\"tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.ButtonLoadingComponent, selector: "bnrc-button-loading", inputs: ["valid", "loading", "text", "transparent"] }, { kind: "directive", type: i3.WebOtpDirective, selector: "[appWebotp]", inputs: ["autoUpdate"], outputs: ["otpRecieved"] }, { kind: "component", type: TimerCountDownComponent, selector: "ba-timer-countdown", inputs: ["minutes", "loading"], outputs: ["resend"] }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
357
357
  }
358
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: VerificationComponent, decorators: [{
358
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: VerificationComponent, decorators: [{
359
359
  type: Component,
360
360
  args: [{ selector: 'ba-verification', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<form class=\"tw-pb-8 tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <label class=\"tw-block tw-w-full tw-text-gray-500 tw-text-md tw-font-bold tw-mb-4 tw-text-sm\">\r\n \u06A9\u062F \u0627\u0631\u0633\u0627\u0644 \u0634\u062F\u0647 \u0628\u0647 \u0634\u0645\u0627\u0631\u0647 <strong>{{ mobile }}</strong> \u0631\u0627 \u0648\u0627\u0631\u062F \u0646\u0645\u0627\u06CC\u06CC\u062F.\r\n </label>\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-cursor-pointer tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4\"\r\n (click)=\"changeMobile.emit()\"\r\n >\u0648\u06CC\u0631\u0627\u06CC\u0634 \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"tw-w-6\">\r\n <path\r\n d=\"M5,18H9.24a1,1,0,0,0,.71-.29l6.92-6.93h0L19.71,8a1,1,0,0,0,0-1.42L15.47,2.29a1,1,0,0,0-1.42,0L11.23,5.12h0L4.29,12.05a1,1,0,0,0-.29.71V17A1,1,0,0,0,5,18ZM14.76,4.41l2.83,2.83L16.17,8.66,13.34,5.83ZM6,13.17l5.93-5.93,2.83,2.83L8.83,16H6ZM21,20H3a1,1,0,0,0,0,2H21a1,1,0,0,0,0-2Z\"\r\n fill=\"#316bec\"\r\n />\r\n </svg>\r\n </a>\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-3 tw-mb-4\">\r\n <input\r\n #inputv\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n maxlength=\"6\"\r\n tabindex=\"0\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n name=\"in1\"\r\n [autoUpdate]=\"true\"\r\n appWebotp\r\n formControlName=\"in1\"\r\n />\r\n <ba-timer-countdown [minutes]=\"2\" (resend)=\"onResendOtp()\" [loading]=\"resendLoading()\"></ba-timer-countdown>\r\n </div>\r\n <div\r\n *ngIf=\"in1.invalid && (in1.dirty || in1.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"in1.errors?.['required']\">\u06A9\u062F \u062A\u0627\u06CC\u06CC\u062F \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A</div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-2\">\r\n <bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'\u062A\u0627\u06CC\u06CC\u062F \u06A9\u062F'\"\r\n [valid]=\"canVerify\"\r\n [loading]=\"loading()\"\r\n (click)=\"onVerifyCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <div\r\n class=\"tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n" }]
361
361
  }], ctorParameters: () => [], propDecorators: { _timerCountDown: [{
@@ -384,11 +384,11 @@ class UserPassComponent extends ViewBase {
384
384
  super();
385
385
  this.loggedIn = new EventEmitter();
386
386
  this.controller = new LoginUserPassController(this);
387
- this.canLogin = signal(false);
388
- this.loading = signal(false);
389
- this.capId = signal(getUniqueId(4));
390
- this.now = signal(getUniqueId(3));
391
- this.showCaptcha = signal(false);
387
+ this.canLogin = signal(false, ...(ngDevMode ? [{ debugName: "canLogin" }] : /* istanbul ignore next */ []));
388
+ this.loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
389
+ this.capId = signal(getUniqueId(4), ...(ngDevMode ? [{ debugName: "capId" }] : /* istanbul ignore next */ []));
390
+ this.now = signal(getUniqueId(3), ...(ngDevMode ? [{ debugName: "now" }] : /* istanbul ignore next */ []));
391
+ this.showCaptcha = signal(false, ...(ngDevMode ? [{ debugName: "showCaptcha" }] : /* istanbul ignore next */ []));
392
392
  /** Inserted by Angular inject() migration for backwards compatibility */
393
393
  this.fb = inject(FormBuilder);
394
394
  this.form = this.fb.group({
@@ -435,10 +435,10 @@ class UserPassComponent extends ViewBase {
435
435
  validateAllFormFields(this.form);
436
436
  this.canLogin() && !this.loading() && this.controller.login(this.form.value);
437
437
  }
438
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: UserPassComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
439
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: UserPassComponent, isStandalone: false, selector: "ba-user-pass", inputs: { errorTemplate: "errorTemplate", otpProvider: "otpProvider" }, outputs: { loggedIn: "loggedIn" }, usesInheritance: true, ngImport: i0, template: "<form class=\"tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC </label>\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"username.errors?.['required']\">\u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 </label>\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"password\"\r\n formControlName=\"password\"\r\n placeholder=\"\"\r\n type=\"password\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"password.invalid && (password.dirty || password.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"password.errors?.['required']\">\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n @if(showCaptcha()){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-flex tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\">\r\n \u0639\u0628\u0627\u0631\u062A \u0627\u0645\u0646\u06CC\u062A\u06CC\r\n </label>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <input\r\n class=\"tw-w-full tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"cap\"\r\n formControlName=\"cap\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <img class=\"tw-w-36\" [src]=\"'/api/auth/captcha?capId=' + capId() + '&t=' + now()\" loading=\"lazy\"/>\r\n <button\r\n class=\"btn btn-outline-primary btn-sm !tw-border-none tw-w-12 tw-h-8 tw-flex tw-items-center tw-justify-center\"\r\n type=\"button\"\r\n [disabled]=\"loading()\"\r\n (click)=\"onRefreshCaptcha()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"28\"\r\n height=\"28\"\r\n fill=\"currentColor\"\r\n class=\"bi bi-bootstrap-reboot\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n d=\"M1.161 8a6.84 6.84 0 1 0 6.842-6.84.58.58 0 1 1 0-1.16 8 8 0 1 1-6.556 3.412l-.663-.577a.58.58 0 0 1 .227-.997l2.52-.69a.58.58 0 0 1 .728.633l-.332 2.592a.58.58 0 0 1-.956.364l-.643-.56A6.8 6.8 0 0 0 1.16 8z\"\r\n ></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'Login' | bbbTranslate\"\r\n [valid]=\"canLogin()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content ></ng-content>\r\n <div\r\n class=\"tw-p-2 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n", styles: [".btn-outline-primary:hover{background-color:transparent!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.ButtonLoadingComponent, selector: "bnrc-button-loading", inputs: ["valid", "loading", "text", "transparent"] }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
438
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: UserPassComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
439
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: UserPassComponent, isStandalone: false, selector: "ba-user-pass", inputs: { errorTemplate: "errorTemplate", otpProvider: "otpProvider" }, outputs: { loggedIn: "loggedIn" }, usesInheritance: true, ngImport: i0, template: "<form class=\"tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC </label>\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"username.errors?.['required']\">\u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 </label>\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"password\"\r\n formControlName=\"password\"\r\n placeholder=\"\"\r\n type=\"password\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"password.invalid && (password.dirty || password.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"password.errors?.['required']\">\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n @if(showCaptcha()){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-flex tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\">\r\n \u0639\u0628\u0627\u0631\u062A \u0627\u0645\u0646\u06CC\u062A\u06CC\r\n </label>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <input\r\n class=\"tw-w-full tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"cap\"\r\n formControlName=\"cap\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <img class=\"tw-w-36\" [src]=\"'/api/auth/captcha?capId=' + capId() + '&t=' + now()\" loading=\"lazy\"/>\r\n <button\r\n class=\"btn btn-outline-primary btn-sm !tw-border-none tw-w-12 tw-h-8 tw-flex tw-items-center tw-justify-center\"\r\n type=\"button\"\r\n [disabled]=\"loading()\"\r\n (click)=\"onRefreshCaptcha()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"28\"\r\n height=\"28\"\r\n fill=\"currentColor\"\r\n class=\"bi bi-bootstrap-reboot\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n d=\"M1.161 8a6.84 6.84 0 1 0 6.842-6.84.58.58 0 1 1 0-1.16 8 8 0 1 1-6.556 3.412l-.663-.577a.58.58 0 0 1 .227-.997l2.52-.69a.58.58 0 0 1 .728.633l-.332 2.592a.58.58 0 0 1-.956.364l-.643-.56A6.8 6.8 0 0 0 1.16 8z\"\r\n ></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'Login' | bbbTranslate\"\r\n [valid]=\"canLogin()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content ></ng-content>\r\n <div\r\n class=\"tw-p-2 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n", styles: [".btn-outline-primary:hover{background-color:transparent!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.ButtonLoadingComponent, selector: "bnrc-button-loading", inputs: ["valid", "loading", "text", "transparent"] }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
440
440
  }
441
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: UserPassComponent, decorators: [{
441
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: UserPassComponent, decorators: [{
442
442
  type: Component,
443
443
  args: [{ selector: 'ba-user-pass', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<form class=\"tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC </label>\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"username.errors?.['required']\">\u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 </label>\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"password\"\r\n formControlName=\"password\"\r\n placeholder=\"\"\r\n type=\"password\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"password.invalid && (password.dirty || password.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"password.errors?.['required']\">\u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0636\u0631\u0648\u0631\u06CC \u0627\u0633\u062A.</div>\r\n </div>\r\n </div>\r\n @if(showCaptcha()){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-flex tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\">\r\n \u0639\u0628\u0627\u0631\u062A \u0627\u0645\u0646\u06CC\u062A\u06CC\r\n </label>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <input\r\n class=\"tw-w-full tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"cap\"\r\n formControlName=\"cap\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <img class=\"tw-w-36\" [src]=\"'/api/auth/captcha?capId=' + capId() + '&t=' + now()\" loading=\"lazy\"/>\r\n <button\r\n class=\"btn btn-outline-primary btn-sm !tw-border-none tw-w-12 tw-h-8 tw-flex tw-items-center tw-justify-center\"\r\n type=\"button\"\r\n [disabled]=\"loading()\"\r\n (click)=\"onRefreshCaptcha()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"28\"\r\n height=\"28\"\r\n fill=\"currentColor\"\r\n class=\"bi bi-bootstrap-reboot\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n d=\"M1.161 8a6.84 6.84 0 1 0 6.842-6.84.58.58 0 1 1 0-1.16 8 8 0 1 1-6.556 3.412l-.663-.577a.58.58 0 0 1 .227-.997l2.52-.69a.58.58 0 0 1 .728.633l-.332 2.592a.58.58 0 0 1-.956.364l-.643-.56A6.8 6.8 0 0 0 1.16 8z\"\r\n ></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'Login' | bbbTranslate\"\r\n [valid]=\"canLogin()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content ></ng-content>\r\n <div\r\n class=\"tw-p-2 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n", styles: [".btn-outline-primary:hover{background-color:transparent!important}\n"] }]
444
444
  }], ctorParameters: () => [], propDecorators: { loggedIn: [{
@@ -452,10 +452,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
452
452
  class BarsaAuthComponent {
453
453
  constructor() {
454
454
  this.verified = new EventEmitter();
455
- this.appSettings = input.required();
456
- this.state = signal('enter-mobile');
457
- this.mobile = signal('');
458
- this.loading = signal(false);
455
+ this.appSettings = input.required(...(ngDevMode ? [{ debugName: "appSettings" }] : /* istanbul ignore next */ []));
456
+ this.state = signal('enter-mobile', ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
457
+ this.mobile = signal('', ...(ngDevMode ? [{ debugName: "mobile" }] : /* istanbul ignore next */ []));
458
+ this.loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
459
459
  this._portalService = inject(PortalService);
460
460
  this._applicationCtrlrService = inject(ApplicationCtrlrService);
461
461
  }
@@ -476,15 +476,15 @@ class BarsaAuthComponent {
476
476
  this.loading.set(true);
477
477
  this.verified.emit();
478
478
  }
479
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BarsaAuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
480
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: BarsaAuthComponent, isStandalone: false, selector: "ba-auth", inputs: { appSettings: { classPropertyName: "appSettings", publicName: "appSettings", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { verified: "verified" }, ngImport: i0, template: "<ng-container\r\n *ngTemplateOutlet=\"appSettings() ? renderUi : missAppSettings; context: { $implicit: appSettings() }\"\r\n></ng-container>\r\n<ng-template #missAppSettings> Oops! </ng-template>\r\n<ng-template #renderUi let-appSettings>\r\n <div>\r\n @switch (state()) { @case ('enter-mobile') {\r\n <ba-enter-mobile\r\n (otpSent)=\"onOtpSent($event)\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n [mobileDescription]=\"appSettings.MobileDescription\"\r\n [usernameDescription]=\"appSettings.UsernameDescription\"\r\n [usernameLabel]=\"appSettings.UsernameLabel\"\r\n >\r\n <div class=\"form-footer\">\r\n @if(appSettings.UserPassEnable){\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4 tw-cursor-pointer\"\r\n (click)=\"onChangeState('user-pass')\"\r\n >\u0648\u0631\u0648\u062F \u0628\u0627 \u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC\r\n </a>\r\n }\r\n </div>\r\n </ba-enter-mobile>\r\n } @case ('verification') {\r\n <ba-verification\r\n [mobile]=\"mobile()\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n (changeMobile)=\"onChangeMobile()\"\r\n (otpVerified)=\"onLoggedIn()\"\r\n ></ba-verification>\r\n } @case ('user-pass') {\r\n <ba-user-pass (loggedIn)=\"onLoggedIn()\">\r\n <div class=\"form-footer tw-flex tw-justify-between\">\r\n @if(appSettings.UserPassEnable){\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4 tw-cursor-pointer\"\r\n (click)=\"onChangeState('enter-mobile')\"\r\n >\u0648\u0631\u0648\u062F \u0628\u0627 \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647\r\n </a>\r\n }\r\n </div>\r\n </ba-user-pass>\r\n } }\r\n </div>\r\n <div class=\"tw-absolute tw-left-0 tw-right-0 tw-bottom-0 tw-pb-safe\">\r\n @if(appSettings.LoginFooter){\r\n <div [innerHTML]=\"appSettings.LoginFooter | sanitizeText\"></div>\r\n } @if(state()!=='verification' && !appSettings.HideGovSso){\r\n <div class=\"tw-relative tw-flex tw-py-3 tw-items-center tw-px-2\">\r\n <div class=\"tw-flex-grow tw-border-t tw-border-gray-400\"></div>\r\n <span class=\"tw-font-[IRANYekan] tw-flex-shrink tw-mx-4 tw-text-gray-400\">\u0648\u0631\u0648\u062F \u0627\u0632 \u0637\u0631\u06CC\u0642 \u062F\u0631\u06AF\u0627\u0647</span>\r\n <div class=\"tw-flex-grow tw-border-t tw-border-gray-400\"></div>\r\n </div>\r\n <div class=\"tw-rounded-lg back-box-color tw-w-full tw-py-3\">\r\n <div class=\"tw-flex tw-items-center tw-text-center\">\r\n <a\r\n class=\"tw-w-full tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-cursor-pointer\"\r\n [attr.href]=\"appSettings.GovSSOHref\"\r\n >\u0648\u0631\u0648\u062F \u0627\u0632 \u0637\u0631\u06CC\u0642 \u062F\u0631\u06AF\u0627\u0647 \u062F\u0648\u0644\u062A \u0645\u0646\r\n </a>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.MobileDirective, selector: "[mobile]" }, { kind: "component", type: EnterMobileComponent, selector: "ba-enter-mobile", inputs: ["errorTemplate", "otpProvider", "mobileDescription", "usernameDescription", "usernameLabel"], outputs: ["otpSent"] }, { kind: "component", type: VerificationComponent, selector: "ba-verification", inputs: ["mobile", "otpProvider", "errorTemplate"], outputs: ["otpVerified", "changeMobile"] }, { kind: "component", type: UserPassComponent, selector: "ba-user-pass", inputs: ["errorTemplate", "otpProvider"], outputs: ["loggedIn"] }, { kind: "pipe", type: i3.SanitizeTextPipe, name: "sanitizeText" }] }); }
479
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: BarsaAuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
480
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: BarsaAuthComponent, isStandalone: false, selector: "ba-auth", inputs: { appSettings: { classPropertyName: "appSettings", publicName: "appSettings", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { verified: "verified" }, ngImport: i0, template: "<ng-container\r\n *ngTemplateOutlet=\"appSettings() ? renderUi : missAppSettings; context: { $implicit: appSettings() }\"\r\n></ng-container>\r\n<ng-template #missAppSettings> Oops! </ng-template>\r\n<ng-template #renderUi let-appSettings>\r\n <div>\r\n @switch (state()) { @case ('enter-mobile') {\r\n <ba-enter-mobile\r\n (otpSent)=\"onOtpSent($event)\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n [mobileDescription]=\"appSettings.MobileDescription\"\r\n [usernameDescription]=\"appSettings.UsernameDescription\"\r\n [usernameLabel]=\"appSettings.UsernameLabel\"\r\n >\r\n <div class=\"form-footer\">\r\n @if(appSettings.UserPassEnable){\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4 tw-cursor-pointer\"\r\n (click)=\"onChangeState('user-pass')\"\r\n >\u0648\u0631\u0648\u062F \u0628\u0627 \u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC\r\n </a>\r\n }\r\n </div>\r\n </ba-enter-mobile>\r\n } @case ('verification') {\r\n <ba-verification\r\n [mobile]=\"mobile()\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n (changeMobile)=\"onChangeMobile()\"\r\n (otpVerified)=\"onLoggedIn()\"\r\n ></ba-verification>\r\n } @case ('user-pass') {\r\n <ba-user-pass (loggedIn)=\"onLoggedIn()\">\r\n <div class=\"form-footer tw-flex tw-justify-between\">\r\n @if(appSettings.UserPassEnable){\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4 tw-cursor-pointer\"\r\n (click)=\"onChangeState('enter-mobile')\"\r\n >\u0648\u0631\u0648\u062F \u0628\u0627 \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647\r\n </a>\r\n }\r\n </div>\r\n </ba-user-pass>\r\n } }\r\n </div>\r\n <div class=\"tw-absolute tw-left-0 tw-right-0 tw-bottom-0 tw-pb-safe\">\r\n @if(appSettings.LoginFooter){\r\n <div [innerHTML]=\"appSettings.LoginFooter | sanitizeText\"></div>\r\n } @if(state()!=='verification' && !appSettings.HideGovSso){\r\n <div class=\"tw-relative tw-flex tw-py-3 tw-items-center tw-px-2\">\r\n <div class=\"tw-flex-grow tw-border-t tw-border-gray-400\"></div>\r\n <span class=\"tw-font-[IRANYekan] tw-flex-shrink tw-mx-4 tw-text-gray-400\">\u0648\u0631\u0648\u062F \u0627\u0632 \u0637\u0631\u06CC\u0642 \u062F\u0631\u06AF\u0627\u0647</span>\r\n <div class=\"tw-flex-grow tw-border-t tw-border-gray-400\"></div>\r\n </div>\r\n <div class=\"tw-rounded-lg back-box-color tw-w-full tw-py-3\">\r\n <div class=\"tw-flex tw-items-center tw-text-center\">\r\n <a\r\n class=\"tw-w-full tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-cursor-pointer\"\r\n [attr.href]=\"appSettings.GovSSOHref\"\r\n >\u0648\u0631\u0648\u062F \u0627\u0632 \u0637\u0631\u06CC\u0642 \u062F\u0631\u06AF\u0627\u0647 \u062F\u0648\u0644\u062A \u0645\u0646\r\n </a>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.MobileDirective, selector: "[mobile]" }, { kind: "component", type: EnterMobileComponent, selector: "ba-enter-mobile", inputs: ["errorTemplate", "otpProvider", "mobileDescription", "usernameDescription", "usernameLabel"], outputs: ["otpSent"] }, { kind: "component", type: VerificationComponent, selector: "ba-verification", inputs: ["mobile", "otpProvider", "errorTemplate"], outputs: ["otpVerified", "changeMobile"] }, { kind: "component", type: UserPassComponent, selector: "ba-user-pass", inputs: ["errorTemplate", "otpProvider"], outputs: ["loggedIn"] }, { kind: "pipe", type: i3.SanitizeTextPipe, name: "sanitizeText" }] }); }
481
481
  }
482
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BarsaAuthComponent, decorators: [{
482
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: BarsaAuthComponent, decorators: [{
483
483
  type: Component,
484
484
  args: [{ selector: 'ba-auth', standalone: false, template: "<ng-container\r\n *ngTemplateOutlet=\"appSettings() ? renderUi : missAppSettings; context: { $implicit: appSettings() }\"\r\n></ng-container>\r\n<ng-template #missAppSettings> Oops! </ng-template>\r\n<ng-template #renderUi let-appSettings>\r\n <div>\r\n @switch (state()) { @case ('enter-mobile') {\r\n <ba-enter-mobile\r\n (otpSent)=\"onOtpSent($event)\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n [mobileDescription]=\"appSettings.MobileDescription\"\r\n [usernameDescription]=\"appSettings.UsernameDescription\"\r\n [usernameLabel]=\"appSettings.UsernameLabel\"\r\n >\r\n <div class=\"form-footer\">\r\n @if(appSettings.UserPassEnable){\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4 tw-cursor-pointer\"\r\n (click)=\"onChangeState('user-pass')\"\r\n >\u0648\u0631\u0648\u062F \u0628\u0627 \u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631\u06CC\r\n </a>\r\n }\r\n </div>\r\n </ba-enter-mobile>\r\n } @case ('verification') {\r\n <ba-verification\r\n [mobile]=\"mobile()\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n (changeMobile)=\"onChangeMobile()\"\r\n (otpVerified)=\"onLoggedIn()\"\r\n ></ba-verification>\r\n } @case ('user-pass') {\r\n <ba-user-pass (loggedIn)=\"onLoggedIn()\">\r\n <div class=\"form-footer tw-flex tw-justify-between\">\r\n @if(appSettings.UserPassEnable){\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4 tw-cursor-pointer\"\r\n (click)=\"onChangeState('enter-mobile')\"\r\n >\u0648\u0631\u0648\u062F \u0628\u0627 \u0634\u0645\u0627\u0631\u0647 \u0647\u0645\u0631\u0627\u0647\r\n </a>\r\n }\r\n </div>\r\n </ba-user-pass>\r\n } }\r\n </div>\r\n <div class=\"tw-absolute tw-left-0 tw-right-0 tw-bottom-0 tw-pb-safe\">\r\n @if(appSettings.LoginFooter){\r\n <div [innerHTML]=\"appSettings.LoginFooter | sanitizeText\"></div>\r\n } @if(state()!=='verification' && !appSettings.HideGovSso){\r\n <div class=\"tw-relative tw-flex tw-py-3 tw-items-center tw-px-2\">\r\n <div class=\"tw-flex-grow tw-border-t tw-border-gray-400\"></div>\r\n <span class=\"tw-font-[IRANYekan] tw-flex-shrink tw-mx-4 tw-text-gray-400\">\u0648\u0631\u0648\u062F \u0627\u0632 \u0637\u0631\u06CC\u0642 \u062F\u0631\u06AF\u0627\u0647</span>\r\n <div class=\"tw-flex-grow tw-border-t tw-border-gray-400\"></div>\r\n </div>\r\n <div class=\"tw-rounded-lg back-box-color tw-w-full tw-py-3\">\r\n <div class=\"tw-flex tw-items-center tw-text-center\">\r\n <a\r\n class=\"tw-w-full tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-cursor-pointer\"\r\n [attr.href]=\"appSettings.GovSSOHref\"\r\n >\u0648\u0631\u0648\u062F \u0627\u0632 \u0637\u0631\u06CC\u0642 \u062F\u0631\u06AF\u0627\u0647 \u062F\u0648\u0644\u062A \u0645\u0646\r\n </a>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n" }]
485
485
  }], propDecorators: { verified: [{
486
486
  type: Output
487
- }] } });
487
+ }], appSettings: [{ type: i0.Input, args: [{ isSignal: true, alias: "appSettings", required: true }] }] } });
488
488
 
489
489
  class LoginComponent {
490
490
  constructor() {
@@ -505,7 +505,7 @@ class LoginComponent {
505
505
  MobileDescription: '',
506
506
  UsernameDescription: '',
507
507
  LoginFooter: ''
508
- });
508
+ }, ...(ngDevMode ? [{ debugName: "appSettings" }] : /* istanbul ignore next */ []));
509
509
  this.logoUrl = '';
510
510
  this.backgroundUrl = '';
511
511
  this.title = '';
@@ -525,10 +525,10 @@ class LoginComponent {
525
525
  onVerified() {
526
526
  window.location.href = window.location.origin;
527
527
  }
528
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
529
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: LoginComponent, isStandalone: false, selector: "ba-login", viewQueries: [{ propertyName: "_errorTemplate", first: true, predicate: ["template"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "@switch (appSettings().Theme$Caption) { @case ('Side') {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} @case ('Center') {\r\n<ng-container *ngTemplateOutlet=\"center\"></ng-container>\r\n} @default {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} }\r\n<ng-template #center>\r\n <div class=\"tw-h-screen tw-flex tw-justify-center tw-items-center\">\r\n <section class=\"login-section tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-container tw-mx-auto\">\r\n <div class=\"tw-bg-transparent tw-border-0\">\r\n <div class=\"tw-flex tw-flex-col md:tw-flex-row rtl:tw-flex-row-reverse\">\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n\r\n <div class=\"tw-hidden md:tw-block md:tw-w-6/12 tw-shadow-sm\">\r\n <img\r\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-s\"\r\n loading=\"lazy\"\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/right-pic.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n\r\n <div class=\"tw-w-full md:tw-w-4/12 tw-relative tw-bg-white tw-shadow-sm tw-border\">\r\n <div class=\"tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-mb-3 tw-text-center\">\r\n <a href=\"/\">\r\n <img\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/logo.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n width=\"175\"\r\n height=\"175\"\r\n loading=\"lazy\"\r\n />\r\n </a>\r\n <div class=\"tw-mt-5\">\r\n <h3 class=\"tw-text-lg tw-font-semibold\">\r\n {{ appSettings().Section1Description }}\r\n </h3>\r\n </div>\r\n </div>\r\n\r\n <!-- \u0641\u0631\u0645 \u0648\u0631\u0648\u062F -->\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified()\"></ba-auth>\r\n\r\n <hr class=\"tw-border tw-border-gray-300 tw-my-4\" />\r\n\r\n <div\r\n class=\"tw-flex tw-flex-col md:tw-flex-row tw-gap-2 md:tw-gap-4 tw-justify-start tw-text-sm\"\r\n >\r\n <a\r\n id=\"forgetPassword\"\r\n class=\"tw-text-blue-600 hover:tw-underline tw-pt-2 tw-cursor-pointer\"\r\n tabindex=\"6\"\r\n onclick=\"LoginFormUi.ForgetPassword()\"\r\n >\r\n \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0627 \u0641\u0631\u0627\u0645\u0648\u0634 \u06A9\u0631\u062F\u0647 \u0627\u0645\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n</ng-template>\r\n<ng-template #side>\r\n <div class=\"tw-bg-white dark:tw-bg-gray-900 tw-w-full tw-h-full\">\r\n <div class=\"tw-flex tw-justify-center tw-h-screen tw-flex-row-reverse\">\r\n <div\r\n class=\"tw-hidden tw-bg-cover lg:tw-block lg:tw-w-2/3\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().BackgroundPicture\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfBackground:appSettings().HeightOfBackground) +\r\n ')'\r\n \"\r\n >\r\n <div class=\"tw-flex tw-items-center tw-h-full tw-px-20 tw-bg-gray-900 tw-bg-opacity-40\">\r\n <div>\r\n <h2 class=\"tw-text-4xl tw-font-bold tw-text-white\">{{ appSettings().Section1Title }}</h2>\r\n <p class=\"tw-max-w-xl tw-mt-3 tw-text-gray-300\">{{ appSettings().Section1Description }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n @if(appSettings().LoginSectionBackground){\r\n <div\r\n class=\"tw-flex tw-items-center tw-w-full tw-px-6 lg:tw-w-2/6 tw-absolute tw-right-0 tw-top-0 tw-bottom-0\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().LoginSectionBackground\r\n | picFieldSrc\r\n : 'ID'\r\n : null\r\n : ''\r\n : appSettings().WidthOfLoginSectionBackground\r\n : appSettings().HeightOfLoginSectionBackground) +\r\n ')'\r\n \"\r\n ></div>\r\n }\r\n <div class=\"tw-flex tw-items-center tw-w-full tw-max-w-md tw-px-6 tw-mx-auto lg:tw-w-2/6 tw-relative\">\r\n <div class=\"tw-flex-1 tw-h-[40rem]\">\r\n <div class=\"tw-text-center tw-flex tw-flex-col tw-items-center tw-mb-8 tw-gap-4\">\r\n <div\r\n class=\"tw-flex tw-items-center\"\r\n [class.tw-flex-col]=\"appSettings().LogoOnTop\"\r\n [class.tw-gap-2]=\"!appSettings().LogoOnTop\"\r\n [class.tw-gap-4]=\"appSettings().LogoOnTop\"\r\n >\r\n <img\r\n loading=\"lazy\"\r\n [src]=\"\r\n appSettings().Logo\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfLogo:appSettings().HeightOfLogo\r\n \"\r\n />\r\n @if(appSettings().Title){\r\n <h2 class=\"tw-text-2xl tw-font-bold tw-text-center tw-text-gray-700 dark:tw-text-white\">\r\n {{ appSettings().Title }}\r\n </h2>\r\n }\r\n </div>\r\n @if(appSettings().Subtitle ){\r\n <div class=\"tw-flex tw-gap-2 tw-items-center\">\r\n <p class=\"tw-text-xl tw-mt-1 tw-text-gray-500 dark:tw-text-gray-300\">\r\n {{ appSettings().Subtitle }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified()\"></ba-auth>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{font-family:IRANYekanDigits}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BarsaAuthComponent, selector: "ba-auth", inputs: ["appSettings"], outputs: ["verified"] }, { kind: "pipe", type: i3.PictureFieldSourcePipe, name: "picFieldSrc" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
528
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: LoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
529
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: LoginComponent, isStandalone: false, selector: "ba-login", viewQueries: [{ propertyName: "_errorTemplate", first: true, predicate: ["template"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "@switch (appSettings().Theme$Caption) { @case ('Side') {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} @case ('Center') {\r\n<ng-container *ngTemplateOutlet=\"center\"></ng-container>\r\n} @default {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} }\r\n<ng-template #center>\r\n <div class=\"tw-h-screen tw-flex tw-justify-center tw-items-center\">\r\n <section class=\"login-section tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-container tw-mx-auto\">\r\n <div class=\"tw-bg-transparent tw-border-0\">\r\n <div class=\"tw-flex tw-flex-col md:tw-flex-row rtl:tw-flex-row-reverse\">\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n\r\n <div class=\"tw-hidden md:tw-block md:tw-w-6/12 tw-shadow-sm\">\r\n <img\r\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-s\"\r\n loading=\"lazy\"\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/right-pic.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n\r\n <div class=\"tw-w-full md:tw-w-4/12 tw-relative tw-bg-white tw-shadow-sm tw-border\">\r\n <div class=\"tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-mb-3 tw-text-center\">\r\n <a href=\"/\">\r\n <img\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/logo.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n width=\"175\"\r\n height=\"175\"\r\n loading=\"lazy\"\r\n />\r\n </a>\r\n <div class=\"tw-mt-5\">\r\n <h3 class=\"tw-text-lg tw-font-semibold\">\r\n {{ appSettings().Section1Description }}\r\n </h3>\r\n </div>\r\n </div>\r\n\r\n <!-- \u0641\u0631\u0645 \u0648\u0631\u0648\u062F -->\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified()\"></ba-auth>\r\n\r\n <hr class=\"tw-border tw-border-gray-300 tw-my-4\" />\r\n\r\n <div\r\n class=\"tw-flex tw-flex-col md:tw-flex-row tw-gap-2 md:tw-gap-4 tw-justify-start tw-text-sm\"\r\n >\r\n <a\r\n id=\"forgetPassword\"\r\n class=\"tw-text-blue-600 hover:tw-underline tw-pt-2 tw-cursor-pointer\"\r\n tabindex=\"6\"\r\n onclick=\"LoginFormUi.ForgetPassword()\"\r\n >\r\n \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0627 \u0641\u0631\u0627\u0645\u0648\u0634 \u06A9\u0631\u062F\u0647 \u0627\u0645\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n</ng-template>\r\n<ng-template #side>\r\n <div class=\"tw-bg-white dark:tw-bg-gray-900 tw-w-full tw-h-full\">\r\n <div class=\"tw-flex tw-justify-center tw-h-screen tw-flex-row-reverse\">\r\n <div\r\n class=\"tw-hidden tw-bg-cover lg:tw-block lg:tw-w-2/3\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().BackgroundPicture\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfBackground:appSettings().HeightOfBackground) +\r\n ')'\r\n \"\r\n >\r\n <div class=\"tw-flex tw-items-center tw-h-full tw-px-20 tw-bg-gray-900 tw-bg-opacity-40\">\r\n <div>\r\n <h2 class=\"tw-text-4xl tw-font-bold tw-text-white\">{{ appSettings().Section1Title }}</h2>\r\n <p class=\"tw-max-w-xl tw-mt-3 tw-text-gray-300\">{{ appSettings().Section1Description }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n @if(appSettings().LoginSectionBackground){\r\n <div\r\n class=\"tw-flex tw-items-center tw-w-full tw-px-6 lg:tw-w-2/6 tw-absolute tw-right-0 tw-top-0 tw-bottom-0\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().LoginSectionBackground\r\n | picFieldSrc\r\n : 'ID'\r\n : null\r\n : ''\r\n : appSettings().WidthOfLoginSectionBackground\r\n : appSettings().HeightOfLoginSectionBackground) +\r\n ')'\r\n \"\r\n ></div>\r\n }\r\n <div class=\"tw-flex tw-items-center tw-w-full tw-max-w-md tw-px-6 tw-mx-auto lg:tw-w-2/6 tw-relative\">\r\n <div class=\"tw-flex-1 tw-h-[40rem]\">\r\n <div class=\"tw-text-center tw-flex tw-flex-col tw-items-center tw-mb-8 tw-gap-4\">\r\n <div\r\n class=\"tw-flex tw-items-center\"\r\n [class.tw-flex-col]=\"appSettings().LogoOnTop\"\r\n [class.tw-gap-2]=\"!appSettings().LogoOnTop\"\r\n [class.tw-gap-4]=\"appSettings().LogoOnTop\"\r\n >\r\n <img\r\n loading=\"lazy\"\r\n [src]=\"\r\n appSettings().Logo\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfLogo:appSettings().HeightOfLogo\r\n \"\r\n />\r\n @if(appSettings().Title){\r\n <h2 class=\"tw-text-2xl tw-font-bold tw-text-center tw-text-gray-700 dark:tw-text-white\">\r\n {{ appSettings().Title }}\r\n </h2>\r\n }\r\n </div>\r\n @if(appSettings().Subtitle ){\r\n <div class=\"tw-flex tw-gap-2 tw-items-center\">\r\n <p class=\"tw-text-xl tw-mt-1 tw-text-gray-500 dark:tw-text-gray-300\">\r\n {{ appSettings().Subtitle }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified()\"></ba-auth>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{font-family:IRANYekanDigits}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BarsaAuthComponent, selector: "ba-auth", inputs: ["appSettings"], outputs: ["verified"] }, { kind: "pipe", type: i3.PictureFieldSourcePipe, name: "picFieldSrc" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
530
530
  }
531
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LoginComponent, decorators: [{
531
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: LoginComponent, decorators: [{
532
532
  type: Component,
533
533
  args: [{ selector: 'ba-login', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@switch (appSettings().Theme$Caption) { @case ('Side') {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} @case ('Center') {\r\n<ng-container *ngTemplateOutlet=\"center\"></ng-container>\r\n} @default {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} }\r\n<ng-template #center>\r\n <div class=\"tw-h-screen tw-flex tw-justify-center tw-items-center\">\r\n <section class=\"login-section tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-container tw-mx-auto\">\r\n <div class=\"tw-bg-transparent tw-border-0\">\r\n <div class=\"tw-flex tw-flex-col md:tw-flex-row rtl:tw-flex-row-reverse\">\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n\r\n <div class=\"tw-hidden md:tw-block md:tw-w-6/12 tw-shadow-sm\">\r\n <img\r\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-s\"\r\n loading=\"lazy\"\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/right-pic.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n\r\n <div class=\"tw-w-full md:tw-w-4/12 tw-relative tw-bg-white tw-shadow-sm tw-border\">\r\n <div class=\"tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-mb-3 tw-text-center\">\r\n <a href=\"/\">\r\n <img\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/logo.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n width=\"175\"\r\n height=\"175\"\r\n loading=\"lazy\"\r\n />\r\n </a>\r\n <div class=\"tw-mt-5\">\r\n <h3 class=\"tw-text-lg tw-font-semibold\">\r\n {{ appSettings().Section1Description }}\r\n </h3>\r\n </div>\r\n </div>\r\n\r\n <!-- \u0641\u0631\u0645 \u0648\u0631\u0648\u062F -->\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified()\"></ba-auth>\r\n\r\n <hr class=\"tw-border tw-border-gray-300 tw-my-4\" />\r\n\r\n <div\r\n class=\"tw-flex tw-flex-col md:tw-flex-row tw-gap-2 md:tw-gap-4 tw-justify-start tw-text-sm\"\r\n >\r\n <a\r\n id=\"forgetPassword\"\r\n class=\"tw-text-blue-600 hover:tw-underline tw-pt-2 tw-cursor-pointer\"\r\n tabindex=\"6\"\r\n onclick=\"LoginFormUi.ForgetPassword()\"\r\n >\r\n \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0627 \u0641\u0631\u0627\u0645\u0648\u0634 \u06A9\u0631\u062F\u0647 \u0627\u0645\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n</ng-template>\r\n<ng-template #side>\r\n <div class=\"tw-bg-white dark:tw-bg-gray-900 tw-w-full tw-h-full\">\r\n <div class=\"tw-flex tw-justify-center tw-h-screen tw-flex-row-reverse\">\r\n <div\r\n class=\"tw-hidden tw-bg-cover lg:tw-block lg:tw-w-2/3\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().BackgroundPicture\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfBackground:appSettings().HeightOfBackground) +\r\n ')'\r\n \"\r\n >\r\n <div class=\"tw-flex tw-items-center tw-h-full tw-px-20 tw-bg-gray-900 tw-bg-opacity-40\">\r\n <div>\r\n <h2 class=\"tw-text-4xl tw-font-bold tw-text-white\">{{ appSettings().Section1Title }}</h2>\r\n <p class=\"tw-max-w-xl tw-mt-3 tw-text-gray-300\">{{ appSettings().Section1Description }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n @if(appSettings().LoginSectionBackground){\r\n <div\r\n class=\"tw-flex tw-items-center tw-w-full tw-px-6 lg:tw-w-2/6 tw-absolute tw-right-0 tw-top-0 tw-bottom-0\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().LoginSectionBackground\r\n | picFieldSrc\r\n : 'ID'\r\n : null\r\n : ''\r\n : appSettings().WidthOfLoginSectionBackground\r\n : appSettings().HeightOfLoginSectionBackground) +\r\n ')'\r\n \"\r\n ></div>\r\n }\r\n <div class=\"tw-flex tw-items-center tw-w-full tw-max-w-md tw-px-6 tw-mx-auto lg:tw-w-2/6 tw-relative\">\r\n <div class=\"tw-flex-1 tw-h-[40rem]\">\r\n <div class=\"tw-text-center tw-flex tw-flex-col tw-items-center tw-mb-8 tw-gap-4\">\r\n <div\r\n class=\"tw-flex tw-items-center\"\r\n [class.tw-flex-col]=\"appSettings().LogoOnTop\"\r\n [class.tw-gap-2]=\"!appSettings().LogoOnTop\"\r\n [class.tw-gap-4]=\"appSettings().LogoOnTop\"\r\n >\r\n <img\r\n loading=\"lazy\"\r\n [src]=\"\r\n appSettings().Logo\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfLogo:appSettings().HeightOfLogo\r\n \"\r\n />\r\n @if(appSettings().Title){\r\n <h2 class=\"tw-text-2xl tw-font-bold tw-text-center tw-text-gray-700 dark:tw-text-white\">\r\n {{ appSettings().Title }}\r\n </h2>\r\n }\r\n </div>\r\n @if(appSettings().Subtitle ){\r\n <div class=\"tw-flex tw-gap-2 tw-items-center\">\r\n <p class=\"tw-text-xl tw-mt-1 tw-text-gray-500 dark:tw-text-gray-300\">\r\n {{ appSettings().Subtitle }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified()\"></ba-auth>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{font-family:IRANYekanDigits}\n"] }]
534
534
  }], propDecorators: { _errorTemplate: [{
@@ -548,14 +548,12 @@ class BarsaAuthModule extends BaseModule {
548
548
  /** Inserted by Angular inject() migration for backwards compatibility */
549
549
  constructor() {
550
550
  const dcm = inject(DynamicComponentService);
551
- const componentFactoryResolver = inject(ComponentFactoryResolver);
552
- super(dcm, componentFactoryResolver, 'BarsaAuthModule');
551
+ super(dcm, 'BarsaAuthModule');
553
552
  this.dynamicComponents = [...components];
554
553
  this.dcm = dcm;
555
- this.componentFactoryResolver = componentFactoryResolver;
556
554
  }
557
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BarsaAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
558
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: BarsaAuthModule, declarations: [BarsaAuthComponent,
555
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: BarsaAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
556
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.17", ngImport: i0, type: BarsaAuthModule, declarations: [BarsaAuthComponent,
559
557
  EnterMobileComponent,
560
558
  VerificationComponent,
561
559
  TimerCountDownComponent,
@@ -566,9 +564,9 @@ class BarsaAuthModule extends BaseModule {
566
564
  TimerCountDownComponent,
567
565
  UserPassComponent,
568
566
  LoginComponent] }); }
569
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BarsaAuthModule, imports: [CommonModule, FormsModule, ReactiveFormsModule, BarsaNovinRayCoreModule] }); }
567
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: BarsaAuthModule, imports: [CommonModule, FormsModule, ReactiveFormsModule, BarsaNovinRayCoreModule] }); }
570
568
  }
571
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BarsaAuthModule, decorators: [{
569
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: BarsaAuthModule, decorators: [{
572
570
  type: NgModule,
573
571
  args: [{
574
572
  declarations: [...components],
@@ -1 +1 @@
1
- {"version":3,"file":"barsa-auth.mjs","sources":["../../../projects/barsa-auth/src/lib/controllers/login-mobile-controller.ts","../../../projects/barsa-auth/src/lib/controllers/login-userpass-controller.ts","../../../projects/barsa-auth/src/lib/controllers/login-verification-controller.ts","../../../projects/barsa-auth/src/lib/enter-mobile/enter-mobile.component.ts","../../../projects/barsa-auth/src/lib/enter-mobile/enter-mobile.component.html","../../../projects/barsa-auth/src/lib/timer-countdown/timer-countdown.component.ts","../../../projects/barsa-auth/src/lib/timer-countdown/timer-countdown.component.html","../../../projects/barsa-auth/src/lib/verification/verification.component.ts","../../../projects/barsa-auth/src/lib/verification/verification.component.html","../../../projects/barsa-auth/src/lib/user-pass/user-pass.component.ts","../../../projects/barsa-auth/src/lib/user-pass/user-pass.component.html","../../../projects/barsa-auth/src/lib/barsa-auth/barsa-auth.component.ts","../../../projects/barsa-auth/src/lib/barsa-auth/barsa-auth.component.html","../../../projects/barsa-auth/src/lib/login/login.component.ts","../../../projects/barsa-auth/src/lib/login/login.component.html","../../../projects/barsa-auth/src/lib/barsa-auth.module.ts","../../../projects/barsa-auth/src/public-api.ts","../../../projects/barsa-auth/src/barsa-auth.ts"],"sourcesContent":["import { FormGroup } from '@angular/forms';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { catchError, finalize, throwError } from 'rxjs';\r\n\r\nimport { BaseController, IViewBase } from 'barsa-novin-ray-core';\r\n\r\nexport class LoginMobileController extends BaseController<ILoginMobileView> {\r\n private _httpClient: HttpClient;\r\n /**\r\n *\r\n */\r\n\r\n constructor(view: ILoginMobileView) {\r\n super(view);\r\n this._httpClient = view.injector.get(HttpClient);\r\n }\r\n get form(): FormGroup {\r\n return this.view.form;\r\n }\r\n sendCode(otpProvider: string, e): void {\r\n const { mobile, username } = e;\r\n this.form.valid && this.view.setLoading(true);\r\n this.view.showError('', -1);\r\n // const x = (): void => {\r\n // this.loading.set(false);\r\n // };\r\n const usernamequery = username ? `&username=${username}` : '';\r\n this._httpClient\r\n .get<{ otpId: string }>(`/api/openid/signin?provider=${otpProvider}&mobile=${mobile}${usernamequery}`)\r\n .pipe(\r\n finalize(() => {\r\n this.view.setLoading(false);\r\n }),\r\n catchError((err) => {\r\n if (typeof err === 'object' && err.status === 403) {\r\n this.view.showError(err.error.Message, err.error.Code);\r\n }\r\n return throwError(() => new Error(err));\r\n })\r\n )\r\n .subscribe((c) => {\r\n if (c?.otpId) {\r\n localStorage.setItem('otpId', c.otpId);\r\n this.view.codeSent();\r\n } else {\r\n const res = c as any;\r\n if (!res.succeed) {\r\n this.view.showError(res.error.userMessage, res.type);\r\n }\r\n // debugger;\r\n }\r\n });\r\n }\r\n init(): void {\r\n this.form.valueChanges.subscribe((_c) =>\r\n this.form.valid ? this.view.canSend(true) : this.view.canSend(false)\r\n );\r\n }\r\n}\r\n\r\nexport interface ILoginMobileView extends IViewBase {\r\n showError(message: any, code: any): void;\r\n form: FormGroup;\r\n codeSent: () => void;\r\n setLoading: (loading: boolean) => void;\r\n canSend: (loading: boolean) => void;\r\n}\r\n","import { FormGroup } from '@angular/forms';\r\nimport { BarsaApi, BaseController, IViewBase } from 'barsa-novin-ray-core';\r\n\r\nexport class LoginUserPassController extends BaseController<ILoginUserPassView> {\r\n get form(): FormGroup {\r\n return this.view.form;\r\n }\r\n login(e: any): void {\r\n const { username, password, cap, capId } = e;\r\n this.view.setLoading(true);\r\n this.view.showError('', -1);\r\n const data = {\r\n un: username,\r\n pwd: password,\r\n cap,\r\n capId\r\n };\r\n BarsaApi.Bw.Login(data, {\r\n onSuccess: () => {\r\n this.view.userLoggedIn();\r\n },\r\n onError: (response2) => {\r\n this.view.setLoading(false);\r\n const response = response2.Data.ResponseData;\r\n let error = response.error;\r\n if (!error) {\r\n error = response;\r\n }\r\n const data = response.data;\r\n this.view.showError(error.userMessage, -1);\r\n if (data.showCaptcha) {\r\n this.view.visibleCaptcha(true);\r\n }\r\n }\r\n });\r\n }\r\n\r\n init(): void {\r\n this.form.valueChanges.subscribe((_c) => this.view.setValid(this.form.valid));\r\n if (BarsaApi.LoginFormData.ShowCaptcha === 'Show') {\r\n this.view.visibleCaptcha(true);\r\n }\r\n }\r\n}\r\n\r\nexport interface ILoginUserPassView extends IViewBase {\r\n form: FormGroup;\r\n showError(message: any, code: any): void;\r\n visibleCaptcha: (visible: boolean) => void;\r\n setLoading: (loading: boolean) => void;\r\n setValid: (isValid: boolean) => void;\r\n userLoggedIn: () => void;\r\n}\r\n","import { signal } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { catchError, finalize, throwError } from 'rxjs';\r\n\r\nimport { BaseController, IViewBase, BarsaApi } from 'barsa-novin-ray-core';\r\n\r\nexport class LoginVerificationController extends BaseController<ILoginVerificationView> {\r\n canVerify = signal(false);\r\n _httpClient: HttpClient;\r\n\r\n constructor(view: ILoginVerificationView) {\r\n super(view);\r\n this._httpClient = view.injector.get(HttpClient);\r\n }\r\n\r\n get form(): FormGroup {\r\n return this.view.form;\r\n }\r\n resendCode(otpProvider: string): void {\r\n this.view.setResetLoading(true);\r\n this._httpClient\r\n .get<{ otpId: string }>(`/api/openid/signin?provider=${otpProvider}&otpId=${localStorage.getItem('otpId')}`)\r\n .pipe(\r\n finalize(() => {}),\r\n catchError((err) => {\r\n this.view.setResetLoading(false);\r\n if (typeof err === 'object' && err.status === 403) {\r\n this.view.showError(err.error.Message, err.error.Code);\r\n }\r\n return throwError(() => new Error(err));\r\n })\r\n )\r\n .subscribe((_c) => {\r\n this.view.setResetLoading(false);\r\n this.view.startCountDown();\r\n });\r\n }\r\n verifyCode(otpProvider: string, e): void {\r\n this.view.setLoading(true);\r\n const { code, cap, capId } = e;\r\n\r\n this._httpClient\r\n .post<{ Sth: string }>(`/api/openid/callback?provider=${otpProvider}`, {\r\n otpId: localStorage.getItem('otpId'),\r\n otpCode: code,\r\n captchaCode: cap,\r\n capId\r\n })\r\n .pipe(\r\n finalize(() => {\r\n this.view.setLoading(false);\r\n }),\r\n catchError((err) => {\r\n if (typeof err === 'object' && err.status === 403) {\r\n this.view.showError(err.error.Message, err.error.Code);\r\n }\r\n return throwError(() => new Error(err));\r\n })\r\n )\r\n .subscribe((c) => {\r\n if (c?.Sth) {\r\n localStorage.removeItem('otpId');\r\n window.localStorage.setItem(BarsaApi.LoginAction.token2StorageKey, c.Sth);\r\n this.view.codeVerified();\r\n } else {\r\n const res = c as any;\r\n if (!res.succeed) {\r\n this.view.showError(res.error.userMessage, res.type);\r\n }\r\n }\r\n });\r\n }\r\n init(): void {\r\n this.form.valueChanges.subscribe((_c) =>\r\n this.form.valid ? this.canVerify.set(true) : this.canVerify.set(false)\r\n );\r\n }\r\n}\r\nexport interface ILoginVerificationView extends IViewBase {\r\n form: FormGroup;\r\n codeVerified: () => void;\r\n startCountDown: () => void;\r\n setResetLoading: (loading: boolean) => void;\r\n setLoading: (loading: boolean) => void;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n TemplateRef,\r\n signal,\r\n inject\r\n} from '@angular/core';\r\nimport { ILoginMobileView, LoginMobileController } from '../controllers';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { forbiddenValidator, mobile_regex, ViewBase } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-enter-mobile',\r\n templateUrl: './enter-mobile.component.html',\r\n styleUrl: './enter-mobile.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EnterMobileComponent extends ViewBase<LoginMobileController> implements ILoginMobileView {\r\n @Output() otpSent = new EventEmitter<string>();\r\n @Input() errorTemplate: TemplateRef<any>;\r\n @Input() otpProvider: string;\r\n @Input() mobileDescription: string;\r\n @Input() usernameDescription: string;\r\n @Input() usernameLabel: string;\r\n controller = new LoginMobileController(this);\r\n form: FormGroup;\r\n loading = signal(false);\r\n isValid = signal(false);\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n private fb = inject(FormBuilder);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.form = this.fb.group({\r\n mobile: [\r\n '',\r\n Validators.compose([Validators.required, Validators.maxLength(11), forbiddenValidator(mobile_regex)])\r\n ],\r\n username: ['', Validators.compose([])],\r\n updateOn: 'blur'\r\n });\r\n }\r\n get mobile(): any {\r\n return this.form.get('mobile');\r\n }\r\n get username(): any {\r\n return this.form.get('username');\r\n }\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n if (this.usernameLabel) {\r\n this.form.get('username')?.addValidators([Validators.required, Validators.minLength(2)]);\r\n }\r\n }\r\n codeSent(): void {\r\n this.otpSent.emit(this.form.value.mobile);\r\n }\r\n setLoading(loading: boolean): void {\r\n this.loading.set(loading);\r\n }\r\n\r\n canSend(isValid: boolean): void {\r\n this.isValid.set(isValid);\r\n }\r\n onSendCode(): void {\r\n this.controller.sendCode(this.otpProvider, this.form.value);\r\n }\r\n}\r\n","<form class=\"tw-mt-2\" [formGroup]=\"form\">\r\n @if(usernameLabel){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\">\r\n {{usernameLabel}}\r\n </label>\r\n @if(usernameDescription){\r\n <div [innerHtml]=\"usernameDescription | sanitizeText\" class=\"tw-text-gray-500 tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched) && username?.errors.length\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">{{usernameLabel}} ضروری است</div>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"tw-mb-4\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> شماره همراه </label>\r\n @if(mobileDescription){\r\n <div [innerHtml]=\"mobileDescription | sanitizeText\" class=\"tw-text-gray-500 tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"mobile\"\r\n formControlName=\"mobile\"\r\n placeholder=\"09121234567\"\r\n maxlength=\"11\"\r\n type=\"tel\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"mobile.invalid && (mobile.dirty || mobile.touched) && mobile?.errors.length\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">شماره همراه ضروری است</div>\r\n </div>\r\n </div>\r\n\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'ارسال کد تایید'\"\r\n [valid]=\"isValid()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, Input, signal, EventEmitter, Output } from '@angular/core';\r\nimport { BaseComponent } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-timer-countdown',\r\n templateUrl: './timer-countdown.component.html',\r\n styleUrl: './timer-countdown.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class TimerCountDownComponent extends BaseComponent {\r\n @Output() resend = new EventEmitter();\r\n @Input() minutes: number;\r\n @Input() loading: boolean;\r\n showResend = signal(false);\r\n minutesText = signal('');\r\n secondText = signal('');\r\n _interval: any;\r\n private _countDownDate: number;\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n this.startCountDown();\r\n }\r\n ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n if (this._interval) {\r\n clearInterval(this._interval);\r\n }\r\n }\r\n startCountDown(): void {\r\n const tcountDownDate: Date = new Date();\r\n const nmin = tcountDownDate.getMinutes();\r\n tcountDownDate.setMinutes(nmin + this.minutes);\r\n this._countDownDate = tcountDownDate.getTime();\r\n this.showResend.set(false);\r\n this._calc();\r\n this._interval = setInterval(() => {\r\n this._calc();\r\n }, 1000);\r\n }\r\n _calc(): void {\r\n const now = new Date().getTime();\r\n const distance: any = this._countDownDate - now;\r\n\r\n // Time calculations for days, hours, minutes and seconds\r\n // const _days = Math.floor(distance / (1000 * 60 * 60 * 24));\r\n // const _hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n const seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n\r\n // Display the result in the respective elements\r\n this.minutesText.set(\r\n minutes.toLocaleString('en-US', {\r\n minimumIntegerDigits: 2,\r\n useGrouping: false\r\n })\r\n );\r\n this.secondText.set(\r\n seconds.toLocaleString('en-US', {\r\n minimumIntegerDigits: 2,\r\n useGrouping: false\r\n })\r\n );\r\n\r\n // If the count down is over, write some text\r\n if (distance < 0) {\r\n clearInterval(this._interval);\r\n this._interval = null;\r\n this.showResend.set(true);\r\n }\r\n }\r\n}\r\n","@if(showResend()){\r\n<bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'ارسال مجدد'\"\r\n [valid]=\"true\"\r\n [loading]=\"loading\"\r\n [transparent]=\"true\"\r\n (click)=\"resend.emit()\"\r\n></bnrc-button-loading>\r\n}@else{\r\n<div class=\"tw-text-center\">\r\n <div\r\n id=\"timer\"\r\n class=\"tw-px-2 tw-flex tw-flex-row-reverse gap-2 tw-justify-center tw-uppercase\"\r\n style=\"align-items: center; color: var(--button-loading)\"\r\n [style.visibility]=\"minutesText() ? 'visible' : 'hidden'\"\r\n >\r\n <div>\r\n <span class=\"tw-text-xl\">{{ minutesText() }}</span>\r\n </div>\r\n <div class=\"tw-text-2xl\">:</div>\r\n <div>\r\n <span class=\"tw-text-xl\">{{ secondText() }}</span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n NgZone,\r\n Output,\r\n QueryList,\r\n signal,\r\n TemplateRef,\r\n ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { getUniqueId, BarsaApi, ViewBase } from 'barsa-novin-ray-core';\r\n\r\nimport { ILoginVerificationView, LoginVerificationController } from '../controllers';\r\nimport { TimerCountDownComponent } from '../timer-countdown/timer-countdown.component';\r\n\r\n@Component({\r\n selector: 'ba-verification',\r\n templateUrl: './verification.component.html',\r\n styleUrl: './verification.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class VerificationComponent extends ViewBase<LoginVerificationController> implements ILoginVerificationView {\r\n @ViewChild(TimerCountDownComponent) _timerCountDown: TimerCountDownComponent;\r\n @ViewChildren('inputv') _inputsEl: QueryList<ElementRef>;\r\n @ViewChild('loadingBtn') _loadingBtn: TemplateRef<any>;\r\n @Output() otpVerified = new EventEmitter();\r\n @Output() changeMobile = new EventEmitter();\r\n @Input() mobile: string;\r\n @Input() otpProvider: string;\r\n @Input() errorTemplate: TemplateRef<any>;\r\n\r\n controller = new LoginVerificationController(this);\r\n form: FormGroup;\r\n capId = signal('-');\r\n resendLoading = signal(false);\r\n loading = signal(false);\r\n showCaptcha = signal(false);\r\n _ngZone = inject(NgZone);\r\n now = signal(getUniqueId(3));\r\n private fb = inject(FormBuilder);\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n\r\n constructor() {\r\n super();\r\n this.form = this.fb.group({\r\n in1: ['', Validators.compose([Validators.required, Validators.maxLength(6)])],\r\n cap: [''],\r\n capId: [this.capId(), Validators.required]\r\n });\r\n }\r\n get in1(): any {\r\n return this.form.get('in1');\r\n }\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n this.showCaptcha.set(true);\r\n }\r\n showError(message: string, code: number): void {\r\n super.showError(message, code);\r\n this.capId.set(BarsaApi.LoginFormData.CaptchaId);\r\n }\r\n codeVerified(): void {\r\n this.otpVerified.emit();\r\n }\r\n onRefreshCaptcha(): void {\r\n this.now.set(getUniqueId(3));\r\n }\r\n onVerifyCode(): void {\r\n this._verifyCode();\r\n }\r\n onResendOtp(): void {\r\n this.controller.resendCode(this.otpProvider);\r\n }\r\n _verifyCode(): void {\r\n const { in1, capId, cap } = this.form.value;\r\n this.controller.verifyCode(this.otpProvider, { code: `${in1}`, capId, cap });\r\n }\r\n setResetLoading(loading: boolean): void {\r\n this.resendLoading.set(loading);\r\n }\r\n setLoading(loading: boolean): void {\r\n this.loading.set(loading);\r\n }\r\n startCountDown(): void {\r\n this._timerCountDown.startCountDown();\r\n }\r\n get invArr(): ElementRef[] {\r\n return this._inputsEl.toArray();\r\n }\r\n\r\n get canVerify(): boolean {\r\n return this.controller.canVerify();\r\n }\r\n}\r\n","<form class=\"tw-pb-8 tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <label class=\"tw-block tw-w-full tw-text-gray-500 tw-text-md tw-font-bold tw-mb-4 tw-text-sm\">\r\n کد ارسال شده به شماره <strong>{{ mobile }}</strong> را وارد نمایید.\r\n </label>\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-cursor-pointer tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4\"\r\n (click)=\"changeMobile.emit()\"\r\n >ویرایش شماره همراه\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"tw-w-6\">\r\n <path\r\n d=\"M5,18H9.24a1,1,0,0,0,.71-.29l6.92-6.93h0L19.71,8a1,1,0,0,0,0-1.42L15.47,2.29a1,1,0,0,0-1.42,0L11.23,5.12h0L4.29,12.05a1,1,0,0,0-.29.71V17A1,1,0,0,0,5,18ZM14.76,4.41l2.83,2.83L16.17,8.66,13.34,5.83ZM6,13.17l5.93-5.93,2.83,2.83L8.83,16H6ZM21,20H3a1,1,0,0,0,0,2H21a1,1,0,0,0,0-2Z\"\r\n fill=\"#316bec\"\r\n />\r\n </svg>\r\n </a>\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-3 tw-mb-4\">\r\n <input\r\n #inputv\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n maxlength=\"6\"\r\n tabindex=\"0\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n name=\"in1\"\r\n [autoUpdate]=\"true\"\r\n appWebotp\r\n formControlName=\"in1\"\r\n />\r\n <ba-timer-countdown [minutes]=\"2\" (resend)=\"onResendOtp()\" [loading]=\"resendLoading()\"></ba-timer-countdown>\r\n </div>\r\n <div\r\n *ngIf=\"in1.invalid && (in1.dirty || in1.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"in1.errors?.['required']\">کد تایید ضروری است</div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-2\">\r\n <bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'تایید کد'\"\r\n [valid]=\"canVerify\"\r\n [loading]=\"loading()\"\r\n (click)=\"onVerifyCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <div\r\n class=\"tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n signal,\r\n TemplateRef,\r\n inject\r\n} from '@angular/core';\r\nimport { ILoginUserPassView, LoginUserPassController } from '../controllers';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { getUniqueId, ViewBase, validateAllFormFields } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-user-pass',\r\n templateUrl: './user-pass.component.html',\r\n styleUrl: './user-pass.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class UserPassComponent extends ViewBase<LoginUserPassController> implements ILoginUserPassView {\r\n @Output() loggedIn = new EventEmitter<void>();\r\n @Input() errorTemplate: TemplateRef<any>;\r\n @Input() otpProvider: string;\r\n\r\n controller = new LoginUserPassController(this);\r\n form: FormGroup;\r\n canLogin = signal(false);\r\n loading = signal(false);\r\n capId = signal(getUniqueId(4));\r\n now = signal(getUniqueId(3));\r\n showCaptcha = signal(false);\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n private fb = inject(FormBuilder);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.form = this.fb.group({\r\n username: ['', Validators.compose([Validators.required, Validators.minLength(1)])],\r\n password: ['', Validators.compose([Validators.required, Validators.minLength(1)])],\r\n cap: [''],\r\n capId: [this.capId(), Validators.required]\r\n });\r\n }\r\n get username(): any {\r\n return this.form.get('username');\r\n }\r\n get password(): any {\r\n return this.form.get('password');\r\n }\r\n get cap(): any {\r\n return this.form.get('cap');\r\n }\r\n userLoggedIn(): void {\r\n this.loggedIn.emit();\r\n }\r\n setLoading(loading: boolean): void {\r\n this.loading.set(loading);\r\n }\r\n setValid(isValid: boolean): void {\r\n this.canLogin.set(isValid);\r\n }\r\n showError(message: string, code: number): void {\r\n super.showError(message, code);\r\n setTimeout(() => {\r\n this.errorMessage.set('');\r\n this.errorCode.set(-1);\r\n }, 3000);\r\n }\r\n visibleCaptcha(visible: boolean): void {\r\n this.now.set(getUniqueId(3));\r\n this.showCaptcha.set(visible);\r\n this.cap.reset();\r\n }\r\n onRefreshCaptcha(): void {\r\n this.now.set(getUniqueId(3));\r\n }\r\n onSendCode(): void {\r\n validateAllFormFields(this.form);\r\n this.canLogin() && !this.loading() && this.controller.login(this.form.value);\r\n }\r\n}\r\n","<form class=\"tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> نام کاربری </label>\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"username.errors?.['required']\">نام کاربری ضروری است.</div>\r\n </div>\r\n </div>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> رمز عبور </label>\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"password\"\r\n formControlName=\"password\"\r\n placeholder=\"\"\r\n type=\"password\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"password.invalid && (password.dirty || password.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"password.errors?.['required']\">رمز عبور ضروری است.</div>\r\n </div>\r\n </div>\r\n @if(showCaptcha()){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-flex tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\">\r\n عبارت امنیتی\r\n </label>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <input\r\n class=\"tw-w-full tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"cap\"\r\n formControlName=\"cap\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <img class=\"tw-w-36\" [src]=\"'/api/auth/captcha?capId=' + capId() + '&t=' + now()\" loading=\"lazy\"/>\r\n <button\r\n class=\"btn btn-outline-primary btn-sm !tw-border-none tw-w-12 tw-h-8 tw-flex tw-items-center tw-justify-center\"\r\n type=\"button\"\r\n [disabled]=\"loading()\"\r\n (click)=\"onRefreshCaptcha()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"28\"\r\n height=\"28\"\r\n fill=\"currentColor\"\r\n class=\"bi bi-bootstrap-reboot\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n d=\"M1.161 8a6.84 6.84 0 1 0 6.842-6.84.58.58 0 1 1 0-1.16 8 8 0 1 1-6.556 3.412l-.663-.577a.58.58 0 0 1 .227-.997l2.52-.69a.58.58 0 0 1 .728.633l-.332 2.592a.58.58 0 0 1-.956.364l-.643-.56A6.8 6.8 0 0 0 1.16 8z\"\r\n ></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'Login' | bbbTranslate\"\r\n [valid]=\"canLogin()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content ></ng-content>\r\n <div\r\n class=\"tw-p-2 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n","import { Component, input, WritableSignal, signal, inject, Output, EventEmitter } from '@angular/core';\r\nimport { LoginSettings, LoginState } from '../controllers';\r\nimport { ApplicationCtrlrService, PortalService } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-auth',\r\n templateUrl: './barsa-auth.component.html',\r\n styleUrl: './barsa-auth.component.scss',\r\n standalone: false\r\n})\r\nexport class BarsaAuthComponent {\r\n @Output() verified = new EventEmitter();\r\n appSettings = input.required<LoginSettings>();\r\n state: WritableSignal<LoginState> = signal('enter-mobile');\r\n mobile = signal('');\r\n loading = signal(false);\r\n _portalService = inject(PortalService);\r\n _applicationCtrlrService = inject(ApplicationCtrlrService);\r\n ngOnInit(): void {\r\n this.state.set(this.appSettings().DefaultState || 'enter-mobile');\r\n }\r\n onChangeState(state: LoginState): void {\r\n this.state.set(state);\r\n }\r\n onChangeMobile(): void {\r\n this.state.set('enter-mobile');\r\n }\r\n onOtpSent(mobile: string): void {\r\n this.mobile.set(mobile);\r\n this.state.set('verification');\r\n }\r\n onLoggedIn(): void {\r\n this.loading.set(true);\r\n this.verified.emit();\r\n }\r\n}\r\n","<ng-container\r\n *ngTemplateOutlet=\"appSettings() ? renderUi : missAppSettings; context: { $implicit: appSettings() }\"\r\n></ng-container>\r\n<ng-template #missAppSettings> Oops! </ng-template>\r\n<ng-template #renderUi let-appSettings>\r\n <div>\r\n @switch (state()) { @case ('enter-mobile') {\r\n <ba-enter-mobile\r\n (otpSent)=\"onOtpSent($event)\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n [mobileDescription]=\"appSettings.MobileDescription\"\r\n [usernameDescription]=\"appSettings.UsernameDescription\"\r\n [usernameLabel]=\"appSettings.UsernameLabel\"\r\n >\r\n <div class=\"form-footer\">\r\n @if(appSettings.UserPassEnable){\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4 tw-cursor-pointer\"\r\n (click)=\"onChangeState('user-pass')\"\r\n >ورود با نام کاربری\r\n </a>\r\n }\r\n </div>\r\n </ba-enter-mobile>\r\n } @case ('verification') {\r\n <ba-verification\r\n [mobile]=\"mobile()\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n (changeMobile)=\"onChangeMobile()\"\r\n (otpVerified)=\"onLoggedIn()\"\r\n ></ba-verification>\r\n } @case ('user-pass') {\r\n <ba-user-pass (loggedIn)=\"onLoggedIn()\">\r\n <div class=\"form-footer tw-flex tw-justify-between\">\r\n @if(appSettings.UserPassEnable){\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4 tw-cursor-pointer\"\r\n (click)=\"onChangeState('enter-mobile')\"\r\n >ورود با شماره همراه\r\n </a>\r\n }\r\n </div>\r\n </ba-user-pass>\r\n } }\r\n </div>\r\n <div class=\"tw-absolute tw-left-0 tw-right-0 tw-bottom-0 tw-pb-safe\">\r\n @if(appSettings.LoginFooter){\r\n <div [innerHTML]=\"appSettings.LoginFooter | sanitizeText\"></div>\r\n } @if(state()!=='verification' && !appSettings.HideGovSso){\r\n <div class=\"tw-relative tw-flex tw-py-3 tw-items-center tw-px-2\">\r\n <div class=\"tw-flex-grow tw-border-t tw-border-gray-400\"></div>\r\n <span class=\"tw-font-[IRANYekan] tw-flex-shrink tw-mx-4 tw-text-gray-400\">ورود از طریق درگاه</span>\r\n <div class=\"tw-flex-grow tw-border-t tw-border-gray-400\"></div>\r\n </div>\r\n <div class=\"tw-rounded-lg back-box-color tw-w-full tw-py-3\">\r\n <div class=\"tw-flex tw-items-center tw-text-center\">\r\n <a\r\n class=\"tw-w-full tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-cursor-pointer\"\r\n [attr.href]=\"appSettings.GovSSOHref\"\r\n >ورود از طریق درگاه دولت من\r\n </a>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n signal,\r\n WritableSignal,\r\n OnInit,\r\n TemplateRef,\r\n ViewChild,\r\n inject\r\n} from '@angular/core';\r\nimport { LoginSettings } from '../controllers';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { PortalService } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-login',\r\n templateUrl: './login.component.html',\r\n styleUrl: './login.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class LoginComponent implements OnInit {\r\n @ViewChild('template', { static: true, read: TemplateRef }) _errorTemplate: TemplateRef<any>;\r\n settings: Settings;\r\n appSettings: WritableSignal<LoginSettings> = signal({\r\n Logo: null,\r\n HideGovSso: true,\r\n Section1Title: '',\r\n Section1Description: '',\r\n Subtitle: '',\r\n Title: '',\r\n UserPassEnable: false,\r\n UsernameLabel: '',\r\n LogoOnTop: false,\r\n DefaultState: 'enter-mobile',\r\n GovSSOHref: '',\r\n OtpProvider: '',\r\n LoginType: 1,\r\n MobileDescription: '',\r\n UsernameDescription: '',\r\n LoginFooter: '' \r\n });\r\n logoUrl = '';\r\n backgroundUrl = '';\r\n title = '';\r\n hideGovSso = false;\r\n private _activatedRoute = inject(ActivatedRoute);\r\n private _portalService = inject(PortalService);\r\n ngOnInit(): void {\r\n const resolverData = this._activatedRoute.snapshot.data;\r\n if (this.settings?.LoginSettingsValue) {\r\n this.appSettings.set(this.settings?.LoginSettingsValue);\r\n } else if (resolverData) {\r\n this.appSettings.set(resolverData.loginSettings);\r\n }\r\n }\r\n onVerified(): void {\r\n window.location.href = window.location.origin;\r\n }\r\n}\r\ninterface Settings {\r\n LoginSettingsValue: LoginSettings;\r\n}\r\n","@switch (appSettings().Theme$Caption) { @case ('Side') {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} @case ('Center') {\r\n<ng-container *ngTemplateOutlet=\"center\"></ng-container>\r\n} @default {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} }\r\n<ng-template #center>\r\n <div class=\"tw-h-screen tw-flex tw-justify-center tw-items-center\">\r\n <section class=\"login-section tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-container tw-mx-auto\">\r\n <div class=\"tw-bg-transparent tw-border-0\">\r\n <div class=\"tw-flex tw-flex-col md:tw-flex-row rtl:tw-flex-row-reverse\">\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n\r\n <div class=\"tw-hidden md:tw-block md:tw-w-6/12 tw-shadow-sm\">\r\n <img\r\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-s\"\r\n loading=\"lazy\"\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/right-pic.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n\r\n <div class=\"tw-w-full md:tw-w-4/12 tw-relative tw-bg-white tw-shadow-sm tw-border\">\r\n <div class=\"tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-mb-3 tw-text-center\">\r\n <a href=\"/\">\r\n <img\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/logo.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n width=\"175\"\r\n height=\"175\"\r\n loading=\"lazy\"\r\n />\r\n </a>\r\n <div class=\"tw-mt-5\">\r\n <h3 class=\"tw-text-lg tw-font-semibold\">\r\n {{ appSettings().Section1Description }}\r\n </h3>\r\n </div>\r\n </div>\r\n\r\n <!-- فرم ورود -->\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified()\"></ba-auth>\r\n\r\n <hr class=\"tw-border tw-border-gray-300 tw-my-4\" />\r\n\r\n <div\r\n class=\"tw-flex tw-flex-col md:tw-flex-row tw-gap-2 md:tw-gap-4 tw-justify-start tw-text-sm\"\r\n >\r\n <a\r\n id=\"forgetPassword\"\r\n class=\"tw-text-blue-600 hover:tw-underline tw-pt-2 tw-cursor-pointer\"\r\n tabindex=\"6\"\r\n onclick=\"LoginFormUi.ForgetPassword()\"\r\n >\r\n رمز عبور را فراموش کرده ام\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n</ng-template>\r\n<ng-template #side>\r\n <div class=\"tw-bg-white dark:tw-bg-gray-900 tw-w-full tw-h-full\">\r\n <div class=\"tw-flex tw-justify-center tw-h-screen tw-flex-row-reverse\">\r\n <div\r\n class=\"tw-hidden tw-bg-cover lg:tw-block lg:tw-w-2/3\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().BackgroundPicture\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfBackground:appSettings().HeightOfBackground) +\r\n ')'\r\n \"\r\n >\r\n <div class=\"tw-flex tw-items-center tw-h-full tw-px-20 tw-bg-gray-900 tw-bg-opacity-40\">\r\n <div>\r\n <h2 class=\"tw-text-4xl tw-font-bold tw-text-white\">{{ appSettings().Section1Title }}</h2>\r\n <p class=\"tw-max-w-xl tw-mt-3 tw-text-gray-300\">{{ appSettings().Section1Description }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n @if(appSettings().LoginSectionBackground){\r\n <div\r\n class=\"tw-flex tw-items-center tw-w-full tw-px-6 lg:tw-w-2/6 tw-absolute tw-right-0 tw-top-0 tw-bottom-0\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().LoginSectionBackground\r\n | picFieldSrc\r\n : 'ID'\r\n : null\r\n : ''\r\n : appSettings().WidthOfLoginSectionBackground\r\n : appSettings().HeightOfLoginSectionBackground) +\r\n ')'\r\n \"\r\n ></div>\r\n }\r\n <div class=\"tw-flex tw-items-center tw-w-full tw-max-w-md tw-px-6 tw-mx-auto lg:tw-w-2/6 tw-relative\">\r\n <div class=\"tw-flex-1 tw-h-[40rem]\">\r\n <div class=\"tw-text-center tw-flex tw-flex-col tw-items-center tw-mb-8 tw-gap-4\">\r\n <div\r\n class=\"tw-flex tw-items-center\"\r\n [class.tw-flex-col]=\"appSettings().LogoOnTop\"\r\n [class.tw-gap-2]=\"!appSettings().LogoOnTop\"\r\n [class.tw-gap-4]=\"appSettings().LogoOnTop\"\r\n >\r\n <img\r\n loading=\"lazy\"\r\n [src]=\"\r\n appSettings().Logo\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfLogo:appSettings().HeightOfLogo\r\n \"\r\n />\r\n @if(appSettings().Title){\r\n <h2 class=\"tw-text-2xl tw-font-bold tw-text-center tw-text-gray-700 dark:tw-text-white\">\r\n {{ appSettings().Title }}\r\n </h2>\r\n }\r\n </div>\r\n @if(appSettings().Subtitle ){\r\n <div class=\"tw-flex tw-gap-2 tw-items-center\">\r\n <p class=\"tw-text-xl tw-mt-1 tw-text-gray-500 dark:tw-text-gray-300\">\r\n {{ appSettings().Subtitle }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified()\"></ba-auth>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n","import { ComponentFactoryResolver, NgModule, inject } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { BarsaNovinRayCoreModule, BaseModule, DynamicComponentService } from 'barsa-novin-ray-core';\r\nimport {\r\n BarsaAuthComponent,\r\n EnterMobileComponent,\r\n LoginComponent,\r\n TimerCountDownComponent,\r\n UserPassComponent,\r\n VerificationComponent\r\n} from '../public-api';\r\n\r\nconst components = [\r\n BarsaAuthComponent,\r\n EnterMobileComponent,\r\n VerificationComponent,\r\n TimerCountDownComponent,\r\n UserPassComponent,\r\n LoginComponent\r\n];\r\n\r\n@NgModule({\r\n declarations: [...components],\r\n imports: [CommonModule, FormsModule, ReactiveFormsModule, BarsaNovinRayCoreModule],\r\n exports: [...components]\r\n})\r\nexport class BarsaAuthModule extends BaseModule {\r\n protected dcm: DynamicComponentService;\r\n protected componentFactoryResolver: ComponentFactoryResolver;\r\n\r\n protected dynamicComponents = [...components];\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n \r\n\r\n constructor() {\r\n const dcm = inject(DynamicComponentService);\r\n const componentFactoryResolver = inject(ComponentFactoryResolver);\r\n\r\n super(dcm, componentFactoryResolver, 'BarsaAuthModule');\r\n \r\n this.dcm = dcm;\r\n this.componentFactoryResolver = componentFactoryResolver;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of barsa-auth\r\n */\r\n\r\n\r\nexport * from './lib/barsa-auth/barsa-auth.component';\r\nexport * from './lib/enter-mobile/enter-mobile.component';\r\nexport * from './lib/user-pass/user-pass.component';\r\nexport * from './lib/verification/verification.component';\r\nexport * from './lib/timer-countdown/timer-countdown.component';\r\nexport * from './lib/login/login.component';\r\nexport * from './lib/controllers';\r\n\r\nexport * from './lib/barsa-auth.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i4.TimerCountDownComponent","i2","i3.EnterMobileComponent","i4.VerificationComponent","i5.UserPassComponent","i2.BarsaAuthComponent"],"mappings":"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"}
1
+ {"version":3,"file":"barsa-auth.mjs","sources":["../../../projects/barsa-auth/src/lib/controllers/login-mobile-controller.ts","../../../projects/barsa-auth/src/lib/controllers/login-userpass-controller.ts","../../../projects/barsa-auth/src/lib/controllers/login-verification-controller.ts","../../../projects/barsa-auth/src/lib/enter-mobile/enter-mobile.component.ts","../../../projects/barsa-auth/src/lib/enter-mobile/enter-mobile.component.html","../../../projects/barsa-auth/src/lib/timer-countdown/timer-countdown.component.ts","../../../projects/barsa-auth/src/lib/timer-countdown/timer-countdown.component.html","../../../projects/barsa-auth/src/lib/verification/verification.component.ts","../../../projects/barsa-auth/src/lib/verification/verification.component.html","../../../projects/barsa-auth/src/lib/user-pass/user-pass.component.ts","../../../projects/barsa-auth/src/lib/user-pass/user-pass.component.html","../../../projects/barsa-auth/src/lib/barsa-auth/barsa-auth.component.ts","../../../projects/barsa-auth/src/lib/barsa-auth/barsa-auth.component.html","../../../projects/barsa-auth/src/lib/login/login.component.ts","../../../projects/barsa-auth/src/lib/login/login.component.html","../../../projects/barsa-auth/src/lib/barsa-auth.module.ts","../../../projects/barsa-auth/src/public-api.ts","../../../projects/barsa-auth/src/barsa-auth.ts"],"sourcesContent":["import { FormGroup } from '@angular/forms';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { catchError, finalize, throwError } from 'rxjs';\r\n\r\nimport { BaseController, IViewBase } from 'barsa-novin-ray-core';\r\n\r\nexport class LoginMobileController extends BaseController<ILoginMobileView> {\r\n private _httpClient: HttpClient;\r\n /**\r\n *\r\n */\r\n\r\n constructor(view: ILoginMobileView) {\r\n super(view);\r\n this._httpClient = view.injector.get(HttpClient);\r\n }\r\n get form(): FormGroup {\r\n return this.view.form;\r\n }\r\n sendCode(otpProvider: string, e): void {\r\n const { mobile, username } = e;\r\n this.form.valid && this.view.setLoading(true);\r\n this.view.showError('', -1);\r\n // const x = (): void => {\r\n // this.loading.set(false);\r\n // };\r\n const usernamequery = username ? `&username=${username}` : '';\r\n this._httpClient\r\n .get<{ otpId: string }>(`/api/openid/signin?provider=${otpProvider}&mobile=${mobile}${usernamequery}`)\r\n .pipe(\r\n finalize(() => {\r\n this.view.setLoading(false);\r\n }),\r\n catchError((err) => {\r\n if (typeof err === 'object' && err.status === 403) {\r\n this.view.showError(err.error.Message, err.error.Code);\r\n }\r\n return throwError(() => new Error(err));\r\n })\r\n )\r\n .subscribe((c) => {\r\n if (c?.otpId) {\r\n localStorage.setItem('otpId', c.otpId);\r\n this.view.codeSent();\r\n } else {\r\n const res = c as any;\r\n if (!res.succeed) {\r\n this.view.showError(res.error.userMessage, res.type);\r\n }\r\n // debugger;\r\n }\r\n });\r\n }\r\n init(): void {\r\n this.form.valueChanges.subscribe((_c) =>\r\n this.form.valid ? this.view.canSend(true) : this.view.canSend(false)\r\n );\r\n }\r\n}\r\n\r\nexport interface ILoginMobileView extends IViewBase {\r\n showError(message: any, code: any): void;\r\n form: FormGroup;\r\n codeSent: () => void;\r\n setLoading: (loading: boolean) => void;\r\n canSend: (loading: boolean) => void;\r\n}\r\n","import { FormGroup } from '@angular/forms';\r\nimport { BarsaApi, BaseController, IViewBase } from 'barsa-novin-ray-core';\r\n\r\nexport class LoginUserPassController extends BaseController<ILoginUserPassView> {\r\n get form(): FormGroup {\r\n return this.view.form;\r\n }\r\n login(e: any): void {\r\n const { username, password, cap, capId } = e;\r\n this.view.setLoading(true);\r\n this.view.showError('', -1);\r\n const data = {\r\n un: username,\r\n pwd: password,\r\n cap,\r\n capId\r\n };\r\n BarsaApi.Bw.Login(data, {\r\n onSuccess: () => {\r\n this.view.userLoggedIn();\r\n },\r\n onError: (response2) => {\r\n this.view.setLoading(false);\r\n const response = response2.Data.ResponseData;\r\n let error = response.error;\r\n if (!error) {\r\n error = response;\r\n }\r\n const data = response.data;\r\n this.view.showError(error.userMessage, -1);\r\n if (data.showCaptcha) {\r\n this.view.visibleCaptcha(true);\r\n }\r\n }\r\n });\r\n }\r\n\r\n init(): void {\r\n this.form.valueChanges.subscribe((_c) => this.view.setValid(this.form.valid));\r\n if (BarsaApi.LoginFormData.ShowCaptcha === 'Show') {\r\n this.view.visibleCaptcha(true);\r\n }\r\n }\r\n}\r\n\r\nexport interface ILoginUserPassView extends IViewBase {\r\n form: FormGroup;\r\n showError(message: any, code: any): void;\r\n visibleCaptcha: (visible: boolean) => void;\r\n setLoading: (loading: boolean) => void;\r\n setValid: (isValid: boolean) => void;\r\n userLoggedIn: () => void;\r\n}\r\n","import { signal } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { catchError, finalize, throwError } from 'rxjs';\r\n\r\nimport { BaseController, IViewBase, BarsaApi } from 'barsa-novin-ray-core';\r\n\r\nexport class LoginVerificationController extends BaseController<ILoginVerificationView> {\r\n canVerify = signal(false);\r\n _httpClient: HttpClient;\r\n\r\n constructor(view: ILoginVerificationView) {\r\n super(view);\r\n this._httpClient = view.injector.get(HttpClient);\r\n }\r\n\r\n get form(): FormGroup {\r\n return this.view.form;\r\n }\r\n resendCode(otpProvider: string): void {\r\n this.view.setResetLoading(true);\r\n this._httpClient\r\n .get<{ otpId: string }>(`/api/openid/signin?provider=${otpProvider}&otpId=${localStorage.getItem('otpId')}`)\r\n .pipe(\r\n finalize(() => {}),\r\n catchError((err) => {\r\n this.view.setResetLoading(false);\r\n if (typeof err === 'object' && err.status === 403) {\r\n this.view.showError(err.error.Message, err.error.Code);\r\n }\r\n return throwError(() => new Error(err));\r\n })\r\n )\r\n .subscribe((_c) => {\r\n this.view.setResetLoading(false);\r\n this.view.startCountDown();\r\n });\r\n }\r\n verifyCode(otpProvider: string, e): void {\r\n this.view.setLoading(true);\r\n const { code, cap, capId } = e;\r\n\r\n this._httpClient\r\n .post<{ Sth: string }>(`/api/openid/callback?provider=${otpProvider}`, {\r\n otpId: localStorage.getItem('otpId'),\r\n otpCode: code,\r\n captchaCode: cap,\r\n capId\r\n })\r\n .pipe(\r\n finalize(() => {\r\n this.view.setLoading(false);\r\n }),\r\n catchError((err) => {\r\n if (typeof err === 'object' && err.status === 403) {\r\n this.view.showError(err.error.Message, err.error.Code);\r\n }\r\n return throwError(() => new Error(err));\r\n })\r\n )\r\n .subscribe((c) => {\r\n if (c?.Sth) {\r\n localStorage.removeItem('otpId');\r\n window.localStorage.setItem(BarsaApi.LoginAction.token2StorageKey, c.Sth);\r\n this.view.codeVerified();\r\n } else {\r\n const res = c as any;\r\n if (!res.succeed) {\r\n this.view.showError(res.error.userMessage, res.type);\r\n }\r\n }\r\n });\r\n }\r\n init(): void {\r\n this.form.valueChanges.subscribe((_c) =>\r\n this.form.valid ? this.canVerify.set(true) : this.canVerify.set(false)\r\n );\r\n }\r\n}\r\nexport interface ILoginVerificationView extends IViewBase {\r\n form: FormGroup;\r\n codeVerified: () => void;\r\n startCountDown: () => void;\r\n setResetLoading: (loading: boolean) => void;\r\n setLoading: (loading: boolean) => void;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n TemplateRef,\r\n signal,\r\n inject\r\n} from '@angular/core';\r\nimport { ILoginMobileView, LoginMobileController } from '../controllers';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { forbiddenValidator, mobile_regex, ViewBase } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-enter-mobile',\r\n templateUrl: './enter-mobile.component.html',\r\n styleUrl: './enter-mobile.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class EnterMobileComponent extends ViewBase<LoginMobileController> implements ILoginMobileView {\r\n @Output() otpSent = new EventEmitter<string>();\r\n @Input() errorTemplate: TemplateRef<any>;\r\n @Input() otpProvider: string;\r\n @Input() mobileDescription: string;\r\n @Input() usernameDescription: string;\r\n @Input() usernameLabel: string;\r\n controller = new LoginMobileController(this);\r\n form: FormGroup;\r\n loading = signal(false);\r\n isValid = signal(false);\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n private fb = inject(FormBuilder);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.form = this.fb.group({\r\n mobile: [\r\n '',\r\n Validators.compose([Validators.required, Validators.maxLength(11), forbiddenValidator(mobile_regex)])\r\n ],\r\n username: ['', Validators.compose([])],\r\n updateOn: 'blur'\r\n });\r\n }\r\n get mobile(): any {\r\n return this.form.get('mobile');\r\n }\r\n get username(): any {\r\n return this.form.get('username');\r\n }\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n if (this.usernameLabel) {\r\n this.form.get('username')?.addValidators([Validators.required, Validators.minLength(2)]);\r\n }\r\n }\r\n codeSent(): void {\r\n this.otpSent.emit(this.form.value.mobile);\r\n }\r\n setLoading(loading: boolean): void {\r\n this.loading.set(loading);\r\n }\r\n\r\n canSend(isValid: boolean): void {\r\n this.isValid.set(isValid);\r\n }\r\n onSendCode(): void {\r\n this.controller.sendCode(this.otpProvider, this.form.value);\r\n }\r\n}\r\n","<form class=\"tw-mt-2\" [formGroup]=\"form\">\r\n @if(usernameLabel){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\">\r\n {{usernameLabel}}\r\n </label>\r\n @if(usernameDescription){\r\n <div [innerHtml]=\"usernameDescription | sanitizeText\" class=\"tw-text-gray-500 tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched) && username?.errors.length\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">{{usernameLabel}} ضروری است</div>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"tw-mb-4\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> شماره همراه </label>\r\n @if(mobileDescription){\r\n <div [innerHtml]=\"mobileDescription | sanitizeText\" class=\"tw-text-gray-500 tw-mb-4 tw-text-xs\"></div>\r\n }\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"mobile\"\r\n formControlName=\"mobile\"\r\n placeholder=\"09121234567\"\r\n maxlength=\"11\"\r\n type=\"tel\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"mobile.invalid && (mobile.dirty || mobile.touched) && mobile?.errors.length\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"mobile.errors?.['required']\">شماره همراه ضروری است</div>\r\n </div>\r\n </div>\r\n\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'ارسال کد تایید'\"\r\n [valid]=\"isValid()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content></ng-content>\r\n <div\r\n class=\"tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, Input, signal, EventEmitter, Output } from '@angular/core';\r\nimport { BaseComponent } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-timer-countdown',\r\n templateUrl: './timer-countdown.component.html',\r\n styleUrl: './timer-countdown.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class TimerCountDownComponent extends BaseComponent {\r\n @Output() resend = new EventEmitter();\r\n @Input() minutes: number;\r\n @Input() loading: boolean;\r\n showResend = signal(false);\r\n minutesText = signal('');\r\n secondText = signal('');\r\n _interval: any;\r\n private _countDownDate: number;\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n this.startCountDown();\r\n }\r\n ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n if (this._interval) {\r\n clearInterval(this._interval);\r\n }\r\n }\r\n startCountDown(): void {\r\n const tcountDownDate: Date = new Date();\r\n const nmin = tcountDownDate.getMinutes();\r\n tcountDownDate.setMinutes(nmin + this.minutes);\r\n this._countDownDate = tcountDownDate.getTime();\r\n this.showResend.set(false);\r\n this._calc();\r\n this._interval = setInterval(() => {\r\n this._calc();\r\n }, 1000);\r\n }\r\n _calc(): void {\r\n const now = new Date().getTime();\r\n const distance: any = this._countDownDate - now;\r\n\r\n // Time calculations for days, hours, minutes and seconds\r\n // const _days = Math.floor(distance / (1000 * 60 * 60 * 24));\r\n // const _hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n const seconds = Math.floor((distance % (1000 * 60)) / 1000);\r\n\r\n // Display the result in the respective elements\r\n this.minutesText.set(\r\n minutes.toLocaleString('en-US', {\r\n minimumIntegerDigits: 2,\r\n useGrouping: false\r\n })\r\n );\r\n this.secondText.set(\r\n seconds.toLocaleString('en-US', {\r\n minimumIntegerDigits: 2,\r\n useGrouping: false\r\n })\r\n );\r\n\r\n // If the count down is over, write some text\r\n if (distance < 0) {\r\n clearInterval(this._interval);\r\n this._interval = null;\r\n this.showResend.set(true);\r\n }\r\n }\r\n}\r\n","@if(showResend()){\r\n<bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'ارسال مجدد'\"\r\n [valid]=\"true\"\r\n [loading]=\"loading\"\r\n [transparent]=\"true\"\r\n (click)=\"resend.emit()\"\r\n></bnrc-button-loading>\r\n}@else{\r\n<div class=\"tw-text-center\">\r\n <div\r\n id=\"timer\"\r\n class=\"tw-px-2 tw-flex tw-flex-row-reverse gap-2 tw-justify-center tw-uppercase\"\r\n style=\"align-items: center; color: var(--button-loading)\"\r\n [style.visibility]=\"minutesText() ? 'visible' : 'hidden'\"\r\n >\r\n <div>\r\n <span class=\"tw-text-xl\">{{ minutesText() }}</span>\r\n </div>\r\n <div class=\"tw-text-2xl\">:</div>\r\n <div>\r\n <span class=\"tw-text-xl\">{{ secondText() }}</span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n NgZone,\r\n Output,\r\n QueryList,\r\n signal,\r\n TemplateRef,\r\n ViewChild,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { getUniqueId, BarsaApi, ViewBase } from 'barsa-novin-ray-core';\r\n\r\nimport { ILoginVerificationView, LoginVerificationController } from '../controllers';\r\nimport { TimerCountDownComponent } from '../timer-countdown/timer-countdown.component';\r\n\r\n@Component({\r\n selector: 'ba-verification',\r\n templateUrl: './verification.component.html',\r\n styleUrl: './verification.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class VerificationComponent extends ViewBase<LoginVerificationController> implements ILoginVerificationView {\r\n @ViewChild(TimerCountDownComponent) _timerCountDown: TimerCountDownComponent;\r\n @ViewChildren('inputv') _inputsEl: QueryList<ElementRef>;\r\n @ViewChild('loadingBtn') _loadingBtn: TemplateRef<any>;\r\n @Output() otpVerified = new EventEmitter();\r\n @Output() changeMobile = new EventEmitter();\r\n @Input() mobile: string;\r\n @Input() otpProvider: string;\r\n @Input() errorTemplate: TemplateRef<any>;\r\n\r\n controller = new LoginVerificationController(this);\r\n form: FormGroup;\r\n capId = signal('-');\r\n resendLoading = signal(false);\r\n loading = signal(false);\r\n showCaptcha = signal(false);\r\n _ngZone = inject(NgZone);\r\n now = signal(getUniqueId(3));\r\n private fb = inject(FormBuilder);\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n\r\n constructor() {\r\n super();\r\n this.form = this.fb.group({\r\n in1: ['', Validators.compose([Validators.required, Validators.maxLength(6)])],\r\n cap: [''],\r\n capId: [this.capId(), Validators.required]\r\n });\r\n }\r\n get in1(): any {\r\n return this.form.get('in1');\r\n }\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n this.showCaptcha.set(true);\r\n }\r\n showError(message: string, code: number): void {\r\n super.showError(message, code);\r\n this.capId.set(BarsaApi.LoginFormData.CaptchaId);\r\n }\r\n codeVerified(): void {\r\n this.otpVerified.emit();\r\n }\r\n onRefreshCaptcha(): void {\r\n this.now.set(getUniqueId(3));\r\n }\r\n onVerifyCode(): void {\r\n this._verifyCode();\r\n }\r\n onResendOtp(): void {\r\n this.controller.resendCode(this.otpProvider);\r\n }\r\n _verifyCode(): void {\r\n const { in1, capId, cap } = this.form.value;\r\n this.controller.verifyCode(this.otpProvider, { code: `${in1}`, capId, cap });\r\n }\r\n setResetLoading(loading: boolean): void {\r\n this.resendLoading.set(loading);\r\n }\r\n setLoading(loading: boolean): void {\r\n this.loading.set(loading);\r\n }\r\n startCountDown(): void {\r\n this._timerCountDown.startCountDown();\r\n }\r\n get invArr(): ElementRef[] {\r\n return this._inputsEl.toArray();\r\n }\r\n\r\n get canVerify(): boolean {\r\n return this.controller.canVerify();\r\n }\r\n}\r\n","<form class=\"tw-pb-8 tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <label class=\"tw-block tw-w-full tw-text-gray-500 tw-text-md tw-font-bold tw-mb-4 tw-text-sm\">\r\n کد ارسال شده به شماره <strong>{{ mobile }}</strong> را وارد نمایید.\r\n </label>\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-cursor-pointer tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4\"\r\n (click)=\"changeMobile.emit()\"\r\n >ویرایش شماره همراه\r\n <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"tw-w-6\">\r\n <path\r\n d=\"M5,18H9.24a1,1,0,0,0,.71-.29l6.92-6.93h0L19.71,8a1,1,0,0,0,0-1.42L15.47,2.29a1,1,0,0,0-1.42,0L11.23,5.12h0L4.29,12.05a1,1,0,0,0-.29.71V17A1,1,0,0,0,5,18ZM14.76,4.41l2.83,2.83L16.17,8.66,13.34,5.83ZM6,13.17l5.93-5.93,2.83,2.83L8.83,16H6ZM21,20H3a1,1,0,0,0,0,2H21a1,1,0,0,0,0-2Z\"\r\n fill=\"#316bec\"\r\n />\r\n </svg>\r\n </a>\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-3 tw-mb-4\">\r\n <input\r\n #inputv\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n maxlength=\"6\"\r\n tabindex=\"0\"\r\n onkeypress=\"return event.charCode>=48 && event.charCode<=57\"\r\n name=\"in1\"\r\n [autoUpdate]=\"true\"\r\n appWebotp\r\n formControlName=\"in1\"\r\n />\r\n <ba-timer-countdown [minutes]=\"2\" (resend)=\"onResendOtp()\" [loading]=\"resendLoading()\"></ba-timer-countdown>\r\n </div>\r\n <div\r\n *ngIf=\"in1.invalid && (in1.dirty || in1.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"in1.errors?.['required']\">کد تایید ضروری است</div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-2\">\r\n <bnrc-button-loading\r\n #loadingBtn\r\n [text]=\"'تایید کد'\"\r\n [valid]=\"canVerify\"\r\n [loading]=\"loading()\"\r\n (click)=\"onVerifyCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <div\r\n class=\"tw-p-4 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n signal,\r\n TemplateRef,\r\n inject\r\n} from '@angular/core';\r\nimport { ILoginUserPassView, LoginUserPassController } from '../controllers';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { getUniqueId, ViewBase, validateAllFormFields } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-user-pass',\r\n templateUrl: './user-pass.component.html',\r\n styleUrl: './user-pass.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class UserPassComponent extends ViewBase<LoginUserPassController> implements ILoginUserPassView {\r\n @Output() loggedIn = new EventEmitter<void>();\r\n @Input() errorTemplate: TemplateRef<any>;\r\n @Input() otpProvider: string;\r\n\r\n controller = new LoginUserPassController(this);\r\n form: FormGroup;\r\n canLogin = signal(false);\r\n loading = signal(false);\r\n capId = signal(getUniqueId(4));\r\n now = signal(getUniqueId(3));\r\n showCaptcha = signal(false);\r\n\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n private fb = inject(FormBuilder);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.form = this.fb.group({\r\n username: ['', Validators.compose([Validators.required, Validators.minLength(1)])],\r\n password: ['', Validators.compose([Validators.required, Validators.minLength(1)])],\r\n cap: [''],\r\n capId: [this.capId(), Validators.required]\r\n });\r\n }\r\n get username(): any {\r\n return this.form.get('username');\r\n }\r\n get password(): any {\r\n return this.form.get('password');\r\n }\r\n get cap(): any {\r\n return this.form.get('cap');\r\n }\r\n userLoggedIn(): void {\r\n this.loggedIn.emit();\r\n }\r\n setLoading(loading: boolean): void {\r\n this.loading.set(loading);\r\n }\r\n setValid(isValid: boolean): void {\r\n this.canLogin.set(isValid);\r\n }\r\n showError(message: string, code: number): void {\r\n super.showError(message, code);\r\n setTimeout(() => {\r\n this.errorMessage.set('');\r\n this.errorCode.set(-1);\r\n }, 3000);\r\n }\r\n visibleCaptcha(visible: boolean): void {\r\n this.now.set(getUniqueId(3));\r\n this.showCaptcha.set(visible);\r\n this.cap.reset();\r\n }\r\n onRefreshCaptcha(): void {\r\n this.now.set(getUniqueId(3));\r\n }\r\n onSendCode(): void {\r\n validateAllFormFields(this.form);\r\n this.canLogin() && !this.loading() && this.controller.login(this.form.value);\r\n }\r\n}\r\n","<form class=\"tw-mb-2 tw-mt-2\" [formGroup]=\"form\">\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> نام کاربری </label>\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"username\"\r\n formControlName=\"username\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"username.invalid && (username.dirty || username.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"username.errors?.['required']\">نام کاربری ضروری است.</div>\r\n </div>\r\n </div>\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\"> رمز عبور </label>\r\n <input\r\n class=\"tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"password\"\r\n formControlName=\"password\"\r\n placeholder=\"\"\r\n type=\"password\"\r\n [disabled]=\"loading()\"\r\n />\r\n <div\r\n *ngIf=\"password.invalid && (password.dirty || password.touched)\"\r\n class=\"tw-p-2 tw-mb-2 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n >\r\n <div *ngIf=\"password.errors?.['required']\">رمز عبور ضروری است.</div>\r\n </div>\r\n </div>\r\n @if(showCaptcha()){\r\n <div class=\"tw-mb-2\">\r\n <label class=\"tw-flex tw-block tw-text-gray-500 tw-text-md tw-font-bold tw-mb-2\" for=\"username\">\r\n عبارت امنیتی\r\n </label>\r\n <div class=\"tw-flex tw-items-center tw-gap-1\">\r\n <input\r\n class=\"tw-w-full tw-rounded-lg tw-border tw-w-full tw-py-2 tw-px-3 tw-text-gray-700 tw-leading-tight tw-focus:tw-outline-none tw-focus:tw-shadow-outline\"\r\n name=\"cap\"\r\n formControlName=\"cap\"\r\n placeholder=\"\"\r\n type=\"text\"\r\n [disabled]=\"loading()\"\r\n />\r\n <img class=\"tw-w-36\" [src]=\"'/api/auth/captcha?capId=' + capId() + '&t=' + now()\" loading=\"lazy\"/>\r\n <button\r\n class=\"btn btn-outline-primary btn-sm !tw-border-none tw-w-12 tw-h-8 tw-flex tw-items-center tw-justify-center\"\r\n type=\"button\"\r\n [disabled]=\"loading()\"\r\n (click)=\"onRefreshCaptcha()\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"28\"\r\n height=\"28\"\r\n fill=\"currentColor\"\r\n class=\"bi bi-bootstrap-reboot\"\r\n viewBox=\"0 0 16 16\"\r\n >\r\n <path\r\n d=\"M1.161 8a6.84 6.84 0 1 0 6.842-6.84.58.58 0 1 1 0-1.16 8 8 0 1 1-6.556 3.412l-.663-.577a.58.58 0 0 1 .227-.997l2.52-.69a.58.58 0 0 1 .728.633l-.332 2.592a.58.58 0 0 1-.956.364l-.643-.56A6.8 6.8 0 0 0 1.16 8z\"\r\n ></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n <!-- <app-form-captcha [capId]=\"capId()\" [showCaptcha]=\"showCaptcha()\" formControlName=\"cap\"></app-form-captcha> -->\r\n <div class=\"tw-flex tw-items-center tw-mb-4 tw-mt-8\">\r\n <bnrc-button-loading\r\n [text]=\"'Login' | bbbTranslate\"\r\n [valid]=\"canLogin()\"\r\n [loading]=\"loading()\"\r\n (click)=\"onSendCode()\"\r\n ></bnrc-button-loading>\r\n </div>\r\n <ng-content ></ng-content>\r\n <div\r\n class=\"tw-p-2 tw-mb-4 tw-mt-2 tw-text-xs tw-text-red-800 tw-rounded-lg tw-bg-red-50 dark:tw-bg-gray-800 dark:tw-text-red-400\"\r\n [style.visibility]=\"errorMessage() ? 'visible' : 'hidden'\"\r\n role=\"alert\"\r\n >\r\n <span class=\"tw-font-medium\">{{ 'Error' | bbbTranslate }}!</span> {{ errorMessage() }}\r\n </div>\r\n</form>\r\n","import { Component, input, WritableSignal, signal, inject, Output, EventEmitter } from '@angular/core';\r\nimport { LoginSettings, LoginState } from '../controllers';\r\nimport { ApplicationCtrlrService, PortalService } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-auth',\r\n templateUrl: './barsa-auth.component.html',\r\n styleUrl: './barsa-auth.component.scss',\r\n standalone: false\r\n})\r\nexport class BarsaAuthComponent {\r\n @Output() verified = new EventEmitter();\r\n appSettings = input.required<LoginSettings>();\r\n state: WritableSignal<LoginState> = signal('enter-mobile');\r\n mobile = signal('');\r\n loading = signal(false);\r\n _portalService = inject(PortalService);\r\n _applicationCtrlrService = inject(ApplicationCtrlrService);\r\n ngOnInit(): void {\r\n this.state.set(this.appSettings().DefaultState || 'enter-mobile');\r\n }\r\n onChangeState(state: LoginState): void {\r\n this.state.set(state);\r\n }\r\n onChangeMobile(): void {\r\n this.state.set('enter-mobile');\r\n }\r\n onOtpSent(mobile: string): void {\r\n this.mobile.set(mobile);\r\n this.state.set('verification');\r\n }\r\n onLoggedIn(): void {\r\n this.loading.set(true);\r\n this.verified.emit();\r\n }\r\n}\r\n","<ng-container\r\n *ngTemplateOutlet=\"appSettings() ? renderUi : missAppSettings; context: { $implicit: appSettings() }\"\r\n></ng-container>\r\n<ng-template #missAppSettings> Oops! </ng-template>\r\n<ng-template #renderUi let-appSettings>\r\n <div>\r\n @switch (state()) { @case ('enter-mobile') {\r\n <ba-enter-mobile\r\n (otpSent)=\"onOtpSent($event)\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n [mobileDescription]=\"appSettings.MobileDescription\"\r\n [usernameDescription]=\"appSettings.UsernameDescription\"\r\n [usernameLabel]=\"appSettings.UsernameLabel\"\r\n >\r\n <div class=\"form-footer\">\r\n @if(appSettings.UserPassEnable){\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4 tw-cursor-pointer\"\r\n (click)=\"onChangeState('user-pass')\"\r\n >ورود با نام کاربری\r\n </a>\r\n }\r\n </div>\r\n </ba-enter-mobile>\r\n } @case ('verification') {\r\n <ba-verification\r\n [mobile]=\"mobile()\"\r\n [otpProvider]=\"appSettings.OtpProvider\"\r\n (changeMobile)=\"onChangeMobile()\"\r\n (otpVerified)=\"onLoggedIn()\"\r\n ></ba-verification>\r\n } @case ('user-pass') {\r\n <ba-user-pass (loggedIn)=\"onLoggedIn()\">\r\n <div class=\"form-footer tw-flex tw-justify-between\">\r\n @if(appSettings.UserPassEnable){\r\n <a\r\n class=\"tw-inline-flex tw-flex tw-gap-3 tw-items-center tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-mb-4 tw-cursor-pointer\"\r\n (click)=\"onChangeState('enter-mobile')\"\r\n >ورود با شماره همراه\r\n </a>\r\n }\r\n </div>\r\n </ba-user-pass>\r\n } }\r\n </div>\r\n <div class=\"tw-absolute tw-left-0 tw-right-0 tw-bottom-0 tw-pb-safe\">\r\n @if(appSettings.LoginFooter){\r\n <div [innerHTML]=\"appSettings.LoginFooter | sanitizeText\"></div>\r\n } @if(state()!=='verification' && !appSettings.HideGovSso){\r\n <div class=\"tw-relative tw-flex tw-py-3 tw-items-center tw-px-2\">\r\n <div class=\"tw-flex-grow tw-border-t tw-border-gray-400\"></div>\r\n <span class=\"tw-font-[IRANYekan] tw-flex-shrink tw-mx-4 tw-text-gray-400\">ورود از طریق درگاه</span>\r\n <div class=\"tw-flex-grow tw-border-t tw-border-gray-400\"></div>\r\n </div>\r\n <div class=\"tw-rounded-lg back-box-color tw-w-full tw-py-3\">\r\n <div class=\"tw-flex tw-items-center tw-text-center\">\r\n <a\r\n class=\"tw-w-full tw-text-blue-600 tw-visited:tw-text-purple-600 tw-text-sm tw-font-medium tw-cursor-pointer\"\r\n [attr.href]=\"appSettings.GovSSOHref\"\r\n >ورود از طریق درگاه دولت من\r\n </a>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n signal,\r\n WritableSignal,\r\n OnInit,\r\n TemplateRef,\r\n ViewChild,\r\n inject\r\n} from '@angular/core';\r\nimport { LoginSettings } from '../controllers';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { PortalService } from 'barsa-novin-ray-core';\r\n\r\n@Component({\r\n selector: 'ba-login',\r\n templateUrl: './login.component.html',\r\n styleUrl: './login.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class LoginComponent implements OnInit {\r\n @ViewChild('template', { static: true, read: TemplateRef }) _errorTemplate: TemplateRef<any>;\r\n settings: Settings;\r\n appSettings: WritableSignal<LoginSettings> = signal({\r\n Logo: null,\r\n HideGovSso: true,\r\n Section1Title: '',\r\n Section1Description: '',\r\n Subtitle: '',\r\n Title: '',\r\n UserPassEnable: false,\r\n UsernameLabel: '',\r\n LogoOnTop: false,\r\n DefaultState: 'enter-mobile',\r\n GovSSOHref: '',\r\n OtpProvider: '',\r\n LoginType: 1,\r\n MobileDescription: '',\r\n UsernameDescription: '',\r\n LoginFooter: '' \r\n });\r\n logoUrl = '';\r\n backgroundUrl = '';\r\n title = '';\r\n hideGovSso = false;\r\n private _activatedRoute = inject(ActivatedRoute);\r\n private _portalService = inject(PortalService);\r\n ngOnInit(): void {\r\n const resolverData = this._activatedRoute.snapshot.data;\r\n if (this.settings?.LoginSettingsValue) {\r\n this.appSettings.set(this.settings?.LoginSettingsValue);\r\n } else if (resolverData) {\r\n this.appSettings.set(resolverData.loginSettings);\r\n }\r\n }\r\n onVerified(): void {\r\n window.location.href = window.location.origin;\r\n }\r\n}\r\ninterface Settings {\r\n LoginSettingsValue: LoginSettings;\r\n}\r\n","@switch (appSettings().Theme$Caption) { @case ('Side') {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} @case ('Center') {\r\n<ng-container *ngTemplateOutlet=\"center\"></ng-container>\r\n} @default {\r\n<ng-container *ngTemplateOutlet=\"side\"></ng-container>\r\n} }\r\n<ng-template #center>\r\n <div class=\"tw-h-screen tw-flex tw-justify-center tw-items-center\">\r\n <section class=\"login-section tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-container tw-mx-auto\">\r\n <div class=\"tw-bg-transparent tw-border-0\">\r\n <div class=\"tw-flex tw-flex-col md:tw-flex-row rtl:tw-flex-row-reverse\">\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n\r\n <div class=\"tw-hidden md:tw-block md:tw-w-6/12 tw-shadow-sm\">\r\n <img\r\n class=\"tw-w-full tw-h-full tw-object-cover tw-rounded-s\"\r\n loading=\"lazy\"\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/right-pic.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n loading=\"lazy\"\r\n />\r\n </div>\r\n\r\n <div class=\"tw-w-full md:tw-w-4/12 tw-relative tw-bg-white tw-shadow-sm tw-border\">\r\n <div class=\"tw-p-3 md:tw-p-4 xl:tw-p-5\">\r\n <div class=\"tw-mb-3 tw-text-center\">\r\n <a href=\"/\">\r\n <img\r\n src=\"/Login/SystemThemes/Default/LoginFormPanel/logo.jpg\"\r\n alt=\"[LoginFrom_Title]\"\r\n width=\"175\"\r\n height=\"175\"\r\n loading=\"lazy\"\r\n />\r\n </a>\r\n <div class=\"tw-mt-5\">\r\n <h3 class=\"tw-text-lg tw-font-semibold\">\r\n {{ appSettings().Section1Description }}\r\n </h3>\r\n </div>\r\n </div>\r\n\r\n <!-- فرم ورود -->\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified()\"></ba-auth>\r\n\r\n <hr class=\"tw-border tw-border-gray-300 tw-my-4\" />\r\n\r\n <div\r\n class=\"tw-flex tw-flex-col md:tw-flex-row tw-gap-2 md:tw-gap-4 tw-justify-start tw-text-sm\"\r\n >\r\n <a\r\n id=\"forgetPassword\"\r\n class=\"tw-text-blue-600 hover:tw-underline tw-pt-2 tw-cursor-pointer\"\r\n tabindex=\"6\"\r\n onclick=\"LoginFormUi.ForgetPassword()\"\r\n >\r\n رمز عبور را فراموش کرده ام\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tw-hidden md:tw-block md:tw-w-1/12\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n</ng-template>\r\n<ng-template #side>\r\n <div class=\"tw-bg-white dark:tw-bg-gray-900 tw-w-full tw-h-full\">\r\n <div class=\"tw-flex tw-justify-center tw-h-screen tw-flex-row-reverse\">\r\n <div\r\n class=\"tw-hidden tw-bg-cover lg:tw-block lg:tw-w-2/3\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().BackgroundPicture\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfBackground:appSettings().HeightOfBackground) +\r\n ')'\r\n \"\r\n >\r\n <div class=\"tw-flex tw-items-center tw-h-full tw-px-20 tw-bg-gray-900 tw-bg-opacity-40\">\r\n <div>\r\n <h2 class=\"tw-text-4xl tw-font-bold tw-text-white\">{{ appSettings().Section1Title }}</h2>\r\n <p class=\"tw-max-w-xl tw-mt-3 tw-text-gray-300\">{{ appSettings().Section1Description }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n @if(appSettings().LoginSectionBackground){\r\n <div\r\n class=\"tw-flex tw-items-center tw-w-full tw-px-6 lg:tw-w-2/6 tw-absolute tw-right-0 tw-top-0 tw-bottom-0\"\r\n [style.background-image]=\"\r\n 'url(' +\r\n (appSettings().LoginSectionBackground\r\n | picFieldSrc\r\n : 'ID'\r\n : null\r\n : ''\r\n : appSettings().WidthOfLoginSectionBackground\r\n : appSettings().HeightOfLoginSectionBackground) +\r\n ')'\r\n \"\r\n ></div>\r\n }\r\n <div class=\"tw-flex tw-items-center tw-w-full tw-max-w-md tw-px-6 tw-mx-auto lg:tw-w-2/6 tw-relative\">\r\n <div class=\"tw-flex-1 tw-h-[40rem]\">\r\n <div class=\"tw-text-center tw-flex tw-flex-col tw-items-center tw-mb-8 tw-gap-4\">\r\n <div\r\n class=\"tw-flex tw-items-center\"\r\n [class.tw-flex-col]=\"appSettings().LogoOnTop\"\r\n [class.tw-gap-2]=\"!appSettings().LogoOnTop\"\r\n [class.tw-gap-4]=\"appSettings().LogoOnTop\"\r\n >\r\n <img\r\n loading=\"lazy\"\r\n [src]=\"\r\n appSettings().Logo\r\n | picFieldSrc: 'ID':null:'':appSettings().WidthOfLogo:appSettings().HeightOfLogo\r\n \"\r\n />\r\n @if(appSettings().Title){\r\n <h2 class=\"tw-text-2xl tw-font-bold tw-text-center tw-text-gray-700 dark:tw-text-white\">\r\n {{ appSettings().Title }}\r\n </h2>\r\n }\r\n </div>\r\n @if(appSettings().Subtitle ){\r\n <div class=\"tw-flex tw-gap-2 tw-items-center\">\r\n <p class=\"tw-text-xl tw-mt-1 tw-text-gray-500 dark:tw-text-gray-300\">\r\n {{ appSettings().Subtitle }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n <ba-auth [appSettings]=\"appSettings()\" (verified)=\"onVerified()\"></ba-auth>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n","import { NgModule, inject } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { BarsaNovinRayCoreModule, BaseModule, DynamicComponentService } from 'barsa-novin-ray-core';\r\nimport {\r\n BarsaAuthComponent,\r\n EnterMobileComponent,\r\n LoginComponent,\r\n TimerCountDownComponent,\r\n UserPassComponent,\r\n VerificationComponent\r\n} from '../public-api';\r\n\r\nconst components = [\r\n BarsaAuthComponent,\r\n EnterMobileComponent,\r\n VerificationComponent,\r\n TimerCountDownComponent,\r\n UserPassComponent,\r\n LoginComponent\r\n];\r\n\r\n@NgModule({\r\n declarations: [...components],\r\n imports: [CommonModule, FormsModule, ReactiveFormsModule, BarsaNovinRayCoreModule],\r\n exports: [...components]\r\n})\r\nexport class BarsaAuthModule extends BaseModule {\r\n protected dynamicComponents = [...components];\r\n /** Inserted by Angular inject() migration for backwards compatibility */\r\n constructor() {\r\n const dcm = inject(DynamicComponentService);\r\n super(dcm, 'BarsaAuthModule');\r\n this.dcm = dcm;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of barsa-auth\r\n */\r\n\r\n\r\nexport * from './lib/barsa-auth/barsa-auth.component';\r\nexport * from './lib/enter-mobile/enter-mobile.component';\r\nexport * from './lib/user-pass/user-pass.component';\r\nexport * from './lib/verification/verification.component';\r\nexport * from './lib/timer-countdown/timer-countdown.component';\r\nexport * from './lib/login/login.component';\r\nexport * from './lib/controllers';\r\n\r\nexport * from './lib/barsa-auth.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i4.TimerCountDownComponent","i2","i3.EnterMobileComponent","i4.VerificationComponent","i5.UserPassComponent","i2.BarsaAuthComponent"],"mappings":";;;;;;;;;;;;AAMM,MAAO,qBAAsB,SAAQ,cAAgC,CAAA;AAEvE;;AAEG;AAEH,IAAA,WAAA,CAAY,IAAsB,EAAA;QAC9B,KAAK,CAAC,IAAI,CAAC;QACX,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IACpD;AACA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;IACzB;IACA,QAAQ,CAAC,WAAmB,EAAE,CAAC,EAAA;AAC3B,QAAA,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;;;;AAI3B,QAAA,MAAM,aAAa,GAAG,QAAQ,GAAG,CAAA,UAAA,EAAa,QAAQ,CAAA,CAAE,GAAG,EAAE;AAC7D,QAAA,IAAI,CAAC;aACA,GAAG,CAAoB,+BAA+B,WAAW,CAAA,QAAA,EAAW,MAAM,CAAA,EAAG,aAAa,EAAE;AACpG,aAAA,IAAI,CACD,QAAQ,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC/B,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAG,KAAI;YACf,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AAC/C,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1D;YACA,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,QAAA,CAAC,CAAC;AAEL,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACb,YAAA,IAAI,CAAC,EAAE,KAAK,EAAE;gBACV,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC;AACtC,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACxB;iBAAO;gBACH,MAAM,GAAG,GAAG,CAAQ;AACpB,gBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AACd,oBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC;gBACxD;;YAEJ;AACJ,QAAA,CAAC,CAAC;IACV;IACA,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,KAChC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CACvE;IACL;AACH;;ACvDK,MAAO,uBAAwB,SAAQ,cAAkC,CAAA;AAC3E,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;IACzB;AACA,IAAA,KAAK,CAAC,CAAM,EAAA;QACR,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3B,QAAA,MAAM,IAAI,GAAG;AACT,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,GAAG,EAAE,QAAQ;YACb,GAAG;YACH;SACH;AACD,QAAA,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;YACpB,SAAS,EAAE,MAAK;AACZ,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAC5B,CAAC;AACD,YAAA,OAAO,EAAE,CAAC,SAAS,KAAI;AACnB,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC3B,gBAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY;AAC5C,gBAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK;gBAC1B,IAAI,CAAC,KAAK,EAAE;oBACR,KAAK,GAAG,QAAQ;gBACpB;AACA,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;AAC1B,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC1C,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,oBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBAClC;YACJ;AACH,SAAA,CAAC;IACN;IAEA,IAAI,GAAA;QACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7E,IAAI,QAAQ,CAAC,aAAa,CAAC,WAAW,KAAK,MAAM,EAAE;AAC/C,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAClC;IACJ;AACH;;ACpCK,MAAO,2BAA4B,SAAQ,cAAsC,CAAA;AAInF,IAAA,WAAA,CAAY,IAA4B,EAAA;QACpC,KAAK,CAAC,IAAI,CAAC;AAJf,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK,gFAAC;QAKrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IACpD;AAEA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI;IACzB;AACA,IAAA,UAAU,CAAC,WAAmB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC;aACA,GAAG,CAAoB,CAAA,4BAAA,EAA+B,WAAW,CAAA,OAAA,EAAU,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA,CAAE;AAC1G,aAAA,IAAI,CACD,QAAQ,CAAC,MAAK,EAAE,CAAC,CAAC,EAClB,UAAU,CAAC,CAAC,GAAG,KAAI;AACf,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AAC/C,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1D;YACA,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,QAAA,CAAC,CAAC;AAEL,aAAA,SAAS,CAAC,CAAC,EAAE,KAAI;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC9B,QAAA,CAAC,CAAC;IACV;IACA,UAAU,CAAC,WAAmB,EAAE,CAAC,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC1B,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC;AAE9B,QAAA,IAAI,CAAC;AACA,aAAA,IAAI,CAAkB,CAAA,8BAAA,EAAiC,WAAW,CAAA,CAAE,EAAE;AACnE,YAAA,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;AACpC,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,GAAG;YAChB;SACH;AACA,aAAA,IAAI,CACD,QAAQ,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AAC/B,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAG,KAAI;YACf,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AAC/C,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1D;YACA,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,QAAA,CAAC,CAAC;AAEL,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACb,YAAA,IAAI,CAAC,EAAE,GAAG,EAAE;AACR,gBAAA,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AAChC,gBAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAC;AACzE,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAC5B;iBAAO;gBACH,MAAM,GAAG,GAAG,CAAQ;AACpB,gBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AACd,oBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC;gBACxD;YACJ;AACJ,QAAA,CAAC,CAAC;IACV;IACA,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,KAChC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CACzE;IACL;AACH;;ACzDK,MAAO,oBAAqB,SAAQ,QAA+B,CAAA;AAerE,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAfD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAU;AAM9C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC;AAE5C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,8EAAC;AACvB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,8EAAC;;AAGf,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;QAK5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACtB,YAAA,MAAM,EAAE;gBACJ,EAAE;gBACF,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACvG,aAAA;YACD,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACtC,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;IACN;AACA,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;AACA,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;IACpC;IACA,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F;IACJ;IACA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC7C;AACA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC7B;AAEA,IAAA,OAAO,CAAC,OAAgB,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC7B;IACA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/D;+GAnDS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,gUCrBjC,y7GAkEA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FD7Ca,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,y7GAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;AEjBC,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AAP1D,IAAA,WAAA,GAAA;;AAQc,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAE;AAGrC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK,iFAAC;AAC1B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,EAAE,kFAAC;AACxB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,EAAE,iFAAC;AAwD1B,IAAA;IArDG,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;QAEhB,IAAI,CAAC,cAAc,EAAE;IACzB;IACA,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;QACjC;IACJ;IACA,cAAc,GAAA;AACV,QAAA,MAAM,cAAc,GAAS,IAAI,IAAI,EAAE;AACvC,QAAA,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,EAAE;QACxC,cAAc,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;AAC9C,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,OAAO,EAAE;AAC9C,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,MAAK;YAC9B,IAAI,CAAC,KAAK,EAAE;QAChB,CAAC,EAAE,IAAI,CAAC;IACZ;IACA,KAAK,GAAA;QACD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAQ,IAAI,CAAC,cAAc,GAAG,GAAG;;;;QAK/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;AACvE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;;QAG3D,IAAI,CAAC,WAAW,CAAC,GAAG,CAChB,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE;AAC5B,YAAA,oBAAoB,EAAE,CAAC;AACvB,YAAA,WAAW,EAAE;AAChB,SAAA,CAAC,CACL;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CACf,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE;AAC5B,YAAA,oBAAoB,EAAE,CAAC;AACvB,YAAA,WAAW,EAAE;AAChB,SAAA,CAAC,CACL;;AAGD,QAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;AACd,YAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B;IACJ;+GA7DS,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,yLCVpC,k4BA4BA,EAAA,MAAA,EAAA,CAAA,yIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDlBa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,k4BAAA,EAAA,MAAA,EAAA,CAAA,yIAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;;AEeC,MAAO,qBAAsB,SAAQ,QAAqC,CAAA;;AAsB5E,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAnBD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAE;AAChC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAK3C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,2BAA2B,CAAC,IAAI,CAAC;AAElD,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,GAAG,4EAAC;AACnB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,KAAK,oFAAC;AAC7B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,8EAAC;AACvB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK,kFAAC;AAC3B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,0EAAC;AACpB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;QAM5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACtB,GAAG,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,GAAG,EAAE,CAAC,EAAE,CAAC;YACT,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,QAAQ;AAC5C,SAAA,CAAC;IACN;AACA,IAAA,IAAI,GAAG,GAAA;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;IACA,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B;IACA,SAAS,CAAC,OAAe,EAAE,IAAY,EAAA;AACnC,QAAA,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;IACpD;IACA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;IAC3B;IACA,gBAAgB,GAAA;QACZ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC;IACA,YAAY,GAAA;QACR,IAAI,CAAC,WAAW,EAAE;IACtB;IACA,WAAW,GAAA;QACP,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;IAChD;IACA,WAAW,GAAA;AACP,QAAA,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;QAC3C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAA,EAAG,GAAG,CAAA,CAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAChF;AACA,IAAA,eAAe,CAAC,OAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;IACnC;AACA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC7B;IACA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE;IACzC;AACA,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;IACnC;AAEA,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;IACtC;+GAxES,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArB,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACnB,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BtC,ygGAoDA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDxBa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,ygGAAA,EAAA;;sBAGhB,SAAS;uBAAC,uBAAuB;;sBACjC,YAAY;uBAAC,QAAQ;;sBACrB,SAAS;uBAAC,YAAY;;sBACtB;;sBACA;;sBACA;;sBACA;;sBACA;;;AEfC,MAAO,iBAAkB,SAAQ,QAAiC,CAAA;AAgBpE,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAhBD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ;AAI7C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC;AAE9C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AACxB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,8EAAC;QACvB,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,4EAAC;QAC9B,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,0EAAC;AAC5B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK,kFAAC;;AAGnB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;QAK5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACtB,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClF,QAAQ,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClF,GAAG,EAAE,CAAC,EAAE,CAAC;YACT,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,QAAQ;AAC5C,SAAA,CAAC;IACN;AACA,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;IACpC;AACA,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;IACpC;AACA,IAAA,IAAI,GAAG,GAAA;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;IACA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACxB;AACA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC7B;AACA,IAAA,QAAQ,CAAC,OAAgB,EAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;IAC9B;IACA,SAAS,CAAC,OAAe,EAAE,IAAY,EAAA;AACnC,QAAA,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC;QAC9B,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC,EAAE,IAAI,CAAC;IACZ;AACA,IAAA,cAAc,CAAC,OAAgB,EAAA;QAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;IACpB;IACA,gBAAgB,GAAA;QACZ,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC;IACA,UAAU,GAAA;AACN,QAAA,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAChF;+GA9DS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,2MCrB9B,iuJA0FA,EAAA,MAAA,EAAA,CAAA,sEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDrEa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,iuJAAA,EAAA,MAAA,EAAA,CAAA,sEAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;;MEdQ,kBAAkB,CAAA;AAN/B,IAAA,WAAA,GAAA;AAOc,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAE;AACvC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,iFAAiB;AAC7C,QAAA,IAAA,CAAA,KAAK,GAA+B,MAAM,CAAC,cAAc,4EAAC;AAC1D,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,EAAE,6EAAC;AACnB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,8EAAC;AACvB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACtC,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAkB7D,IAAA;IAjBG,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,IAAI,cAAc,CAAC;IACrE;AACA,IAAA,aAAa,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;IACA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;IAClC;AACA,IAAA,SAAS,CAAC,MAAc,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;IAClC;IACA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACxB;+GAxBS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,4PCV/B,+gHAkEA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDxDa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,cAGP,KAAK,EAAA,QAAA,EAAA,+gHAAA,EAAA;;sBAGhB;;;MEUQ,cAAc,CAAA;AAP3B,IAAA,WAAA,GAAA;QAUI,IAAA,CAAA,WAAW,GAAkC,MAAM,CAAC;AAChD,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,mBAAmB,EAAE,EAAE;AACvB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,YAAY,EAAE,cAAc;AAC5B,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,iBAAiB,EAAE,EAAE;AACrB,YAAA,mBAAmB,EAAE,EAAE;AACvB,YAAA,WAAW,EAAE;AAChB,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QACF,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,aAAa,GAAG,EAAE;QAClB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,UAAU,GAAG,KAAK;AACV,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;AACxC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AAYjD,IAAA;IAXG,QAAQ,GAAA;QACJ,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI;AACvD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE;YACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC;QAC3D;aAAO,IAAI,YAAY,EAAE;YACrB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC;QACpD;IACJ;IACA,UAAU,GAAA;QACN,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;IACjD;+GArCS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAd,cAAc,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACsB,WAAW,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtB5D,inPA6IA,EAAA,MAAA,EAAA,CAAA,sCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,kBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDxHa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,eAAA,EAGH,uBAAuB,CAAC,MAAM,cACnC,KAAK,EAAA,QAAA,EAAA,inPAAA,EAAA,MAAA,EAAA,CAAA,sCAAA,CAAA,EAAA;;sBAGhB,SAAS;uBAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;;;AER9D,MAAM,UAAU,GAAG;IACf,kBAAkB;IAClB,oBAAoB;IACpB,qBAAqB;IACrB,uBAAuB;IACvB,iBAAiB;IACjB;CACH;AAOK,MAAO,eAAgB,SAAQ,UAAU,CAAA;;AAG3C,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC3C,QAAA,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC;AAJvB,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,GAAG,UAAU,CAAC;AAKzC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;IAClB;+GAPS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,iBAbxB,kBAAkB;YAClB,oBAAoB;YACpB,qBAAqB;YACrB,uBAAuB;YACvB,iBAAiB;YACjB,cAAc,CAAA,EAAA,OAAA,EAAA,CAKJ,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,CAAA,EAAA,OAAA,EAAA,CAVjF,kBAAkB;YAClB,oBAAoB;YACpB,qBAAqB;YACrB,uBAAuB;YACvB,iBAAiB;YACjB,cAAc,CAAA,EAAA,CAAA,CAAA;AAQL,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAHd,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,CAAA,EAAA,CAAA,CAAA;;4FAGxE,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,CAAC,GAAG,UAAU,CAAC;oBAC7B,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,CAAC;AAClF,oBAAA,OAAO,EAAE,CAAC,GAAG,UAAU;AAC1B,iBAAA;;;AC3BD;;AAEG;;ACFH;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,23 +1,25 @@
1
1
  {
2
2
  "name": "barsa-auth",
3
- "version": "2.3.158",
3
+ "version": "2.3.163",
4
4
  "peerDependencies": {
5
- "@angular/core": "^20.0.6",
6
- "@angular/common": "^20.0.6"
5
+ "@angular/core": "^21.2.0",
6
+ "@angular/common": "^21.2.0",
7
+ "barsa-novin-ray-core": "2.3.159"
7
8
  },
8
9
  "dependencies": {
9
10
  "tslib": "^2.3.0"
10
11
  },
11
12
  "sideEffects": false,
12
13
  "module": "fesm2022/barsa-auth.mjs",
13
- "typings": "index.d.ts",
14
+ "typings": "types/barsa-auth.d.ts",
14
15
  "exports": {
15
16
  "./package.json": {
16
17
  "default": "./package.json"
17
18
  },
18
19
  ".": {
19
- "types": "./index.d.ts",
20
+ "types": "./types/barsa-auth.d.ts",
20
21
  "default": "./fesm2022/barsa-auth.mjs"
21
22
  }
22
- }
23
+ },
24
+ "type": "module"
23
25
  }
@@ -1,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { EventEmitter, WritableSignal, TemplateRef, QueryList, ElementRef, NgZone, OnInit, ComponentFactoryResolver } from '@angular/core';
2
+ import { EventEmitter, WritableSignal, TemplateRef, QueryList, ElementRef, NgZone, OnInit } from '@angular/core';
3
3
  import * as i9 from 'barsa-novin-ray-core';
4
- import { BaseController, IViewBase, FilePictureInfoModel, PortalService, ApplicationCtrlrService, ViewBase, BaseComponent, BaseModule, DynamicComponentService } from 'barsa-novin-ray-core';
4
+ import { BaseController, IViewBase, FilePictureInfoModel, PortalService, ApplicationCtrlrService, ViewBase, BaseComponent, BaseModule } from 'barsa-novin-ray-core';
5
5
  import * as i8 from '@angular/forms';
6
6
  import { FormGroup } from '@angular/forms';
7
7
  import { HttpClient } from '@angular/common/http';
@@ -229,8 +229,6 @@ interface Settings {
229
229
  }
230
230
 
231
231
  declare class BarsaAuthModule extends BaseModule {
232
- protected dcm: DynamicComponentService;
233
- protected componentFactoryResolver: ComponentFactoryResolver;
234
232
  protected dynamicComponents: (typeof BarsaAuthComponent | typeof EnterMobileComponent | typeof UserPassComponent | typeof TimerCountDownComponent | typeof VerificationComponent | typeof LoginComponent)[];
235
233
  /** Inserted by Angular inject() migration for backwards compatibility */
236
234
  constructor();