@acorex/platform 21.0.0-next.90 → 21.0.0-next.91

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.
Files changed (52) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +1 -1
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-common-common-settings.provider-DilV4dql.mjs.map +1 -1
  4. package/fesm2022/acorex-platform-common.mjs +3 -10
  5. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-contracts.mjs +1736 -27
  7. package/fesm2022/acorex-platform-contracts.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-core.mjs +6 -1708
  9. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-domain-contracts.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-layout-components.mjs +2 -2
  13. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-CwG6n_Yb.mjs.map +1 -1
  16. package/fesm2022/acorex-platform-layout-entity-contracts.mjs +27 -1
  17. package/fesm2022/acorex-platform-layout-entity-contracts.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-layout-entity-file-list-popup.component--IeMZLIr.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity.mjs +263 -115
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +4 -2
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs +87 -11
  24. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -1
  26. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-CFyfix31.mjs.map +1 -1
  27. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-BvFykMTH.mjs.map +1 -1
  28. package/fesm2022/acorex-platform-layout-widgets.mjs +2 -4
  29. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  30. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  31. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CWLfNqV0.mjs.map +1 -1
  32. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs.map +1 -1
  33. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DrUwqKKA.mjs.map +1 -1
  34. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  35. package/fesm2022/{acorex-platform-themes-shared-settings.provider-UyKdkeyk.mjs → acorex-platform-themes-shared-settings.provider-DxtfyNGS.mjs} +2 -2
  36. package/fesm2022/acorex-platform-themes-shared-settings.provider-DxtfyNGS.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-themes-shared.mjs +2 -2
  38. package/fesm2022/acorex-platform-workflow.mjs +2 -2
  39. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  40. package/package.json +1 -1
  41. package/types/acorex-platform-common.d.ts +3 -5
  42. package/types/acorex-platform-contracts.d.ts +862 -7
  43. package/types/acorex-platform-core.d.ts +64 -921
  44. package/types/acorex-platform-layout-builder.d.ts +3 -3
  45. package/types/acorex-platform-layout-components.d.ts +6 -6
  46. package/types/acorex-platform-layout-designer.d.ts +4 -5
  47. package/types/acorex-platform-layout-entity-contracts.d.ts +90 -3
  48. package/types/acorex-platform-layout-entity.d.ts +45 -102
  49. package/types/acorex-platform-layout-views.d.ts +13 -11
  50. package/types/acorex-platform-layout-widget-core.d.ts +83 -77
  51. package/types/acorex-platform-layout-widgets.d.ts +9 -8
  52. package/fesm2022/acorex-platform-themes-shared-settings.provider-UyKdkeyk.mjs.map +0 -1
@@ -2,8 +2,8 @@ import * as i0 from '@angular/core';
2
2
  import { InjectionToken, inject, Injectable, Directive, computed, Injector, ChangeDetectionStrategy, Component, input, ElementRef, ViewContainerRef, signal, effect, runInInjectionContext, Optional, Inject, NgModule, EventEmitter, HostListener, Output, DestroyRef, untracked, provideAppInitializer, Pipe } from '@angular/core';
