barsa-novin-ray-core 2.3.167 → 3.0.1

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,18 +1,18 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, inject, ElementRef, Input, ChangeDetectionStrategy, Component, Pipe, Injector, EnvironmentInjector, ApplicationRef, createComponent, InjectionToken, Compiler, DOCUMENT, NgZone, signal, ViewContainerRef, isDevMode, SecurityContext, EventEmitter, ChangeDetectorRef, Renderer2, HostBinding, Output, HostListener, ViewChild, effect, Directive, TemplateRef, input, booleanAttribute, NgModule, NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA, ErrorHandler, provideAppInitializer } from '@angular/core';
3
- import { Subject, from, BehaviorSubject, of, exhaustMap, map as map$1, shareReplay, catchError, timer, combineLatest, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, switchMap, forkJoin, withLatestFrom as withLatestFrom$1, fromEvent, throwError, merge, interval, filter as filter$1, lastValueFrom, timeout, takeUntil as takeUntil$1, take, skip, Observable, tap as tap$1, mergeWith, Subscription } from 'rxjs';
2
+ import { Injectable, inject, ElementRef, Input, ChangeDetectionStrategy, Component, Pipe, signal, ChangeDetectorRef, effect, Injector, EnvironmentInjector, ApplicationRef, createComponent, InjectionToken, Compiler, DOCUMENT as DOCUMENT$1, NgZone, ViewContainerRef, isDevMode, SecurityContext, EventEmitter, Renderer2, HostBinding, Output, HostListener, ViewChild, Directive, TemplateRef, input, booleanAttribute, NgModule, NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA, ErrorHandler, provideAppInitializer } from '@angular/core';
3
+ import { Subject, from, BehaviorSubject, of, exhaustMap, map as map$1, shareReplay, catchError, timer, combineLatest, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, switchMap, forkJoin, withLatestFrom as withLatestFrom$1, fromEvent, EMPTY, throwError, merge, interval, filter as filter$1, lastValueFrom, timeout, takeUntil as takeUntil$1, take, skip, Observable, tap as tap$1, 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, exhaustMap as exhaustMap$1, withLatestFrom, delay, debounceTime, distinctUntilChanged, concatMap, finalize, publishReplay, refCount, shareReplay as shareReplay$1, switchMap as switchMap$1, catchError as catchError$1, merge as merge$1, pluck, mergeWith as mergeWith$1 } from 'rxjs/operators';
7
+ import { filter, startWith, map, tap, takeUntil, exhaustMap as exhaustMap$1, withLatestFrom, delay, debounceTime, distinctUntilChanged, concatMap, finalize, publishReplay, refCount, switchMap as switchMap$1, shareReplay as shareReplay$1, catchError as catchError$1, 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$2 from 'moment-jalaali';
11
11
  import { _isNumberValue } from '@angular/cdk/coercion';
12
12
  import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
13
- import { HttpClient, HttpEventType, HttpErrorResponse, HttpHeaders, provideHttpClient, withXhr, withInterceptorsFromDi } from '@angular/common/http';
14
13
  import * as i1$1 from '@angular/common';
15
- import { Location, TitleCasePipe, CommonModule } from '@angular/common';
14
+ import { DOCUMENT, Location, TitleCasePipe, CommonModule } from '@angular/common';
15
+ import { HttpClient, HttpEventType, HttpErrorResponse, HttpHeaders, provideHttpClient, withXhr, withInterceptorsFromDi } from '@angular/common/http';
16
16
  import RecordRTC from 'recordrtc';
17
17
  import { SwUpdate, SwPush } from '@angular/service-worker';
18
18
  import { openDB } from 'idb';
@@ -1749,6 +1749,40 @@ function calculateColumnWidthFitToContainer(container, canView, disableContextMe
1749
1749
  // });
1750
1750
  return { columns: [...columns], contextMenuWidth };
1751
1751
  }
1752
+ /**
1753
+ * تشخیص می‌دهد که آیا جدول باید از حالتِ FitToContainer به FreeColumnSize (عرضِ طبیعی + اسکرولِ افقی)
1754
+ * سوییچ کند یا نه. برای اینکه یک ستونِ outlier کلِ جدول را اسکرولی نکند، فقط وقتی `true` می‌دهد که
1755
+ * **حداقل `threshold` ستون** در سهمِ برابرِ کانتینر بیش از `maxHiddenRatio` (پیش‌فرض ۳۰٪) پنهان بمانند.
1756
+ */
1757
+ function shouldUseFreeColumnSize(containerWidth, columns, threshold = 2, maxHiddenRatio = 0.3, reservedWidth = 0) {
1758
+ if (!containerWidth || containerWidth <= 0 || !columns?.length) {
1759
+ return false;
1760
+ }
1761
+ // ستونِ رنگِ اولِ ردیف (FieldTypeId===41) و ستون‌های مخفی را کنار می‌گذاریم (هم‌راستا با FitToContainer)
1762
+ const visibleColumns = columns.filter((c, i) => !c.Hidden && !(i === 0 && c.FieldTypeId === 41));
1763
+ const visibleCount = visibleColumns.length;
1764
+ if (visibleCount === 0) {
1765
+ return false;
1766
+ }
1767
+ // فضای واقعیِ در دسترسِ ستون‌های داده = عرضِ کانتینر منهای سربار (چک‌باکس/منوی زمینه/دکمه‌ی view)
1768
+ const availableWidth = containerWidth - reservedWidth;
1769
+ if (availableWidth <= 0) {
1770
+ return true;
1771
+ }
1772
+ const fairShare = availableWidth / visibleCount;
1773
+ let crampedCount = 0;
1774
+ for (const col of visibleColumns) {
1775
+ const neededWidth = setColumnCaptionWidth(col);
1776
+ // «بیش از maxHiddenRatio پنهان» ⇔ سهمِ برابر < (۱-ratio)×عرضِ لازم
1777
+ if (neededWidth * (1 - maxHiddenRatio) > fairShare) {
1778
+ crampedCount++;
1779
+ if (crampedCount >= threshold) {
1780
+ return true;
1781
+ }
1782
+ }
1783
+ }
1784
+ return false;
1785
+ }
1752
1786
  function calcContextMenuWidth(contextMenuItems, disableContextMenuOverflow) {
1753
1787
  let contextMenuWidth = contextMenuItems.length > 1 ? 40 : 0;
1754
1788
  const btnPadding = 14 + 2 + 10; // padding + border + if text is overflowed then add 5 pixel.so we always 5 px to it.
@@ -1869,6 +1903,20 @@ function measureTextBy(text, fontSize, fontName) {
1869
1903
  function genrateInlineMoId() {
1870
1904
  return (BarsaApi.idGenerator--).toString();
1871
1905
  }
1906
+ /**
1907
+ * تبدیل مقدار زمانی با ساختار hh:mm که از سرور به‌صورت عددِ اعشاریِ «ساعت.دقیقه» می‌آید، به میلی‌ثانیه.
1908
+ * بخشِ صحیح = ساعت و دو رقمِ اعشار = دقیقه؛ مثلاً "0.01" = 00:01 = یک دقیقه، "1.30" = 01:30 = نود دقیقه.
1909
+ * برای مقدار نامعتبر، خالی یا صفر و منفی، عددِ 0 (یعنی «خاموش») برمی‌گرداند.
1910
+ */
1911
+ function hhmmToMs(value) {
1912
+ const num = Number(value);
1913
+ if (!num || num <= 0) {
1914
+ return 0;
1915
+ }
1916
+ const hours = Math.floor(num);
1917
+ const minutes = Math.round((num - hours) * 100);
1918
+ return (hours * 60 + minutes) * 60 * 1000;
1919
+ }
1872
1920
  function enumValueToStringSize(value, defaultValue) {
1873
1921
  switch (value) {
1874
1922
  case '1':
@@ -3325,6 +3373,52 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
3325
3373
  }]
3326
3374
  }], ctorParameters: () => [] });
3327
3375
 
3376
+ /**
3377
+ * پورتِ جاواسکریپتیِ DateTimeHelper.ToRelativeDate (سی‌شارپ).
3378
+ * فاصله‌ی تاریخِ ورودی تا «الان» را به‌صورت متنِ نسبیِ فارسی برمی‌گرداند.
3379
+ *
3380
+ * نمونه‌ها: «چند ثانیه پیش»، «۲ دقیقه پیش»، «۳ ساعت دیگر»، «فردا»، «۵ روز پیش»، «۲ ماه دیگر».
3381
+ *
3382
+ * @param value تاریخ ورودی (Date | رشته | timestamp میلی‌ثانیه).
3383
+ * @param now مبنای «الان» بر حسب میلی‌ثانیه؛ برای تست‌پذیری و به‌روزرسانیِ سیگنالی قابل تزریق است.
3384
+ */
3385
+ function toRelativeDate(value, now = Date.now()) {
3386
+ if (value === null || value === undefined || value === '') {
3387
+ return 'نامشخص';
3388
+ }
3389
+ const date = value instanceof Date ? value.getTime() : new Date(value).getTime();
3390
+ // تاریخِ نامعتبر یا مقدارِ پیش‌فرضِ DateTime (DateTime.MinValue)
3391
+ if (Number.isNaN(date)) {
3392
+ return 'نامشخص';
3393
+ }
3394
+ const tsSeconds = (date - now) / 1000; // مثبت => آینده، منفی => گذشته
3395
+ const delta = Math.abs(tsSeconds);
3396
+ const isFuture = tsSeconds > 0;
3397
+ const suffix = isFuture ? 'دیگر' : 'پیش';
3398
+ if (delta < 60) {
3399
+ return isFuture ? 'چند ثانیه دیگر' : 'چند ثانیه پیش';
3400
+ }
3401
+ if (delta < 3600) {
3402
+ return `${Math.floor(delta / 60)} دقیقه ${suffix}`;
3403
+ }
3404
+ if (delta < 86400) {
3405
+ return `${Math.floor(delta / 3600)} ساعت ${suffix}`;
3406
+ }
3407
+ if (delta < 172800) {
3408
+ return isFuture ? 'فردا' : 'دیروز';
3409
+ }
3410
+ if (delta < 604800) {
3411
+ return `${Math.floor(delta / 86400)} روز ${suffix}`;
3412
+ }
3413
+ if (delta < 2592000) {
3414
+ return `${Math.floor(delta / 604800)} هفته ${suffix}`;
3415
+ }
3416
+ if (delta < 31536000) {
3417
+ return `${Math.floor(delta / 2592000)} ماه ${suffix}`;
3418
+ }
3419
+ return `${Math.floor(delta / 31536000)} سال ${suffix}`;
3420
+ }
3421
+
3328
3422
  class MoValuePipe {
3329
3423
  constructor() { }
3330
3424
  transform(name, mo, caption) {
@@ -4092,7 +4186,9 @@ class ColumnIconPipe {
4092
4186
  const data = mo[colName];
4093
4187
  let icon = mo[colName + '$Icon'];
4094
4188
  if (typeof data === 'object' && data) {
4095
- icon = data.$Icon;
4189
+ // برای رابطه‌ی تکی، آیکنِ خودِ آبجکت (data.$Icon) اولویت دارد؛
4190
+ // در غیر این صورت آیکنِ فیلد همسایه (mo[colName + '$Icon']) حفظ می‌شود.
4191
+ icon = data.$Icon ?? icon;
4096
4192
  }
4097
4193
  return icon;
4098
4194
  }
@@ -4107,6 +4203,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
4107
4203
  }]
4108
4204
  }] });
4109
4205
 
4206
+ /** آیکن عمومیِ پیش‌فرض وقتی نه رکورد و نه موجودیت آیکن ندارند. */
4207
+ const DEFAULT_OBJECT_ICON = '/assets/Images/A/16/object.png';
4208
+ /**
4209
+ * آیکنِ یک رکورد را resolve می‌کند:
4210
+ * ۱- آیکنِ خودِ رکورد (`mo.$Icon`)
4211
+ * ۲- آیکنِ تعیین‌شده برای موجودیت (`Setting.Data.Icon`)
4212
+ * ۳- آیکنِ عمومیِ پیش‌فرض
4213
+ *
4214
+ * استفاده: `mo | moIcon: UlvMainCtrlr`
4215
+ */
4216
+ class MoIconPipe {
4217
+ transform(mo, Setting) {
4218
+ return mo?.$Icon ?? Setting?.Data?.Icon ?? DEFAULT_OBJECT_ICON;
4219
+ }
4220
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: MoIconPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
4221
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: MoIconPipe, isStandalone: false, name: "moIcon" }); }
4222
+ }
4223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: MoIconPipe, decorators: [{
4224
+ type: Pipe,
4225
+ args: [{
4226
+ name: 'moIcon',
4227
+ standalone: false
4228
+ }]
4229
+ }] });
4230
+
4110
4231
  class RowNumberPipe {
4111
4232
  transform(moId, setting, moDataList) {
4112
4233
  if (!moId) {
@@ -4459,11 +4580,91 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
4459
4580
  }]
4460
4581
  }] });
