barsa-novin-ray-core 2.3.99 → 2.3.100

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
- 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, 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';
2
+ import { Injectable, inject, ElementRef, Input, ChangeDetectionStrategy, Component, Pipe, ComponentFactoryResolver, Injector, ApplicationRef, Compiler, DOCUMENT, NgModuleFactory, InjectionToken, NgZone, signal, effect, EventEmitter, ChangeDetectorRef, Renderer2, HostBinding, Output, HostListener, ViewContainerRef, ViewChild, 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, lastValueFrom, take, debounceTime as debounceTime$1, skip, Observable, tap as tap$1, catchError as catchError$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';
@@ -17,6 +17,7 @@ import * as i1$1 from '@angular/common';
17
17
  import { Location, TitleCasePipe, CommonModule } from '@angular/common';
18
18
  import RecordRTC from 'recordrtc';
19
19
  import { SwUpdate, SwPush } from '@angular/service-worker';
20
+ import { openDB } from 'idb';
20
21
  import Splide from '@splidejs/splide';
21
22
 
22
23
  class BarsaApi {
@@ -8267,54 +8268,224 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
8267
8268
  args: [{ providedIn: 'root' }]
8268
8269
  }] });
8269
8270
 
8271
+ /* eslint-disable */
8272
+ //
8273
+ function usePushNotification() {
8274
+ const swPush = inject(SwPush);
8275
+ const http = inject(HttpClient);
8276
+ const _localStorage = inject(LocalStorageService);
8277
+ // Signals
8278
+ const bannerVisible = signal(false);
8279
+ const isSubscribed = signal(false);
8280
+ const permission = signal(Notification.permission);
8281
+ const errorMessage = signal(null);
8282
+ // IndexedDB setup
8283
+ const dbPromise = openDB('push-db', 1, {
8284
+ upgrade(db) {
8285
+ db.createObjectStore('subscription');
8286
+ }
8287
+ });
8288
+ // ذخیره subscription در DB
8289
+ const saveSubscription = async (sub) => {
8290
+ const db = await dbPromise;
8291
+ await db.put('subscription', sub.toJSON(), 'push-subscription');
8292
+ };
8293
+ async function initPushBanner() {
8294
+ const saved = await loadSubscription();
8295
+ if (saved) {
8296
+ isSubscribed.set(true);
8297
+ bannerVisible.set(false); // قبلاً subscribe شده
8298
+ }
8299
+ else {
8300
+ isSubscribed.set(false);
8301
+ bannerVisible.set(true); // هنوز subscribe نشده، بنر نمایش داده شود
8302
+ }
8303
+ }
8304
+ // خواندن subscription از DB
8305
+ const loadSubscription = async () => {
8306
+ const db = await dbPromise;
8307
+ const data = await db.get('subscription', 'push-subscription');
8308
+ if (!data) {
8309
+ return null;
8310
+ }
8311
+ // داده را به سرور می‌فرستیم یا UI نشان می‌دهیم
8312
+ return data;
8313
+ };
8314
+ // حذف subscription از DB
8315
+ const deleteSubscription = async () => {
8316
+ const db = await dbPromise;
8317
+ await db.delete('subscription', 'push-subscription');
8318
+ };
8319
+ const handleNewSubscription = async (subData) => {
8320
+ const saved = await loadSubscription();
8321
+ if (!saved || saved.endpoint !== subData.endpoint) {
8322
+ // حذف قبلی
8323
+ if (saved) {
8324
+ try {
8325
+ await addSubscriptionToServer(saved);
8326
+ }
8327
+ catch (e) {
8328
+ console.error('Delete old subscription failed', e);
8329
+ }
8330
+ }
8331
+ // ثبت جدید
8332
+ try {
8333
+ await deleteSubscriptionFromServer(subData);
8334
+ await saveSubscription(subData);
8335
+ isSubscribed.set(true);
8336
+ }
8337
+ catch (e) {
8338
+ console.error('Add new subscription failed', e);
8339
+ }
8340
+ }
8341
+ };
8342
+ const hideBanner = () => bannerVisible.set(false);
8343
+ // بررسی وضعیت فعلی subscription از SwPush و DB
8344
+ swPush.subscription.subscribe(async (sub) => {
8345
+ isSubscribed.set(!!sub);
8346
+ permission.set(Notification.permission);
8347
+ if (sub) {
8348
+ await handleNewSubscription(sub.toJSON());
8349
+ }
8350
+ });
8351
+ const addSubscriptionToServer = async (sub) => {
8352
+ const token2 = _localStorage.getItem(BarsaApi.LoginAction.token2StorageKey) ?? '';
8353
+ const options = {
8354
+ headers: new HttpHeaders({
8355
+ 'Content-Type': 'application/json',
8356
+ sth: token2
8357
+ })
8358
+ };
8359
+ await lastValueFrom(http.post('/api/pushnotification/add', sub, options));
8360
+ };
8361
+ const deleteSubscriptionFromServer = async (sub) => {
8362
+ const token2 = _localStorage.getItem(BarsaApi.LoginAction.token2StorageKey) ?? '';
8363
+ const options = {
8364
+ headers: new HttpHeaders({
8365
+ 'Content-Type': 'application/json',
8366
+ sth: token2
8367
+ })
8368
+ };
8369
+ await lastValueFrom(http.post('/api/pushnotification/delete', sub, options));
8370
+ };
8371
+ // subscribe فقط داخل gesture
8372
+ const subscribe = async () => {
8373
+ try {
8374
+ const publicKey = await lastValueFrom(http.get('/api/pushnotification/publickey', { responseType: 'text' }));
8375
+ const sub = await swPush.requestSubscription({ serverPublicKey: publicKey });
8376
+ const registration = await navigator.serviceWorker.ready;
8377
+ registration.active?.postMessage({ event: 'setVapidKey', publicKey });
8378
+ await addSubscriptionToServer(sub);
8379
+ await saveSubscription(sub);
8380
+ isSubscribed.set(true);
8381
+ permission.set(Notification.permission);
8382
+ bannerVisible.set(false);
8383
+ errorMessage.set(null);
8384
+ return sub;
8385
+ }
8386
+ catch (err) {
8387
+ console.error('Push subscribe error:', err);
8388
+ errorMessage.set(err?.message || 'خطا در فعال‌سازی Push');
8389
+ throw err;
8390
+ }
8391
+ };
8392
+ const unsubscribe = async () => {
8393
+ try {
8394
+ const sub = await lastValueFrom(swPush.subscription);
8395
+ if (!sub) {
8396
+ return;
8397
+ }
8398
+ swPush.unsubscribe();
8399
+ await deleteSubscriptionFromServer(sub);
8400
+ await sub.unsubscribe();
8401
+ await deleteSubscription();
8402
+ isSubscribed.set(false);
8403
+ errorMessage.set(null);
8404
+ }
8405
+ catch (err) {
8406
+ console.error('Push unsubscribe error:', err);
8407
+ errorMessage.set(err?.message || 'خطا در لغو اشتراک');
8408
+ }
8409
+ };
8410
+ return {
8411
+ bannerVisible,
8412
+ isSubscribed,
8413
+ permission,
8414
+ errorMessage,
8415
+ initPushBanner,
8416
+ subscribe,
8417
+ unsubscribe,
8418
+ handleNewSubscription,
8419
+ hideBanner
8420
+ };
8421
+ }
8422
+
8270
8423
  class ServiceWorkerCommuncationService {
8271
8424
  constructor() {
8272
8425
  this._toastService = inject(TOAST_SERVICE, { optional: true });
8273
8426
  this._localStorage = inject(LocalStorageService);
8274
8427
  this._portalService = inject(PortalService);
8275
- this._swPush = inject(SwPush);
8276
- this._httpClient = inject(HttpClient);
8277
8428
  this._pushCheckService = inject(PushCheckService);
8429
+ this._usePushNotification = usePushNotification();
8278
8430
  }
8279
8431
  get token2() {
8280
8432
  return this._localStorage.getItem(BarsaApi.LoginAction.token2StorageKey) ?? '';
8281
8433
  }
8282
- get httpOptions() {
8283
- return {
8284
- headers: new HttpHeaders({
8285
- 'Content-Type': 'application/json',
8286
- sth: this.token2
8287
- })
8288
- };
8289
- }
8290
8434
  init() {
8291
- BarsaApi.Ul.ApplicationCtrlr.on({
8292
- UserLoggedout: (_, doReturn) => {
8293
- this._handlePushUnSubscription(doReturn);
8294
- }
8295
- });
8435
+ this._subscribe();
8436
+ // register SW
8296
8437
  if (!navigator.serviceWorker) {
8297
8438
  return;
8298
8439
  }
8299
- navigator.serviceWorker.ready.then((registration) => {
8300
- if (registration.active) {
8301
- this._serviceWorker = registration.active;
8302
- this._subscribe();
8440
+ navigator.serviceWorker.ready.then((reg) => {
8441
+ if (reg.active) {
8442
+ this._serviceWorker = reg.active;
8443
+ navigator.serviceWorker.addEventListener('message', (event) => {
8444
+ if (event.data?.event === 'subscriptionChanged') {
8445
+ this._usePushNotification.handleNewSubscription(event.data.subscription);
8446
+ }
8447
+ });
8303
8448
  }
8304
8449
  });
8305
- }
8306
- _handlePushSubscirption() {
8307
- this._swPush.subscription.subscribe((subscription) => {
8308
- this._subscription = subscription;
8309
- this.operationName = this._subscription === null ? 'Subscribe' : 'Unsubscribe';
8450
+ // user logout
8451
+ BarsaApi.Ul.ApplicationCtrlr.on({
8452
+ UserLoggedout: (_, doReturn) => this._handlePushUnSubscription(doReturn)
8453
+ });
8454
+ // automatic effect: update operationName based on subscription
8455
+ effect(() => {
8456
+ const sub = this._usePushNotification.isSubscribed();
8457
+ // اینجا می‌تونی متغیر operationName یا UI رو اتوماتیک آپدیت کنی
8458
+ console.log('Push subscription changed:', sub);
8459
+ });
8460
+ // automatic effect: show toast on errors
8461
+ effect(() => {
8462
+ const err = this._usePushNotification.errorMessage();
8463
+ if (err) {
8464
+ this.toast(err);
8465
+ }
8310
8466
  });
8311
8467
  }
8468
+ // فعال‌سازی push توسط gesture (مثلاً از UI)
8469
+ async subscribePush() {
8470
+ try {
8471
+ const check = await this._pushCheckService.checkPushReady();
8472
+ if (check !== true) {
8473
+ this.toast(check);
8474
+ return;
8475
+ }
8476
+ await this._usePushNotification.subscribe();
8477
+ this.toast('نوتیفیکیشن فعال شد');
8478
+ }
8479
+ catch (err) {
8480
+ console.error(err);
8481
+ this.toast('خطا در فعال‌سازی Push');
8482
+ }
8483
+ }
8312
8484
  _subscribe() {
8313
8485
  this._portalService.userLoggedIn$.pipe().subscribe((isLoggedIn) => this._isLoggedIn(isLoggedIn));
8314
8486
  this._portalService.documentVisibilitychange$
8315
8487
  .pipe()
8316
8488
  .subscribe((visibilitychange) => this._visibilitychange(visibilitychange));
8317
- this._handlePushSubscirption();
8318
8489
  }
8319
8490
  _setDefaultOptions() {
8320
8491
  const token2 = this.token2;
@@ -8326,7 +8497,7 @@ class ServiceWorkerCommuncationService {
8326
8497
  this._postServiceWorker({ event: 'isLoggedInChange', options: { isLoggedIn } });
8327
8498
  if (isLoggedIn) {
8328
8499
  this._setDefaultOptions();
8329
- this._initPushSubscription();
8500
+ this._usePushNotification.initPushBanner();
8330
8501
  }
8331
8502
  }
8332
8503
  _visibilitychange(documentIsHidden) {
@@ -8340,66 +8511,15 @@ class ServiceWorkerCommuncationService {
8340
8511
  }
8341
8512
  this._serviceWorker.postMessage(message);
8342
8513
  }
8343
- _testSend(subscription) {
8344
- setTimeout(() => {
8345
- this._httpClient.post('/api/pushnotification/send', subscription, this.httpOptions).subscribe();
8346
- }, 5000);
8514
+ // لغو push (هر زمان امکان‌پذیر است)
8515
+ _handlePushUnSubscription(doReturn) {
8516
+ this._usePushNotification.unsubscribe().finally(() => doReturn && doReturn());
8347
8517
  }
8348
8518
  toast(msg) {
8349
8519
  if (!this._toastService) {
8350
- console.log(msg);
8351
- return;
8352
- }
8353
- this._toastService?.open(` ${msg} `, { duration: 5000 });
8354
- }
8355
- _initPushSubscription() {
8356
- this._httpClient
8357
- .get('/api/pushnotification/publickey', { responseType: 'text' })
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);
8380
- return throwError(() => err);
8381
- }))
8382
- .subscribe({
8383
- next: () => {
8384
- const msg = 'نوتیفیکیشن فعال شد';
8385
- this.toast(msg);
8386
- }
8387
- });
8388
- }
8389
- _handlePushUnSubscription(doReturn) {
8390
- if (!this._subscription) {
8391
- return doReturn && doReturn();
8520
+ return console.log(msg);
8392
8521
  }
8393
- this._httpClient
8394
- .post('/api/pushnotification/delete', this._subscription, this.httpOptions)
8395
- .pipe(concatMap$1(() => from(this._swPush.unsubscribe())), catchError$1((err) => {
8396
- console.error(err);
8397
- doReturn && doReturn();
8398
- return throwError(() => new Error(err));
8399
- }), finalize$1(() => {
8400
- doReturn && doReturn();
8401
- }))
8402
- .subscribe();
8522
+ this._toastService.open(msg, { duration: 5000 });
8403
8523
  }
8404
8524
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ServiceWorkerCommuncationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8405
8525
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ServiceWorkerCommuncationService }); }
@@ -13093,6 +13213,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
13093
13213
  args: [{ selector: 'bnrc-unlimit-session', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "", styles: [":host{background:#191919 -webkit-linear-gradient(top,#000 0%,#191919 100%) no-repeat;background:#191919 linear-gradient(to bottom,#000,#191919) no-repeat;text-align:center}:host h1,:host h2{font-weight:400}:host h1{margin:0 auto;padding:.15em;font-size:10em;text-shadow:0 2px 2px #000}:host h2{margin-bottom:2em}\n"] }]
13094
13214
  }] });