3
3
  import { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';
4
4
  import { AXDataSource } from '@acorex/cdk/common';
5
- import { AXPPlatformCoreDataSourceKeys, AXPSystemActionType } from '@acorex/platform/contracts';
6
- import { isPlainObject, get, set, isNil, isEmpty, isArray, merge, isObjectLike, transform, isEqual, differenceWith, union, cloneDeep, has, unset, sortBy, isUndefined, endsWith, startsWith, includes, lte, gte, lt, gt, orderBy } from 'lodash-es';
5
+ import { AXPPlatformCoreDataSourceKeys, isFormContextDirty, summarizeFormContextDirtyDiff, getSmart, isSelectionValueEqual, isFormValueEqual, setSmart, extractValue, getSystemActions, isLocaleStringMap } from '@acorex/platform/contracts';
6
+ import { cloneDeep, isEmpty, isEqual, has, unset, isPlainObject, get, sortBy, set, isUndefined, isNil, endsWith, startsWith, includes, lte, gte, lt, gt, orderBy } from 'lodash-es';
7
7
  import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
8
8
  import { AXFormatService } from '@acorex/core/format';
9
9
  import * as i1 from '@acorex/components/skeleton';
@@ -805,704 +805,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
805
805
  /** Trace namespace for form dirty-state diagnostics (lookup/select revert, discard, baseline). */
806
806
  const FORM_DIRTY_TRACE_NS = 'FORM STATE';
807
807
 
808
- //#region ---- Locale map shape ----
809
- /** Per-locale string map (`{ 'en-US': '...', 'fa-IR': '...' }`). */
810
- function isLocaleStringMap(value) {
811
- if (!isPlainObject(value)) {
812
- return false;
813
- }
814
- const entries = Object.values(value);
815
- if (entries.length === 0) {
816
- return false;
817
- }
818
- return entries.every((entry) => entry === null || entry === undefined || typeof entry === 'string');
819
- }
820
- /**
821
- * Use locale-map read/write when the option is on or live/saved data is already a map.
822
- * Auto-enables when API data is a map but the editor option was left off.
823
- */
824
- function shouldUseLocaleMapShape(localeMapOptionEnabled, current, saved) {
825
- return localeMapOptionEnabled || isLocaleStringMap(current) || isLocaleStringMap(saved);
826
- }
827
- /** Updates one locale entry; preserves sibling locales from current or saved map. */
828
- function buildLocaleTextMapValue(current, saved, lang, input) {
829
- const seed = isLocaleStringMap(current)
830
- ? { ...current }
831
- : isLocaleStringMap(saved)
832
- ? { ...saved }
833
- : {};
834
- seed[lang] = input ?? '';
835
- for (const key of Object.keys(seed)) {
836
- if ((seed[key] ?? '').trim() === '') {
837
- delete seed[key];
838
- }
839
- }
840
- return Object.keys(seed).length === 0 ? null : seed;
841
- }
842
- //#endregion
843
-
844
- function extractNestedFieldsWildcard(obj, basePath, fields) {
845
- const result = {};
846
- if (fields.length === 1 && fields[0] === '*') {
847
- const fullObj = get(obj, basePath);
848
- return isPlainObject(fullObj) ? fullObj : {};
849
- }
850
- for (const field of fields) {
851
- const fullPath = basePath ? `${basePath}.${field}` : field;
852
- const value = get(obj, fullPath);
853
- set(result, field, value);
854
- }
855
- return result;
856
- }
857
- function setSmart(obj, smartPath, value) {
858
- const pathParts = smartPath.split('.');
859
- const lastPart = pathParts[pathParts.length - 1];
860
- const fieldMatch = lastPart.match(/^\{(.+)\}$/);
861
- if (!fieldMatch) {
862
- // Fix: If value is undefined and we're setting a nested property,
863
- // check if the parent object exists and if setting this would result in
864
- // all properties being undefined. If so, set the parent to null instead.
865
- if (isNil(value) && pathParts.length > 1) {
866
- const parentPath = pathParts.slice(0, -1).join('.');
867
- const parentObj = get(obj, parentPath);
868
- // If parent is already null/undefined, don't recreate the object structure
869
- if (isNil(parentObj)) {
870
- return obj;
871
- }
872
- // Check if parent is a plain object (not array, not null)
873
- if (isPlainObject(parentObj)) {
874
- const existingKeys = Object.keys(parentObj);
875
- // Check if all existing properties are null/undefined using lodash
876
- const allNil = isEmpty(existingKeys) || existingKeys.every((key) => isNil(parentObj[key]));
877
- if (allNil) {
878
- // Set parent to null instead of creating/keeping an object with all undefined properties
879
- set(obj, parentPath, null);
880
- return obj;
881
- }
882
- }
883
- }
884
- set(obj, smartPath, value);
885
- // After setting, check again if parent should be null using lodash
886
- if (isNil(value) && pathParts.length > 1) {
887
- const parentPath = pathParts.slice(0, -1).join('.');
888
- const parentObj = get(obj, parentPath);
889
- if (isPlainObject(parentObj)) {
890
- // Use lodash to check if all properties are null/undefined
891
- const allNil = Object.keys(parentObj).every((key) => isNil(parentObj[key]));
892
- if (allNil) {
893
- set(obj, parentPath, null);
894
- }
895
- }
896
- }
897
- return obj;
898
- }
899
- const fields = fieldMatch[1].split(',').map((f) => f.trim());
900
- const basePath = pathParts.slice(0, -1).join('.');
901
- const [arrayKey, ...restPath] = basePath.split('.');
902
- // Make sure the array exists
903
- if (!obj[arrayKey])
904
- obj[arrayKey] = [];
905
- // 🟡 Case A: value is array (normal set)
906
- if (isArray(value)) {
907
- for (let i = 0; i < value.length; i++) {
908
- const item = value[i];
909
- const targetItem = obj[arrayKey][i] ?? {};
910
- const nested = {};
911
- if (restPath.length > 0) {
912
- const picked = extractNestedFieldsWildcard(item, restPath.join('.'), fields);
913
- set(nested, restPath.join('.'), picked);
914
- }
915
- else {
916
- const picked = extractNestedFieldsWildcard(item, '', fields);
917
- Object.assign(nested, picked);
918
- }
919
- obj[arrayKey][i] = merge({}, targetItem, nested);
920
- }
921
- }
922
- // 🟢 Case B: value is a single value → broadcast
923
- else {
924
- for (let i = 0; i < obj[arrayKey].length; i++) {
925
- const targetItem = obj[arrayKey][i] ?? {};
926
- const nested = {};
927
- if (restPath.length > 0) {
928
- for (const field of fields) {
929
- set(nested, `${restPath.join('.')}.${field}`, value);
930
- }
931
- }
932
- else {
933
- for (const field of fields) {
934
- set(nested, field, value);
935
- }
936
- }
937
- obj[arrayKey][i] = merge({}, targetItem, nested);
938
- }
939
- }
940
- return obj;
941
- }
942
- function extractFieldsFromPath(obj, basePath, fields) {
943
- if (fields.length === 1 && fields[0] === '*') {
944
- const fullObj = basePath ? get(obj, basePath) : obj;
945
- return isPlainObject(fullObj) ? fullObj : {};
946
- }
947
- const result = {};
948
- for (const field of fields) {
949
- const fullPath = basePath ? `${basePath}.${field}` : field;
950
- const val = get(obj, fullPath);
951
- if (val !== undefined) {
952
- result[field] = val;
953
- }
954
- }
955
- return result;
956
- }
957
- function getSmart(obj, smartPath) {
958
- const pathParts = smartPath.split('.');
959
- const lastPart = pathParts[pathParts.length - 1];
960
- const fieldMatch = lastPart.match(/^\{(.+)\}$/);
961
- // Simple get (no fields)
962
- if (!fieldMatch) {
963
- return get(obj, smartPath);
964
- }
965
- const fields = fieldMatch[1].split(',').map((f) => f.trim());
966
- const basePath = pathParts.slice(0, -1).join('.');
967
- const items = get(obj, basePath);
968
- if (!isArray(items))
969
- return [];
970
- const nestedPath = basePath.includes('.') ? basePath.split('.').slice(1).join('.') : '';
971
- return items.map((item) => {
972
- return extractFieldsFromPath(item, nestedPath, fields);
973
- });
974
- }
975
- function extractValue(value, key = 'id') {
976
- if (isNil(value)) {
977
- return null;
978
- }
979
- return isObjectLike(value) ? get(value, key) : value;
980
- }
981
- function cleanDeep(obj) {
982
- return transform(obj, (result, value, key) => {
983
- if (isObjectLike(value)) {
984
- const cleaned = cleanDeep(value);
985
- if (!isEmpty(cleaned)) {
986
- result[key] = cleaned;
987
- }
988
- }
989
- else if (!isNil(value) && // not null or undefined
990
- !(typeof value === 'string' && value.trim() === '') && // not empty string
991
- !(Array.isArray(value) && value.length === 0) // not empty array
992
- ) {
993
- result[key] = value;
994
- }
995
- });
996
- }
997
- function getDeepChanges(obj1, obj2) {
998
- const changes = [];
999
- function walk(o1, o2, currentPath = []) {
1000
- // If both values are deeply equal, skip
1001
- if (isEqual(o1, o2))
1002
- return;
1003
- const isObj1Nil = o1 === null || o1 === undefined;
1004
- const isObj2Nil = o2 === null || o2 === undefined;
1005
- // If obj1 is null/undefined and obj2 is not, treat entire obj2 as added
1006
- if (isObj1Nil && !isObj2Nil) {
1007
- if (isPlainObject(o2)) {
1008
- for (const key of Object.keys(o2)) {
1009
- walk(undefined, o2[key], [...currentPath, key]);
1010
- }
1011
- }
1012
- else if (Array.isArray(o2)) {
1013
- changes.push({
1014
- path: currentPath.join('.'),
1015
- oldValue: undefined,
1016
- newValue: o2,
1017
- arrayDiff: {
1018
- added: o2,
1019
- removed: [],
1020
- },
1021
- });
1022
- }
1023
- else {
1024
- changes.push({
1025
- path: currentPath.join('.'),
1026
- oldValue: undefined,
1027
- newValue: o2,
1028
- });
1029
- }
1030
- return;
1031
- }
1032
- // If obj2 is null/undefined and obj1 is not, treat entire obj1 as removed
1033
- if (!isObj1Nil && isObj2Nil) {
1034
- if (isPlainObject(o1)) {
1035
- for (const key of Object.keys(o1)) {
1036
- walk(o1[key], undefined, [...currentPath, key]);
1037
- }
1038
- }
1039
- else if (Array.isArray(o1)) {
1040
- changes.push({
1041
- path: currentPath.join('.'),
1042
- oldValue: o1,
1043
- newValue: undefined,
1044
- arrayDiff: {
1045
- added: [],
1046
- removed: o1,
1047
- },
1048
- });
1049
- }
1050
- else {
1051
- changes.push({
1052
- path: currentPath.join('.'),
1053
- oldValue: o1,
1054
- newValue: undefined,
1055
- });
1056
- }
1057
- return;
1058
- }
1059
- // If both are arrays, compare items
1060
- if (Array.isArray(o1) && Array.isArray(o2)) {
1061
- if (!isEqual(o1, o2)) {
1062
- const added = differenceWith(o2, o1, isEqual);
1063
- const removed = differenceWith(o1, o2, isEqual);
1064
- changes.push({
1065
- path: currentPath.join('.'),
1066
- oldValue: o1,
1067
- newValue: o2,
1068
- arrayDiff: {
1069
- added,
1070
- removed,
1071
- },
1072
- });
1073
- }
1074
- return;
1075
- }
1076
- // If both are plain objects, walk each key
1077
- if (isPlainObject(o1) && isPlainObject(o2)) {
1078
- const allKeys = union(Object.keys(o1), Object.keys(o2));
1079
- for (const key of allKeys) {
1080
- walk(o1[key], o2[key], [...currentPath, key]);
1081
- }
1082
- return;
1083
- }
1084
- // Primitive values or mismatched types
1085
- changes.push({
1086
- path: currentPath.join('.'),
1087
- oldValue: o1,
1088
- newValue: o2,
1089
- });
1090
- }
1091
- walk(obj1, obj2);
1092
- return changes;
1093
- }
1094
- // Method 1: Returns only changed paths
1095
- function getChangedPaths(obj1, obj2) {
1096
- return getDeepChanges(obj1, obj2).map((change) => change.path);
1097
- }
1098
- // Method 2: Returns full change entries
1099
- function getDetailedChanges(obj1, obj2) {
1100
- return getDeepChanges(obj1, obj2);
1101
- }
1102
- function getEnumValues(enumType) {
1103
- return Object.entries(enumType).map(([key, value]) => ({ id: value, title: key }));
1104
- }
1105
- //#region ---- Form value equality (dirty / baseline) ----
1106
- /** Whether a value uses the multi-language text widget shape (string or locale map). */
1107
- function isMultiLanguageFormShape(value) {
1108
- if (value === null || value === undefined) {
1109
- return true;
1110
- }
1111
- if (typeof value === 'string') {
1112
- return true;
1113
- }
1114
- return isLocaleStringMap(value);
1115
- }
1116
- /** Drops empty/whitespace locale entries from a multi-language map. */
1117
- function normalizeLocaleStringMap(value) {
1118
- const normalized = {};
1119
- for (const [key, entry] of Object.entries(value)) {
1120
- if (typeof entry !== 'string') {
1121
- continue;
1122
- }
1123
- const trimmed = entry.trim();
1124
- if (trimmed !== '') {
1125
- normalized[key] = trimmed;
1126
- }
1127
- }
1128
- return Object.keys(normalized).length === 0 ? null : normalized;
1129
- }
1130
- function compareMultiLanguageLocaleStrings(a, b) {
1131
- const htmlEqual = compareHtmlFormValues(a, b);
1132
- if (htmlEqual !== null) {
1133
- return htmlEqual;
1134
- }
1135
- return a === b;
1136
- }
1137
- /**
1138
- * Compares multi-language field values (plain string vs locale map) for dirty/baseline checks.
1139
- * Returns `null` when either side is not a multi-language shape (caller uses generic normalization).
1140
- */
1141
- function compareMultiLanguageFormValues(a, b) {
1142
- if (!isMultiLanguageFormShape(a) || !isMultiLanguageFormShape(b)) {
1143
- return null;
1144
- }
1145
- const normalizeScalar = (value) => {
1146
- if (value === null || value === undefined) {
1147
- return null;
1148
- }
1149
- if (typeof value === 'string') {
1150
- const trimmed = value.trim();
1151
- return trimmed === '' ? null : trimmed;
1152
- }
1153
- if (isLocaleStringMap(value)) {
1154
- return normalizeLocaleStringMap(value);
1155
- }
1156
- return null;
1157
- };
1158
- const left = normalizeScalar(a);
1159
- const right = normalizeScalar(b);
1160
- if (left === null && right === null) {
1161
- return true;
1162
- }
1163
- if (left === null || right === null) {
1164
- return false;
1165
- }
1166
- if (typeof left === 'string' && typeof right === 'string') {
1167
- return compareMultiLanguageLocaleStrings(left, right);
1168
- }
1169
- if (typeof left === 'string' && typeof right === 'object') {
1170
- return Object.values(right).some((text) => typeof text === 'string' && compareMultiLanguageLocaleStrings(left, text));
1171
- }
1172
- if (typeof right === 'string' && typeof left === 'object') {
1173
- return Object.values(left).some((text) => typeof text === 'string' && compareMultiLanguageLocaleStrings(right, text));
1174
- }
1175
- if (typeof left !== 'object' || typeof right !== 'object') {
1176
- return false;
1177
- }
1178
- const leftMap = left;
1179
- const rightMap = right;
1180
- const leftKeys = Object.keys(leftMap).sort();
1181
- const rightKeys = Object.keys(rightMap).sort();
1182
- if (leftKeys.length !== rightKeys.length) {
1183
- return false;
1184
- }
1185
- return leftKeys.every((key) => compareMultiLanguageLocaleStrings(leftMap[key], rightMap[key]));
1186
- }
1187
- /**
1188
- * Lookup/select expose may write a resolved MLS string while the baseline keeps the locale map.
1189
- * Restore baseline shape when the string matches any locale entry.
1190
- */
1191
- function shouldRestoreSavedMultiLanguageShape(value, savedAtPath) {
1192
- if (typeof value !== 'string' || !isLocaleStringMap(savedAtPath)) {
1193
- return false;
1194
- }
1195
- const trimmed = value.trim();
1196
- if (trimmed === '') {
1197
- return false;
1198
- }
1199
- return Object.values(savedAtPath).some((entry) => typeof entry === 'string' && entry.trim() === trimmed);
1200
- }
1201
- /** Decode common HTML entities for rich-text baseline compare. */
1202
- function decodeHtmlEntities(value) {
1203
- return value
1204
- .replace(/&#x([0-9a-f]+);/gi, (_, hex) => String.fromCharCode(parseInt(hex, 16)))
1205
- .replace(/&#(\d+);/g, (_, dec) => String.fromCharCode(parseInt(dec, 10)))
1206
- .replace(/&amp;/g, '&')
1207
- .replace(/&lt;/g, '<')
1208
- .replace(/&gt;/g, '>')
1209
- .replace(/&quot;/g, '"');
1210
- }
1211
- function looksLikeHtmlFormValue(value) {
1212
- return /<[a-z][\s\S]*>/i.test(value.trim());
1213
- }
1214
- /** Normalizes rich-text HTML for semantic dirty/baseline compare (e.g. Quill `p`/`br` drift). */
1215
- function normalizeRichTextHtmlForCompare(value) {
1216
- const html = decodeHtmlEntities(value.trim());
1217
- if (typeof document === 'undefined') {
1218
- return html.replace(/\s+/g, ' ').trim();
1219
- }
1220
- const doc = new DOMParser().parseFromString(html, 'text/html');
1221
- return (doc.body.textContent ?? '').replace(/\s+/g, ' ').trim();
1222
- }
1223
- /**
1224
- * Compares rich-text HTML strings by visible text (ignores `p` vs `br` structure drift).
1225
- * Returns `null` when either side is not HTML markup.
1226
- */
1227
- function compareHtmlFormValues(a, b) {
1228
- if (typeof a !== 'string' || typeof b !== 'string') {
1229
- return null;
1230
- }
1231
- if (!looksLikeHtmlFormValue(a) || !looksLikeHtmlFormValue(b)) {
1232
- return null;
1233
- }
1234
- return normalizeRichTextHtmlForCompare(a) === normalizeRichTextHtmlForCompare(b);
1235
- }
1236
- /** Lookup/select filter-mode payload: `{ value, displayText?, operation }`. */
1237
- function isFilterFormShape(value) {
1238
- if (!isPlainObject(value)) {
1239
- return false;
1240
- }
1241
- const record = value;
1242
- return 'value' in record && 'operation' in record;
1243
- }
1244
- /**
1245
- * Compares filter-mode widget values by selection identity; ignores derived `displayText`.
1246
- */
1247
- function compareFilterFormValues(a, b) {
1248
- if (!isFilterFormShape(a) || !isFilterFormShape(b)) {
1249
- return null;
1250
- }
1251
- const left = a;
1252
- const right = b;
1253
- if (!isFormValueEqual(left['value'], right['value'])) {
1254
- return false;
1255
- }
1256
- const opLeft = get(left, 'operation.type');
1257
- const opRight = get(right, 'operation.type');
1258
- if (opLeft !== undefined || opRight !== undefined) {
1259
- return opLeft === opRight;
1260
- }
1261
- return true;
1262
- }
1263
- function isReferenceScalar(value) {
1264
- return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
1265
- }
1266
- /** Scalar id or `{ id }` identity used by lookup/select widgets. */
1267
- function getReferenceId(value) {
1268
- if (isNil(value)) {
1269
- return undefined;
1270
- }
1271
- if (isReferenceScalar(value)) {
1272
- return value;
1273
- }
1274
- if (isPlainObject(value)) {
1275
- const id = get(value, 'id');
1276
- if (!isNil(id)) {
1277
- return id;
1278
- }
1279
- }
1280
- return undefined;
1281
- }
1282
- /**
1283
- * Compares scalar selection ids to full lookup/select items (`5` vs `{ id: 5, ... }`).
1284
- * Does not apply when both sides are objects — those use structural compare so field edits stay dirty.
1285
- */
1286
- function compareReferenceFormValues(a, b) {
1287
- const refA = getReferenceId(a);
1288
- const refB = getReferenceId(b);
1289
- if (refA === undefined || refB === undefined) {
1290
- return null;
1291
- }
1292
- const aIsScalar = isReferenceScalar(a);
1293
- const bIsScalar = isReferenceScalar(b);
1294
- if (!aIsScalar && !bIsScalar) {
1295
- return null;
1296
- }
1297
- return isEqual(normalizeFormValue(refA), normalizeFormValue(refB));
1298
- }
1299
- /**
1300
- * Semantic equality for lookup/select values when restoring saved baseline shape.
1301
- * Compares by selection identity (id), including two full items with the same id.
1302
- */
1303
- function isSelectionValueEqual(a, b) {
1304
- const filterEqual = compareFilterFormValues(a, b);
1305
- if (filterEqual !== null) {
1306
- return filterEqual;
1307
- }
1308
- const refA = getReferenceId(a);
1309
- const refB = getReferenceId(b);
1310
- if (refA !== undefined && refB !== undefined) {
1311
- return isEqual(normalizeFormValue(refA), normalizeFormValue(refB));
1312
- }
1313
- return isFormValueEqual(a, b);
1314
- }
1315
- /**
1316
- * Stable sort key for order-insensitive array comparison (after normalization).
1317
- */
1318
- function formValueSortKey(value) {
1319
- if (value === null) {
1320
- return '\0';
1321
- }
1322
- if (typeof value === 'number') {
1323
- return `n:${value}`;
1324
- }
1325
- if (typeof value === 'boolean') {
1326
- return `b:${value}`;
1327
- }
1328
- if (typeof value === 'string') {
1329
- return `s:${value}`;
1330
- }
1331
- try {
1332
- return `j:${JSON.stringify(value)}`;
1333
- }
1334
- catch {
1335
- return `u:${String(value)}`;
1336
- }
1337
- }
1338
- /**
1339
- * Sorts normalized array items so order does not affect dirty checks.
1340
- */
1341
- function sortNormalizedArrayItems(items) {
1342
- return [...items].sort((a, b) => formValueSortKey(a).localeCompare(formValueSortKey(b)));
1343
- }
1344
- /**
1345
- * Normalizes a form/context value for semantic baseline comparison.
1346
- *
1347
- * Rules:
1348
- * - `null`, `undefined`, whitespace-only strings, and empty arrays → `null` (empty)
1349
- * - Numeric strings → numbers (`"5"` and `5` match)
1350
- * - Arrays → elements normalized; empty/all-empty → `null`; otherwise sorted (order ignored)
1351
- * - Plain objects → keys sorted; `null`/empty nested values omitted
1352
- * - `Date` → epoch milliseconds
1353
- */
1354
- function normalizeFormValue(value) {
1355
- if (value === undefined || value === null) {
1356
- return null;
1357
- }
1358
- if (typeof value === 'string') {
1359
- const trimmed = value.trim();
1360
- if (trimmed === '') {
1361
- return null;
1362
- }
1363
- if (/^-?\d+(\.\d+)?$/.test(trimmed)) {
1364
- const num = Number(trimmed);
1365
- if (!Number.isNaN(num)) {
1366
- return num;
1367
- }
1368
- }
1369
- return trimmed;
1370
- }
1371
- if (typeof value === 'number') {
1372
- return Number.isNaN(value) ? null : value;
1373
- }
1374
- if (typeof value === 'boolean') {
1375
- return value;
1376
- }
1377
- if (value instanceof Date) {
1378
- return value.getTime();
1379
- }
1380
- if (isArray(value)) {
1381
- const normalizedItems = value
1382
- .map((item) => normalizeFormValue(item))
1383
- .filter((item) => item !== null);
1384
- if (normalizedItems.length === 0) {
1385
- return null;
1386
- }
1387
- return sortNormalizedArrayItems(normalizedItems);
1388
- }
1389
- if (isPlainObject(value)) {
1390
- const record = value;
1391
- if (isLocaleStringMap(record)) {
1392
- return normalizeLocaleStringMap(record);
1393
- }
1394
- const normalized = {};
1395
- for (const key of Object.keys(record).sort()) {
1396
- const next = normalizeFormValue(record[key]);
1397
- if (next !== null) {
1398
- normalized[key] = next;
1399
- }
1400
- }
1401
- return normalized;
1402
- }
1403
- return value;
1404
- }
1405
- /**
1406
- * Semantic equality for dirty-state and baseline checks.
1407
- * Prefer over lodash `isEqual` when comparing user-edited form/context data to a saved baseline.
1408
- *
1409
- * Arrays: `[]`, `null`, and all-empty lists are equivalent; non-empty arrays compare as multisets (order ignored).
1410
- */
1411
- function isFormValueEqual(a, b) {
1412
- const multiLanguageEqual = compareMultiLanguageFormValues(a, b);
1413
- if (multiLanguageEqual !== null) {
1414
- return multiLanguageEqual;
1415
- }
1416
- const filterEqual = compareFilterFormValues(a, b);
1417
- if (filterEqual !== null) {
1418
- return filterEqual;
1419
- }
1420
- const referenceEqual = compareReferenceFormValues(a, b);
1421
- if (referenceEqual !== null) {
1422
- return referenceEqual;
1423
- }
1424
- if (isArray(a) && isArray(b)) {
1425
- // Empty repeater rows normalize away; raw length must differ before multiset compare.
1426
- if (a.length !== b.length) {
1427
- return false;
1428
- }
1429
- return isEqual(normalizeFormValue(a), normalizeFormValue(b));
1430
- }
1431
- if (isPlainObject(a) && isPlainObject(b)) {
1432
- const left = a;
1433
- const right = b;
1434
- const keys = new Set([...Object.keys(left), ...Object.keys(right)]);
1435
- for (const key of keys) {
1436
- if (!isFormValueEqual(left[key], right[key])) {
1437
- return false;
1438
- }
1439
- }
1440
- return true;
1441
- }
1442
- if (typeof a === 'string' && typeof b === 'string') {
1443
- const htmlEqual = compareHtmlFormValues(a, b);
1444
- if (htmlEqual !== null) {
1445
- return htmlEqual;
1446
- }
1447
- }
1448
- return isEqual(normalizeFormValue(a), normalizeFormValue(b));
1449
- }
1450
- /**
1451
- * Returns whether `current` differs from the saved/clean `baseline` snapshot.
1452
- */
1453
- function isFormContextDirty(current, baseline) {
1454
- return !isFormValueEqual(current, baseline);
1455
- }
1456
- /**
1457
- * Lists paths where live context differs from baseline (for dirty-state trace logs).
1458
- */
1459
- function summarizeFormContextDirtyDiff(current, baseline, maxEntries = 12) {
1460
- const diffs = [];
1461
- const walk = (path, currentValue, baselineValue) => {
1462
- if (diffs.length >= maxEntries) {
1463
- return;
1464
- }
1465
- if (isFormValueEqual(currentValue, baselineValue)) {
1466
- return;
1467
- }
1468
- const bothPlainObjects = isPlainObject(currentValue) &&
1469
- isPlainObject(baselineValue) &&
1470
- !isArray(currentValue) &&
1471
- !isArray(baselineValue);
1472
- if (bothPlainObjects) {
1473
- const left = currentValue;
1474
- const right = baselineValue;
1475
- const keys = new Set([...Object.keys(left), ...Object.keys(right)]);
1476
- for (const key of keys) {
1477
- if (diffs.length >= maxEntries) {
1478
- return;
1479
- }
1480
- const nextPath = path ? `${path}.${key}` : key;
1481
- walk(nextPath, left[key], right[key]);
1482
- }
1483
- return;
1484
- }
1485
- diffs.push({
1486
- path: path || '(root)',
1487
- current: currentValue,
1488
- baseline: baselineValue,
1489
- selectionEqual: isSelectionValueEqual(currentValue, baselineValue),
1490
- });
1491
- };
1492
- walk('', current, baseline);
1493
- return diffs;
1494
- }
1495
- /**
1496
- * Clones a context object for use as a dirty-tracking baseline.
1497
- */
1498
- function captureFormContextBaseline(context) {
1499
- return cloneDeep(context);
1500
- }
1501
- //#endregion
1502
-
1503
- class AXPContextChangeEvent {
1504
- }
1505
- //#endregion
1506
808
  //#region ---- Context signal store ----
1507
809
  const AXPContextStore = signalStore(withState(() => ({
1508
810
  data: {},
@@ -4462,39 +3764,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
4462
3764
  }]
4463
3765
  }], ctorParameters: () => [{ type: AXPAppStartUpService }, { type: i0.Injector }] });
4464
3766
 
4465
- //#region ---- Imports ----
4466
- //#endregion
4467
- //#region ---- Compare & sort ----
4468
- const DEFAULT_COLLATOR_OPTIONS = { sensitivity: 'base' };
4469
- /**
4470
- * Locale-aware comparison of {@link AXPMultiLanguageString} values (plain string, `@scope:key`, or locale map).
4471
- * Resolves each side with {@link resolveMultiLanguageString} for `locale`, then compares with `String#localeCompare`.
4472
- */
4473
- function compareMultiLanguageStrings(a, b, locale, collatorOptions = DEFAULT_COLLATOR_OPTIONS) {
4474
- const sa = resolveMultiLanguageString(a ?? '', locale);
4475
- const sb = resolveMultiLanguageString(b ?? '', locale);
4476
- return sa.localeCompare(sb, locale, collatorOptions);
4477
- }
4478
- /**
4479
- * Stable sort copy: orders items by resolved string for `getValue(item)` using the active `locale`.
4480
- */
4481
- function sortByMultiLanguageString(items, getValue, locale, collatorOptions) {
4482
- return [...items].sort((x, y) => compareMultiLanguageStrings(getValue(x), getValue(y), locale, collatorOptions));
4483
- }
4484
- /**
4485
- * True when the resolved value contains `query` (case-insensitive) for `locale`.
4486
- * Useful for search/filter flows over {@link AXPMultiLanguageString}.
4487
- */
4488
- function searchInMultiLanguageString(value, query, locale) {
4489
- const q = query.trim().toLocaleLowerCase(locale);
4490
- if (!q) {
4491
- return true;
4492
- }
4493
- const text = resolveMultiLanguageString(value ?? '', locale).toLocaleLowerCase(locale);
4494
- return text.includes(q);
4495
- }
4496
- //#endregion
4497
-
4498
3767
  //#region ---- Imports ----
4499
3768
  //#endregion
4500
3769
  //#region ---- Constants ----
@@ -4762,860 +4031,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
4762
4031
  }]
