barsa-novin-ray-core 2.3.99 → 2.3.101

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 {
@@ -7835,12 +7836,11 @@ class ServiceWorkerNotificationService {
7835
7836
  this.hasRegistration = false;
7836
7837
  this._swPush = inject(SwPush);
7837
7838
  this._portalService = inject(PortalService);
7838
- this._notificationPermissionAllowed = false;
7839
7839
  this.init();
7840
7840
  }
7841
7841
  // بررسی وضعیت فعلی
7842
7842
  get isEnabled() {
7843
- return this._swPush.isEnabled && this.hasRegistration && this._notificationPermissionAllowed;
7843
+ return this._swPush.isEnabled && this.hasRegistration;
7844
7844
  }
7845
7845
  async closeNotifications(tags) {
7846
7846
  const sw = await this.getSw();
@@ -7896,7 +7896,6 @@ class ServiceWorkerNotificationService {
7896
7896
  }
7897
7897
  async init() {
7898
7898
  console.log(`SwPush enabled: ${this._swPush.isEnabled}`);
7899
- this.handlePermission();
7900
7899
  // مدیریت کلیک روی نوتیفیکیشن‌ها
7901
7900
  this._swPush.notificationClicks.subscribe((e) => {
7902
7901
  if (!e.notification.tag) {
@@ -7911,44 +7910,6 @@ class ServiceWorkerNotificationService {
7911
7910
  // بررسی مجوز و ثبت سرویس‌ورکر
7912
7911
  await this.registerServiceWorker();
7913
7912
  }
7914
- handlePermission() {
7915
- if (!navigator?.permissions?.query) {
7916
- return;
7917
- }
7918
- return navigator.permissions
7919
- .query({ name: 'notifications' })
7920
- .then(this.permissionQuery.bind(this))
7921
- .catch(this.permissionError.bind(this));
7922
- }
7923
- permissionQuery(result) {
7924
- let newPrompt;
7925
- if (result.state === 'granted') {
7926
- console.log('notificaiton granted');
7927
- // notifications allowed, go wild
7928
- }
7929
- else if (result.state === 'prompt') {
7930
- // we can ask the user
7931
- console.log('notificaiton prompt');
7932
- newPrompt = Notification.requestPermission();
7933
- }
7934
- else if (result.state === 'denied') {
7935
- // notifications were disabled
7936
- console.log('notificaiton denied');
7937
- this._notificationPermissionAllowed = false;
7938
- }
7939
- result.onchange = () => console.log({ updatedPermission: result });
7940
- return newPrompt || result;
7941
- }
7942
- permissionError(error) {
7943
- this._notificationPermissionAllowed = false;
7944
- console.error(error);
7945
- }
7946
- async requestPermission() {
7947
- if (Notification.permission === 'default') {
7948
- await Notification.requestPermission();
7949
- }
7950
- this._notificationPermissionAllowed = Notification.permission === 'granted';
7951
- }
7952
7913
  async registerServiceWorker() {
7953
7914
  if (!('serviceWorker' in navigator)) {
7954
7915
  return;
@@ -8267,46 +8228,254 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
8267
8228
  args: [{ providedIn: 'root' }]
8268
8229
  }] });
8269
8230
 
8231
+ // src/app/services/idb.service.ts
8232
+ class IdbService {
8233
+ constructor() {
8234
+ this.dbPromise = openDB('my-app-db', 1, {
8235
+ upgrade(db) {
8236
+ if (!db.objectStoreNames.contains('subscription')) {
8237
+ db.createObjectStore('subscription');
8238
+ }
8239
+ if (!db.objectStoreNames.contains('settings')) {
8240
+ db.createObjectStore('settings');
8241
+ }
8242
+ }
8243
+ });
8244
+ }
8245
+ async get(store, key) {
8246
+ const db = await this.dbPromise;
8247
+ const v = await db.get(store, key);
8248
+ return (v === undefined ? null : v);
8249
+ }
8250
+ async set(store, key, value) {
8251
+ const db = await this.dbPromise;
8252
+ await db.put(store, value, key);
8253
+ }
8254
+ async delete(store, key) {
8255
+ const db = await this.dbPromise;
8256
+ await db.delete(store, key);
8257
+ }
8258
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: IdbService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8259
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: IdbService, providedIn: 'root' }); }
8260
+ }
8261
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: IdbService, decorators: [{
8262
+ type: Injectable,
8263
+ args: [{ providedIn: 'root' }]
8264
+ }], ctorParameters: () => [] });
8265
+
8266
+ class PushNotificationService {
8267
+ constructor() {
8268
+ this.swPush = inject(SwPush);
8269
+ this.http = inject(HttpClient);
8270
+ this.idb = inject(IdbService);
8271
+ this.local = inject(LocalStorageService);
8272
+ // یک سیگنال واحد
8273
+ this._push = signal({
8274
+ bannerVisible: false,
8275
+ isSubscribed: false,
8276
+ permission: Notification.permission,
8277
+ errorMessage: null
8278
+ });
8279
+ this.registerServiceWorkerMessageListener = () => {
8280
+ // avoid adding multiple listeners (idempotent)
8281
+ const onMessage = (event) => {
8282
+ const data = event.data;
8283
+ if (!data) {
8284
+ return;
8285
+ }
8286
+ if (data.event === 'subscriptionChanged' && data.subscription) {
8287
+ // run async handler but don't await here
8288
+ (async () => {
8289
+ await this.handleNewSubscription(data.subscription);
8290
+ })().catch(console.error);
8291
+ }
8292
+ };
8293
+ // addEventListener is idempotent-ish but let's guard by setting property
8294
+ // we attach once on navigator.serviceWorker (not to window)
8295
+ navigator.serviceWorker?.addEventListener('message', onMessage);
8296
+ };
8297
+ }
8298
+ get push() {
8299
+ return this._push.asReadonly();
8300
+ }
8301
+ hideBanner() {
8302
+ this.update({ bannerVisible: false });
8303
+ }
8304
+ async setup() {
8305
+ // Load subscription status
8306
+ await this.initPushBanner();
8307
+ // Listen for subscription updates
8308
+ this.swPush.subscription.subscribe((sub) => {
8309
+ this.update({
8310
+ isSubscribed: !!sub,
8311
+ permission: Notification.permission
8312
+ });
8313
+ if (sub) {
8314
+ const json = sub.toJSON?.() ?? sub;
8315
+ this.handleNewSubscription(json);
8316
+ }
8317
+ });
8318
+ // Listen for SW messages
8319
+ navigator.serviceWorker.addEventListener('message', (event) => {
8320
+ if (event.data?.event === 'subscriptionChanged') {
8321
+ this.handleNewSubscription(event.data.subscription);
8322
+ }
8323
+ });
8324
+ }
8325
+ async subscribe() {
8326
+ this.update({
8327
+ bannerVisible: false
8328
+ });
8329
+ try {
8330
+ const publicKey = await lastValueFrom(this.http.get('/api/pushnotification/publickey', { responseType: 'text' }));
8331
+ await this.idb.set('settings', 'vapid-public-key', publicKey);
8332
+ const sub = await this.swPush.requestSubscription({ serverPublicKey: publicKey });
8333
+ await lastValueFrom(this.http.post('/api/pushnotification/add', sub, this.httpOptions()));
8334
+ await this.idb.set('subscription', 'push-subscription', sub.toJSON());
8335
+ this.update({
8336
+ isSubscribed: true,
8337
+ permission: Notification.permission,
8338
+ bannerVisible: false,
8339
+ errorMessage: null
8340
+ });
8341
+ return sub;
8342
+ }
8343
+ catch (err) {
8344
+ this.update({ errorMessage: err.message ?? 'خطا در فعال‌سازی اعلان', bannerVisible: true });
8345
+ throw err;
8346
+ }
8347
+ }
8348
+ async unsubscribe() {
8349
+ try {
8350
+ const sub = await lastValueFrom(this.swPush.subscription);
8351
+ if (!sub) {
8352
+ return;
8353
+ }
8354
+ const json = sub.toJSON();
8355
+ await lastValueFrom(this.http.post('/api/pushnotification/delete', json, this.httpOptions()));
8356
+ await sub.unsubscribe();
8357
+ await this.deleteSubscription();
8358
+ this.update({ isSubscribed: false, errorMessage: null });
8359
+ }
8360
+ catch (err) {
8361
+ this.update({ errorMessage: err.message ?? 'خطا در لغو اشتراک' });
8362
+ }
8363
+ }
8364
+ async handleNewSubscription(subData) {
8365
+ const saved = await this.idb.get('subscription', 'push-subscription');
8366
+ if (!saved || saved.endpoint !== subData.endpoint) {
8367
+ if (saved) {
8368
+ await lastValueFrom(this.http.post('/api/pushnotification/delete', saved, this.httpOptions()));
8369
+ }
8370
+ await lastValueFrom(this.http.post('/api/pushnotification/add', subData, this.httpOptions()));
8371
+ await this.idb.set('subscription', 'push-subscription', subData);
8372
+ }
8373
+ this.update({
8374
+ isSubscribed: true,
8375
+ permission: Notification.permission,
8376
+ errorMessage: null
8377
+ });
8378
+ }
8379
+ update(values) {
8380
+ this._push.update((prev) => ({ ...prev, ...values }));
8381
+ }
8382
+ async loadSubscription() {
8383
+ return await this.idb.get('subscription', 'push-subscription');
8384
+ }
8385
+ async loadPublicKey() {
8386
+ return await this.idb.get('settings', 'vapid-public-key');
8387
+ }
8388
+ async initPushBanner() {
8389
+ let saved = await this.loadSubscription();
8390
+ const perm = Notification.permission;
8391
+ this.update({
8392
+ permission: perm
8393
+ });
8394
+ if (saved) {
8395
+ // اگر پرمیشن اکنون revoked یا default شد، subscription قبلی را حذف کن
8396
+ if (perm === 'default' || perm === 'denied') {
8397
+ console.log('Permission reset detected, removing old subscription');
8398
+ await this.deleteSubscription();
8399
+ saved = null;
8400
+ }
8401
+ }
8402
+ if (saved) {
8403
+ this.update({
8404
+ isSubscribed: true,
8405
+ bannerVisible: false
8406
+ });
8407
+ }
8408
+ else {
8409
+ this.update({
8410
+ isSubscribed: false,
8411
+ bannerVisible: perm !== 'denied' && 'PushManager' in window
8412
+ });
8413
+ }
8414
+ this.registerServiceWorkerMessageListener();
8415
+ const publicKey = await this.loadPublicKey();
8416
+ if (publicKey) {
8417
+ const reg = await navigator.serviceWorker.ready;
8418
+ reg.active?.postMessage({ event: 'setVapidKey', publicKey });
8419
+ }
8420
+ }
8421
+ async deleteSubscription() {
8422
+ await this.idb.delete('subscription', 'push-subscription');
8423
+ }
8424
+ httpOptions() {
8425
+ const token2 = this.local.getItem(BarsaApi.LoginAction.token2StorageKey) ?? '';
8426
+ return { headers: new HttpHeaders({ 'Content-Type': 'application/json', sth: token2 }) };
8427
+ }
8428
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushNotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8429
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushNotificationService, providedIn: 'root' }); }
8430
+ }
8431
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushNotificationService, decorators: [{
8432
+ type: Injectable,
8433
+ args: [{ providedIn: 'root' }]
8434
+ }] });
8435
+
8270
8436
  class ServiceWorkerCommuncationService {
8271
8437
  constructor() {
8272
8438
  this._toastService = inject(TOAST_SERVICE, { optional: true });
8273
8439
  this._localStorage = inject(LocalStorageService);
8274
8440
  this._portalService = inject(PortalService);
8275
- this._swPush = inject(SwPush);
8276
- this._httpClient = inject(HttpClient);
8277
8441
  this._pushCheckService = inject(PushCheckService);
8442
+ this._pushNotificatioService = inject(PushNotificationService);
8278
8443
  }
8279
8444
  get token2() {
8280
8445
  return this._localStorage.getItem(BarsaApi.LoginAction.token2StorageKey) ?? '';
8281
8446
  }
8282
- get httpOptions() {
8283
- return {
8284
- headers: new HttpHeaders({
8285
- 'Content-Type': 'application/json',
8286
- sth: this.token2
8287
- })
8288
- };
8289
- }
8290
8447
  init() {
8291
- BarsaApi.Ul.ApplicationCtrlr.on({
8292
- UserLoggedout: (_, doReturn) => {
8293
- this._handlePushUnSubscription(doReturn);
8294
- }
8295
- });
8448
+ this._subscribe();
8449
+ // register SW
8296
8450
  if (!navigator.serviceWorker) {
8297
8451
  return;
8298
8452
  }
8299
- navigator.serviceWorker.ready.then((registration) => {
8300
- if (registration.active) {
8301
- this._serviceWorker = registration.active;
8302
- this._subscribe();
8453
+ navigator.serviceWorker.ready.then((reg) => {
8454
+ if (reg.active) {
8455
+ this._serviceWorker = reg.active;
8456
+ navigator.serviceWorker.addEventListener('message', (event) => {
8457
+ if (event.data?.event === 'subscriptionChanged') {
8458
+ this._pushNotificatioService.handleNewSubscription(event.data.subscription);
8459
+ }
8460
+ });
8303
8461
  }
8304
8462
  });
8305
- }
8306
- _handlePushSubscirption() {
8307
- this._swPush.subscription.subscribe((subscription) => {
8308
- this._subscription = subscription;
8309
- this.operationName = this._subscription === null ? 'Subscribe' : 'Unsubscribe';
8463
+ // user logout
8464
+ BarsaApi.Ul.ApplicationCtrlr.on({
8465
+ UserLoggedout: (_, doReturn) => this._handlePushUnSubscription(doReturn)
8466
+ });
8467
+ // automatic effect: update operationName based on subscription
8468
+ effect(() => {
8469
+ const sub = this._pushNotificatioService.push().isSubscribed;
8470
+ // اینجا می‌تونی متغیر operationName یا UI رو اتوماتیک آپدیت کنی
8471
+ console.log('Push subscription changed:', sub);
8472
+ });
8473
+ // automatic effect: show toast on errors
8474
+ effect(() => {
8475
+ const err = this._pushNotificatioService.push().errorMessage;
8476
+ if (err) {
8477
+ this.toast(err);
8478
+ }
8310
8479
  });
8311
8480
  }
8312
8481
  _subscribe() {
@@ -8314,7 +8483,6 @@ class ServiceWorkerCommuncationService {
8314
8483
  this._portalService.documentVisibilitychange$
8315
8484
  .pipe()
8316
8485
  .subscribe((visibilitychange) => this._visibilitychange(visibilitychange));
8317
- this._handlePushSubscirption();
8318
8486
  }
8319
8487
  _setDefaultOptions() {
8320
8488
  const token2 = this.token2;
@@ -8326,7 +8494,7 @@ class ServiceWorkerCommuncationService {
8326
8494
  this._postServiceWorker({ event: 'isLoggedInChange', options: { isLoggedIn } });
8327
8495
  if (isLoggedIn) {
8328
8496
  this._setDefaultOptions();
8329
- this._initPushSubscription();
8497
+ this._pushNotificatioService.setup();
8330
8498
  }
8331
8499
  }
8332
8500
  _visibilitychange(documentIsHidden) {
@@ -8340,66 +8508,15 @@ class ServiceWorkerCommuncationService {
8340
8508
  }
8341
8509
  this._serviceWorker.postMessage(message);
8342
8510
  }
8343
- _testSend(subscription) {
8344
- setTimeout(() => {
8345
- this._httpClient.post('/api/pushnotification/send', subscription, this.httpOptions).subscribe();
8346
- }, 5000);
8511
+ // لغو push (هر زمان امکان‌پذیر است)
8512
+ _handlePushUnSubscription(doReturn) {
8513
+ this._pushNotificatioService.unsubscribe().finally(() => doReturn && doReturn());
8347
8514
  }
8348
8515
  toast(msg) {
8349
8516
  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();
8517
+ return console.log(msg);
8392
8518
  }
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();
8519
+ this._toastService.open(msg, { duration: 5000 });
8403
8520
  }
8404
8521
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ServiceWorkerCommuncationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8405
8522
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ServiceWorkerCommuncationService }); }
@@ -13093,6 +13210,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
13093
13210
  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
13211
  }] });
13095
13212
 
13213
+ class PushBannerComponent extends BaseComponent {
13214
+ constructor() {
13215
+ super();
13216
+ this._pushService = inject(PushNotificationService);
13217
+ this.push = this._pushService.push;
13218
+ }
13219
+ get bannerPositionClass() {
13220
+ const userAgent = navigator.userAgent;
13221
+ const isMobile = /Android|iPhone|iPad|iPod/i.test(userAgent);
13222
+ if (!isMobile) {
13223
+ // دسکتاپ: بالا، راست/چپ
13224
+ return 'position-desktop';
13225
+ }
13226
+ const isAndroid = /Android/i.test(userAgent);
13227
+ const isIOS = /iPhone|iPad|iPod/i.test(userAgent);
13228
+ if (isAndroid) {
13229
+ // موبایل اندروید: بالا
13230
+ return 'position-android-top';
13231
+ }
13232
+ if (isIOS) {
13233
+ // موبایل iOS: پایین (برای جلوگیری از تداخل با نوار آدرس Safari/Chrome)
13234
+ return 'position-ios-bottom';
13235
+ }
13236
+ // پیش‌فرض برای هر موبایل دیگر
13237
+ return 'position-ios-bottom';
13238
+ }
13239
+ onHideBanner() {
13240
+ this._pushService.hideBanner();
13241
+ }
13242
+ onEnable() {
13243
+ this._pushService.subscribe();
13244
+ }
13245
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13246
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: PushBannerComponent, isStandalone: false, selector: "bnrc-push-banner", usesInheritance: true, ngImport: i0, template: `
13247
+ @if(push().bannerVisible){
13248
+ <div class="push-banner" [ngClass]="bannerPositionClass">
13249
+ <div class="text">
13250
+ <b>فعال‌سازی اعلان‌ها</b>
13251
+ <p>برای دریافت پیام‌ها و رویدادهای مهم، اعلان‌ها را فعال کنید.</p>
13252
+ </div>
13253
+ <div class="actions">
13254
+ <button class="btn enable" (click)="onEnable()">فعال‌سازی</button>
13255
+ <button class="btn later" (click)="onHideBanner()">بعداً</button>
13256
+ </div>
13257
+ @if(push().errorMessage){
13258
+ <p class="error">{{ push().errorMessage }}</p>
13259
+ }
13260
+ </div>
13261
+ }
13262
+ `, isInline: true, styles: [".push-banner{position:fixed;left:0;right:0;font-family:var(--sapFontFamily);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}.position-ios-bottom{bottom:0;top:auto;border-radius:12px 12px 0 0}.position-android-top{top:0;bottom:auto;border-radius:0 0 12px 12px}.position-desktop{inset:20px 20px auto auto;width:320px;max-width:90%;border-radius:8px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13263
+ }
13264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PushBannerComponent, decorators: [{
13265
+ type: Component,
13266
+ args: [{ selector: 'bnrc-push-banner', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: `
13267
+ @if(push().bannerVisible){
13268
+ <div class="push-banner" [ngClass]="bannerPositionClass">
13269
+ <div class="text">
13270
+ <b>فعال‌سازی اعلان‌ها</b>
13271
+ <p>برای دریافت پیام‌ها و رویدادهای مهم، اعلان‌ها را فعال کنید.</p>
13272
+ </div>
13273
+ <div class="actions">
13274
+ <button class="btn enable" (click)="onEnable()">فعال‌سازی</button>
13275
+ <button class="btn later" (click)="onHideBanner()">بعداً</button>
13276
+ </div>
13277
+ @if(push().errorMessage){
13278
+ <p class="error">{{ push().errorMessage }}</p>
13279
+ }
13280
+ </div>
13281
+ }
13282
+ `, styles: [".push-banner{position:fixed;left:0;right:0;font-family:var(--sapFontFamily);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}.position-ios-bottom{bottom:0;top:auto;border-radius:12px 12px 0 0}.position-android-top{top:0;bottom:auto;border-radius:0 0 12px 12px}.position-desktop{inset:20px 20px auto auto;width:320px;max-width:90%;border-radius:8px}\n"] }]
13283
+ }], ctorParameters: () => [] });
13284
+
13096
13285
  class LoadExternalFilesDirective {
13097
13286
  constructor() {
13098
13287
  this._renderer2 = inject(Renderer2);
@@ -13279,7 +13468,8 @@ class RootPortalComponent extends PageBaseComponent {
13279
13468
  @if(pageData?.UnlimitSession==='True'){
13280
13469
  <bnrc-unlimit-session></bnrc-unlimit-session>
13281
13470
  }
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 }); }
13471
+ <bnrc-push-banner></bnrc-push-banner>
13472
+ `, 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
13473
  }
13284
13474
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: RootPortalComponent, decorators: [{
13285
13475
  type: Component,
@@ -13351,6 +13541,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
13351
13541
  @if(pageData?.UnlimitSession==='True'){
13352
13542
  <bnrc-unlimit-session></bnrc-unlimit-session>
13353
13543
  }
13544
+ <bnrc-push-banner></bnrc-push-banner>
13354
13545
  `,
