barsa-novin-ray-core 2.3.143 → 2.3.145
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.
- package/fesm2022/{barsa-novin-ray-core-barsa-novin-ray-core-ZCx7VjiV.mjs → barsa-novin-ray-core-barsa-novin-ray-core-D50KRKKo.mjs} +799 -291
- package/fesm2022/barsa-novin-ray-core-barsa-novin-ray-core-D50KRKKo.mjs.map +1 -0
- package/fesm2022/{barsa-novin-ray-core-barsa-report-page.module-ObpSr8cc.mjs → barsa-novin-ray-core-barsa-report-page.module-7QOR1HJT.mjs} +2 -2
- package/fesm2022/{barsa-novin-ray-core-barsa-report-page.module-ObpSr8cc.mjs.map → barsa-novin-ray-core-barsa-report-page.module-7QOR1HJT.mjs.map} +1 -1
- package/fesm2022/barsa-novin-ray-core.mjs +1 -1
- package/index.d.ts +228 -131
- package/package.json +1 -1
- package/fesm2022/barsa-novin-ray-core-barsa-novin-ray-core-ZCx7VjiV.mjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, inject, ElementRef, Input, ChangeDetectionStrategy, Component, Pipe, ComponentFactoryResolver, Injector, ApplicationRef, Compiler, DOCUMENT, NgModuleFactory, InjectionToken, NgZone, 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, timer, combineLatest, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, switchMap, forkJoin, shareReplay, withLatestFrom as withLatestFrom$1,
|
|
2
|
+
import { Injectable, inject, ElementRef, Input, ChangeDetectionStrategy, Component, Pipe, ComponentFactoryResolver, Injector, ApplicationRef, Compiler, DOCUMENT, NgModuleFactory, InjectionToken, NgZone, signal, ViewContainerRef, isDevMode, 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, timer, combineLatest, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, switchMap, forkJoin, shareReplay, withLatestFrom as withLatestFrom$1, fromEvent, throwError, merge, interval, filter as filter$1, lastValueFrom, timeout, catchError as catchError$1, 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';
|
|
@@ -120,6 +120,9 @@ class BaseComponent {
|
|
|
120
120
|
get el() {
|
|
121
121
|
return this._el;
|
|
122
122
|
}
|
|
123
|
+
get onDestroy$() {
|
|
124
|
+
return this._onDestroy$;
|
|
125
|
+
}
|
|
123
126
|
ngAfterContentInit() {
|
|
124
127
|
if (!BarsaApi.Common.Debug?.Data?.CustomUi) {
|
|
125
128
|
return;
|
|
@@ -4314,7 +4317,6 @@ class DynamicDarkColorPipe {
|
|
|
4314
4317
|
this.cache = new Map();
|
|
4315
4318
|
this.darkBackground = [18, 18, 18]; // #121212
|
|
4316
4319
|
this.minContrast = 4.5;
|
|
4317
|
-
this.colorParseCache = new Map();
|
|
4318
4320
|
}
|
|
4319
4321
|
transform(styleStr) {
|
|
4320
4322
|
if (!IsDarkMode() || !styleStr) {
|
|
@@ -4323,29 +4325,46 @@ class DynamicDarkColorPipe {
|
|
|
4323
4325
|
if (this.cache.has(styleStr)) {
|
|
4324
4326
|
return this.cache.get(styleStr);
|
|
4325
4327
|
}
|
|
4326
|
-
const
|
|
4327
|
-
const
|
|
4328
|
-
|
|
4329
|
-
|
|
4330
|
-
|
|
4331
|
-
|
|
4332
|
-
|
|
4333
|
-
|
|
4334
|
-
|
|
4335
|
-
|
|
4336
|
-
|
|
4337
|
-
|
|
4338
|
-
|
|
4339
|
-
|
|
4340
|
-
this.cache.set(styleStr,
|
|
4341
|
-
return
|
|
4328
|
+
const colorRegex = /(?:^|;)\s*color\s*:\s*([^;!]+)[;!]?/i;
|
|
4329
|
+
const bgRegex = /(?:^|;)\s*background-color\s*:\s*([^;!]+)[;!]?/i;
|
|
4330
|
+
const colorMatch = styleStr.match(colorRegex);
|
|
4331
|
+
const bgMatch = styleStr.match(bgRegex);
|
|
4332
|
+
let newStyle = styleStr;
|
|
4333
|
+
// ---------------------------------------------------
|
|
4334
|
+
// BACKGROUND EXISTS BUT NO TEXT COLOR
|
|
4335
|
+
// ---------------------------------------------------
|
|
4336
|
+
if (bgMatch && !colorMatch) {
|
|
4337
|
+
const bgRgb = this.parseColor(bgMatch[1].trim());
|
|
4338
|
+
if (bgRgb) {
|
|
4339
|
+
const textColor = this.getReadableTextColor(bgRgb);
|
|
4340
|
+
newStyle += `; color: ${textColor};`;
|
|
4341
|
+
}
|
|
4342
|
+
this.cache.set(styleStr, newStyle);
|
|
4343
|
+
return newStyle;
|
|
4344
|
+
}
|
|
4345
|
+
// ---------------------------------------------------
|
|
4346
|
+
// NORMAL COLOR CONTRAST FIX
|
|
4347
|
+
// ---------------------------------------------------
|
|
4348
|
+
if (colorMatch) {
|
|
4349
|
+
const originalColor = colorMatch[1].trim();
|
|
4350
|
+
const rgb = this.parseColor(originalColor);
|
|
4351
|
+
if (!rgb) {
|
|
4352
|
+
return styleStr;
|
|
4353
|
+
}
|
|
4354
|
+
const contrast = this.getContrastRatio(rgb, this.darkBackground);
|
|
4355
|
+
if (contrast < this.minContrast) {
|
|
4356
|
+
const adjustedHex = this.adjustColorForDarkMode(rgb);
|
|
4357
|
+
newStyle = styleStr.replace(colorRegex, `; color: ${adjustedHex};`);
|
|
4358
|
+
}
|
|
4342
4359
|
}
|
|
4343
|
-
// ❌ اگر بد بود → اصلاح کن
|
|
4344
|
-
const adjustedHex = this.adjustColorForDarkMode(rgb);
|
|
4345
|
-
const newStyle = styleStr.replace(regex, `color: ${adjustedHex};`);
|
|
4346
4360
|
this.cache.set(styleStr, newStyle);
|
|
4347
4361
|
return newStyle;
|
|
4348
4362
|
}
|
|
4363
|
+
getReadableTextColor(bgRgb) {
|
|
4364
|
+
const whiteContrast = this.getContrastRatio([255, 255, 255], bgRgb);
|
|
4365
|
+
const blackContrast = this.getContrastRatio([0, 0, 0], bgRgb);
|
|
4366
|
+
return whiteContrast > blackContrast ? '#ffffff' : '#000000';
|
|
4367
|
+
}
|
|
4349
4368
|
// ---------------------------------------------------
|
|
4350
4369
|
// 🎯 Adjust until contrast >= 4.5
|
|
4351
4370
|
// ---------------------------------------------------
|
|
@@ -4641,6 +4660,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
4641
4660
|
}]
|
|
4642
4661
|
}], ctorParameters: () => [] });
|
|
4643
4662
|
|
|
4663
|
+
class GetCssVariableValuePipe {
|
|
4664
|
+
transform(cssVarName, removeUnit, element) {
|
|
4665
|
+
if (!cssVarName) {
|
|
4666
|
+
return null;
|
|
4667
|
+
}
|
|
4668
|
+
const target = element || document.documentElement;
|
|
4669
|
+
let value = getComputedStyle(target).getPropertyValue(cssVarName).trim();
|
|
4670
|
+
if (!value) {
|
|
4671
|
+
return null;
|
|
4672
|
+
}
|
|
4673
|
+
// remove unit
|
|
4674
|
+
if (removeUnit) {
|
|
4675
|
+
value = value.replace(removeUnit, '').trim();
|
|
4676
|
+
const numeric = Number(value);
|
|
4677
|
+
return isNaN(numeric) ? value : numeric;
|
|
4678
|
+
}
|
|
4679
|
+
return value;
|
|
4680
|
+
}
|
|
4681
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GetCssVariableValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
4682
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: GetCssVariableValuePipe, isStandalone: false, name: "getCssVarValue" }); }
|
|
4683
|
+
}
|
|
4684
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: GetCssVariableValuePipe, decorators: [{
|
|
4685
|
+
type: Pipe,
|
|
4686
|
+
args: [{
|
|
4687
|
+
name: 'getCssVarValue',
|
|
4688
|
+
standalone: false
|
|
4689
|
+
}]
|
|
4690
|
+
}] });
|
|
4691
|
+
|
|
4644
4692
|
class ApiService {
|
|
4645
4693
|
constructor() {
|
|
4646
4694
|
this.portalLoginUrl = `/api/auth/portal/login`;
|
|
@@ -5872,7 +5920,7 @@ class ApplicationCtrlrService {
|
|
|
5872
5920
|
get systemCommandGroups$() {
|
|
5873
5921
|
return this._selectedSystemNavUi$
|
|
5874
5922
|
.asObservable()
|
|
5875
|
-
.pipe(map$1((c) => (!c ? [] :
|
|
5923
|
+
.pipe(map$1((c) => (!c ? [] : c.SystemData.CommandGroups || [])));
|
|
5876
5924
|
}
|
|
5877
5925
|
get selectedCommand$() {
|
|
5878
5926
|
return combineLatest([this._selectedCommandId$, this._selectedSystemId$]).pipe(map$1(([selectedCommand, systemId]) => selectedCommand[systemId]));
|
|
@@ -5940,10 +5988,11 @@ class ApplicationCtrlrService {
|
|
|
5940
5988
|
callback && callback(true);
|
|
5941
5989
|
});
|
|
5942
5990
|
this._document.documentElement.setAttribute('data-layout', 'vertical');
|
|
5943
|
-
|
|
5944
|
-
|
|
5945
|
-
|
|
5946
|
-
|
|
5991
|
+
// با تغییر سیستم اسم تب مرورگر تغییر نکند
|
|
5992
|
+
// this._selectedSystemTitle$
|
|
5993
|
+
// .asObservable()
|
|
5994
|
+
// .pipe(tap((c) => this._titleService.setTitle(c)))
|
|
5995
|
+
// .subscribe();
|
|
5947
5996
|
}
|
|
5948
5997
|
systemChange(systemId) {
|
|
5949
5998
|
const oldSystemId = this._selectedSystemId$.getValue();
|
|
@@ -6268,7 +6317,7 @@ function reportRoutes(authGuard = false) {
|
|
|
6268
6317
|
return {
|
|
6269
6318
|
path: 'report/:id',
|
|
6270
6319
|
canActivate: authGuard ? [AuthGuard] : [],
|
|
6271
|
-
loadChildren: () => import('./barsa-novin-ray-core-barsa-report-page.module-
|
|
6320
|
+
loadChildren: () => import('./barsa-novin-ray-core-barsa-report-page.module-7QOR1HJT.mjs').then((m) => m.BarsaReportPageModule),
|
|
6272
6321
|
resolve: {
|
|
6273
6322
|
breadcrumb: ReportBreadcrumbResolver
|
|
6274
6323
|
}
|
|
@@ -9223,14 +9272,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
9223
9272
|
// src/app/services/idb.service.ts
|
|
9224
9273
|
class IdbService {
|
|
9225
9274
|
constructor() {
|
|
9226
|
-
this.dbPromise = openDB('my-app-db',
|
|
9227
|
-
upgrade(db) {
|
|
9275
|
+
this.dbPromise = openDB('my-app-db', 2, {
|
|
9276
|
+
upgrade(db, oldVersion) {
|
|
9228
9277
|
if (!db.objectStoreNames.contains('subscription')) {
|
|
9229
9278
|
db.createObjectStore('subscription');
|
|
9230
9279
|
}
|
|
9231
9280
|
if (!db.objectStoreNames.contains('settings')) {
|
|
9232
9281
|
db.createObjectStore('settings');
|
|
9233
9282
|
}
|
|
9283
|
+
if (oldVersion < 2 && !db.objectStoreNames.contains('runtimeNavState')) {
|
|
9284
|
+
db.createObjectStore('runtimeNavState');
|
|
9285
|
+
}
|
|
9234
9286
|
}
|
|
9235
9287
|
});
|
|
9236
9288
|
}
|
|
@@ -9247,6 +9299,15 @@ class IdbService {
|
|
|
9247
9299
|
const db = await this.dbPromise;
|
|
9248
9300
|
await db.delete(store, key);
|
|
9249
9301
|
}
|
|
9302
|
+
async getAllKeys(store) {
|
|
9303
|
+
const db = await this.dbPromise;
|
|
9304
|
+
const keys = await db.getAllKeys(store);
|
|
9305
|
+
return keys;
|
|
9306
|
+
}
|
|
9307
|
+
async clearStore(store) {
|
|
9308
|
+
const db = await this.dbPromise;
|
|
9309
|
+
await db.clear(store);
|
|
9310
|
+
}
|
|
9250
9311
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: IdbService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
9251
9312
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: IdbService, providedIn: 'root' }); }
|
|
9252
9313
|
}
|
|
@@ -9740,6 +9801,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
9740
9801
|
args: [{ providedIn: 'root' }]
|
|
9741
9802
|
}] });
|
|
9742
9803
|
|
|
9804
|
+
class ScrollLayoutContextHolder {
|
|
9805
|
+
constructor() {
|
|
9806
|
+
this._mode = signal('root');
|
|
9807
|
+
this.mode = this._mode.asReadonly();
|
|
9808
|
+
}
|
|
9809
|
+
setMode(mode) {
|
|
9810
|
+
this._mode.set(mode);
|
|
9811
|
+
}
|
|
9812
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ScrollLayoutContextHolder, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
9813
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ScrollLayoutContextHolder }); }
|
|
9814
|
+
}
|
|
9815
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ScrollLayoutContextHolder, decorators: [{
|
|
9816
|
+
type: Injectable
|
|
9817
|
+
}], ctorParameters: () => [] });
|
|
9818
|
+
|
|
9743
9819
|
class ShellbarHeightService {
|
|
9744
9820
|
constructor() {
|
|
9745
9821
|
this._dict = new BehaviorSubject(['']);
|
|
@@ -9822,6 +9898,145 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
9822
9898
|
args: [{ providedIn: 'root' }]
|
|
9823
9899
|
}] });
|
|
9824
9900
|
|
|
9901
|
+
/** Discriminator for migrations and mixed payload kinds. */
|
|
9902
|
+
const RUNTIME_NAV_STATE_SCHEMA_V1 = 'report-nav-runtime/v1';
|
|
9903
|
+
/**
|
|
9904
|
+
* Stable cache key: report-scoped MO identity.
|
|
9905
|
+
* Future: prefix with navigationScopeId for split/compare/popup (architecture note only in v1).
|
|
9906
|
+
*/
|
|
9907
|
+
function buildRuntimeNavStateCacheKey(reportIdSeg, moId, typeDefId) {
|
|
9908
|
+
return `runtime:${reportIdSeg}:${moId}:${typeDefId}`;
|
|
9909
|
+
}
|
|
9910
|
+
|
|
9911
|
+
const RUNTIME_NAV_STORE = 'runtimeNavState';
|
|
9912
|
+
const SESSION_STORAGE_KEY = 'runtime-session-id';
|
|
9913
|
+
const MAX_MEMORY_ENTRIES = 100;
|
|
9914
|
+
function cloneForPersist(value) {
|
|
9915
|
+
try {
|
|
9916
|
+
return structuredClone(value);
|
|
9917
|
+
}
|
|
9918
|
+
catch {
|
|
9919
|
+
return JSON.parse(JSON.stringify(value));
|
|
9920
|
+
}
|
|
9921
|
+
}
|
|
9922
|
+
class RuntimeNavStateCacheService {
|
|
9923
|
+
constructor() {
|
|
9924
|
+
this._idb = inject(IdbService);
|
|
9925
|
+
this._memory = new Map();
|
|
9926
|
+
this._sessionId = this._ensureSessionId();
|
|
9927
|
+
void this._purgeStaleFromIdb();
|
|
9928
|
+
if (isDevMode() && typeof window !== 'undefined') {
|
|
9929
|
+
window.__runtimeNavCache = this;
|
|
9930
|
+
}
|
|
9931
|
+
}
|
|
9932
|
+
/** @internal tests / diagnostics */
|
|
9933
|
+
get currentSessionId() {
|
|
9934
|
+
return this._sessionId;
|
|
9935
|
+
}
|
|
9936
|
+
save(key, envelope) {
|
|
9937
|
+
const snapshot = cloneForPersist({
|
|
9938
|
+
...envelope,
|
|
9939
|
+
sessionId: this._sessionId,
|
|
9940
|
+
createdAt: envelope.createdAt ?? Date.now()
|
|
9941
|
+
});
|
|
9942
|
+
return (async () => {
|
|
9943
|
+
await this._idb.set(RUNTIME_NAV_STORE, key, snapshot);
|
|
9944
|
+
this._memory.set(key, snapshot);
|
|
9945
|
+
this._evictMemoryIfNeeded();
|
|
9946
|
+
})();
|
|
9947
|
+
}
|
|
9948
|
+
get(key) {
|
|
9949
|
+
const mem = this._memory.get(key);
|
|
9950
|
+
if (mem !== undefined) {
|
|
9951
|
+
return Promise.resolve(mem);
|
|
9952
|
+
}
|
|
9953
|
+
return (async () => {
|
|
9954
|
+
const row = await this._idb.get(RUNTIME_NAV_STORE, key);
|
|
9955
|
+
if (row == null) {
|
|
9956
|
+
return null;
|
|
9957
|
+
}
|
|
9958
|
+
if (row.sessionId !== this._sessionId) {
|
|
9959
|
+
return null;
|
|
9960
|
+
}
|
|
9961
|
+
this._memory.set(key, row);
|
|
9962
|
+
this._evictMemoryIfNeeded();
|
|
9963
|
+
return row;
|
|
9964
|
+
})();
|
|
9965
|
+
}
|
|
9966
|
+
remove(key) {
|
|
9967
|
+
return (async () => {
|
|
9968
|
+
this._memory.delete(key);
|
|
9969
|
+
await this._idb.delete(RUNTIME_NAV_STORE, key);
|
|
9970
|
+
})();
|
|
9971
|
+
}
|
|
9972
|
+
clear() {
|
|
9973
|
+
return (async () => {
|
|
9974
|
+
this._memory.clear();
|
|
9975
|
+
await this._idb.clearStore(RUNTIME_NAV_STORE);
|
|
9976
|
+
})();
|
|
9977
|
+
}
|
|
9978
|
+
/** Optional contract: snapshot of keys ? serialized envelopes (for debugging). */
|
|
9979
|
+
getAllEntries() {
|
|
9980
|
+
return (async () => {
|
|
9981
|
+
const out = {};
|
|
9982
|
+
for (const [k, v] of this._memory.entries()) {
|
|
9983
|
+
out[k] = cloneForPersist(v);
|
|
9984
|
+
}
|
|
9985
|
+
const keys = await this._idb.getAllKeys(RUNTIME_NAV_STORE);
|
|
9986
|
+
for (const key of keys) {
|
|
9987
|
+
if (out[key] !== undefined) {
|
|
9988
|
+
continue;
|
|
9989
|
+
}
|
|
9990
|
+
const row = await this._idb.get(RUNTIME_NAV_STORE, key);
|
|
9991
|
+
if (row?.sessionId === this._sessionId) {
|
|
9992
|
+
out[key] = cloneForPersist(row);
|
|
9993
|
+
}
|
|
9994
|
+
}
|
|
9995
|
+
return out;
|
|
9996
|
+
})();
|
|
9997
|
+
}
|
|
9998
|
+
_ensureSessionId() {
|
|
9999
|
+
if (typeof sessionStorage === 'undefined') {
|
|
10000
|
+
return `ssr-${crypto.randomUUID()}`;
|
|
10001
|
+
}
|
|
10002
|
+
let id = sessionStorage.getItem(SESSION_STORAGE_KEY);
|
|
10003
|
+
if (!id) {
|
|
10004
|
+
id = crypto.randomUUID();
|
|
10005
|
+
sessionStorage.setItem(SESSION_STORAGE_KEY, id);
|
|
10006
|
+
}
|
|
10007
|
+
return id;
|
|
10008
|
+
}
|
|
10009
|
+
_evictMemoryIfNeeded() {
|
|
10010
|
+
while (this._memory.size > MAX_MEMORY_ENTRIES) {
|
|
10011
|
+
const first = this._memory.keys().next().value;
|
|
10012
|
+
if (first === undefined) {
|
|
10013
|
+
break;
|
|
10014
|
+
}
|
|
10015
|
+
this._memory.delete(first);
|
|
10016
|
+
}
|
|
10017
|
+
}
|
|
10018
|
+
async _purgeStaleFromIdb() {
|
|
10019
|
+
try {
|
|
10020
|
+
const keys = await this._idb.getAllKeys(RUNTIME_NAV_STORE);
|
|
10021
|
+
for (const key of keys) {
|
|
10022
|
+
const row = await this._idb.get(RUNTIME_NAV_STORE, key);
|
|
10023
|
+
if (row == null || row.sessionId !== this._sessionId) {
|
|
10024
|
+
await this._idb.delete(RUNTIME_NAV_STORE, key);
|
|
10025
|
+
}
|
|
10026
|
+
}
|
|
10027
|
+
}
|
|
10028
|
+
catch {
|
|
10029
|
+
/* ignore IDB errors during purge */
|
|
10030
|
+
}
|
|
10031
|
+
}
|
|
10032
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: RuntimeNavStateCacheService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
10033
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: RuntimeNavStateCacheService, providedIn: 'root' }); }
|
|
10034
|
+
}
|
|
10035
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: RuntimeNavStateCacheService, decorators: [{
|
|
10036
|
+
type: Injectable,
|
|
10037
|
+
args: [{ providedIn: 'root' }]
|
|
10038
|
+
}], ctorParameters: () => [] });
|
|
10039
|
+
|
|
9825
10040
|
class CardViewService {
|
|
9826
10041
|
constructor() {
|
|
9827
10042
|
this._maxHeaderTitleHeight$ = new BehaviorSubject(0);
|
|
@@ -9854,6 +10069,9 @@ class BaseSettingsService {
|
|
|
9854
10069
|
saveSetting(key, value) {
|
|
9855
10070
|
return from(this.idb.set('settings', key, value));
|
|
9856
10071
|
}
|
|
10072
|
+
removeSetting(key) {
|
|
10073
|
+
return from(this.idb.delete('settings', key));
|
|
10074
|
+
}
|
|
9857
10075
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BaseSettingsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
9858
10076
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BaseSettingsService, providedIn: 'root' }); }
|
|
9859
10077
|
}
|
|
@@ -9862,40 +10080,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
9862
10080
|
args: [{ providedIn: 'root' }]
|
|
9863
10081
|
}] });
|
|
9864
10082
|
|
|
9865
|
-
class CalendarSettingsService extends BaseSettingsService {
|
|
9866
|
-
constructor() {
|
|
9867
|
-
super(...arguments);
|
|
9868
|
-
this.CALENDAR_KEY_PREFIX = 'cal_cfg_';
|
|
9869
|
-
// نگهداری وضعیت فعلی برای دسترسی سریع در UI
|
|
9870
|
-
this.configSubject = new BehaviorSubject(null);
|
|
9871
|
-
}
|
|
9872
|
-
get config$() {
|
|
9873
|
-
return this.configSubject.asObservable();
|
|
9874
|
-
}
|
|
9875
|
-
/**
|
|
9876
|
-
* بارگذاری تنظیمات و آپدیت کردن استریم
|
|
9877
|
-
*/
|
|
9878
|
-
getSetting(reportId) {
|
|
9879
|
-
// ۱. اول متد اصلی (پدر) را صدا میزنیم تا دیتا از IDB بیاید
|
|
9880
|
-
const key = `${this.CALENDAR_KEY_PREFIX}${reportId}`;
|
|
9881
|
-
return super.getSetting(key).pipe(tap$1((c) => this.configSubject.next(c)));
|
|
9882
|
-
}
|
|
9883
|
-
/**
|
|
9884
|
-
* ذخیره تنظیمات و اطلاعرسانی به تمام Subscribe کنندهها
|
|
9885
|
-
*/
|
|
9886
|
-
saveSetting(reportId, newConfig) {
|
|
9887
|
-
const key = `${this.CALENDAR_KEY_PREFIX}${reportId}`;
|
|
9888
|
-
const updatedConfig = { ...this.configSubject.value, ...newConfig };
|
|
9889
|
-
return super.saveSetting(key, updatedConfig).pipe(tap$1(() => this.configSubject.next(updatedConfig)));
|
|
9890
|
-
}
|
|
9891
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: CalendarSettingsService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
9892
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: CalendarSettingsService, providedIn: 'root' }); }
|
|
9893
|
-
}
|
|
9894
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: CalendarSettingsService, decorators: [{
|
|
9895
|
-
type: Injectable,
|
|
9896
|
-
args: [{ providedIn: 'root' }]
|
|
9897
|
-
}] });
|
|
9898
|
-
|
|
9899
10083
|
class SimpleTemplateEngine {
|
|
9900
10084
|
constructor() {
|
|
9901
10085
|
this.cache = new Map();
|
|
@@ -10545,7 +10729,9 @@ class ReportBaseComponent extends BaseComponent {
|
|
|
10545
10729
|
this.deviceSize$
|
|
10546
10730
|
.pipe(takeUntil(this._onDestroy$), tap((deviceSize) => this._deviceSizeChanged(deviceSize)))
|
|
10547
10731
|
.subscribe();
|
|
10548
|
-
this._portalService.windowResize
|
|
10732
|
+
merge(this._portalService.windowResize$, timer(1000))
|
|
10733
|
+
.pipe(takeUntil(this._onDestroy$))
|
|
10734
|
+
.subscribe(() => this._windowResized());
|
|
10549
10735
|
this.context?.fireEvent('afterrender', this);
|
|
10550
10736
|
}
|
|
10551
10737
|
ngOnDestroy() {
|
|
@@ -11634,7 +11820,7 @@ class ReportViewBaseComponent extends BaseComponent {
|
|
|
11634
11820
|
this.rowIndicator = Number(columns[0].MetaFieldTypeId) === 41;
|
|
11635
11821
|
}
|
|
11636
11822
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ReportViewBaseComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
11637
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: ReportViewBaseComponent, isStandalone: false, selector: "bnrc-report-view-base", inputs: { contextView: "contextView", viewSetting: "viewSetting", allColumns: "allColumns", isCheckList: "isCheckList", simpleInlineEdit: "simpleInlineEdit", inlineEditWithoutSelection: "inlineEditWithoutSelection", hideToolbar: "hideToolbar", hideTitle: "hideTitle", toolbarButtons: "toolbarButtons", allChecked: "allChecked", moDataList: "moDataList", UlvMainCtrlr: "UlvMainCtrlr", access: "access", groupby: "groupby", selectedCount: "selectedCount", conditionalFormats: "conditionalFormats", parentHeight: "parentHeight", deviceName: "deviceName", deviceSize: "deviceSize", contextMenuItems: "contextMenuItems", columns: "columns", allowInlineEdit: "allowInlineEdit", secondaryColumns: "secondaryColumns", popin: "popin", customFieldInfo: "customFieldInfo", hasSummary: "hasSummary", layoutInfo: "layoutInfo", hasSelected: "hasSelected", hideIcon: "hideIcon", columnsCount: "columnsCount", hideOpenIcon: "hideOpenIcon", openOnClick: "openOnClick", typeDefId: "typeDefId", reportId: "reportId", listEditViewId: "listEditViewId", typeViewId: "typeViewId", extraRelation: "extraRelation", relationList: "relationList", disableResponsive: "disableResponsive", rowItem: "rowItem", mobileOrTablet: "mobileOrTablet", inDialog: "inDialog", isMultiSelect: "isMultiSelect", fullscreen: "fullscreen", hideSearchpanel: "hideSearchpanel", newInlineEditMo: "newInlineEditMo", selectedMo: "selectedMo", inlineEditMode: "inlineEditMode", onlyInlineEdit: "onlyInlineEdit", rowHoverable: "rowHoverable", groupSummary: "groupSummary", tlbButtons: "tlbButtons", formSetting: "formSetting", disableOverflowContextMenu: "disableOverflowContextMenu", rowActivable: "rowActivable", isReportPage: "isReportPage", ulvHeightSizeType: "ulvHeightSizeType", contentHeight: "contentHeight", contentDensity: "contentDensity", rtl: "rtl", showOkCancelButtons: "showOkCancelButtons", title: "title", hasInlineDeleteButton: "hasInlineDeleteButton", hasInlineEditButton: "hasInlineEditButton", contextSetting: "contextSetting", gridFreeColumnSizing: "gridFreeColumnSizing", navigationArrow: "navigationArrow", cartableTemplates: "cartableTemplates", cartableChildsMo: "cartableChildsMo", pagingSetting: "pagingSetting", containerWidth: "containerWidth" }, outputs: { columnSummary: "columnSummary", escapeKey: "escapeKey", resetWorkflowState: "resetWorkflowState", deselectAll: "deselectAll", editFormPanelCancel: "editFormPanelCancel", editFormPanelSave: "editFormPanelSave", selectNextInlineRecord: "selectNextInlineRecord", editFormPanelValueChange: "editFormPanelValueChange", ulvCommandClick: "ulvCommandClick", sortAscending: "sortAscending", workflowShareButtons: "workflowShareButtons", sortDescending: "sortDescending", filter: "filter", executeToolbarButton: "executeToolbarButton", resetGridSettings: "resetGridSettings", sortSettingsChange: "sortSettingsChange", rowCheck: "rowCheck", rowClick: "rowClick", cartableFormClosed: "cartableFormClosed", createNewMo: "createNewMo", updateMo: "updateMo", expandClick: "expandClick", trackBySelectedFn: "trackBySelectedFn", allCheckbox: "allCheckbox", mandatory: "mandatory", columnResized: "columnResized", hasDetailsInRow: "hasDetailsInRow" }, host: { properties: { "class.report-view": "this._reportView", "style.visibility": "this._visibility" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
11823
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: ReportViewBaseComponent, isStandalone: false, selector: "bnrc-report-view-base", inputs: { contextView: "contextView", viewSetting: "viewSetting", allColumns: "allColumns", isCheckList: "isCheckList", simpleInlineEdit: "simpleInlineEdit", inlineEditWithoutSelection: "inlineEditWithoutSelection", hideToolbar: "hideToolbar", hideTitle: "hideTitle", toolbarButtons: "toolbarButtons", allChecked: "allChecked", moDataList: "moDataList", UlvMainCtrlr: "UlvMainCtrlr", access: "access", groupby: "groupby", selectedCount: "selectedCount", conditionalFormats: "conditionalFormats", parentHeight: "parentHeight", deviceName: "deviceName", deviceSize: "deviceSize", contextMenuItems: "contextMenuItems", columns: "columns", allowInlineEdit: "allowInlineEdit", secondaryColumns: "secondaryColumns", popin: "popin", customFieldInfo: "customFieldInfo", hasSummary: "hasSummary", layoutInfo: "layoutInfo", hasSelected: "hasSelected", hideIcon: "hideIcon", columnsCount: "columnsCount", hideOpenIcon: "hideOpenIcon", openOnClick: "openOnClick", typeDefId: "typeDefId", reportId: "reportId", listEditViewId: "listEditViewId", typeViewId: "typeViewId", extraRelation: "extraRelation", relationList: "relationList", disableResponsive: "disableResponsive", rowItem: "rowItem", mobileOrTablet: "mobileOrTablet", inDialog: "inDialog", isMultiSelect: "isMultiSelect", fullscreen: "fullscreen", hideSearchpanel: "hideSearchpanel", newInlineEditMo: "newInlineEditMo", selectedMo: "selectedMo", inlineEditMode: "inlineEditMode", onlyInlineEdit: "onlyInlineEdit", rowHoverable: "rowHoverable", groupSummary: "groupSummary", tlbButtons: "tlbButtons", formSetting: "formSetting", disableOverflowContextMenu: "disableOverflowContextMenu", rowActivable: "rowActivable", isReportPage: "isReportPage", ulvHeightSizeType: "ulvHeightSizeType", contentHeight: "contentHeight", effectiveReportLayout: "effectiveReportLayout", contentDensity: "contentDensity", rtl: "rtl", showOkCancelButtons: "showOkCancelButtons", title: "title", hasInlineDeleteButton: "hasInlineDeleteButton", hasInlineEditButton: "hasInlineEditButton", contextSetting: "contextSetting", gridFreeColumnSizing: "gridFreeColumnSizing", navigationArrow: "navigationArrow", cartableTemplates: "cartableTemplates", cartableChildsMo: "cartableChildsMo", pagingSetting: "pagingSetting", containerWidth: "containerWidth" }, outputs: { columnSummary: "columnSummary", escapeKey: "escapeKey", resetWorkflowState: "resetWorkflowState", deselectAll: "deselectAll", editFormPanelCancel: "editFormPanelCancel", editFormPanelSave: "editFormPanelSave", selectNextInlineRecord: "selectNextInlineRecord", editFormPanelValueChange: "editFormPanelValueChange", ulvCommandClick: "ulvCommandClick", sortAscending: "sortAscending", workflowShareButtons: "workflowShareButtons", sortDescending: "sortDescending", filter: "filter", executeToolbarButton: "executeToolbarButton", resetGridSettings: "resetGridSettings", sortSettingsChange: "sortSettingsChange", rowCheck: "rowCheck", rowClick: "rowClick", cartableFormClosed: "cartableFormClosed", createNewMo: "createNewMo", updateMo: "updateMo", expandClick: "expandClick", trackBySelectedFn: "trackBySelectedFn", allCheckbox: "allCheckbox", mandatory: "mandatory", columnResized: "columnResized", hasDetailsInRow: "hasDetailsInRow" }, host: { properties: { "class.report-view": "this._reportView", "style.visibility": "this._visibility" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
11638
11824
|
}
|
|
11639
11825
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ReportViewBaseComponent, decorators: [{
|
|
11640
11826
|
type: Component,
|
|
@@ -11766,6 +11952,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
11766
11952
|
type: Input
|
|
11767
11953
|
}], contentHeight: [{
|
|
11768
11954
|
type: Input
|
|
11955
|
+
}], effectiveReportLayout: [{
|
|
11956
|
+
type: Input
|
|
11769
11957
|
}], contentDensity: [{
|
|
11770
11958
|
type: Input
|
|
11771
11959
|
}], rtl: [{
|
|
@@ -12917,6 +13105,7 @@ class SplitterComponent extends BaseComponent {
|
|
|
12917
13105
|
super(...arguments);
|
|
12918
13106
|
this.emptyClass = true;
|
|
12919
13107
|
this.isBig = false;
|
|
13108
|
+
this.spliterResized = new EventEmitter();
|
|
12920
13109
|
this._renderer = inject(Renderer2);
|
|
12921
13110
|
this._portalService = inject(PortalService);
|
|
12922
13111
|
}
|
|
@@ -12950,7 +13139,7 @@ class SplitterComponent extends BaseComponent {
|
|
|
12950
13139
|
}), switchMap(() => {
|
|
12951
13140
|
// تشخیص جهت در لحظه شروع درگ
|
|
12952
13141
|
const isRtl = getComputedStyle(this.el.nativeElement).direction === 'rtl';
|
|
12953
|
-
let previousElementSibling = this.el.nativeElement.previousElementSibling;
|
|
13142
|
+
let previousElementSibling = this.elDom || this.el.nativeElement.previousElementSibling;
|
|
12954
13143
|
while (previousElementSibling &&
|
|
12955
13144
|
previousElementSibling.tagName.toLocaleLowerCase() === 'bnrc-dynamic-layout') {
|
|
12956
13145
|
previousElementSibling &&
|
|
@@ -12984,9 +13173,11 @@ class SplitterComponent extends BaseComponent {
|
|
|
12984
13173
|
newWidth = event.clientX - rect.left;
|
|
12985
13174
|
}
|
|
12986
13175
|
if ((!this.minWidth || newWidth >= this.minWidth) && (!this.maxWidth || newWidth <= this.maxWidth)) {
|
|
12987
|
-
this._renderer.setStyle(nextSibling, 'overflow', `hidden`);
|
|
12988
|
-
|
|
13176
|
+
nextSibling && this._renderer.setStyle(nextSibling, 'overflow', `hidden`);
|
|
13177
|
+
const value = `${newWidth}px`;
|
|
13178
|
+
this._renderer.setStyle(sibling, 'width', value);
|
|
12989
13179
|
this._renderer.setStyle(sibling, 'flex', 'none');
|
|
13180
|
+
this.spliterResized.emit(value);
|
|
12990
13181
|
}
|
|
12991
13182
|
}
|
|
12992
13183
|
toggleResizingState(isResizing, nextSibling) {
|
|
@@ -12994,15 +13185,15 @@ class SplitterComponent extends BaseComponent {
|
|
|
12994
13185
|
this._renderer[action](document.body, 'resizing-active');
|
|
12995
13186
|
this._renderer[action](this.el.nativeElement, 'is-resizing');
|
|
12996
13187
|
if (!isResizing) {
|
|
12997
|
-
this._renderer.removeClass(nextSibling, 'tw-overflow-hidden');
|
|
13188
|
+
nextSibling && this._renderer.removeClass(nextSibling, 'tw-overflow-hidden');
|
|
12998
13189
|
this._portalService.windowResize();
|
|
12999
13190
|
}
|
|
13000
13191
|
else {
|
|
13001
|
-
this._renderer.addClass(nextSibling, 'tw-overflow-hidden');
|
|
13192
|
+
nextSibling && this._renderer.addClass(nextSibling, 'tw-overflow-hidden');
|
|
13002
13193
|
}
|
|
13003
13194
|
}
|
|
13004
13195
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SplitterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
13005
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: SplitterComponent, isStandalone: false, selector: "bnrc-splitter", inputs: { minWidth: "minWidth", maxWidth: "maxWidth", config: "config" }, host: { properties: { "class.empty-space": "this.emptyClass", "class.big": "this.isBig", "style.flex": "this.flex", "style.max-width.px": "this.elMaxWidth", "style.height.px": "this.elHeight" } }, usesInheritance: true, ngImport: i0, template: `<div class="splitter-container">
|
|
13196
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: SplitterComponent, isStandalone: false, selector: "bnrc-splitter", inputs: { minWidth: "minWidth", maxWidth: "maxWidth", config: "config", elDom: "elDom" }, outputs: { spliterResized: "spliterResized" }, host: { properties: { "class.empty-space": "this.emptyClass", "class.big": "this.isBig", "style.flex": "this.flex", "style.max-width.px": "this.elMaxWidth", "style.height.px": "this.elHeight" } }, usesInheritance: true, ngImport: i0, template: `<div class="splitter-container">
|
|
13006
13197
|
<div class="splitter-line"></div>
|
|
13007
13198
|
<div class="grip-handle">
|
|
13008
13199
|
<svg viewBox="0 0 24 24" fill="currentColor">
|
|
@@ -13014,7 +13205,7 @@ class SplitterComponent extends BaseComponent {
|
|
|
13014
13205
|
<circle cx="15" cy="16" r="1.5" />
|
|
13015
13206
|
</svg>
|
|
13016
13207
|
</div>
|
|
13017
|
-
</div>`, isInline: true, styles: [":host{display:flex;align-items:center;justify-content:center;width:12px;cursor:col-resize;z-index:50;-webkit-user-select:none;user-select:none;position:relative;background:var(--sapBackgroundColor)}.splitter-container{height:100%;width:100%;display:flex;align-items:center;justify-content:center;position:relative}.splitter-line{width:1px;height:90%;background:linear-gradient(to bottom,transparent 0%,rgba(203,213,225,1) 15%,rgba(203,213,225,1) 85%,transparent 100%);transition:all .2s}.grip-handle{position:absolute;width:
|
|
13208
|
+
</div>`, isInline: true, styles: [":host{display:flex;align-items:center;justify-content:center;width:12px;cursor:col-resize;z-index:50;-webkit-user-select:none;user-select:none;position:relative;background:var(--sapBackgroundColor)}.splitter-container{height:100%;width:100%;display:flex;align-items:center;justify-content:center;position:relative}.splitter-line{width:1px;height:90%;background:linear-gradient(to bottom,transparent 0%,rgba(203,213,225,1) 15%,rgba(203,213,225,1) 85%,transparent 100%);transition:all .2s}.grip-handle{position:absolute;width:17px;height:20px;background:#fff;border:1px solid #e2e8f0;border-radius:6px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px #0000000d;transition:all .2s;color:#94a3b8}.grip-handle svg{width:14px;height:14px}:host:hover .splitter-line,.is-resizing .splitter-line{background:linear-gradient(to bottom,transparent 0%,#3b82f6 15%,#3b82f6 85%,transparent 100%);width:2px}:host:hover .grip-handle,.is-resizing .grip-handle{border-color:#3b82f6;color:#3b82f6;box-shadow:0 4px 6px -1px #3b82f633;transform:scale(1.05)}\n"] }); }
|
|
13018
13209
|
}
|
|
13019
13210
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: SplitterComponent, decorators: [{
|
|
13020
13211
|
type: Component,
|
|
@@ -13030,7 +13221,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
13030
13221
|
<circle cx="15" cy="16" r="1.5" />
|
|
13031
13222
|
</svg>
|
|
13032
13223
|
</div>
|
|
13033
|
-
</div>`, styles: [":host{display:flex;align-items:center;justify-content:center;width:12px;cursor:col-resize;z-index:50;-webkit-user-select:none;user-select:none;position:relative;background:var(--sapBackgroundColor)}.splitter-container{height:100%;width:100%;display:flex;align-items:center;justify-content:center;position:relative}.splitter-line{width:1px;height:90%;background:linear-gradient(to bottom,transparent 0%,rgba(203,213,225,1) 15%,rgba(203,213,225,1) 85%,transparent 100%);transition:all .2s}.grip-handle{position:absolute;width:
|
|
13224
|
+
</div>`, styles: [":host{display:flex;align-items:center;justify-content:center;width:12px;cursor:col-resize;z-index:50;-webkit-user-select:none;user-select:none;position:relative;background:var(--sapBackgroundColor)}.splitter-container{height:100%;width:100%;display:flex;align-items:center;justify-content:center;position:relative}.splitter-line{width:1px;height:90%;background:linear-gradient(to bottom,transparent 0%,rgba(203,213,225,1) 15%,rgba(203,213,225,1) 85%,transparent 100%);transition:all .2s}.grip-handle{position:absolute;width:17px;height:20px;background:#fff;border:1px solid #e2e8f0;border-radius:6px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px #0000000d;transition:all .2s;color:#94a3b8}.grip-handle svg{width:14px;height:14px}:host:hover .splitter-line,.is-resizing .splitter-line{background:linear-gradient(to bottom,transparent 0%,#3b82f6 15%,#3b82f6 85%,transparent 100%);width:2px}:host:hover .grip-handle,.is-resizing .grip-handle{border-color:#3b82f6;color:#3b82f6;box-shadow:0 4px 6px -1px #3b82f633;transform:scale(1.05)}\n"] }]
|
|
13034
13225
|
}], propDecorators: { emptyClass: [{
|
|
13035
13226
|
type: HostBinding,
|
|
13036
13227
|
args: ['class.empty-space']
|
|
@@ -13046,12 +13237,237 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
13046
13237
|
}], elHeight: [{
|
|
13047
13238
|
type: HostBinding,
|
|
13048
13239
|
args: ['style.height.px']
|
|
13240
|
+
}], spliterResized: [{
|
|
13241
|
+
type: Output
|
|
13049
13242
|
}], minWidth: [{
|
|
13050
13243
|
type: Input
|
|
13051
13244
|
}], maxWidth: [{
|
|
13052
13245
|
type: Input
|
|
13053
13246
|
}], config: [{
|
|
13054
13247
|
type: Input
|
|
13248
|
+
}], elDom: [{
|
|
13249
|
+
type: Input
|
|
13250
|
+
}] } });
|
|
13251
|
+
|
|
13252
|
+
/**
|
|
13253
|
+
* Fills remaining vertical space for the host element.
|
|
13254
|
+
*
|
|
13255
|
+
* - **viewport** — page-level: uses `window.innerHeight` and offset from the top of the viewport.
|
|
13256
|
+
* - **container** — nested layouts: bounds from the **resolved container** (`[containerDom]` if set,
|
|
13257
|
+
* else nearest ancestor with `fillEmptySpace`, else `document.documentElement`).
|
|
13258
|
+
*
|
|
13259
|
+
* Vertical scroll ownership is **not** decided here; use `ScrollLayoutContextHolder` (`nested` | `isolated` | `root`)
|
|
13260
|
+
* from `barsa-novin-ray-core` on the page shell.
|
|
13261
|
+
*
|
|
13262
|
+
* @deprecated Do not use this directive as the primary way to **size individual reports** (grids, calendars).
|
|
13263
|
+
* Prefer the report layout policy / scroll shell (`resolveReportLayoutPolicy`, `report-grid-wrapper`). Filling
|
|
13264
|
+
* **page or shell containers** remains an appropriate use case.
|
|
13265
|
+
**/
|
|
13266
|
+
class FillEmptySpaceDirective extends BaseDirective {
|
|
13267
|
+
constructor() {
|
|
13268
|
+
super(...arguments);
|
|
13269
|
+
/**
|
|
13270
|
+
* `viewport` — fill against the browser viewport (default).
|
|
13271
|
+
* `container` — fill inside resolved container: optional `[containerDom]`, else nearest parent `[fillEmptySpace]`, else document root.
|
|
13272
|
+
*/
|
|
13273
|
+
this.mode = 'viewport';
|
|
13274
|
+
this.heightChanged = new EventEmitter();
|
|
13275
|
+
this._rafId = null;
|
|
13276
|
+
this._viewReady = false;
|
|
13277
|
+
this._onWindowResize = () => this.scheduleMeasure();
|
|
13278
|
+
}
|
|
13279
|
+
ngAfterViewInit() {
|
|
13280
|
+
this._viewReady = true;
|
|
13281
|
+
this.syncFillWatchersAndMeasure();
|
|
13282
|
+
}
|
|
13283
|
+
ngOnChanges(_changes) {
|
|
13284
|
+
if (!this._viewReady) {
|
|
13285
|
+
return;
|
|
13286
|
+
}
|
|
13287
|
+
this.syncFillWatchersAndMeasure();
|
|
13288
|
+
}
|
|
13289
|
+
ngOnDestroy() {
|
|
13290
|
+
this.cancelScheduledMeasure();
|
|
13291
|
+
this.teardownFillLayoutWatchers();
|
|
13292
|
+
super.ngOnDestroy();
|
|
13293
|
+
}
|
|
13294
|
+
Refresh() {
|
|
13295
|
+
this.measureAndApply();
|
|
13296
|
+
}
|
|
13297
|
+
scheduleMeasure() {
|
|
13298
|
+
if (this._rafId !== null) {
|
|
13299
|
+
cancelAnimationFrame(this._rafId);
|
|
13300
|
+
}
|
|
13301
|
+
this._rafId = requestAnimationFrame(() => {
|
|
13302
|
+
this._rafId = null;
|
|
13303
|
+
this.measureAndApply();
|
|
13304
|
+
});
|
|
13305
|
+
}
|
|
13306
|
+
cancelScheduledMeasure() {
|
|
13307
|
+
if (this._rafId !== null) {
|
|
13308
|
+
cancelAnimationFrame(this._rafId);
|
|
13309
|
+
this._rafId = null;
|
|
13310
|
+
}
|
|
13311
|
+
}
|
|
13312
|
+
syncFillWatchersAndMeasure() {
|
|
13313
|
+
this.teardownFillLayoutWatchers();
|
|
13314
|
+
this.cancelScheduledMeasure();
|
|
13315
|
+
if (this.disable) {
|
|
13316
|
+
return;
|
|
13317
|
+
}
|
|
13318
|
+
if (this.height != null) {
|
|
13319
|
+
this.measureAndApply();
|
|
13320
|
+
return;
|
|
13321
|
+
}
|
|
13322
|
+
this.setupFillLayoutWatchers();
|
|
13323
|
+
this.scheduleMeasure();
|
|
13324
|
+
}
|
|
13325
|
+
setupFillLayoutWatchers() {
|
|
13326
|
+
if (typeof ResizeObserver === 'undefined') {
|
|
13327
|
+
window.addEventListener('resize', this._onWindowResize);
|
|
13328
|
+
return;
|
|
13329
|
+
}
|
|
13330
|
+
const roTarget = this.getContainerElement();
|
|
13331
|
+
this._ro = new ResizeObserver(() => this.scheduleMeasure());
|
|
13332
|
+
this._ro.observe(roTarget);
|
|
13333
|
+
window.addEventListener('resize', this._onWindowResize);
|
|
13334
|
+
}
|
|
13335
|
+
teardownFillLayoutWatchers() {
|
|
13336
|
+
this._ro?.disconnect();
|
|
13337
|
+
this._ro = undefined;
|
|
13338
|
+
window.removeEventListener('resize', this._onWindowResize);
|
|
13339
|
+
}
|
|
13340
|
+
measureAndApply() {
|
|
13341
|
+
if (this.disable) {
|
|
13342
|
+
return;
|
|
13343
|
+
}
|
|
13344
|
+
const dom = this._el.nativeElement;
|
|
13345
|
+
if (dom.getClientRects().length === 0) {
|
|
13346
|
+
return;
|
|
13347
|
+
}
|
|
13348
|
+
if (this.height != null) {
|
|
13349
|
+
this.applyFixedHeight(dom);
|
|
13350
|
+
return;
|
|
13351
|
+
}
|
|
13352
|
+
const hostRect = dom.getBoundingClientRect();
|
|
13353
|
+
const containerRect = this.getContainerMetrics();
|
|
13354
|
+
const offsetTop = this.getOffsetTop(hostRect, containerRect);
|
|
13355
|
+
const decrementPx = this.parseCssSize(this.decrement);
|
|
13356
|
+
const available = this.calculateAvailableHeight(containerRect.height, offsetTop, decrementPx);
|
|
13357
|
+
this.applyFillHeight(dom, available);
|
|
13358
|
+
}
|
|
13359
|
+
/**
|
|
13360
|
+
* Element used for ResizeObserver and for `container` mode metrics:
|
|
13361
|
+
* `[containerDom]` → parent `closest('[fillEmptySpace]')` → `document.documentElement`.
|
|
13362
|
+
* Uses `parentElement` before `closest` so the host itself is not selected.
|
|
13363
|
+
*/
|
|
13364
|
+
getContainerElement() {
|
|
13365
|
+
if (this.containerDom) {
|
|
13366
|
+
return this.containerDom;
|
|
13367
|
+
}
|
|
13368
|
+
const host = this._el.nativeElement;
|
|
13369
|
+
const parentFill = host.parentElement?.closest('[fillEmptySpace]');
|
|
13370
|
+
if (parentFill) {
|
|
13371
|
+
return parentFill;
|
|
13372
|
+
}
|
|
13373
|
+
return document.documentElement;
|
|
13374
|
+
}
|
|
13375
|
+
getContainerMetrics() {
|
|
13376
|
+
if (this.mode === 'viewport') {
|
|
13377
|
+
// Same spirit as legacy `100svh`: viewport height; explicit container is not used for sizing.
|
|
13378
|
+
return { top: 0, height: window.innerHeight };
|
|
13379
|
+
}
|
|
13380
|
+
const r = this.getContainerElement().getBoundingClientRect();
|
|
13381
|
+
return { top: r.top, height: r.height };
|
|
13382
|
+
}
|
|
13383
|
+
getOffsetTop(hostRect, containerRect) {
|
|
13384
|
+
return this.dontUseTopBound ? 0 : hostRect.top - containerRect.top;
|
|
13385
|
+
}
|
|
13386
|
+
calculateAvailableHeight(containerHeight, offsetTop, decrementPx) {
|
|
13387
|
+
return Math.max(0, containerHeight - offsetTop - decrementPx);
|
|
13388
|
+
}
|
|
13389
|
+
applyFillHeight(dom, px) {
|
|
13390
|
+
const prop = this.getStyleProperty();
|
|
13391
|
+
if (prop === 'min-height' || prop === 'max-height') {
|
|
13392
|
+
this._renderer2.setStyle(dom, 'height', 'auto');
|
|
13393
|
+
}
|
|
13394
|
+
this._renderer2.setStyle(dom, prop, `${px}px`);
|
|
13395
|
+
this.heightChanged.emit();
|
|
13396
|
+
}
|
|
13397
|
+
applyFixedHeight(dom) {
|
|
13398
|
+
if (this.setMinHeight) {
|
|
13399
|
+
this._renderer2.setStyle(dom, 'height', 'auto');
|
|
13400
|
+
}
|
|
13401
|
+
if (this.setMaxHeight) {
|
|
13402
|
+
this._renderer2.setStyle(dom, 'height', 'auto');
|
|
13403
|
+
}
|
|
13404
|
+
const prop = this.setMinHeight ? 'min-height' : this.setMaxHeight ? 'max-height' : 'height';
|
|
13405
|
+
this._renderer2.setStyle(dom, prop, `${this.height}px`);
|
|
13406
|
+
this.heightChanged.emit();
|
|
13407
|
+
}
|
|
13408
|
+
getStyleProperty() {
|
|
13409
|
+
if (this.setMinHeight) {
|
|
13410
|
+
return 'min-height';
|
|
13411
|
+
}
|
|
13412
|
+
if (this.setMaxHeight) {
|
|
13413
|
+
return 'max-height';
|
|
13414
|
+
}
|
|
13415
|
+
return 'height';
|
|
13416
|
+
}
|
|
13417
|
+
parseCssSize(value) {
|
|
13418
|
+
if (value == null || value === '') {
|
|
13419
|
+
return 0;
|
|
13420
|
+
}
|
|
13421
|
+
if (typeof value === 'number' && !Number.isNaN(value)) {
|
|
13422
|
+
return value;
|
|
13423
|
+
}
|
|
13424
|
+
const s = String(value).trim().toLowerCase();
|
|
13425
|
+
if (!s) {
|
|
13426
|
+
return 0;
|
|
13427
|
+
}
|
|
13428
|
+
if (s.endsWith('rem')) {
|
|
13429
|
+
const n = parseFloat(s);
|
|
13430
|
+
if (Number.isNaN(n)) {
|
|
13431
|
+
return 0;
|
|
13432
|
+
}
|
|
13433
|
+
const rootPx = parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;
|
|
13434
|
+
return n * rootPx;
|
|
13435
|
+
}
|
|
13436
|
+
if (s.endsWith('px')) {
|
|
13437
|
+
const n = parseFloat(s);
|
|
13438
|
+
return Number.isNaN(n) ? 0 : n;
|
|
13439
|
+
}
|
|
13440
|
+
const n = parseFloat(s);
|
|
13441
|
+
return Number.isNaN(n) ? 0 : n;
|
|
13442
|
+
}
|
|
13443
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FillEmptySpaceDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
13444
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.6", type: FillEmptySpaceDirective, isStandalone: false, selector: "[fillEmptySpace]", inputs: { mode: "mode", containerDom: "containerDom", decrement: "decrement", disable: "disable", height: "height", dontUseTopBound: "dontUseTopBound", setMinHeight: "setMinHeight", setMaxHeight: "setMaxHeight" }, outputs: { heightChanged: "heightChanged" }, exportAs: ["fillEmptySpace"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
|
|
13445
|
+
}
|
|
13446
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FillEmptySpaceDirective, decorators: [{
|
|
13447
|
+
type: Directive,
|
|
13448
|
+
args: [{
|
|
13449
|
+
selector: '[fillEmptySpace]',
|
|
13450
|
+
exportAs: 'fillEmptySpace',
|
|
13451
|
+
standalone: false
|
|
13452
|
+
}]
|
|
13453
|
+
}], propDecorators: { mode: [{
|
|
13454
|
+
type: Input
|
|
13455
|
+
}], containerDom: [{
|
|
13456
|
+
type: Input
|
|
13457
|
+
}], decrement: [{
|
|
13458
|
+
type: Input
|
|
13459
|
+
}], disable: [{
|
|
13460
|
+
type: Input
|
|
13461
|
+
}], height: [{
|
|
13462
|
+
type: Input
|
|
13463
|
+
}], dontUseTopBound: [{
|
|
13464
|
+
type: Input
|
|
13465
|
+
}], setMinHeight: [{
|
|
13466
|
+
type: Input
|
|
13467
|
+
}], setMaxHeight: [{
|
|
13468
|
+
type: Input
|
|
13469
|
+
}], heightChanged: [{
|
|
13470
|
+
type: Output
|
|
13055
13471
|
}] } });
|
|
13056
13472
|
|
|
13057
13473
|
class MasterDetailsPageComponent extends PageWithFormHandlerBaseComponent {
|
|
@@ -13061,8 +13477,10 @@ class MasterDetailsPageComponent extends PageWithFormHandlerBaseComponent {
|
|
|
13061
13477
|
this.sectionClass = true;
|
|
13062
13478
|
this.ismodal = false;
|
|
13063
13479
|
this.isinsideview = false;
|
|
13480
|
+
this._scrollLayoutContext = inject(ScrollLayoutContextHolder);
|
|
13064
13481
|
}
|
|
13065
13482
|
ngOnInit() {
|
|
13483
|
+
this._scrollLayoutContext.setMode('isolated');
|
|
13066
13484
|
this.settings = BarsaApi.Common.Util.TryGetValue(this._activatedRoute, 'data._value.pageData.Component.Settings', null);
|
|
13067
13485
|
const isModal = this.settings?.IsModal;
|
|
13068
13486
|
if (isModal) {
|
|
@@ -13091,42 +13509,56 @@ class MasterDetailsPageComponent extends PageWithFormHandlerBaseComponent {
|
|
|
13091
13509
|
ngOnDestroy() {
|
|
13092
13510
|
super.ngOnDestroy();
|
|
13093
13511
|
// add ngondestroy because to call routingservice ngondestroy.
|
|
13094
|
-
// if i dont add this ngondestroy in routingservice do not call.
|
|
13512
|
+
// if i dont add this ngondestroy in routingservice do not call.
|
|
13095
13513
|
}
|
|
13096
13514
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: MasterDetailsPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
13097
|
-
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.modal": "this.ismodal", "class.insideview": "this.isinsideview" } }, providers: [RoutingService, ContainerService], usesInheritance: true, ngImport: i0, template: `
|
|
13098
|
-
<div
|
|
13515
|
+
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.modal": "this.ismodal", "class.insideview": "this.isinsideview" } }, providers: [RoutingService, ContainerService, ScrollLayoutContextHolder], usesInheritance: true, ngImport: i0, template: `
|
|
13516
|
+
<div
|
|
13517
|
+
class="tw-flex tw-h-full tw-w-full tw-flex-col md:tw-flex-row tw-p-2"
|
|
13518
|
+
fillEmptySpace
|
|
13519
|
+
style="box-sizing: border-box;"
|
|
13520
|
+
>
|
|
13099
13521
|
<!-- لیست -->
|
|
13100
13522
|
<div class="tw-w-full md:tw-w-96 master">
|
|
13101
13523
|
<ng-container #containerRef></ng-container>
|
|
13102
13524
|
</div>
|
|
13103
13525
|
<bnrc-splitter></bnrc-splitter>
|
|
13104
13526
|
<!-- جزئیات -->
|
|
13105
|
-
<div
|
|
13527
|
+
<div
|
|
13528
|
+
class="fd-dynamic-page__content tw-flex tw-flex-1 tw-flex-col tw-h-full tw-min-h-0 tw-w-full md:tw-flex-1
|
|
13529
|
+
!tw-overflow-hidden details tw-min-w-0 tw-p-0"
|
|
13530
|
+
>
|
|
13106
13531
|
<router-outlet name="details"></router-outlet>
|
|
13107
13532
|
</div>
|
|
13108
13533
|
</div>
|
|
13109
13534
|
<router-outlet></router-outlet>
|
|
13110
13535
|
<router-outlet name="dialog"></router-outlet>
|
|
13111
|
-
`, 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: SplitterComponent, selector: "bnrc-splitter", inputs: ["minWidth", "maxWidth", "config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
13536
|
+
`, isInline: true, styles: [":host{display:block;box-sizing:border-box}:host .fd-dynamic-page__content ::ng-deep bnrc-empty-page{flex:1 1 auto;min-height:0}\n"], dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: SplitterComponent, selector: "bnrc-splitter", inputs: ["minWidth", "maxWidth", "config", "elDom"], outputs: ["spliterResized"] }, { kind: "directive", type: FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["mode", "containerDom", "decrement", "disable", "height", "dontUseTopBound", "setMinHeight", "setMaxHeight"], outputs: ["heightChanged"], exportAs: ["fillEmptySpace"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
13112
13537
|
}
|
|
13113
13538
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: MasterDetailsPageComponent, decorators: [{
|
|
13114
13539
|
type: Component,
|
|
13115
13540
|
args: [{ selector: 'bnrc-master-details-page', template: `
|
|
13116
|
-
<div
|
|
13541
|
+
<div
|
|
13542
|
+
class="tw-flex tw-h-full tw-w-full tw-flex-col md:tw-flex-row tw-p-2"
|
|
13543
|
+
fillEmptySpace
|
|
13544
|
+
style="box-sizing: border-box;"
|
|
13545
|
+
>
|
|
13117
13546
|
<!-- لیست -->
|
|
13118
13547
|
<div class="tw-w-full md:tw-w-96 master">
|
|
13119
13548
|
<ng-container #containerRef></ng-container>
|
|
13120
13549
|
</div>
|
|
13121
13550
|
<bnrc-splitter></bnrc-splitter>
|
|
13122
13551
|
<!-- جزئیات -->
|
|
13123
|
-
<div
|
|
13552
|
+
<div
|
|
13553
|
+
class="fd-dynamic-page__content tw-flex tw-flex-1 tw-flex-col tw-h-full tw-min-h-0 tw-w-full md:tw-flex-1
|
|
13554
|
+
!tw-overflow-hidden details tw-min-w-0 tw-p-0"
|
|
13555
|
+
>
|
|
13124
13556
|
<router-outlet name="details"></router-outlet>
|
|
13125
13557
|
</div>
|
|
13126
13558
|
</div>
|
|
13127
13559
|
<router-outlet></router-outlet>
|
|
13128
13560
|
<router-outlet name="dialog"></router-outlet>
|
|
13129
|
-
`, providers: [RoutingService, ContainerService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [":host{display:block}\n"] }]
|
|
13561
|
+
`, providers: [RoutingService, ContainerService, ScrollLayoutContextHolder], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [":host{display:block;box-sizing:border-box}:host .fd-dynamic-page__content ::ng-deep bnrc-empty-page{flex:1 1 auto;min-height:0}\n"] }]
|
|
13130
13562
|
}], propDecorators: { _position: [{
|
|
13131
13563
|
type: HostBinding,
|
|
13132
13564
|
args: ['style.position']
|
|
@@ -13158,123 +13590,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
13158
13590
|
<ng-container #containerBottomRef></ng-container> `, changeDetection: ChangeDetectionStrategy.OnPush, providers: [RoutingService], standalone: false, styles: [":host{min-height:100svh}\n"] }]
|
|
13159
13591
|
}] });
|
|
13160
13592
|
|
|
13161
|
-
class FillEmptySpaceDirective extends BaseDirective {
|
|
13162
|
-
constructor() {
|
|
13163
|
-
super(...arguments);
|
|
13164
|
-
this.heightChanged = new EventEmitter();
|
|
13165
|
-
this._height = '100svh';
|
|
13166
|
-
this.topBound = '';
|
|
13167
|
-
this.oldTopBound = '';
|
|
13168
|
-
}
|
|
13169
|
-
ngAfterViewInit() {
|
|
13170
|
-
super.ngAfterViewInit();
|
|
13171
|
-
if (this.disable) {
|
|
13172
|
-
return;
|
|
13173
|
-
}
|
|
13174
|
-
this._handleResize();
|
|
13175
|
-
}
|
|
13176
|
-
ngOnDestroy() {
|
|
13177
|
-
super.ngOnDestroy();
|
|
13178
|
-
this._ro?.disconnect();
|
|
13179
|
-
}
|
|
13180
|
-
Refresh() {
|
|
13181
|
-
this._setHeightOfFormContent();
|
|
13182
|
-
}
|
|
13183
|
-
_setHeight() {
|
|
13184
|
-
setTimeout(() => {
|
|
13185
|
-
this._setHeightOfFormContent();
|
|
13186
|
-
if (this.topBound === '0px') {
|
|
13187
|
-
setTimeout(() => {
|
|
13188
|
-
this._setHeightOfFormContent();
|
|
13189
|
-
}, 1000);
|
|
13190
|
-
}
|
|
13191
|
-
}, 100);
|
|
13192
|
-
}
|
|
13193
|
-
_handleResize() {
|
|
13194
|
-
if (typeof ResizeObserver === 'undefined') {
|
|
13195
|
-
return;
|
|
13196
|
-
} // چک کردن پشتیبانی مرورگر به جای try-catch
|
|
13197
|
-
this._ro = new ResizeObserver((entries) => {
|
|
13198
|
-
const entry = entries[0];
|
|
13199
|
-
// چک میکنیم که المنت مخفی (display: none) نباشد
|
|
13200
|
-
if (entry && entry.contentRect.height > 0) {
|
|
13201
|
-
requestAnimationFrame(() => {
|
|
13202
|
-
this._setHeight();
|
|
13203
|
-
});
|
|
13204
|
-
}
|
|
13205
|
-
});
|
|
13206
|
-
if (this._el?.nativeElement) {
|
|
13207
|
-
this._ro.observe(this._el.nativeElement);
|
|
13208
|
-
}
|
|
13209
|
-
}
|
|
13210
|
-
_setHeightOfFormContent() {
|
|
13211
|
-
const dom = this._el.nativeElement;
|
|
13212
|
-
const bound = dom.getBoundingClientRect();
|
|
13213
|
-
this.topBound = `${bound.top}px`;
|
|
13214
|
-
let decrement = this.decrement;
|
|
13215
|
-
if (this.oldTopBound && this.oldTopBound === this.topBound) {
|
|
13216
|
-
return;
|
|
13217
|
-
}
|
|
13218
|
-
if (this.setMinHeight) {
|
|
13219
|
-
this._renderer2.setStyle(dom, 'height', `auto`);
|
|
13220
|
-
}
|
|
13221
|
-
if (this.setMaxHeight) {
|
|
13222
|
-
this._renderer2.setStyle(dom, 'height', `auto`);
|
|
13223
|
-
}
|
|
13224
|
-
if (this.height) {
|
|
13225
|
-
let prop = 'height';
|
|
13226
|
-
this.setMinHeight && (prop = 'min-height');
|
|
13227
|
-
this.setMaxHeight && (prop = 'max-height');
|
|
13228
|
-
this._renderer2.setStyle(dom, prop, `${this.height}px`);
|
|
13229
|
-
this.heightChanged.emit();
|
|
13230
|
-
return;
|
|
13231
|
-
}
|
|
13232
|
-
if (this.containerDom) {
|
|
13233
|
-
this._height = `${this.containerDom.getBoundingClientRect().height}px`;
|
|
13234
|
-
}
|
|
13235
|
-
if (decrement) {
|
|
13236
|
-
decrement = ` - ${decrement}`;
|
|
13237
|
-
}
|
|
13238
|
-
else {
|
|
13239
|
-
decrement = '';
|
|
13240
|
-
}
|
|
13241
|
-
if (this.dontUseTopBound) {
|
|
13242
|
-
this.topBound = '0px';
|
|
13243
|
-
}
|
|
13244
|
-
this.oldTopBound = this.topBound;
|
|
13245
|
-
if (bound) {
|
|
13246
|
-
this._renderer2.setStyle(dom, this.setMinHeight ? 'min-height' : 'height', `calc(${this._height} - ${this.topBound}${decrement})`);
|
|
13247
|
-
}
|
|
13248
|
-
this.heightChanged.emit();
|
|
13249
|
-
}
|
|
13250
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FillEmptySpaceDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
13251
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.6", type: FillEmptySpaceDirective, isStandalone: false, selector: "[fillEmptySpace]", inputs: { containerDom: "containerDom", decrement: "decrement", disable: "disable", height: "height", dontUseTopBound: "dontUseTopBound", setMinHeight: "setMinHeight", setMaxHeight: "setMaxHeight" }, outputs: { heightChanged: "heightChanged" }, exportAs: ["fillEmptySpace"], usesInheritance: true, ngImport: i0 }); }
|
|
13252
|
-
}
|
|
13253
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FillEmptySpaceDirective, decorators: [{
|
|
13254
|
-
type: Directive,
|
|
13255
|
-
args: [{
|
|
13256
|
-
selector: '[fillEmptySpace]',
|
|
13257
|
-
exportAs: 'fillEmptySpace',
|
|
13258
|
-
standalone: false
|
|
13259
|
-
}]
|
|
13260
|
-
}], propDecorators: { containerDom: [{
|
|
13261
|
-
type: Input
|
|
13262
|
-
}], decrement: [{
|
|
13263
|
-
type: Input
|
|
13264
|
-
}], disable: [{
|
|
13265
|
-
type: Input
|
|
13266
|
-
}], height: [{
|
|
13267
|
-
type: Input
|
|
13268
|
-
}], dontUseTopBound: [{
|
|
13269
|
-
type: Input
|
|
13270
|
-
}], setMinHeight: [{
|
|
13271
|
-
type: Input
|
|
13272
|
-
}], setMaxHeight: [{
|
|
13273
|
-
type: Input
|
|
13274
|
-
}], heightChanged: [{
|
|
13275
|
-
type: Output
|
|
13276
|
-
}] } });
|
|
13277
|
-
|
|
13278
13593
|
class PortalPageSidebarComponent extends PageBaseComponent {
|
|
13279
13594
|
constructor() {
|
|
13280
13595
|
super(...arguments);
|
|
@@ -13289,7 +13604,7 @@ class PortalPageSidebarComponent extends PageBaseComponent {
|
|
|
13289
13604
|
<div class="sidebar" fillEmptySpace><ng-container #containerRef></ng-container></div>
|
|
13290
13605
|
<div class="mainside"><router-outlet name="mainside"></router-outlet></div>
|
|
13291
13606
|
</div>
|
|
13292
|
-
<router-outlet></router-outlet>`, isInline: true, dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["containerDom", "decrement", "disable", "height", "dontUseTopBound", "setMinHeight", "setMaxHeight"], outputs: ["heightChanged"], exportAs: ["fillEmptySpace"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
13607
|
+
<router-outlet></router-outlet>`, isInline: true, dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["mode", "containerDom", "decrement", "disable", "height", "dontUseTopBound", "setMinHeight", "setMaxHeight"], outputs: ["heightChanged"], exportAs: ["fillEmptySpace"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
13293
13608
|
}
|
|
13294
13609
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: PortalPageSidebarComponent, decorators: [{
|
|
13295
13610
|
type: Component,
|
|
@@ -14577,69 +14892,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
14577
14892
|
type: Input
|
|
14578
14893
|
}] } });
|
|
14579
14894
|
|
|
14580
|
-
class DynamicTileGroupComponent extends BaseDynamicComponent {
|
|
14581
|
-
constructor() {
|
|
14582
|
-
super(...arguments);
|
|
14583
|
-
this.tilesDropped = new EventEmitter();
|
|
14584
|
-
this.hideAppTileClick = new EventEmitter();
|
|
14585
|
-
this.renameAppTileClick = new EventEmitter();
|
|
14586
|
-
this.changeGroupAppTileClick = new EventEmitter();
|
|
14587
|
-
this.toggleGroup = new EventEmitter();
|
|
14588
|
-
this.resetGroup = new EventEmitter();
|
|
14589
|
-
this.deleteGroup = new EventEmitter();
|
|
14590
|
-
}
|
|
14591
|
-
ngOnChanges(changes) {
|
|
14592
|
-
super.ngOnChanges(changes);
|
|
14593
|
-
const { appTileGroup } = changes;
|
|
14594
|
-
if (appTileGroup && !appTileGroup.firstChange) {
|
|
14595
|
-
this._renderComponentInstance();
|
|
14596
|
-
}
|
|
14597
|
-
}
|
|
14598
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DynamicTileGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
14599
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: DynamicTileGroupComponent, isStandalone: false, selector: "bnrc-dynamic-tile-group,[dynamictilegroup]", inputs: { appTileGroup: "appTileGroup", tabRef: "tabRef", stackContent: "stackContent", cssStyles: "cssStyles", edit: "edit", rtl: "rtl", isAppTileSubGroup: "isAppTileSubGroup", deviceSize: "deviceSize", isLast: "isLast" }, outputs: { tilesDropped: "tilesDropped", hideAppTileClick: "hideAppTileClick", renameAppTileClick: "renameAppTileClick", changeGroupAppTileClick: "changeGroupAppTileClick", toggleGroup: "toggleGroup", resetGroup: "resetGroup", deleteGroup: "deleteGroup" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `<ng-container #componentContainer></ng-container>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
14600
|
-
}
|
|
14601
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DynamicTileGroupComponent, decorators: [{
|
|
14602
|
-
type: Component,
|
|
14603
|
-
args: [{
|
|
14604
|
-
selector: 'bnrc-dynamic-tile-group,[dynamictilegroup]',
|
|
14605
|
-
template: `<ng-container #componentContainer></ng-container>`,
|
|
14606
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
14607
|
-
standalone: false
|
|
14608
|
-
}]
|
|
14609
|
-
}], propDecorators: { appTileGroup: [{
|
|
14610
|
-
type: Input
|
|
14611
|
-
}], tabRef: [{
|
|
14612
|
-
type: Input
|
|
14613
|
-
}], stackContent: [{
|
|
14614
|
-
type: Input
|
|
14615
|
-
}], cssStyles: [{
|
|
14616
|
-
type: Input
|
|
14617
|
-
}], edit: [{
|
|
14618
|
-
type: Input
|
|
14619
|
-
}], rtl: [{
|
|
14620
|
-
type: Input
|
|
14621
|
-
}], isAppTileSubGroup: [{
|
|
14622
|
-
type: Input
|
|
14623
|
-
}], deviceSize: [{
|
|
14624
|
-
type: Input
|
|
14625
|
-
}], isLast: [{
|
|
14626
|
-
type: Input
|
|
14627
|
-
}], tilesDropped: [{
|
|
14628
|
-
type: Output
|
|
14629
|
-
}], hideAppTileClick: [{
|
|
14630
|
-
type: Output
|
|
14631
|
-
}], renameAppTileClick: [{
|
|
14632
|
-
type: Output
|
|
14633
|
-
}], changeGroupAppTileClick: [{
|
|
14634
|
-
type: Output
|
|
14635
|
-
}], toggleGroup: [{
|
|
14636
|
-
type: Output
|
|
14637
|
-
}], resetGroup: [{
|
|
14638
|
-
type: Output
|
|
14639
|
-
}], deleteGroup: [{
|
|
14640
|
-
type: Output
|
|
14641
|
-
}] } });
|
|
14642
|
-
|
|
14643
14895
|
class DynamicUlvToolbarComponent extends BaseDynamicComponent {
|
|
14644
14896
|
constructor() {
|
|
14645
14897
|
super(...arguments);
|
|
@@ -15641,6 +15893,7 @@ class RenderUlvViewerDirective extends BaseDirective {
|
|
|
15641
15893
|
this._injector = inject(Injector);
|
|
15642
15894
|
this._vcr = inject(ViewContainerRef);
|
|
15643
15895
|
this._cdr = inject(ChangeDetectorRef);
|
|
15896
|
+
this._renderer = inject(Renderer2);
|
|
15644
15897
|
}
|
|
15645
15898
|
ngAfterViewInit() {
|
|
15646
15899
|
super.ngAfterViewInit();
|
|
@@ -15671,6 +15924,7 @@ class RenderUlvViewerDirective extends BaseDirective {
|
|
|
15671
15924
|
.getComponent(moduleName, modulePath, componentName, selector, this._injector)
|
|
15672
15925
|
.pipe(takeUntil(this._onDestroy$), tap((component) => {
|
|
15673
15926
|
component.instance.id = getUniqueId(4);
|
|
15927
|
+
this._renderer.addClass(component.location.nativeElement, 'ulv-viewer');
|
|
15674
15928
|
component.instance.context = context;
|
|
15675
15929
|
component.instance.isReportPage = this.isReportPage;
|
|
15676
15930
|
component.instance.layoutInfo = this.layoutInfo;
|
|
@@ -17694,6 +17948,109 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
17694
17948
|
args: [{ providedIn: 'root' }]
|
|
17695
17949
|
}], ctorParameters: () => [] });
|
|
17696
17950
|
|
|
17951
|
+
class EntitySettingsStore {
|
|
17952
|
+
constructor() {
|
|
17953
|
+
this.settingsService = inject(BaseSettingsService);
|
|
17954
|
+
this.subjects = new Map();
|
|
17955
|
+
}
|
|
17956
|
+
// ---------------------------------------------------
|
|
17957
|
+
// Subject
|
|
17958
|
+
// ---------------------------------------------------
|
|
17959
|
+
// ---------------------------------------------------
|
|
17960
|
+
// Observable
|
|
17961
|
+
// ---------------------------------------------------
|
|
17962
|
+
select$(entityId) {
|
|
17963
|
+
return this.getSubject(entityId).asObservable();
|
|
17964
|
+
}
|
|
17965
|
+
// ---------------------------------------------------
|
|
17966
|
+
// Snapshot
|
|
17967
|
+
// ---------------------------------------------------
|
|
17968
|
+
getSnapshot(entityId) {
|
|
17969
|
+
return this.getSubject(entityId).value;
|
|
17970
|
+
}
|
|
17971
|
+
// ---------------------------------------------------
|
|
17972
|
+
// Load
|
|
17973
|
+
// ---------------------------------------------------
|
|
17974
|
+
load(entityId) {
|
|
17975
|
+
const key = this.buildKey(entityId);
|
|
17976
|
+
const subject = this.getSubject(entityId);
|
|
17977
|
+
return this.settingsService.getSetting(key).pipe(tap$1((config) => {
|
|
17978
|
+
subject.next(config);
|
|
17979
|
+
}));
|
|
17980
|
+
}
|
|
17981
|
+
// ---------------------------------------------------
|
|
17982
|
+
// Save
|
|
17983
|
+
// ---------------------------------------------------
|
|
17984
|
+
save(entityId, partial) {
|
|
17985
|
+
const key = this.buildKey(entityId);
|
|
17986
|
+
const subject = this.getSubject(entityId);
|
|
17987
|
+
const current = subject.value ?? {};
|
|
17988
|
+
const updated = {
|
|
17989
|
+
...current,
|
|
17990
|
+
...partial
|
|
17991
|
+
};
|
|
17992
|
+
return this.settingsService.saveSetting(key, updated).pipe(tap$1(() => {
|
|
17993
|
+
subject.next(updated);
|
|
17994
|
+
}));
|
|
17995
|
+
}
|
|
17996
|
+
// ---------------------------------------------------
|
|
17997
|
+
// Replace
|
|
17998
|
+
// ---------------------------------------------------
|
|
17999
|
+
replace(entityId, value) {
|
|
18000
|
+
const key = this.buildKey(entityId);
|
|
18001
|
+
const subject = this.getSubject(entityId);
|
|
18002
|
+
return this.settingsService.saveSetting(key, value).pipe(tap$1(() => {
|
|
18003
|
+
subject.next(value);
|
|
18004
|
+
}));
|
|
18005
|
+
}
|
|
18006
|
+
// ---------------------------------------------------
|
|
18007
|
+
// Reset
|
|
18008
|
+
// ---------------------------------------------------
|
|
18009
|
+
reset(entityId) {
|
|
18010
|
+
const key = this.buildKey(entityId);
|
|
18011
|
+
const subject = this.getSubject(entityId);
|
|
18012
|
+
subject.next(null);
|
|
18013
|
+
return this.settingsService.removeSetting(key);
|
|
18014
|
+
}
|
|
18015
|
+
// ---------------------------------------------------
|
|
18016
|
+
// Cleanup
|
|
18017
|
+
// ---------------------------------------------------
|
|
18018
|
+
destroy(entityId) {
|
|
18019
|
+
const subject = this.subjects.get(entityId);
|
|
18020
|
+
if (subject) {
|
|
18021
|
+
subject.complete();
|
|
18022
|
+
this.subjects.delete(entityId);
|
|
18023
|
+
}
|
|
18024
|
+
}
|
|
18025
|
+
getSubject(entityId) {
|
|
18026
|
+
if (!this.subjects.has(entityId)) {
|
|
18027
|
+
this.subjects.set(entityId, new BehaviorSubject(null));
|
|
18028
|
+
}
|
|
18029
|
+
return this.subjects.get(entityId);
|
|
18030
|
+
}
|
|
18031
|
+
// ---------------------------------------------------
|
|
18032
|
+
// Utils
|
|
18033
|
+
// ---------------------------------------------------
|
|
18034
|
+
buildKey(entityId) {
|
|
18035
|
+
return `${this.keyPrefix}${entityId}`;
|
|
18036
|
+
}
|
|
18037
|
+
}
|
|
18038
|
+
|
|
18039
|
+
class CalendarSettingsStore extends EntitySettingsStore {
|
|
18040
|
+
constructor() {
|
|
18041
|
+
super(...arguments);
|
|
18042
|
+
this.keyPrefix = 'cal_cfg_';
|
|
18043
|
+
}
|
|
18044
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: CalendarSettingsStore, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
18045
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: CalendarSettingsStore, providedIn: 'root' }); }
|
|
18046
|
+
}
|
|
18047
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: CalendarSettingsStore, decorators: [{
|
|
18048
|
+
type: Injectable,
|
|
18049
|
+
args: [{
|
|
18050
|
+
providedIn: 'root'
|
|
18051
|
+
}]
|
|
18052
|
+
}] });
|
|
18053
|
+
|
|
17697
18054
|
class FormNewComponent extends BaseComponent {
|
|
17698
18055
|
constructor() {
|
|
17699
18056
|
super(...arguments);
|
|
@@ -18045,7 +18402,6 @@ class ReportNavigatorComponent extends BaseComponent {
|
|
|
18045
18402
|
/** Inserted by Angular inject() migration for backwards compatibility */
|
|
18046
18403
|
constructor() {
|
|
18047
18404
|
super();
|
|
18048
|
-
this.minheight = '100svh';
|
|
18049
18405
|
this.isMobile = getDeviceIsDesktop();
|
|
18050
18406
|
this._activatedRoute = inject(ActivatedRoute);
|
|
18051
18407
|
this._portalService = inject(PortalService);
|
|
@@ -18054,17 +18410,20 @@ class ReportNavigatorComponent extends BaseComponent {
|
|
|
18054
18410
|
this._cdr = inject(ChangeDetectorRef);
|
|
18055
18411
|
this._loadingSource = new BehaviorSubject(false);
|
|
18056
18412
|
this._routingService = inject(RoutingService, { optional: true, skipSelf: true });
|
|
18413
|
+
this._runtimeNavCache = inject(RuntimeNavStateCacheService);
|
|
18057
18414
|
this.loading$ = this._loadingSource.asObservable().pipe(takeUntil(this._onDestroy$), debounceTime(200));
|
|
18058
18415
|
}
|
|
18059
18416
|
ngOnInit() {
|
|
18060
18417
|
super.ngOnInit();
|
|
18061
18418
|
this._activatedRoute.params
|
|
18062
|
-
.pipe(takeUntil(this._onDestroy$), tap(() => this._setLoading(true)), map((params) => this._extractIds(params)),
|
|
18063
|
-
|
|
18419
|
+
.pipe(takeUntil(this._onDestroy$), tap(() => this._setLoading(true)), map((params) => this._extractIds(params)),
|
|
18420
|
+
// tap((c) => (c.isReportPage ? (this.minheight = 'auto') : '100vh')),
|
|
18421
|
+
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)), tap((navItem) => (this._navItemParams = navItem)), switchMap$1((navItem) => from(this._finalizeNavItemFromCache(navItem)).pipe(switchMap$1((resolved) => this._portalService
|
|
18422
|
+
.renderUlvMainUi(resolved, this.containerRef, this._injector, resolved.isReportPage)
|
|
18064
18423
|
.pipe(catchError((_err) =>
|
|
18065
18424
|
// this._location.back();
|
|
18066
18425
|
// return throwError(() => new Error(err));
|
|
18067
|
-
of(true)))), tap((ulv) => this._setActiveReport(ulv)), finalize(() => {
|
|
18426
|
+
of(true)))))), tap((ulv) => this._setActiveReport(ulv)), finalize(() => {
|
|
18068
18427
|
this._setLoading(false);
|
|
18069
18428
|
}))
|
|
18070
18429
|
.subscribe(() => {
|
|
@@ -18098,18 +18457,28 @@ class ReportNavigatorComponent extends BaseComponent {
|
|
|
18098
18457
|
const navIdOrFieldDefId = params.id.split('__')[0];
|
|
18099
18458
|
const reportId2OrLevelReportId = params.id.split('__').length > 1 ? params.id.split('__')[1] : '';
|
|
18100
18459
|
const reportIdOrMoId = params.id.split('__').length > 2 ? params.id.split('__')[2] : '';
|
|
18460
|
+
const typeDefFromUrl = lastText.startsWith('in') ? lastText.replace('in', '') : '';
|
|
18461
|
+
const cacheKey = lastText.startsWith('in') && typeDefFromUrl && reportIdOrMoId
|
|
18462
|
+
? buildRuntimeNavStateCacheKey(reportId2OrLevelReportId, reportIdOrMoId, typeDefFromUrl)
|
|
18463
|
+
: undefined;
|
|
18101
18464
|
return {
|
|
18102
18465
|
Id: navIdOrFieldDefId,
|
|
18103
18466
|
ReportId: reportIdOrMoId,
|
|
18104
18467
|
ReportId2: reportId2OrLevelReportId,
|
|
18105
18468
|
isReportPage: lastText === '' || this._masterDetailsPage(lastText),
|
|
18469
|
+
cacheKey,
|
|
18106
18470
|
OtherData: !lastText.startsWith('in')
|
|
18107
18471
|
? undefined
|
|
18108
18472
|
: {
|
|
18109
18473
|
FieldId: navIdOrFieldDefId,
|
|
18110
18474
|
IsInsideViewResult: true,
|
|
18111
18475
|
LevelReportId: reportId2OrLevelReportId,
|
|
18112
|
-
Mo: {
|
|
18476
|
+
Mo: {
|
|
18477
|
+
Id: reportIdOrMoId,
|
|
18478
|
+
$Caption: '',
|
|
18479
|
+
$TypeDefId: typeDefFromUrl,
|
|
18480
|
+
$LevelReportId: reportId2OrLevelReportId
|
|
18481
|
+
}
|
|
18113
18482
|
}
|
|
18114
18483
|
};
|
|
18115
18484
|
}
|
|
@@ -18121,19 +18490,78 @@ class ReportNavigatorComponent extends BaseComponent {
|
|
|
18121
18490
|
this._cdr.detectChanges();
|
|
18122
18491
|
}
|
|
18123
18492
|
_onSelectionAdapter_SelectionChange() {
|
|
18124
|
-
|
|
18125
|
-
|
|
18126
|
-
|
|
18127
|
-
|
|
18128
|
-
|
|
18493
|
+
const routing = this._routingService;
|
|
18494
|
+
if (!routing?.masterDetails || !this._ulvMainCtrlr) {
|
|
18495
|
+
return;
|
|
18496
|
+
}
|
|
18497
|
+
const fieldId = this._navItemParams.ReportId2;
|
|
18498
|
+
const mo = this._ulvMainCtrlr.GetSelectedMetaObject();
|
|
18499
|
+
if (!mo) {
|
|
18500
|
+
return;
|
|
18501
|
+
}
|
|
18502
|
+
const moId = `${mo.Id}`;
|
|
18503
|
+
const levelReportId = mo.$LevelReportId || '';
|
|
18504
|
+
const typeDefId = `${mo.$TypeDefId}`;
|
|
18505
|
+
const cacheKey = buildRuntimeNavStateCacheKey(levelReportId, moId, typeDefId);
|
|
18506
|
+
const envelope = {
|
|
18507
|
+
version: 1,
|
|
18508
|
+
sessionId: '',
|
|
18509
|
+
createdAt: Date.now(),
|
|
18510
|
+
schema: RUNTIME_NAV_STATE_SCHEMA_V1,
|
|
18511
|
+
serializationMode: 'dto',
|
|
18512
|
+
payload: {
|
|
18513
|
+
OtherData: {
|
|
18514
|
+
FieldId: fieldId,
|
|
18515
|
+
IsInsideViewResult: true,
|
|
18516
|
+
LevelReportId: levelReportId,
|
|
18517
|
+
Mo: mo
|
|
18518
|
+
}
|
|
18129
18519
|
}
|
|
18130
|
-
|
|
18131
|
-
|
|
18132
|
-
|
|
18520
|
+
};
|
|
18521
|
+
void this._runtimeNavCache.save(cacheKey, envelope).finally(() => {
|
|
18522
|
+
routing.navigate(['details', `${fieldId}__${levelReportId}__${moId}__in${mo.$TypeDefId}`], true, null, null);
|
|
18523
|
+
});
|
|
18524
|
+
}
|
|
18525
|
+
/**
|
|
18526
|
+
* URL parse → cache get → merge/hydrate → finalized navItem (before renderUlvMainUi).
|
|
18527
|
+
*/
|
|
18528
|
+
async _finalizeNavItemFromCache(nav) {
|
|
18529
|
+
if (!nav.cacheKey || !nav.OtherData) {
|
|
18530
|
+
return nav;
|
|
18531
|
+
}
|
|
18532
|
+
const env = await this._runtimeNavCache.get(nav.cacheKey);
|
|
18533
|
+
return this._applyCachedEnvelope(nav, env);
|
|
18534
|
+
}
|
|
18535
|
+
_applyCachedEnvelope(nav, env) {
|
|
18536
|
+
if (!env?.payload || !nav.OtherData) {
|
|
18537
|
+
return nav;
|
|
18538
|
+
}
|
|
18539
|
+
if (env.schema !== RUNTIME_NAV_STATE_SCHEMA_V1 || env.version !== 1) {
|
|
18540
|
+
return nav;
|
|
18541
|
+
}
|
|
18542
|
+
if (env.expiresAt != null && Date.now() > env.expiresAt) {
|
|
18543
|
+
return nav;
|
|
18544
|
+
}
|
|
18545
|
+
const p = env.payload;
|
|
18546
|
+
if (env.serializationMode === 'dto' || env.serializationMode === 'hydrated') {
|
|
18547
|
+
const mergedOther = p.OtherData != null
|
|
18548
|
+
? {
|
|
18549
|
+
...nav.OtherData,
|
|
18550
|
+
...p.OtherData,
|
|
18551
|
+
Mo: p.OtherData.Mo ?? nav.OtherData.Mo
|
|
18552
|
+
}
|
|
18553
|
+
: nav.OtherData;
|
|
18554
|
+
return {
|
|
18555
|
+
...nav,
|
|
18556
|
+
OtherData: mergedOther,
|
|
18557
|
+
RuntimeState: p.RuntimeState ?? nav.RuntimeState,
|
|
18558
|
+
Context: p.Context ?? nav.Context
|
|
18559
|
+
};
|
|
18133
18560
|
}
|
|
18561
|
+
return nav;
|
|
18134
18562
|
}
|
|
18135
18563
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ReportNavigatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18136
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: ReportNavigatorComponent, isStandalone: false, selector: "bnrc-report-navigator",
|
|
18564
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: ReportNavigatorComponent, isStandalone: false, selector: "bnrc-report-navigator", viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: `<ng-container #containerRef></ng-container>`, isInline: true, styles: [":host{display:block;width:100%;background:var(--sapBaseColor)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
18137
18565
|
}
|
|
18138
18566
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: ReportNavigatorComponent, decorators: [{
|
|
18139
18567
|
type: Component,
|
|
@@ -18141,9 +18569,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
18141
18569
|
}], ctorParameters: () => [], propDecorators: { containerRef: [{
|
|
18142
18570
|
type: ViewChild,
|
|
18143
18571
|
args: ['containerRef', { static: true, read: ViewContainerRef }]
|
|
18144
|
-
}], minheight: [{
|
|
18145
|
-
type: HostBinding,
|
|
18146
|
-
args: ['style.min-height']
|
|
18147
18572
|
}] } });
|
|
18148
18573
|
|
|
18149
18574
|
class ReportEmptyPageComponent extends PageWithFormHandlerBaseComponent {
|
|
@@ -18417,6 +18842,88 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
18417
18842
|
}]
|
|
18418
18843
|
}] });
|
|
18419
18844
|
|
|
18845
|
+
/** Default CSS viewport wrapper class for report bodies (table, calendar, �) */
|
|
18846
|
+
const REPORT_GRID_VIEWPORT_CLASS = 'report-grid-wrapper';
|
|
18847
|
+
const DEFAULT_REPORT_LAYOUT_POLICY = Object.freeze({
|
|
18848
|
+
layout: 'inline',
|
|
18849
|
+
scroll: 'inherit'
|
|
18850
|
+
});
|
|
18851
|
+
/** Per-selector defaults (extend in app code if needed). Keys match `UiReportViewBase.UiComponent.Selector`. */
|
|
18852
|
+
const REPORT_TYPE_DEFAULT_POLICIES = Object.freeze({
|
|
18853
|
+
'bsu-ui-calendar': { layout: 'fill', scroll: 'self' }
|
|
18854
|
+
});
|
|
18855
|
+
function scrollLayoutModeToContextEnvironment(mode) {
|
|
18856
|
+
switch (mode) {
|
|
18857
|
+
case 'nested':
|
|
18858
|
+
return { scrollContainerDepth: 1, shell: 'page' };
|
|
18859
|
+
case 'isolated':
|
|
18860
|
+
return { scrollContainerDepth: 0, shell: 'page', viewportIsolation: true };
|
|
18861
|
+
default:
|
|
18862
|
+
return { scrollContainerDepth: 0, shell: 'page' };
|
|
18863
|
+
}
|
|
18864
|
+
}
|
|
18865
|
+
function contextDefaultsFromEnvironment(env) {
|
|
18866
|
+
if (env.scrollContainerDepth > 0) {
|
|
18867
|
+
return { scroll: 'inherit', layout: 'inline' };
|
|
18868
|
+
}
|
|
18869
|
+
return {};
|
|
18870
|
+
}
|
|
18871
|
+
function mergePolicyLayers(...layers) {
|
|
18872
|
+
let layout;
|
|
18873
|
+
let scroll;
|
|
18874
|
+
for (const layer of layers) {
|
|
18875
|
+
if (!layer) {
|
|
18876
|
+
continue;
|
|
18877
|
+
}
|
|
18878
|
+
if (layer.layout !== undefined) {
|
|
18879
|
+
layout = layer.layout;
|
|
18880
|
+
}
|
|
18881
|
+
if (layer.scroll !== undefined) {
|
|
18882
|
+
scroll = layer.scroll;
|
|
18883
|
+
}
|
|
18884
|
+
}
|
|
18885
|
+
return {
|
|
18886
|
+
layout: layout ?? DEFAULT_REPORT_LAYOUT_POLICY.layout,
|
|
18887
|
+
scroll: scroll ?? DEFAULT_REPORT_LAYOUT_POLICY.scroll
|
|
18888
|
+
};
|
|
18889
|
+
}
|
|
18890
|
+
/**
|
|
18891
|
+
* Final scroll arbitration (pure). Call after merge so registry/explicit `self` wins over nested inherit defaults.
|
|
18892
|
+
*/
|
|
18893
|
+
function resolveFinalScroll(merged, env) {
|
|
18894
|
+
if (merged.scroll === 'self') {
|
|
18895
|
+
return 'self';
|
|
18896
|
+
}
|
|
18897
|
+
if (env.scrollContainerDepth > 0) {
|
|
18898
|
+
return 'inherit';
|
|
18899
|
+
}
|
|
18900
|
+
return 'self';
|
|
18901
|
+
}
|
|
18902
|
+
/**
|
|
18903
|
+
* Pure, framework-agnostic policy resolution. Later layers in `extraPartials` override earlier ones.
|
|
18904
|
+
* Order: DEFAULT, contextDefaults(env), registryDefault, ...extraPartials (each partial last-wins on its own keys).
|
|
18905
|
+
*/
|
|
18906
|
+
function resolveReportLayoutPolicy(env, registryDefault, ...extraPartials) {
|
|
18907
|
+
const merged = mergePolicyLayers({ layout: DEFAULT_REPORT_LAYOUT_POLICY.layout, scroll: DEFAULT_REPORT_LAYOUT_POLICY.scroll }, contextDefaultsFromEnvironment(env), registryDefault, ...extraPartials);
|
|
18908
|
+
const scroll = resolveFinalScroll(merged, env);
|
|
18909
|
+
return Object.freeze({
|
|
18910
|
+
layout: merged.layout,
|
|
18911
|
+
scroll
|
|
18912
|
+
});
|
|
18913
|
+
}
|
|
18914
|
+
function getReportTypeDefaultPolicy(selector) {
|
|
18915
|
+
if (!selector) {
|
|
18916
|
+
return undefined;
|
|
18917
|
+
}
|
|
18918
|
+
return REPORT_TYPE_DEFAULT_POLICIES[selector];
|
|
18919
|
+
}
|
|
18920
|
+
/** Optional metadata path on view settings (low-code / future designer) */
|
|
18921
|
+
function extractLayoutPolicyFromView(view) {
|
|
18922
|
+
const s = view?.UiComponent?.Settings;
|
|
18923
|
+
const raw = s?.['ReportLayoutPolicy'];
|
|
18924
|
+
return raw;
|
|
18925
|
+
}
|
|
18926
|
+
|
|
18420
18927
|
class NoInternetComponent extends BaseComponent {
|
|
18421
18928
|
/** Inserted by Angular inject() migration for backwards compatibility */
|
|
18422
18929
|
constructor() {
|
|
@@ -18824,7 +19331,6 @@ const components = [
|
|
|
18824
19331
|
FormFieldReportPageComponent,
|
|
18825
19332
|
ButtonLoadingComponent,
|
|
18826
19333
|
UnlimitSessionComponent,
|
|
18827
|
-
DynamicTileGroupComponent,
|
|
18828
19334
|
PushBannerComponent,
|
|
18829
19335
|
ReportNavigatorComponent,
|
|
18830
19336
|
SplitterComponent
|
|
@@ -18883,6 +19389,7 @@ const directives = [
|
|
|
18883
19389
|
ResizeHandlerDirective,
|
|
18884
19390
|
SafeBottomDirective
|
|
18885
19391
|
];
|
|
19392
|
+
const stores = [CalendarSettingsStore];
|
|
18886
19393
|
const services = [
|
|
18887
19394
|
PortalService,
|
|
18888
19395
|
UploadService,
|
|
@@ -18910,8 +19417,7 @@ const services = [
|
|
|
18910
19417
|
BarsaStorageService,
|
|
18911
19418
|
ServiceWorkerCommuncationService,
|
|
18912
19419
|
ApplicationCtrlrService,
|
|
18913
|
-
PushNotificationService
|
|
18914
|
-
CalendarSettingsService
|
|
19420
|
+
PushNotificationService
|
|
18915
19421
|
];
|
|
18916
19422
|
const pipes = [
|
|
18917
19423
|
NumeralPipe,
|
|
@@ -18974,7 +19480,8 @@ const pipes = [
|
|
|
18974
19480
|
MapToChatMessagePipe,
|
|
18975
19481
|
PicturesByGroupIdPipe,
|
|
18976
19482
|
ScopedCssPipe,
|
|
18977
|
-
ReportActionListPipe
|
|
19483
|
+
ReportActionListPipe,
|
|
19484
|
+
GetCssVariableValuePipe
|
|
18978
19485
|
];
|
|
18979
19486
|
const functionL1 = async function () {
|
|
18980
19487
|
if (BarsaApi.LoginFormData.Culture === 'fa-IR') {
|
|
@@ -19071,7 +19578,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
|
|
|
19071
19578
|
useClass: SimpleTemplateEngine
|
|
19072
19579
|
},
|
|
19073
19580
|
...pipes,
|
|
19074
|
-
...services
|
|
19581
|
+
...services,
|
|
19582
|
+
...stores
|
|
19075
19583
|
]
|
|
19076
19584
|
};
|
|
19077
19585
|
}
|
|
@@ -19102,7 +19610,6 @@ class BarsaNovinRayCoreModule extends BaseModule {
|
|
|
19102
19610
|
FormFieldReportPageComponent,
|
|
19103
19611
|
ButtonLoadingComponent,
|
|
19104
19612
|
UnlimitSessionComponent,
|
|
19105
|
-
DynamicTileGroupComponent,
|
|
19106
19613
|
PushBannerComponent,
|
|
19107
19614
|
ReportNavigatorComponent,
|
|
19108
19615
|
SplitterComponent, NumeralPipe,
|
|
@@ -19165,7 +19672,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
|
|
|
19165
19672
|
MapToChatMessagePipe,
|
|
19166
19673
|
PicturesByGroupIdPipe,
|
|
19167
19674
|
ScopedCssPipe,
|
|
19168
|
-
ReportActionListPipe,
|
|
19675
|
+
ReportActionListPipe,
|
|
19676
|
+
GetCssVariableValuePipe, PlaceHolderDirective,
|
|
19169
19677
|
NumbersOnlyInputDirective,
|
|
19170
19678
|
RenderUlvViewerDirective,
|
|
19171
19679
|
RenderUlvPaginDirective,
|
|
@@ -19247,7 +19755,6 @@ class BarsaNovinRayCoreModule extends BaseModule {
|
|
|
19247
19755
|
FormFieldReportPageComponent,
|
|
19248
19756
|
ButtonLoadingComponent,
|
|
19249
19757
|
UnlimitSessionComponent,
|
|
19250
|
-
DynamicTileGroupComponent,
|
|
19251
19758
|
PushBannerComponent,
|
|
19252
19759
|
ReportNavigatorComponent,
|
|
19253
19760
|
SplitterComponent, NumeralPipe,
|
|
@@ -19310,7 +19817,8 @@ class BarsaNovinRayCoreModule extends BaseModule {
|
|
|
19310
19817
|
MapToChatMessagePipe,
|
|
19311
19818
|
PicturesByGroupIdPipe,
|
|
19312
19819
|
ScopedCssPipe,
|
|
19313
|
-
ReportActionListPipe,
|
|
19820
|
+
ReportActionListPipe,
|
|
19821
|
+
GetCssVariableValuePipe, PlaceHolderDirective,
|
|
19314
19822
|
NumbersOnlyInputDirective,
|
|
19315
19823
|
RenderUlvViewerDirective,
|
|
19316
19824
|
RenderUlvPaginDirective,
|
|
@@ -19391,5 +19899,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
19391
19899
|
* Generated bundle index. Do not edit.
|
|
19392
19900
|
*/
|
|
19393
19901
|
|
|
19394
|
-
export { PreventDefaultDirective as $, AnchorScrollDirective as A, BaseModule as B, CardDynamicItemComponent as C, DynamicComponentService as D, EmptyPageWithRouterAndRouterOutletComponent as E, FieldDirective as F, IntersectionObserverDirective as G, ItemsRendererDirective as H, ImageLazyDirective as I, NumbersOnlyInputDirective as J, PlaceHolderDirective as K, RenderUlvViewerDirective as L, MasterDetailsPageComponent as M, NotFoundComponent as N, RenderUlvPaginDirective as O, PortalPageComponent as P, UntilInViewDirective as Q, ReportEmptyPageComponent as R, CopyDirective as S, TableResizerDirective as T, UlvCommandDirective as U, EllapsisTextDirective as V, WorfkflowwChoiceCommandDirective as W, FillEmptySpaceDirective as X, FormCloseDirective as Y, MobileDirective as Z, BodyClickDirective as _, EmptyPageComponent as a, MoInfoUlvPagingPipe as a$, StopPropagationDirective as a0, CountDownDirective as a1, RouteFormChangeDirective as a2, DynamicStyleDirective as a3, NowraptextDirective as a4, LabelmandatoryDirective as a5, AbsoluteDivBodyDirective as a6, LoadExternalFilesDirective as a7, RenderUlvDirective as a8, PrintFilesDirective as a9, TlbButtonsPipe as aA, RemoveNewlinePipe as aB, MoValuePipe as aC, FilterPipe as aD, FilterTabPipe as aE, MoReportValueConcatPipe as aF, FilterStringPipe as aG, SortPipe as aH, BbbTranslatePipe as aI, BarsaIconDictPipe as aJ, FileInfoCountPipe as aK, ControlUiPipe as aL, VisibleValuePipe as aM, FilterToolbarControlPipe as aN, MultipleGroupByPipe as aO, PictureFieldSourcePipe as aP, FioriIconPipe as aQ, CanUploadFilePipe as aR, ListCountPipe as aS, TotalSummaryPipe as aT, MergeFieldsToColumnsPipe as aU, FindColumnByDbNamePipe as aV, FilterColumnsByDetailsPipe as aW, MoInfoUlvMoListPipe as aX, ReversePipe as aY, ColumnCustomUiPipe as aZ, SanitizeTextPipe as a_, SaveImageDirective as aa, WebOtpDirective as ab, SplideSliderDirective as ac, DynamicRootVariableDirective as ad, HorizontalResponsiveDirective as ae, MeasureFormTitleWidthDirective as af, OverflowTextDirective as ag, ShortcutRegisterDirective as ah, ShortcutHandlerDirective as ai, BarsaReadonlyDirective as aj, ResizeObserverDirective as ak, ColumnValueDirective as al, ScrollToSelectedDirective as am, ScrollPersistDirective as an, TooltipDirective as ao, SimplebarDirective as ap, LeafletLongPressDirective as aq, ResizeHandlerDirective as ar, SafeBottomDirective as as, MoReportValuePipe as at, NumeralPipe as au, GroupByPipe as av, ContextMenuPipe as aw, HeaderFacetValuePipe as ax, SeperatorFixPipe as ay, ConvertToStylePipe as az, PortalPageSidebarComponent as b, CardViewService as b$, ColumnCustomComponentPipe as b0, ColumnValuePipe as b1, ColumnIconPipe as b2, RowNumberPipe as b3, ComboRowImagePipe as b4, IsExpandedNodePipe as b5, ThImageOrIconePipe as b6, FindPreviewColumnPipe as b7, ReplacePipe as b8, FilterWorkflowInMobilePipe as b9, LogService as bA, PortalService as bB, UiService as bC, UlvMainService as bD, UploadService as bE, NetworkStatusService as bF, AudioRecordingService as bG, VideoRecordingService as bH, LocalStorageService as bI, IndexedDbService as bJ, BarsaStorageService as bK, PromptUpdateService as bL, NotificationService as bM, ServiceWorkerNotificationService as bN, ColumnService as bO, ServiceWorkerCommuncationService as bP, SaveScrollPositionService as bQ, RoutingService as bR, GroupByService as bS, LayoutMainContentService as bT, TabpageService as bU, InMemoryStorageService as bV, ShellbarHeightService as bW, ApplicationCtrlrService as bX, PushCheckService as bY, IdbService as bZ, PushNotificationService as b_, HideColumnsInmobilePipe as ba, StringToNumberPipe as bb, ColumnValueOfParametersPipe as bc, HideAcceptCancelButtonsPipe as bd, FilterInlineActionListPipe as be, IsImagePipe as bf, ToolbarSettingsPipe as bg, CardMediaSizePipe as bh, LabelStarTrimPipe as bi, SplitPipe as bj, DynamicDarkColorPipe as bk, ChunkArrayPipe as bl, MapToChatMessagePipe as bm, PicturesByGroupIdPipe as bn, ScopedCssPipe as bo, ReportActionListPipe as bp, ApiService as bq, BreadcrumbService as br, CustomInjector as bs, DialogParams as bt, BarsaDialogService as bu, FormPanelService as bv, FormService as bw, ContainerService as bx, HorizontalLayoutService as by, LayoutService as bz, BaseDynamicComponent as c, ReportExtraInfo as c$, BaseSettingsService as c0, CalendarSettingsService as c1, SimpleTemplateEngine as c2, TEMPLATE_ENGINE as c3, PortalDynamicPageResolver as c4, PortalFormPageResolver as c5, PortalPageResolver as c6, PortalReportPageResolver as c7, TileGroupBreadcrumResolver as c8, LoginSettingsResolver as c9, RichStringControlInfoModel as cA, NumberControlInfoModel as cB, FilePictureInfoModel as cC, FileControlInfoModel as cD, CommandControlInfoModel as cE, IconControlInfoModel as cF, PictureFileControlInfoModel as cG, GaugeControlInfoModel as cH, RelationListControlInfoModel as cI, HistoryControlInfoModel as cJ, RabetehAkseTakiListiControlInfoModel as cK, RelatedReportControlInfoModel as cL, CodeEditorControlInfoModel as cM, EnumControlInfoModel as cN, RowDataOption as cO, DateTimeControlInfoModel as cP, BoolControlInfoModel as cQ, CalculateControlInfoModel as cR, SubformControlInfoModel as cS, LinearListControlInfoModel as cT, ListRelationModel as cU, SingleRelationControlInfoModel as cV, MetaobjectDataModel as cW, MoForReportModelBase as cX, MoForReportModel as cY, ReportBaseInfo as cZ, FormToolbarButton as c_, ReportBreadcrumbResolver as ca, DateService as cb, DateHijriService as cc, DateMiladiService as cd, DateShamsiService as ce, FormNewComponent as cf, ReportContainerComponent as cg, FormComponent as ch, FieldUiComponent as ci, BarsaSapUiFormPageModule as cj, ReportNavigatorComponent as ck, BaseController as cl, FieldBaseController as cm, ViewBase as cn, ModalRootComponent as co, ButtonLoadingComponent as cp, UnlimitSessionComponent as cq, SplitterComponent as cr, APP_VERSION as cs, DIALOG_SERVICE as ct, FORM_DIALOG_COMPONENT as cu, NOTIFICATAION_POPUP_SERVER as cv, TOAST_SERVICE as cw, NOTIFICATION_WEBWORKER_FACTORY as cx, GeneralControlInfoModel as cy, StringControlInfoModel as cz, DynamicFormComponent as d, measureTextBy as d$, MetaobjectRelationModel as d0, FieldInfoTypeEnum as d1, BaseReportModel as d2, DefaultCommandsAccessValue as d3, CustomCommand as d4, ReportModel as d5, ReportListModel as d6, ReportFormModel as d7, ReportCalendarModel as d8, ReportTreeModel as d9, FormPropsBaseComponent as dA, LinearListHelper as dB, PageWithFormHandlerBaseComponent as dC, FormPageBaseComponent as dD, FormPageComponent as dE, BaseColumnPropsComponent as dF, TilePropsComponent as dG, FormFieldReportPageComponent as dH, ColumnRendererBase as dI, ColumnRendererViewBase as dJ, BaseUlvSettingComponent as dK, TableHeaderWidthMode as dL, setTableThWidth as dM, calculateColumnContent as dN, calculateColumnWidth as dO, setColumnWidthByMaxMoContentWidth as dP, calculateMoDataListContentWidthByColumnName as dQ, calculateFreeColumnSize as dR, calculateColumnWidthFitToContainer as dS, calcContextMenuWidth as dT, RotateImage as dU, isInLocalMode as dV, getLabelWidth as dW, getColumnValueOfMoDataList as dX, throwIfAlreadyLoaded as dY, measureText2 as dZ, measureText as d_, ReportViewColumn as da, DefaultGridSetting as db, GridSetting as dc, ColSetting as dd, SortSetting as de, ReportField as df, DateRanges as dg, SortDirection as dh, SelectionMode as di, UlvHeightSizeType as dj, FieldBaseComponent as dk, FieldViewBase as dl, FormBaseComponent as dm, FormToolbarBaseComponent as dn, SystemBaseComponent as dp, ReportBaseComponent as dq, ReportItemBaseComponent as dr, ApplicationBaseComponent as ds, LayoutItemBaseComponent as dt, LayoutPanelBaseComponent as du, PageBaseComponent as dv, NumberBaseComponent as dw, FilesValidationHelper as dx, BarsaApi as dy, ReportViewBaseComponent as dz, DynamicItemComponent as e, cancelRequestAnimationFrame as e$, genrateInlineMoId as e0, enumValueToStringSize as e1, isVersionBiggerThan as e2, compareVersions as e3, scrollToElement as e4, executeUlvCommandHandler as e5, getUniqueId as e6, getDateService as e7, getAllItemsPerChildren as e8, setOneDepthLevel as e9, FindGroup as eA, FillAllLayoutControls as eB, FindToolbarItem as eC, FindLayoutSettingFromLayout94 as eD, GetAllHorizontalFromLayout94 as eE, getGridSettings as eF, getResetGridSettings as eG, GetDefaultMoObjectInfo as eH, getLayout94ObjectInfo as eI, getFormSettings as eJ, createFormPanelMetaConditions as eK, getNewMoGridEditor as eL, createGridEditorFormPanel as eM, getLayoutControl as eN, getControlList as eO, shallowEqual as eP, toNumber as eQ, InputNumber as eR, AffixRespondEvents as eS, isTargetWindow as eT, getTargetRect as eU, getFieldValue as eV, availablePrefixes as eW, requestAnimationFramePolyfill as eX, ExecuteDynamicCommand as eY, ExecuteWorkflowChoiceDef as eZ, getRequestAnimationFrame as e_, isFirefox as ea, getImagePath as eb, checkPermission as ec, fixUnclosedParentheses as ed, isFunction as ee, DeviceWidth as ef, getHeaderValue as eg, elementInViewport2 as eh, PreventDefaulEvent as ei, stopPropagation as ej, getParentHeight as ek, getComponentDefined as el, isSafari as em, isFF as en, getDeviceIsPhone as eo, getDeviceIsDesktop as ep, getDeviceIsTablet as eq, getDeviceIsMobile as er, getControlSizeMode as es, formatBytes as et, getValidExtension as eu, getIcon as ev, isImage as ew, GetAllColumnsSorted as ex, GetVisibleValue as ey, GroupBy as ez, formRoutes as f, easeInOutCubic as f0, WordMimeType as f1, ImageMimeType as f2, PdfMimeType as f3, AllFilesMimeType as f4, VideoMimeType as f5, AudioMimeType as f6, MimeTypes as f7, GetContentType as f8, GetViewableExtensions as f9, RootPageComponent as fA, ResizableComponent as fB, ResizableDirective as fC, ResizableModule as fD, PushBannerComponent as fE, BarsaNovinRayCoreModule as fF, ChangeLayoutInfoCustomUi as fa, mobile_regex as fb, number_only as fc, forbiddenValidator as fd, GetImgTags as fe, ImagetoPrint as ff, PrintImage as fg, SaveImageToFile as fh, validateAllFormFields as fi, getFocusableTagNames as fj, addCssVariableToRoot as fk, flattenTree as fl, IsDarkMode as fm, nullOrUndefinedString as fn, fromEntries as fo, bodyClick as fp, removeDynamicStyle as fq, addDynamicVariableTo as fr, AddDynamicFormStyles as fs, RemoveDynamicFormStyles as ft, ContainerComponent as fu, IntersectionStatus as fv, fromIntersectionObserver as fw, CustomRouteReuseStrategy as fx, AuthGuard as fy, RedirectHomeGuard as fz, BaseViewPropsComponent as g, BaseViewContentPropsComponent as h, BaseViewItemPropsComponent as i, RowState as j, BaseItemContentPropsComponent as k, CardBaseItemContentPropsComponent as l, BaseFormToolbaritemPropsComponent as m, DynamicFormToolbaritemComponent as n, DynamicLayoutComponent as o, DynamicTileGroupComponent as p, DynamicUlvToolbarComponent as q, reportRoutes as r, DynamicUlvPagingComponent as s, RootPortalComponent as t, BaseComponent as u, AttrRtlDirective as v, BaseDirective as w, ColumnResizerDirective as x, DynamicCommandDirective as y, EllipsifyDirective as z };
|
|
19395
|
-
//# sourceMappingURL=barsa-novin-ray-core-barsa-novin-ray-core-
|
|
19902
|
+
export { StopPropagationDirective as $, AnchorScrollDirective as A, BaseModule as B, CardDynamicItemComponent as C, DynamicComponentService as D, EmptyPageWithRouterAndRouterOutletComponent as E, FieldDirective as F, ItemsRendererDirective as G, NumbersOnlyInputDirective as H, ImageLazyDirective as I, PlaceHolderDirective as J, RenderUlvViewerDirective as K, RenderUlvPaginDirective as L, MasterDetailsPageComponent as M, NotFoundComponent as N, UntilInViewDirective as O, PortalPageComponent as P, CopyDirective as Q, ReportEmptyPageComponent as R, EllapsisTextDirective as S, TableResizerDirective as T, UlvCommandDirective as U, FillEmptySpaceDirective as V, WorfkflowwChoiceCommandDirective as W, FormCloseDirective as X, MobileDirective as Y, BodyClickDirective as Z, PreventDefaultDirective as _, EmptyPageComponent as a, ColumnCustomComponentPipe as a$, CountDownDirective as a0, RouteFormChangeDirective as a1, DynamicStyleDirective as a2, NowraptextDirective as a3, LabelmandatoryDirective as a4, AbsoluteDivBodyDirective as a5, LoadExternalFilesDirective as a6, RenderUlvDirective as a7, PrintFilesDirective as a8, SaveImageDirective as a9, RemoveNewlinePipe as aA, MoValuePipe as aB, FilterPipe as aC, FilterTabPipe as aD, MoReportValueConcatPipe as aE, FilterStringPipe as aF, SortPipe as aG, BbbTranslatePipe as aH, BarsaIconDictPipe as aI, FileInfoCountPipe as aJ, ControlUiPipe as aK, VisibleValuePipe as aL, FilterToolbarControlPipe as aM, MultipleGroupByPipe as aN, PictureFieldSourcePipe as aO, FioriIconPipe as aP, CanUploadFilePipe as aQ, ListCountPipe as aR, TotalSummaryPipe as aS, MergeFieldsToColumnsPipe as aT, FindColumnByDbNamePipe as aU, FilterColumnsByDetailsPipe as aV, MoInfoUlvMoListPipe as aW, ReversePipe as aX, ColumnCustomUiPipe as aY, SanitizeTextPipe as aZ, MoInfoUlvPagingPipe as a_, WebOtpDirective as aa, SplideSliderDirective as ab, DynamicRootVariableDirective as ac, HorizontalResponsiveDirective as ad, MeasureFormTitleWidthDirective as ae, OverflowTextDirective as af, ShortcutRegisterDirective as ag, ShortcutHandlerDirective as ah, BarsaReadonlyDirective as ai, ResizeObserverDirective as aj, ColumnValueDirective as ak, ScrollToSelectedDirective as al, ScrollPersistDirective as am, TooltipDirective as an, SimplebarDirective as ao, LeafletLongPressDirective as ap, ResizeHandlerDirective as aq, SafeBottomDirective as ar, MoReportValuePipe as as, NumeralPipe as at, GroupByPipe as au, ContextMenuPipe as av, HeaderFacetValuePipe as aw, SeperatorFixPipe as ax, ConvertToStylePipe as ay, TlbButtonsPipe as az, PortalPageSidebarComponent as b, RUNTIME_NAV_STATE_SCHEMA_V1 as b$, ColumnValuePipe as b0, ColumnIconPipe as b1, RowNumberPipe as b2, ComboRowImagePipe as b3, IsExpandedNodePipe as b4, ThImageOrIconePipe as b5, FindPreviewColumnPipe as b6, ReplacePipe as b7, FilterWorkflowInMobilePipe as b8, HideColumnsInmobilePipe as b9, LogService as bA, PortalService as bB, UiService as bC, UlvMainService as bD, UploadService as bE, NetworkStatusService as bF, AudioRecordingService as bG, VideoRecordingService as bH, LocalStorageService as bI, IndexedDbService as bJ, BarsaStorageService as bK, PromptUpdateService as bL, NotificationService as bM, ServiceWorkerNotificationService as bN, ColumnService as bO, ServiceWorkerCommuncationService as bP, SaveScrollPositionService as bQ, RoutingService as bR, GroupByService as bS, LayoutMainContentService as bT, TabpageService as bU, InMemoryStorageService as bV, ScrollLayoutContextHolder as bW, ShellbarHeightService as bX, ApplicationCtrlrService as bY, PushCheckService as bZ, IdbService as b_, StringToNumberPipe as ba, ColumnValueOfParametersPipe as bb, HideAcceptCancelButtonsPipe as bc, FilterInlineActionListPipe as bd, IsImagePipe as be, ToolbarSettingsPipe as bf, CardMediaSizePipe as bg, LabelStarTrimPipe as bh, SplitPipe as bi, DynamicDarkColorPipe as bj, ChunkArrayPipe as bk, MapToChatMessagePipe as bl, PicturesByGroupIdPipe as bm, ScopedCssPipe as bn, ReportActionListPipe as bo, GetCssVariableValuePipe as bp, ApiService as bq, BreadcrumbService as br, CustomInjector as bs, DialogParams as bt, BarsaDialogService as bu, FormPanelService as bv, FormService as bw, ContainerService as bx, HorizontalLayoutService as by, LayoutService as bz, BaseDynamicComponent as c, MetaobjectDataModel as c$, buildRuntimeNavStateCacheKey as c0, RuntimeNavStateCacheService as c1, PushNotificationService as c2, CardViewService as c3, BaseSettingsService as c4, SimpleTemplateEngine as c5, TEMPLATE_ENGINE as c6, PortalDynamicPageResolver as c7, PortalFormPageResolver as c8, PortalPageResolver as c9, NOTIFICATAION_POPUP_SERVER as cA, TOAST_SERVICE as cB, NOTIFICATION_WEBWORKER_FACTORY as cC, GeneralControlInfoModel as cD, StringControlInfoModel as cE, RichStringControlInfoModel as cF, NumberControlInfoModel as cG, FilePictureInfoModel as cH, FileControlInfoModel as cI, CommandControlInfoModel as cJ, IconControlInfoModel as cK, PictureFileControlInfoModel as cL, GaugeControlInfoModel as cM, RelationListControlInfoModel as cN, HistoryControlInfoModel as cO, RabetehAkseTakiListiControlInfoModel as cP, RelatedReportControlInfoModel as cQ, CodeEditorControlInfoModel as cR, EnumControlInfoModel as cS, RowDataOption as cT, DateTimeControlInfoModel as cU, BoolControlInfoModel as cV, CalculateControlInfoModel as cW, SubformControlInfoModel as cX, LinearListControlInfoModel as cY, ListRelationModel as cZ, SingleRelationControlInfoModel as c_, PortalReportPageResolver as ca, TileGroupBreadcrumResolver as cb, LoginSettingsResolver as cc, ReportBreadcrumbResolver as cd, DateService as ce, DateHijriService as cf, DateMiladiService as cg, DateShamsiService as ch, EntitySettingsStore as ci, CalendarSettingsStore as cj, FormNewComponent as ck, ReportContainerComponent as cl, FormComponent as cm, FieldUiComponent as cn, BarsaSapUiFormPageModule as co, ReportNavigatorComponent as cp, BaseController as cq, FieldBaseController as cr, ViewBase as cs, ModalRootComponent as ct, ButtonLoadingComponent as cu, UnlimitSessionComponent as cv, SplitterComponent as cw, APP_VERSION as cx, DIALOG_SERVICE as cy, FORM_DIALOG_COMPONENT as cz, DynamicFormComponent as d, getLabelWidth as d$, MoForReportModelBase as d0, MoForReportModel as d1, ReportBaseInfo as d2, FormToolbarButton as d3, ReportExtraInfo as d4, MetaobjectRelationModel as d5, FieldInfoTypeEnum as d6, BaseReportModel as d7, DefaultCommandsAccessValue as d8, CustomCommand as d9, PageBaseComponent as dA, NumberBaseComponent as dB, FilesValidationHelper as dC, BarsaApi as dD, ReportViewBaseComponent as dE, FormPropsBaseComponent as dF, LinearListHelper as dG, PageWithFormHandlerBaseComponent as dH, FormPageBaseComponent as dI, FormPageComponent as dJ, BaseColumnPropsComponent as dK, TilePropsComponent as dL, FormFieldReportPageComponent as dM, ColumnRendererBase as dN, ColumnRendererViewBase as dO, BaseUlvSettingComponent as dP, TableHeaderWidthMode as dQ, setTableThWidth as dR, calculateColumnContent as dS, calculateColumnWidth as dT, setColumnWidthByMaxMoContentWidth as dU, calculateMoDataListContentWidthByColumnName as dV, calculateFreeColumnSize as dW, calculateColumnWidthFitToContainer as dX, calcContextMenuWidth as dY, RotateImage as dZ, isInLocalMode as d_, ReportModel as da, ReportListModel as db, ReportFormModel as dc, ReportCalendarModel as dd, ReportTreeModel as de, ReportViewColumn as df, DefaultGridSetting as dg, GridSetting as dh, ColSetting as di, SortSetting as dj, ReportField as dk, DateRanges as dl, SortDirection as dm, SelectionMode as dn, UlvHeightSizeType as dp, FieldBaseComponent as dq, FieldViewBase as dr, FormBaseComponent as ds, FormToolbarBaseComponent as dt, SystemBaseComponent as du, ReportBaseComponent as dv, ReportItemBaseComponent as dw, ApplicationBaseComponent as dx, LayoutItemBaseComponent as dy, LayoutPanelBaseComponent as dz, DynamicItemComponent as e, availablePrefixes as e$, getColumnValueOfMoDataList as e0, throwIfAlreadyLoaded as e1, measureText2 as e2, measureText as e3, measureTextBy as e4, genrateInlineMoId as e5, enumValueToStringSize as e6, isVersionBiggerThan as e7, compareVersions as e8, scrollToElement as e9, getIcon as eA, isImage as eB, GetAllColumnsSorted as eC, GetVisibleValue as eD, GroupBy as eE, FindGroup as eF, FillAllLayoutControls as eG, FindToolbarItem as eH, FindLayoutSettingFromLayout94 as eI, GetAllHorizontalFromLayout94 as eJ, getGridSettings as eK, getResetGridSettings as eL, GetDefaultMoObjectInfo as eM, getLayout94ObjectInfo as eN, getFormSettings as eO, createFormPanelMetaConditions as eP, getNewMoGridEditor as eQ, createGridEditorFormPanel as eR, getLayoutControl as eS, getControlList as eT, shallowEqual as eU, toNumber as eV, InputNumber as eW, AffixRespondEvents as eX, isTargetWindow as eY, getTargetRect as eZ, getFieldValue as e_, executeUlvCommandHandler as ea, getUniqueId as eb, getDateService as ec, getAllItemsPerChildren as ed, setOneDepthLevel as ee, isFirefox as ef, getImagePath as eg, checkPermission as eh, fixUnclosedParentheses as ei, isFunction as ej, DeviceWidth as ek, getHeaderValue as el, elementInViewport2 as em, PreventDefaulEvent as en, stopPropagation as eo, getParentHeight as ep, getComponentDefined as eq, isSafari as er, isFF as es, getDeviceIsPhone as et, getDeviceIsDesktop as eu, getDeviceIsTablet as ev, getDeviceIsMobile as ew, getControlSizeMode as ex, formatBytes as ey, getValidExtension as ez, formRoutes as f, requestAnimationFramePolyfill as f0, ExecuteDynamicCommand as f1, ExecuteWorkflowChoiceDef as f2, getRequestAnimationFrame as f3, cancelRequestAnimationFrame as f4, easeInOutCubic as f5, WordMimeType as f6, ImageMimeType as f7, PdfMimeType as f8, AllFilesMimeType as f9, IntersectionStatus as fA, fromIntersectionObserver as fB, CustomRouteReuseStrategy as fC, AuthGuard as fD, RedirectHomeGuard as fE, RootPageComponent as fF, ResizableComponent as fG, ResizableDirective as fH, ResizableModule as fI, PushBannerComponent as fJ, REPORT_GRID_VIEWPORT_CLASS as fK, DEFAULT_REPORT_LAYOUT_POLICY as fL, REPORT_TYPE_DEFAULT_POLICIES as fM, scrollLayoutModeToContextEnvironment as fN, contextDefaultsFromEnvironment as fO, resolveFinalScroll as fP, resolveReportLayoutPolicy as fQ, getReportTypeDefaultPolicy as fR, extractLayoutPolicyFromView as fS, BarsaNovinRayCoreModule as fT, VideoMimeType as fa, AudioMimeType as fb, MimeTypes as fc, GetContentType as fd, GetViewableExtensions as fe, ChangeLayoutInfoCustomUi as ff, mobile_regex as fg, number_only as fh, forbiddenValidator as fi, GetImgTags as fj, ImagetoPrint as fk, PrintImage as fl, SaveImageToFile as fm, validateAllFormFields as fn, getFocusableTagNames as fo, addCssVariableToRoot as fp, flattenTree as fq, IsDarkMode as fr, nullOrUndefinedString as fs, fromEntries as ft, bodyClick as fu, removeDynamicStyle as fv, addDynamicVariableTo as fw, AddDynamicFormStyles as fx, RemoveDynamicFormStyles as fy, ContainerComponent as fz, BaseViewPropsComponent as g, BaseViewContentPropsComponent as h, BaseViewItemPropsComponent as i, RowState as j, BaseItemContentPropsComponent as k, CardBaseItemContentPropsComponent as l, BaseFormToolbaritemPropsComponent as m, DynamicFormToolbaritemComponent as n, DynamicLayoutComponent as o, DynamicUlvToolbarComponent as p, DynamicUlvPagingComponent as q, reportRoutes as r, RootPortalComponent as s, BaseComponent as t, AttrRtlDirective as u, BaseDirective as v, ColumnResizerDirective as w, DynamicCommandDirective as x, EllipsifyDirective as y, IntersectionObserverDirective as z };
|
|
19903
|
+
//# sourceMappingURL=barsa-novin-ray-core-barsa-novin-ray-core-D50KRKKo.mjs.map
|