4763
4032
  }] });
4764
4033
 
4765
- /**
4766
- * Additional suggested generic actions for future consideration:
4767
- *
4768
- * Data & Content Actions:
4769
- * - Search = 'search' - Search functionality
4770
- * - Filter = 'filter' - Apply filters
4771
- * - Sort = 'sort' - Sort data
4772
- * - Group = 'group' - Group data
4773
- * - Expand = 'expand' - Expand details
4774
- * - Collapse = 'collapse' - Collapse details
4775
- * - Pin = 'pin' - Pin to favorites
4776
- * - Bookmark = 'bookmark' - Bookmark item
4777
- * - Favorite = 'favorite' - Mark as favorite
4778
- * - Star = 'star' - Star rating
4779
- *
4780
- * Workflow Actions:
4781
- * - Start = 'start' - Start process/workflow
4782
- * - Stop = 'stop' - Stop process
4783
- * - Pause = 'pause' - Pause process
4784
- * - Resume = 'resume' - Resume process
4785
- * - Cancel = 'cancel' - Cancel operation
4786
- * - Complete = 'complete' - Mark as complete
4787
- * - Close = 'close' - Close item
4788
- * - Reopen = 'reopen' - Reopen closed item
4789
- * - Forward = 'forward' - Forward to next step
4790
- * - Back = 'back' - Go back
4791
- *
4792
- * Communication Actions:
4793
- * - Reply = 'reply' - Reply to message
4794
- * - Forward = 'forward' - Forward message
4795
- * - Notify = 'notify' - Send notification
4796
- * - Invite = 'invite' - Invite user
4797
- * - Join = 'join' - Join group/meeting
4798
- * - Leave = 'leave' - Leave group/meeting
4799
- *
4800
- * Security Actions:
4801
- * - Login = 'login' - User login
4802
- * - Logout = 'logout' - User logout
4803
- * - Block = 'block' - Block user/content
4804
- * - Unblock = 'unblock' - Unblock user/content
4805
- * - Ban = 'ban' - Ban user
4806
- * - Unban = 'unban' - Unban user
4807
- * - Verify = 'verify' - Verify identity
4808
- * - Authenticate = 'authenticate' - Authenticate
4809
- *
4810
- * File & Media Actions:
4811
- * - Open = 'open' - Open file
4812
- * - Save = 'save' - Save file
4813
- * - SaveAs = 'save-as' - Save as new file
4814
- * - Attach = 'attach' - Attach file
4815
- * - Detach = 'detach' - Detach file
4816
- * - Compress = 'compress' - Compress files
4817
- * - Extract = 'extract' - Extract archive
4818
- * - Convert = 'convert' - Convert format
4819
- * - Crop = 'crop' - Crop image
4820
- * - Resize = 'resize' - Resize image
4821
- *
4822
- * System Actions:
4823
- * - Sync = 'sync' - Synchronize data
4824
- * - Backup = 'backup' - Create backup
4825
- * - Restore = 'restore' - Restore from backup
4826
- * - Reset = 'reset' - Reset to defaults
4827
- * - Clear = 'clear' - Clear data
4828
- * - Optimize = 'optimize' - Optimize performance
4829
- * - Update = 'update' - Update system
4830
- * - Install = 'install' - Install component
4831
- * - Uninstall = 'uninstall' - Uninstall component
4832
- * - Enable = 'enable' - Enable feature
4833
- * - Disable = 'disable' - Disable feature
4834
- *
4835
- * Analytics & Monitoring:
4836
- * - Monitor = 'monitor' - Monitor activity
4837
- * - Track = 'track' - Track progress
4838
- * - Analyze = 'analyze' - Analyze data
4839
- * - Debug = 'debug' - Debug issue
4840
- * - Log = 'log' - View logs
4841
- * - Alert = 'alert' - Set alert
4842
- * - Dashboard = 'dashboard' - View dashboard
4843
- * - Metrics = 'metrics' - View metrics
4844
- *
4845
- * Collaboration Actions:
4846
- * - Collaborate = 'collaborate' - Start collaboration
4847
- * - Share = 'share' - Share content
4848
- * - Comment = 'comment' - Add comment
4849
- * - Like = 'like' - Like content
4850
- * - Follow = 'follow' - Follow user/content
4851
- * - Subscribe = 'subscribe' - Subscribe to updates
4852
- * - Unsubscribe = 'unsubscribe' - Unsubscribe
4853
- * - Rate = 'rate' - Rate content
4854
- * - Review = 'review' - Review content
4855
- * - Recommend = 'recommend' - Recommend content
4856
- */
4857
- const i18n = (key) => `@general:actions.${key}`;
4858
- const AXPSystemActions = Object.freeze({
4859
- View: {
4860
- key: AXPSystemActionType.View,
4861
- title: i18n('view.title'),
4862
- icon: 'fa-light fa-eye',
4863
- color: 'primary',
4864
- descriptions: {
4865
- title: i18n('view.title'),
4866
- tooltip: i18n('view.description'),
4867
- permission: i18n('view.permission'),
4868
- audit: i18n('view.audit')
4869
- }
4870
- },
4871
- Create: {
4872
- key: AXPSystemActionType.Create,
4873
- title: i18n('create.title'),
4874
- icon: 'fa-light fa-plus',
4875
- color: 'primary',
4876
- descriptions: {
4877
- title: i18n('create.title'),
4878
- tooltip: i18n('create.description'),
4879
- permission: i18n('create.permission'),
4880
- audit: i18n('create.audit')
4881
- }
4882
- },
4883
- Edit: {
4884
- key: AXPSystemActionType.Update,
4885
- title: i18n('edit.title'),
4886
- icon: 'fa-light fa-pen',
4887
- color: 'default',
4888
- descriptions: {
4889
- title: i18n('edit.title'),
4890
- tooltip: i18n('edit.description'),
4891
- permission: i18n('edit.permission'),
4892
- audit: i18n('edit.audit')
4893
- }
4894
- },
4895
- Delete: {
4896
- key: AXPSystemActionType.Delete,
4897
- title: i18n('delete.title'),
4898
- icon: 'fa-light fa-trash',
4899
- color: 'danger',
4900
- critical: true,
4901
- descriptions: {
4902
- title: i18n('delete.title'),
4903
- tooltip: i18n('delete.description'),
4904
- permission: i18n('delete.permission'),
4905
- audit: i18n('delete.audit')
4906
- }
4907
- },
4908
- Approve: {
4909
- key: AXPSystemActionType.Approve,
4910
- title: i18n('approve.title'),
4911
- icon: 'fa-light fa-circle-check',
4912
- color: 'success',
4913
- critical: true,
4914
- descriptions: {
4915
- title: i18n('approve.title'),
4916
- tooltip: i18n('approve.description'),
4917
- permission: i18n('approve.permission'),
4918
- audit: i18n('approve.audit')
4919
- }
4920
- },
4921
- Submit: {
4922
- key: AXPSystemActionType.Submit,
4923
- title: i18n('submit.title'),
4924
- icon: 'fa-light fa-paper-plane',
4925
- color: 'primary',
4926
- descriptions: {
4927
- title: i18n('submit.title'),
4928
- tooltip: i18n('submit.description'),
4929
- permission: i18n('submit.permission'),
4930
- audit: i18n('submit.audit')
4931
- }
4932
- },
4933
- Reject: {
4934
- key: AXPSystemActionType.Reject,
4935
- title: i18n('reject.title'),
4936
- icon: 'fa-light fa-ban',
4937
- color: 'danger',
4938
- critical: true,
4939
- descriptions: {
4940
- title: i18n('reject.title'),
4941
- tooltip: i18n('reject.description'),
4942
- permission: i18n('reject.permission'),
4943
- audit: i18n('reject.audit')
4944
- }
4945
- },
4946
- Export: {
4947
- key: AXPSystemActionType.Export,
4948
- title: i18n('export.title'),
4949
- icon: 'fa-light fa-download',
4950
- color: 'default',
4951
- descriptions: {
4952
- title: i18n('export.title'),
4953
- tooltip: i18n('export.description'),
4954
- permission: i18n('export.permission'),
4955
- audit: i18n('export.audit')
4956
- }
4957
- },
4958
- Import: {
4959
- key: AXPSystemActionType.Import,
4960
- title: i18n('import.title'),
4961
- icon: 'fa-light fa-upload',
4962
- color: 'default',
4963
- descriptions: {
4964
- title: i18n('import.title'),
4965
- tooltip: i18n('import.description'),
4966
- permission: i18n('import.permission'),
4967
- audit: i18n('import.audit')
4968
- }
4969
- },
4970
- Print: {
4971
- key: AXPSystemActionType.Print,
4972
- title: i18n('print.title'),
4973
- icon: 'fa-light fa-print',
4974
- color: 'default',
4975
- descriptions: {
4976
- title: i18n('print.title'),
4977
- tooltip: i18n('print.description'),
4978
- permission: i18n('print.permission'),
4979
- audit: i18n('print.audit')
4980
- }
4981
- },
4982
- Duplicate: {
4983
- key: AXPSystemActionType.Duplicate,
4984
- title: i18n('duplicate.title'),
4985
- icon: 'fa-light fa-clone',
4986
- color: 'warning',
4987
- descriptions: {
4988
- title: i18n('duplicate.title'),
4989
- tooltip: i18n('duplicate.description'),
4990
- permission: i18n('duplicate.permission'),
4991
- audit: i18n('duplicate.audit')
4992
- }
4993
- },
4994
- Archive: {
4995
- key: AXPSystemActionType.Archive,
4996
- title: i18n('archive.title'),
4997
- icon: 'fa-light fa-box-archive',
4998
- color: 'default',
4999
- descriptions: {
5000
- title: i18n('archive.title'),
5001
- tooltip: i18n('archive.description'),
5002
- permission: i18n('archive.permission'),
5003
- audit: i18n('archive.audit')
5004
- }
5005
- },
5006
- Restore: {
5007
- key: AXPSystemActionType.Restore,
5008
- title: i18n('restore.title'),
5009
- icon: 'fa-light fa-arrow-rotate-left',
5010
- color: 'default',
5011
- descriptions: {
5012
- title: i18n('restore.title'),
5013
- tooltip: i18n('restore.description'),
5014
- permission: i18n('restore.permission'),
5015
- audit: i18n('restore.audit')
5016
- }
5017
- },
5018
- Assign: {
5019
- key: AXPSystemActionType.Assign,
5020
- title: i18n('assign.title'),
5021
- icon: 'fa-light fa-user-plus',
5022
- color: 'primary',
5023
- descriptions: {
5024
- title: i18n('assign.title'),
5025
- tooltip: i18n('assign.description'),
5026
- permission: i18n('assign.permission'),
5027
- audit: i18n('assign.audit')
5028
- }
5029
- },
5030
- Lock: {
5031
- key: AXPSystemActionType.Lock,
5032
- title: i18n('lock.title'),
5033
- icon: 'fa-light fa-lock',
5034
- color: 'warning',
5035
- descriptions: {
5036
- title: i18n('lock.title'),
5037
- tooltip: i18n('lock.description'),
5038
- permission: i18n('lock.permission'),
5039
- audit: i18n('lock.audit')
5040
- }
5041
- },
5042
- Unlock: {
5043
- key: AXPSystemActionType.Unlock,
5044
- title: i18n('unlock.title'),
5045
- icon: 'fa-light fa-unlock',
5046
- color: 'success',
5047
- descriptions: {
5048
- title: i18n('unlock.title'),
5049
- tooltip: i18n('unlock.description'),
5050
- permission: i18n('unlock.permission'),
5051
- audit: i18n('unlock.audit')
5052
- }
5053
- },
5054
- Share: {
5055
- key: AXPSystemActionType.Share,
5056
- title: i18n('share.title'),
5057
- icon: 'fa-light fa-share-nodes',
5058
- color: 'info',
5059
- descriptions: {
5060
- title: i18n('share.title'),
5061
- tooltip: i18n('share.description'),
5062
- permission: i18n('share.permission'),
5063
- audit: i18n('share.audit')
5064
- }
5065
- },
5066
- Configure: {
5067
- key: AXPSystemActionType.Configure,
5068
- title: i18n('configure.title'),
5069
- icon: 'fa-light fa-sliders',
5070
- color: 'primary',
5071
- descriptions: {
5072
- title: i18n('configure.title'),
5073
- tooltip: i18n('configure.description'),
5074
- permission: i18n('configure.permission'),
5075
- audit: i18n('configure.audit')
5076
- }
5077
- },
5078
- Reorder: {
5079
- key: AXPSystemActionType.Reorder,
5080
- title: i18n('reorder.title'),
5081
- icon: 'fa-light fa-arrow-down-up-across-line',
5082
- color: 'default',
5083
- descriptions: {
5084
- title: i18n('reorder.title'),
5085
- tooltip: i18n('reorder.description'),
5086
- permission: i18n('reorder.permission'),
5087
- audit: i18n('reorder.audit')
5088
- }
5089
- },
5090
- Preview: {
5091
- key: AXPSystemActionType.Preview,
5092
- title: i18n('preview.title'),
5093
- icon: 'fa-light fa-magnifying-glass',
5094
- color: 'default',
5095
- descriptions: {
5096
- title: i18n('preview.title'),
5097
- tooltip: i18n('preview.description'),
5098
- permission: i18n('preview.permission'),
5099
- audit: i18n('preview.audit')
5100
- }
5101
- },
5102
- Publish: {
5103
- key: AXPSystemActionType.Publish,
5104
- title: i18n('publish.title'),
5105
- icon: 'fa-light fa-globe',
5106
- color: 'success',
5107
- descriptions: {
5108
- title: i18n('publish.title'),
5109
- tooltip: i18n('publish.description'),
5110
- permission: i18n('publish.permission'),
5111
- audit: i18n('publish.audit')
5112
- }
5113
- },
5114
- Unpublish: {
5115
- key: AXPSystemActionType.Unpublish,
5116
- title: i18n('unpublish.title'),
5117
- icon: 'fa-light fa-globe-slash',
5118
- color: 'danger',
5119
- descriptions: {
5120
- title: i18n('unpublish.title'),
5121
- tooltip: i18n('unpublish.description'),
5122
- permission: i18n('unpublish.permission'),
5123
- audit: i18n('unpublish.audit')
5124
- }
5125
- },
5126
- Upload: {
5127
- key: AXPSystemActionType.Upload,
5128
- title: i18n('upload.title'),
5129
- icon: 'fa-light fa-upload',
5130
- color: 'default',
5131
- descriptions: {
5132
- title: i18n('upload.title'),
5133
- tooltip: i18n('upload.description'),
5134
- permission: i18n('upload.permission'),
5135
- audit: i18n('upload.audit')
5136
- }
5137
- },
5138
- Download: {
5139
- key: AXPSystemActionType.Download,
5140
- title: i18n('download.title'),
5141
- icon: 'fa-light fa-download',
5142
- color: 'default',
5143
- descriptions: {
5144
- title: i18n('download.title'),
5145
- tooltip: i18n('download.description'),
5146
- permission: i18n('download.permission'),
5147
- audit: i18n('download.audit')
5148
- }
5149
- },
5150
- Copy: {
5151
- key: AXPSystemActionType.Copy,
5152
- title: i18n('copy.title'),
5153
- icon: 'fa-light fa-copy',
5154
- color: 'default',
5155
- descriptions: {
5156
- title: i18n('copy.title'),
5157
- tooltip: i18n('copy.description'),
5158
- permission: i18n('copy.permission'),
5159
- audit: i18n('copy.audit')
5160
- }
5161
- },
5162
- Move: {
5163
- key: AXPSystemActionType.Move,
5164
- title: i18n('move.title'),
5165
- icon: 'fa-light fa-arrow-right-arrow-left',
5166
- color: 'default',
5167
- descriptions: {
5168
- title: i18n('move.title'),
5169
- tooltip: i18n('move.description'),
5170
- permission: i18n('move.permission'),
5171
- audit: i18n('move.audit')
5172
- }
5173
- },
5174
- Rename: {
5175
- key: AXPSystemActionType.Rename,
5176
- title: i18n('rename.title'),
5177
- icon: 'fa-light fa-pen',
5178
- color: 'default',
5179
- descriptions: {
5180
- title: i18n('rename.title'),
5181
- tooltip: i18n('rename.description'),
5182
- permission: i18n('rename.permission'),
5183
- audit: i18n('rename.audit')
5184
- }
5185
- },
5186
- Manage: {
5187
- key: AXPSystemActionType.Manage,
5188
- title: i18n('manage.title'),
5189
- icon: 'fa-light fa-gear',
5190
- color: 'default',
5191
- descriptions: {
5192
- title: i18n('manage.title'),
5193
- tooltip: i18n('manage.description'),
5194
- permission: i18n('manage.permission'),
5195
- audit: i18n('manage.audit')
5196
- }
5197
- },
5198
- Info: {
5199
- key: AXPSystemActionType.Info,
5200
- title: i18n('info.title'),
5201
- icon: 'fa-light fa-info',
5202
- color: 'default',
5203
- descriptions: {
5204
- title: i18n('info.title'),
5205
- tooltip: i18n('info.description'),
5206
- permission: i18n('info.permission'),
5207
- audit: i18n('info.audit')
5208
- }
5209
- },
5210
- Confirm: {
5211
- key: AXPSystemActionType.Confirm,
5212
- title: i18n('confirm.title'),
5213
- icon: 'fa-light fa-check',
5214
- color: 'success',
5215
- descriptions: {
5216
- title: i18n('confirm.title'),
5217
- tooltip: i18n('confirm.description'),
5218
- permission: i18n('confirm.permission'),
5219
- audit: i18n('confirm.audit')
5220
- }
5221
- },
5222
- Design: {
5223
- key: AXPSystemActionType.Design,
5224
- title: i18n('design.title'),
5225
- icon: 'fa-light fa-paintbrush',
5226
- color: 'default',
5227
- descriptions: {
5228
- title: i18n('design.title'),
5229
- tooltip: i18n('design.description'),
5230
- permission: i18n('design.permission'),
5231
- audit: i18n('design.audit')
5232
- }
5233
- },
5234
- VersionHistory: {
5235
- key: AXPSystemActionType.VersionHistory,
5236
- title: i18n('version-history.title'),
5237
- icon: 'fa-light fa-history',
5238
- color: 'default',
5239
- descriptions: {
5240
- title: i18n('version-history.title'),
5241
- tooltip: i18n('version-history.description'),
5242
- permission: i18n('version-history.permission'),
5243
- audit: i18n('version-history.audit')
5244
- }
5245
- },
5246
- Compare: {
5247
- key: AXPSystemActionType.Compare,
5248
- title: i18n('compare.title'),
5249
- icon: 'fa-light fa-code-compare',
5250
- color: 'default',
5251
- descriptions: {
5252
- title: i18n('compare.title'),
5253
- tooltip: i18n('compare.description'),
5254
- permission: i18n('compare.permission'),
5255
- audit: i18n('compare.audit')
5256
- }
5257
- },
5258
- Comments: {
5259
- key: AXPSystemActionType.Comments,
5260
- title: i18n('comments.title'),
5261
- icon: 'fa-light fa-comments',
5262
- color: 'default',
5263
- descriptions: {
5264
- title: i18n('comments.title'),
5265
- tooltip: i18n('comments.description'),
5266
- permission: i18n('comments.permission'),
5267
- audit: i18n('comments.audit')
5268
- }
5269
- },
5270
- Sign: {
5271
- key: AXPSystemActionType.Sign,
5272
- title: i18n('sign.title'),
5273
- icon: 'fa-light fa-signature',
5274
- color: 'default',
5275
- descriptions: {
5276
- title: i18n('sign.title'),
5277
- tooltip: i18n('sign.description'),
5278
- permission: i18n('sign.permission'),
5279
- audit: i18n('sign.audit')
5280
- }
5281
- },
5282
- Setup: {
5283
- key: AXPSystemActionType.Setup,
5284
- title: i18n('setup.title'),
5285
- icon: 'fa-light fa-cog',
5286
- color: 'default',
5287
- descriptions: {
5288
- title: i18n('setup.title'),
5289
- tooltip: i18n('setup.description'),
5290
- permission: i18n('setup.permission'),
5291
- audit: i18n('setup.audit')
5292
- }
5293
- },
5294
- Send: {
5295
- key: AXPSystemActionType.Send,
5296
- title: i18n('send.title'),
5297
- icon: 'fa-light fa-envelope',
5298
- color: 'default',
5299
- descriptions: {
5300
- title: i18n('send.title'),
5301
- tooltip: i18n('send.description'),
5302
- permission: i18n('send.permission'),
5303
- audit: i18n('send.audit')
5304
- }
5305
- },
5306
- Report: {
5307
- key: AXPSystemActionType.Report,
5308
- title: i18n('report.title'),
5309
- icon: 'fa-light fa-chart-line',
5310
- color: 'default',
5311
- descriptions: {
5312
- title: i18n('report.title'),
5313
- tooltip: i18n('report.description'),
5314
- permission: i18n('report.permission'),
5315
- audit: i18n('report.audit')
5316
- }
5317
- },
5318
- Sent: {
5319
- key: AXPSystemActionType.Sent,
5320
- title: i18n('sent.title'),
5321
- icon: 'fa-light fa-paper-plane',
5322
- color: 'default',
5323
- descriptions: {
5324
- title: i18n('sent.title'),
5325
- tooltip: i18n('sent.description'),
5326
- permission: i18n('sent.permission'),
5327
- audit: i18n('sent.audit')
5328
- }
5329
- },
5330
- Review: {
5331
- key: AXPSystemActionType.Review,
5332
- title: i18n('review.title'),
5333
- icon: 'fa-light fa-eye',
5334
- color: 'default',
5335
- descriptions: {
5336
- title: i18n('review.title'),
5337
- tooltip: i18n('review.description'),
5338
- permission: i18n('review.permission'),
5339
- audit: i18n('review.audit')
5340
- }
5341
- },
5342
- Generate: {
5343
- key: AXPSystemActionType.Generate,
5344
- title: i18n('generate.title'),
5345
- icon: 'fa-light fa-wand-magic-sparkles',
5346
- color: 'primary',
5347
- descriptions: {
5348
- title: i18n('generate.title'),
5349
- tooltip: i18n('generate.description'),
5350
- permission: i18n('generate.permission'),
5351
- audit: i18n('generate.audit')
5352
- }
5353
- },
5354
- Refresh: {
5355
- key: AXPSystemActionType.Refresh,
5356
- title: i18n('refresh.title'),
5357
- icon: 'fa-light fa-arrows-rotate',
5358
- color: 'default',
5359
- descriptions: {
5360
- title: i18n('refresh.title'),
5361
- tooltip: i18n('refresh.description'),
5362
- permission: i18n('refresh.permission'),
5363
- audit: i18n('refresh.audit')
5364
- }
5365
- },
5366
- Reload: {
5367
- key: AXPSystemActionType.Reload,
5368
- title: i18n('reload.title'),
5369
- icon: 'fa-light fa-arrows-rotate',
5370
- color: 'default',
5371
- descriptions: {
5372
- title: i18n('reload.title'),
5373
- tooltip: i18n('reload.description'),
5374
- permission: i18n('reload.permission'),
5375
- audit: i18n('reload.audit')
5376
- }
5377
- },
5378
- Search: {
5379
- key: AXPSystemActionType.Search,
5380
- title: i18n('search.title'),
5381
- icon: 'fa-light fa-magnifying-glass',
5382
- color: 'default',
5383
- descriptions: {
5384
- title: i18n('search.title'),
5385
- tooltip: i18n('search.description'),
5386
- permission: i18n('search.permission'),
5387
- audit: i18n('search.audit')
5388
- }
5389
- },
5390
- Filter: {
5391
- key: AXPSystemActionType.Filter,
5392
- title: i18n('filter.title'),
5393
- icon: 'fa-light fa-filter',
5394
- color: 'default',
5395
- descriptions: {
5396
- title: i18n('filter.title'),
5397
- tooltip: i18n('filter.description'),
5398
- permission: i18n('filter.permission'),
5399
- audit: i18n('filter.audit')
5400
- }
5401
- },
5402
- Sort: {
5403
- key: AXPSystemActionType.Sort,
5404
- title: i18n('sort.title'),
5405
- icon: 'fa-light fa-arrow-down-up-across-line',
5406
- color: 'default',
5407
- descriptions: {
5408
- title: i18n('sort.title'),
5409
- tooltip: i18n('sort.description'),
5410
- permission: i18n('sort.permission'),
5411
- audit: i18n('sort.audit')
5412
- }
5413
- },
5414
- Start: {
5415
- key: AXPSystemActionType.Start,
5416
- title: i18n('start.title'),
5417
- icon: 'fa-light fa-play',
5418
- color: 'success',
5419
- descriptions: {
5420
- title: i18n('start.title'),
5421
- tooltip: i18n('start.description'),
5422
- permission: i18n('start.permission'),
5423
- audit: i18n('start.audit')
5424
- }
5425
- },
5426
- Stop: {
5427
- key: AXPSystemActionType.Stop,
5428
- title: i18n('stop.title'),
5429
- icon: 'fa-light fa-stop',
5430
- color: 'danger',
5431
- critical: true,
5432
- descriptions: {
5433
- title: i18n('stop.title'),
5434
- tooltip: i18n('stop.description'),
5435
- permission: i18n('stop.permission'),
5436
- audit: i18n('stop.audit')
5437
- }
5438
- },
5439
- Pause: {
5440
- key: AXPSystemActionType.Pause,
5441
- title: i18n('pause.title'),
5442
- icon: 'fa-light fa-pause',
5443
- color: 'warning',
5444
- descriptions: {
5445
- title: i18n('pause.title'),
5446
- tooltip: i18n('pause.description'),
5447
- permission: i18n('pause.permission'),
5448
- audit: i18n('pause.audit')
5449
- }
5450
- },
5451
- Cancel: {
5452
- key: AXPSystemActionType.Cancel,
5453
- title: i18n('cancel.title'),
5454
- icon: 'fa-light fa-xmark',
5455
- critical: true,
5456
- descriptions: {
5457
- title: i18n('cancel.title'),
5458
- tooltip: i18n('cancel.description'),
5459
- permission: i18n('cancel.permission'),
5460
- audit: i18n('cancel.audit')
5461
- }
5462
- },
5463
- Close: {
5464
- key: AXPSystemActionType.Close,
5465
- title: i18n('close.title'),
5466
- icon: 'fa-light fa-xmark',
5467
- color: 'default',
5468
- descriptions: {
5469
- title: i18n('close.title'),
5470
- tooltip: i18n('close.description'),
5471
- permission: i18n('close.permission'),
5472
- audit: i18n('close.audit')
5473
- }
5474
- },
5475
- Complete: {
5476
- key: AXPSystemActionType.Complete,
5477
- title: i18n('complete.title'),
5478
- icon: 'fa-light fa-check',
5479
- color: 'success',
5480
- descriptions: {
5481
- title: i18n('complete.title'),
5482
- tooltip: i18n('complete.description'),
5483
- permission: i18n('complete.permission'),
5484
- audit: i18n('complete.audit')
5485
- }
5486
- },
5487
- Save: {
5488
- key: AXPSystemActionType.Save,
5489
- title: i18n('save.title'),
5490
- icon: 'fa-light fa-floppy-disk',
5491
- color: 'primary',
5492
- descriptions: {
5493
- title: i18n('save.title'),
5494
- tooltip: i18n('save.description'),
5495
- permission: i18n('save.permission'),
5496
- audit: i18n('save.audit')
5497
- }
5498
- },
5499
- SaveAs: {
5500
- key: AXPSystemActionType.SaveAs,
5501
- title: i18n('save-as.title'),
5502
- icon: 'fa-light fa-floppy-disk',
5503
- color: 'default',
5504
- descriptions: {
5505
- title: i18n('save-as.title'),
5506
- tooltip: i18n('save-as.description'),
5507
- permission: i18n('save-as.permission'),
5508
- audit: i18n('save-as.audit')
5509
- }
5510
- },
5511
- Sync: {
5512
- key: AXPSystemActionType.Sync,
5513
- title: i18n('sync.title'),
5514
- icon: 'fa-light fa-arrows-rotate',
5515
- color: 'default',
5516
- descriptions: {
5517
- title: i18n('sync.title'),
5518
- tooltip: i18n('sync.description'),
5519
- permission: i18n('sync.permission'),
5520
- audit: i18n('sync.audit')
5521
- }
5522
- },
5523
- Reset: {
5524
- key: AXPSystemActionType.Reset,
5525
- title: i18n('reset.title'),
5526
- icon: 'fa-light fa-arrow-rotate-left',
5527
- color: 'warning',
5528
- critical: true,
5529
- descriptions: {
5530
- title: i18n('reset.title'),
5531
- tooltip: i18n('reset.description'),
5532
- permission: i18n('reset.permission'),
5533
- audit: i18n('reset.audit')
5534
- }
5535
- },
5536
- Clear: {
5537
- key: AXPSystemActionType.Clear,
5538
- title: i18n('clear.title'),
5539
- icon: 'fa-light fa-eraser',
5540
- color: 'default',
5541
- descriptions: {
5542
- title: i18n('clear.title'),
5543
- tooltip: i18n('clear.description'),
5544
- permission: i18n('clear.permission'),
5545
- audit: i18n('clear.audit')
5546
- }
5547
- },
5548
- Distribution: {
5549
- key: AXPSystemActionType.Distribution,
5550
- title: i18n('distribution.title'),
5551
- icon: 'fa-light fa-share-nodes',
5552
- color: 'default',
5553
- descriptions: {
5554
- title: i18n('distribution.title'),
5555
- tooltip: i18n('distribution.description'),
5556
- permission: i18n('distribution.permission'),
5557
- audit: i18n('distribution.audit')
5558
- }
5559
- },
5560
- });
5561
- function getSystemActions(type) {
5562
- return Object.values(AXPSystemActions).find(action => action.key === type);
5563
- }
5564
- /**
5565
- * Resolves the visual appearance (color and icon) for entity actions
5566
- * using the system actions from the core module.
5567
- */
5568
- function resolveActionLook(actionType) {
5569
- // Try to get system action first
5570
- const systemActionType = actionType;
5571
- if (systemActionType) {
5572
- const systemAction = getSystemActions(systemActionType);
5573
- if (systemAction) {
5574
- return {
5575
- color: (systemAction.color || 'default'),
5576
- icon: systemAction.icon || ''
5577
- };
5578
- }
5579
- }
5580
- // Fallback for unknown actions
5581
- return {
5582
- color: 'default',
5583
- icon: ''
5584
- };
5585
- }
5586
- /**
5587
- * Resolves the title, description, icon and color for button actions
5588
- * using the system actions from the core module.
5589
- * @param actionType
5590
- * @returns
5591
- */
5592
- function getActionButton(actionType) {
5593
- const systemActionType = actionType;
5594
- if (systemActionType) {
5595
- const systemAction = getSystemActions(systemActionType);
5596
- if (systemAction) {
5597
- return {
5598
- name: actionType,
5599
- icon: systemAction.icon || '',
5600
- color: systemAction.color || 'default',
5601
- title: systemAction.title,
5602
- description: systemAction.descriptions.title
5603
- };
5604
- }
5605
- }
5606
- // Fallback for unknown actions
5607
- return {
5608
- name: actionType,
5609
- title: actionType,
5610
- description: `Perform ${actionType} action`,
5611
- icon: '',
5612
- color: 'default'
5613
- };
5614
- }
5615
-
5616
- //#region ---- Core-only data types (CDK-coupled) ----
5617
- //#endregion
5618
-
5619
4034
  function applySystemActionDefault(action, type) {
5620
4035
  const systemAction = getSystemActions(type);
5621
4036
  return {
@@ -5627,6 +4042,9 @@ function applySystemActionDefault(action, type) {
5627
4042
  };
5628
4043
  }
5629
4044
 
4045
+ //#region ---- Core-only data types (CDK-coupled) ----
4046
+ //#endregion
4047
+
5630
4048
  class AXPImageUrlLogoConfig {
5631
4049
  constructor(url, width, height) {
5632
4050
  this.url = url;
@@ -6310,129 +4728,9 @@ function provideLazyProvider(token, loader, multi = true) {
6310
4728
  };
6311
4729
  }
6312
4730
 
6313
- //#region ---- Unwrapping ----
6314
- /**
6315
- * If `raw` is a plain non-array object with a `value` property, returns `value`; otherwise returns `raw`.
6316
- */
6317
- function unwrapValueProperty(raw) {
6318
- if (raw && typeof raw === 'object' && !Array.isArray(raw) && !(raw instanceof Date) && 'value' in raw) {
6319
- return raw.value;
6320
- }
6321
- return raw;
6322
- }
6323
- //#endregion
6324
- //#region ---- Scalar coercion ----
6325
- /**
6326
- * Coerces to a trimmed string. Plain objects may carry `{ value }` from setting widgets or `{ id }` from select payloads using `valueField: 'id'`.
6327
- */
6328
- function coerceUnknownToTrimmedString(raw) {
6329
- if (typeof raw === 'string') {
6330
- return raw.trim();
6331
- }
6332
- if (raw && typeof raw === 'object' && !Array.isArray(raw) && !(raw instanceof Date)) {
6333
- const r = raw;
6334
- if ('value' in r && r['value'] != null) {
6335
- return String(r['value']).trim();
6336
- }
6337
- if ('id' in r && r['id'] != null) {
6338
- return String(r['id']).trim();
6339
- }
6340
- }
6341
- return '';
6342
- }
6343
- /**
6344
- * Coerces to boolean: direct booleans pass through; wrapped `{ value: true | 'true' }` is respected; otherwise false.
6345
- */
6346
- function coerceUnknownToBoolean(raw) {
6347
- if (typeof raw === 'boolean') {
6348
- return raw;
6349
- }
6350
- if (raw && typeof raw === 'object' && 'value' in raw) {
6351
- const v = raw.value;
6352
- return v === true || v === 'true';
6353
- }
6354
- return false;
6355
- }
6356
- /** Parses a finite number after optional `{ value }` unwrap; non-finite or empty string yields NaN. */
6357
- function coerceUnknownToFiniteNumber(raw) {
6358
- const v = unwrapValueProperty(raw);
6359
- if (v === null || v === undefined) {
6360
- return NaN;
6361
- }
6362
- if (typeof v === 'number') {
6363
- return Number.isFinite(v) ? v : NaN;
6364
- }
6365
- if (typeof v === 'boolean') {
6366
- return v ? 1 : 0;
6367
- }
6368
- if (typeof v === 'string') {
6369
- const t = v.trim();
6370
- if (t === '') {
6371
- return NaN;
6372
- }
6373
- const n = Number(t);
6374
- return Number.isFinite(n) ? n : NaN;
6375
- }
6376
- return NaN;
6377
- }
6378
- /** Parses a Date after optional `{ value }` unwrap; invalid input yields Invalid Date. */
6379
- function coerceUnknownToDate(raw) {
6380
- const v = unwrapValueProperty(raw);
6381
- if (v === null || v === undefined) {
6382
- return new Date(NaN);
6383
- }
6384
- if (v instanceof Date) {
6385
- return new Date(v.getTime());
6386
- }
6387
- if (typeof v === 'number' && Number.isFinite(v)) {
6388
- return new Date(v);
6389
- }
6390
- if (typeof v === 'string') {
6391
- const t = v.trim();
6392
- if (t === '') {
6393
- return new Date(NaN);
6394
- }
6395
- return new Date(t);
6396
- }
6397
- return new Date(NaN);
6398
- }
6399
- //#endregion
6400
-
6401
- function extractTextFromHtml(value) {
6402
- const div = document.createElement('div');
6403
- div.innerHTML = value;
6404
- return div.textContent || div.innerText || '';
6405
- }
6406
- /**
6407
- * True when the string likely contains HTML markup (e.g. `<p>`, `<ul>`), as opposed to plain text.
6408
- * Used to choose innerHTML vs text interpolation for multilingual fields.
6409
- */
6410
- function containsHtmlMarkup(value) {
6411
- if (value == null) {
6412
- return false;
6413
- }
6414
- const t = value.trim();
6415
- if (!t) {
6416
- return false;
6417
- }
6418
- return /<\/?[a-z][\s\S]*?>/i.test(t);
6419
- }
6420
- /**
6421
- * Generate kebab-case group name from title
6422
- */
6423
- function generateKebabCase(title) {
6424
- return title
6425
- .toLowerCase()
6426
- .trim()
6427
- .replace(/[^a-z0-9\s-]/g, '') // Remove special characters
6428
- .replace(/\s+/g, '-') // Replace spaces with hyphens
6429
- .replace(/-+/g, '-') // Replace multiple hyphens with single
6430
- .replace(/^-+|-+$/g, ''); // Remove leading/trailing hyphens
6431
- }
6432
-
6433
4731
  /**
6434
4732
  * Generated bundle index. Do not edit.
6435
4733
  */
6436
4734
 
6437
- export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPCatalogScopeDefinitionProviderService, AXPCatalogScopeDefinitionsDataSourceDefinition, AXPColorPaletteProvider, AXPColorPaletteService, AXPColumnWidthService, AXPComponentLogoConfig, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPContentCheckerDirective, AXPContextChangeEvent, AXPContextDefinitionProviderService, AXPContextEvalFactory, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDblClickDirective, AXPDebugService, AXPDefaultColorPalettesProvider, AXPDeviceService, AXPDeviceType, AXPDistributedEventListenerService, AXPElementDataDirective, AXPExpressionEvaluatorScopeProviderContext, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPFeatureDefinitionProviderContext, AXPGridLayoutDirective, AXPHookService, AXPIconLogoConfig, AXPIdleSchedulerService, AXPImageUrlLogoConfig, AXPKeyboardShortcutPriority, AXPKeyboardShortcutRegistry, AXPModuleManifestModule, AXPModuleManifestRegistry, AXPModuleManifestsDataSourceDefinition, AXPScreenSize, AXPSystemActions, AXPTagProvider, AXPTagService, AXP_ACTIVITY_LOG_PROVIDER, AXP_CATALOG_SCOPE_DEFINITION_PROVIDER, AXP_COLOR_PALETTE_PROVIDER, AXP_COLUMN_WIDTH_PROVIDER, AXP_CONTEXT_DEFINITION_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, AX_OVERLAY_CONTAINER_SELECTOR, AX_OVERLAY_PANE_SELECTOR, DEFAULT_CANCEL_DIALOG_ACTION_SHORTCUTS, DEFAULT_SUBMIT_DIALOG_ACTION_SHORTCUTS, FORM_DIRTY_TRACE_NS, OVERLAY_DETAILS_VIEW_TRACE_NS, OVERLAY_LAYOUT_TRACE_NS, OVERLAY_ROOT_LAYOUT_TRACE_NS, OVERLAY_WIDGET_SETTLE_TRACE_NS, applyContextEvalPipes, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, buildLocaleTextMapValue, captureFormContextBaseline, chordToKbdItemKeys, cleanDeep, coerceUnknownToBoolean, coerceUnknownToDate, coerceUnknownToFiniteNumber, coerceUnknownToTrimmedString, compareMultiLanguageStrings, containsHtmlMarkup, contextEvalWithPipes, createProviderWithInjectionContext, defaultColumnWidthProvider, extractNestedFieldsWildcard, extractTextFromHtml, extractValue, findOverlayContainerAncestor, formatKeyboardShortcutChord, formatKeyboardShortcutChords, generateKebabCase, getActionButton, getChangedPaths, getDetailedChanges, getEnumValues, getNestedVisibleOverlayPanes, getPrimaryKeyboardShortcutChord, getSmart, getSystemActions, getTopVisibleOverlayContainer, getVisibleAnchoredOverlayPanes, getVisibleOverlayContainers, hasForegroundOverlayLayer, isDialogShortcutAllowedInEditableField, isFormContextDirty, isFormValueEqual, isHorizontalDirectionalShortcutKey, isKeyboardTargetInsideEditableField, isLocaleStringMap, isMacPlatform, isSelectionValueEqual, isVisibleOverlayElement, matchesDialogActionShortcut, matchesKeyboardShortcutChord, mirrorHorizontalDirectionalKey, normalizeContextEvalPipes, normalizeDialogActionShortcutChord, normalizeExpressionTemplate, normalizeKeyboardShortcut, normalizeKeyboardShortcuts, objectKeyValueTransforms, parseDialogActionShortcut, parseKeyboardShortcutChord, provideLazyProvider, registerPopupFooterKeyboardShortcuts, resolveActionLook, resolveConfiguredFooterActionShortcuts, resolveDialogActionShortcuts, resolveDisplayShortcutChord, resolveEffectiveDirectionBehavior, resolveSemanticDirectionalKey, searchInMultiLanguageString, setSmart, setupPopupFooterKeyboardShortcuts, shouldDeferEscapeToOpenOverlay, shouldRestoreSavedMultiLanguageShape, shouldTriggerDialogActionShortcut, shouldUseLocaleMapShape, sortByMultiLanguageString, summarizeFormContextDirtyDiff, unwrapValueProperty };
4735
+ export { AXHighlightService, AXPActivityLogProvider, AXPActivityLogService, AXPAppStartUpProvider, AXPAppStartUpService, AXPBroadcastEventService, AXPCatalogScopeDefinitionProviderService, AXPCatalogScopeDefinitionsDataSourceDefinition, AXPColorPaletteProvider, AXPColorPaletteService, AXPColumnWidthService, AXPComponentLogoConfig, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPContentCheckerDirective, AXPContextDefinitionProviderService, AXPContextEvalFactory, AXPContextStore, AXPCountdownPipe, AXPDataGenerator, AXPDataSourceDefinitionProviderService, AXPDblClickDirective, AXPDebugService, AXPDefaultColorPalettesProvider, AXPDeviceService, AXPDeviceType, AXPDistributedEventListenerService, AXPElementDataDirective, AXPExpressionEvaluatorScopeProviderContext, AXPExpressionEvaluatorScopeProviderService, AXPExpressionEvaluatorService, AXPFeatureDefinitionProviderContext, AXPGridLayoutDirective, AXPHookService, AXPIconLogoConfig, AXPIdleSchedulerService, AXPImageUrlLogoConfig, AXPKeyboardShortcutPriority, AXPKeyboardShortcutRegistry, AXPModuleManifestModule, AXPModuleManifestRegistry, AXPModuleManifestsDataSourceDefinition, AXPScreenSize, AXPTagProvider, AXPTagService, AXP_ACTIVITY_LOG_PROVIDER, AXP_CATALOG_SCOPE_DEFINITION_PROVIDER, AXP_COLOR_PALETTE_PROVIDER, AXP_COLUMN_WIDTH_PROVIDER, AXP_CONTEXT_DEFINITION_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, AX_OVERLAY_CONTAINER_SELECTOR, AX_OVERLAY_PANE_SELECTOR, DEFAULT_CANCEL_DIALOG_ACTION_SHORTCUTS, DEFAULT_SUBMIT_DIALOG_ACTION_SHORTCUTS, FORM_DIRTY_TRACE_NS, OVERLAY_DETAILS_VIEW_TRACE_NS, OVERLAY_LAYOUT_TRACE_NS, OVERLAY_ROOT_LAYOUT_TRACE_NS, OVERLAY_WIDGET_SETTLE_TRACE_NS, applyContextEvalPipes, applyFilterArray, applyPagination, applyQueryArray, applySortArray, applySystemActionDefault, chordToKbdItemKeys, contextEvalWithPipes, createProviderWithInjectionContext, defaultColumnWidthProvider, findOverlayContainerAncestor, formatKeyboardShortcutChord, formatKeyboardShortcutChords, getNestedVisibleOverlayPanes, getPrimaryKeyboardShortcutChord, getTopVisibleOverlayContainer, getVisibleAnchoredOverlayPanes, getVisibleOverlayContainers, hasForegroundOverlayLayer, isDialogShortcutAllowedInEditableField, isHorizontalDirectionalShortcutKey, isKeyboardTargetInsideEditableField, isMacPlatform, isVisibleOverlayElement, matchesDialogActionShortcut, matchesKeyboardShortcutChord, mirrorHorizontalDirectionalKey, normalizeContextEvalPipes, normalizeDialogActionShortcutChord, normalizeExpressionTemplate, normalizeKeyboardShortcut, normalizeKeyboardShortcuts, objectKeyValueTransforms, parseDialogActionShortcut, parseKeyboardShortcutChord, provideLazyProvider, registerPopupFooterKeyboardShortcuts, resolveConfiguredFooterActionShortcuts, resolveDialogActionShortcuts, resolveDisplayShortcutChord, resolveEffectiveDirectionBehavior, resolveSemanticDirectionalKey, setupPopupFooterKeyboardShortcuts, shouldDeferEscapeToOpenOverlay, shouldTriggerDialogActionShortcut };
6438
4736
  //# sourceMappingURL=acorex-platform-core.mjs.map