barsa-novin-ray-core 2.3.104 → 2.3.108

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,10 +1,10 @@
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, signal, ViewContainerRef, EventEmitter, ChangeDetectorRef, Renderer2, HostBinding, Output, HostListener, 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, throwError, merge, interval, filter as filter$1, lastValueFrom, timeout, catchError as catchError$1, takeUntil as takeUntil$1, take, debounceTime as debounceTime$1, skip, Observable, tap as tap$1, timer, mergeWith, Subscription } from 'rxjs';
3
+ import { Subject, from, BehaviorSubject, of, exhaustMap, map as map$1, combineLatest, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, switchMap, forkJoin, shareReplay, withLatestFrom as withLatestFrom$1, tap as tap$1, fromEvent, throwError, merge, interval, filter as filter$1, lastValueFrom, timeout, catchError as catchError$1, takeUntil as takeUntil$1, take, skip, Observable, timer, mergeWith, Subscription } from 'rxjs';
4
4
  import * as i1 from '@angular/router';
5
5
  import { Router, NavigationEnd, ActivatedRoute, RouterEvent, NavigationStart, RouterModule, RouteReuseStrategy } from '@angular/router';
6
6
  import { DomSanitizer, Title } from '@angular/platform-browser';
7
- import { filter, startWith, map, tap, takeUntil, withLatestFrom, delay, debounceTime, distinctUntilChanged, exhaustMap as exhaustMap$1, concatMap, finalize, publishReplay, refCount, shareReplay, switchMap, catchError, merge as merge$1, pluck, mergeWith as mergeWith$1 } from 'rxjs/operators';
7
+ import { filter, startWith, map, tap, takeUntil, withLatestFrom, delay, debounceTime, distinctUntilChanged, exhaustMap as exhaustMap$1, concatMap, finalize, publishReplay, refCount, shareReplay as shareReplay$1, switchMap as switchMap$1, catchError, merge as merge$1, pluck, mergeWith as mergeWith$1 } from 'rxjs/operators';
8
8
  import moment from 'moment';
9
9
  import moment$1 from 'moment-hijri';
10
10
  import 'moment/locale/ar';
@@ -1660,6 +1660,55 @@ function enumValueToStringSize(value, defaultValue) {
1660
1660
  return defaultValue;
1661
1661
  }
1662
1662
  }
