@acorex/platform 20.7.12 → 20.7.15
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/common/index.d.ts +10 -1
- package/core/index.d.ts +94 -4
- package/fesm2022/{acorex-platform-common-common-settings.provider-BwBLG0Hl.mjs → acorex-platform-common-common-settings.provider-gyb6ohAE.mjs} +15 -1
- package/fesm2022/acorex-platform-common-common-settings.provider-gyb6ohAE.mjs.map +1 -0
- package/fesm2022/acorex-platform-common.mjs +3 -2
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +428 -157
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +90 -74
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +954 -1223
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +601 -193
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +7 -7
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-BfV3spe3.mjs → acorex-platform-layout-widgets-file-list-popup.component-B0omAUil.mjs} +18 -3
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-B0omAUil.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-repeater-widget-column.component-DnhR00cH.mjs → acorex-platform-layout-widgets-repeater-widget-column.component-fcCirNxz.mjs} +2 -2
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-fcCirNxz.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +165 -64
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-CJcbkSBF.mjs → acorex-platform-themes-default-entity-master-create-view.component-CCiYPMhz.mjs} +29 -26
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CCiYPMhz.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-HBr-ZTSt.mjs → acorex-platform-themes-default-entity-master-list-view.component-BQODc73e.mjs} +2 -2
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-HBr-ZTSt.mjs.map → acorex-platform-themes-default-entity-master-list-view.component-BQODc73e.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-DAFQ4UI9.mjs → acorex-platform-themes-default-entity-master-modify-view.component-CgLUnYRq.mjs} +3 -4
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-CgLUnYRq.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-CwHHYmiK.mjs → acorex-platform-themes-default-entity-master-single-view.component-di5w_3K2.mjs} +4 -4
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-di5w_3K2.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +11 -11
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-shared.mjs +244 -246
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +0 -3
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/layout/components/index.d.ts +159 -248
- package/layout/entity/index.d.ts +42 -1
- package/layout/widgets/index.d.ts +43 -5
- package/package.json +5 -5
- package/themes/shared/index.d.ts +1 -1
- package/workflow/index.d.ts +33 -30
- package/fesm2022/acorex-platform-common-common-settings.provider-BwBLG0Hl.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-BfV3spe3.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-DnhR00cH.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CJcbkSBF.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DAFQ4UI9.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-CwHHYmiK.mjs.map +0 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, Injectable, computed,
|
|
2
|
+
import { InjectionToken, inject, Injectable, Directive, computed, Injector, ChangeDetectionStrategy, Component, input, ElementRef, ViewContainerRef, signal, effect, runInInjectionContext, Optional, Inject, NgModule, EventEmitter, HostListener, Output, provideAppInitializer, Pipe } from '@angular/core';
|
|
3
|
+
import { get, isPlainObject, set, isNil, isEmpty, isArray, merge, isObjectLike, transform, isEqual, differenceWith, union, cloneDeep, sortBy, isUndefined, endsWith, startsWith, includes, lte, gte, lt, gt, orderBy } from 'lodash-es';
|
|
3
4
|
import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
|
|
4
|
-
import
|
|
5
|
+
import * as i1 from '@acorex/components/skeleton';
|
|
6
|
+
import { AXSkeletonModule } from '@acorex/components/skeleton';
|
|
5
7
|
import { Subject, interval, fromEvent } from 'rxjs';
|
|
6
8
|
import { AXCalendarService } from '@acorex/core/date-time';
|
|
7
9
|
import { startWith, map, debounceTime } from 'rxjs/operators';
|
|
@@ -513,6 +515,14 @@ const defaultColumnWidthProvider = {
|
|
|
513
515
|
};
|
|
514
516
|
//#endregion
|
|
515
517
|
|
|
518
|
+
class AXPComponentSlot {
|
|
519
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlot, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
520
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: AXPComponentSlot, isStandalone: true, ngImport: i0 }); }
|
|
521
|
+
}
|
|
522
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlot, decorators: [{
|
|
523
|
+
type: Directive
|
|
524
|
+
}] });
|
|
525
|
+
|
|
516
526
|
function extractNestedFieldsWildcard(obj, basePath, fields) {
|
|
517
527
|
const result = {};
|
|
518
528
|
if (fields.length === 1 && fields[0] === '*') {
|
|
@@ -645,8 +655,6 @@ function getSmart(obj, smartPath) {
|
|
|
645
655
|
});
|
|
646
656
|
}
|
|
647
657
|
function extractValue(value, key = 'id') {
|
|
648
|
-
console.log('value', value);
|
|
649
|
-
console.log('key', key);
|
|
650
658
|
if (isNil(value)) {
|
|
651
659
|
return null;
|
|
652
660
|
}
|
|
@@ -891,6 +899,421 @@ withMethods((store) => ({
|
|
|
891
899
|
},
|
|
892
900
|
})));
|
|
893
901
|
|
|
902
|
+
class AXPExpressionEvaluatorScopeProviderContext {
|
|
903
|
+
constructor() {
|
|
904
|
+
this.scopes = {};
|
|
905
|
+
}
|
|
906
|
+
addScope(namespace, functions) {
|
|
907
|
+
this.scopes[namespace] = { ...this.scopes[namespace], ...functions };
|
|
908
|
+
}
|
|
909
|
+
getScopes() {
|
|
910
|
+
return this.scopes;
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
const AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER = new InjectionToken('AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER');
|
|
914
|
+
class AXPExpressionEvaluatorScopeProviderService {
|
|
915
|
+
constructor() {
|
|
916
|
+
this.injector = inject(Injector);
|
|
917
|
+
this.cache = null;
|
|
918
|
+
}
|
|
919
|
+
async load() {
|
|
920
|
+
if (this.cache)
|
|
921
|
+
return;
|
|
922
|
+
const raw = this.injector.get(AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, [], { optional: true });
|
|
923
|
+
const providers = Array.isArray(raw)
|
|
924
|
+
? raw
|
|
925
|
+
: typeof raw === 'function'
|
|
926
|
+
? raw()
|
|
927
|
+
: [];
|
|
928
|
+
const context = new AXPExpressionEvaluatorScopeProviderContext();
|
|
929
|
+
for (const provider of providers) {
|
|
930
|
+
await provider.provide(context);
|
|
931
|
+
}
|
|
932
|
+
this.cache = context.getScopes();
|
|
933
|
+
}
|
|
934
|
+
async getScopesAsync() {
|
|
935
|
+
await this.load();
|
|
936
|
+
return this.cache || {};
|
|
937
|
+
}
|
|
938
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
939
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, providedIn: 'root' }); }
|
|
940
|
+
}
|
|
941
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, decorators: [{
|
|
942
|
+
type: Injectable,
|
|
943
|
+
args: [{ providedIn: 'root' }]
|
|
944
|
+
}] });
|
|
945
|
+
|
|
946
|
+
class AXPExpressionEvaluatorService {
|
|
947
|
+
constructor() {
|
|
948
|
+
// Memoization cache for compiled expressions
|
|
949
|
+
this.expressionCache = new Map();
|
|
950
|
+
this.providerService = inject(AXPExpressionEvaluatorScopeProviderService);
|
|
951
|
+
}
|
|
952
|
+
getOrCompileFunction(expression) {
|
|
953
|
+
if (!this.expressionCache.has(expression)) {
|
|
954
|
+
// Check if expression contains multiple statements (has semicolons or newlines)
|
|
955
|
+
const hasMultipleStatements = expression.includes(';') || expression.includes('\n');
|
|
956
|
+
let fn;
|
|
957
|
+
if (hasMultipleStatements) {
|
|
958
|
+
// For multiple statements, execute them in sequence and return the last expression
|
|
959
|
+
fn = new Function('scope', `with (scope) { return (async function() { ${expression} })(); }`);
|
|
960
|
+
}
|
|
961
|
+
else {
|
|
962
|
+
// For single expressions, use return
|
|
963
|
+
fn = new Function('scope', `with (scope) { return (async function() { return ${expression}; })(); }`);
|
|
964
|
+
}
|
|
965
|
+
this.expressionCache.set(expression, fn);
|
|
966
|
+
}
|
|
967
|
+
return this.expressionCache.get(expression);
|
|
968
|
+
}
|
|
969
|
+
async getMergedScope(userScope) {
|
|
970
|
+
const pluginScopes = await this.providerService.getScopesAsync();
|
|
971
|
+
// Merge pluginScopes and userScope (userScope takes precedence)
|
|
972
|
+
return { ...pluginScopes, ...userScope };
|
|
973
|
+
}
|
|
974
|
+
async evaluate(source, scope = {}) {
|
|
975
|
+
try {
|
|
976
|
+
const mergedScope = await this.getMergedScope(scope);
|
|
977
|
+
if (typeof source === 'string' && source.includes('{{')) {
|
|
978
|
+
return await this.evaluateStringExpression(source, mergedScope);
|
|
979
|
+
}
|
|
980
|
+
else if (Array.isArray(source)) {
|
|
981
|
+
const evaluatedArray = [];
|
|
982
|
+
for (const item of source) {
|
|
983
|
+
evaluatedArray.push(await this.evaluate(item, mergedScope));
|
|
984
|
+
}
|
|
985
|
+
return evaluatedArray;
|
|
986
|
+
}
|
|
987
|
+
else if (typeof source === 'object' && source !== null) {
|
|
988
|
+
const evaluatedObject = {};
|
|
989
|
+
for (const key in source) {
|
|
990
|
+
if (source.hasOwnProperty(key)) {
|
|
991
|
+
evaluatedObject[key] = await this.evaluate(source[key], mergedScope);
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
return evaluatedObject;
|
|
995
|
+
}
|
|
996
|
+
else {
|
|
997
|
+
return source;
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
catch (error) {
|
|
1001
|
+
console.error('Expression evaluator - Error evaluating expression:', source, error);
|
|
1002
|
+
return false;
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
async evaluateStringExpression(templateExpression, scope) {
|
|
1006
|
+
// Check if the input is exactly a single {{ ... }} expression (handle multiline)
|
|
1007
|
+
const exactMatch = templateExpression.match(/^\s*\{\{\s*([\s\S]*?)\s*\}\}\s*$/);
|
|
1008
|
+
if (exactMatch) {
|
|
1009
|
+
const expression = exactMatch[1];
|
|
1010
|
+
const sandbox = this.getOrCompileFunction(expression);
|
|
1011
|
+
const result = await sandbox(scope);
|
|
1012
|
+
return result;
|
|
1013
|
+
}
|
|
1014
|
+
// Otherwise, interpolate all {{ ... }} expressions in the string
|
|
1015
|
+
const regex = /\{\{\s*([\s\S]*?)\s*\}\}/g;
|
|
1016
|
+
// Collect all matches and their positions
|
|
1017
|
+
const matches = [];
|
|
1018
|
+
let match;
|
|
1019
|
+
while ((match = regex.exec(templateExpression)) !== null) {
|
|
1020
|
+
matches.push({
|
|
1021
|
+
expression: match[1],
|
|
1022
|
+
start: match.index,
|
|
1023
|
+
end: regex.lastIndex,
|
|
1024
|
+
raw: match[0],
|
|
1025
|
+
});
|
|
1026
|
+
}
|
|
1027
|
+
// Evaluate all expressions in parallel
|
|
1028
|
+
const values = await Promise.all(matches.map((m) => {
|
|
1029
|
+
const sandbox = this.getOrCompileFunction(m.expression);
|
|
1030
|
+
return sandbox(scope);
|
|
1031
|
+
}));
|
|
1032
|
+
// Reconstruct the string with evaluated values
|
|
1033
|
+
let result = '';
|
|
1034
|
+
let lastIndex = 0;
|
|
1035
|
+
matches.forEach((m, i) => {
|
|
1036
|
+
result += templateExpression.slice(lastIndex, m.start);
|
|
1037
|
+
const value = values[i];
|
|
1038
|
+
result += value !== undefined && value !== null ? value : '';
|
|
1039
|
+
lastIndex = m.end;
|
|
1040
|
+
});
|
|
1041
|
+
result += templateExpression.slice(lastIndex);
|
|
1042
|
+
return result;
|
|
1043
|
+
}
|
|
1044
|
+
isExpression(expression) {
|
|
1045
|
+
if (typeof expression === 'string') {
|
|
1046
|
+
return expression.trim().startsWith('{{') && expression.trim().endsWith('}}');
|
|
1047
|
+
}
|
|
1048
|
+
return false;
|
|
1049
|
+
}
|
|
1050
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPExpressionEvaluatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1051
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPExpressionEvaluatorService, providedIn: 'root' }); }
|
|
1052
|
+
}
|
|
1053
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPExpressionEvaluatorService, decorators: [{
|
|
1054
|
+
type: Injectable,
|
|
1055
|
+
args: [{ providedIn: 'root' }]
|
|
1056
|
+
}] });
|
|
1057
|
+
|
|
1058
|
+
class AXPComponentSlotPlaceholderComponent {
|
|
1059
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlotPlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1060
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: AXPComponentSlotPlaceholderComponent, isStandalone: true, selector: "axp-component-slot-placeholder", ngImport: i0, template: `<div>
|
|
1061
|
+
<ax-skeleton class="ax-w-full ax-h-10 ax-rounded-md"></ax-skeleton>
|
|
1062
|
+
</div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1063
|
+
}
|
|
1064
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlotPlaceholderComponent, decorators: [{
|
|
1065
|
+
type: Component,
|
|
1066
|
+
args: [{
|
|
1067
|
+
selector: 'axp-component-slot-placeholder',
|
|
1068
|
+
template: `<div>
|
|
1069
|
+
<ax-skeleton class="ax-w-full ax-h-10 ax-rounded-md"></ax-skeleton>
|
|
1070
|
+
</div>`,
|
|
1071
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1072
|
+
imports: [AXSkeletonModule],
|
|
1073
|
+
standalone: true,
|
|
1074
|
+
}]
|
|
1075
|
+
}] });
|
|
1076
|
+
|
|
1077
|
+
class AXPComponentSlotRegistryService {
|
|
1078
|
+
constructor() {
|
|
1079
|
+
this.registry = new Map();
|
|
1080
|
+
}
|
|
1081
|
+
register(slotName, config) {
|
|
1082
|
+
let configs = this.registry.get(slotName) || [];
|
|
1083
|
+
// Check if the component is already registered in this slot
|
|
1084
|
+
const isDuplicate = configs.some(existingConfig => existingConfig.name === config.name);
|
|
1085
|
+
if (!isDuplicate) {
|
|
1086
|
+
configs = [...configs, config]; // Add the new configuration
|
|
1087
|
+
this.registry.set(slotName, configs);
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
get(slotName) {
|
|
1091
|
+
return this.registry.get(slotName) || [];
|
|
1092
|
+
}
|
|
1093
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlotRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1094
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlotRegistryService, providedIn: 'root' }); }
|
|
1095
|
+
}
|
|
1096
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlotRegistryService, decorators: [{
|
|
1097
|
+
type: Injectable,
|
|
1098
|
+
args: [{
|
|
1099
|
+
providedIn: 'root'
|
|
1100
|
+
}]
|
|
1101
|
+
}] });
|
|
1102
|
+
|
|
1103
|
+
class AXPComponentSlotDirective {
|
|
1104
|
+
constructor() {
|
|
1105
|
+
this.name = input.required(...(ngDevMode ? [{ debugName: "name" }] : []));
|
|
1106
|
+
this.host = input(...(ngDevMode ? [undefined, { debugName: "host" }] : []));
|
|
1107
|
+
this.context = input(...(ngDevMode ? [undefined, { debugName: "context" }] : []));
|
|
1108
|
+
this.elementRef = inject(ElementRef);
|
|
1109
|
+
this.registryService = inject(AXPComponentSlotRegistryService);
|
|
1110
|
+
this.injector = inject(Injector);
|
|
1111
|
+
this.evaluator = inject(AXPExpressionEvaluatorService);
|
|
1112
|
+
this.viewContainerRef = inject(ViewContainerRef);
|
|
1113
|
+
this.contextStore = inject(AXPContextStore);
|
|
1114
|
+
this.isEmpty = computed(() => this._viewCount() === 0, ...(ngDevMode ? [{ debugName: "isEmpty" }] : []));
|
|
1115
|
+
// Create a signal to store the count of children
|
|
1116
|
+
this._viewCount = signal(0, ...(ngDevMode ? [{ debugName: "_viewCount" }] : []));
|
|
1117
|
+
// Track component references for updates
|
|
1118
|
+
this.componentRefs = [];
|
|
1119
|
+
// Track placeholder references for replacement
|
|
1120
|
+
this.placeholderRefs = new Map();
|
|
1121
|
+
// Watch for context changes and update component instances
|
|
1122
|
+
effect(() => {
|
|
1123
|
+
const currentContext = this.context();
|
|
1124
|
+
const currentHost = this.host();
|
|
1125
|
+
// Update all component references with new context and host
|
|
1126
|
+
this.componentRefs.forEach((componentRef) => {
|
|
1127
|
+
if (componentRef.instance) {
|
|
1128
|
+
Object.assign(componentRef.instance, {
|
|
1129
|
+
host: currentHost,
|
|
1130
|
+
context: currentContext,
|
|
1131
|
+
});
|
|
1132
|
+
}
|
|
1133
|
+
});
|
|
1134
|
+
});
|
|
1135
|
+
}
|
|
1136
|
+
async ngOnInit() {
|
|
1137
|
+
await this.loadComponents();
|
|
1138
|
+
// Update the signal after loading
|
|
1139
|
+
this._viewCount.set(this.viewContainerRef.length);
|
|
1140
|
+
}
|
|
1141
|
+
async loadComponents() {
|
|
1142
|
+
this.viewContainerRef.clear();
|
|
1143
|
+
// Clear previous component references
|
|
1144
|
+
this.componentRefs = [];
|
|
1145
|
+
this.placeholderRefs.clear();
|
|
1146
|
+
const configs = sortBy(this.registryService.get(this.name()), (c) => c.priority ?? 0);
|
|
1147
|
+
if (!configs) {
|
|
1148
|
+
console.error(`No component found for slot ${this.name()}`);
|
|
1149
|
+
return;
|
|
1150
|
+
}
|
|
1151
|
+
// Evaluate conditions and check features in parallel for performance
|
|
1152
|
+
const results = await Promise.all(configs.map(async (c) => {
|
|
1153
|
+
// Check condition if provided
|
|
1154
|
+
const conditionPassed = c.condition ? await this.evaluateCondition(c.condition) : true;
|
|
1155
|
+
// Check features if provided
|
|
1156
|
+
// const featuresPassed =
|
|
1157
|
+
// c.features && c.features.length > 0 ? this.sessionService.isFeatureEnabled(...c.features) : true;
|
|
1158
|
+
return {
|
|
1159
|
+
config: c,
|
|
1160
|
+
// visible: conditionPassed && featuresPassed,
|
|
1161
|
+
visible: conditionPassed,
|
|
1162
|
+
};
|
|
1163
|
+
}));
|
|
1164
|
+
// Filter visible components while preserving priority order
|
|
1165
|
+
const slots = results.filter((r) => r.visible).map((r) => r.config);
|
|
1166
|
+
// Create skeleton placeholders immediately in priority order
|
|
1167
|
+
slots.forEach((config, index) => {
|
|
1168
|
+
const placeholderRef = this.viewContainerRef.createComponent(AXPComponentSlotPlaceholderComponent);
|
|
1169
|
+
this.placeholderRefs.set(index, placeholderRef);
|
|
1170
|
+
});
|
|
1171
|
+
// Load all components in parallel and replace placeholders as they become ready
|
|
1172
|
+
const loadPromises = slots.map(async (config, index) => {
|
|
1173
|
+
let component;
|
|
1174
|
+
let options = {};
|
|
1175
|
+
// load component
|
|
1176
|
+
if (typeof config.loadComponent === 'function') {
|
|
1177
|
+
await runInInjectionContext(this.injector, async () => {
|
|
1178
|
+
component = await config.loadComponent?.();
|
|
1179
|
+
});
|
|
1180
|
+
}
|
|
1181
|
+
else if (config.component) {
|
|
1182
|
+
component = config.component;
|
|
1183
|
+
}
|
|
1184
|
+
// load options
|
|
1185
|
+
if (typeof config.options === 'function') {
|
|
1186
|
+
await runInInjectionContext(this.injector, async () => {
|
|
1187
|
+
const fun = config.options;
|
|
1188
|
+
options = await fun();
|
|
1189
|
+
});
|
|
1190
|
+
}
|
|
1191
|
+
else if (config.options) {
|
|
1192
|
+
options = await this.evaluator.evaluate(config.options, {});
|
|
1193
|
+
}
|
|
1194
|
+
// Replace placeholder with actual component as soon as it's ready
|
|
1195
|
+
if (!component) {
|
|
1196
|
+
console.warn(`Component failed to load for slot ${this.name()} at index ${index}`);
|
|
1197
|
+
// Remove placeholder if component failed to load
|
|
1198
|
+
const placeholderRef = this.placeholderRefs.get(index);
|
|
1199
|
+
if (placeholderRef) {
|
|
1200
|
+
placeholderRef.destroy();
|
|
1201
|
+
this.placeholderRefs.delete(index);
|
|
1202
|
+
}
|
|
1203
|
+
return;
|
|
1204
|
+
}
|
|
1205
|
+
// Get the placeholder reference at this index
|
|
1206
|
+
const placeholderRef = this.placeholderRefs.get(index);
|
|
1207
|
+
if (!placeholderRef) {
|
|
1208
|
+
console.warn(`Placeholder not found for index ${index}`);
|
|
1209
|
+
return;
|
|
1210
|
+
}
|
|
1211
|
+
// Get the index of the placeholder in the view container
|
|
1212
|
+
const placeholderIndex = this.viewContainerRef.indexOf(placeholderRef.hostView);
|
|
1213
|
+
// Remove the placeholder
|
|
1214
|
+
placeholderRef.destroy();
|
|
1215
|
+
this.placeholderRefs.delete(index);
|
|
1216
|
+
// Create the actual component at the same position
|
|
1217
|
+
const componentRef = this.viewContainerRef.createComponent(component, { index: placeholderIndex });
|
|
1218
|
+
// Store the component reference for future updates
|
|
1219
|
+
this.componentRefs.push(componentRef);
|
|
1220
|
+
Object.assign(componentRef.instance, {
|
|
1221
|
+
host: this.host(),
|
|
1222
|
+
context: this.context(),
|
|
1223
|
+
...options,
|
|
1224
|
+
});
|
|
1225
|
+
});
|
|
1226
|
+
// Wait for all components to finish loading (they render as they become ready)
|
|
1227
|
+
await Promise.all(loadPromises);
|
|
1228
|
+
}
|
|
1229
|
+
async evaluateCondition(condition) {
|
|
1230
|
+
if (typeof condition === 'string') {
|
|
1231
|
+
const result = await this.evaluator.evaluate(condition, {});
|
|
1232
|
+
return result;
|
|
1233
|
+
}
|
|
1234
|
+
return condition(this.contextStore.data());
|
|
1235
|
+
//return condition(this.context());
|
|
1236
|
+
}
|
|
1237
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1238
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.16", type: AXPComponentSlotDirective, isStandalone: false, selector: "axp-component-slot", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, host: { classPropertyName: "host", publicName: "host", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["slot"], ngImport: i0 }); }
|
|
1239
|
+
}
|
|
1240
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlotDirective, decorators: [{
|
|
1241
|
+
type: Directive,
|
|
1242
|
+
args: [{
|
|
1243
|
+
selector: 'axp-component-slot',
|
|
1244
|
+
standalone: false,
|
|
1245
|
+
exportAs: 'slot',
|
|
1246
|
+
}]
|
|
1247
|
+
}], ctorParameters: () => [], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], host: [{ type: i0.Input, args: [{ isSignal: true, alias: "host", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "context", required: false }] }] } });
|
|
1248
|
+
|
|
1249
|
+
class AXPComponentSlotModule {
|
|
1250
|
+
static forRoot(configs) {
|
|
1251
|
+
return {
|
|
1252
|
+
ngModule: AXPComponentSlotModule,
|
|
1253
|
+
providers: [
|
|
1254
|
+
{
|
|
1255
|
+
provide: 'AXPComponentSlotModuleFactory',
|
|
1256
|
+
useFactory: (registry) => () => {
|
|
1257
|
+
if (configs) {
|
|
1258
|
+
for (const [key, value] of Object.entries(configs)) {
|
|
1259
|
+
value.forEach(v => {
|
|
1260
|
+
registry.register(key, v);
|
|
1261
|
+
});
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
},
|
|
1265
|
+
deps: [AXPComponentSlotRegistryService],
|
|
1266
|
+
multi: true
|
|
1267
|
+
}
|
|
1268
|
+
]
|
|
1269
|
+
};
|
|
1270
|
+
}
|
|
1271
|
+
static forChild(configs) {
|
|
1272
|
+
return {
|
|
1273
|
+
ngModule: AXPComponentSlotModule,
|
|
1274
|
+
providers: [
|
|
1275
|
+
{
|
|
1276
|
+
provide: 'AXPComponentSlotModuleFactory',
|
|
1277
|
+
useFactory: (registry) => () => {
|
|
1278
|
+
if (configs) {
|
|
1279
|
+
for (const [key, value] of Object.entries(configs)) {
|
|
1280
|
+
value.forEach(v => {
|
|
1281
|
+
registry.register(key, v);
|
|
1282
|
+
});
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
},
|
|
1286
|
+
deps: [AXPComponentSlotRegistryService],
|
|
1287
|
+
multi: true
|
|
1288
|
+
}
|
|
1289
|
+
]
|
|
1290
|
+
};
|
|
1291
|
+
}
|
|
1292
|
+
/**
|
|
1293
|
+
* @ignore
|
|
1294
|
+
*/
|
|
1295
|
+
constructor(instances) {
|
|
1296
|
+
instances?.forEach(f => {
|
|
1297
|
+
f();
|
|
1298
|
+
});
|
|
1299
|
+
}
|
|
1300
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlotModule, deps: [{ token: 'AXPComponentSlotModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
1301
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlotModule, declarations: [AXPComponentSlotDirective], exports: [AXPComponentSlotDirective] }); }
|
|
1302
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlotModule }); }
|
|
1303
|
+
}
|
|
1304
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPComponentSlotModule, decorators: [{
|
|
1305
|
+
type: NgModule,
|
|
1306
|
+
args: [{
|
|
1307
|
+
declarations: [AXPComponentSlotDirective],
|
|
1308
|
+
exports: [AXPComponentSlotDirective]
|
|
1309
|
+
}]
|
|
1310
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
1311
|
+
type: Optional
|
|
1312
|
+
}, {
|
|
1313
|
+
type: Inject,
|
|
1314
|
+
args: ['AXPComponentSlotModuleFactory']
|
|
1315
|
+
}] }] });
|
|
1316
|
+
|
|
894
1317
|
class AXPDataGenerator {
|
|
895
1318
|
static uuid() {
|
|
896
1319
|
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {
|
|
@@ -1536,158 +1959,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
1536
1959
|
}]
|
|
1537
1960
|
}], ctorParameters: () => [] });
|
|
1538
1961
|
|
|
1539
|
-
class AXPExpressionEvaluatorScopeProviderContext {
|
|
1540
|
-
constructor() {
|
|
1541
|
-
this.scopes = {};
|
|
1542
|
-
}
|
|
1543
|
-
addScope(namespace, functions) {
|
|
1544
|
-
this.scopes[namespace] = { ...this.scopes[namespace], ...functions };
|
|
1545
|
-
}
|
|
1546
|
-
getScopes() {
|
|
1547
|
-
return this.scopes;
|
|
1548
|
-
}
|
|
1549
|
-
}
|
|
1550
|
-
const AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER = new InjectionToken('AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER');
|
|
1551
|
-
class AXPExpressionEvaluatorScopeProviderService {
|
|
1552
|
-
constructor() {
|
|
1553
|
-
this.providers = inject(AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, { optional: true });
|
|
1554
|
-
this.cache = null;
|
|
1555
|
-
}
|
|
1556
|
-
async load() {
|
|
1557
|
-
if (this.cache)
|
|
1558
|
-
return;
|
|
1559
|
-
const context = new AXPExpressionEvaluatorScopeProviderContext();
|
|
1560
|
-
if (Array.isArray(this.providers)) {
|
|
1561
|
-
for (const provider of this.providers) {
|
|
1562
|
-
await provider.provide(context);
|
|
1563
|
-
}
|
|
1564
|
-
}
|
|
1565
|
-
this.cache = context.getScopes();
|
|
1566
|
-
}
|
|
1567
|
-
async getScopesAsync() {
|
|
1568
|
-
await this.load();
|
|
1569
|
-
return this.cache || {};
|
|
1570
|
-
}
|
|
1571
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1572
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, providedIn: 'root' }); }
|
|
1573
|
-
}
|
|
1574
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPExpressionEvaluatorScopeProviderService, decorators: [{
|
|
1575
|
-
type: Injectable,
|
|
1576
|
-
args: [{ providedIn: 'root' }]
|
|
1577
|
-
}] });
|
|
1578
|
-
|
|
1579
|
-
class AXPExpressionEvaluatorService {
|
|
1580
|
-
constructor() {
|
|
1581
|
-
// Memoization cache for compiled expressions
|
|
1582
|
-
this.expressionCache = new Map();
|
|
1583
|
-
this.providerService = inject(AXPExpressionEvaluatorScopeProviderService);
|
|
1584
|
-
}
|
|
1585
|
-
getOrCompileFunction(expression) {
|
|
1586
|
-
if (!this.expressionCache.has(expression)) {
|
|
1587
|
-
// Check if expression contains multiple statements (has semicolons or newlines)
|
|
1588
|
-
const hasMultipleStatements = expression.includes(';') || expression.includes('\n');
|
|
1589
|
-
let fn;
|
|
1590
|
-
if (hasMultipleStatements) {
|
|
1591
|
-
// For multiple statements, execute them in sequence and return the last expression
|
|
1592
|
-
fn = new Function('scope', `with (scope) { return (async function() { ${expression} })(); }`);
|
|
1593
|
-
}
|
|
1594
|
-
else {
|
|
1595
|
-
// For single expressions, use return
|
|
1596
|
-
fn = new Function('scope', `with (scope) { return (async function() { return ${expression}; })(); }`);
|
|
1597
|
-
}
|
|
1598
|
-
this.expressionCache.set(expression, fn);
|
|
1599
|
-
}
|
|
1600
|
-
return this.expressionCache.get(expression);
|
|
1601
|
-
}
|
|
1602
|
-
async getMergedScope(userScope) {
|
|
1603
|
-
const pluginScopes = await this.providerService.getScopesAsync();
|
|
1604
|
-
// Merge pluginScopes and userScope (userScope takes precedence)
|
|
1605
|
-
return { ...pluginScopes, ...userScope };
|
|
1606
|
-
}
|
|
1607
|
-
async evaluate(source, scope = {}) {
|
|
1608
|
-
try {
|
|
1609
|
-
const mergedScope = await this.getMergedScope(scope);
|
|
1610
|
-
if (typeof source === 'string' && source.includes('{{')) {
|
|
1611
|
-
return await this.evaluateStringExpression(source, mergedScope);
|
|
1612
|
-
}
|
|
1613
|
-
else if (Array.isArray(source)) {
|
|
1614
|
-
const evaluatedArray = [];
|
|
1615
|
-
for (const item of source) {
|
|
1616
|
-
evaluatedArray.push(await this.evaluate(item, mergedScope));
|
|
1617
|
-
}
|
|
1618
|
-
return evaluatedArray;
|
|
1619
|
-
}
|
|
1620
|
-
else if (typeof source === 'object' && source !== null) {
|
|
1621
|
-
const evaluatedObject = {};
|
|
1622
|
-
for (const key in source) {
|
|
1623
|
-
if (source.hasOwnProperty(key)) {
|
|
1624
|
-
evaluatedObject[key] = await this.evaluate(source[key], mergedScope);
|
|
1625
|
-
}
|
|
1626
|
-
}
|
|
1627
|
-
return evaluatedObject;
|
|
1628
|
-
}
|
|
1629
|
-
else {
|
|
1630
|
-
return source;
|
|
1631
|
-
}
|
|
1632
|
-
}
|
|
1633
|
-
catch (error) {
|
|
1634
|
-
console.error('Expression evaluator - Error evaluating expression:', source, error);
|
|
1635
|
-
return false;
|
|
1636
|
-
}
|
|
1637
|
-
}
|
|
1638
|
-
async evaluateStringExpression(templateExpression, scope) {
|
|
1639
|
-
// Check if the input is exactly a single {{ ... }} expression (handle multiline)
|
|
1640
|
-
const exactMatch = templateExpression.match(/^\s*\{\{\s*([\s\S]*?)\s*\}\}\s*$/);
|
|
1641
|
-
if (exactMatch) {
|
|
1642
|
-
const expression = exactMatch[1];
|
|
1643
|
-
const sandbox = this.getOrCompileFunction(expression);
|
|
1644
|
-
const result = await sandbox(scope);
|
|
1645
|
-
return result;
|
|
1646
|
-
}
|
|
1647
|
-
// Otherwise, interpolate all {{ ... }} expressions in the string
|
|
1648
|
-
const regex = /\{\{\s*([\s\S]*?)\s*\}\}/g;
|
|
1649
|
-
// Collect all matches and their positions
|
|
1650
|
-
const matches = [];
|
|
1651
|
-
let match;
|
|
1652
|
-
while ((match = regex.exec(templateExpression)) !== null) {
|
|
1653
|
-
matches.push({
|
|
1654
|
-
expression: match[1],
|
|
1655
|
-
start: match.index,
|
|
1656
|
-
end: regex.lastIndex,
|
|
1657
|
-
raw: match[0],
|
|
1658
|
-
});
|
|
1659
|
-
}
|
|
1660
|
-
// Evaluate all expressions in parallel
|
|
1661
|
-
const values = await Promise.all(matches.map((m) => {
|
|
1662
|
-
const sandbox = this.getOrCompileFunction(m.expression);
|
|
1663
|
-
return sandbox(scope);
|
|
1664
|
-
}));
|
|
1665
|
-
// Reconstruct the string with evaluated values
|
|
1666
|
-
let result = '';
|
|
1667
|
-
let lastIndex = 0;
|
|
1668
|
-
matches.forEach((m, i) => {
|
|
1669
|
-
result += templateExpression.slice(lastIndex, m.start);
|
|
1670
|
-
const value = values[i];
|
|
1671
|
-
result += value !== undefined && value !== null ? value : '';
|
|
1672
|
-
lastIndex = m.end;
|
|
1673
|
-
});
|
|
1674
|
-
result += templateExpression.slice(lastIndex);
|
|
1675
|
-
return result;
|
|
1676
|
-
}
|
|
1677
|
-
isExpression(expression) {
|
|
1678
|
-
if (typeof expression === 'string') {
|
|
1679
|
-
return expression.trim().startsWith('{{') && expression.trim().endsWith('}}');
|
|
1680
|
-
}
|
|
1681
|
-
return false;
|
|
1682
|
-
}
|
|
1683
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPExpressionEvaluatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1684
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPExpressionEvaluatorService, providedIn: 'root' }); }
|
|
1685
|
-
}
|
|
1686
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPExpressionEvaluatorService, decorators: [{
|
|
1687
|
-
type: Injectable,
|
|
1688
|
-
args: [{ providedIn: 'root' }]
|
|
1689
|
-
}] });
|
|
1690
|
-
|
|
1691
1962
|
class AXPHookService {
|
|
1692
1963
|
constructor() {
|
|
1693
1964
|
this.listenerProviders = inject(AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, { optional: true }) || [];
|
|
@@ -3860,5 +4131,5 @@ function generateKebabCase(title) {
|
|
|
3860
4131
|
* Generated bundle index. Do not edit.
|
|
3861
4132
|
*/
|
|
3862
4133
|
|
|
3863
|
-
export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPColorPaletteProvider, AXPColorPaletteService, AXPColumnWidthService, AXPComponentLogoConfig, AXPContentCheckerDirective, AXPContextChangeEvent, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDblClickDirective, AXPDefaultColorPalettesProvider, AXPDeviceService, AXPDeviceType, AXPDistributedEventListenerService, AXPElementDataDirective, AXPExportTemplateToken, AXPExpressionEvaluatorScopeProviderContext, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPFeatureDefinitionProviderContext, AXPGridLayoutDirective, AXPHookService, AXPIconLogoConfig, AXPImageUrlLogoConfig, AXPModuleManifestModule, AXPModuleManifestRegistry, AXPPlatformScope, AXPScreenSize, AXPSystemActionType, AXPSystemActions, AXPTagProvider, AXPTagService, AXP_ACTIVITY_LOG_PROVIDER, AXP_COLOR_PALETTE_PROVIDER, AXP_COLUMN_WIDTH_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER, AXP_SESSION_SERVICE, AXP_TAG_PROVIDER, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, cleanDeep, createProviderWithInjectionContext, defaultColumnWidthProvider, extractNestedFieldsWildcard, extractTextFromHtml, extractValue, generateKebabCase, getActionButton, getChangedPaths, getDetailedChanges, getEnumValues, getNestedKeys, getSmart, getSystemActions, objectKeyValueTransforms, provideLazyProvider, resolveActionLook, resolvePlatformScopeKey, resolvePlatformScopeName, setSmart };
|
|
4134
|
+
export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPColorPaletteProvider, AXPColorPaletteService, AXPColumnWidthService, AXPComponentLogoConfig, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPContentCheckerDirective, AXPContextChangeEvent, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDblClickDirective, AXPDefaultColorPalettesProvider, AXPDeviceService, AXPDeviceType, AXPDistributedEventListenerService, AXPElementDataDirective, AXPExportTemplateToken, AXPExpressionEvaluatorScopeProviderContext, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPFeatureDefinitionProviderContext, AXPGridLayoutDirective, AXPHookService, AXPIconLogoConfig, AXPImageUrlLogoConfig, AXPModuleManifestModule, AXPModuleManifestRegistry, AXPPlatformScope, AXPScreenSize, AXPSystemActionType, AXPSystemActions, AXPTagProvider, AXPTagService, AXP_ACTIVITY_LOG_PROVIDER, AXP_COLOR_PALETTE_PROVIDER, AXP_COLUMN_WIDTH_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER, AXP_SESSION_SERVICE, AXP_TAG_PROVIDER, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, cleanDeep, createProviderWithInjectionContext, defaultColumnWidthProvider, extractNestedFieldsWildcard, extractTextFromHtml, extractValue, generateKebabCase, getActionButton, getChangedPaths, getDetailedChanges, getEnumValues, getNestedKeys, getSmart, getSystemActions, objectKeyValueTransforms, provideLazyProvider, resolveActionLook, resolvePlatformScopeKey, resolvePlatformScopeName, setSmart };
|
|
3864
4135
|
//# sourceMappingURL=acorex-platform-core.mjs.map
|