13095
13215
 
13216
+ class PushBannerComponent {
13217
+ constructor() {
13218
+ this.push = usePushNotification();
13219
+ }
13220
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13221
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: PushBannerComponent, isStandalone: false, selector: "bnrc-push-banner", ngImport: i0, template: `
13222
+ @if(push.bannerVisible()){
13223
+ <div class="push-banner">
13224
+ <div class="text">
13225
+ <b>فعال‌سازی اعلان‌ها</b>
13226
+ <p>برای دریافت پیام‌ها و رویدادهای مهم، اعلان‌ها را فعال کنید.</p>
13227
+ </div>
13228
+ <div class="actions">
13229
+ <button class="btn enable" (click)="push.subscribe()">فعال‌سازی</button>
13230
+ <button class="btn later" (click)="push.hideBanner()">بعداً</button>
13231
+ </div>
13232
+ @if(push.errorMessage()){
13233
+ <p class="error">{{ push.errorMessage() }}</p>
13234
+ }
13235
+ </div>
13236
+ }
13237
+ `, isInline: true, styles: [".push-banner{position:fixed;bottom:0;left:0;right:0;background:#fff;border-radius:12px 12px 0 0;box-shadow:0 -4px 16px #00000026;padding:16px;display:flex;flex-direction:column;gap:8px;z-index:9999}.actions{display:flex;gap:8px}.btn.enable{background:#25d366;color:#fff;border-radius:8px;padding:8px 12px;border:none}.btn.later{background:transparent;color:#666;border:none;padding:8px 12px}.error{color:red;font-size:13px}\n"] }); }
13238
+ }
13239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushBannerComponent, decorators: [{
13240
+ type: Component,
13241
+ args: [{ selector: 'bnrc-push-banner', standalone: false, template: `
13242
+ @if(push.bannerVisible()){
13243
+ <div class="push-banner">
13244
+ <div class="text">
13245
+ <b>فعال‌سازی اعلان‌ها</b>
13246
+ <p>برای دریافت پیام‌ها و رویدادهای مهم، اعلان‌ها را فعال کنید.</p>
13247
+ </div>
13248
+ <div class="actions">
13249
+ <button class="btn enable" (click)="push.subscribe()">فعال‌سازی</button>
13250
+ <button class="btn later" (click)="push.hideBanner()">بعداً</button>
13251
+ </div>
13252
+ @if(push.errorMessage()){
13253
+ <p class="error">{{ push.errorMessage() }}</p>
13254
+ }
13255
+ </div>
13256
+ }
13257
+ `, styles: [".push-banner{position:fixed;bottom:0;left:0;right:0;background:#fff;border-radius:12px 12px 0 0;box-shadow:0 -4px 16px #00000026;padding:16px;display:flex;flex-direction:column;gap:8px;z-index:9999}.actions{display:flex;gap:8px}.btn.enable{background:#25d366;color:#fff;border-radius:8px;padding:8px 12px;border:none}.btn.later{background:transparent;color:#666;border:none;padding:8px 12px}.error{color:red;font-size:13px}\n"] }]
13258
+ }] });
13259
+
13096
13260
  class LoadExternalFilesDirective {
13097
13261
  constructor() {
13098
13262
  this._renderer2 = inject(Renderer2);
@@ -13279,7 +13443,8 @@ class RootPortalComponent extends PageBaseComponent {
13279
13443
  @if(pageData?.UnlimitSession==='True'){
13280
13444
  <bnrc-unlimit-session></bnrc-unlimit-session>
13281
13445
  }
13282
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: UnlimitSessionComponent, selector: "bnrc-unlimit-session" }, { kind: "directive", type: LoadExternalFilesDirective, selector: "[loadExternalFiles]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13446
+ <bnrc-push-banner></bnrc-push-banner>
13447
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: UnlimitSessionComponent, selector: "bnrc-unlimit-session" }, { kind: "component", type: PushBannerComponent, selector: "bnrc-push-banner" }, { kind: "directive", type: LoadExternalFilesDirective, selector: "[loadExternalFiles]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13283
13448
  }
13284
13449
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: RootPortalComponent, decorators: [{
13285
13450
  type: Component,
@@ -13351,6 +13516,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
13351
13516
  @if(pageData?.UnlimitSession==='True'){
13352
13517
  <bnrc-unlimit-session></bnrc-unlimit-session>
13353
13518
  }
13519
+ <bnrc-push-banner></bnrc-push-banner>
13354
13520
  `,
13355
13521
  changeDetection: ChangeDetectionStrategy.OnPush,
13356
13522
  providers: [ContainerService],
@@ -16869,7 +17035,8 @@ const components = [
16869
17035
  FormFieldReportPageComponent,
16870
17036
  ButtonLoadingComponent,
16871
17037
  UnlimitSessionComponent,
16872
- DynamicTileGroupComponent
17038
+ DynamicTileGroupComponent,
17039
+ PushBannerComponent
16873
17040
  ];
16874
17041
  const directives = [
16875
17042
  PlaceHolderDirective,
@@ -17128,7 +17295,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
17128
17295
  FormFieldReportPageComponent,
17129
17296
  ButtonLoadingComponent,
17130
17297
  UnlimitSessionComponent,
17131
- DynamicTileGroupComponent, NumeralPipe,
17298
+ DynamicTileGroupComponent,
17299
+ PushBannerComponent, NumeralPipe,
17132
17300
  CanUploadFilePipe,
17133
17301
  RemoveNewlinePipe,
17134
17302
  ConvertToStylePipe,
@@ -17264,7 +17432,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
17264
17432
  FormFieldReportPageComponent,
17265
17433
  ButtonLoadingComponent,
17266
17434
  UnlimitSessionComponent,
17267
- DynamicTileGroupComponent, NumeralPipe,
17435
+ DynamicTileGroupComponent,
17436
+ PushBannerComponent, NumeralPipe,
17268
17437
  CanUploadFilePipe,
17269
17438
  RemoveNewlinePipe,
17270
17439
  ConvertToStylePipe,
@@ -17402,5 +17571,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
17402
17571
  * Generated bundle index. Do not edit.
17403
17572
  */
17404
17573
 
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 };
17574
+ 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, PushBannerComponent, 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, usePushNotification, validateAllFormFields };
17406
17575
  //# sourceMappingURL=barsa-novin-ray-core.mjs.map