1663
+ function isVersionBiggerThan(inputVersion) {
1664
+ const result = compareVersions(inputVersion, BarsaApi.LoginFormData.Version);
1665
+ if (result > 0) {
1666
+ return true;
1667
+ }
1668
+ else {
1669
+ return false;
1670
+ }
1671
+ }
1672
+ function compareVersions(v1, v2) {
1673
+ // ۱. تابع کمکی برای تبدیل رشته به عدد نهایی بر اساس فرمول شما
1674
+ const getVersionScore = (v) => {
1675
+ const parts = v
1676
+ .split('.')
1677
+ .filter((x) => x !== '')
1678
+ .map(Number);
1679
+ const major = (parts[0] || 0) * 1000; // بخش اول * 1000
1680
+ const minor = (parts[1] || 0) * 100; // بخش دوم * 100
1681
+ // بخش‌های باقی‌مانده (بخش سوم به بعد) با هم جمع می‌شوند
1682
+ const remaining = parts.slice(2).reduce((sum, current) => sum + current, 0);
1683
+ return major + minor + remaining;
1684
+ };
1685
+ // ۲. محاسبه امتیاز برای هر دو نسخه
1686
+ const score1 = getVersionScore(v1);
1687
+ const score2 = getVersionScore(v2);
1688
+ // ۳. مقایسه اعداد نهایی
1689
+ if (score1 > score2)
1690
+ return 1;
1691
+ if (score1 < score2)
1692
+ return -1;
1693
+ return 0;
1694
+ }
1695
+ function scrollToElement(target) {
1696
+ if (!target)
1697
+ return;
1698
+ const rect = target.getBoundingClientRect();
1699
+ // بررسی اینکه آیا المنت در محدوده پنجره مرورگر قرار دارد
1700
+ const isVisible = rect.top >= 0 &&
1701
+ rect.left >= 0 &&
1702
+ rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
1703
+ rect.right <= (window.innerWidth || document.documentElement.clientWidth);
1704
+ if (!isVisible) {
1705
+ // اگر قابل مشاهده نبود، به سمت آن اسکرول کن
1706
+ target.scrollIntoView({ behavior: 'smooth', block: 'center' });
1707
+ }
1708
+ else {
1709
+ console.log('المنت همین الان هم قابل مشاهده است.');
1710
+ }
1711
+ }
1663
1712
  function executeUlvCommandHandler(button, options) {
1664
1713
  if (button.Command && button.Command.Handler) {
1665
1714
  button.Command.Handler(button, options);
@@ -1728,6 +1777,24 @@ function getImagePath(type, moId, fileId, fieldDefId, size, sizeH) {
1728
1777
  const url = `/IH.ashx?ty=${type}&moId=${moId}&id=${fileId}&fdId=${fieldDefId}&si=${size}&siH=${sizeH}`;
1729
1778
  return url;
1730
1779
  }
1780
+ function checkPermission() {
1781
+ const windowRef = window;
1782
+ // ابتدا چک می‌کنیم که آیا کلاً این قابلیت در این مرورگر وجود دارد یا خیر
1783
+ if ('Notification' in windowRef) {
1784
+ return windowRef.Notification.permission;
1785
+ }
1786
+ // اگر نبود (مثل سفاری موبایل)، مقدار default یا denied برمی‌گردانیم
1787
+ return 'denied';
1788
+ }
1789
+ function fixUnclosedParentheses(url) {
1790
+ const openCount = (url.match(/\(/g) || []).length;
1791
+ const closeCount = (url.match(/\)/g) || []).length;
1792
+ if (openCount > closeCount) {
1793
+ // به تعداد اختلاف، پرانتز بسته اضافه می‌کند
1794
+ return url + ')'.repeat(openCount - closeCount);
1795
+ }
1796
+ return url;
1797
+ }
1731
1798
  function isFunction(functionToCheck) {
1732
1799
  return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
1733
1800
  }
@@ -4222,39 +4289,60 @@ class BreadcrumbService {
4222
4289
  .subscribe((root) => {
4223
4290
  // Construct the breadcrumb hierarchy
4224
4291
  // const root = this.router.routerState.snapshot.root;
4225
- const breadcrumbs = [];
4226
- this.addBreadcrumb(root, breadcrumbs);
4292
+ this.ReBuild(root);
4227
4293
  // Emit the new hierarchy
4228
- this._breadcrumbs$.next(breadcrumbs);
4229
4294
  });
4230
4295
  }
4231
- addBreadcrumb(route, breadcrumbs) {
4296
+ ReBuild(route) {
4297
+ const breadcrumbs = [];
4298
+ this.addBreadcrumb('', route, breadcrumbs);
4299
+ this._breadcrumbs$.next(breadcrumbs);
4300
+ }
4301
+ addBreadcrumb(lastPathWidthoutUrl, route, breadcrumbs) {
4232
4302
  if (route) {
4233
4303
  // Add an element for the current route part
4234
- if (route.snapshot.data?.breadcrumb || route.snapshot.data?.pageData?.BreadCrumb) {
4304
+ if (route.snapshot.data?.hideBreadCrumb !== true &&
4305
+ (route.snapshot.data?.breadcrumb ||
4306
+ (typeof route.snapshot.data?.pageData?.BreadCrumb !== 'undefined' && route.snapshot.url.length))) {
4235
4307
  let url = '';
4236
- const routeURL = route.snapshot.url
4237
- .map((segment) => `${segment.path}${segment.parameters
4238
- ? `;${Object.keys(segment.parameters).map((c) => `${c}=${segment.parameters[c]}`)}`
4308
+ let routeURL = route.snapshot.url
4309
+ .map((segment) => `${segment.path}${Object.keys(segment.parameters).length
4310
+ ? ';' +
4311
+ Object.keys(segment.parameters)
4312
+ .map((c) => `${c}=${segment.parameters[c]}`)
4313
+ .join(';')
4239
4314
  : ''}`)
4240
4315
  .join('/');
4316
+ if (route.snapshot.routeConfig?.outlet) {
4317
+ routeURL = `${lastPathWidthoutUrl}(${route.snapshot.routeConfig?.outlet}:${routeURL} ${!route.firstChild ? ')' : ''}`;
4318
+ }
4241
4319
  if (routeURL !== '') {
4242
4320
  url += `/${routeURL}`;
4243
4321
  }
4322
+ const params2 = routeURL !== ''
4323
+ ? ''
4324
+ : Object.keys(route.snapshot.params).map((c) => '/' + route.snapshot.params[c]);
4325
+ const label = this.getLabel(route.snapshot.data);
4244
4326
  const breadcrumb = {
4245
- label: this.getLabel(route.snapshot.data),
4246
- url,
4327
+ label,
4328
+ url: url + params2,
4247
4329
  route
4248
4330
  };
4249
4331
  breadcrumbs.push(breadcrumb);
4332
+ lastPathWidthoutUrl = '';
4333
+ }
4334
+ else if (route.snapshot.url.length && route.snapshot.routeConfig?.path) {
4335
+ lastPathWidthoutUrl = !lastPathWidthoutUrl
4336
+ ? `${route.snapshot.routeConfig?.path}/`
4337
+ : `${lastPathWidthoutUrl}${route.snapshot.routeConfig?.path}/`;
4250
4338
  }
4251
4339
  // Add another element for the next route part
4252
- this.addBreadcrumb(route.firstChild, breadcrumbs);
4340
+ this.addBreadcrumb(lastPathWidthoutUrl, route.firstChild, breadcrumbs);
4253
4341
  }
4254
4342
  }
4255
4343
  getLabel(data) {
4256
4344
  // The breadcrumb can be defined as a static string or as a function to construct the breadcrumb element out of the route data
4257
- const breadcrumb = data.breadcrumb || data.pageData.BreadCrumb;
4345
+ const breadcrumb = data.breadcrumb || BarsaApi.Common.Util.TryGetValue(data, 'pageData.BreadCrumb', '');
4258
4346
  return typeof breadcrumb === 'function' ? data.breadcrumb(data) : breadcrumb;
4259
4347
  }
4260
4348
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BreadcrumbService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -4854,6 +4942,9 @@ class FormPanelService extends BaseComponent {
4854
4942
  }
4855
4943
  _refresh() {
4856
4944
  this._initialize(this._context);
4945
+ if (this._context?.IsSubForm) {
4946
+ return;
4947
+ }
4857
4948
  const mo = this._moSource.getValue();
4858
4949
  if (!mo) {
4859
4950
  return;
@@ -5165,10 +5256,137 @@ function formRoutes(authGuard = false) {
5165
5256
  };
5166
5257
  }
5167
5258
 
5259
+ class MultiAppCommandSearchProvider {
5260
+ constructor(apps) {
5261
+ this.apps = apps;
5262
+ this.key = 'command';
5263
+ this.priority = 5;
5264
+ }
5265
+ search(term) {
5266
+ return of(!this.apps ? [] : Object.values(this.apps).flatMap((app) => searchCommandsInApp(app, term)));
5267
+ }
5268
+ }
5269
+ function searchCommandsInApp(app, keyword) {
5270
+ const results = [];
5271
+ const term = keyword.toLowerCase();
5272
+ const groups = app?.ExtraData?.CommandGroups || [];
5273
+ const appTitle = app.ExtraData?.Navigator?.Root?.Caption;
5274
+ for (const group of groups) {
5275
+ for (const command of group.Commands || []) {
5276
+ if (command.Caption && command.Caption.toLowerCase().includes(term)) {
5277
+ results.push({
5278
+ appId: app.Id,
5279
+ appTitle,
5280
+ source: 'Command',
5281
+ id: command.Name || command.Key,
5282
+ caption: command.Caption,
5283
+ path: `${group.Caption || group.Name}`,
5284
+ original: command,
5285
+ hidden: false,
5286
+ depth: 0
5287
+ });
5288
+ }
5289
+ for (const menu of command.Menu || []) {
5290
+ if (menu.Caption && menu.Caption.toLowerCase().includes(term)) {
5291
+ results.push({
5292
+ appId: app.Id,
5293
+ appTitle,
5294
+ source: 'Command',
5295
+ id: menu.CommandId,
5296
+ caption: menu.Caption,
5297
+ path: `${group.Caption || group.Name} > ${command.Caption}`,
5298
+ original: menu,
5299
+ hidden: false,
5300
+ depth: 0
5301
+ });
5302
+ }
5303
+ }
5304
+ }
5305
+ }
5306
+ return results;
5307
+ }
5308
+
5309
+ class MultiAppNavigatorSearchProvider {
5310
+ constructor(apps) {
5311
+ this.apps = apps;
5312
+ this.key = 'navigator';
5313
+ this.priority = 10;
5314
+ }
5315
+ search(term) {
5316
+ return of(!this.apps ? [] : Object.values(this.apps).flatMap((app) => searchNavigatorInApp(app, term)));
5317
+ }
5318
+ }
5319
+ function searchNavigatorInApp(app, keyword) {
5320
+ const results = [];
5321
+ const root = app?.ExtraData?.Navigator?.Root;
5322
+ if (!root) {
5323
+ return results;
5324
+ }
5325
+ function walk(node, path, depth = 0) {
5326
+ const currentPath = path ? `${path} > ${node.Caption || node.Name}` : node.Caption || node.Name || '';
5327
+ if (node.Caption && node.Caption.toLowerCase().includes(keyword.toLowerCase())) {
5328
+ let url = '';
5329
+ if (!node.IsRoot && node.ReportId && node.ReportId !== '0') {
5330
+ url = `#/application/${app.Id}/report/${node.FolderId}__${node.Caption}__${node.ReportId}`;
5331
+ }
5332
+ else if (node.IsRoot) {
5333
+ url = `#/application/${app.Id}`;
5334
+ }
5335
+ results.push({
5336
+ appId: app.Id,
5337
+ appTitle: root.Caption,
5338
+ source: 'Navigator',
5339
+ id: node.Id,
5340
+ url,
5341
+ caption: node.Caption,
5342
+ path: currentPath,
5343
+ original: node,
5344
+ hidden: depth === 1,
5345
+ depth
5346
+ });
5347
+ }
5348
+ node.Items?.forEach((child) => walk(child, currentPath, depth + 1));
5349
+ }
5350
+ walk(root, '');
5351
+ return results;
5352
+ }
5353
+
5354
+ class SearchService {
5355
+ /**
5356
+ *
5357
+ */
5358
+ constructor() {
5359
+ this.providers = [];
5360
+ this.search$ = new Subject();
5361
+ this.results$ = this.search$.pipe(debounceTime$1(250), distinctUntilChanged$1(), switchMap((term) => {
5362
+ if (!term || term.length < 2) {
5363
+ return of([]);
5364
+ }
5365
+ return forkJoin(this.providers.map((p) => p.search(term))).pipe(map$1((groups) => groups.flat()));
5366
+ }), shareReplay(1));
5367
+ }
5368
+ register(provider) {
5369
+ this.providers.push(provider);
5370
+ this.providers.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
5371
+ }
5372
+ search(term) {
5373
+ this.search$.next(term);
5374
+ }
5375
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5376
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SearchService, providedIn: 'root' }); }
5377
+ }
5378
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SearchService, decorators: [{
5379
+ type: Injectable,
5380
+ args: [{
5381
+ providedIn: 'root'
5382
+ }]
5383
+ }], ctorParameters: () => [] });
5384
+
5168
5385
  class ApplicationCtrlrService {
5169
5386
  constructor() {
5170
5387
  this._selectedNavGroupItemId$ = new BehaviorSubject({});
5171
5388
  this._selectedReportId$ = new BehaviorSubject({});
5389
+ this._selectedReportCaption$ = new BehaviorSubject({});
5172
5390
  this._selectedNavGroupId$ = new BehaviorSubject({});
5173
5391
  this._sidebarToggle$ = new BehaviorSubject(false);
5174
5392
  this._selectedAppTileGroup$ = new BehaviorSubject('');
@@ -5178,9 +5396,13 @@ class ApplicationCtrlrService {
5178
5396
  this._selectedSystemNavUi$ = new BehaviorSubject(null);
5179
5397
  this._selectedCommandId$ = new BehaviorSubject({});
5180
5398
  this._isCommandGroupsSelected$ = new BehaviorSubject({});
5399
+ this._searchNavigators$ = new BehaviorSubject({});
5400
+ this._selectedSystemTitle$ = new Subject();
5181
5401
  this._isMobile = getDeviceIsMobile();
5182
5402
  this._document = inject(DOCUMENT);
5183
5403
  this._router = inject(Router);
5404
+ this._searchService = inject(SearchService);
5405
+ this._titleService = inject(Title);
5184
5406
  }
5185
5407
  get appMenuItems$() {
5186
5408
  return this._appMenuItems$.asObservable();
@@ -5228,12 +5450,21 @@ class ApplicationCtrlrService {
5228
5450
  get selectedSystemId() {
5229
5451
  return this._selectedSystemId$.getValue();
5230
5452
  }
5453
+ get searchResults$() {
5454
+ return this._searchService.results$;
5455
+ }
5456
+ get systemCaption$() {
5457
+ return this._selectedSystemTitle$.asObservable();
5458
+ }
5231
5459
  getSelectedNavGroupItemId(systemId) {
5232
5460
  return this._selectedNavGroupItemId$.getValue()[systemId];
5233
5461
  }
5234
5462
  getSelectedReportId(systemId) {
5235
5463
  return this._selectedReportId$.getValue()[systemId];
5236
5464
  }
5465
+ getSelectedReportCaption(systemId) {
5466
+ return this._selectedReportCaption$.getValue()[systemId];
5467
+ }
5237
5468
  initialize(callback) {
5238
5469
  BarsaApi.Ul.ApplicationCtrlr.on({
5239
5470
  'MetaEventTopics.System_BeforeApplicationStart': () => {
@@ -5245,6 +5476,10 @@ class ApplicationCtrlrService {
5245
5476
  callback && callback(true);
5246
5477
  });
5247
5478
  this._document.documentElement.setAttribute('data-layout', 'vertical');
5479
+ this._selectedSystemTitle$
5480
+ .asObservable()
5481
+ .pipe(tap$1((c) => this._titleService.setTitle(c)))
5482
+ .subscribe();
5248
5483
  }
5249
5484
  systemChange(systemId) {
5250
5485
  const systemData = BarsaApi.Ul.ApplicationCtrlr.SystemDict[systemId]?.SystemData;
@@ -5253,6 +5488,7 @@ class ApplicationCtrlrService {
5253
5488
  // console.error(`system data for systemid ${systemId} not found.`);
5254
5489
  return;
5255
5490
  }
5491
+ this._selectedSystemTitle$.next(systemData.Caption);
5256
5492
  this._customApplicationMenuBodyUi.fireEvent('SelectedSystemChanged', this._customApplicationMenuBodyUi, systemData);
5257
5493
  }
5258
5494
  selectAppTileGroup(id) {
@@ -5275,7 +5511,7 @@ class ApplicationCtrlrService {
5275
5511
  selectSystemCommand(command) {
5276
5512
  this.selectSystemCommandId(command.Key);
5277
5513
  new Promise((resolve, _reject) => {
5278
- this._router.navigate(['application', this._selectedSystemId$.getValue()]);
5514
+ this._routeToSelectedSystem();
5279
5515
  if (command.DynamicCommand) {
5280
5516
  BarsaApi.Common.CustomCodeManager.RunDynamicCommand(command.Key, {}, resolve);
5281
5517
  }
@@ -5317,6 +5553,13 @@ class ApplicationCtrlrService {
5317
5553
  sidebarToggled(value) {
5318
5554
  this._sidebarToggle$.next(value);
5319
5555
  }
5556
+ selectReportCaption(caption) {
5557
+ const selectedReportCaption = this._selectedReportCaption$.getValue();
5558
+ const selectedSystemId = this._selectedSystemId$.getValue();
5559
+ const systemId = selectedSystemId;
5560
+ selectedReportCaption[systemId] = caption;
5561
+ this._selectedReportCaption$.next(selectedReportCaption);
5562
+ }
5320
5563
  selectedReportId(reportId) {
5321
5564
  const selectedReport = this._selectedReportId$.getValue();
5322
5565
  const selectedSystemId = this._selectedSystemId$.getValue();
@@ -5331,6 +5574,64 @@ class ApplicationCtrlrService {
5331
5574
  reject(err);
5332
5575
  });
5333
5576
  }
5577
+ loadSearchNavigators() {
5578
+ let canSupport = false;
5579
+ if (BarsaApi.LoginFormData.Version.startsWith('5')) {
5580
+ canSupport = isVersionBiggerThan('5.1.37');
5581
+ }
5582
+ else {
5583
+ canSupport = isVersionBiggerThan('4.1.178');
5584
+ }
5585
+ if (Object.keys(this._searchNavigators$.getValue()).length || canSupport) {
5586
+ return;
5587
+ }
5588
+ BarsaApi.Common.Ajax.GetServerData('System94.Search', { term: '' }, (e) => {
5589
+ this._searchService.register(new MultiAppNavigatorSearchProvider(e));
5590
+ this._searchService.register(new MultiAppCommandSearchProvider(e));
5591
+ }, (e) => console.error(e), null, this);
5592
+ }
5593
+ search(e) {
5594
+ this._searchService.search(e.text);
5595
+ }
5596
+ searchItemClick(data) {
5597
+ if (data.original.IsRoot) {
5598
+ this._routeToSystem(data.appId);
5599
+ }
5600
+ else if (data.source === 'Command') {
5601
+ this.selectSystemCommand(data.original);
5602
+ }
5603
+ else if (data.source === 'Navigator') {
5604
+ if (data.original.ReportId === '0') {
5605
+ this._routeToSystem(data.appId);
5606
+ this.selectNavGroup(data.id, false);
5607
+ }
5608
+ else {
5609
+ this._routeToReport(data.id, data.original.Caption, data.original.ReportId);
5610
+ }
5611
+ }
5612
+ }
5613
+ _routeToSystem(systemId) {
5614
+ this.selectedSystem(systemId);
5615
+ this._routeToSelectedSystem();
5616
+ }
5617
+ getLastActivatedRoute() {
5618
+ let route = this._router.routerState.root;
5619
+ while (route.firstChild) {
5620
+ route = route.firstChild;
5621
+ }
5622
+ return route;
5623
+ }
5624
+ _routeToReport(navGroupId, caption, reportId) {
5625
+ this._router.navigate([
5626
+ 'application',
5627
+ this._selectedSystemId$.getValue(),
5628
+ 'report',
5629
+ navGroupId + '__' + caption + '__' + reportId
5630
+ ]);
5631
+ }
5632
+ _routeToSelectedSystem() {
5633
+ this._router.navigate(['application', this._selectedSystemId$.getValue()]);
5634
+ }
5334
5635
  flattenLeafCommands(commands) {
5335
5636
  const result = [];
5336
5637
  for (const cmd of commands) {
@@ -5460,11 +5761,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
5460
5761
  type: Injectable
5461
5762
  }] });
5462
5763
 
5764
+ class ReportBreadcrumbResolver {
5765
+ resolve(route) {
5766
+ const x = this._extractIds(route.params);
5767
+ // برگرداندن شیء مورد نظر شما
5768
+ return x.ReportId2;
5769
+ }
5770
+ _extractIds(params) {
5771
+ return {
5772
+ Id: params.id.split('__')[0],
5773
+ ReportId: params.id.split('__').length > 2 ? params.id.split('__')[2] : '',
5774
+ ReportId2: params.id.split('__').length > 1 ? params.id.split('__')[1] : '',
5775
+ isReportPage: params.id.split('__').length > 3 ? params.id.split('__')[3] : null
5776
+ };
5777
+ }
5778
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ReportBreadcrumbResolver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5779
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ReportBreadcrumbResolver, providedIn: 'root' }); }
5780
+ }
5781
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ReportBreadcrumbResolver, decorators: [{
5782
+ type: Injectable,
5783
+ args: [{ providedIn: 'root' }]
5784
+ }] });
5785
+
5463
5786
  function reportRoutes(authGuard = false) {
5464
5787
  return {
5465
5788
  path: 'report/:id',
5466
5789
  canActivate: authGuard ? [AuthGuard] : [],
5467
- loadChildren: () => import('./barsa-novin-ray-core-barsa-report-page.module-Bml7rVqA.mjs').then((m) => m.BarsaReportPageModule)
5790
+ loadChildren: () => import('./barsa-novin-ray-core-barsa-report-page.module-52O0tR5U.mjs').then((m) => m.BarsaReportPageModule),
5791
+ resolve: {
5792
+ breadcrumb: ReportBreadcrumbResolver
5793
+ }
5468
5794
  };
5469
5795
  }
5470
5796
 
@@ -5704,6 +6030,7 @@ class PortalService {
5704
6030
  const _ismobile = getDeviceIsMobile();
5705
6031
  if (_ismobile) {
5706
6032
  BarsaApi.Bw.IsMobile = true;
6033
+ this._document.body.classList.add('mobile');
5707
6034
  }
5708
6035
  const _isTablet = getDeviceIsTablet();
5709
6036
  let _windoWSize = 's';
@@ -6561,7 +6888,10 @@ class UlvMainService {
6561
6888
  ...wfBtns,
6562
6889
  ...c.map((d) => ({
6563
6890
  ...d,
6564
- hideText: d.Command?.IsBuiltin && d.itemId !== 'New' ? true : false
6891
+ hideText: d.Command?.IsBuiltin &&
6892
+ (d.itemId === 'New' || d.itemId === 'AddToList' || d.itemId === 'RemoveFromList')
6893
+ ? false
6894
+ : true
6565
6895
  }))
6566
6896
  ]), map((c) => !c ? [] : [...c.filter((d) => !d.Command?.IsBuiltin), ...c.filter((d) => d.Command?.IsBuiltin)]), map((c) => c.reduce((acc, b) => (acc.length > 0 && acc[acc.length - 1]['0'] && b['0'] ? acc : [...acc, b]), [])));
6567
6897
  this.destroy$ = this._destroySource.asObservable().pipe(tap(() => this._unscubscribeContext()));
@@ -6573,7 +6903,7 @@ class UlvMainService {
6573
6903
  this.onlyInlineEdit$ = this._onlyInlineEditSource.asObservable();
6574
6904
  this.openSearchFilesManage$ = this._openSearchFilesManageSource.asObservable();
6575
6905
  this.searchPanelMoChanged$ = this._searchPanelMoChangedSource.asObservable().pipe(distinctUntilChanged());
6576
- this.layoutInfo$ = this._layoutInfoSource.asObservable().pipe(shareReplay(1));
6906
+ this.layoutInfo$ = this._layoutInfoSource.asObservable().pipe(shareReplay$1(1));
6577
6907
  this.allSearchPanelSettings$ = combineLatest([
6578
6908
  this._allSearchPanelSettingsSource.asObservable(),
6579
6909
  this._defaultSearchPanelSettingsSource.asObservable()
@@ -6583,14 +6913,14 @@ class UlvMainService {
6583
6913
  allSettings = [defaultSettings, ...allSettings];
6584
6914
  }
6585
6915
  return allSettings;
6586
- }), delay(0), shareReplay(1));
6916
+ }), delay(0), shareReplay$1(1));
6587
6917
  this.selectedSearchPanelSettingsId$ = this._selectedSearchPanelSettingsIdSource