13355
13546
  changeDetection: ChangeDetectionStrategy.OnPush,
13356
13547
  providers: [ContainerService],
@@ -16869,7 +17060,8 @@ const components = [
16869
17060
  FormFieldReportPageComponent,
16870
17061
  ButtonLoadingComponent,
16871
17062
  UnlimitSessionComponent,
16872
- DynamicTileGroupComponent
17063
+ DynamicTileGroupComponent,
17064
+ PushBannerComponent
16873
17065
  ];
16874
17066
  const directives = [
16875
17067
  PlaceHolderDirective,
@@ -16951,7 +17143,8 @@ const services = [
16951
17143
  BbbTranslatePipe,
16952
17144
  BarsaStorageService,
16953
17145
  ServiceWorkerCommuncationService,
16954
- ApplicationCtrlrService
17146
+ ApplicationCtrlrService,
17147
+ PushNotificationService
16955
17148
  ];
16956
17149
  const pipes = [
16957
17150
  NumeralPipe,
@@ -17128,7 +17321,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
17128
17321
  FormFieldReportPageComponent,
17129
17322
  ButtonLoadingComponent,
17130
17323
  UnlimitSessionComponent,
17131
- DynamicTileGroupComponent, NumeralPipe,
17324
+ DynamicTileGroupComponent,
17325
+ PushBannerComponent, NumeralPipe,
17132
17326
  CanUploadFilePipe,
17133
17327
  RemoveNewlinePipe,
17134
17328
  ConvertToStylePipe,
@@ -17264,7 +17458,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
17264
17458
  FormFieldReportPageComponent,
17265
17459
  ButtonLoadingComponent,
17266
17460
  UnlimitSessionComponent,
17267
- DynamicTileGroupComponent, NumeralPipe,
17461
+ DynamicTileGroupComponent,
17462
+ PushBannerComponent, NumeralPipe,
17268
17463
  CanUploadFilePipe,
17269
17464
  RemoveNewlinePipe,
17270
17465
  ConvertToStylePipe,
@@ -17402,5 +17597,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
17402
17597
  * Generated bundle index. Do not edit.
17403
17598
  */
17404
17599
 
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 };
17600
+ 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, IdbService, 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, PushNotificationService, 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 };
17406
17601
  //# sourceMappingURL=barsa-novin-ray-core.mjs.map