barsa-novin-ray-core 2.3.97 → 2.3.99

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,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, inject, ElementRef, Input, ChangeDetectionStrategy, Component, Pipe, ComponentFactoryResolver, Injector, ApplicationRef, Compiler, DOCUMENT, NgModuleFactory, InjectionToken, NgZone, EventEmitter, ChangeDetectorRef, Renderer2, HostBinding, Output, HostListener, ViewContainerRef, ViewChild, signal, Directive, TemplateRef, input, NgModule, NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA, provideAppInitializer, ErrorHandler } from '@angular/core';
3
- import { Subject, from, BehaviorSubject, of, exhaustMap, map as map$1, combineLatest, withLatestFrom as withLatestFrom$1, fromEvent, forkJoin, takeUntil as takeUntil$1, filter as filter$1, throwError, merge, interval, tap as tap$1, concatMap as concatMap$1, catchError as catchError$1, finalize as finalize$1, take, debounceTime as debounceTime$1, skip, Observable, timer, mergeWith, Subscription } from 'rxjs';
3
+ import { Subject, from, BehaviorSubject, of, exhaustMap, map as map$1, combineLatest, withLatestFrom as withLatestFrom$1, fromEvent, forkJoin, takeUntil as takeUntil$1, filter as filter$1, throwError, merge, interval, concatMap as concatMap$1, catchError as catchError$1, finalize as finalize$1, take, debounceTime as debounceTime$1, skip, Observable, tap as tap$1, timer, mergeWith, Subscription } from 'rxjs';
4
4
  import * as i1 from '@angular/router';
5
5
  import { Router, NavigationEnd, ActivatedRoute, RouterEvent, NavigationStart, RouterModule } from '@angular/router';
6
6
  import { DomSanitizer, Title } from '@angular/platform-browser';
@@ -2397,6 +2397,32 @@ function fromEntries(entries) {
2397
2397
  }
2398
2398
  return result;
2399
2399
  }
2400
+ function AddDynamicFormStyles(id, cssStyles) {
2401
+ if (!cssStyles) {
2402
+ return null;
2403
+ }
2404
+ cssStyles = cssStyles.replace(/:root/gi, `#${id}`);
2405
+ cssStyles = cssStyles.replace(/:html/gi, `:root`);
2406
+ const head = document.head || document.getElementsByTagName('head')[0];
2407
+ const style = document.createElement('style');
2408
+ head.appendChild(style);
2409
+ style.type = 'text/css';
2410
+ if (style.styleSheet) {
2411
+ // This is required for IE8 and below.
2412
+ style.styleSheet.cssText = cssStyles;
2413
+ }
2414
+ else {
2415
+ style.appendChild(document.createTextNode(cssStyles));
2416
+ }
2417
+ return style;
2418
+ }
2419
+ function RemoveDynamicFormStyles(style) {
2420
+ if (!style) {
2421
+ return;
2422
+ }
2423
+ const head = document.head || document.getElementsByTagName('head')[0];
2424
+ head.removeChild(style);
2425
+ }
2400
2426
 
2401
2427
  class MoReportValuePipe {
2402
2428
  transform(name, mo, Columns, caption) {
@@ -5810,7 +5836,11 @@ class PortalService {
5810
5836
  path: (cpage.IsDefaultRoute === 'True' && path === '') || (path !== '' && typeof path !== 'undefined')
5811
5837
  ? path
5812
5838
  : cpage.Route.replace('/', ''),
5813
- canActivate: cpage.HasAuthorize === 'True' ? [AuthGuard] : cpage.IsLoginRoute === 'True' ? [RedirectHomeGuard] : [],
5839
+ canActivate: cpage.HasAuthorize === 'True'
5840
+ ? [AuthGuard]
5841
+ : cpage.IsLoginRoute === 'True'
5842
+ ? [RedirectHomeGuard]
5843
+ : [],
5814
5844
  resolve: { pageData: PortalPageResolver },
5815
5845
  component: pageComponent,
5816
5846
  outlet: cpage.Outlet ? cpage.Outlet : undefined,
@@ -5819,7 +5849,7 @@ class PortalService {
5819
5849
  ...cpage
5820
5850
  }
5821
5851
  },
5822
- children: [formRoutes()]
5852
+ children: cpage.ComponentName !== 'PortalPage' ? [formRoutes()] : []
5823
5853
  };
5824
5854
  children.push(newRoute);
5825
5855
  // Recursively process each MetaObjectModel inside MoDataList
@@ -7803,32 +7833,12 @@ const NOTIFICATION_WEBWORKER_FACTORY = new InjectionToken('notificaion-worker');
7803
7833
  class ServiceWorkerNotificationService {
7804
7834
  constructor() {
7805
7835
  this.hasRegistration = false;
7806
- this._logService = inject(LogService);
7807
7836
  this._swPush = inject(SwPush);
7808
7837
  this._portalService = inject(PortalService);
7809
- this._notificationPermissionAllowed = true;
7810
- const _logService = this._logService;
7811
- const _swPush = this._swPush;
7812
- _logService.info(`swPush enable ${_swPush.isEnabled}`);
7813
- _swPush.notificationClicks.pipe(tap$1((c) => console.log(c))).subscribe((e) => {
7814
- if (!e.notification.tag) {
7815
- return;
7816
- }
7817
- this.closeNotifications([e.notification.tag]);
7818
- let actionTitle = e.action;
7819
- if (actionTitle === '') {
7820
- actionTitle = 'show';
7821
- }
7822
- if (!BarsaApi?.LoginFormData?.IsUserLoggedIn) {
7823
- return;
7824
- }
7825
- this._portalService.ExecuteNotificationAction(e.notification.tag, actionTitle);
7826
- // TODO:exeucte action
7827
- // not handled!!
7828
- });
7829
- this.getSw().then((c) => (this.hasRegistration = !!c));
7830
- this.handlePermission();
7838
+ this._notificationPermissionAllowed = false;
7839
+ this.init();
7831
7840
  }
7841
+ // بررسی وضعیت فعلی
7832
7842
  get isEnabled() {
7833
7843
  return this._swPush.isEnabled && this.hasRegistration && this._notificationPermissionAllowed;
7834
7844
  }
@@ -7844,6 +7854,7 @@ class ServiceWorkerNotificationService {
7844
7854
  }
7845
7855
  });
7846
7856
  }
7857
+ // نمایش دستی نوتیفیکیشن (برای تست)
7847
7858
  async showNotification(payload) {
7848
7859
  const sw = await this.getSw();
7849
7860
  if (!sw) {
@@ -7883,6 +7894,23 @@ class ServiceWorkerNotificationService {
7883
7894
  data
7884
7895
  });
7885
7896
  }