4461
4582
 
4583
+ class ReadableTextColorPipe {
4584
+ constructor() {
4585
+ this._document = inject(DOCUMENT);
4586
+ }
4587
+ transform(backgroundColor, context) {
4588
+ if (typeof backgroundColor !== 'string' || !backgroundColor.trim()) {
4589
+ return null;
4590
+ }
4591
+ const rgb = this._resolveColor(backgroundColor.trim(), context);
4592
+ if (!rgb) {
4593
+ return null;
4594
+ }
4595
+ const blackContrast = this._getContrastRatio(rgb, [0, 0, 0]);
4596
+ const whiteContrast = this._getContrastRatio(rgb, [255, 255, 255]);
4597
+ return whiteContrast > blackContrast ? '#ffffff' : '#000000';
4598
+ }
4599
+ _resolveColor(color, context) {
4600
+ const view = this._document.defaultView;
4601
+ const host = context || this._document.body || this._document.documentElement;
4602
+ if (!view || !host) {
4603
+ return null;
4604
+ }
4605
+ if (view.CSS?.supports && !view.CSS.supports('color', color)) {
4606
+ return null;
4607
+ }
4608
+ const probe = this._document.createElement('span');
4609
+ probe.style.color = color;
4610
+ probe.style.display = 'none';
4611
+ if (!probe.style.color) {
4612
+ return null;
4613
+ }
4614
+ host.appendChild(probe);
4615
+ const resolvedColor = view.getComputedStyle(probe).color;
4616
+ probe.remove();
4617
+ if (!resolvedColor) {
4618
+ return null;
4619
+ }
4620
+ const canvas = this._document.createElement('canvas');
4621
+ canvas.width = 1;
4622
+ canvas.height = 1;
4623
+ const canvasContext = canvas.getContext('2d');
4624
+ if (!canvasContext) {
4625
+ return null;
4626
+ }
4627
+ canvasContext.clearRect(0, 0, 1, 1);
4628
+ canvasContext.fillStyle = resolvedColor;
4629
+ canvasContext.fillRect(0, 0, 1, 1);
4630
+ const [red, green, blue, alpha] = canvasContext.getImageData(0, 0, 1, 1).data;
4631
+ return alpha === 0 ? null : [red, green, blue];
4632
+ }
4633
+ _getContrastRatio(firstColor, secondColor) {
4634
+ const firstLuminance = this._getLuminance(firstColor);
4635
+ const secondLuminance = this._getLuminance(secondColor);
4636
+ const brightest = Math.max(firstLuminance, secondLuminance);
4637
+ const darkest = Math.min(firstLuminance, secondLuminance);
4638
+ return (brightest + 0.05) / (darkest + 0.05);
4639
+ }
4640
+ _getLuminance(rgb) {
4641
+ const [red, green, blue] = rgb.map((value) => {
4642
+ const channel = value / 255;
4643
+ return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);
4644
+ });
4645
+ return 0.2126 * red + 0.7152 * green + 0.0722 * blue;
4646
+ }
4647
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReadableTextColorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
4648
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: ReadableTextColorPipe, isStandalone: false, name: "readableTextColor" }); }
4649
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReadableTextColorPipe, providedIn: 'root' }); }
4650
+ }
4651
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReadableTextColorPipe, decorators: [{
4652
+ type: Injectable,
4653
+ args: [{ providedIn: 'root' }]
4654
+ }, {
4655
+ type: Pipe,
4656
+ args: [{
4657
+ name: 'readableTextColor',
4658
+ standalone: false
4659
+ }]
4660
+ }] });
4661
+
4462
4662
  class DynamicDarkColorPipe {
4463
4663
  constructor() {
4464
4664
  this.cache = new Map();
4465
4665
  this.darkBackground = [18, 18, 18]; // #121212
4466
4666
  this.minContrast = 4.5;
4667
+ this._readableTextColorPipe = inject(ReadableTextColorPipe);
4467
4668
  }
4468
4669
  transform(styleStr) {
4469
4670
  if (!IsDarkMode() || !styleStr) {
@@ -4481,9 +4682,8 @@ class DynamicDarkColorPipe {
4481
4682
  // BACKGROUND EXISTS BUT NO TEXT COLOR
4482
4683
  // ---------------------------------------------------
4483
4684
  if (bgMatch && !colorMatch) {
4484
- const bgRgb = this.parseColor(bgMatch[1].trim());
4485
- if (bgRgb) {
4486
- const textColor = this.getReadableTextColor(bgRgb);
4685
+ const textColor = this._readableTextColorPipe.transform(bgMatch[1].trim());
4686
+ if (textColor) {
4487
4687
  newStyle += `; color: ${textColor};`;
4488
4688
  }
4489
4689
  this.cache.set(styleStr, newStyle);
@@ -4507,11 +4707,6 @@ class DynamicDarkColorPipe {
4507
4707
  this.cache.set(styleStr, newStyle);
4508
4708
  return newStyle;
4509
4709
  }
4510
- getReadableTextColor(bgRgb) {
4511
- const whiteContrast = this.getContrastRatio([255, 255, 255], bgRgb);
4512
- const blackContrast = this.getContrastRatio([0, 0, 0], bgRgb);
4513
- return whiteContrast > blackContrast ? '#ffffff' : '#000000';
4514
- }
4515
4710
  // ---------------------------------------------------
4516
4711
  // 🎯 Adjust until contrast >= 4.5
4517
4712
  // ---------------------------------------------------
@@ -4874,6 +5069,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
4874
5069
  }]
4875
5070
  }] });
4876
5071
 