6588
6918
  .asObservable()
6589
6919
  .pipe(distinctUntilChanged());
6590
6920
  this.selectedSearchPanelSettings$ = combineLatest([
6591
6921
  this.selectedSearchPanelSettingsId$,
6592
6922
  this.allSearchPanelSettings$
6593
- ]).pipe(map(([id, settings]) => settings?.find((c) => c.Id === id)), shareReplay(1));
6923
+ ]).pipe(map(([id, settings]) => settings?.find((c) => c.Id === id)), shareReplay$1(1));
6594
6924
  }
6595
6925
  get hideViewerLoading$() {
6596
6926
  return this._hideViewerLoadingSource.asObservable();
@@ -6951,7 +7281,7 @@ class UlvMainService {
6951
7281
  }
6952
7282
  loadMetaConditionsControlInfos(typeDefId, fieldDbNames) {
6953
7283
  const mo = GetDefaultMoObjectInfo(typeDefId);
6954
- return of(this._controlInfosMetaobject).pipe(switchMap((controlsInfo) => {
7284
+ return of(this._controlInfosMetaobject).pipe(switchMap$1((controlsInfo) => {
6955
7285
  if (controlsInfo.length > 0) {
6956
7286
  return of(controlsInfo);
6957
7287
  }
@@ -8220,6 +8550,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
8220
8550
 
8221
8551
  class PushNotificationService {
8222
8552
  constructor() {
8553
+ this.BANNER_DISMISS_KEY = 'push_banner_dismissed_until';
8223
8554
  this.swPush = inject(SwPush);
8224
8555
  this.http = inject(HttpClient);
8225
8556
  this.idb = inject(IdbService);
@@ -8228,7 +8559,7 @@ class PushNotificationService {
8228
8559
  this._push = signal({
8229
8560
  bannerVisible: false,
8230
8561
  isSubscribed: false,
8231
- permission: Notification.permission,
8562
+ permission: checkPermission(),
8232
8563
  errorMessage: null
8233
8564
  });
8234
8565
  this.registerServiceWorkerMessageListener = () => {
@@ -8254,6 +8585,9 @@ class PushNotificationService {
8254
8585
  return this._push.asReadonly();
8255
8586
  }
8256
8587
  hideBanner() {
8588
+ // ۲. ذخیره زمان فعلی + ۲۴ ساعت (یا هر بازه مد نظر) در LocalStorage
8589
+ const tomorrow = Date.now() + 24 * 60 * 60 * 1000;
8590
+ this.local.setItem(this.BANNER_DISMISS_KEY, tomorrow.toString());
8257
8591
  this.update({ bannerVisible: false });
8258
8592
  }
8259
8593
  async setup() {
@@ -8263,7 +8597,7 @@ class PushNotificationService {
8263
8597
  this.swPush.subscription.subscribe((sub) => {
8264
8598
  this.update({
8265
8599
  isSubscribed: !!sub,
8266
- permission: Notification.permission
8600
+ permission: checkPermission()
8267
8601
  });
8268
8602
  if (sub) {
8269
8603
  const json = sub.toJSON?.() ?? sub;
@@ -8289,7 +8623,7 @@ class PushNotificationService {
8289
8623
  await this.idb.set('subscription', 'push-subscription', sub.toJSON());
8290
8624
  this.update({
8291
8625
  isSubscribed: true,
8292
- permission: Notification.permission,
8626
+ permission: checkPermission(),
8293
8627
  bannerVisible: false,
8294
8628
  errorMessage: null
8295
8629
  });
@@ -8329,7 +8663,7 @@ class PushNotificationService {
8329
8663
  }
8330
8664
  this.update({
8331
8665
  isSubscribed: true,
8332
- permission: Notification.permission,
8666
+ permission: checkPermission(),
8333
8667
  errorMessage: null
8334
8668
  });
8335
8669
  }
@@ -8344,30 +8678,34 @@ class PushNotificationService {
8344
8678
  }
8345
8679
  async initPushBanner() {
8346
8680
  let saved = await this.loadSubscription();
8347
- const perm = Notification.permission;
8348
- this.update({
8349
- permission: perm
8350
- });
8681
+ const perm = checkPermission();
8682
+ // ۳. بررسی امن بودن پروتکل (HTTPS یا Localhost)
8683
+ const isSecureContext = window.isSecureContext;
8684
+ this.update({ permission: perm });
8351
8685
  if (saved) {
8352
- // اگر پرمیشن اکنون revoked یا default شد، subscription قبلی را حذف کن
8353
8686
  if (perm === 'default' || perm === 'denied') {
8354
- console.log('Permission reset detected, removing old subscription');
8355
8687
  await this.deleteSubscription();
8356
8688
  saved = null;
8357
8689
  }
8358
8690
  }
8359
8691
  if (saved) {
8360
- this.update({
8361
- isSubscribed: true,
8362
- bannerVisible: false
8363
- });
8692
+ this.update({ isSubscribed: true, bannerVisible: false });
8364
8693
  }
8365
8694
  else {
8695
+ // ۴. منطق جدید برای نمایش بنر
8696
+ const dismissUntil = Number(this.local.getItem(this.BANNER_DISMISS_KEY) || 0);
8697
+ const isWaitPeriodOver = Date.now() > dismissUntil;
8698
+ const shouldShow = isSecureContext && // حتما HTTPS باشد
8699
+ perm !== 'denied' && // قبلا بلاک نکرده باشد
8700
+ perm !== 'granted' && // قبلا اکسپت نکرده باشد (اگر saved نال بود)
8701
+ isWaitPeriodOver && // زمان انتظار تمام شده باشد
8702
+ 'PushManager' in window; // مرورگر پشتیبانی کند
8366
8703
  this.update({
8367
8704
  isSubscribed: false,
8368
- bannerVisible: perm !== 'denied' && 'PushManager' in window
8705
+ bannerVisible: shouldShow
8369
8706
  });
8370
8707
  }
8708
+ // بقیه کدها...
8371
8709
  this.registerServiceWorkerMessageListener();
8372
8710
  const publicKey = await this.loadPublicKey();
8373
8711
  if (publicKey) {
@@ -11133,7 +11471,8 @@ class FormPageBaseComponent extends ContainerComponent {
11133
11471
  onFormClose() {
11134
11472
  if (this._activatedRoute.snapshot.params.isFirst &&
11135
11473
  this._activatedRoute.parent?.parent?.routeConfig?.path === 'form') {
11136
- const parentUrl = this._router.url.split('/form/')[0];
11474
+ let parentUrl = this._router.url.split('/form/')[0];
11475
+ parentUrl = fixUnclosedParentheses(parentUrl);
11137
11476
  this._router.navigateByUrl(parentUrl, {
11138
11477
  replaceUrl: true
11139
11478
  });
@@ -11340,9 +11679,6 @@ class FormComponent extends BaseComponent {
11340
11679
  componentInstance.forceClose$.pipe(takeUntil(this._onDestroy$)).subscribe(() => {
11341
11680
  this.formClose.emit();
11342
11681
  });
11343
- componentInstance.forceClose$.pipe(takeUntil(this._onDestroy$)).subscribe(() => {
11344
- this.formClose.emit();
11345
- });
11346
11682
  // this.formPanelCtrl.on('ValueChange', () => this.moChanged.emit(this.formPanelCtrl.Mo));
11347
11683
  // component.instance.addEventListener('formClose', this.close);
11348
11684
  // el.appendChild(htmlElement);
@@ -11673,7 +12009,7 @@ class FormFieldReportPageComponent extends BaseComponent {
11673
12009
  .pipe(takeUntil(this._onDestroy$), tap(() => this._setLoading(true)), map((params) => ({
11674
12010
  Id: 0,
11675
12011
  ReportId: params.id
11676
- })), switchMap((navItem) => this._portalService.renderUlvMainUi(navItem, this.containerRef, this._injector, true)))
12012
+ })), switchMap$1((navItem) => this._portalService.renderUlvMainUi(navItem, this.containerRef, this._injector, true)))
11677
12013
  .subscribe(() => {
11678
12014
  this._setLoading(false);
11679
12015
  });
@@ -11792,14 +12128,12 @@ class MasterDetailsPageComponent extends PageWithFormHandlerBaseComponent {
11792
12128
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: MasterDetailsPageComponent, isStandalone: false, selector: "bnrc-master-details-page", host: { properties: { "style.position": "this._position", "class.section": "this.sectionClass", "class.absolute-page": "this.absolutePageClass", "class.modal": "this.ismodal" } }, providers: [RoutingService, ContainerService], usesInheritance: true, ngImport: i0, template: `
11793
12129
  <div class="tw-flex tw-h-full tw-w-full tw-flex-col md:tw-flex-row">
11794
12130
  <!-- لیست -->
11795
- <div
11796
- class="tw-w-full md:tw-w-96"
11797
- >
12131
+ <div class="tw-w-full md:tw-w-96 master">
11798
12132
  <ng-container #containerRef></ng-container>
11799
12133
  </div>
11800
12134
 
11801
12135
  <!-- جزئیات -->
11802
- <div class="tw-w-full md:tw-flex-1 tw-overflow-hidden">
12136
+ <div class="tw-w-full md:tw-flex-1 tw-overflow-hidden details">
11803
12137
  <router-outlet name="details"></router-outlet>
11804
12138
  </div>
11805
12139
  </div>
@@ -11812,14 +12146,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
11812
12146
  args: [{ selector: 'bnrc-master-details-page', template: `
11813
12147
  <div class="tw-flex tw-h-full tw-w-full tw-flex-col md:tw-flex-row">
11814
12148
  <!-- لیست -->
11815
- <div
11816
- class="tw-w-full md:tw-w-96"
11817
- >
12149
+ <div class="tw-w-full md:tw-w-96 master">
11818
12150
  <ng-container #containerRef></ng-container>
11819
12151
  </div>
11820
12152
 
11821
12153
  <!-- جزئیات -->
11822
- <div class="tw-w-full md:tw-flex-1 tw-overflow-hidden">
12154
+ <div class="tw-w-full md:tw-flex-1 tw-overflow-hidden details">
11823
12155
  <router-outlet name="details"></router-outlet>
11824
12156
  </div>
11825
12157
  </div>
@@ -15916,7 +16248,7 @@ class LeafletLongPressDirective {
15916
16248
  const mouseup$ = merge(fromEvent(container, 'mouseup'), fromEvent(container, 'touchend'));
15917
16249
  const move$ = merge(fromEvent(container, 'mousemove'), fromEvent(container, 'touchmove'));
15918
16250
  const cancelInteraction$ = merge(fromEvent(this.map, 'dragstart'), fromEvent(this.map, 'zoomstart'), fromEvent(this.map, 'movestart'));
15919
- const longPress$ = mousedown$.pipe(switchMap((startEvent) => timer(this.longPressDuration).pipe(takeUntil(merge(mouseup$, move$, cancelInteraction$)), map(() => startEvent))), filter((e) => !!e));
16251
+ const longPress$ = mousedown$.pipe(switchMap$1((startEvent) => timer(this.longPressDuration).pipe(takeUntil(merge(mouseup$, move$, cancelInteraction$)), map(() => startEvent))), filter((e) => !!e));
15920
16252
  this.sub.add(longPress$.subscribe((startEvent) => {
15921
16253
  const originalEvent = startEvent instanceof MouseEvent ? startEvent : startEvent.touches?.[0] || startEvent;
15922
16254
  const latlng = this.map.mouseEventToLatLng(originalEvent);
@@ -16206,6 +16538,7 @@ class FormNewComponent extends BaseComponent {
16206
16538
  super(...arguments);
16207
16539
  this._router = inject(Router);
16208
16540
  this._activatedRoute = inject(ActivatedRoute);
16541
+ this._back$ = new Subject();
16209
16542
  }
16210
16543
  ngOnInit() {
16211
16544
  super.ngOnInit();
@@ -16213,9 +16546,20 @@ class FormNewComponent extends BaseComponent {
16213
16546
  const typeDefId = this.settings?.MetaTypeDef?.Id;
16214
16547
  const viewId = this.settings?.MetaView?.Id;
16215
16548
  this.params = { moId, typeDefId, viewId };
16549
+ this._back$
16550
+ .asObservable()
16551
+ .pipe(debounceTime$1(100))
16552
+ .subscribe(() => this._navigateBack());
16216
16553
  }
16217
16554
  onFormClose() {
16218
- this._router.navigate(['../'], {
16555
+ this._back$.next();
16556
+ }
16557
+ _navigateBack() {
16558
+ const pathPattern = this._activatedRoute.snapshot.routeConfig?.path || '';
16559
+ const segmentsCount = pathPattern.split('/').filter((segment) => segment.length > 0).length;
16560
+ const backSteps = '../'.repeat(segmentsCount);
16561
+ // const path = this._activatedRoute.snapshot.routeConfig?.path;
16562
+ this._router.navigate([backSteps], {
16219
16563
  relativeTo: this._activatedRoute,
16220
16564
  replaceUrl: true
16221
16565
  });
@@ -16546,18 +16890,14 @@ class ReportNavigatorComponent extends BaseComponent {
16546
16890
  this._applicationCtrlService = inject(ApplicationCtrlrService);
16547
16891
  this._injector = inject(Injector);
16548
16892
  this._cdr = inject(ChangeDetectorRef);
16893
+ this._bbb = inject(BbbTranslatePipe);
16549
16894
  this._loadingSource = new BehaviorSubject(false);
16550
16895
  this.loading$ = this._loadingSource.asObservable().pipe(takeUntil(this._onDestroy$), debounceTime(200));
16551
16896
  }
16552
16897
  ngOnInit() {
16553
16898
  super.ngOnInit();
16554
16899
  this._activatedRoute.params
16555
- .pipe(takeUntil(this._onDestroy$), tap(() => this._setLoading(true)), map((params) => ({
16556
- Id: params.id.split('__')[0],
16557
- ReportId: params.id.split('__').length > 2 ? params.id.split('__')[2] : '',
16558
- ReportId2: params.id.split('__').length > 1 ? params.id.split('__')[1] : '',
16559
- isReportPage: params.id.split('__').length > 3 ? params.id.split('__')[3] : null
16560
- })), tap((c) => (c.isReportPage ? (this.minheight = 'auto') : '100vh')), tap((c) => (c.ReportId = !c.ReportId ? c.ReportId2 : c.ReportId)), tap((_c) => this.containerRef.clear()), tap((navItem) => this._applicationCtrlService.selectNavGroupItem(navItem.Id)), tap((navItem) => this._applicationCtrlService.selectedReportId(navItem.ReportId || navItem.ReportId2)), switchMap((navItem) => this._portalService
16900
+ .pipe(takeUntil(this._onDestroy$), tap(() => this._setLoading(true)), map((params) => this._extractIds(params)), tap((c) => (c.isReportPage ? (this.minheight = 'auto') : '100vh')), tap((c) => (c.ReportId = !c.ReportId ? c.ReportId2 : c.ReportId)), tap((_c) => this.containerRef.clear()), tap((navItem) => this._applicationCtrlService.selectNavGroupItem(navItem.Id)), tap((navItem) => this._applicationCtrlService.selectedReportId(navItem.ReportId)), tap((navItem) => this._applicationCtrlService.selectReportCaption(navItem.ReportId2)), switchMap$1((navItem) => this._portalService
16561
16901
  .renderUlvMainUi(navItem, this.containerRef, this._injector, navItem.isReportPage ? false : true)
16562
16902
  .pipe(catchError((_err) =>
16563
16903
  // this._location.back();
@@ -16574,6 +16914,14 @@ class ReportNavigatorComponent extends BaseComponent {
16574
16914
  // this._applicationCtrlService.selectNavGroupItem('');
16575
16915
  this._setActiveReport(null);
16576
16916
  }
16917
+ _extractIds(params) {
16918
+ return {
16919
+ Id: params.id.split('__')[0],
16920
+ ReportId: params.id.split('__').length > 2 ? params.id.split('__')[2] : '',
16921
+ ReportId2: params.id.split('__').length > 1 ? params.id.split('__')[1] : '',
16922
+ isReportPage: params.id.split('__').length > 3 ? params.id.split('__')[3] : null
16923
+ };
16924
+ }
16577
16925
  _setLoading(val) {
16578
16926
  this._loadingSource.next(val);
16579
16927
  this._cdr.detectChanges();
@@ -16796,7 +17144,7 @@ class ResizableDirective {
16796
17144
  this.resizableComplete = new EventEmitter();
16797
17145
  this.documentRef = inject(DOCUMENT);
16798
17146
  this.elementRef = inject(ElementRef);
16799
- this.resizable = fromEvent(this.elementRef.nativeElement, 'mousedown').pipe(tap((e) => e.preventDefault()), switchMap(() => {
17147
+ this.resizable = fromEvent(this.elementRef.nativeElement, 'mousedown').pipe(tap((e) => e.preventDefault()), switchMap$1(() => {
16800
17148
  const elDom = this.elementRef.nativeElement;
16801
17149
  const { width, right, left } = elDom.closest('th').getBoundingClientRect();
16802
17150
  return fromEvent(this.documentRef, 'mousemove').pipe(map(({ clientX }) => (this.rtl ? width + left - clientX : width + clientX - right)), distinctUntilChanged(), takeUntil(fromEvent(this.documentRef, 'mouseup').pipe(tap((_c) => this.resizableComplete.emit()))));
@@ -17810,5 +18158,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
17810
18158
  * Generated bundle index. Do not edit.
17811
18159
  */
17812
18160
 
17813
- 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, CardBaseItemContentPropsComponent, CardDynamicItemComponent, CardMediaSizePipe, CardViewService, ChangeLayoutInfoCustomUi, ChunkArrayPipe, CodeEditorControlInfoModel, ColSetting, ColumnCustomComponentPipe, ColumnCustomUiPipe, ColumnIconPipe, ColumnResizerDirective, ColumnService, ColumnValueDirective, ColumnValueOfParametersPipe, ColumnValuePipe, ComboRowImagePipe, CommandControlInfoModel, ContainerComponent, ContainerService, ContextMenuPipe, ControlUiPipe, ConvertToStylePipe, CopyDirective, CountDownDirective, CustomCommand, CustomInjector, CustomRouteReuseStrategy, 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, RelatedReportControlInfoModel, RelationListControlInfoModel, RemoveDynamicFormStyles, RemoveNewlinePipe, RenderUlvDirective, RenderUlvPaginDirective, RenderUlvViewerDirective, ReplacePipe, ReportBaseComponent, ReportBaseInfo, ReportCalendarModel, ReportContainerComponent, ReportEmptyPageComponent, ReportExtraInfo, ReportField, ReportFormModel, ReportItemBaseComponent, ReportListModel, ReportModel, ReportNavigatorComponent, ReportTreeModel, ReportViewBaseComponent, ReportViewColumn, ResizableComponent, ResizableDirective, ResizableModule, ResizeHandlerDirective, ResizeObserverDirective, ReversePipe, RichStringControlInfoModel, RootPageComponent, RootPortalComponent, RotateImage, 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 };
18161
+ 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, CardBaseItemContentPropsComponent, CardDynamicItemComponent, CardMediaSizePipe, CardViewService, ChangeLayoutInfoCustomUi, ChunkArrayPipe, CodeEditorControlInfoModel, ColSetting, ColumnCustomComponentPipe, ColumnCustomUiPipe, ColumnIconPipe, ColumnResizerDirective, ColumnService, ColumnValueDirective, ColumnValueOfParametersPipe, ColumnValuePipe, ComboRowImagePipe, CommandControlInfoModel, ContainerComponent, ContainerService, ContextMenuPipe, ControlUiPipe, ConvertToStylePipe, CopyDirective, CountDownDirective, CustomCommand, CustomInjector, CustomRouteReuseStrategy, 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, RelatedReportControlInfoModel, RelationListControlInfoModel, RemoveDynamicFormStyles, RemoveNewlinePipe, RenderUlvDirective, RenderUlvPaginDirective, RenderUlvViewerDirective, ReplacePipe, ReportBaseComponent, ReportBaseInfo, ReportBreadcrumbResolver, ReportCalendarModel, ReportContainerComponent, ReportEmptyPageComponent, ReportExtraInfo, ReportField, ReportFormModel, ReportItemBaseComponent, ReportListModel, ReportModel, ReportNavigatorComponent, ReportTreeModel, ReportViewBaseComponent, ReportViewColumn, ResizableComponent, ResizableDirective, ResizableModule, ResizeHandlerDirective, ResizeObserverDirective, ReversePipe, RichStringControlInfoModel, RootPageComponent, RootPortalComponent, RotateImage, 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, checkPermission, compareVersions, createFormPanelMetaConditions, createGridEditorFormPanel, easeInOutCubic, elementInViewport2, enumValueToStringSize, executeUlvCommandHandler, fixUnclosedParentheses, 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, isVersionBiggerThan, measureText, measureText2, measureTextBy, mobile_regex, nullOrUndefinedString, number_only, requestAnimationFramePolyfill, scrollToElement, setColumnWidthByMaxMoContentWidth, setOneDepthLevel, setTableThWidth, shallowEqual, stopPropagation, throwIfAlreadyLoaded, toNumber, validateAllFormFields };
17814
18162
  //# sourceMappingURL=barsa-novin-ray-core.mjs.map