7897
+ async init() {
7898
+ console.log(`SwPush enabled: ${this._swPush.isEnabled}`);
7899
+ this.handlePermission();
7900
+ // مدیریت کلیک روی نوتیفیکیشن‌ها
7901
+ this._swPush.notificationClicks.subscribe((e) => {
7902
+ if (!e.notification.tag) {
7903
+ return;
7904
+ }
7905
+ const actionTitle = e.action || 'show';
7906
+ if (!BarsaApi?.LoginFormData?.IsUserLoggedIn) {
7907
+ return;
7908
+ }
7909
+ this._portalService.ExecuteNotificationAction(e.notification.tag, actionTitle);
7910
+ });
7911
+ // بررسی مجوز و ثبت سرویس‌ورکر
7912
+ await this.registerServiceWorker();
7913
+ }
7886
7914
  handlePermission() {
7887
7915
  if (!navigator?.permissions?.query) {
7888
7916
  return;
@@ -7895,14 +7923,17 @@ class ServiceWorkerNotificationService {
7895
7923
  permissionQuery(result) {
7896
7924
  let newPrompt;
7897
7925
  if (result.state === 'granted') {
7926
+ console.log('notificaiton granted');
7898
7927
  // notifications allowed, go wild
7899
7928
  }
7900
7929
  else if (result.state === 'prompt') {
7901
7930
  // we can ask the user
7931
+ console.log('notificaiton prompt');
7902
7932
  newPrompt = Notification.requestPermission();
7903
7933
  }
7904
7934
  else if (result.state === 'denied') {
7905
7935
  // notifications were disabled
7936
+ console.log('notificaiton denied');
7906
7937
  this._notificationPermissionAllowed = false;
7907
7938
  }
7908
7939
  result.onchange = () => console.log({ updatedPermission: result });
@@ -7912,14 +7943,23 @@ class ServiceWorkerNotificationService {
7912
7943
  this._notificationPermissionAllowed = false;
7913
7944
  console.error(error);
7914
7945
  }
7915
- async getSw() {
7916
- if (!navigator.serviceWorker) {
7917
- this.hasRegistration = false;
7918
- return undefined;
7946
+ async requestPermission() {
7947
+ if (Notification.permission === 'default') {
7948
+ await Notification.requestPermission();
7919
7949
  }
7920
- const x = await navigator.serviceWorker.getRegistration('custom-ngsw-worker.js');
7921
- this.hasRegistration = !!x;
7922
- return x;
7950
+ this._notificationPermissionAllowed = Notification.permission === 'granted';
7951
+ }
7952
+ async registerServiceWorker() {
7953
+ if (!('serviceWorker' in navigator)) {
7954
+ return;
7955
+ }
7956
+ const reg = await navigator.serviceWorker.getRegistration();
7957
+ this.hasRegistration = !!reg;
7958
+ }
7959
+ async getSw() {
7960
+ const reg = await navigator.serviceWorker.getRegistration();
7961
+ this.hasRegistration = !!reg;
7962
+ return reg;
7923
7963
  }
7924
7964
  _isSupported() {
7925
7965
  if (!('serviceWorker' in navigator)) {
@@ -8167,13 +8207,74 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
8167
8207
  type: Injectable
8168
8208
  }], ctorParameters: () => [] });
8169
8209
 
8210
+ class PushCheckService {
8211
+ async checkPushReady() {
8212
+ if (!this.baseSupport()) {
8213
+ return 'مرورگر شما Push API را پشتیبانی نمی‌کند';
8214
+ }
8215
+ const iosCheck = this.iosSupport();
8216
+ if (iosCheck !== true) {
8217
+ return iosCheck;
8218
+ }
8219
+ if (Notification.permission === 'denied') {
8220
+ return 'شما قبلاً اجازه نوتیفیکیشن را رد کرده‌اید. از تنظیمات مرورگر آن را فعال کنید';
8221
+ }
8222
+ const regs = await navigator.serviceWorker.getRegistrations();
8223
+ if (!regs.length) {
8224
+ return 'Service Worker ثبت نشده است';
8225
+ }
8226
+ return true;
8227
+ }
8228
+ getIosVersion() {
8229
+ const ua = navigator.userAgent;
8230
+ if (/iP(hone|od|ad)/.test(ua)) {
8231
+ const v = ua.match(/OS (\d+)_/);
8232
+ return v ? parseInt(v[1], 10) : null;
8233
+ }
8234
+ return null;
8235
+ }
8236
+ isIosStandalone() {
8237
+ return 'standalone' in navigator && navigator.standalone === true;
8238
+ }
8239
+ isSafari() {
8240
+ const ua = navigator.userAgent.toLowerCase();
8241
+ return ua.includes('safari') && !ua.includes('chrome');
8242
+ }
8243
+ baseSupport() {
8244
+ return 'Notification' in window && 'serviceWorker' in navigator && 'PushManager' in window;
8245
+ }
8246
+ iosSupport() {
8247
+ const v = this.getIosVersion();
8248
+ if (v && v < 16) {
8249
+ return 'نسخه iOS کمتر از 16 است (Push پشتیبانی نمی‌شود)';
8250
+ }
8251
+ if (v && v < 16.4) {
8252
+ return 'iOS باید حداقل نسخه 16.4 باشد تا Push فعال شود';
8253
+ }
8254
+ if (v && !this.isSafari()) {
8255
+ return 'Push فقط در Safari iOS پشتیبانی می‌شود';
8256
+ }
8257
+ if (v && !this.isIosStandalone()) {
8258
+ return 'برای فعال شدن Push، برنامه را با Add to Home Screen نصب کنید';
8259
+ }
8260
+ return true;
8261
+ }
8262
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushCheckService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8263
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushCheckService, providedIn: 'root' }); }
8264
+ }
8265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushCheckService, decorators: [{
8266
+ type: Injectable,
8267
+ args: [{ providedIn: 'root' }]
8268
+ }] });
8269
+
8170
8270
  class ServiceWorkerCommuncationService {
8171
8271
  constructor() {
8272
+ this._toastService = inject(TOAST_SERVICE, { optional: true });
8172
8273
  this._localStorage = inject(LocalStorageService);
8173
- this._logService = inject(LogService);
8174
8274
  this._portalService = inject(PortalService);
8175
8275
  this._swPush = inject(SwPush);
8176
8276
  this._httpClient = inject(HttpClient);
8277
+ this._pushCheckService = inject(PushCheckService);
8177
8278
  }
8178
8279
  get token2() {
8179
8280
  return this._localStorage.getItem(BarsaApi.LoginAction.token2StorageKey) ?? '';
@@ -8234,7 +8335,7 @@ class ServiceWorkerCommuncationService {
8234
8335
  _postServiceWorker(message) {
8235
8336
  // console.log(`post message to sw ${JSON.stringify(message, null, 2)}`);
8236
8337
  if (!this._serviceWorker) {
8237
- this._logService.warn(`service worker is undefined.`);
8338
+ console.warn(`service worker is undefined.`);
8238
8339
  return;
8239
8340
  }
8240
8341
  this._serviceWorker.postMessage(message);
@@ -8244,16 +8345,46 @@ class ServiceWorkerCommuncationService {
8244
8345
  this._httpClient.post('/api/pushnotification/send', subscription, this.httpOptions).subscribe();
8245
8346
  }, 5000);
8246
8347
  }
8348
+ toast(msg) {
8349
+ if (!this._toastService) {
8350
+ console.log(msg);
8351
+ return;
8352
+ }
8353
+ this._toastService?.open(` ${msg} `, { duration: 5000 });
8354
+ }
8247
8355
  _initPushSubscription() {
8248
8356
  this._httpClient
8249
8357
  .get('/api/pushnotification/publickey', { responseType: 'text' })
8250
- .pipe(concatMap$1((publicKey) => from(this._swPush.requestSubscription({
8251
- serverPublicKey: publicKey
8252
- }))), concatMap$1((subscription) => this._httpClient.post('/api/pushnotification/add', subscription, this.httpOptions)), catchError$1((err) => {
8253
- this._logService.error(err);
8358
+ .pipe(concatMap$1(async (publicKey) => {
8359
+ // 1) بررسی کامل iOS + Android + Browser
8360
+ const check = await this._pushCheckService.checkPushReady();
8361
+ if (check !== true) {
8362
+ this.toast(check);
8363
+ throw new Error(check);
8364
+ }
8365
+ // 2) درخواست ساب‌اسکریپشن
8366
+ try {
8367
+ const subscription = await this._swPush.requestSubscription({
8368
+ serverPublicKey: publicKey
8369
+ });
8370
+ return subscription;
8371
+ }
8372
+ catch (err) {
8373
+ const msg = 'مشترک شدن Push انجام نشد';
8374
+ this.toast(msg);
8375
+ throw err;
8376
+ }
8377
+ }), concatMap$1((subscription) => this._httpClient.post('/api/pushnotification/add', subscription, this.httpOptions)), catchError$1((err) => {
8378
+ const msg = 'خطا در ثبت Push Notification';
8379
+ this.toast(msg);
8254
8380
  return throwError(() => err);
8255
8381
  }))
8256
- .subscribe();
8382
+ .subscribe({
8383
+ next: () => {
8384
+ const msg = 'نوتیفیکیشن فعال شد';
8385
+ this.toast(msg);
8386
+ }
8387
+ });
8257
8388
  }
8258
8389
  _handlePushUnSubscription(doReturn) {
8259
8390
  if (!this._subscription) {
@@ -8262,7 +8393,7 @@ class ServiceWorkerCommuncationService {
8262
8393
  this._httpClient
8263
8394
  .post('/api/pushnotification/delete', this._subscription, this.httpOptions)
8264
8395
  .pipe(concatMap$1(() => from(this._swPush.unsubscribe())), catchError$1((err) => {
8265
- this._logService.error(err);
8396
+ console.error(err);
8266
8397
  doReturn && doReturn();
8267
8398
  return throwError(() => new Error(err));
8268
8399
  }), finalize$1(() => {
@@ -8456,6 +8587,7 @@ class FieldBaseComponent extends BaseComponent {
8456
8587
  this.formmatedValue = new EventEmitter();
8457
8588
  this.isMobile = getDeviceIsMobile();
8458
8589
  this.isTablet = getDeviceIsTablet();
8590
+ this._rlt = true;
8459
8591
  this.mobileConfig = {
8460
8592
  title: 'انتخاب',
8461
8593
  approveButtonText: 'تایید',
@@ -8482,6 +8614,7 @@ class FieldBaseComponent extends BaseComponent {
8482
8614
  this._valueChangedSource = new Subject();
8483
8615
  this._disableChangedSource = new BehaviorSubject(false);
8484
8616
  this._readonlyChangedSource = new BehaviorSubject(false);
8617
+ this._portalService.rtl$.pipe(takeUntil(this._onDestroy$)).subscribe((c) => (this._rlt = c));
8485
8618
  this.refresh$ = this._refreshSource.asObservable().pipe(takeUntil(this._onDestroy$));
8486
8619
  this.value$ = this._valueChangedSource.asObservable().pipe(takeUntil(this._onDestroy$));
8487
8620
  this.deviceSize$ = this._portalService.deviceSize$;
@@ -8608,7 +8741,7 @@ class FieldBaseComponent extends BaseComponent {
8608
8741
  }
8609
8742
  }
8610
8743
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FieldBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8611
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: FieldBaseComponent, isStandalone: false, selector: "bnrc-field-base", inputs: { context: "context", focusControl: "focusControl", layoutInfo: "layoutInfo", value: "value", width: "width", height: "height", formHeight: "formHeight", inlineEdit: "inlineEdit", cellEdit: "cellEdit", formContainer: "formContainer", id: "id", parametes: "parametes" }, outputs: { valueChange: "valueChange", formmatedValue: "formmatedValue" }, host: { properties: { "class.isMobile": "this.isMobile", "class.isTablet": "this.isTablet" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8744
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: FieldBaseComponent, isStandalone: false, selector: "bnrc-field-base", inputs: { context: "context", focusControl: "focusControl", layoutInfo: "layoutInfo", value: "value", width: "width", height: "height", formHeight: "formHeight", inlineEdit: "inlineEdit", cellEdit: "cellEdit", formContainer: "formContainer", id: "id", parametes: "parametes" }, outputs: { valueChange: "valueChange", formmatedValue: "formmatedValue" }, host: { properties: { "class.isMobile": "this.isMobile", "class.isTablet": "this.isTablet", "class.rtl": "this._rlt" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8612
8745
  }
8613
8746
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FieldBaseComponent, decorators: [{
8614
8747
  type: Component,
@@ -8652,6 +8785,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
8652
8785
  }], isTablet: [{
8653
8786
  type: HostBinding,
8654
8787
  args: ['class.isTablet']
8788
+ }], _rlt: [{
8789
+ type: HostBinding,
8790
+ args: ['class.rtl']
8655
8791
  }] } });
8656
8792
 
8657
8793
  class FormBaseComponent extends BaseComponent {
@@ -9225,7 +9361,6 @@ class LayoutItemBaseComponent extends BaseComponent {
9225
9361
  super();
9226
9362
  this.formPanelService = inject(FormPanelService);
9227
9363
  this._cdr = inject(ChangeDetectorRef);
9228
- this.id = getUniqueId(4);
9229
9364
  this.formPanelService.isSearchPanel$.subscribe((isSearchPanel) => {
9230
9365
  this.isSearchPanel = isSearchPanel;
9231
9366
  });
@@ -9236,6 +9371,10 @@ class LayoutItemBaseComponent extends BaseComponent {
9236
9371
  this.searchPanelIsObject = searchPanelIsObject;
9237
9372
  });
9238
9373
  }
9374
+ ngOnInit() {
9375
+ super.ngOnInit();
9376
+ this.id = this.config.id;
9377
+ }
9239
9378
  ngOnChanges(changes) {
9240
9379
  super.ngOnChanges(changes);
9241
9380
  const { maxLabelWidth } = changes;
@@ -9244,7 +9383,7 @@ class LayoutItemBaseComponent extends BaseComponent {
9244
9383
  }
9245
9384
  }
9246
9385
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LayoutItemBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9247
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: LayoutItemBaseComponent, isStandalone: false, selector: "bnrc-layout-item-base", inputs: { config: "config", isPanel: "isPanel", maxLabelWidth: "maxLabelWidth", rtl: "rtl" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9386
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: LayoutItemBaseComponent, isStandalone: false, selector: "bnrc-layout-item-base", inputs: { config: "config", isPanel: "isPanel", maxLabelWidth: "maxLabelWidth", rtl: "rtl" }, host: { properties: { "attr.id": "this.id" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9248
9387
  }
9249
9388
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LayoutItemBaseComponent, decorators: [{
9250
9389
  type: Component,
@@ -9254,7 +9393,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
9254
9393
  changeDetection: ChangeDetectionStrategy.OnPush,
9255
9394
  standalone: false
9256
9395
  }]
9257
- }], ctorParameters: () => [], propDecorators: { config: [{
9396
+ }], ctorParameters: () => [], propDecorators: { id: [{
9397
+ type: HostBinding,
9398
+ args: ['attr.id']
9399
+ }], config: [{
9258
9400
  type: Input
9259
9401
  }], isPanel: [{
9260
9402
  type: Input
@@ -9268,21 +9410,40 @@ class LayoutPanelBaseComponent extends LayoutItemBaseComponent {
9268
9410
  constructor() {
9269
9411
  super();
9270
9412
  this.layoutControlCount = 0;
9271
- this.portalService = inject(PortalService);
9272
- this.layoutService = inject(LayoutService, { self: true });
9273
- const layoutService = this.layoutService;
9413
+ this.visible = true;
9414
+ this._renderer2 = inject(Renderer2);
9415
+ this._portalService = inject(PortalService);
9416
+ this._layoutService = inject(LayoutService, { self: true });
9417
+ const layoutService = this._layoutService;
9274
9418
  this.id = getUniqueId(4);
9275
9419
  layoutService.id = 'panel' + this.id;
9276
9420
  this.formPanelService.isSearchPanel$.subscribe((isSearchPanel) => {
9277
9421
  this.isSearchPanel = isSearchPanel;
9278
9422
  });
9423
+ this.formPanelService.groupLayout$
9424
+ .pipe(takeUntil$1(this._onDestroy$), filter$1((c) => c.ControlId === this.config.ControlId))
9425
+ .subscribe((_groupItem) => {
9426
+ this._setBRule();
9427
+ });
9279
9428
  }
9280
9429
  ngOnInit() {
9281
9430
  super.ngOnInit();
9431
+ this._setBRule();
9282
9432
  this.formPanelService.formContainerDom = this.parentDom;
9283
- this.maxLabelWidth$ = this.layoutService.maxWidth$;
9433
+ this.maxLabelWidth$ = this._layoutService.maxWidth$;
9284
9434
  this._calcWidth(this.config);
9285
9435
  }
9436
+ _setBRule() {
9437
+ this.visible = this.config.Visible === false ? false : true;
9438
+ this.readonly = this.config.Readonly === false ? false : true;
9439
+ this.enable = this.config.Enable === false ? false : true;
9440
+ if (this.enable) {
9441
+ this._renderer2.removeClass(this._el.nativeElement, 'control-disabled');
9442
+ }
9443
+ else {
9444
+ this._renderer2.addClass(this._el.nativeElement, 'control-disabled');
9445
+ }
9446
+ }
9286
9447
  _calcWidth(config) {
9287
9448
  config.items.forEach((item) => {
9288
9449
  switch (item.xtype) {
@@ -9299,7 +9460,7 @@ class LayoutPanelBaseComponent extends LayoutItemBaseComponent {
9299
9460
  _setLabelWidth(item) {
9300
9461
  const controlWidth = getLabelWidth(item);
9301
9462
  if (controlWidth) {
9302
- this.layoutService.setMaxWidth(controlWidth);
9463
+ this._layoutService.setMaxWidth(controlWidth);
9303
9464
  }
9304
9465
  }
9305
9466
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LayoutPanelBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -9335,8 +9496,8 @@ class ContainerComponent extends BaseComponent {
9335
9496
  this._cdr = inject(ChangeDetectorRef);
9336
9497
  this._renderer2 = inject(Renderer2);
9337
9498
  this._dialogService = inject(DIALOG_SERVICE, { optional: true });
9338
- this._containerServiceParent = inject(ContainerService, { self: true, optional: true });
9339
- this._containerService = inject(ContainerService);
9499
+ this._containerServiceParent = inject(ContainerService, { self: false, optional: true });
9500
+ this._containerService = inject(ContainerService, { self: true, optional: true });
9340
9501
  this._formDialogComponent = inject(FORM_DIALOG_COMPONENT, { optional: true });
9341
9502
  this.oldContainerContainer = this._barsaDialogService.containerComponent;
9342
9503
  this._barsaDialogService.containerComponent = this;
@@ -9378,7 +9539,7 @@ class ContainerComponent extends BaseComponent {
9378
9539
  }
9379
9540
  }
9380
9541
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9381
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: ContainerComponent, isStandalone: false, selector: "bnrc-container", viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9542
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: ContainerComponent, isStandalone: false, selector: "bnrc-container", viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "containerBottomRef", first: true, predicate: ["containerBottomRef"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9382
9543
  }
9383
9544
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ContainerComponent, decorators: [{
9384
9545
  type: Component,
@@ -9391,6 +9552,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
9391
9552
  }], ctorParameters: () => [], propDecorators: { containerRef: [{
9392
9553
  type: ViewChild,
9393
9554
  args: ['containerRef', { static: true, read: ViewContainerRef }]
9555
+ }], containerBottomRef: [{
9556
+ type: ViewChild,
9557
+ args: ['containerBottomRef', { static: true, read: ViewContainerRef }]
9394
9558
  }] } });
9395
9559
 
9396
9560
  class PageBaseComponent extends ContainerComponent {
@@ -9402,7 +9566,7 @@ class PageBaseComponent extends ContainerComponent {
9402
9566
  }
9403
9567
  ngAfterViewInit() {
9404
9568
  super.ngAfterViewInit();
9405
- this._containerService.state === 'attach' && this.addModulesToDom();
9569
+ this._containerService?.state === 'attach' && this.addModulesToDom();
9406
9570
  this._containerService?.addModules.pipe(takeUntil(this._onDestroy$)).subscribe(() => this.addModulesToDom());
9407
9571
  }
9408
9572
  addModulesToDom() {
@@ -9458,8 +9622,12 @@ class PageBaseComponent extends ContainerComponent {
9458
9622
  .pipe(takeUntil(this._onDestroy$), concatMap((module) => this.getComponentFactory(module.Component).pipe(tap((controlUi) => {
9459
9623
  controlUi.instance.settings = module.Component.Settings;
9460
9624
  controlUi.instance.activatedRoute = this._activatedRoute;
9461
- if (this.containerRef) {
9462
- this.containerRef.insert(controlUi.hostView);
9625
+ let containerRef = this.containerRef;
9626
+ if (module.ContainerRef && this[module.ContainerRef]) {
9627
+ containerRef = this[module.ContainerRef];
9628
+ } // توسط ماژول مشخص شده کامپوننت در کدام کانتینر پیج قرار گیرد
9629
+ if (containerRef) {
9630
+ containerRef.insert(controlUi.hostView);
9463
9631
  }
9464
9632
  else {
9465
9633
  this._vcr.insert(controlUi.hostView);
@@ -9519,11 +9687,14 @@ class NumberBaseComponent extends FieldBaseComponent {
9519
9687
  const isValid = new RegExp('^[0-9,.,-]*$').test(e.currentTarget.value + e.key);
9520
9688
  if (!isValid || e.key === '.') {
9521
9689
  if (e.key === '.' && this.inputElement && this.decimalPrecision > 0) {
9522
- const cursorPosition = this.inputElement.value.indexOf('.');
9523
- this._setCursorPosition(cursorPosition + 1);
9690
+ const indexOfDot = this.inputElement.value.indexOf('.');
9691
+ if (indexOfDot > -1) {
9692
+ this._setCursorPosition(indexOfDot + 1);
9693
+ e.preventDefault();
9694
+ e.stopPropagation();
9695
+ return;
9696
+ }
9524
9697
  }
9525
- e.preventDefault();
9526
- e.stopPropagation();
9527
9698
  }
9528
9699
  else if (isValid && this.inputElement) {
9529
9700
  // در صورتی که عدد قبل از منفی قرار گیرد
@@ -9549,7 +9720,7 @@ class NumberBaseComponent extends FieldBaseComponent {
9549
9720
  }
9550
9721
  _updateBySetting() {
9551
9722
  if (this.inputElement) {
9552
- const formated = this._getFormated(this.value).toString();
9723
+ const formated = this._getFormated(this.value?.toString()).toString();
9553
9724
  this.inputElement.value = formated;
9554
9725
  }
9555
9726
  this.hasMask =
@@ -9581,7 +9752,17 @@ class NumberBaseComponent extends FieldBaseComponent {
9581
9752
  return false;
9582
9753
  }
9583
9754
  _getFormated(val) {
9584
- return this._numeralPipe.transform(val, this.decimalPrecision, this.Setting.ShowThousandSeperator).toString();
9755
+ let decimalPersicion = 0;
9756
+ const indexOfDot = val.indexOf('.');
9757
+ if (indexOfDot > 0 && this.decimalPrecision) {
9758
+ decimalPersicion = val.length - indexOfDot - 1;
9759
+ decimalPersicion = decimalPersicion > this.decimalPrecision ? this.decimalPrecision : decimalPersicion;
9760
+ }
9761
+ let newVal = this._numeralPipe.transform(val, decimalPersicion, this.Setting.ShowThousandSeperator).toString();
9762
+ if (this.decimalPrecision && decimalPersicion === 0 && val.endsWith('.')) {
9763
+ newVal += '.';
9764
+ }
9765
+ return newVal;
9585
9766
  }
9586
9767
  _setCursorPosition(cursorPosition) {
9587
9768
  if (this.inputElement) {
@@ -9601,9 +9782,19 @@ class NumberBaseComponent extends FieldBaseComponent {
9601
9782
  if (value === +elValue) {
9602
9783
  return;
9603
9784
  }
9604
- const formated = this._getFormated(value);
9785
+ const formated = this._getFormated(value.toString());
9605
9786
  e.target.value = formated;
9606
9787
  }
9788
+ _setTargetToFormatedValue(target, formated, isMinus) {
9789
+ if (!target) {
9790
+ return 0;
9791
+ }
9792
+ const oldVal = target.value;
9793
+ if (target.value !== formated) {
9794
+ target.value = this._getMinusValue(isMinus, formated);
9795
+ }
9796
+ return formated.length > oldVal.length ? formated.length - oldVal.length : oldVal.length - target.value.length;
9797
+ }
9607
9798
  reFormatValue(text, e) {
9608
9799
  let newVal;
9609
9800
  if (typeof text === 'number') {
@@ -9622,7 +9813,7 @@ class NumberBaseComponent extends FieldBaseComponent {
9622
9813
  let indexofDot = text.indexOf('.');
9623
9814
  const selectionStart = this.inputElement?.selectionStart;
9624
9815
  const decimalPersicion = this.decimalPrecision;
9625
- if (decimalPersicion) {
9816
+ if (decimalPersicion && indexofDot > 0) {
9626
9817
  const t = text.length - (indexofDot + 1);
9627
9818
  if (t > decimalPersicion) {
9628
9819
  const diff = t - decimalPersicion;
@@ -9655,12 +9846,10 @@ class NumberBaseComponent extends FieldBaseComponent {
9655
9846
  diff = indexOfDotFormated - indexofDot;
9656
9847
  cursorPosition += diff;
9657
9848
  }
9658
- if (this.inputElement && this.inputElement.value !== formated) {
9659
- this.inputElement.value = this._getMinusValue(isMinus, formated);
9660
- }
9661
- if (e.target.value !== formated) {
9662
- e.target.value = this._getMinusValue(isMinus, formated);
9663
- }
9849
+ const diff1 = this._setTargetToFormatedValue(this.inputElement, formated, isMinus);
9850
+ const diff2 = this._setTargetToFormatedValue(e.traget, formated, isMinus);
9851
+ cursorPosition && (cursorPosition += diff1);
9852
+ cursorPosition && (cursorPosition += diff2);
9664
9853
  this._setCursorPosition(cursorPosition);
9665
9854
  }
9666
9855
  else {
@@ -11498,20 +11687,20 @@ class PortalPageComponent extends PageWithFormHandlerBaseComponent {
11498
11687
  super(...arguments);
11499
11688
  this._routingService = inject(RoutingService);
11500
11689
  }
11690
+ ngOnInit() {
11691
+ super.ngOnInit();
11692
+ this.addModulesToDom();
11693
+ }
11501
11694
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PortalPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
11502
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: PortalPageComponent, isStandalone: false, selector: "bnrc-portal-page", providers: [RoutingService, ContainerService], usesInheritance: true, ngImport: i0, template: `<ng-container #containerRef></ng-container> <router-outlet></router-outlet
11503
- ><router-outlet name="dialog"></router-outlet>`, isInline: true, dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11695
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: PortalPageComponent, isStandalone: false, selector: "bnrc-portal-page", providers: [RoutingService], usesInheritance: true, ngImport: i0, template: `<ng-container #containerRef></ng-container> <router-outlet></router-outlet
11696
+ ><router-outlet name="dialog"></router-outlet>
11697
+ <ng-container #containerBottomRef></ng-container> `, isInline: true, styles: [":host{min-height:100svh}\n"], dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11504
11698
  }
11505
11699
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PortalPageComponent, decorators: [{
11506
11700
  type: Component,
11507
- args: [{
11508
- selector: 'bnrc-portal-page',
11509
- template: `<ng-container #containerRef></ng-container> <router-outlet></router-outlet
11510
- ><router-outlet name="dialog"></router-outlet>`,
11511
- changeDetection: ChangeDetectionStrategy.OnPush,
11512
- providers: [RoutingService, ContainerService],
11513
- standalone: false
11514
- }]
11701
+ args: [{ selector: 'bnrc-portal-page', template: `<ng-container #containerRef></ng-container> <router-outlet></router-outlet
11702
+ ><router-outlet name="dialog"></router-outlet>
11703
+ <ng-container #containerBottomRef></ng-container> `, changeDetection: ChangeDetectionStrategy.OnPush, providers: [RoutingService], standalone: false, styles: [":host{min-height:100svh}\n"] }]
11515
11704
  }] });
11516
11705
 
11517
11706
  class FillEmptySpaceDirective extends BaseDirective {
@@ -12456,6 +12645,12 @@ class BaseViewItemPropsComponent extends BaseViewPropsComponent {
12456
12645
  _setSavingState(err) {
12457
12646
  if (err) {
12458
12647
  this.hasError = true;
12648
+ this._handleBruleShowMessageAction({
12649
+ MessageExpression: err.Text,
12650
+ MessageType: 2,
12651
+ MessageExpressionHtml: err.Text,
12652
+ EscapeCharacters: true
12653
+ });
12459
12654
  return;
12460
12655
  }
12461
12656
  this.hasError = false;
@@ -14500,45 +14695,19 @@ class DynamicStyleDirective extends BaseDirective {
14500
14695
  }
14501
14696
  ngOnInit() {
14502
14697
  super.ngOnInit();
14503
- this._addDynamicFormStyles(this.cssStyle);
14698
+ this._style = AddDynamicFormStyles(this.id, this.cssStyle);
14504
14699
  }
14505
14700
  ngOnChanges(changes) {
14506
14701
  super.ngOnChanges(changes);
14507
14702
  const { cssStyle } = changes;
14508
14703
  if (cssStyle && !cssStyle.firstChange) {
14509
- this._removeDynamicFormStyles();
14510
- this._addDynamicFormStyles(cssStyle.currentValue);
14704
+ RemoveDynamicFormStyles(this._style);
14705
+ this._style = AddDynamicFormStyles(this.id, cssStyle.currentValue);
14511
14706
  }
14512
14707
  }
14513
14708
  ngOnDestroy() {
14514
14709
  super.ngOnDestroy();
14515
- this._removeDynamicFormStyles();
14516
- }
14517
- _addDynamicFormStyles(cssStyles) {
14518
- if (!cssStyles) {
14519
- return;
14520
- }
14521
- cssStyles = cssStyles.replace(/:root/gi, `#${this.id}`);
14522
- cssStyles = cssStyles.replace(/:html/gi, `:root`);
14523
- const head = document.head || document.getElementsByTagName('head')[0];
14524
- const style = document.createElement('style');
14525
- head.appendChild(style);
14526
- style.type = 'text/css';
14527
- if (style.styleSheet) {
14528
- // This is required for IE8 and below.
14529
- style.styleSheet.cssText = cssStyles;
14530
- }
14531
- else {
14532
- style.appendChild(document.createTextNode(cssStyles));
14533
- }
14534
- this._style = style;
14535
- }
14536
- _removeDynamicFormStyles() {
14537
- if (!this._style) {
14538
- return;
14539
- }
14540
- const head = document.head || document.getElementsByTagName('head')[0];
14541
- head.removeChild(this._style);
14710
+ RemoveDynamicFormStyles(this._style);
14542
14711
  }
14543
14712
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DynamicStyleDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
14544
14713
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.6", type: DynamicStyleDirective, isStandalone: false, selector: "[cssStyle]", inputs: { cssStyle: "cssStyle" }, host: { properties: { "attr.id": "this.id" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
@@ -15573,6 +15742,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
15573
15742
  type: Input
15574
15743
  }] } });
15575
15744
 
15745
+ class SafeBottomDirective extends BaseDirective {
15746
+ constructor() {
15747
+ super(...arguments);
15748
+ this.isMobile = getDeviceIsMobile();
15749
+ }
15750
+ ngOnInit() {
15751
+ super.ngOnInit();
15752
+ if (!this.isMobile) {
15753
+ return;
15754
+ }
15755
+ let cls = this.disableBottom ? '' : 'safe-bottom-area-env';
15756
+ this.applyTop && (cls += 'safe-top-area-env');
15757
+ let clsNonStandlalone = this.disableBottom ? '' : 'safe-bottom-padding';
15758
+ this.applyTop && (clsNonStandlalone += 'safe-top-padding');
15759
+ const isStandAlone = !document.body.classList.contains('noStandalone');
15760
+ if (isStandAlone) {
15761
+ this._renderer2.addClass(this._el.nativeElement, cls);
15762
+ }
15763
+ else {
15764
+ this._renderer2.addClass(this._el.nativeElement, clsNonStandlalone);
15765
+ }
15766
+ }
15767
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SafeBottomDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
15768
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.6", type: SafeBottomDirective, isStandalone: false, selector: "[safe-area]", inputs: { applyTop: "applyTop", disableBottom: "disableBottom" }, usesInheritance: true, ngImport: i0 }); }
15769
+ }
15770
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SafeBottomDirective, decorators: [{
15771
+ type: Directive,
15772
+ args: [{
15773
+ selector: '[safe-area]',
15774
+ standalone: false
15775
+ }]
15776
+ }], propDecorators: { applyTop: [{
15777
+ type: Input
15778
+ }], disableBottom: [{
15779
+ type: Input
15780
+ }] } });
15781
+
15576
15782
  class PortalDynamicPageResolver {
15577
15783
  /** Inserted by Angular inject() migration for backwards compatibility */
15578
15784
  constructor() {
@@ -15716,7 +15922,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
15716
15922
  class FormNewComponent extends BaseComponent {
15717
15923
  constructor() {
15718
15924
  super(...arguments);
15719
- this._location = inject(Location);
15925
+ this._router = inject(Router);
15926
+ this._activatedRoute = inject(ActivatedRoute);
15720
15927
  }
15721
15928
  ngOnInit() {
15722
15929
  super.ngOnInit();
@@ -15726,7 +15933,10 @@ class FormNewComponent extends BaseComponent {
15726
15933
  this.params = { moId, typeDefId, viewId };
15727
15934
  }
15728
15935
  onFormClose() {
15729
- this._location.back();
15936
+ this._router.navigate(['../'], {
15937
+ relativeTo: this._activatedRoute,
15938
+ replaceUrl: true
15939
+ });
15730
15940
  }
15731
15941
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormNewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
15732
15942
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: FormNewComponent, isStandalone: false, selector: "bnrc-form-new", inputs: { settings: "settings" }, usesInheritance: true, ngImport: i0, template: '<bnrc-form [params]="params" (formClose)="onFormClose()"></bnrc-form>', isInline: true, dependencies: [{ kind: "component", type: FormComponent, selector: "bnrc-form", inputs: ["params", "customFormPanelUi", "formPanelCtrl", "UlvMainCtrlr", "formPanelCtrlId", "saveOnChange", "inlineEditInReport"], outputs: ["titleChanged", "moChanged", "formClose", "uiComponent", "formRendered", "bruleAction", "beforeTransition", "afterTransition"] }, { kind: "directive", type: FormCloseDirective, selector: "[formClose]", inputs: ["isMobile"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -16712,7 +16922,8 @@ const directives = [
16712
16922
  TooltipDirective,
16713
16923
  SimplebarDirective,
16714
16924
  LeafletLongPressDirective,
16715
- ResizeHandlerDirective
16925
+ ResizeHandlerDirective,
16926
+ SafeBottomDirective
16716
16927
  ];
16717
16928
  const services = [
16718
16929
  PortalService,
@@ -17024,7 +17235,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
17024
17235
  TooltipDirective,
17025
17236
  SimplebarDirective,
17026
17237
  LeafletLongPressDirective,
17027
- ResizeHandlerDirective], imports: [CommonModule,
17238
+ ResizeHandlerDirective,
17239
+ SafeBottomDirective], imports: [CommonModule,
17028
17240
  BarsaNovinRayCoreRoutingModule,
17029
17241
  BarsaSapUiFormPageModule,
17030
17242
  ResizableModule,
@@ -17159,7 +17371,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
17159
17371
  TooltipDirective,
17160
17372
  SimplebarDirective,
17161
17373
  LeafletLongPressDirective,
17162
- ResizeHandlerDirective] }); }
17374
+ ResizeHandlerDirective,
17375
+ SafeBottomDirective] }); }
17163
17376
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BarsaNovinRayCoreModule, providers: [provideHttpClient(withInterceptorsFromDi())], imports: [CommonModule,
17164
17377
  BarsaNovinRayCoreRoutingModule,
17165
17378
  BarsaSapUiFormPageModule,
@@ -17189,5 +17402,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
17189
17402
  * Generated bundle index. Do not edit.
17190
17403
  */
17191
17404
 
17192
- export { APP_VERSION, AbsoluteDivBodyDirective, AffixRespondEvents, AllFilesMimeType, AnchorScrollDirective, ApiService, ApplicationBaseComponent, ApplicationCtrlrService, AttrRtlDirective, AudioMimeType, AudioRecordingService, AuthGuard, BarsaApi, BarsaDialogService, BarsaIconDictPipe, BarsaNovinRayCoreModule, BarsaReadonlyDirective, BarsaSapUiFormPageModule, BarsaStorageService, BaseColumnPropsComponent, BaseComponent, BaseController, BaseDirective, BaseDynamicComponent, BaseFormToolbaritemPropsComponent, BaseItemContentPropsComponent, BaseModule, BaseReportModel, BaseUlvSettingComponent, BaseViewContentPropsComponent, BaseViewItemPropsComponent, BaseViewPropsComponent, BbbTranslatePipe, BodyClickDirective, BoolControlInfoModel, BreadcrumbService, ButtonLoadingComponent, CalculateControlInfoModel, CanUploadFilePipe, CardMediaSizePipe, ChangeLayoutInfoCustomUi, ChunkArrayPipe, CodeEditorControlInfoModel, ColSetting, ColumnCustomComponentPipe, ColumnCustomUiPipe, ColumnIconPipe, ColumnResizerDirective, ColumnService, ColumnValueDirective, ColumnValueOfParametersPipe, ColumnValuePipe, ComboRowImagePipe, CommandControlInfoModel, ContainerComponent, ContainerService, ContextMenuPipe, ControlUiPipe, ConvertToStylePipe, CopyDirective, CountDownDirective, CustomCommand, CustomInjector, CustomRouteReuseStategy, DIALOG_SERVICE, DateHijriService, DateMiladiService, DateRanges, DateService, DateShamsiService, DateTimeControlInfoModel, DeviceWidth, DialogParams, DynamicCommandDirective, DynamicComponentService, DynamicDarkColorPipe, DynamicFormComponent, DynamicFormToolbaritemComponent, DynamicItemComponent, DynamicLayoutComponent, DynamicRootVariableDirective, DynamicStyleDirective, DynamicTileGroupComponent, EllapsisTextDirective, EllipsifyDirective, EmptyPageComponent, EmptyPageWithRouterAndRouterOutletComponent, EnumControlInfoModel, ExecuteDynamicCommand, ExecuteWorkflowChoiceDef, FORM_DIALOG_COMPONENT, FieldBaseComponent, FieldDirective, FieldInfoTypeEnum, FieldUiComponent, FileControlInfoModel, FileInfoCountPipe, FilePictureInfoModel, FilesValidationHelper, FillAllLayoutControls, FillEmptySpaceDirective, FilterColumnsByDetailsPipe, FilterInlineActionListPipe, FilterPipe, FilterStringPipe, FilterTabPipe, FilterToolbarControlPipe, FilterWorkflowInMobilePipe, FindColumnByDbNamePipe, FindGroup, FindLayoutSettingFromLayout94, FindPreviewColumnPipe, FindToolbarItem, FioriIconPipe, FormBaseComponent, FormCloseDirective, FormComponent, FormFieldReportPageComponent, FormNewComponent, FormPageBaseComponent, FormPageComponent, FormPanelService, FormPropsBaseComponent, FormService, FormToolbarBaseComponent, GaugeControlInfoModel, GeneralControlInfoModel, GetAllColumnsSorted, GetAllHorizontalFromLayout94, GetDefaultMoObjectInfo, GetImgTags, GetVisibleValue, GridSetting, GroupBy, GroupByPipe, GroupByService, HeaderFacetValuePipe, HideAcceptCancelButtonsPipe, HideColumnsInmobilePipe, HistoryControlInfoModel, HorizontalLayoutService, HorizontalResponsiveDirective, IconControlInfoModel, ImageLazyDirective, ImageMimeType, ImagetoPrint, InMemoryStorageService, IndexedDbService, InputNumber, IntersectionObserverDirective, IntersectionStatus, IsDarkMode, IsExpandedNodePipe, IsImagePipe, ItemsRendererDirective, LabelStarTrimPipe, LabelmandatoryDirective, LayoutItemBaseComponent, LayoutMainContentService, LayoutPanelBaseComponent, LayoutService, LeafletLongPressDirective, LinearListControlInfoModel, LinearListHelper, ListCountPipe, ListRelationModel, LoadExternalFilesDirective, LocalStorageService, LogService, LoginSettingsResolver, MapToChatMessagePipe, MasterDetailsPageComponent, MeasureFormTitleWidthDirective, MergeFieldsToColumnsPipe, MetaobjectDataModel, MetaobjectRelationModel, MoForReportModel, MoForReportModelBase, MoInfoUlvMoListPipe, MoInfoUlvPagingPipe, MoReportValueConcatPipe, MoReportValuePipe, MoValuePipe, MobileDirective, ModalRootComponent, MultipleGroupByPipe, NOTIFICATAION_POPUP_SERVER, NOTIFICATION_WEBWORKER_FACTORY, NetworkStatusService, NotFoundComponent, NotificationService, NowraptextDirective, NumberBaseComponent, NumberControlInfoModel, NumbersOnlyInputDirective, NumeralPipe, OverflowTextDirective, PageBaseComponent, PageWithFormHandlerBaseComponent, PdfMimeType, PictureFieldSourcePipe, PictureFileControlInfoModel, PlaceHolderDirective, PortalDynamicPageResolver, PortalFormPageResolver, PortalPageComponent, PortalPageResolver, PortalPageSidebarComponent, PortalReportPageResolver, PortalService, PreventDefaulEvent, PreventDefaultDirective, PrintFilesDirective, PrintImage, PromptUpdateService, RabetehAkseTakiListiControlInfoModel, RedirectHomeGuard, RedirectReportNavigatorCommandComponent, RelatedReportControlInfoModel, RelationListControlInfoModel, RemoveNewlinePipe, RenderUlvDirective, RenderUlvPaginDirective, RenderUlvViewerDirective, ReplacePipe, ReportBaseComponent, ReportBaseInfo, ReportCalendarModel, ReportContainerComponent, ReportExtraInfo, ReportField, ReportFormModel, ReportItemBaseComponent, ReportListModel, ReportModel, ReportTreeModel, ReportViewBaseComponent, ReportViewColumn, ResizableComponent, ResizableDirective, ResizableModule, ResizeHandlerDirective, ResizeObserverDirective, ReversePipe, RichStringControlInfoModel, RootPageComponent, RootPortalComponent, RouteFormChangeDirective, RoutingService, RowDataOption, RowNumberPipe, SanitizeTextPipe, SaveImageDirective, SaveImageToFile, SaveScrollPositionService, ScrollPersistDirective, ScrollToSelectedDirective, SelectionMode, SeperatorFixPipe, ServiceWorkerCommuncationService, ServiceWorkerNotificationService, ShellbarHeightService, ShortcutHandlerDirective, ShortcutRegisterDirective, SimplebarDirective, SingleRelationControlInfoModel, SortDirection, SortPipe, SortSetting, SplideSliderDirective, SplitPipe, StopPropagationDirective, StringControlInfoModel, StringToNumberPipe, SubformControlInfoModel, SystemBaseComponent, TOAST_SERVICE, TableHeaderWidthMode, TableResizerDirective, TabpageService, ThImageOrIconePipe, TileGroupBreadcrumResolver, TilePropsComponent, TlbButtonsPipe, ToolbarSettingsPipe, TooltipDirective, TotalSummaryPipe, UiService, UlvCommandDirective, UlvMainService, UnlimitSessionComponent, UntilInViewDirective, UploadService, VideoMimeType, VideoRecordingService, ViewBase, VisibleValuePipe, WebOtpDirective, WordMimeType, WorfkflowwChoiceCommandDirective, addCssVariableToRoot, availablePrefixes, calcContextMenuWidth, calculateColumnContent, calculateColumnWidth, calculateColumnWidthFitToContainer, calculateFreeColumnSize, calculateMoDataListContentWidthByColumnName, cancelRequestAnimationFrame, createFormPanelMetaConditions, createGridEditorFormPanel, easeInOutCubic, elementInViewport2, enumValueToStringSize, executeUlvCommandHandler, flattenTree, forbiddenValidator, formRoutes, formatBytes, fromEntries, fromIntersectionObserver, genrateInlineMoId, getAllItemsPerChildren, getColumnValueOfMoDataList, getComponentDefined, getControlList, getControlSizeMode, getDateService, getDeviceIsDesktop, getDeviceIsMobile, getDeviceIsPhone, getDeviceIsTablet, getFieldValue, getFocusableTagNames, getFormSettings, getGridSettings, getHeaderValue, getIcon, getImagePath, getLabelWidth, getLayout94ObjectInfo, getLayoutControl, getNewMoGridEditor, getParentHeight, getRequestAnimationFrame, getResetGridSettings, getTargetRect, getUniqueId, getValidExtension, isFF, isFirefox, isFunction, isImage, isInLocalMode, isSafari, isTargetWindow, measureText, measureText2, measureTextBy, mobile_regex, nullOrUndefinedString, number_only, requestAnimationFramePolyfill, setColumnWidthByMaxMoContentWidth, setOneDepthLevel, setTableThWidth, shallowEqual, stopPropagation, throwIfAlreadyLoaded, toNumber, validateAllFormFields };
17405
+ export { APP_VERSION, AbsoluteDivBodyDirective, AddDynamicFormStyles, AffixRespondEvents, AllFilesMimeType, AnchorScrollDirective, ApiService, ApplicationBaseComponent, ApplicationCtrlrService, AttrRtlDirective, AudioMimeType, AudioRecordingService, AuthGuard, BarsaApi, BarsaDialogService, BarsaIconDictPipe, BarsaNovinRayCoreModule, BarsaReadonlyDirective, BarsaSapUiFormPageModule, BarsaStorageService, BaseColumnPropsComponent, BaseComponent, BaseController, BaseDirective, BaseDynamicComponent, BaseFormToolbaritemPropsComponent, BaseItemContentPropsComponent, BaseModule, BaseReportModel, BaseUlvSettingComponent, BaseViewContentPropsComponent, BaseViewItemPropsComponent, BaseViewPropsComponent, BbbTranslatePipe, BodyClickDirective, BoolControlInfoModel, BreadcrumbService, ButtonLoadingComponent, CalculateControlInfoModel, CanUploadFilePipe, CardMediaSizePipe, ChangeLayoutInfoCustomUi, ChunkArrayPipe, CodeEditorControlInfoModel, ColSetting, ColumnCustomComponentPipe, ColumnCustomUiPipe, ColumnIconPipe, ColumnResizerDirective, ColumnService, ColumnValueDirective, ColumnValueOfParametersPipe, ColumnValuePipe, ComboRowImagePipe, CommandControlInfoModel, ContainerComponent, ContainerService, ContextMenuPipe, ControlUiPipe, ConvertToStylePipe, CopyDirective, CountDownDirective, CustomCommand, CustomInjector, CustomRouteReuseStategy, DIALOG_SERVICE, DateHijriService, DateMiladiService, DateRanges, DateService, DateShamsiService, DateTimeControlInfoModel, DeviceWidth, DialogParams, DynamicCommandDirective, DynamicComponentService, DynamicDarkColorPipe, DynamicFormComponent, DynamicFormToolbaritemComponent, DynamicItemComponent, DynamicLayoutComponent, DynamicRootVariableDirective, DynamicStyleDirective, DynamicTileGroupComponent, EllapsisTextDirective, EllipsifyDirective, EmptyPageComponent, EmptyPageWithRouterAndRouterOutletComponent, EnumControlInfoModel, ExecuteDynamicCommand, ExecuteWorkflowChoiceDef, FORM_DIALOG_COMPONENT, FieldBaseComponent, FieldDirective, FieldInfoTypeEnum, FieldUiComponent, FileControlInfoModel, FileInfoCountPipe, FilePictureInfoModel, FilesValidationHelper, FillAllLayoutControls, FillEmptySpaceDirective, FilterColumnsByDetailsPipe, FilterInlineActionListPipe, FilterPipe, FilterStringPipe, FilterTabPipe, FilterToolbarControlPipe, FilterWorkflowInMobilePipe, FindColumnByDbNamePipe, FindGroup, FindLayoutSettingFromLayout94, FindPreviewColumnPipe, FindToolbarItem, FioriIconPipe, FormBaseComponent, FormCloseDirective, FormComponent, FormFieldReportPageComponent, FormNewComponent, FormPageBaseComponent, FormPageComponent, FormPanelService, FormPropsBaseComponent, FormService, FormToolbarBaseComponent, GaugeControlInfoModel, GeneralControlInfoModel, GetAllColumnsSorted, GetAllHorizontalFromLayout94, GetDefaultMoObjectInfo, GetImgTags, GetVisibleValue, GridSetting, GroupBy, GroupByPipe, GroupByService, HeaderFacetValuePipe, HideAcceptCancelButtonsPipe, HideColumnsInmobilePipe, HistoryControlInfoModel, HorizontalLayoutService, HorizontalResponsiveDirective, IconControlInfoModel, ImageLazyDirective, ImageMimeType, ImagetoPrint, InMemoryStorageService, IndexedDbService, InputNumber, IntersectionObserverDirective, IntersectionStatus, IsDarkMode, IsExpandedNodePipe, IsImagePipe, ItemsRendererDirective, LabelStarTrimPipe, LabelmandatoryDirective, LayoutItemBaseComponent, LayoutMainContentService, LayoutPanelBaseComponent, LayoutService, LeafletLongPressDirective, LinearListControlInfoModel, LinearListHelper, ListCountPipe, ListRelationModel, LoadExternalFilesDirective, LocalStorageService, LogService, LoginSettingsResolver, MapToChatMessagePipe, MasterDetailsPageComponent, MeasureFormTitleWidthDirective, MergeFieldsToColumnsPipe, MetaobjectDataModel, MetaobjectRelationModel, MoForReportModel, MoForReportModelBase, MoInfoUlvMoListPipe, MoInfoUlvPagingPipe, MoReportValueConcatPipe, MoReportValuePipe, MoValuePipe, MobileDirective, ModalRootComponent, MultipleGroupByPipe, NOTIFICATAION_POPUP_SERVER, NOTIFICATION_WEBWORKER_FACTORY, NetworkStatusService, NotFoundComponent, NotificationService, NowraptextDirective, NumberBaseComponent, NumberControlInfoModel, NumbersOnlyInputDirective, NumeralPipe, OverflowTextDirective, PageBaseComponent, PageWithFormHandlerBaseComponent, PdfMimeType, PictureFieldSourcePipe, PictureFileControlInfoModel, PlaceHolderDirective, PortalDynamicPageResolver, PortalFormPageResolver, PortalPageComponent, PortalPageResolver, PortalPageSidebarComponent, PortalReportPageResolver, PortalService, PreventDefaulEvent, PreventDefaultDirective, PrintFilesDirective, PrintImage, PromptUpdateService, PushCheckService, RabetehAkseTakiListiControlInfoModel, RedirectHomeGuard, RedirectReportNavigatorCommandComponent, RelatedReportControlInfoModel, RelationListControlInfoModel, RemoveDynamicFormStyles, RemoveNewlinePipe, RenderUlvDirective, RenderUlvPaginDirective, RenderUlvViewerDirective, ReplacePipe, ReportBaseComponent, ReportBaseInfo, ReportCalendarModel, ReportContainerComponent, ReportExtraInfo, ReportField, ReportFormModel, ReportItemBaseComponent, ReportListModel, ReportModel, ReportTreeModel, ReportViewBaseComponent, ReportViewColumn, ResizableComponent, ResizableDirective, ResizableModule, ResizeHandlerDirective, ResizeObserverDirective, ReversePipe, RichStringControlInfoModel, RootPageComponent, RootPortalComponent, RouteFormChangeDirective, RoutingService, RowDataOption, RowNumberPipe, SafeBottomDirective, SanitizeTextPipe, SaveImageDirective, SaveImageToFile, SaveScrollPositionService, ScrollPersistDirective, ScrollToSelectedDirective, SelectionMode, SeperatorFixPipe, ServiceWorkerCommuncationService, ServiceWorkerNotificationService, ShellbarHeightService, ShortcutHandlerDirective, ShortcutRegisterDirective, SimplebarDirective, SingleRelationControlInfoModel, SortDirection, SortPipe, SortSetting, SplideSliderDirective, SplitPipe, StopPropagationDirective, StringControlInfoModel, StringToNumberPipe, SubformControlInfoModel, SystemBaseComponent, TOAST_SERVICE, TableHeaderWidthMode, TableResizerDirective, TabpageService, ThImageOrIconePipe, TileGroupBreadcrumResolver, TilePropsComponent, TlbButtonsPipe, ToolbarSettingsPipe, TooltipDirective, TotalSummaryPipe, UiService, UlvCommandDirective, UlvMainService, UnlimitSessionComponent, UntilInViewDirective, UploadService, VideoMimeType, VideoRecordingService, ViewBase, VisibleValuePipe, WebOtpDirective, WordMimeType, WorfkflowwChoiceCommandDirective, addCssVariableToRoot, availablePrefixes, calcContextMenuWidth, calculateColumnContent, calculateColumnWidth, calculateColumnWidthFitToContainer, calculateFreeColumnSize, calculateMoDataListContentWidthByColumnName, cancelRequestAnimationFrame, createFormPanelMetaConditions, createGridEditorFormPanel, easeInOutCubic, elementInViewport2, enumValueToStringSize, executeUlvCommandHandler, flattenTree, forbiddenValidator, formRoutes, formatBytes, fromEntries, fromIntersectionObserver, genrateInlineMoId, getAllItemsPerChildren, getColumnValueOfMoDataList, getComponentDefined, getControlList, getControlSizeMode, getDateService, getDeviceIsDesktop, getDeviceIsMobile, getDeviceIsPhone, getDeviceIsTablet, getFieldValue, getFocusableTagNames, getFormSettings, getGridSettings, getHeaderValue, getIcon, getImagePath, getLabelWidth, getLayout94ObjectInfo, getLayoutControl, getNewMoGridEditor, getParentHeight, getRequestAnimationFrame, getResetGridSettings, getTargetRect, getUniqueId, getValidExtension, isFF, isFirefox, isFunction, isImage, isInLocalMode, isSafari, isTargetWindow, measureText, measureText2, measureTextBy, mobile_regex, nullOrUndefinedString, number_only, requestAnimationFramePolyfill, setColumnWidthByMaxMoContentWidth, setOneDepthLevel, setTableThWidth, shallowEqual, stopPropagation, throwIfAlreadyLoaded, toNumber, validateAllFormFields };
17193
17406
  //# sourceMappingURL=barsa-novin-ray-core.mjs.map