5072
+ /**
5073
+ * یک ساعتِ سراسری به‌صورت سیگنال؛ هر چند ثانیه یک‌بار «الان» را به‌روز می‌کند
5074
+ * تا متن‌های نسبیِ زمان (مثلِ «۲ دقیقه پیش») خودشان زنده به‌روز شوند.
5075
+ *
5076
+ * چون یک تایمرِ مشترک برای کلِ برنامه استفاده می‌شود، تعدادِ زیادی متنِ نسبی
5077
+ * هم بدونِ ساختنِ تایمرِ جداگانه برای هرکدام، هم‌زمان به‌روز می‌مانند.
5078
+ */
5079
+ class RelativeTimeService {
5080
+ constructor() {
5081
+ this._now = signal(Date.now(), /* @ts-ignore */
5082
+ ...(ngDevMode ? [{ debugName: "_now" }] : /* istanbul ignore next */ []));
5083
+ this._nowReadonly = this._now.asReadonly();
5084
+ this.intervalId = setInterval(() => this._now.set(Date.now()), RelativeTimeService.TICK_MS);
5085
+ }
5086
+ /** فاصله‌ی به‌روزرسانیِ «الان» بر حسبِ میلی‌ثانیه. */
5087
+ static { this.TICK_MS = 10_000; }
5088
+ /** سیگنالِ «الان» (میلی‌ثانیه)؛ به‌صورتِ دوره‌ای به‌روز می‌شود. */
5089
+ get now() {
5090
+ return this._nowReadonly;
5091
+ }
5092
+ ngOnDestroy() {
5093
+ clearInterval(this.intervalId);
5094
+ }
5095
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RelativeTimeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5096
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RelativeTimeService, providedIn: 'root' }); }
5097
+ }
5098
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RelativeTimeService, decorators: [{
5099
+ type: Injectable,
5100
+ args: [{ providedIn: 'root' }]
5101
+ }] });
5102
+
5103
+ /**
5104
+ * تاریخ را به متنِ نسبیِ فارسی تبدیل می‌کند و با گذرِ زمان خودش زنده به‌روز می‌شود.
5105
+ *
5106
+ * استفاده در قالب:
5107
+ * ```html
5108
+ * <span>{{ lastUpdateTime | relativeDate }}</span>
5109
+ * ```
5110
+ *
5111
+ * پایپ ناخالص (`pure: false`) است تا با تغییرِ زمان دوباره اجرا شود. زمانِ مرجع از
5112
+ * سیگنالِ مشترکِ {@link RelativeTimeService} می‌آید و در هر تیکِ آن، ویو برای بازبینی
5113
+ * علامت زده می‌شود (سازگار با OnPush و حالتِ zoneless). Angular خروجیِ درون‌یابی را
5114
+ * فقط وقتی متن **واقعاً تغییر کند** در DOM اعمال می‌کند، پس رندرِ بیهوده رخ نمی‌دهد.
5115
+ */
5116
+ class RelativeDatePipe {
5117
+ constructor() {
5118
+ this.relativeTime = inject(RelativeTimeService);
5119
+ this.cdr = inject(ChangeDetectorRef);
5120
+ // The shared clock signal only drives periodic re-checks (OnPush/zoneless friendly).
5121
+ effect(() => {
5122
+ this.relativeTime.now();
5123
+ this.cdr.markForCheck();
5124
+ });
5125
+ }
5126
+ transform(value) {
5127
+ // Compare against the real wall clock, not the signal: the signal ticks every few
5128
+ // seconds and can lag behind "now", which would make a just-set timestamp read as
5129
+ // being in the future («چند ثانیه دیگر») until the next tick.
5130
+ return toRelativeDate(value);
5131
+ }
5132
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RelativeDatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
5133
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: RelativeDatePipe, isStandalone: false, name: "relativeDate", pure: false }); }
5134
+ }
5135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: RelativeDatePipe, decorators: [{
5136
+ type: Pipe,
5137
+ args: [{
5138
+ name: 'relativeDate',
5139
+ pure: false,
5140
+ standalone: false
5141
+ }]
5142
+ }], ctorParameters: () => [] });
5143
+
4877
5144
  class ApiService {
4878
5145
  constructor() {
4879
5146
  this.portalLoginUrl = `/api/auth/portal/login`;
@@ -6155,7 +6422,7 @@ class ApplicationCtrlrService {
6155
6422
  this._selectedSystemTitle$ = new Subject();
6156
6423
  this._systemLocationHref$ = new BehaviorSubject({});
6157
6424
  this._isMobile = getDeviceIsMobile();
6158
- this._document = inject(DOCUMENT);
6425
+ this._document = inject(DOCUMENT$1);
6159
6426
  this._router = inject(Router);
6160
6427
  this._searchService = inject(SearchService);
6161
6428
  this._titleService = inject(Title);
@@ -6567,7 +6834,7 @@ function reportRoutes(authGuard = false) {
6567
6834
  return {
6568
6835
  path: 'report/:id',
6569
6836
  canActivate: authGuard ? [AuthGuard] : [],
6570
- loadChildren: () => import('./barsa-novin-ray-core-barsa-report-page.module-BIBAUbnS.mjs').then((m) => m.BarsaReportPageModule),
6837
+ loadChildren: () => import('./barsa-novin-ray-core-barsa-report-page.module-CpACJpmQ.mjs').then((m) => m.BarsaReportPageModule),
6571
6838
  resolve: {
6572
6839
  breadcrumb: ReportBreadcrumbResolver
6573
6840
  }
@@ -6597,7 +6864,7 @@ class PortalService {
6597
6864
  this._router = inject(Router);
6598
6865
  this._location = inject(Location);
6599
6866
  this._localStorage = inject(LocalStorageService);
6600
- this._document = inject(DOCUMENT);
6867
+ this._document = inject(DOCUMENT$1);
6601
6868
  this._applicationCtrlrService = inject(ApplicationCtrlrService);
6602
6869
  this._deviceSizeSource = new BehaviorSubject(this._initalizeDeviceSize());
6603
6870
  this._loggedInSource = new BehaviorSubject(false);
@@ -7345,7 +7612,9 @@ class PortalService {
7345
7612
  }
7346
7613
  return params;
7347
7614
  }
7348
- ShowFormPanelControl(formpanelCtrlr, router, activatedRoute, dialogComponent, isPage, vcr, isReload = false) {
7615
+ ShowFormPanelControl(formpanelCtrlr, router, activatedRoute, dialogComponent, isPage, vcr, isReload = false,
7616
+ // اگر RoutingServiceِ فراخوان (فرمِ والد) خودش مودال باز شده باشد، فرمِ فرزند هم مودال باز می‌شود.
7617
+ callerIsModal = false) {
7349
7618
  if (!formpanelCtrlr) {
7350
7619
  console.warn('form panel controler is undefined!');
7351
7620
  return;
@@ -7360,6 +7629,9 @@ class PortalService {
7360
7629
  if (modalSetting) {
7361
7630
  isModal = true;
7362
7631
  }
7632
+ // «مودال، مودال می‌زاید»: اگر فرمِ والد مودال بود، این فرم هم مودال باز شود
7633
+ // تا با ناوبریِ صفحه، دیالوگِ والد بسته نشود.
7634
+ isModal = isModal || callerIsModal;
7363
7635
  formpanelCtrlr.Setting.IsModal = isModal;
7364
7636
  formpanelCtrlr.IsModal = isModal;
7365
7637
  const id = getUniqueId(4);
@@ -7591,7 +7863,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
7591
7863
  }], ctorParameters: () => [] });
7592
7864
 
7593
7865
  class UlvMainService {
7594
- /** Inserted by Angular inject() migration for backwards compatibility */
7595
7866
  constructor() {
7596
7867
  this.moDataListSource = new BehaviorSubject([]);
7597
7868
  this._cartableTemplates$ = new BehaviorSubject({});
@@ -7673,6 +7944,7 @@ class UlvMainService {
7673
7944
  this._parentHeightSource = new BehaviorSubject(0);
7674
7945
  this._moveUpAccessSource = new BehaviorSubject(false);
7675
7946
  this._reorderGroupbySource = new BehaviorSubject([]);
7947
+ this._pollingInterval = new BehaviorSubject(0);
7676
7948
  this.context$ = this._contextSource
7677
7949
  .asObservable()
7678
7950
  .pipe(takeUntil(this._onDestroy$), tap((context) => (this.context = context)), tap((context) => this._initialize(context)), tap((context) => this._addEventListener(context)))
@@ -7693,6 +7965,12 @@ class UlvMainService {
7693
7965
  this.searchPanelUi$ = this._searchPanelUiSource.asObservable().pipe(takeUntil(this._onDestroy$), tap((searchPanel) => this._addDefaultSearchPanelSettings(searchPanel)));
7694
7966
  this.openSearchPanelHiddenSettings$ = this._openSearchPanelHiddenSettingsSource.asObservable();
7695
7967
  this.pagingSetting$ = this._pagingSettingSource.asObservable().pipe(takeUntil(this._onDestroy$));
7968
+ this._pollingInterval
7969
+ .asObservable()
7970
+ .pipe(takeUntil(this._onDestroy$), distinctUntilChanged(),
7971
+ // با هر بار تغییر بازه، interval قبلی کنسل و از نو ساخته می‌شود؛ صفر یا منفی یعنی polling خاموش.
7972
+ switchMap$1((ms) => (ms > 0 ? timer(ms, ms) : EMPTY)), tap(() => this.executeToolbarButton('RefreshReport', {})))
7973
+ .subscribe();
7696
7974
  this.toolbarButtons$ = combineLatest([
7697
7975
  this._toolbarButtonsWorkflowButtons.asObservable(),
7698
7976
  this._toolbarButtonsSource.asObservable()
@@ -7950,6 +8228,10 @@ class UlvMainService {
7950
8228
  this._inlineEditModeSource
7951
8229
  ]).pipe(map(([moveUp, groupby, inlineEdit]) => moveUp === true && !groupby.length && !inlineEdit), distinctUntilChanged());
7952
8230
  }
8231
+ setPollingInterval(pollingInterval) {
8232
+ // مقدار از سرور به‌صورت عددِ اعشاریِ ساعت.دقیقه (hh:mm) می‌آید؛ به میلی‌ثانیه تبدیل می‌شود.
8233
+ this._pollingInterval.next(hhmmToMs(pollingInterval));
8234
+ }
7953
8235
  setReorderGroupby(groupby) {
7954
8236
  this._reorderGroupbySource.next(groupby ?? []);
7955
8237
  }
@@ -9964,6 +10246,8 @@ class RoutingService {
9964
10246
  }
9965
10247
  };
9966
10248
  this.isFirstPage = true;
10249
+ /** true اگر فرمِ این RoutingService خودش به‌صورت مودال (داخل دیالوگ) باز شده باشد. */
10250
+ this.isOpenedAsModal = false;
9967
10251
  this.masterDetails = false;
9968
10252
  this.isMobile = getDeviceIsMobile();
9969
10253
  this._activatedRoute = inject(ActivatedRoute);
@@ -10018,7 +10302,7 @@ class RoutingService {
10018
10302
  BarsaApi.Bw.FormHandler = this.parentContainer;
10019
10303
  }
10020
10304
  _showFormPanel(refreshOnly = false) {
10021
- this._portalService.ShowFormPanelControl(this.formpanelCtrlr, this._router, this._activatedRoute, this._formDialogComponent, this.isFirstPage, this._vcr, refreshOnly);
10305
+ this._portalService.ShowFormPanelControl(this.formpanelCtrlr, this._router, this._activatedRoute, this._formDialogComponent, this.isFirstPage, this._vcr, refreshOnly, this.isOpenedAsModal);
10022
10306
  }
10023
10307
  navigate(navigation, isRelative, queryParams, state) {
10024
10308
  if (this.masterDetails && !this.isMobile) {
@@ -10589,6 +10873,9 @@ class FieldBaseComponent extends BaseComponent {
10589
10873
  get customFieldInfo() {
10590
10874
  return this.context.Setting.CustomFieldInfo;
10591
10875
  }
10876
+ get Mo() {
10877
+ return this._formPanelService.mo;
10878
+ }
10592
10879
  constructor() {
10593
10880
  super();
10594
10881
  this.valueChange = new EventEmitter();
@@ -10619,6 +10906,7 @@ class FieldBaseComponent extends BaseComponent {
10619
10906
  this._renderer2 = inject(Renderer2);
10620
10907
  this._activatedRoute = inject(ActivatedRoute);
10621
10908
  this._domSanitizer = inject(DomSanitizer);
10909
+ this._formPanelService = inject(FormPanelService);
10622
10910
  this._uploadService = inject(UploadService, { self: true, optional: true });
10623
10911
  this._dateService = inject(DateService, { self: true, optional: true });
10624
10912
  this._audioRecorder = inject(AudioRecordingService, { self: true, optional: true });
@@ -13018,6 +13306,11 @@ class FormComponent extends BaseComponent {
13018
13306
  if (this._routingService) {
13019
13307
  this._routingService.FormPanelCtrlr = formpanelCtrlr;
13020
13308
  formpanelCtrlr.Page = this._routingService;
13309
+ // اگر این فرم داخل دیالوگ (مودال) باز شده، RoutingServiceاش را مودال علامت می‌زنیم تا
13310
+ // فرم‌های فرزندش هم مودال باز شوند (قانونِ «مودال، مودال می‌زاید» در ShowFormPanelControl).
13311
+ if (this.params && this.params.inDialog) {
13312
+ this._routingService.isOpenedAsModal = true;
13313
+ }
13021
13314
  }
13022
13315
  const nav = this._router.getCurrentNavigation();
13023
13316
  formpanelCtrlr.FormRequestParams.state = nav?.extras.state;
@@ -13873,6 +14166,14 @@ class FillEmptySpaceDirective extends BaseDirective {
13873
14166
  const roTarget = this.getContainerElement();
13874
14167
  this._ro = new ResizeObserver(() => this.scheduleMeasure());
13875
14168
  this._ro.observe(roTarget);
14169
+ // Also observe the host itself. In `viewport` mode the container resolves to
14170
+ // `document.documentElement`, which never resizes when the host transitions from
14171
+ // hidden/0-size (e.g. an inactive tab) to visible — so the fill height would never
14172
+ // be (re)applied. Observing the host recovers the measurement once it gains a box.
14173
+ const host = this._el.nativeElement;
14174
+ if (host !== roTarget) {
14175
+ this._ro.observe(host);
14176
+ }
13876
14177
  window.addEventListener('resize', this._onWindowResize);
13877
14178
  }
13878
14179
  teardownFillLayoutWatchers() {
@@ -13931,6 +14232,15 @@ class FillEmptySpaceDirective extends BaseDirective {
13931
14232
  }
13932
14233
  applyFillHeight(dom, px) {
13933
14234
  const prop = this.getStyleProperty();
14235
+ const signature = `${prop}:${px}`;
14236
+ // Skip redundant writes. Because we now also observe the host element, applying the
14237
+ // same height again would leave the ResizeObserver firing on a no-op change (harmless,
14238
+ // but noisy) and re-emit `heightChanged`. Guarding keeps it idempotent and avoids
14239
+ // "ResizeObserver loop" warnings.
14240
+ if (signature === this._lastAppliedSignature) {
14241
+ return;
14242
+ }
14243
+ this._lastAppliedSignature = signature;
13934
14244
  if (prop === 'min-height' || prop === 'max-height') {
13935
14245
  this._renderer2.setStyle(dom, 'height', 'auto');
13936
14246
  }
@@ -14667,6 +14977,7 @@ class BaseViewItemPropsComponent extends BaseViewPropsComponent {
14667
14977
  this._parentFormPanelService = inject(FormPanelService, { optional: true, skipSelf: true });
14668
14978
  this._formPanelService = inject(FormPanelService, { optional: true, self: true });
14669
14979
  this._ulvMainService = inject(UlvMainService, { optional: true });
14980
+ this._renderer2 = inject(Renderer2);
14670
14981
  this._saveEditedMo$ = new Subject();
14671
14982
  this._formpanelValueChanged$ = new Subject();
14672
14983
  this._saveEditedMo$
@@ -14677,7 +14988,9 @@ class BaseViewItemPropsComponent extends BaseViewPropsComponent {
14677
14988
  .subscribe((res) => {
14678
14989
  if (res.saved) {
14679
14990
  this.mo.$IsChecked = false;
14680
- this.mo.$State = 'Unchanged';
14991
+ if (this.extraRelation && this.extraRelation.RelationType !== 'Composition') {
14992
+ this.mo.$State = 'Unchanged';
14993
+ }
14681
14994
  this.editFormPanelValueChange.emit({ mo: this.mo, fieldDbName: '$InlineMoState' });
14682
14995
  // this._formpanelValueChanged$.next('');
14683
14996
  this._cdr.markForCheck();
@@ -14726,10 +15039,11 @@ class BaseViewItemPropsComponent extends BaseViewPropsComponent {
14726
15039
  this._log.error(nullOrUndefinedString('BaseViewItemPropsComponent=> _formPanelService'));
14727
15040
  }
14728
15041
  }
15042
+ this._addLastClass(this.last);
14729
15043
  }
14730
15044
  ngOnChanges(changes) {
14731
15045
  super.ngOnChanges(changes);
14732
- const { isChecked, inlineEditMode } = changes;
15046
+ const { isChecked, inlineEditMode, last } = changes;
14733
15047
  let needToLoadForm = false;
14734
15048
  if (this.inlineEditMode) {
14735
15049
  if (isChecked) {
@@ -14743,6 +15057,9 @@ class BaseViewItemPropsComponent extends BaseViewPropsComponent {
14743
15057
  }
14744
15058
  }
14745
15059
  }
15060
+ if (last) {
15061
+ this._addLastClass(last.currentValue);
15062
+ }
14746
15063
  if (isChecked && !isChecked.firstChange) {
14747
15064
  this._raiseWorkflowShareButtons(isChecked.currentValue);
14748
15065
  }
@@ -14859,6 +15176,11 @@ class BaseViewItemPropsComponent extends BaseViewPropsComponent {
14859
15176
  _trackByColumn(index, column) {
14860
15177
  return `${column.Name}${index}`;
14861
15178
  }
15179
+ _addLastClass(lastItem) {
15180
+ lastItem
15181
+ ? this._renderer2.addClass(this._el.nativeElement, 'last-item')
15182
+ : this._renderer2.removeClass(this._el.nativeElement, 'last-item');
15183
+ }
14862
15184
  _handleResetWorkflowState() {
14863
15185
  this._resetBruleActionMessage();
14864
15186
  this.workflowState.set({ state: '', error: null });
@@ -15025,7 +15347,7 @@ class BaseViewItemPropsComponent extends BaseViewPropsComponent {
15025
15347
  const customFormPanelUi = formPanelCtrlr.Adapter.Control;
15026
15348
  const parentMo = this._parentFormPanelService ? this._parentFormPanelService.mo : null;
15027
15349
  if (this.extraRelation && parentMo && this.extraRelation.RelationType === 'Composition') {
15028
- formPanelCtrlr.Mo.SetFValue(this.extraRelation.ParentFdName, parentMo);
15350
+ formPanelCtrlr.Mo.SetFValue(this.extraRelation.ParentFdName, parentMo.Id);
15029
15351
  // newFormSettings.Data.Mo[relation.ParentFdName] = parentMo.GetChangedObject();
15030
15352
  // newFormSettings.Data.Mo[relation.ParentFdName].$State = parentMo.$State;
15031
15353
  }
@@ -15830,10 +16152,30 @@ class RootPortalComponent extends PageBaseComponent {
15830
16152
  xl:tw-grid-cols-9 xl:tw-grid-cols-10 xl:tw-grid-cols-11 xl:tw-grid-cols-12"
15831
16153
  ></div>
15832
16154
  <div
15833
- class="tw-hidden 2xl:grid-cols-0 2xl:tw-grid-cols-1 2xl:tw-grid-cols-2 2xl:tw-grid-cols-3
15834
- 2xl:tw-grid-cols-4 2xl:tw-grid-cols-5 2xl:tw-grid-cols-6 2xl:tw-grid-cols-7 2xl:tw-grid-cols-8 2xl:tw-grid-cols-9
16155
+ class="tw-hidden 2xl:grid-cols-0 2xl:tw-grid-cols-1 2xl:tw-grid-cols-2 2xl:tw-grid-cols-3
16156
+ 2xl:tw-grid-cols-4 2xl:tw-grid-cols-5 2xl:tw-grid-cols-6 2xl:tw-grid-cols-7 2xl:tw-grid-cols-8 2xl:tw-grid-cols-9
15835
16157
  2xl:tw-grid-cols-10 2xl:tw-grid-cols-11 2xl:tw-grid-cols-12"
15836
16158
  ></div>
16159
+ <div
16160
+ class="tw-hidden tw-col-span-1 tw-col-span-2 tw-col-span-3 tw-col-span-4 tw-col-span-5 tw-col-span-6
16161
+ tw-col-span-7 tw-col-span-8 tw-col-span-9 tw-col-span-10 tw-col-span-11 tw-col-span-12"
16162
+ ></div>
16163
+ <div
16164
+ class="tw-hidden md:tw-col-span-1 md:tw-col-span-2 md:tw-col-span-3 md:tw-col-span-4 md:tw-col-span-5
16165
+ md:tw-col-span-6 md:tw-col-span-7 md:tw-col-span-8 md:tw-col-span-9 md:tw-col-span-10 md:tw-col-span-11 md:tw-col-span-12"
16166
+ ></div>
16167
+ <div
16168
+ class="tw-hidden lg:tw-col-span-1 lg:tw-col-span-2 lg:tw-col-span-3 lg:tw-col-span-4 lg:tw-col-span-5
16169
+ lg:tw-col-span-6 lg:tw-col-span-7 lg:tw-col-span-8 lg:tw-col-span-9 lg:tw-col-span-10 lg:tw-col-span-11 lg:tw-col-span-12"
16170
+ ></div>
16171
+ <div
16172
+ class="tw-hidden xl:tw-col-span-1 xl:tw-col-span-2 xl:tw-col-span-3 xl:tw-col-span-4 xl:tw-col-span-5
16173
+ xl:tw-col-span-6 xl:tw-col-span-7 xl:tw-col-span-8 xl:tw-col-span-9 xl:tw-col-span-10 xl:tw-col-span-11 xl:tw-col-span-12"
16174
+ ></div>
16175
+ <div
16176
+ class="tw-hidden 2xl:tw-col-span-1 2xl:tw-col-span-2 2xl:tw-col-span-3 2xl:tw-col-span-4 2xl:tw-col-span-5
16177
+ 2xl:tw-col-span-6 2xl:tw-col-span-7 2xl:tw-col-span-8 2xl:tw-col-span-9 2xl:tw-col-span-10 2xl:tw-col-span-11 2xl:tw-col-span-12"
16178
+ ></div>
15837
16179
  @if(inLocalMode()){
15838
16180
  <div class="fd-toolbar" style="flex-wrap:wrap;padding:0.5rem;height:auto">
15839
16181
  <button class="fd-button fd-button--attention is-compact" (click)="onRemoveOfflineData()">
@@ -15911,10 +16253,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
15911
16253
  xl:tw-grid-cols-9 xl:tw-grid-cols-10 xl:tw-grid-cols-11 xl:tw-grid-cols-12"
15912
16254
  ></div>
15913
16255
  <div
15914
- class="tw-hidden 2xl:grid-cols-0 2xl:tw-grid-cols-1 2xl:tw-grid-cols-2 2xl:tw-grid-cols-3
15915
- 2xl:tw-grid-cols-4 2xl:tw-grid-cols-5 2xl:tw-grid-cols-6 2xl:tw-grid-cols-7 2xl:tw-grid-cols-8 2xl:tw-grid-cols-9
16256
+ class="tw-hidden 2xl:grid-cols-0 2xl:tw-grid-cols-1 2xl:tw-grid-cols-2 2xl:tw-grid-cols-3
16257
+ 2xl:tw-grid-cols-4 2xl:tw-grid-cols-5 2xl:tw-grid-cols-6 2xl:tw-grid-cols-7 2xl:tw-grid-cols-8 2xl:tw-grid-cols-9
15916
16258
  2xl:tw-grid-cols-10 2xl:tw-grid-cols-11 2xl:tw-grid-cols-12"
15917
16259
  ></div>
16260
+ <div
16261
+ class="tw-hidden tw-col-span-1 tw-col-span-2 tw-col-span-3 tw-col-span-4 tw-col-span-5 tw-col-span-6
16262
+ tw-col-span-7 tw-col-span-8 tw-col-span-9 tw-col-span-10 tw-col-span-11 tw-col-span-12"
16263
+ ></div>
16264
+ <div
16265
+ class="tw-hidden md:tw-col-span-1 md:tw-col-span-2 md:tw-col-span-3 md:tw-col-span-4 md:tw-col-span-5
16266
+ md:tw-col-span-6 md:tw-col-span-7 md:tw-col-span-8 md:tw-col-span-9 md:tw-col-span-10 md:tw-col-span-11 md:tw-col-span-12"
16267
+ ></div>
16268
+ <div
16269
+ class="tw-hidden lg:tw-col-span-1 lg:tw-col-span-2 lg:tw-col-span-3 lg:tw-col-span-4 lg:tw-col-span-5
16270
+ lg:tw-col-span-6 lg:tw-col-span-7 lg:tw-col-span-8 lg:tw-col-span-9 lg:tw-col-span-10 lg:tw-col-span-11 lg:tw-col-span-12"
16271
+ ></div>
16272
+ <div
16273
+ class="tw-hidden xl:tw-col-span-1 xl:tw-col-span-2 xl:tw-col-span-3 xl:tw-col-span-4 xl:tw-col-span-5
16274
+ xl:tw-col-span-6 xl:tw-col-span-7 xl:tw-col-span-8 xl:tw-col-span-9 xl:tw-col-span-10 xl:tw-col-span-11 xl:tw-col-span-12"
16275
+ ></div>
16276
+ <div
16277
+ class="tw-hidden 2xl:tw-col-span-1 2xl:tw-col-span-2 2xl:tw-col-span-3 2xl:tw-col-span-4 2xl:tw-col-span-5
16278
+ 2xl:tw-col-span-6 2xl:tw-col-span-7 2xl:tw-col-span-8 2xl:tw-col-span-9 2xl:tw-col-span-10 2xl:tw-col-span-11 2xl:tw-col-span-12"
16279
+ ></div>
15918
16280
  @if(inLocalMode()){
15919
16281
  <div class="fd-toolbar" style="flex-wrap:wrap;padding:0.5rem;height:auto">
15920
16282
  <button class="fd-button fd-button--attention is-compact" (click)="onRemoveOfflineData()">
@@ -16194,59 +16556,88 @@ class ImageLazyDirective extends BaseDirective {
16194
16556
  super();
16195
16557
  this.auto = true;
16196
16558
  this.threshold = 20;
16559
+ this.imageLoadStarted = new EventEmitter();
16197
16560
  this.imageLoaded = new EventEmitter();
16198
- this.portalService = inject(PortalService);
16199
- this._imageViewed$ = new Subject();
16561
+ this.imageLoadError = new EventEmitter();
16562
+ this._observer = null;
16563
+ this._initialized = false;
16564
+ this._loadHandler = () => {
16565
+ if (!this.imgLazy || this._imgEl.getAttribute('src') !== this.imgLazy) {
16566
+ return;
16567
+ }
16568
+ this._portalService.cachedImages[this.imgLazy] = true;
16569
+ this._imgEl.parentElement?.setAttribute('imgLoaded', 'true');
16570
+ this.imageLoaded.emit();
16571
+ };
16572
+ this._errorHandler = () => {
16573
+ if (!this.imgLazy || this._imgEl.getAttribute('src') !== this.imgLazy) {
16574
+ return;
16575
+ }
16576
+ this.imageLoadError.emit();
16577
+ };
16200
16578
  this._imgEl = this._el.nativeElement;
16201
16579
  }
16202
16580
  ngOnInit() {
16203
16581
  super.ngOnInit();
16204
- const supports = 'loading' in HTMLImageElement.prototype;
16205
- if (supports) {
16206
- this.handleLoadEvent(this._imgEl);
16207
- this._imgEl.src = this.imgLazy;
16208
- this._imgEl.setAttribute('loading', 'lazy');
16582
+ this._initialized = true;
16583
+ this._imgEl.setAttribute('loading', 'lazy');
16584
+ this._imgEl.setAttribute('decoding', 'async');
16585
+ this._imgEl.addEventListener('load', this._loadHandler);
16586
+ this._imgEl.addEventListener('error', this._errorHandler);
16587
+ this._observeCurrentImage();
16588
+ }
16589
+ ngOnChanges(changes) {
16590
+ super.ngOnChanges(changes);
16591
+ if (!this._initialized || !changes['imgLazy']) {
16209
16592
  return;
16210
16593
  }
16211
- const timer1 = timer(1000);
16212
- if (this.auto) {
16213
- const isCached = this.portalService.cachedImages[this.imgLazy];
16214
- if (isCached) {
16215
- this._imgEl.src = this.imgLazy;
16216
- return;
16217
- }
16218
- merge([timer1, fromEvent(window, 'scroll')])
16219
- .pipe(takeUntil(this._imageViewed$), takeUntil(this._onDestroy$), debounceTime(20), filter(() => this.isInViewport()), tap(() => this.showImage()))
16220
- .subscribe();
16221
- }
16594
+ this._resetImage();
16595
+ this._observeCurrentImage();
16596
+ }
16597
+ ngOnDestroy() {
16598
+ this._disconnectObserver();
16599
+ this._imgEl.removeEventListener('load', this._loadHandler);
16600
+ this._imgEl.removeEventListener('error', this._errorHandler);
16601
+ super.ngOnDestroy();
16222
16602
  }
16223
16603
  showImage() {
16224
- const imgEl = this._imgEl;
16225
- if (this.imgLazy === this._imgEl.src) {
16226
- imgEl.parentElement?.setAttribute('imgLoaded', 'true');
16604
+ if (!this.imgLazy) {
16227
16605
  return;
16228
16606
  }
16229
- this.portalService.cachedImages[this.imgLazy] = true;
16230
- imgEl.src = this.imgLazy;
16231
- this.handleLoadEvent(imgEl);
16232
- this._imageViewed$.next();
16607
+ if (this._imgEl.getAttribute('src') === this.imgLazy) {
16608
+ return;
16609
+ }
16610
+ this.imageLoadStarted.emit();
16611
+ this._imgEl.setAttribute('src', this.imgLazy);
16612
+ this._disconnectObserver();
16233
16613
  }
16234
- handleLoadEvent(imgEl) {
16235
- imgEl.addEventListener('load', () => {
16236
- imgEl.parentElement?.setAttribute('imgLoaded', 'true');
16237
- this.imageLoaded.emit();
16238
- });
16614
+ _observeCurrentImage() {
16615
+ this._disconnectObserver();
16616
+ if (!this.auto || !this.imgLazy) {
16617
+ return;
16618
+ }
16619
+ if (typeof IntersectionObserver === 'undefined') {
16620
+ this.showImage();
16621
+ return;
16622
+ }
16623
+ this._observer = new IntersectionObserver((entries) => {
16624
+ if (entries.some((entry) => entry.isIntersecting)) {
16625
+ this.showImage();
16626
+ }
16627
+ }, { rootMargin: `${Math.max(0, this.threshold)}px` });
16628
+ this._observer.observe(this._imgEl);
16629
+ }
16630
+ _resetImage() {
16631
+ this._disconnectObserver();
16632
+ this._imgEl.removeAttribute('src');
16633
+ this._imgEl.parentElement?.removeAttribute('imgLoaded');
16239
16634
  }
16240
- isInViewport() {
16241
- const rect = this._imgEl.getBoundingClientRect();
16242
- const isInViewport = rect.top >= 0 &&
16243
- rect.left >= 0 &&
16244
- rect.bottom - this.threshold <= (window.innerHeight || document.documentElement.clientHeight) &&
16245
- rect.right <= (window.innerWidth || document.documentElement.clientWidth);
16246
- return isInViewport;
16635
+ _disconnectObserver() {
16636
+ this._observer?.disconnect();
16637
+ this._observer = null;
16247
16638
  }
16248
16639
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ImageLazyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
16249
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ImageLazyDirective, isStandalone: false, selector: "[imgLazy]", inputs: { auto: "auto", threshold: "threshold", imgLazy: "imgLazy" }, outputs: { imageLoaded: "imageLoaded" }, usesInheritance: true, ngImport: i0 }); }
16640
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ImageLazyDirective, isStandalone: false, selector: "[imgLazy]", inputs: { auto: "auto", threshold: "threshold", imgLazy: "imgLazy" }, outputs: { imageLoadStarted: "imageLoadStarted", imageLoaded: "imageLoaded", imageLoadError: "imageLoadError" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
16250
16641
  }
16251
16642
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ImageLazyDirective, decorators: [{
16252
16643
  type: Directive,
@@ -16258,8 +16649,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
16258
16649
  type: Input
16259
16650
  }], threshold: [{
16260
16651
  type: Input
16652
+ }], imageLoadStarted: [{
16653
+ type: Output
16261
16654
  }], imageLoaded: [{
16262
16655
  type: Output
16656
+ }], imageLoadError: [{
16657
+ type: Output
16263
16658
  }], imgLazy: [{
16264
16659
  type: Input
16265
16660
  }] } });
@@ -17113,7 +17508,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
17113
17508
  class BodyClickDirective extends BaseDirective {
17114
17509
  constructor() {
17115
17510
  super(...arguments);
17116
- this._document = inject(DOCUMENT);
17511
+ this._document = inject(DOCUMENT$1);
17117
17512
  }
17118
17513
  onClick() {
17119
17514
  if (this.disableBodyClick) {
@@ -17366,7 +17761,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
17366
17761
  class LabelmandatoryDirective extends BaseDirective {
17367
17762
  constructor() {
17368
17763
  super(...arguments);
17369
- this._document = inject(DOCUMENT);
17764
+ this._document = inject(DOCUMENT$1);
17370
17765
  }
17371
17766
  ngOnInit() {
17372
17767
  super.ngOnInit();
@@ -18145,7 +18540,7 @@ class TooltipDirective {
18145
18540
  ...(ngDevMode ? [{ debugName: "bnrcTooltip" }] : /* istanbul ignore next */ []));
18146
18541
  this.hostRef = inject(ElementRef);
18147
18542
  this.renderer = inject(Renderer2);
18148
- this.document = inject(DOCUMENT);
18543
+ this.document = inject(DOCUMENT$1);
18149
18544
  this.tooltipEl = null;
18150
18545
  }
18151
18546
  ngOnDestroy() {
@@ -18356,6 +18751,132 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
18356
18751
  type: Input
18357
18752
  }] } });
18358
18753
 
18754
+ /**
18755
+ * یک container-query دستیِ قابلِ‌استفاده‌ی مجدد: عرضِ خودِ المان (نه viewport) را با
18756
+ * `ResizeObserver` رصد می‌کند و بر اساس آن، تعدادِ ستون‌های گریدِ ۱۲تاییِ فاندامنتال را
18757
+ * محاسبه و از طریقِ `(colSpanChange)` منتشر می‌کند. همچنین با `exportAs` قابلِ خواندنِ
18758
+ * مستقیمِ `colSpan`/`breakpoint` در همان قالب است.
18759
+ *
18760
+ * نمونه:
18761
+ * ```html
18762
+ * <fd-layout-grid
18763
+ * [bsuResponsiveGridCols]="{ s: 1, m: 2, l: 3, xl: 4 }"
18764
+ * (colSpanChange)="colSpan = $event">
18765
+ * <div [fdLayoutGridCol]="colSpan">...</div>
18766
+ * </fd-layout-grid>
18767
+ * ```
18768
+ */
18769
+ class ResponsiveGridColsDirective {
18770
+ constructor() {
18771
+ /** تعدادِ کارت در ردیف به‌ازای هر breakpoint. */
18772
+ this.config = null;
18773
+ /** آستانه‌ها؛ پیش‌فرض هم‌راستا با گریدِ فاندامنتال. */
18774
+ this.breakpoints = { m: 601, l: 1025, xl: 1441 };
18775
+ /** span مؤثرِ گریدِ ۱۲تاییِ فاندامنتال (۱..۱۲) بر اساس عرضِ کانتینر. */
18776
+ this.colSpanChange = new EventEmitter();
18777
+ /** تعدادِ ستون در ردیف (برای گریدهای غیرِ ۱۲تایی مثل CSS/Tailwind grid). */
18778
+ this.colsPerRowChange = new EventEmitter();
18779
+ /** breakpoint فعلیِ کانتینر. */
18780
+ this.breakpointChange = new EventEmitter();
18781
+ this.breakpoint = 's';
18782
+ this.colSpan = 12;
18783
+ this.colsPerRow = 1;
18784
+ this._el = inject(ElementRef);
18785
+ this._cdr = inject(ChangeDetectorRef);
18786
+ this._zone = inject(NgZone);
18787
+ }
18788
+ ngAfterViewInit() {
18789
+ this._apply(this._width());
18790
+ try {
18791
+ this._ro = new ResizeObserver((entries) => {
18792
+ const width = entries[0]?.contentRect?.width ?? this._width();
18793
+ this._zone.run(() => this._apply(width));
18794
+ });
18795
+ this._ro.observe(this._el.nativeElement);
18796
+ }
18797
+ catch {
18798
+ // مرورگرِ خیلی قدیمی بدونِ ResizeObserver → فقط اندازه‌ی اولیه اعمال می‌شود
18799
+ }
18800
+ }
18801
+ ngOnChanges(changes) {
18802
+ // تغییرِ config/breakpoints در زمانِ اجرا هم دوباره اعمال شود
18803
+ if ((changes.config && !changes.config.firstChange) ||
18804
+ (changes.breakpoints && !changes.breakpoints.firstChange)) {
18805
+ this._apply(this._width());
18806
+ }
18807
+ }
18808
+ ngOnDestroy() {
18809
+ this._ro?.disconnect();
18810
+ }
18811
+ _width() {
18812
+ return this._el.nativeElement.getBoundingClientRect().width;
18813
+ }
18814
+ _resolveBreakpoint(width) {
18815
+ const { m, l, xl } = this.breakpoints;
18816
+ return width < m ? 's' : width < l ? 'm' : width < xl ? 'l' : 'xl';
18817
+ }
18818
+ /** تعدادِ کارت در ردیف برای این breakpoint، با fallback به breakpointهای کوچک‌تر. */
18819
+ _colsPerRow(bp) {
18820
+ const c = this.config || {};
18821
+ const chain = {
18822
+ s: [c.s],
18823
+ m: [c.m, c.s],
18824
+ l: [c.l, c.m, c.s],
18825
+ xl: [c.xl, c.l, c.m, c.s]
18826
+ };
18827
+ const value = chain[bp].find((v) => v != null && +v > 0);
18828
+ return value && +value > 0 ? +value : 1;
18829
+ }
18830
+ _apply(width) {
18831
+ if (!width) {
18832
+ return;
18833
+ }
18834
+ const bp = this._resolveBreakpoint(width);
18835
+ const perRow = this._colsPerRow(bp);
18836
+ const span = Math.max(1, Math.min(12, Math.round(12 / perRow)));
18837
+ const bpChanged = bp !== this.breakpoint;
18838
+ const perRowChanged = perRow !== this.colsPerRow;
18839
+ const spanChanged = span !== this.colSpan;
18840
+ if (!bpChanged && !perRowChanged && !spanChanged) {
18841
+ return;
18842
+ }
18843
+ this.breakpoint = bp;
18844
+ this.colsPerRow = perRow;
18845
+ this.colSpan = span;
18846
+ this._cdr.markForCheck();
18847
+ if (spanChanged) {
18848
+ this.colSpanChange.emit(span);
18849
+ }
18850
+ if (perRowChanged) {
18851
+ this.colsPerRowChange.emit(perRow);
18852
+ }
18853
+ if (bpChanged) {
18854
+ this.breakpointChange.emit(bp);
18855
+ }
18856
+ }
18857
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ResponsiveGridColsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
18858
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: ResponsiveGridColsDirective, isStandalone: false, selector: "[bsuResponsiveGridCols]", inputs: { config: ["bsuResponsiveGridCols", "config"], breakpoints: "breakpoints" }, outputs: { colSpanChange: "colSpanChange", colsPerRowChange: "colsPerRowChange", breakpointChange: "breakpointChange" }, exportAs: ["bsuResponsiveGridCols"], usesOnChanges: true, ngImport: i0 }); }
18859
+ }
18860
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ResponsiveGridColsDirective, decorators: [{
18861
+ type: Directive,
18862
+ args: [{
18863
+ selector: '[bsuResponsiveGridCols]',
18864
+ exportAs: 'bsuResponsiveGridCols',
18865
+ standalone: false
18866
+ }]
18867
+ }], propDecorators: { config: [{
18868
+ type: Input,
18869
+ args: ['bsuResponsiveGridCols']
18870
+ }], breakpoints: [{
18871
+ type: Input
18872
+ }], colSpanChange: [{
18873
+ type: Output
18874
+ }], colsPerRowChange: [{
18875
+ type: Output
18876
+ }], breakpointChange: [{
18877
+ type: Output
18878
+ }] } });
18879
+
18359
18880
  class SafeBottomDirective extends BaseDirective {
18360
18881
  constructor() {
18361
18882
  super(...arguments);
@@ -18820,6 +19341,9 @@ class ReportContainerComponent extends BaseComponent {
18820
19341
  }
18821
19342
  ngOnInit() {
18822
19343
  super.ngOnInit();
19344
+ this._addUlvMainUi();
19345
+ }
19346
+ _addUlvMainUi() {
18823
19347
  let ulvParam;
18824
19348
  if (!this.settings.RelatedReport) {
18825
19349
  const id = this._activatedRoute.snapshot.params['id'];
@@ -18851,7 +19375,12 @@ class ReportContainerComponent extends BaseComponent {
18851
19375
  UlvParams: ulvParam
18852
19376
  }, this.vcr, this._injector, this._environmentInjector, this.settings.IsReportPage)
18853
19377
  .pipe(takeUntil(this._onDestroy$), catchError$1((err) => throwError(err)), finalize(() => this._loadingSource.next(false)))
18854
- .subscribe();
19378
+ .subscribe((ulvMainCtrl) => (this._ulvMainCtrlr = ulvMainCtrl));
19379
+ }
19380
+ ReloadReport() {
19381
+ this.vcr.clear();
19382
+ this._ulvMainCtrlr && this._ulvMainCtrlr.Destroy();
19383
+ this._addUlvMainUi();
18855
19384
  }
18856
19385
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReportContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18857
19386
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: ReportContainerComponent, isStandalone: false, selector: "bnrc-report-container", inputs: { settings: "settings" }, usesInheritance: true, ngImport: i0, template: "@if ((loading$ | async)!!) {\r\n<bsu-mask></bsu-mask>\r\n}\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "pipe", type: i1$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -19300,7 +19829,7 @@ class ReportEmptyPageComponent extends PageWithFormHandlerBaseComponent {
19300
19829
  </ng-template>
19301
19830
  <ng-container #containerRef></ng-container>
19302
19831
  <router-outlet></router-outlet>
19303
- `, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: ReportNavigatorComponent, selector: "bnrc-report-navigator" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19832
+ `, isInline: true, styles: [":host{display:flex;min-height:0;height:100%;flex-direction:column;flex:1}\n"], dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: ReportNavigatorComponent, selector: "bnrc-report-navigator" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19304
19833
  }
19305
19834
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ReportEmptyPageComponent, decorators: [{
19306
19835
  type: Component,
@@ -19310,7 +19839,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
19310
19839
  </ng-template>
19311
19840
  <ng-container #containerRef></ng-container>
19312
19841
  <router-outlet></router-outlet>
19313
- `, providers: [RoutingService, ContainerService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [":host{display:block}\n"] }]
19842
+ `, providers: [RoutingService, ContainerService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [":host{display:flex;min-height:0;height:100%;flex-direction:column;flex:1}\n"] }]
19314
19843
  }], propDecorators: { blockTemplate: [{
19315
19844
  type: ViewChild,
19316
19845
  args: ['block', { static: true }]
@@ -19493,7 +20022,7 @@ class ResizableDirective {
19493
20022
  constructor() {
19494
20023
  this.resizableComplete = new EventEmitter();
19495
20024
  this.resizableStart = new EventEmitter();
19496
- this.documentRef = inject(DOCUMENT);
20025
+ this.documentRef = inject(DOCUMENT$1);
19497
20026
  this.elementRef = inject(ElementRef);
19498
20027
  this.resizable = fromEvent(this.elementRef.nativeElement, 'mousedown').pipe(tap((e) => e.preventDefault()), tap(() => this.resizableStart.emit()), switchMap$1(() => {
19499
20028
  const elDom = this.elementRef.nativeElement;
@@ -20108,6 +20637,7 @@ const directives = [
20108
20637
  SimplebarDirective,
20109
20638
  LeafletLongPressDirective,
20110
20639
  ResizeHandlerDirective,
20640
+ ResponsiveGridColsDirective,
20111
20641
  SafeBottomDirective,
20112
20642
  MoLinkerDirective
20113
20643
  ];
@@ -20147,6 +20677,7 @@ const pipes = [
20147
20677
  EnumCaptionPipe,
20148
20678
  CanUploadFilePipe,
20149
20679
  RemoveNewlinePipe,
20680
+ RelativeDatePipe,
20150
20681
  ConvertToStylePipe,
20151
20682
  FilterPipe,
20152
20683
  FilterTabPipe,
@@ -20181,6 +20712,7 @@ const pipes = [
20181
20712
  SanitizeTextPipe,
20182
20713
  ColumnCustomComponentPipe,
20183
20714
  ColumnIconPipe,
20715
+ MoIconPipe,
20184
20716
  ColumnValuePipe,
20185
20717
  RowNumberPipe,
20186
20718
  ComboRowImagePipe,
@@ -20200,6 +20732,7 @@ const pipes = [
20200
20732
  LabelStarTrimPipe,
20201
20733
  SplitPipe,
20202
20734
  DynamicDarkColorPipe,
20735
+ ReadableTextColorPipe,
20203
20736
  ChunkArrayPipe,
20204
20737
  MapToChatMessagePipe,
20205
20738
  PicturesByGroupIdPipe,
@@ -20349,6 +20882,7 @@ class BarsaNovinRayCoreModule extends BaseModule {
20349
20882
  EnumCaptionPipe,
20350
20883
  CanUploadFilePipe,
20351
20884
  RemoveNewlinePipe,
20885
+ RelativeDatePipe,
20352
20886
  ConvertToStylePipe,
20353
20887
  FilterPipe,
20354
20888
  FilterTabPipe,
@@ -20383,6 +20917,7 @@ class BarsaNovinRayCoreModule extends BaseModule {
20383
20917
  SanitizeTextPipe,
20384
20918
  ColumnCustomComponentPipe,
20385
20919
  ColumnIconPipe,
20920
+ MoIconPipe,
20386
20921
  ColumnValuePipe,
20387
20922
  RowNumberPipe,
20388
20923
  ComboRowImagePipe,
@@ -20402,6 +20937,7 @@ class BarsaNovinRayCoreModule extends BaseModule {
20402
20937
  LabelStarTrimPipe,
20403
20938
  SplitPipe,
20404
20939
  DynamicDarkColorPipe,
20940
+ ReadableTextColorPipe,
20405
20941
  ChunkArrayPipe,
20406
20942
  MapToChatMessagePipe,
20407
20943
  PicturesByGroupIdPipe,
@@ -20460,6 +20996,7 @@ class BarsaNovinRayCoreModule extends BaseModule {
20460
20996
  SimplebarDirective,
20461
20997
  LeafletLongPressDirective,
20462
20998
  ResizeHandlerDirective,
20999
+ ResponsiveGridColsDirective,
20463
21000
  SafeBottomDirective,
20464
21001
  MoLinkerDirective], imports: [CommonModule,
20465
21002
  BarsaNovinRayCoreRoutingModule,
@@ -20498,6 +21035,7 @@ class BarsaNovinRayCoreModule extends BaseModule {
20498
21035
  EnumCaptionPipe,
20499
21036
  CanUploadFilePipe,
20500
21037
  RemoveNewlinePipe,
21038
+ RelativeDatePipe,
20501
21039
  ConvertToStylePipe,
20502
21040
  FilterPipe,
20503
21041
  FilterTabPipe,
@@ -20532,6 +21070,7 @@ class BarsaNovinRayCoreModule extends BaseModule {
20532
21070
  SanitizeTextPipe,
20533
21071
  ColumnCustomComponentPipe,
20534
21072
  ColumnIconPipe,
21073
+ MoIconPipe,
20535
21074
  ColumnValuePipe,
20536
21075
  RowNumberPipe,
20537
21076
  ComboRowImagePipe,
@@ -20551,6 +21090,7 @@ class BarsaNovinRayCoreModule extends BaseModule {
20551
21090
  LabelStarTrimPipe,
20552
21091
  SplitPipe,
20553
21092
  DynamicDarkColorPipe,
21093
+ ReadableTextColorPipe,
20554
21094
  ChunkArrayPipe,
20555
21095
  MapToChatMessagePipe,
20556
21096
  PicturesByGroupIdPipe,
@@ -20609,6 +21149,7 @@ class BarsaNovinRayCoreModule extends BaseModule {
20609
21149
  SimplebarDirective,
20610
21150
  LeafletLongPressDirective,
20611
21151
  ResizeHandlerDirective,
21152
+ ResponsiveGridColsDirective,
20612
21153
  SafeBottomDirective,
20613
21154
  MoLinkerDirective] }); }
20614
21155
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: BarsaNovinRayCoreModule, providers: [provideHttpClient(withXhr(), withInterceptorsFromDi())], imports: [CommonModule,
@@ -20640,5 +21181,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
20640
21181
  * Generated bundle index. Do not edit.
20641
21182
  */
20642
21183
 
20643
- export { ColSetting as $, APP_VERSION as A, BaseModule as B, BaseFormToolbaritemPropsComponent as C, DynamicComponentService as D, BaseItemContentPropsComponent as E, BaseReportModel as F, BaseSettingsService as G, BaseUlvSettingComponent as H, BaseViewContentPropsComponent as I, BaseViewItemPropsComponent as J, BaseViewPropsComponent as K, BbbTranslatePipe as L, BodyClickDirective as M, BoolControlInfoModel as N, BreadcrumbService as O, ButtonLoadingComponent as P, CalculateControlInfoModel as Q, ReportEmptyPageComponent as R, CalendarSettingsStore as S, CanUploadFilePipe as T, CardBaseItemContentPropsComponent as U, CardDynamicItemComponent as V, CardMediaSizePipe as W, CardViewService as X, ChangeLayoutInfoCustomUi as Y, ChunkArrayPipe as Z, CodeEditorControlInfoModel as _, AbsoluteDivBodyDirective as a, FileInfoCountPipe as a$, ColumnCustomComponentPipe as a0, ColumnCustomUiPipe as a1, ColumnIconPipe as a2, ColumnRendererBase as a3, ColumnRendererViewBase as a4, ColumnResizerDirective as a5, ColumnService as a6, ColumnValueDirective as a7, ColumnValueOfParametersPipe as a8, ColumnValuePipe as a9, DynamicDarkColorPipe as aA, DynamicFormComponent as aB, DynamicFormToolbaritemComponent as aC, DynamicItemComponent as aD, DynamicLayoutComponent as aE, DynamicRootVariableDirective as aF, DynamicStyleDirective as aG, DynamicUlvPagingComponent as aH, DynamicUlvToolbarComponent as aI, EllapsisTextDirective as aJ, EllipsifyDirective as aK, EmptyPageComponent as aL, EmptyPageWithRouterAndRouterOutletComponent as aM, EntitySettingsStore as aN, EnumCaptionPipe as aO, EnumControlInfoModel as aP, ExecuteDynamicCommand as aQ, ExecuteWorkflowChoiceDef as aR, ExistsColumnsPipe as aS, FORM_DIALOG_COMPONENT as aT, FieldBaseComponent as aU, FieldBaseController as aV, FieldDirective as aW, FieldInfoTypeEnum as aX, FieldUiComponent as aY, FieldViewBase as aZ, FileControlInfoModel as a_, ComboRowImagePipe as aa, CommandControlInfoModel as ab, ContainerComponent as ac, ContainerService as ad, ContextMenuPipe as ae, ControlUiPipe as af, ConvertToStylePipe as ag, CopyDirective as ah, CountDownDirective as ai, CustomCommand as aj, CustomInjector as ak, CustomRouteReuseStrategy as al, CustomUiRegistryService as am, DEFAULT_REPORT_LAYOUT_POLICY as an, DIALOG_SERVICE as ao, DateHijriService as ap, DateMiladiService as aq, DateRanges as ar, DateService as as, DateShamsiService as at, DateTimeControlInfoModel as au, DefaultCommandsAccessValue as av, DefaultGridSetting as aw, DeviceWidth as ax, DialogParams as ay, DynamicCommandDirective as az, AddDynamicFormStyles as b, ItemsRendererDirective as b$, FilePictureInfoModel as b0, FilesValidationHelper as b1, FillAllLayoutControls as b2, FillEmptySpaceDirective as b3, FilterColumnsByDetailsPipe as b4, FilterInlineActionListPipe as b5, FilterPipe as b6, FilterStringPipe as b7, FilterTabPipe as b8, FilterToolbarControlPipe as b9, GetDefaultMoObjectInfo as bA, GetImgTags as bB, GetViewableExtensions as bC, GetVisibleValue as bD, GridSetting as bE, GroupBy as bF, GroupByPipe as bG, GroupByService as bH, HeaderFacetValuePipe as bI, HideAcceptCancelButtonsPipe as bJ, HideColumnsInmobilePipe as bK, HistoryControlInfoModel as bL, HorizontalLayoutService as bM, HorizontalResponsiveDirective as bN, IconControlInfoModel as bO, IdbService as bP, ImageLazyDirective as bQ, ImageMimeType as bR, ImagetoPrint as bS, InMemoryStorageService as bT, IndexedDbService as bU, InputNumber as bV, IntersectionObserverDirective as bW, IntersectionStatus as bX, IsDarkMode as bY, IsExpandedNodePipe as bZ, IsImagePipe as b_, FilterWorkflowInMobilePipe as ba, FindColumnByDbNamePipe as bb, FindColumnsPipe as bc, FindGroup as bd, FindLayoutSettingFromLayout94 as be, FindPreviewColumnPipe as bf, FindToolbarItem as bg, FioriIconPipe as bh, FormBaseComponent as bi, FormCloseDirective as bj, FormComponent as bk, FormFieldReportPageComponent as bl, FormNewComponent as bm, FormPageBaseComponent as bn, FormPageComponent as bo, FormPanelService as bp, FormPropsBaseComponent as bq, FormService as br, FormToolbarBaseComponent as bs, FormToolbarButton as bt, GaugeControlInfoModel as bu, GeneralControlInfoModel as bv, GetAllColumnsSorted as bw, GetAllHorizontalFromLayout94 as bx, GetContentType as by, GetCssVariableValuePipe as bz, AffixRespondEvents as c, PromptUpdateService as c$, LabelStarTrimPipe as c0, LabelmandatoryDirective as c1, LayoutItemBaseComponent as c2, LayoutMainContentService as c3, LayoutPanelBaseComponent as c4, LayoutService as c5, LeafletLongPressDirective as c6, LinearListControlInfoModel as c7, LinearListHelper as c8, ListCountPipe as c9, NetworkStatusService as cA, NotFoundComponent as cB, NotificationService as cC, NowraptextDirective as cD, NumberBaseComponent as cE, NumberControlInfoModel as cF, NumbersOnlyInputDirective as cG, NumeralPipe as cH, OverflowTextDirective as cI, PageBaseComponent as cJ, PageWithFormHandlerBaseComponent as cK, PdfMimeType as cL, PictureFieldSourcePipe as cM, PictureFileControlInfoModel as cN, PicturesByGroupIdPipe as cO, PlaceHolderDirective as cP, PortalDynamicPageResolver as cQ, PortalFormPageResolver as cR, PortalPageComponent as cS, PortalPageResolver as cT, PortalPageSidebarComponent as cU, PortalReportPageResolver as cV, PortalService as cW, PreventDefaulEvent as cX, PreventDefaultDirective as cY, PrintFilesDirective as cZ, PrintImage as c_, ListRelationModel as ca, LoadExternalFilesDirective as cb, LocalStorageService as cc, LogService as cd, LoginSettingsResolver as ce, MapToChatMessagePipe as cf, MasterDetailsPageComponent as cg, MeasureFormTitleWidthDirective as ch, MergeFieldsToColumnsPipe as ci, MetaobjectDataModel as cj, MetaobjectRelationModel as ck, MimeTypes as cl, MoForReportModel as cm, MoForReportModelBase as cn, MoInfoUlvMoListPipe as co, MoInfoUlvPagingPipe as cp, MoLinkerDirective as cq, MoReportValueConcatPipe as cr, MoReportValuePipe as cs, MoValuePipe as ct, MobileDirective as cu, ModalRootComponent as cv, MultipleGroupByPipe as cw, NATIVE_FEDERATION_RUNTIME as cx, NOTIFICATAION_POPUP_SERVER as cy, NOTIFICATION_WEBWORKER_FACTORY as cz, AllFilesMimeType as d, ShortcutHandlerDirective as d$, PushBannerComponent as d0, PushCheckService as d1, PushNotificationService as d2, REPORT_GRID_VIEWPORT_CLASS as d3, REPORT_TYPE_DEFAULT_POLICIES as d4, RUNTIME_NAV_STATE_SCHEMA_V1 as d5, RabetehAkseTakiListiControlInfoModel as d6, RedirectHomeGuard as d7, RelatedReportControlInfoModel as d8, RelationListControlInfoModel as d9, ResizeHandlerDirective as dA, ResizeObserverDirective as dB, ReversePipe as dC, RichStringControlInfoModel as dD, RootPageComponent as dE, RootPortalComponent as dF, RotateImage as dG, RouteFormChangeDirective as dH, RoutingService as dI, RowDataOption as dJ, RowNumberPipe as dK, RowState as dL, RuntimeNavStateCacheService as dM, SafeBottomDirective as dN, SanitizeTextPipe as dO, SaveImageDirective as dP, SaveImageToFile as dQ, SaveScrollPositionService as dR, ScopedCssPipe as dS, ScrollLayoutContextHolder as dT, ScrollPersistDirective as dU, ScrollToSelectedDirective as dV, SelectionMode as dW, SeperatorFixPipe as dX, ServiceWorkerCommuncationService as dY, ServiceWorkerNotificationService as dZ, ShellbarHeightService as d_, RemoveDynamicFormStyles as da, RemoveNewlinePipe as db, RenderUlvDirective as dc, RenderUlvPaginDirective as dd, RenderUlvViewerDirective as de, ReplacePipe as df, ReportActionListPipe as dg, ReportBaseComponent as dh, ReportBaseInfo as di, ReportBreadcrumbResolver as dj, ReportCalendarModel as dk, ReportContainerComponent as dl, ReportExtraInfo as dm, ReportField as dn, ReportFormModel as dp, ReportItemBaseComponent as dq, ReportListModel as dr, ReportModel as ds, ReportNavigatorComponent as dt, ReportTreeModel as du, ReportViewBaseComponent as dv, ReportViewColumn as dw, ResizableComponent as dx, ResizableDirective as dy, ResizableModule as dz, AnchorScrollDirective as e, fixUnclosedParentheses as e$, ShortcutRegisterDirective as e0, SimpleTemplateEngine as e1, SimplebarDirective as e2, SingleRelationControlInfoModel as e3, SortDirection as e4, SortPipe as e5, SortSetting as e6, SplideSliderDirective as e7, SplitPipe as e8, SplitterComponent as e9, ViewBase as eA, VisibleValuePipe as eB, WebOtpDirective as eC, WordMimeType as eD, WorfkflowwChoiceCommandDirective as eE, addCssVariableToRoot as eF, addDynamicVariableTo as eG, availablePrefixes as eH, bodyClick as eI, buildRuntimeNavStateCacheKey as eJ, calcContextMenuWidth as eK, calculateColumnContent as eL, calculateColumnWidth as eM, calculateColumnWidthFitToContainer as eN, calculateFreeColumnSize as eO, calculateMoDataListContentWidthByColumnName as eP, cancelRequestAnimationFrame as eQ, checkPermission as eR, compareVersions as eS, contextDefaultsFromEnvironment as eT, createFormPanelMetaConditions as eU, createGridEditorFormPanel as eV, easeInOutCubic as eW, elementInViewport2 as eX, enumValueToStringSize as eY, executeUlvCommandHandler as eZ, extractLayoutPolicyFromView as e_, StopPropagationDirective as ea, StringControlInfoModel as eb, StringToNumberPipe as ec, SubformControlInfoModel as ed, SystemBaseComponent as ee, TEMPLATE_ENGINE as ef, TOAST_SERVICE as eg, TableHeaderWidthMode as eh, TableResizerDirective as ei, TabpageService as ej, ThImageOrIconePipe as ek, TileGroupBreadcrumResolver as el, TilePropsComponent as em, TlbButtonsPipe as en, ToolbarSettingsPipe as eo, TooltipDirective as ep, TotalSummaryPipe as eq, UiService as er, UlvCommandDirective as es, UlvHeightSizeType as et, UlvMainService as eu, UnlimitSessionComponent as ev, UntilInViewDirective as ew, UploadService as ex, VideoMimeType as ey, VideoRecordingService as ez, formRoutes as f, sortEx as f$, flattenTree as f0, forbiddenValidator as f1, formatBytes as f2, fromEntries as f3, fromIntersectionObserver as f4, genrateInlineMoId as f5, getAllItemsPerChildren as f6, getColumnValueOfMoDataList as f7, getComponentDefined as f8, getControlList as f9, isFirefox as fA, isFunction as fB, isIOS as fC, isImage as fD, isInLocalMode as fE, isSafari as fF, isTargetWindow as fG, isVersionBiggerThan as fH, measureText as fI, measureText2 as fJ, measureTextBy as fK, mobile_regex as fL, multilevelSort as fM, nullOrUndefinedString as fN, number_only as fO, removeDynamicStyle as fP, requestAnimationFramePolyfill as fQ, resolveFinalScroll as fR, resolveReportLayoutPolicy as fS, scrollLayoutModeToContextEnvironment as fT, scrollToElement as fU, searchEx as fV, setColumnWidthByMaxMoContentWidth as fW, setOneDepthLevel as fX, setTableThWidth as fY, shallowEqual as fZ, sort as f_, getControlSizeMode as fa, getDateService as fb, getDeviceIsDesktop as fc, getDeviceIsMobile as fd, getDeviceIsPhone as fe, getDeviceIsTablet as ff, getFieldValue as fg, getFocusableTagNames as fh, getFormSettings as fi, getGridSettings as fj, getHeaderValue as fk, getIcon as fl, getImagePath as fm, getLabelWidth as fn, getLayout94ObjectInfo as fo, getLayoutControl as fp, getNestedValue as fq, getNewMoGridEditor as fr, getParentHeight as fs, getReportTypeDefaultPolicy as ft, getRequestAnimationFrame as fu, getResetGridSettings as fv, getTargetRect as fw, getUniqueId as fx, getValidExtension as fy, isFF as fz, ApiService as g, stopPropagation as g0, throwIfAlreadyLoaded as g1, toNumber as g2, validateAllFormFields as g3, ApplicationBaseComponent as h, ApplicationCtrlrService as i, AttrRtlDirective as j, AudioMimeType as k, AudioRecordingService as l, AuthGuard as m, BarsaApi as n, BarsaDialogService as o, BarsaIconDictPipe as p, BarsaNovinRayCoreModule as q, reportRoutes as r, BarsaReadonlyDirective as s, BarsaSapUiFormPageModule as t, BarsaStorageService as u, BaseColumnPropsComponent as v, BaseComponent as w, BaseController as x, BaseDirective as y, BaseDynamicComponent as z };
20644
- //# sourceMappingURL=barsa-novin-ray-core-barsa-novin-ray-core-CKKXv9DX.mjs.map
21184
+ export { ColSetting as $, APP_VERSION as A, BaseModule as B, BaseFormToolbaritemPropsComponent as C, DynamicComponentService as D, BaseItemContentPropsComponent as E, BaseReportModel as F, BaseSettingsService as G, BaseUlvSettingComponent as H, BaseViewContentPropsComponent as I, BaseViewItemPropsComponent as J, BaseViewPropsComponent as K, BbbTranslatePipe as L, BodyClickDirective as M, BoolControlInfoModel as N, BreadcrumbService as O, ButtonLoadingComponent as P, CalculateControlInfoModel as Q, ReportEmptyPageComponent as R, CalendarSettingsStore as S, CanUploadFilePipe as T, CardBaseItemContentPropsComponent as U, CardDynamicItemComponent as V, CardMediaSizePipe as W, CardViewService as X, ChangeLayoutInfoCustomUi as Y, ChunkArrayPipe as Z, CodeEditorControlInfoModel as _, AbsoluteDivBodyDirective as a, FileControlInfoModel as a$, ColumnCustomComponentPipe as a0, ColumnCustomUiPipe as a1, ColumnIconPipe as a2, ColumnRendererBase as a3, ColumnRendererViewBase as a4, ColumnResizerDirective as a5, ColumnService as a6, ColumnValueDirective as a7, ColumnValueOfParametersPipe as a8, ColumnValuePipe as a9, DynamicCommandDirective as aA, DynamicDarkColorPipe as aB, DynamicFormComponent as aC, DynamicFormToolbaritemComponent as aD, DynamicItemComponent as aE, DynamicLayoutComponent as aF, DynamicRootVariableDirective as aG, DynamicStyleDirective as aH, DynamicUlvPagingComponent as aI, DynamicUlvToolbarComponent as aJ, EllapsisTextDirective as aK, EllipsifyDirective as aL, EmptyPageComponent as aM, EmptyPageWithRouterAndRouterOutletComponent as aN, EntitySettingsStore as aO, EnumCaptionPipe as aP, EnumControlInfoModel as aQ, ExecuteDynamicCommand as aR, ExecuteWorkflowChoiceDef as aS, ExistsColumnsPipe as aT, FORM_DIALOG_COMPONENT as aU, FieldBaseComponent as aV, FieldBaseController as aW, FieldDirective as aX, FieldInfoTypeEnum as aY, FieldUiComponent as aZ, FieldViewBase as a_, ComboRowImagePipe as aa, CommandControlInfoModel as ab, ContainerComponent as ac, ContainerService as ad, ContextMenuPipe as ae, ControlUiPipe as af, ConvertToStylePipe as ag, CopyDirective as ah, CountDownDirective as ai, CustomCommand as aj, CustomInjector as ak, CustomRouteReuseStrategy as al, CustomUiRegistryService as am, DEFAULT_OBJECT_ICON as an, DEFAULT_REPORT_LAYOUT_POLICY as ao, DIALOG_SERVICE as ap, DateHijriService as aq, DateMiladiService as ar, DateRanges as as, DateService as at, DateShamsiService as au, DateTimeControlInfoModel as av, DefaultCommandsAccessValue as aw, DefaultGridSetting as ax, DeviceWidth as ay, DialogParams as az, AddDynamicFormStyles as b, IsImagePipe as b$, FileInfoCountPipe as b0, FilePictureInfoModel as b1, FilesValidationHelper as b2, FillAllLayoutControls as b3, FillEmptySpaceDirective as b4, FilterColumnsByDetailsPipe as b5, FilterInlineActionListPipe as b6, FilterPipe as b7, FilterStringPipe as b8, FilterTabPipe as b9, GetCssVariableValuePipe as bA, GetDefaultMoObjectInfo as bB, GetImgTags as bC, GetViewableExtensions as bD, GetVisibleValue as bE, GridSetting as bF, GroupBy as bG, GroupByPipe as bH, GroupByService as bI, HeaderFacetValuePipe as bJ, HideAcceptCancelButtonsPipe as bK, HideColumnsInmobilePipe as bL, HistoryControlInfoModel as bM, HorizontalLayoutService as bN, HorizontalResponsiveDirective as bO, IconControlInfoModel as bP, IdbService as bQ, ImageLazyDirective as bR, ImageMimeType as bS, ImagetoPrint as bT, InMemoryStorageService as bU, IndexedDbService as bV, InputNumber as bW, IntersectionObserverDirective as bX, IntersectionStatus as bY, IsDarkMode as bZ, IsExpandedNodePipe as b_, FilterToolbarControlPipe as ba, FilterWorkflowInMobilePipe as bb, FindColumnByDbNamePipe as bc, FindColumnsPipe as bd, FindGroup as be, FindLayoutSettingFromLayout94 as bf, FindPreviewColumnPipe as bg, FindToolbarItem as bh, FioriIconPipe as bi, FormBaseComponent as bj, FormCloseDirective as bk, FormComponent as bl, FormFieldReportPageComponent as bm, FormNewComponent as bn, FormPageBaseComponent as bo, FormPageComponent as bp, FormPanelService as bq, FormPropsBaseComponent as br, FormService as bs, FormToolbarBaseComponent as bt, FormToolbarButton as bu, GaugeControlInfoModel as bv, GeneralControlInfoModel as bw, GetAllColumnsSorted as bx, GetAllHorizontalFromLayout94 as by, GetContentType as bz, AffixRespondEvents as c, PrintFilesDirective as c$, ItemsRendererDirective as c0, LabelStarTrimPipe as c1, LabelmandatoryDirective as c2, LayoutItemBaseComponent as c3, LayoutMainContentService as c4, LayoutPanelBaseComponent as c5, LayoutService as c6, LeafletLongPressDirective as c7, LinearListControlInfoModel as c8, LinearListHelper as c9, NOTIFICATAION_POPUP_SERVER as cA, NOTIFICATION_WEBWORKER_FACTORY as cB, NetworkStatusService as cC, NotFoundComponent as cD, NotificationService as cE, NowraptextDirective as cF, NumberBaseComponent as cG, NumberControlInfoModel as cH, NumbersOnlyInputDirective as cI, NumeralPipe as cJ, OverflowTextDirective as cK, PageBaseComponent as cL, PageWithFormHandlerBaseComponent as cM, PdfMimeType as cN, PictureFieldSourcePipe as cO, PictureFileControlInfoModel as cP, PicturesByGroupIdPipe as cQ, PlaceHolderDirective as cR, PortalDynamicPageResolver as cS, PortalFormPageResolver as cT, PortalPageComponent as cU, PortalPageResolver as cV, PortalPageSidebarComponent as cW, PortalReportPageResolver as cX, PortalService as cY, PreventDefaulEvent as cZ, PreventDefaultDirective as c_, ListCountPipe as ca, ListRelationModel as cb, LoadExternalFilesDirective as cc, LocalStorageService as cd, LogService as ce, LoginSettingsResolver as cf, MapToChatMessagePipe as cg, MasterDetailsPageComponent as ch, MeasureFormTitleWidthDirective as ci, MergeFieldsToColumnsPipe as cj, MetaobjectDataModel as ck, MetaobjectRelationModel as cl, MimeTypes as cm, MoForReportModel as cn, MoForReportModelBase as co, MoIconPipe as cp, MoInfoUlvMoListPipe as cq, MoInfoUlvPagingPipe as cr, MoLinkerDirective as cs, MoReportValueConcatPipe as ct, MoReportValuePipe as cu, MoValuePipe as cv, MobileDirective as cw, ModalRootComponent as cx, MultipleGroupByPipe as cy, NATIVE_FEDERATION_RUNTIME as cz, AllFilesMimeType as d, ScrollToSelectedDirective as d$, PrintImage as d0, PromptUpdateService as d1, PushBannerComponent as d2, PushCheckService as d3, PushNotificationService as d4, REPORT_GRID_VIEWPORT_CLASS as d5, REPORT_TYPE_DEFAULT_POLICIES as d6, RUNTIME_NAV_STATE_SCHEMA_V1 as d7, RabetehAkseTakiListiControlInfoModel as d8, ReadableTextColorPipe as d9, ReportViewBaseComponent as dA, ReportViewColumn as dB, ResizableComponent as dC, ResizableDirective as dD, ResizableModule as dE, ResizeHandlerDirective as dF, ResizeObserverDirective as dG, ResponsiveGridColsDirective as dH, ReversePipe as dI, RichStringControlInfoModel as dJ, RootPageComponent as dK, RootPortalComponent as dL, RotateImage as dM, RouteFormChangeDirective as dN, RoutingService as dO, RowDataOption as dP, RowNumberPipe as dQ, RowState as dR, RuntimeNavStateCacheService as dS, SafeBottomDirective as dT, SanitizeTextPipe as dU, SaveImageDirective as dV, SaveImageToFile as dW, SaveScrollPositionService as dX, ScopedCssPipe as dY, ScrollLayoutContextHolder as dZ, ScrollPersistDirective as d_, RedirectHomeGuard as da, RelatedReportControlInfoModel as db, RelationListControlInfoModel as dc, RelativeDatePipe as dd, RelativeTimeService as de, RemoveDynamicFormStyles as df, RemoveNewlinePipe as dg, RenderUlvDirective as dh, RenderUlvPaginDirective as di, RenderUlvViewerDirective as dj, ReplacePipe as dk, ReportActionListPipe as dl, ReportBaseComponent as dm, ReportBaseInfo as dn, ReportBreadcrumbResolver as dp, ReportCalendarModel as dq, ReportContainerComponent as dr, ReportExtraInfo as ds, ReportField as dt, ReportFormModel as du, ReportItemBaseComponent as dv, ReportListModel as dw, ReportModel as dx, ReportNavigatorComponent as dy, ReportTreeModel as dz, AnchorScrollDirective as e, createGridEditorFormPanel as e$, SelectionMode as e0, SeperatorFixPipe as e1, ServiceWorkerCommuncationService as e2, ServiceWorkerNotificationService as e3, ShellbarHeightService as e4, ShortcutHandlerDirective as e5, ShortcutRegisterDirective as e6, SimpleTemplateEngine as e7, SimplebarDirective as e8, SingleRelationControlInfoModel as e9, UlvMainService as eA, UnlimitSessionComponent as eB, UntilInViewDirective as eC, UploadService as eD, VideoMimeType as eE, VideoRecordingService as eF, ViewBase as eG, VisibleValuePipe as eH, WebOtpDirective as eI, WordMimeType as eJ, WorfkflowwChoiceCommandDirective as eK, addCssVariableToRoot as eL, addDynamicVariableTo as eM, availablePrefixes as eN, bodyClick as eO, buildRuntimeNavStateCacheKey as eP, calcContextMenuWidth as eQ, calculateColumnContent as eR, calculateColumnWidth as eS, calculateColumnWidthFitToContainer as eT, calculateFreeColumnSize as eU, calculateMoDataListContentWidthByColumnName as eV, cancelRequestAnimationFrame as eW, checkPermission as eX, compareVersions as eY, contextDefaultsFromEnvironment as eZ, createFormPanelMetaConditions as e_, SortDirection as ea, SortPipe as eb, SortSetting as ec, SplideSliderDirective as ed, SplitPipe as ee, SplitterComponent as ef, StopPropagationDirective as eg, StringControlInfoModel as eh, StringToNumberPipe as ei, SubformControlInfoModel as ej, SystemBaseComponent as ek, TEMPLATE_ENGINE as el, TOAST_SERVICE as em, TableHeaderWidthMode as en, TableResizerDirective as eo, TabpageService as ep, ThImageOrIconePipe as eq, TileGroupBreadcrumResolver as er, TilePropsComponent as es, TlbButtonsPipe as et, ToolbarSettingsPipe as eu, TooltipDirective as ev, TotalSummaryPipe as ew, UiService as ex, UlvCommandDirective as ey, UlvHeightSizeType as ez, formRoutes as f, scrollToElement as f$, easeInOutCubic as f0, elementInViewport2 as f1, enumValueToStringSize as f2, executeUlvCommandHandler as f3, extractLayoutPolicyFromView as f4, fixUnclosedParentheses as f5, flattenTree as f6, forbiddenValidator as f7, formatBytes as f8, fromEntries as f9, getRequestAnimationFrame as fA, getResetGridSettings as fB, getTargetRect as fC, getUniqueId as fD, getValidExtension as fE, hhmmToMs as fF, isFF as fG, isFirefox as fH, isFunction as fI, isIOS as fJ, isImage as fK, isInLocalMode as fL, isSafari as fM, isTargetWindow as fN, isVersionBiggerThan as fO, measureText as fP, measureText2 as fQ, measureTextBy as fR, mobile_regex as fS, multilevelSort as fT, nullOrUndefinedString as fU, number_only as fV, removeDynamicStyle as fW, requestAnimationFramePolyfill as fX, resolveFinalScroll as fY, resolveReportLayoutPolicy as fZ, scrollLayoutModeToContextEnvironment as f_, fromIntersectionObserver as fa, genrateInlineMoId as fb, getAllItemsPerChildren as fc, getColumnValueOfMoDataList as fd, getComponentDefined as fe, getControlList as ff, getControlSizeMode as fg, getDateService as fh, getDeviceIsDesktop as fi, getDeviceIsMobile as fj, getDeviceIsPhone as fk, getDeviceIsTablet as fl, getFieldValue as fm, getFocusableTagNames as fn, getFormSettings as fo, getGridSettings as fp, getHeaderValue as fq, getIcon as fr, getImagePath as fs, getLabelWidth as ft, getLayout94ObjectInfo as fu, getLayoutControl as fv, getNestedValue as fw, getNewMoGridEditor as fx, getParentHeight as fy, getReportTypeDefaultPolicy as fz, ApiService as g, searchEx as g0, setColumnWidthByMaxMoContentWidth as g1, setOneDepthLevel as g2, setTableThWidth as g3, shallowEqual as g4, shouldUseFreeColumnSize as g5, sort as g6, sortEx as g7, stopPropagation as g8, throwIfAlreadyLoaded as g9, toNumber as ga, toRelativeDate as gb, validateAllFormFields as gc, ApplicationBaseComponent as h, ApplicationCtrlrService as i, AttrRtlDirective as j, AudioMimeType as k, AudioRecordingService as l, AuthGuard as m, BarsaApi as n, BarsaDialogService as o, BarsaIconDictPipe as p, BarsaNovinRayCoreModule as q, reportRoutes as r, BarsaReadonlyDirective as s, BarsaSapUiFormPageModule as t, BarsaStorageService as u, BaseColumnPropsComponent as v, BaseComponent as w, BaseController as x, BaseDirective as y, BaseDynamicComponent as z };
21185
+ //# sourceMappingURL=barsa-novin-ray-core-barsa-novin-ray-core-BneCvL2Z.mjs.map