@praxisui/core 8.0.0-beta.19 → 8.0.0-beta.20
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/README.md +57 -0
- package/fesm2022/praxisui-core.mjs +1142 -57
- package/index.d.ts +998 -54
- package/package.json +7 -2
|
@@ -53,6 +53,179 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
53
53
|
` }]
|
|
54
54
|
}] });
|
|
55
55
|
|
|
56
|
+
function isEntityLookupResultSelectable(result) {
|
|
57
|
+
return result?.extra?.selectable !== false;
|
|
58
|
+
}
|
|
59
|
+
function isEntityLookupPayloadMode(value) {
|
|
60
|
+
return (value === 'id' ||
|
|
61
|
+
value === 'entityRef' ||
|
|
62
|
+
value === 'ids' ||
|
|
63
|
+
value === 'entityRefs');
|
|
64
|
+
}
|
|
65
|
+
function isEntityLookupSinglePayloadMode(value) {
|
|
66
|
+
return value === 'id' || value === 'entityRef';
|
|
67
|
+
}
|
|
68
|
+
function isEntityLookupMultiplePayloadMode(value) {
|
|
69
|
+
return value === 'ids' || value === 'entityRefs';
|
|
70
|
+
}
|
|
71
|
+
function isLookupFilterFieldType(value) {
|
|
72
|
+
return (value === 'text' ||
|
|
73
|
+
value === 'enum' ||
|
|
74
|
+
value === 'date' ||
|
|
75
|
+
value === 'number' ||
|
|
76
|
+
value === 'reference');
|
|
77
|
+
}
|
|
78
|
+
function isLookupFilterOperator(value) {
|
|
79
|
+
return (value === 'contains' ||
|
|
80
|
+
value === 'startsWith' ||
|
|
81
|
+
value === 'equals' ||
|
|
82
|
+
value === 'in' ||
|
|
83
|
+
value === 'before' ||
|
|
84
|
+
value === 'after' ||
|
|
85
|
+
value === 'between' ||
|
|
86
|
+
value === 'gt' ||
|
|
87
|
+
value === 'gte' ||
|
|
88
|
+
value === 'lt' ||
|
|
89
|
+
value === 'lte');
|
|
90
|
+
}
|
|
91
|
+
function isLookupDialogSize(value) {
|
|
92
|
+
return (value === 'sm' ||
|
|
93
|
+
value === 'md' ||
|
|
94
|
+
value === 'lg' ||
|
|
95
|
+
value === 'xl' ||
|
|
96
|
+
value === 'full');
|
|
97
|
+
}
|
|
98
|
+
function normalizeLookupFilterRequest(filter) {
|
|
99
|
+
return {
|
|
100
|
+
field: String(filter.field ?? '').trim(),
|
|
101
|
+
operator: filter.operator,
|
|
102
|
+
value: filter.value,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function serializeOptionSourceFilterRequest(filter, options) {
|
|
106
|
+
const filters = (options?.filters ?? [])
|
|
107
|
+
.map(normalizeLookupFilterRequest)
|
|
108
|
+
.filter((item) => !!item.field && isLookupFilterOperator(item.operator));
|
|
109
|
+
const search = normalizeOptionSourceText(options?.search);
|
|
110
|
+
const sort = normalizeOptionSourceText(options?.sort);
|
|
111
|
+
const includeIds = (options?.includeIds ?? []).filter((value) => value !== null && value !== undefined);
|
|
112
|
+
const request = {};
|
|
113
|
+
if (filter !== undefined) {
|
|
114
|
+
request.filter = filter ?? null;
|
|
115
|
+
}
|
|
116
|
+
if (filters.length) {
|
|
117
|
+
request.filters = filters;
|
|
118
|
+
}
|
|
119
|
+
if (search) {
|
|
120
|
+
request.search = search;
|
|
121
|
+
}
|
|
122
|
+
if (sort) {
|
|
123
|
+
request.sort = sort;
|
|
124
|
+
}
|
|
125
|
+
if (includeIds.length) {
|
|
126
|
+
request.includeIds = includeIds;
|
|
127
|
+
}
|
|
128
|
+
return request;
|
|
129
|
+
}
|
|
130
|
+
function normalizeOptionSourceText(value) {
|
|
131
|
+
const normalized = String(value ?? '').trim();
|
|
132
|
+
return normalized ? normalized : undefined;
|
|
133
|
+
}
|
|
134
|
+
function resolveEntityLookupPayloadMode(payloadMode, multiple) {
|
|
135
|
+
if (multiple) {
|
|
136
|
+
if (payloadMode === 'entityRef') {
|
|
137
|
+
return 'entityRefs';
|
|
138
|
+
}
|
|
139
|
+
if (payloadMode === 'id') {
|
|
140
|
+
return 'ids';
|
|
141
|
+
}
|
|
142
|
+
if (payloadMode === 'ids' || payloadMode === 'entityRefs') {
|
|
143
|
+
return payloadMode;
|
|
144
|
+
}
|
|
145
|
+
return 'ids';
|
|
146
|
+
}
|
|
147
|
+
if (payloadMode === 'ids') {
|
|
148
|
+
return 'id';
|
|
149
|
+
}
|
|
150
|
+
if (payloadMode === 'entityRefs') {
|
|
151
|
+
return 'entityRef';
|
|
152
|
+
}
|
|
153
|
+
if (payloadMode === 'id' || payloadMode === 'entityRef') {
|
|
154
|
+
return payloadMode;
|
|
155
|
+
}
|
|
156
|
+
return 'id';
|
|
157
|
+
}
|
|
158
|
+
function isEntityLookupPayloadModeCompatible(payloadMode, multiple) {
|
|
159
|
+
return multiple
|
|
160
|
+
? isEntityLookupMultiplePayloadMode(payloadMode)
|
|
161
|
+
: isEntityLookupSinglePayloadMode(payloadMode);
|
|
162
|
+
}
|
|
163
|
+
function serializeEntityLookupValueForPayload(value, options = {}) {
|
|
164
|
+
const payloadMode = resolveEntityLookupPayloadMode(options.payloadMode, options.multiple);
|
|
165
|
+
switch (payloadMode) {
|
|
166
|
+
case 'id':
|
|
167
|
+
return extractEntityLookupId(value);
|
|
168
|
+
case 'entityRef':
|
|
169
|
+
return buildEntityLookupEntityRef(value, options.entityType);
|
|
170
|
+
case 'ids':
|
|
171
|
+
return collectEntityLookupIds(value);
|
|
172
|
+
case 'entityRefs':
|
|
173
|
+
return collectEntityLookupEntityRefs(value, options.entityType);
|
|
174
|
+
default:
|
|
175
|
+
return value;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function classifyEntityLookupResult(result, context) {
|
|
179
|
+
if (isEntityLookupResultSelectable(result)) {
|
|
180
|
+
return 'selectable';
|
|
181
|
+
}
|
|
182
|
+
return context?.allowRetainInvalidExistingValue ? 'legacy' : 'blocked';
|
|
183
|
+
}
|
|
184
|
+
function asEntityLookupArray(value) {
|
|
185
|
+
return Array.isArray(value) ? value : [];
|
|
186
|
+
}
|
|
187
|
+
function extractEntityLookupId(value) {
|
|
188
|
+
if (value === null || value === undefined || value === '') {
|
|
189
|
+
return value;
|
|
190
|
+
}
|
|
191
|
+
if (typeof value !== 'object' || Array.isArray(value)) {
|
|
192
|
+
return value;
|
|
193
|
+
}
|
|
194
|
+
return Object.prototype.hasOwnProperty.call(value, 'id')
|
|
195
|
+
? value.id
|
|
196
|
+
: value;
|
|
197
|
+
}
|
|
198
|
+
function collectEntityLookupIds(value) {
|
|
199
|
+
return asEntityLookupArray(value)
|
|
200
|
+
.map((item) => extractEntityLookupId(item))
|
|
201
|
+
.filter((item) => item !== null && item !== undefined && item !== '');
|
|
202
|
+
}
|
|
203
|
+
function buildEntityLookupEntityRef(value, entityType) {
|
|
204
|
+
const id = extractEntityLookupId(value);
|
|
205
|
+
if (id === null || id === undefined || id === '') {
|
|
206
|
+
return id;
|
|
207
|
+
}
|
|
208
|
+
const explicitType = typeof value === 'object' &&
|
|
209
|
+
value !== null &&
|
|
210
|
+
!Array.isArray(value) &&
|
|
211
|
+
typeof value['type'] === 'string' &&
|
|
212
|
+
String(value['type']).trim()
|
|
213
|
+
? String(value['type']).trim()
|
|
214
|
+
: undefined;
|
|
215
|
+
const normalizedFallbackType = String(entityType ?? '').trim() || undefined;
|
|
216
|
+
const entityRef = { id: id };
|
|
217
|
+
const resolvedType = explicitType || normalizedFallbackType;
|
|
218
|
+
if (resolvedType) {
|
|
219
|
+
entityRef.type = resolvedType;
|
|
220
|
+
}
|
|
221
|
+
return entityRef;
|
|
222
|
+
}
|
|
223
|
+
function collectEntityLookupEntityRefs(value, entityType) {
|
|
224
|
+
return asEntityLookupArray(value)
|
|
225
|
+
.map((item) => buildEntityLookupEntityRef(item, entityType))
|
|
226
|
+
.filter((item) => item !== null && item !== undefined && item !== '');
|
|
227
|
+
}
|
|
228
|
+
|
|
56
229
|
var ApiEndpoint;
|
|
57
230
|
(function (ApiEndpoint) {
|
|
58
231
|
ApiEndpoint["Default"] = "default";
|
|
@@ -638,6 +811,45 @@ const VALUE_PRESENTATION_STYLES = new Set([
|
|
|
638
811
|
'full',
|
|
639
812
|
'compact',
|
|
640
813
|
]);
|
|
814
|
+
const OPTION_SOURCE_TYPES = new Set([
|
|
815
|
+
'RESOURCE_ENTITY',
|
|
816
|
+
'DISTINCT_DIMENSION',
|
|
817
|
+
'CATEGORICAL_BUCKET',
|
|
818
|
+
'LIGHT_LOOKUP',
|
|
819
|
+
'STATIC_CANONICAL',
|
|
820
|
+
]);
|
|
821
|
+
const OPTION_SOURCE_SEARCH_MODES = new Set([
|
|
822
|
+
'none',
|
|
823
|
+
'starts-with',
|
|
824
|
+
'contains',
|
|
825
|
+
'exact',
|
|
826
|
+
]);
|
|
827
|
+
const LOOKUP_OPEN_DETAIL_MODES = new Set([
|
|
828
|
+
'samePage',
|
|
829
|
+
'newTab',
|
|
830
|
+
'drawer',
|
|
831
|
+
'modal',
|
|
832
|
+
]);
|
|
833
|
+
const LOOKUP_FILTER_FIELD_TYPES = new Set([
|
|
834
|
+
'text',
|
|
835
|
+
'enum',
|
|
836
|
+
'date',
|
|
837
|
+
'number',
|
|
838
|
+
'reference',
|
|
839
|
+
]);
|
|
840
|
+
const LOOKUP_FILTER_OPERATORS = new Set([
|
|
841
|
+
'contains',
|
|
842
|
+
'startsWith',
|
|
843
|
+
'equals',
|
|
844
|
+
'in',
|
|
845
|
+
'before',
|
|
846
|
+
'after',
|
|
847
|
+
'between',
|
|
848
|
+
'gt',
|
|
849
|
+
'gte',
|
|
850
|
+
'lt',
|
|
851
|
+
'lte',
|
|
852
|
+
]);
|
|
641
853
|
/**
|
|
642
854
|
* SchemaNormalizerService
|
|
643
855
|
* -----------------------
|
|
@@ -906,10 +1118,276 @@ class SchemaNormalizerService {
|
|
|
906
1118
|
detail.routeTemplate = String(value.routeTemplate);
|
|
907
1119
|
}
|
|
908
1120
|
if (value.openDetailMode !== undefined) {
|
|
909
|
-
|
|
1121
|
+
const openDetailMode = this.parseLookupOpenDetailMode(value.openDetailMode);
|
|
1122
|
+
if (openDetailMode) {
|
|
1123
|
+
detail.openDetailMode = openDetailMode;
|
|
1124
|
+
}
|
|
910
1125
|
}
|
|
911
1126
|
return Object.keys(detail).length ? detail : undefined;
|
|
912
1127
|
}
|
|
1128
|
+
parseLookupCreate(value) {
|
|
1129
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
1130
|
+
return undefined;
|
|
1131
|
+
}
|
|
1132
|
+
const create = {};
|
|
1133
|
+
if (value.hrefTemplate !== undefined) {
|
|
1134
|
+
create.hrefTemplate = String(value.hrefTemplate);
|
|
1135
|
+
}
|
|
1136
|
+
if (value.routeTemplate !== undefined) {
|
|
1137
|
+
create.routeTemplate = String(value.routeTemplate);
|
|
1138
|
+
}
|
|
1139
|
+
if (value.openMode !== undefined) {
|
|
1140
|
+
const openMode = this.parseLookupOpenDetailMode(value.openMode);
|
|
1141
|
+
if (openMode) {
|
|
1142
|
+
create.openMode = openMode;
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
return Object.keys(create).length ? create : undefined;
|
|
1146
|
+
}
|
|
1147
|
+
parseLookupFilterOperatorArray(value) {
|
|
1148
|
+
if (!Array.isArray(value)) {
|
|
1149
|
+
return [];
|
|
1150
|
+
}
|
|
1151
|
+
const normalized = value.map((item) => String(item ?? '').trim());
|
|
1152
|
+
if (normalized.some((item) => !item || !LOOKUP_FILTER_OPERATORS.has(item))) {
|
|
1153
|
+
return [];
|
|
1154
|
+
}
|
|
1155
|
+
return normalized
|
|
1156
|
+
.filter((item, index) => normalized.indexOf(item) === index)
|
|
1157
|
+
.map((item) => item);
|
|
1158
|
+
}
|
|
1159
|
+
parseLookupSortDirection(value) {
|
|
1160
|
+
const normalized = String(value ?? '').trim().toLowerCase();
|
|
1161
|
+
if (normalized === 'asc' || normalized === 'desc') {
|
|
1162
|
+
return normalized;
|
|
1163
|
+
}
|
|
1164
|
+
return undefined;
|
|
1165
|
+
}
|
|
1166
|
+
parseLookupDialogSize(value) {
|
|
1167
|
+
const normalized = String(value ?? '').trim();
|
|
1168
|
+
if (normalized === 'sm' ||
|
|
1169
|
+
normalized === 'md' ||
|
|
1170
|
+
normalized === 'lg' ||
|
|
1171
|
+
normalized === 'xl' ||
|
|
1172
|
+
normalized === 'full') {
|
|
1173
|
+
return normalized;
|
|
1174
|
+
}
|
|
1175
|
+
return undefined;
|
|
1176
|
+
}
|
|
1177
|
+
parseLookupDialog(value) {
|
|
1178
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
1179
|
+
return undefined;
|
|
1180
|
+
}
|
|
1181
|
+
const dialog = {};
|
|
1182
|
+
if (value.enabled !== undefined) {
|
|
1183
|
+
dialog.enabled = this.parseBoolean(value.enabled);
|
|
1184
|
+
}
|
|
1185
|
+
if (value.title !== undefined) {
|
|
1186
|
+
const title = String(value.title).trim();
|
|
1187
|
+
if (title) {
|
|
1188
|
+
dialog.title = title;
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
if (value.size !== undefined) {
|
|
1192
|
+
const size = this.parseLookupDialogSize(value.size);
|
|
1193
|
+
if (size) {
|
|
1194
|
+
dialog.size = size;
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
if (value.previewPanel !== undefined) {
|
|
1198
|
+
dialog.previewPanel = this.parseBoolean(value.previewPanel);
|
|
1199
|
+
}
|
|
1200
|
+
if (value.allowColumnChooser !== undefined) {
|
|
1201
|
+
dialog.allowColumnChooser = this.parseBoolean(value.allowColumnChooser);
|
|
1202
|
+
}
|
|
1203
|
+
if (value.allowSavedViews !== undefined) {
|
|
1204
|
+
dialog.allowSavedViews = this.parseBoolean(value.allowSavedViews);
|
|
1205
|
+
}
|
|
1206
|
+
if (Array.isArray(value.resultColumns)) {
|
|
1207
|
+
const resultColumns = value.resultColumns
|
|
1208
|
+
.map((item) => this.parseLookupResultColumn(item))
|
|
1209
|
+
.filter((item) => !!item);
|
|
1210
|
+
if (resultColumns.length) {
|
|
1211
|
+
dialog.resultColumns = resultColumns;
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1214
|
+
if (value.openActionLabel !== undefined) {
|
|
1215
|
+
const openActionLabel = String(value.openActionLabel).trim();
|
|
1216
|
+
if (openActionLabel) {
|
|
1217
|
+
dialog.openActionLabel = openActionLabel;
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
if (value.applyActionLabel !== undefined) {
|
|
1221
|
+
const applyActionLabel = String(value.applyActionLabel).trim();
|
|
1222
|
+
if (applyActionLabel) {
|
|
1223
|
+
dialog.applyActionLabel = applyActionLabel;
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1226
|
+
if (value.cancelActionLabel !== undefined) {
|
|
1227
|
+
const cancelActionLabel = String(value.cancelActionLabel).trim();
|
|
1228
|
+
if (cancelActionLabel) {
|
|
1229
|
+
dialog.cancelActionLabel = cancelActionLabel;
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
return Object.keys(dialog).length ? dialog : undefined;
|
|
1233
|
+
}
|
|
1234
|
+
parseLookupResultColumn(value) {
|
|
1235
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
1236
|
+
return undefined;
|
|
1237
|
+
}
|
|
1238
|
+
const field = String(value.field ?? '').trim();
|
|
1239
|
+
if (!field) {
|
|
1240
|
+
return undefined;
|
|
1241
|
+
}
|
|
1242
|
+
const column = { field };
|
|
1243
|
+
if (value.label !== undefined) {
|
|
1244
|
+
const label = String(value.label).trim();
|
|
1245
|
+
if (label) {
|
|
1246
|
+
column.label = label;
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1249
|
+
if (value.kind !== undefined) {
|
|
1250
|
+
const kind = String(value.kind).trim();
|
|
1251
|
+
if (kind === 'code' ||
|
|
1252
|
+
kind === 'label' ||
|
|
1253
|
+
kind === 'description' ||
|
|
1254
|
+
kind === 'status' ||
|
|
1255
|
+
kind === 'disabledReason' ||
|
|
1256
|
+
kind === 'custom') {
|
|
1257
|
+
column.kind = kind;
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
if (value.width !== undefined) {
|
|
1261
|
+
const width = String(value.width).trim();
|
|
1262
|
+
if (width) {
|
|
1263
|
+
column.width = width;
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1266
|
+
return column;
|
|
1267
|
+
}
|
|
1268
|
+
parseLookupFilterDefinition(value) {
|
|
1269
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
1270
|
+
return undefined;
|
|
1271
|
+
}
|
|
1272
|
+
const field = String(value.field ?? '').trim();
|
|
1273
|
+
const type = String(value.type ?? '').trim();
|
|
1274
|
+
if (!field || !LOOKUP_FILTER_FIELD_TYPES.has(type)) {
|
|
1275
|
+
return undefined;
|
|
1276
|
+
}
|
|
1277
|
+
const operators = this.parseLookupFilterOperatorArray(value.operators);
|
|
1278
|
+
if (!operators.length) {
|
|
1279
|
+
return undefined;
|
|
1280
|
+
}
|
|
1281
|
+
const definition = {
|
|
1282
|
+
field,
|
|
1283
|
+
type,
|
|
1284
|
+
operators,
|
|
1285
|
+
};
|
|
1286
|
+
if (value.label !== undefined) {
|
|
1287
|
+
definition.label = String(value.label);
|
|
1288
|
+
}
|
|
1289
|
+
const defaultOperator = String(value.defaultOperator ?? '').trim();
|
|
1290
|
+
if (defaultOperator && operators.includes(defaultOperator)) {
|
|
1291
|
+
definition.defaultOperator = defaultOperator;
|
|
1292
|
+
}
|
|
1293
|
+
if (value.optionsSource !== undefined) {
|
|
1294
|
+
const optionsSource = String(value.optionsSource).trim();
|
|
1295
|
+
if (optionsSource) {
|
|
1296
|
+
definition.optionsSource = optionsSource;
|
|
1297
|
+
}
|
|
1298
|
+
}
|
|
1299
|
+
if (value.required !== undefined) {
|
|
1300
|
+
definition.required = this.parseBoolean(value.required);
|
|
1301
|
+
}
|
|
1302
|
+
if (value.hidden !== undefined) {
|
|
1303
|
+
definition.hidden = this.parseBoolean(value.hidden);
|
|
1304
|
+
}
|
|
1305
|
+
return definition;
|
|
1306
|
+
}
|
|
1307
|
+
parseDefaultFilters(value) {
|
|
1308
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
1309
|
+
return undefined;
|
|
1310
|
+
}
|
|
1311
|
+
const normalized = Object.entries(value).reduce((acc, [key, item]) => {
|
|
1312
|
+
const normalizedKey = String(key).trim();
|
|
1313
|
+
if (!normalizedKey) {
|
|
1314
|
+
return acc;
|
|
1315
|
+
}
|
|
1316
|
+
const values = Array.isArray(item)
|
|
1317
|
+
? item.filter((entry) => entry !== undefined)
|
|
1318
|
+
: item === undefined
|
|
1319
|
+
? []
|
|
1320
|
+
: [item];
|
|
1321
|
+
if (values.length) {
|
|
1322
|
+
acc[normalizedKey] = values;
|
|
1323
|
+
}
|
|
1324
|
+
return acc;
|
|
1325
|
+
}, {});
|
|
1326
|
+
return Object.keys(normalized).length ? normalized : undefined;
|
|
1327
|
+
}
|
|
1328
|
+
parseLookupFiltering(value) {
|
|
1329
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
1330
|
+
return undefined;
|
|
1331
|
+
}
|
|
1332
|
+
const filtering = {};
|
|
1333
|
+
if (value.availableFilters !== undefined) {
|
|
1334
|
+
const availableFilters = Array.isArray(value.availableFilters)
|
|
1335
|
+
? value.availableFilters
|
|
1336
|
+
.map((item) => this.parseLookupFilterDefinition(item))
|
|
1337
|
+
.filter((item) => !!item)
|
|
1338
|
+
: [];
|
|
1339
|
+
if (availableFilters.length) {
|
|
1340
|
+
filtering.availableFilters = availableFilters;
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
const defaultFilters = this.parseDefaultFilters(value.defaultFilters);
|
|
1344
|
+
if (defaultFilters) {
|
|
1345
|
+
filtering.defaultFilters = defaultFilters;
|
|
1346
|
+
}
|
|
1347
|
+
if (value.sortOptions !== undefined && Array.isArray(value.sortOptions)) {
|
|
1348
|
+
const sortOptions = value.sortOptions
|
|
1349
|
+
.map((item) => {
|
|
1350
|
+
if (!item || typeof item !== 'object' || Array.isArray(item)) {
|
|
1351
|
+
return undefined;
|
|
1352
|
+
}
|
|
1353
|
+
const key = String(item.key ?? '').trim();
|
|
1354
|
+
const field = String(item.field ?? '').trim();
|
|
1355
|
+
const direction = this.parseLookupSortDirection(item.direction);
|
|
1356
|
+
if (!key || !field || !direction) {
|
|
1357
|
+
return undefined;
|
|
1358
|
+
}
|
|
1359
|
+
return {
|
|
1360
|
+
key,
|
|
1361
|
+
field,
|
|
1362
|
+
direction,
|
|
1363
|
+
...(item.label !== undefined ? { label: String(item.label) } : {}),
|
|
1364
|
+
};
|
|
1365
|
+
})
|
|
1366
|
+
.filter((item) => !!item);
|
|
1367
|
+
if (sortOptions.length) {
|
|
1368
|
+
filtering.sortOptions = sortOptions;
|
|
1369
|
+
}
|
|
1370
|
+
}
|
|
1371
|
+
if (value.defaultSort !== undefined) {
|
|
1372
|
+
const defaultSort = String(value.defaultSort).trim();
|
|
1373
|
+
if (defaultSort) {
|
|
1374
|
+
filtering.defaultSort = defaultSort;
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
if (value.quickFilterFields !== undefined) {
|
|
1378
|
+
const quickFilterFields = this.parseNonBlankStringArray(value.quickFilterFields);
|
|
1379
|
+
if (quickFilterFields.length) {
|
|
1380
|
+
filtering.quickFilterFields = quickFilterFields;
|
|
1381
|
+
}
|
|
1382
|
+
}
|
|
1383
|
+
if (value.searchPlaceholder !== undefined) {
|
|
1384
|
+
const searchPlaceholder = String(value.searchPlaceholder).trim();
|
|
1385
|
+
if (searchPlaceholder) {
|
|
1386
|
+
filtering.searchPlaceholder = searchPlaceholder;
|
|
1387
|
+
}
|
|
1388
|
+
}
|
|
1389
|
+
return Object.keys(filtering).length ? filtering : undefined;
|
|
1390
|
+
}
|
|
913
1391
|
/** Parse option arrays into `{ key, value }` objects. */
|
|
914
1392
|
parseOptions(value) {
|
|
915
1393
|
if (!Array.isArray(value)) {
|
|
@@ -934,8 +1412,12 @@ class SchemaNormalizerService {
|
|
|
934
1412
|
if (!optionSource.key) {
|
|
935
1413
|
return undefined;
|
|
936
1414
|
}
|
|
937
|
-
if (value.type !== undefined)
|
|
938
|
-
|
|
1415
|
+
if (value.type !== undefined) {
|
|
1416
|
+
const optionSourceType = this.parseOptionSourceType(value.type);
|
|
1417
|
+
if (optionSourceType) {
|
|
1418
|
+
optionSource.type = optionSourceType;
|
|
1419
|
+
}
|
|
1420
|
+
}
|
|
939
1421
|
if (value.resourcePath !== undefined) {
|
|
940
1422
|
optionSource.resourcePath = String(value.resourcePath);
|
|
941
1423
|
}
|
|
@@ -994,11 +1476,22 @@ class SchemaNormalizerService {
|
|
|
994
1476
|
if (detail) {
|
|
995
1477
|
optionSource.detail = detail;
|
|
996
1478
|
}
|
|
1479
|
+
const create = this.parseLookupCreate(value.create);
|
|
1480
|
+
if (create) {
|
|
1481
|
+
optionSource.create = create;
|
|
1482
|
+
}
|
|
1483
|
+
const filtering = this.parseLookupFiltering(value.filtering);
|
|
1484
|
+
if (filtering) {
|
|
1485
|
+
optionSource.filtering = filtering;
|
|
1486
|
+
}
|
|
997
1487
|
if (value.excludeSelfField !== undefined) {
|
|
998
1488
|
optionSource.excludeSelfField = this.parseBoolean(value.excludeSelfField);
|
|
999
1489
|
}
|
|
1000
1490
|
if (value.searchMode !== undefined) {
|
|
1001
|
-
|
|
1491
|
+
const searchMode = this.parseOptionSourceSearchMode(value.searchMode);
|
|
1492
|
+
if (searchMode) {
|
|
1493
|
+
optionSource.searchMode = searchMode;
|
|
1494
|
+
}
|
|
1002
1495
|
}
|
|
1003
1496
|
if (value.pageSize !== undefined && !Number.isNaN(Number(value.pageSize))) {
|
|
1004
1497
|
optionSource.pageSize = Number(value.pageSize);
|
|
@@ -1008,6 +1501,18 @@ class SchemaNormalizerService {
|
|
|
1008
1501
|
}
|
|
1009
1502
|
return optionSource;
|
|
1010
1503
|
}
|
|
1504
|
+
parseOptionSourceType(value) {
|
|
1505
|
+
const normalized = String(value ?? '').trim().toUpperCase();
|
|
1506
|
+
return OPTION_SOURCE_TYPES.has(normalized) ? normalized : undefined;
|
|
1507
|
+
}
|
|
1508
|
+
parseOptionSourceSearchMode(value) {
|
|
1509
|
+
const normalized = String(value ?? '').trim();
|
|
1510
|
+
return OPTION_SOURCE_SEARCH_MODES.has(normalized) ? normalized : undefined;
|
|
1511
|
+
}
|
|
1512
|
+
parseLookupOpenDetailMode(value) {
|
|
1513
|
+
const normalized = String(value ?? '').trim();
|
|
1514
|
+
return LOOKUP_OPEN_DETAIL_MODES.has(normalized) ? normalized : undefined;
|
|
1515
|
+
}
|
|
1011
1516
|
parseValuePresentation(value) {
|
|
1012
1517
|
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
1013
1518
|
return undefined;
|
|
@@ -1537,6 +2042,54 @@ class SchemaNormalizerService {
|
|
|
1537
2042
|
if (ui.filter !== undefined) {
|
|
1538
2043
|
field.filter = ui.filter;
|
|
1539
2044
|
}
|
|
2045
|
+
if (ui.dialog !== undefined) {
|
|
2046
|
+
const dialog = this.parseLookupDialog(ui.dialog);
|
|
2047
|
+
if (dialog) {
|
|
2048
|
+
field.dialog = dialog;
|
|
2049
|
+
}
|
|
2050
|
+
}
|
|
2051
|
+
if (ui.detailActionLabel !== undefined) {
|
|
2052
|
+
const detailActionLabel = String(ui.detailActionLabel).trim();
|
|
2053
|
+
if (detailActionLabel) {
|
|
2054
|
+
field.detailActionLabel = detailActionLabel;
|
|
2055
|
+
}
|
|
2056
|
+
}
|
|
2057
|
+
if (ui.copyCodeActionLabel !== undefined) {
|
|
2058
|
+
const copyCodeActionLabel = String(ui.copyCodeActionLabel).trim();
|
|
2059
|
+
if (copyCodeActionLabel) {
|
|
2060
|
+
field.copyCodeActionLabel = copyCodeActionLabel;
|
|
2061
|
+
}
|
|
2062
|
+
}
|
|
2063
|
+
if (ui.copyIdActionLabel !== undefined) {
|
|
2064
|
+
const copyIdActionLabel = String(ui.copyIdActionLabel).trim();
|
|
2065
|
+
if (copyIdActionLabel) {
|
|
2066
|
+
field.copyIdActionLabel = copyIdActionLabel;
|
|
2067
|
+
}
|
|
2068
|
+
}
|
|
2069
|
+
if (ui.createActionLabel !== undefined) {
|
|
2070
|
+
const createActionLabel = String(ui.createActionLabel).trim();
|
|
2071
|
+
if (createActionLabel) {
|
|
2072
|
+
field.createActionLabel = createActionLabel;
|
|
2073
|
+
}
|
|
2074
|
+
}
|
|
2075
|
+
if (ui.actions && typeof ui.actions === 'object' && !Array.isArray(ui.actions)) {
|
|
2076
|
+
const actions = {};
|
|
2077
|
+
if (ui.actions.showDetail !== undefined) {
|
|
2078
|
+
actions.showDetail = this.parseBoolean(ui.actions.showDetail);
|
|
2079
|
+
}
|
|
2080
|
+
if (ui.actions.showCopyCode !== undefined) {
|
|
2081
|
+
actions.showCopyCode = this.parseBoolean(ui.actions.showCopyCode);
|
|
2082
|
+
}
|
|
2083
|
+
if (ui.actions.showCopyId !== undefined) {
|
|
2084
|
+
actions.showCopyId = this.parseBoolean(ui.actions.showCopyId);
|
|
2085
|
+
}
|
|
2086
|
+
if (ui.actions.showCreate !== undefined) {
|
|
2087
|
+
actions.showCreate = this.parseBoolean(ui.actions.showCreate);
|
|
2088
|
+
}
|
|
2089
|
+
if (Object.keys(actions).length) {
|
|
2090
|
+
field.actions = actions;
|
|
2091
|
+
}
|
|
2092
|
+
}
|
|
1540
2093
|
if (ui.filterOptions !== undefined) {
|
|
1541
2094
|
field.filterOptions = Array.isArray(ui.filterOptions)
|
|
1542
2095
|
? [...ui.filterOptions]
|
|
@@ -2406,6 +2959,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
2406
2959
|
}], ctorParameters: () => [] });
|
|
2407
2960
|
|
|
2408
2961
|
const SCHEMA_CACHE_GLOBAL_CONFIG_READY_TIMEOUT_MS = 1200;
|
|
2962
|
+
function isCrudConfigureOptions(value) {
|
|
2963
|
+
return typeof value === 'object' && value !== null;
|
|
2964
|
+
}
|
|
2409
2965
|
/**
|
|
2410
2966
|
* Serviço genérico para operações CRUD em APIs REST padronizadas.
|
|
2411
2967
|
*
|
|
@@ -2503,7 +3059,7 @@ class GenericCrudService {
|
|
|
2503
3059
|
if (!resourcePath || !resourcePath.trim()) {
|
|
2504
3060
|
throw new Error(this.errorMessages.emptyResourcePath);
|
|
2505
3061
|
}
|
|
2506
|
-
const configureOptions =
|
|
3062
|
+
const configureOptions = isCrudConfigureOptions(endpointKeyOrOptions)
|
|
2507
3063
|
? endpointKeyOrOptions
|
|
2508
3064
|
: { endpointKey: endpointKeyOrOptions };
|
|
2509
3065
|
const nextEndpointKey = configureOptions.endpointKey ?? this.currentEndpointKey;
|
|
@@ -2583,10 +3139,10 @@ class GenericCrudService {
|
|
|
2583
3139
|
* Fluxo de schemas (grid e filtro)
|
|
2584
3140
|
*
|
|
2585
3141
|
* - Grid/Lista (colunas e metadados do DTO principal):
|
|
2586
|
-
* 1) getSchema()
|
|
2587
|
-
* 2)
|
|
2588
|
-
* - path: {basePath}/
|
|
2589
|
-
* - operation:
|
|
3142
|
+
* 1) getSchema() deriva a superfície canônica de busca/listagem do recurso
|
|
3143
|
+
* 2) Em seguida chama /schemas/filtered com query params:
|
|
3144
|
+
* - path: {basePath}/filter (ex.: /api/human-resources/funcionarios/filter)
|
|
3145
|
+
* - operation: post
|
|
2590
3146
|
* - schemaType: response
|
|
2591
3147
|
* 3) O serviço normaliza o schema retornado (x-ui) para montagem de grids e formulários.
|
|
2592
3148
|
*
|
|
@@ -2604,8 +3160,8 @@ class GenericCrudService {
|
|
|
2604
3160
|
* Obtém o schema (metadados) do recurso, útil para construção dinâmica de grids e formulários.
|
|
2605
3161
|
*
|
|
2606
3162
|
* Fluxo:
|
|
2607
|
-
* -
|
|
2608
|
-
*
|
|
3163
|
+
* - Chama /schemas/filtered para a superfície canônica de busca/listagem:
|
|
3164
|
+
* path={basePath}/filter, operation=post, schemaType=response.
|
|
2609
3165
|
* - O resultado é normalizado e usado para montar colunas de grid e formulários (x-ui).
|
|
2610
3166
|
*
|
|
2611
3167
|
* Exemplo:
|
|
@@ -2621,10 +3177,12 @@ class GenericCrudService {
|
|
|
2621
3177
|
// Armazena a URL para referência posterior
|
|
2622
3178
|
this._schemaUrl = url;
|
|
2623
3179
|
console.debug('[CRUD:Service] getSchema:url', { url });
|
|
2624
|
-
// Derivar path para o /schemas/filtered do grid (response schema)
|
|
3180
|
+
// Derivar path para o /schemas/filtered do grid (response schema).
|
|
3181
|
+
// Plataformas corporativas devem usar a superfície de busca/listagem governada,
|
|
3182
|
+
// não endpoints irrestritos de coleção como /all.
|
|
2625
3183
|
const schemaPathBase = this.schemaUrl().replace(/\/schemas$/, '');
|
|
2626
|
-
const path = `${schemaPathBase}/
|
|
2627
|
-
const operation = '
|
|
3184
|
+
const path = `${schemaPathBase}/filter`;
|
|
3185
|
+
const operation = 'post';
|
|
2628
3186
|
const schemaType = 'response';
|
|
2629
3187
|
// Tenant e locale
|
|
2630
3188
|
const tenant = this.globalConfig.getTenant();
|
|
@@ -3380,27 +3938,26 @@ class GenericCrudService {
|
|
|
3380
3938
|
let params = new HttpParams()
|
|
3381
3939
|
.set('page', pageable.pageNumber)
|
|
3382
3940
|
.set('size', pageable.pageSize);
|
|
3383
|
-
pageable.sort?.forEach((s) => (params = params.append('sort', s)));
|
|
3384
|
-
opts?.includeIds?.forEach((id) => {
|
|
3385
|
-
params = params.append('includeIds', String(id));
|
|
3386
|
-
});
|
|
3387
|
-
if (opts?.search) {
|
|
3388
|
-
params = params.set('search', opts.search);
|
|
3389
|
-
}
|
|
3390
3941
|
this.ensureConfigured();
|
|
3391
3942
|
const entry = this.resolveEndpointEntry(opts?.endpointKey);
|
|
3392
3943
|
const base = `${this.getResourceBaseUrl(opts)}/option-sources/${encodeURIComponent(sourceKey)}/options`;
|
|
3393
3944
|
const url = `${base}/filter`;
|
|
3394
3945
|
const normalizedCriteria = this.normalizeRangeCriteria(criteria);
|
|
3946
|
+
const requestBody = serializeOptionSourceFilterRequest(normalizedCriteria, {
|
|
3947
|
+
filters: opts?.filters,
|
|
3948
|
+
search: opts?.search,
|
|
3949
|
+
sort: opts?.sortKey,
|
|
3950
|
+
includeIds: opts?.includeIds,
|
|
3951
|
+
});
|
|
3395
3952
|
const observeVersion = !!opts?.observeVersionHeader;
|
|
3396
3953
|
const req$ = observeVersion
|
|
3397
|
-
? this.http.post(url,
|
|
3954
|
+
? this.http.post(url, requestBody, {
|
|
3398
3955
|
params,
|
|
3399
3956
|
observe: 'response',
|
|
3400
3957
|
headers: composeHeadersWithVersion(entry),
|
|
3401
3958
|
context: opts?.httpContext,
|
|
3402
3959
|
})
|
|
3403
|
-
: this.http.post(url,
|
|
3960
|
+
: this.http.post(url, requestBody, {
|
|
3404
3961
|
params,
|
|
3405
3962
|
headers: composeHeadersWithVersion(entry),
|
|
3406
3963
|
context: opts?.httpContext,
|
|
@@ -4938,8 +5495,11 @@ class PraxisI18nService {
|
|
|
4938
5495
|
return fallback || 'pt-BR';
|
|
4939
5496
|
}
|
|
4940
5497
|
t(key, params, fallback, namespace) {
|
|
5498
|
+
return this.tForLocale(this.getLocale(), key, params, fallback, namespace);
|
|
5499
|
+
}
|
|
5500
|
+
tForLocale(locale, key, params, fallback, namespace) {
|
|
4941
5501
|
const message = this.translateExternally(key, params, fallback)
|
|
4942
|
-
?? this.lookup(key,
|
|
5502
|
+
?? this.lookup(key, locale, namespace)
|
|
4943
5503
|
?? this.lookup(key, this.getFallbackLocale(), namespace)
|
|
4944
5504
|
?? fallback
|
|
4945
5505
|
?? key;
|
|
@@ -5219,12 +5779,17 @@ class ComponentMetadataRegistry {
|
|
|
5219
5779
|
};
|
|
5220
5780
|
});
|
|
5221
5781
|
const normPorts = meta.ports?.map((port) => this.clonePortContract(port));
|
|
5782
|
+
const normInsertionPresets = meta.insertionPresets?.map((preset) => ({
|
|
5783
|
+
...preset,
|
|
5784
|
+
...(preset.inputs ? { inputs: JSON.parse(JSON.stringify(preset.inputs)) } : {}),
|
|
5785
|
+
}));
|
|
5222
5786
|
return {
|
|
5223
5787
|
...meta,
|
|
5224
5788
|
id: normalizedId,
|
|
5225
5789
|
inputs: normInputs,
|
|
5226
5790
|
outputs: normOutputs,
|
|
5227
5791
|
ports: normPorts,
|
|
5792
|
+
insertionPresets: normInsertionPresets,
|
|
5228
5793
|
};
|
|
5229
5794
|
}
|
|
5230
5795
|
normalizeEditorialDescriptor(meta) {
|
|
@@ -5654,6 +6219,17 @@ const GLOBAL_ACTION_UI_SCHEMAS = [
|
|
|
5654
6219
|
},
|
|
5655
6220
|
],
|
|
5656
6221
|
},
|
|
6222
|
+
{
|
|
6223
|
+
id: 'navigation.openRoute',
|
|
6224
|
+
label: 'Abrir rota interna',
|
|
6225
|
+
fields: [
|
|
6226
|
+
{ key: 'path', label: 'Caminho', type: 'text', required: true, placeholder: '/clientes/detalhe' },
|
|
6227
|
+
{ key: 'query', label: 'Query (JSON)', type: 'json', rows: 3 },
|
|
6228
|
+
{ key: 'fragment', label: 'Fragmento', type: 'text', placeholder: 'aba' },
|
|
6229
|
+
{ key: 'replaceUrl', label: 'Substituir URL atual', type: 'toggle' },
|
|
6230
|
+
{ key: 'state', label: 'State (JSON)', type: 'json', rows: 3 },
|
|
6231
|
+
],
|
|
6232
|
+
},
|
|
5657
6233
|
{
|
|
5658
6234
|
id: 'dialog.alert',
|
|
5659
6235
|
label: 'Alerta simples',
|
|
@@ -6045,6 +6621,7 @@ class GlobalActionService {
|
|
|
6045
6621
|
}
|
|
6046
6622
|
return { success: false, error: 'Window not available' };
|
|
6047
6623
|
});
|
|
6624
|
+
this.register('navigation.openRoute', async (payload) => this.handleNavigationOpenRoute(payload));
|
|
6048
6625
|
this.register('dialog.alert', async (payload) => {
|
|
6049
6626
|
if (!this.dialog)
|
|
6050
6627
|
return { success: false, error: 'Dialog service not available' };
|
|
@@ -6154,6 +6731,36 @@ class GlobalActionService {
|
|
|
6154
6731
|
return { success: false, error: err?.message || String(err) };
|
|
6155
6732
|
}
|
|
6156
6733
|
}
|
|
6734
|
+
async handleNavigationOpenRoute(payload) {
|
|
6735
|
+
const url = this.buildNavigationUrl(payload);
|
|
6736
|
+
if (!url)
|
|
6737
|
+
return { success: false, error: 'Missing path' };
|
|
6738
|
+
try {
|
|
6739
|
+
if (this.router) {
|
|
6740
|
+
await this.router.navigateByUrl(url, {
|
|
6741
|
+
replaceUrl: !!payload?.replaceUrl,
|
|
6742
|
+
state: payload?.state,
|
|
6743
|
+
});
|
|
6744
|
+
return { success: true };
|
|
6745
|
+
}
|
|
6746
|
+
if (typeof window !== 'undefined' && window.location) {
|
|
6747
|
+
if (payload?.replaceUrl && typeof window.location.replace === 'function') {
|
|
6748
|
+
window.location.replace(url);
|
|
6749
|
+
}
|
|
6750
|
+
else if (typeof window.location.assign === 'function') {
|
|
6751
|
+
window.location.assign(url);
|
|
6752
|
+
}
|
|
6753
|
+
else {
|
|
6754
|
+
window.location.href = url;
|
|
6755
|
+
}
|
|
6756
|
+
return { success: true };
|
|
6757
|
+
}
|
|
6758
|
+
return { success: false, error: 'Router not available' };
|
|
6759
|
+
}
|
|
6760
|
+
catch (err) {
|
|
6761
|
+
return { success: false, error: err?.message || String(err) };
|
|
6762
|
+
}
|
|
6763
|
+
}
|
|
6157
6764
|
async handleRouteRegister(payload) {
|
|
6158
6765
|
if (!this.router)
|
|
6159
6766
|
return { success: false, error: 'Router not available' };
|
|
@@ -6226,6 +6833,36 @@ class GlobalActionService {
|
|
|
6226
6833
|
catch { }
|
|
6227
6834
|
return { success: true };
|
|
6228
6835
|
}
|
|
6836
|
+
buildNavigationUrl(payload) {
|
|
6837
|
+
const rawPath = String(payload?.path || '').trim();
|
|
6838
|
+
if (!rawPath)
|
|
6839
|
+
return '';
|
|
6840
|
+
const path = rawPath.split('?')[0].split('#')[0].trim();
|
|
6841
|
+
if (!path)
|
|
6842
|
+
return '';
|
|
6843
|
+
const normalizedPath = path.startsWith('/') ? path : `/${path}`;
|
|
6844
|
+
const query = this.buildQueryString(payload?.query);
|
|
6845
|
+
const fragment = this.buildFragment(payload?.fragment);
|
|
6846
|
+
return `${normalizedPath}${query}${fragment}`;
|
|
6847
|
+
}
|
|
6848
|
+
buildQueryString(query) {
|
|
6849
|
+
if (!query)
|
|
6850
|
+
return '';
|
|
6851
|
+
const params = new URLSearchParams();
|
|
6852
|
+
for (const [key, value] of Object.entries(query)) {
|
|
6853
|
+
if (value === undefined || value === null)
|
|
6854
|
+
continue;
|
|
6855
|
+
params.set(key, String(value));
|
|
6856
|
+
}
|
|
6857
|
+
const serialized = params.toString();
|
|
6858
|
+
return serialized ? `?${serialized}` : '';
|
|
6859
|
+
}
|
|
6860
|
+
buildFragment(fragment) {
|
|
6861
|
+
const raw = String(fragment || '').trim();
|
|
6862
|
+
if (!raw)
|
|
6863
|
+
return '';
|
|
6864
|
+
return `#${encodeURIComponent(raw.replace(/^#/, ''))}`;
|
|
6865
|
+
}
|
|
6229
6866
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: GlobalActionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6230
6867
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: GlobalActionService, providedIn: 'root' });
|
|
6231
6868
|
}
|
|
@@ -8356,6 +8993,12 @@ function mapFieldDefinitionToMetadata(field) {
|
|
|
8356
8993
|
'iconStyle',
|
|
8357
8994
|
'iconFontSize',
|
|
8358
8995
|
'filterField',
|
|
8996
|
+
'dialog',
|
|
8997
|
+
'detailActionLabel',
|
|
8998
|
+
'copyCodeActionLabel',
|
|
8999
|
+
'copyIdActionLabel',
|
|
9000
|
+
'createActionLabel',
|
|
9001
|
+
'actions',
|
|
8359
9002
|
];
|
|
8360
9003
|
for (const prop of simpleProps) {
|
|
8361
9004
|
const value = field[prop];
|
|
@@ -10499,8 +11142,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
10499
11142
|
const DEFAULT_SERVICE_KEY = 'praxis-service';
|
|
10500
11143
|
const DEFAULT_RELEASE_LIMIT = 50;
|
|
10501
11144
|
const DEFAULT_ITEM_LIMIT = 5;
|
|
10502
|
-
const RELEASES_HREF = 'praxis/config/domain-catalog/releases';
|
|
10503
|
-
const ITEMS_HREF = 'praxis/config/domain-catalog/items';
|
|
11145
|
+
const RELEASES_HREF = '/api/praxis/config/domain-catalog/releases';
|
|
11146
|
+
const ITEMS_HREF = '/api/praxis/config/domain-catalog/items';
|
|
10504
11147
|
class DomainCatalogService {
|
|
10505
11148
|
http = inject(HttpClient);
|
|
10506
11149
|
discovery = inject(ResourceDiscoveryService);
|
|
@@ -10594,11 +11237,83 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
10594
11237
|
args: [{ providedIn: 'any' }]
|
|
10595
11238
|
}] });
|
|
10596
11239
|
|
|
10597
|
-
const
|
|
10598
|
-
|
|
11240
|
+
const CHANGE_SETS_HREF = '/api/praxis/config/domain-knowledge/change-sets';
|
|
11241
|
+
class DomainKnowledgeService {
|
|
11242
|
+
http = inject(HttpClient);
|
|
11243
|
+
discovery = inject(ResourceDiscoveryService);
|
|
11244
|
+
createChangeSet(request, options = {}) {
|
|
11245
|
+
return this.http.post(this.discovery.resolveHref(CHANGE_SETS_HREF, options), request, { headers: this.resolveHeaders(options) });
|
|
11246
|
+
}
|
|
11247
|
+
listChangeSets(filters = {}, options = {}) {
|
|
11248
|
+
return this.http.get(this.discovery.resolveHref(CHANGE_SETS_HREF, options), {
|
|
11249
|
+
params: this.buildParams(filters),
|
|
11250
|
+
headers: this.resolveHeaders(options),
|
|
11251
|
+
});
|
|
11252
|
+
}
|
|
11253
|
+
getChangeSet(changeSetId, options = {}) {
|
|
11254
|
+
return this.http.get(this.discovery.resolveHref(`${CHANGE_SETS_HREF}/${encodeURIComponent(changeSetId)}`, options), { headers: this.resolveHeaders(options) });
|
|
11255
|
+
}
|
|
11256
|
+
validateChangeSet(changeSetId, options = {}) {
|
|
11257
|
+
return this.http.post(this.discovery.resolveHref(`${CHANGE_SETS_HREF}/${encodeURIComponent(changeSetId)}/validate`, options), null, { headers: this.resolveHeaders(options) });
|
|
11258
|
+
}
|
|
11259
|
+
transitionChangeSetStatus(changeSetId, request, options = {}) {
|
|
11260
|
+
return this.http.patch(this.discovery.resolveHref(`${CHANGE_SETS_HREF}/${encodeURIComponent(changeSetId)}/status`, options), request, { headers: this.resolveHeaders(options) });
|
|
11261
|
+
}
|
|
11262
|
+
applyChangeSet(changeSetId, options = {}) {
|
|
11263
|
+
return this.http.post(this.discovery.resolveHref(`${CHANGE_SETS_HREF}/${encodeURIComponent(changeSetId)}/apply`, options), null, { headers: this.resolveHeaders(options) });
|
|
11264
|
+
}
|
|
11265
|
+
getChangeSetTimeline(changeSetId, options = {}) {
|
|
11266
|
+
return this.http.get(this.discovery.resolveHref(`${CHANGE_SETS_HREF}/${encodeURIComponent(changeSetId)}/timeline`, options), { headers: this.resolveHeaders(options) });
|
|
11267
|
+
}
|
|
11268
|
+
buildParams(filters) {
|
|
11269
|
+
let params = new HttpParams();
|
|
11270
|
+
Object.entries(filters).forEach(([key, value]) => {
|
|
11271
|
+
if (value !== undefined && value !== null && value !== '') {
|
|
11272
|
+
params = params.set(key, String(value));
|
|
11273
|
+
}
|
|
11274
|
+
});
|
|
11275
|
+
return params;
|
|
11276
|
+
}
|
|
11277
|
+
resolveHeaders(options) {
|
|
11278
|
+
if (options.headers instanceof HttpHeaders) {
|
|
11279
|
+
return options.headers;
|
|
11280
|
+
}
|
|
11281
|
+
const entryHeaders = buildHeaders(this.discovery.resolveApiEntry(options));
|
|
11282
|
+
const explicitHeaders = options.headers ? buildHeaders({ headers: options.headers }) : undefined;
|
|
11283
|
+
if (!entryHeaders) {
|
|
11284
|
+
return explicitHeaders;
|
|
11285
|
+
}
|
|
11286
|
+
if (!explicitHeaders) {
|
|
11287
|
+
return entryHeaders;
|
|
11288
|
+
}
|
|
11289
|
+
let merged = entryHeaders;
|
|
11290
|
+
for (const key of explicitHeaders.keys()) {
|
|
11291
|
+
const values = explicitHeaders.getAll(key);
|
|
11292
|
+
if (values) {
|
|
11293
|
+
merged = merged.set(key, values);
|
|
11294
|
+
}
|
|
11295
|
+
}
|
|
11296
|
+
return merged;
|
|
11297
|
+
}
|
|
11298
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DomainKnowledgeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
11299
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DomainKnowledgeService, providedIn: 'any' });
|
|
11300
|
+
}
|
|
11301
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DomainKnowledgeService, decorators: [{
|
|
11302
|
+
type: Injectable,
|
|
11303
|
+
args: [{ providedIn: 'any' }]
|
|
11304
|
+
}] });
|
|
11305
|
+
|
|
11306
|
+
const DEFINITIONS_HREF = '/api/praxis/config/domain-rules/definitions';
|
|
11307
|
+
const INTAKE_HREF = '/api/praxis/config/domain-rules/intake';
|
|
11308
|
+
const SIMULATIONS_HREF = '/api/praxis/config/domain-rules/simulations';
|
|
11309
|
+
const PUBLICATIONS_HREF = '/api/praxis/config/domain-rules/publications';
|
|
11310
|
+
const MATERIALIZATIONS_HREF = '/api/praxis/config/domain-rules/materializations';
|
|
10599
11311
|
class DomainRuleService {
|
|
10600
11312
|
http = inject(HttpClient);
|
|
10601
11313
|
discovery = inject(ResourceDiscoveryService);
|
|
11314
|
+
intake(request, options = {}) {
|
|
11315
|
+
return this.http.post(this.discovery.resolveHref(INTAKE_HREF, options), request, { headers: this.resolveHeaders(options) });
|
|
11316
|
+
}
|
|
10602
11317
|
createDefinition(request, options = {}) {
|
|
10603
11318
|
return this.http.post(this.discovery.resolveHref(DEFINITIONS_HREF, options), request, { headers: this.resolveHeaders(options) });
|
|
10604
11319
|
}
|
|
@@ -10608,6 +11323,18 @@ class DomainRuleService {
|
|
|
10608
11323
|
headers: this.resolveHeaders(options),
|
|
10609
11324
|
});
|
|
10610
11325
|
}
|
|
11326
|
+
transitionDefinitionStatus(definitionId, request, options = {}) {
|
|
11327
|
+
return this.http.patch(this.discovery.resolveHref(`${DEFINITIONS_HREF}/${encodeURIComponent(definitionId)}/status`, options), request, { headers: this.resolveHeaders(options) });
|
|
11328
|
+
}
|
|
11329
|
+
getDefinitionTimeline(definitionId, options = {}) {
|
|
11330
|
+
return this.http.get(this.discovery.resolveHref(`${DEFINITIONS_HREF}/${encodeURIComponent(definitionId)}/timeline`, options), { headers: this.resolveHeaders(options) });
|
|
11331
|
+
}
|
|
11332
|
+
simulate(request, options = {}) {
|
|
11333
|
+
return this.http.post(this.discovery.resolveHref(SIMULATIONS_HREF, options), request, { headers: this.resolveHeaders(options) });
|
|
11334
|
+
}
|
|
11335
|
+
publish(request, options = {}) {
|
|
11336
|
+
return this.http.post(this.discovery.resolveHref(PUBLICATIONS_HREF, options), request, { headers: this.resolveHeaders(options) });
|
|
11337
|
+
}
|
|
10611
11338
|
createMaterialization(request, options = {}) {
|
|
10612
11339
|
return this.http.post(this.discovery.resolveHref(MATERIALIZATIONS_HREF, options), request, { headers: this.resolveHeaders(options) });
|
|
10613
11340
|
}
|
|
@@ -10617,6 +11344,9 @@ class DomainRuleService {
|
|
|
10617
11344
|
headers: this.resolveHeaders(options),
|
|
10618
11345
|
});
|
|
10619
11346
|
}
|
|
11347
|
+
transitionMaterializationStatus(materializationId, request, options = {}) {
|
|
11348
|
+
return this.http.patch(this.discovery.resolveHref(`${MATERIALIZATIONS_HREF}/${encodeURIComponent(materializationId)}/status`, options), request, { headers: this.resolveHeaders(options) });
|
|
11349
|
+
}
|
|
10620
11350
|
buildParams(filters) {
|
|
10621
11351
|
let params = new HttpParams();
|
|
10622
11352
|
Object.entries(filters).forEach(([key, value]) => {
|
|
@@ -13283,6 +14013,28 @@ const PRAXIS_GLOBAL_ACTION_CATALOG = [
|
|
|
13283
14013
|
example: { url: 'https://example.com' },
|
|
13284
14014
|
},
|
|
13285
14015
|
},
|
|
14016
|
+
{
|
|
14017
|
+
id: 'navigation.openRoute',
|
|
14018
|
+
label: 'Abrir rota interna',
|
|
14019
|
+
icon: 'route',
|
|
14020
|
+
description: 'Navega para uma rota interna do host.',
|
|
14021
|
+
payloadSchema: {
|
|
14022
|
+
type: 'object',
|
|
14023
|
+
properties: {
|
|
14024
|
+
path: { type: 'string', description: 'Caminho interno da rota.' },
|
|
14025
|
+
query: { type: 'object', description: 'Parâmetros da query string.' },
|
|
14026
|
+
fragment: { type: 'string', description: 'Fragmento/hash opcional.' },
|
|
14027
|
+
replaceUrl: { type: 'boolean', description: 'Substitui a URL atual no histórico.' },
|
|
14028
|
+
state: { type: 'object', description: 'Estado opcional da navegação.' },
|
|
14029
|
+
},
|
|
14030
|
+
required: ['path'],
|
|
14031
|
+
example: {
|
|
14032
|
+
path: '/clientes/detalhe',
|
|
14033
|
+
query: { id: '${item.id}' },
|
|
14034
|
+
replaceUrl: false,
|
|
14035
|
+
},
|
|
14036
|
+
},
|
|
14037
|
+
},
|
|
13286
14038
|
{
|
|
13287
14039
|
id: 'dialog.alert',
|
|
13288
14040
|
label: 'Dialog Alert',
|
|
@@ -13335,7 +14087,7 @@ const PRAXIS_GLOBAL_ACTION_CATALOG = [
|
|
|
13335
14087
|
id: 'surface.open',
|
|
13336
14088
|
label: 'Abrir Surface',
|
|
13337
14089
|
icon: 'open_in_new',
|
|
13338
|
-
description: 'Abre modal ou drawer com um widget registrado e bindings dinâmicos.',
|
|
14090
|
+
description: 'Abre modal ou drawer com um widget registrado e bindings dinâmicos. Use payload.* como envelope canônico do evento e runtime.* quando precisar de estado direto do host.',
|
|
13339
14091
|
payloadSchema: {
|
|
13340
14092
|
type: 'object',
|
|
13341
14093
|
properties: {
|
|
@@ -13345,7 +14097,10 @@ const PRAXIS_GLOBAL_ACTION_CATALOG = [
|
|
|
13345
14097
|
icon: { type: 'string', description: 'Ícone opcional da surface.' },
|
|
13346
14098
|
size: { type: 'object', description: 'Configuração opcional de tamanho da surface.' },
|
|
13347
14099
|
widget: { type: 'object', description: 'WidgetDefinition do componente a ser renderizado.' },
|
|
13348
|
-
bindings: {
|
|
14100
|
+
bindings: {
|
|
14101
|
+
type: 'array',
|
|
14102
|
+
description: 'Bindings declarativos aplicados sobre widget.inputs.*. Prefira payload.* para o envelope canônico do evento e runtime.* para estado direto do host.',
|
|
14103
|
+
},
|
|
13349
14104
|
context: { type: 'object', description: 'Contexto explícito adicional exposto ao runtime de bindings.' },
|
|
13350
14105
|
},
|
|
13351
14106
|
required: ['presentation', 'widget'],
|
|
@@ -13517,6 +14272,7 @@ const SURFACE_OPEN_I18N_CONFIG = {
|
|
|
13517
14272
|
'editor.bindings.remove': 'Remover binding',
|
|
13518
14273
|
'editor.bindings.empty': 'Nenhum binding configurado ainda.',
|
|
13519
14274
|
'editor.bindings.suggestedSources': 'Origens sugeridas: {{value}}',
|
|
14275
|
+
'editor.bindings.sourceSemantics': 'Use payload.* para o envelope canônico do evento e runtime.* quando precisar do estado direto exposto pelo componente de origem.',
|
|
13520
14276
|
'editor.bindings.suggestedTargets': 'Destinos sugeridos: {{value}}',
|
|
13521
14277
|
'editor.context.title': 'Contexto extra',
|
|
13522
14278
|
'editor.context.label': 'context (JSON)',
|
|
@@ -13565,6 +14321,7 @@ const SURFACE_OPEN_I18N_CONFIG = {
|
|
|
13565
14321
|
'editor.bindings.remove': 'Remove binding',
|
|
13566
14322
|
'editor.bindings.empty': 'No bindings configured yet.',
|
|
13567
14323
|
'editor.bindings.suggestedSources': 'Suggested sources: {{value}}',
|
|
14324
|
+
'editor.bindings.sourceSemantics': 'Use payload.* for the canonical event envelope and runtime.* when you need direct host state exposed by the source component.',
|
|
13568
14325
|
'editor.bindings.suggestedTargets': 'Suggested targets: {{value}}',
|
|
13569
14326
|
'editor.context.title': 'Extra context',
|
|
13570
14327
|
'editor.context.label': 'context (JSON)',
|
|
@@ -16825,7 +17582,183 @@ function createPersistedPage(identity, page, opts) {
|
|
|
16825
17582
|
|
|
16826
17583
|
// Global Dialog domain types for GlobalConfig (kept independent of @praxisui/dialog types)
|
|
16827
17584
|
|
|
16828
|
-
const DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION = 'praxis.ai.context-hints.domain-catalog/v0.
|
|
17585
|
+
const DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION = 'praxis.ai.context-hints.domain-catalog/v0.2';
|
|
17586
|
+
|
|
17587
|
+
const DEFAULT_TITLE$1 = 'Governed knowledge timeline';
|
|
17588
|
+
const DEFAULT_EMPTY_TEXT$1 = 'No safe timeline events published for this change-set.';
|
|
17589
|
+
function domainKnowledgeTimelineToRichContentDocument(timeline, options = {}) {
|
|
17590
|
+
return {
|
|
17591
|
+
kind: 'praxis.rich-content',
|
|
17592
|
+
version: '1.0.0',
|
|
17593
|
+
nodes: [
|
|
17594
|
+
{
|
|
17595
|
+
type: 'timeline',
|
|
17596
|
+
id: `domain-knowledge-timeline:${timeline.changeSetId}`,
|
|
17597
|
+
title: options.title ?? DEFAULT_TITLE$1,
|
|
17598
|
+
emptyText: options.emptyText ?? DEFAULT_EMPTY_TEXT$1,
|
|
17599
|
+
orientation: 'vertical',
|
|
17600
|
+
position: 'right',
|
|
17601
|
+
connectorVariant: 'solid',
|
|
17602
|
+
connectorColor: 'neutral',
|
|
17603
|
+
markerVariant: 'icon',
|
|
17604
|
+
markerColor: 'info',
|
|
17605
|
+
markerStyle: 'filled',
|
|
17606
|
+
items: timeline.events
|
|
17607
|
+
.filter(isSafeTimelineEvent$1)
|
|
17608
|
+
.map((event, index) => mapTimelineEvent$1(event, index)),
|
|
17609
|
+
},
|
|
17610
|
+
],
|
|
17611
|
+
};
|
|
17612
|
+
}
|
|
17613
|
+
function isSafeTimelineEvent$1(event) {
|
|
17614
|
+
return event.visibility === 'safe';
|
|
17615
|
+
}
|
|
17616
|
+
function mapTimelineEvent$1(event, index) {
|
|
17617
|
+
const target = formatTarget$1(event);
|
|
17618
|
+
const operations = formatOperations(event);
|
|
17619
|
+
const meta = [target, operations].filter((value) => Boolean(value)).join(' | ');
|
|
17620
|
+
return {
|
|
17621
|
+
id: `domain-knowledge-timeline-event:${index}:${event.eventType}`,
|
|
17622
|
+
title: event.summary || event.eventType,
|
|
17623
|
+
subtitle: event.actor ? `${event.actorType ?? 'actor'}: ${event.actor}` : event.actorType ?? undefined,
|
|
17624
|
+
opposite: event.occurredAt ?? undefined,
|
|
17625
|
+
meta: meta || undefined,
|
|
17626
|
+
badge: event.validationStatus ?? event.status ?? event.eventType,
|
|
17627
|
+
icon: iconForEvent$1(event.eventType),
|
|
17628
|
+
markerColor: markerColorForEvent$1(event.eventType),
|
|
17629
|
+
connectorColor: markerColorForEvent$1(event.eventType),
|
|
17630
|
+
};
|
|
17631
|
+
}
|
|
17632
|
+
function formatTarget$1(event) {
|
|
17633
|
+
const keys = event.targetConceptKeys?.filter(Boolean) ?? [];
|
|
17634
|
+
if (!keys.length) {
|
|
17635
|
+
return null;
|
|
17636
|
+
}
|
|
17637
|
+
return `${keys.length} governed concept${keys.length === 1 ? '' : 's'}`;
|
|
17638
|
+
}
|
|
17639
|
+
function formatOperations(event) {
|
|
17640
|
+
const operationTypes = event.operationTypes?.filter(Boolean) ?? [];
|
|
17641
|
+
if (!operationTypes.length && event.operationCount == null) {
|
|
17642
|
+
return null;
|
|
17643
|
+
}
|
|
17644
|
+
const count = event.operationCount == null ? null : `${event.operationCount} operation${event.operationCount === 1 ? '' : 's'}`;
|
|
17645
|
+
const types = operationTypes.length ? operationTypes.join(', ') : null;
|
|
17646
|
+
return [count, types].filter((value) => Boolean(value)).join(': ') || null;
|
|
17647
|
+
}
|
|
17648
|
+
function iconForEvent$1(eventType) {
|
|
17649
|
+
if (eventType.includes('applied')) {
|
|
17650
|
+
return 'published_with_changes';
|
|
17651
|
+
}
|
|
17652
|
+
if (eventType.includes('approved')) {
|
|
17653
|
+
return 'verified';
|
|
17654
|
+
}
|
|
17655
|
+
if (eventType.includes('rejected')) {
|
|
17656
|
+
return 'block';
|
|
17657
|
+
}
|
|
17658
|
+
if (eventType.includes('validation')) {
|
|
17659
|
+
return 'rule';
|
|
17660
|
+
}
|
|
17661
|
+
if (eventType.includes('created')) {
|
|
17662
|
+
return 'add_circle';
|
|
17663
|
+
}
|
|
17664
|
+
return 'timeline';
|
|
17665
|
+
}
|
|
17666
|
+
function markerColorForEvent$1(eventType) {
|
|
17667
|
+
if (eventType.includes('applied')) {
|
|
17668
|
+
return 'success';
|
|
17669
|
+
}
|
|
17670
|
+
if (eventType.includes('approved')) {
|
|
17671
|
+
return 'primary';
|
|
17672
|
+
}
|
|
17673
|
+
if (eventType.includes('rejected')) {
|
|
17674
|
+
return 'error';
|
|
17675
|
+
}
|
|
17676
|
+
if (eventType.includes('validation')) {
|
|
17677
|
+
return 'warning';
|
|
17678
|
+
}
|
|
17679
|
+
if (eventType.includes('created')) {
|
|
17680
|
+
return 'info';
|
|
17681
|
+
}
|
|
17682
|
+
return 'neutral';
|
|
17683
|
+
}
|
|
17684
|
+
|
|
17685
|
+
const DEFAULT_TITLE = 'Governed decision timeline';
|
|
17686
|
+
const DEFAULT_EMPTY_TEXT = 'No safe timeline events published for this decision.';
|
|
17687
|
+
function domainRuleTimelineToRichContentDocument(timeline, options = {}) {
|
|
17688
|
+
return {
|
|
17689
|
+
kind: 'praxis.rich-content',
|
|
17690
|
+
version: '1.0.0',
|
|
17691
|
+
nodes: [
|
|
17692
|
+
{
|
|
17693
|
+
type: 'timeline',
|
|
17694
|
+
id: `domain-rule-timeline:${timeline.ruleDefinitionId}`,
|
|
17695
|
+
title: options.title ?? DEFAULT_TITLE,
|
|
17696
|
+
emptyText: options.emptyText ?? DEFAULT_EMPTY_TEXT,
|
|
17697
|
+
orientation: 'vertical',
|
|
17698
|
+
position: 'right',
|
|
17699
|
+
connectorVariant: 'solid',
|
|
17700
|
+
connectorColor: 'neutral',
|
|
17701
|
+
markerVariant: 'icon',
|
|
17702
|
+
markerColor: 'info',
|
|
17703
|
+
markerStyle: 'filled',
|
|
17704
|
+
items: timeline.events
|
|
17705
|
+
.filter(isSafeTimelineEvent)
|
|
17706
|
+
.map((event, index) => mapTimelineEvent(event, index)),
|
|
17707
|
+
},
|
|
17708
|
+
],
|
|
17709
|
+
};
|
|
17710
|
+
}
|
|
17711
|
+
function isSafeTimelineEvent(event) {
|
|
17712
|
+
return event.visibility === 'safe';
|
|
17713
|
+
}
|
|
17714
|
+
function mapTimelineEvent(event, index) {
|
|
17715
|
+
const target = formatTarget(event);
|
|
17716
|
+
const sourceHash = event.sourceHash ? `sourceHash: ${event.sourceHash}` : null;
|
|
17717
|
+
const meta = [target, sourceHash].filter((value) => Boolean(value)).join(' | ');
|
|
17718
|
+
return {
|
|
17719
|
+
id: `domain-rule-timeline-event:${index}:${event.eventType}`,
|
|
17720
|
+
title: event.summary || event.eventType,
|
|
17721
|
+
subtitle: event.actor ? `${event.actorType ?? 'actor'}: ${event.actor}` : event.actorType ?? undefined,
|
|
17722
|
+
opposite: event.occurredAt ?? undefined,
|
|
17723
|
+
meta: meta || undefined,
|
|
17724
|
+
badge: event.targetLayer ?? event.eventType,
|
|
17725
|
+
icon: iconForEvent(event.eventType),
|
|
17726
|
+
markerColor: markerColorForEvent(event.eventType),
|
|
17727
|
+
connectorColor: markerColorForEvent(event.eventType),
|
|
17728
|
+
};
|
|
17729
|
+
}
|
|
17730
|
+
function formatTarget(event) {
|
|
17731
|
+
const parts = [
|
|
17732
|
+
event.targetLayer,
|
|
17733
|
+
event.targetArtifactType,
|
|
17734
|
+
event.targetArtifactKey,
|
|
17735
|
+
].filter((value) => Boolean(value));
|
|
17736
|
+
return parts.length ? parts.join(' / ') : null;
|
|
17737
|
+
}
|
|
17738
|
+
function iconForEvent(eventType) {
|
|
17739
|
+
if (eventType.includes('materialization')) {
|
|
17740
|
+
return 'deployed_code';
|
|
17741
|
+
}
|
|
17742
|
+
if (eventType.includes('approved') || eventType.includes('activated')) {
|
|
17743
|
+
return 'verified';
|
|
17744
|
+
}
|
|
17745
|
+
if (eventType.includes('created')) {
|
|
17746
|
+
return 'add_circle';
|
|
17747
|
+
}
|
|
17748
|
+
return 'timeline';
|
|
17749
|
+
}
|
|
17750
|
+
function markerColorForEvent(eventType) {
|
|
17751
|
+
if (eventType.includes('materialization') || eventType.includes('activated')) {
|
|
17752
|
+
return 'success';
|
|
17753
|
+
}
|
|
17754
|
+
if (eventType.includes('approved')) {
|
|
17755
|
+
return 'primary';
|
|
17756
|
+
}
|
|
17757
|
+
if (eventType.includes('created')) {
|
|
17758
|
+
return 'info';
|
|
17759
|
+
}
|
|
17760
|
+
return 'neutral';
|
|
17761
|
+
}
|
|
16829
17762
|
|
|
16830
17763
|
function normalizeRecord(record) {
|
|
16831
17764
|
if (!record || typeof record !== 'object')
|
|
@@ -18161,6 +19094,9 @@ class SurfaceOpenActionEditorComponent {
|
|
|
18161
19094
|
{{ t('editor.bindings.suggestedSources', 'Suggested sources: {{value}}', { value: bindingSourceSuggestionsPreview }) }}
|
|
18162
19095
|
</div>
|
|
18163
19096
|
}
|
|
19097
|
+
<div>
|
|
19098
|
+
{{ t('editor.bindings.sourceSemantics', 'Use payload.* for the canonical event envelope and runtime.* for direct host state when the source component exposes it.') }}
|
|
19099
|
+
</div>
|
|
18164
19100
|
@if (bindingTargetSuggestionsPreview) {
|
|
18165
19101
|
<div>
|
|
18166
19102
|
{{ t('editor.bindings.suggestedTargets', 'Suggested targets: {{value}}', { value: bindingTargetSuggestionsPreview }) }}
|
|
@@ -18515,6 +19451,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
18515
19451
|
{{ t('editor.bindings.suggestedSources', 'Suggested sources: {{value}}', { value: bindingSourceSuggestionsPreview }) }}
|
|
18516
19452
|
</div>
|
|
18517
19453
|
}
|
|
19454
|
+
<div>
|
|
19455
|
+
{{ t('editor.bindings.sourceSemantics', 'Use payload.* for the canonical event envelope and runtime.* for direct host state when the source component exposes it.') }}
|
|
19456
|
+
</div>
|
|
18518
19457
|
@if (bindingTargetSuggestionsPreview) {
|
|
18519
19458
|
<div>
|
|
18520
19459
|
{{ t('editor.bindings.suggestedTargets', 'Suggested targets: {{value}}', { value: bindingTargetSuggestionsPreview }) }}
|
|
@@ -19550,6 +20489,10 @@ const CAPS = [
|
|
|
19550
20489
|
{ path: 'page.widgets[].className', category: 'widgets', valueKind: 'string', description: 'Classe CSS opcional do widget.' },
|
|
19551
20490
|
{ path: 'page.widgets[].definition.id', category: 'widgets', valueKind: 'string', description: 'ID do componente do widget (ex: praxis-table).' },
|
|
19552
20491
|
{ path: 'page.widgets[].definition.inputs', category: 'widgets', valueKind: 'object', description: 'Inputs iniciais do widget.' },
|
|
20492
|
+
{ path: 'page.widgets[].definition.inputs.hostCapabilities', category: 'widgets', valueKind: 'object', description: 'Capacidades runtime mediadas pelo host quando definition.id = praxis-rich-content. Nao pertence ao JSON persistido.' },
|
|
20493
|
+
{ path: 'page.widgets[].definition.inputs.hostCapabilities.dispatchAction', category: 'widgets', valueKind: 'object', description: 'Dispatcher runtime para actionButton e actions declarativas de rich content hospedado na pagina.' },
|
|
20494
|
+
{ path: 'page.widgets[].definition.inputs.hostCapabilities.isActionAvailable', category: 'widgets', valueKind: 'object', description: 'Resolver runtime de disponibilidade de actionId para rich content hospedado na pagina.' },
|
|
20495
|
+
{ path: 'page.widgets[].definition.inputs.hostCapabilities.hasCapability', category: 'widgets', valueKind: 'object', description: 'Resolver runtime de capabilities como page.customization.enabled e page.widget.selected para rich content hospedado na pagina.' },
|
|
19553
20496
|
{ path: 'page.widgets[].definition.bindingOrder', category: 'widgets', valueKind: 'array', description: 'Ordem de binding de inputs.' },
|
|
19554
20497
|
{ path: 'page.widgets[].shell', category: 'shell', valueKind: 'object', description: 'Configuracao do shell do widget.' },
|
|
19555
20498
|
{ path: 'page.widgets[].shell.kind', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.shellKind, description: 'Tipo de shell.' },
|
|
@@ -19651,7 +20594,7 @@ const CAPS = [
|
|
|
19651
20594
|
{ path: 'page.deviceLayouts.mobile.widgetOverrides.<widgetKey>.hidden', category: 'layout', valueKind: 'boolean', description: 'Oculta o widget em mobile.' },
|
|
19652
20595
|
];
|
|
19653
20596
|
const DYNAMIC_PAGE_AI_CAPABILITIES = {
|
|
19654
|
-
version: 'v1.
|
|
20597
|
+
version: 'v1.2',
|
|
19655
20598
|
enums: ENUMS,
|
|
19656
20599
|
targets: ['praxis-dynamic-page'],
|
|
19657
20600
|
notes: [
|
|
@@ -19663,6 +20606,7 @@ const DYNAMIC_PAGE_AI_CAPABILITIES = {
|
|
|
19663
20606
|
'Para remocao/replace, use flags {_remove:true} ou {_replace:true} no item.',
|
|
19664
20607
|
'Para renomear um link, inclua {_beforeKey:"link-id-anterior"} no item.',
|
|
19665
20608
|
'Inputs de widgets dependem do componente (ex: praxis-table, praxis-dynamic-form). Evite inventar campos; prefira pedir confirmacao.',
|
|
20609
|
+
'Quando page.widgets[].definition.id for praxis-rich-content, o host praxis-dynamic-page injeta hostCapabilities em runtime para actions e capability gating; nao serialize funcoes nem tente persistir page.widgets[].definition.inputs.hostCapabilities.',
|
|
19666
20610
|
'Use ids estaveis para links e keys estaveis para widgets.',
|
|
19667
20611
|
'Nested component ports usam endpoint component-port com nestedPath; o owner em ref.widget continua sendo o widget top-level.',
|
|
19668
20612
|
'Objetivo: compor widgets e relacionamentos canonicos (ex.: master-detail).',
|
|
@@ -20307,6 +21251,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
20307
21251
|
'resourcePath sempre e o path base do recurso (sem /filter, /all).',
|
|
20308
21252
|
'Praxis Table gera colunas dinamicamente a partir do resourcePath quando columns nao forem definidas.',
|
|
20309
21253
|
'Praxis Dynamic Form gera campos dinamicamente a partir do resourcePath quando config nao for definida.',
|
|
21254
|
+
'Quando um widget praxis-rich-content estiver hospedado na pagina, definition.inputs.document continua sendo o contrato persistido; hostCapabilities e injetado somente em runtime pelo praxis-dynamic-page para actions e capability gating.',
|
|
20310
21255
|
'Praxis List pode filtrar via config.dataSource.query (enviado para /filter).',
|
|
20311
21256
|
'Quando houver recursos secundarios (ex.: enderecos), use contextHints.addressResourcePath.',
|
|
20312
21257
|
'Exemplo master-detail: tabela emite rowClick -> form.resourceId via transform pick-path payload.row.id.',
|
|
@@ -20348,8 +21293,8 @@ const DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK = {
|
|
|
20348
21293
|
mode: 'enum',
|
|
20349
21294
|
options: [
|
|
20350
21295
|
{
|
|
20351
|
-
value: 'praxis.ai.context-hints.domain-catalog/v0.
|
|
20352
|
-
label: 'Domain Catalog context hint contract v0.
|
|
21296
|
+
value: 'praxis.ai.context-hints.domain-catalog/v0.2',
|
|
21297
|
+
label: 'Domain Catalog context hint contract v0.2',
|
|
20353
21298
|
},
|
|
20354
21299
|
],
|
|
20355
21300
|
},
|
|
@@ -20388,6 +21333,21 @@ const DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK = {
|
|
|
20388
21333
|
{ value: 'ai-access-control', label: 'Evaluate AI data visibility and usage constraints' },
|
|
20389
21334
|
],
|
|
20390
21335
|
},
|
|
21336
|
+
'contextHints.domainCatalog.recommendedAuthoringFlow': {
|
|
21337
|
+
mode: 'enum',
|
|
21338
|
+
options: [
|
|
21339
|
+
{ value: 'shared_rule_authoring', label: 'Route the task to shared semantic rule authoring' },
|
|
21340
|
+
{ value: 'component_authoring', label: 'Keep the task in component authoring' },
|
|
21341
|
+
{ value: 'ui_composition_authoring', label: 'Route the task to UI composition authoring' },
|
|
21342
|
+
],
|
|
21343
|
+
},
|
|
21344
|
+
'contextHints.domainCatalog.recommendedRuleType': {
|
|
21345
|
+
mode: 'enum',
|
|
21346
|
+
options: [
|
|
21347
|
+
{ value: 'governance', label: 'Governance or compliance shared rule' },
|
|
21348
|
+
{ value: 'selection_eligibility', label: 'Selection eligibility shared rule' },
|
|
21349
|
+
],
|
|
21350
|
+
},
|
|
20391
21351
|
'contextHints.domainCatalog.relationships': {
|
|
20392
21352
|
mode: 'suggested',
|
|
20393
21353
|
options: [
|
|
@@ -20466,7 +21426,9 @@ const DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK = {
|
|
|
20466
21426
|
patchTemplate: {
|
|
20467
21427
|
contextHints: {
|
|
20468
21428
|
domainCatalog: {
|
|
20469
|
-
schemaVersion: 'praxis.ai.context-hints.domain-catalog/v0.
|
|
21429
|
+
schemaVersion: 'praxis.ai.context-hints.domain-catalog/v0.2',
|
|
21430
|
+
recommendedAuthoringFlow: 'shared_rule_authoring',
|
|
21431
|
+
recommendedRuleType: 'privacy',
|
|
20470
21432
|
serviceKey: '<serviceKey>',
|
|
20471
21433
|
resourceKey: '<resourceKey>',
|
|
20472
21434
|
type: 'governance',
|
|
@@ -20500,7 +21462,7 @@ const DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK = {
|
|
|
20500
21462
|
'Domain Catalog is a runtime semantic/governance context source, not a FormConfig rule store.',
|
|
20501
21463
|
'Use DomainCatalogService for read-only lookup of domain vocabulary, relationships and governance items.',
|
|
20502
21464
|
'LLM tasks must treat aiUsage.visibility and complianceTags as prompt/data-access constraints before generating patches.',
|
|
20503
|
-
'Use contextHints.domainCatalog with schemaVersion praxis.ai.context-hints.domain-catalog/v0.
|
|
21465
|
+
'Use contextHints.domainCatalog with schemaVersion praxis.ai.context-hints.domain-catalog/v0.2 to share runtime semantic retrieval intent between frontend and backend.',
|
|
20504
21466
|
'Shared domain rules may be referenced by resourceKey and catalog release, but should not be copied into component JSON unless intentionally materialized by a backend policy.',
|
|
20505
21467
|
],
|
|
20506
21468
|
};
|
|
@@ -21476,7 +22438,7 @@ function renderInlineMarkdown(text) {
|
|
|
21476
22438
|
escaped = escaped.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
|
|
21477
22439
|
escaped = escaped.replace(/\*([^*]+)\*/g, '<em>$1</em>');
|
|
21478
22440
|
placeholders.forEach((value, token) => {
|
|
21479
|
-
escaped = escaped.
|
|
22441
|
+
escaped = escaped.split(token).join(value);
|
|
21480
22442
|
});
|
|
21481
22443
|
return escaped;
|
|
21482
22444
|
}
|
|
@@ -23587,15 +24549,24 @@ class WidgetPageStateRuntimeService {
|
|
|
23587
24549
|
}
|
|
23588
24550
|
if (typeof node === 'string') {
|
|
23589
24551
|
const exact = node.match(/^\s*\$\{([^}]+)\}\s*$/);
|
|
23590
|
-
if (exact)
|
|
23591
|
-
|
|
24552
|
+
if (exact) {
|
|
24553
|
+
const path = exact[1].trim();
|
|
24554
|
+
const value = this.readPath(env, path);
|
|
24555
|
+
return value !== undefined || this.isPageStateTemplatePath(path) ? value : node;
|
|
24556
|
+
}
|
|
23592
24557
|
return node.replace(/\$\{([^}]+)\}/g, (_match, path) => {
|
|
23593
|
-
const
|
|
23594
|
-
|
|
24558
|
+
const normalizedPath = String(path).trim();
|
|
24559
|
+
const value = this.readPath(env, normalizedPath);
|
|
24560
|
+
if (value != null)
|
|
24561
|
+
return String(value);
|
|
24562
|
+
return this.isPageStateTemplatePath(normalizedPath) ? '' : `\${${path}}`;
|
|
23595
24563
|
});
|
|
23596
24564
|
}
|
|
23597
24565
|
return node;
|
|
23598
24566
|
}
|
|
24567
|
+
isPageStateTemplatePath(path) {
|
|
24568
|
+
return /^(state|values|derived|context)(\.|$)/.test(path.trim());
|
|
24569
|
+
}
|
|
23599
24570
|
normalizeDependencyPath(path) {
|
|
23600
24571
|
if (typeof path !== 'string')
|
|
23601
24572
|
return '';
|
|
@@ -24438,16 +25409,23 @@ class TransformRuntimeService {
|
|
|
24438
25409
|
return hash.toString(36);
|
|
24439
25410
|
}
|
|
24440
25411
|
toJsonLogicValue(value) {
|
|
24441
|
-
|
|
24442
|
-
|
|
24443
|
-
|
|
24444
|
-
|
|
24445
|
-
|
|
25412
|
+
switch (typeof value) {
|
|
25413
|
+
case 'string':
|
|
25414
|
+
case 'number':
|
|
25415
|
+
case 'boolean':
|
|
25416
|
+
return value;
|
|
25417
|
+
case 'undefined':
|
|
25418
|
+
return null;
|
|
25419
|
+
default:
|
|
25420
|
+
break;
|
|
25421
|
+
}
|
|
25422
|
+
if (value === null) {
|
|
25423
|
+
return null;
|
|
24446
25424
|
}
|
|
24447
25425
|
if (Array.isArray(value) || (value && typeof value === 'object')) {
|
|
24448
25426
|
return value;
|
|
24449
25427
|
}
|
|
24450
|
-
return
|
|
25428
|
+
return String(value);
|
|
24451
25429
|
}
|
|
24452
25430
|
}
|
|
24453
25431
|
|
|
@@ -25869,16 +26847,23 @@ function looksLikePath(value) {
|
|
|
25869
26847
|
return /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\[\d+\])*$/.test(value);
|
|
25870
26848
|
}
|
|
25871
26849
|
function toJsonLogicValue(value) {
|
|
25872
|
-
|
|
25873
|
-
|
|
25874
|
-
|
|
25875
|
-
|
|
25876
|
-
|
|
26850
|
+
switch (typeof value) {
|
|
26851
|
+
case 'string':
|
|
26852
|
+
case 'number':
|
|
26853
|
+
case 'boolean':
|
|
26854
|
+
return value;
|
|
26855
|
+
case 'undefined':
|
|
26856
|
+
return null;
|
|
26857
|
+
default:
|
|
26858
|
+
break;
|
|
26859
|
+
}
|
|
26860
|
+
if (value === null) {
|
|
26861
|
+
return null;
|
|
25877
26862
|
}
|
|
25878
26863
|
if (Array.isArray(value) || (value && typeof value === 'object')) {
|
|
25879
26864
|
return clone(value);
|
|
25880
26865
|
}
|
|
25881
|
-
return
|
|
26866
|
+
return String(value);
|
|
25882
26867
|
}
|
|
25883
26868
|
function clone(value) {
|
|
25884
26869
|
if (value == null || typeof value !== 'object') {
|
|
@@ -26621,15 +27606,115 @@ class DynamicWidgetPageComponent {
|
|
|
26621
27606
|
pageStateEffective: this.cloneStateValues(runtime.effectiveValues),
|
|
26622
27607
|
};
|
|
26623
27608
|
return this.cloneWidgets(widgets).map((widget) => {
|
|
27609
|
+
const runtimeEnrichedWidget = this.enrichRuntimeWidgetInputs(widget, runtime);
|
|
26624
27610
|
if (!widget.shell) {
|
|
26625
|
-
return
|
|
27611
|
+
return runtimeEnrichedWidget;
|
|
26626
27612
|
}
|
|
26627
27613
|
return {
|
|
26628
|
-
...
|
|
27614
|
+
...runtimeEnrichedWidget,
|
|
26629
27615
|
shell: this.resolveTemplate(widget.shell, templateContext),
|
|
26630
27616
|
};
|
|
26631
27617
|
});
|
|
26632
27618
|
}
|
|
27619
|
+
enrichRuntimeWidgetInputs(widget, runtime) {
|
|
27620
|
+
if (widget.definition?.id !== 'praxis-rich-content') {
|
|
27621
|
+
return widget;
|
|
27622
|
+
}
|
|
27623
|
+
return {
|
|
27624
|
+
...widget,
|
|
27625
|
+
definition: {
|
|
27626
|
+
...widget.definition,
|
|
27627
|
+
inputs: {
|
|
27628
|
+
...(widget.definition.inputs || {}),
|
|
27629
|
+
hostCapabilities: this.buildRichContentHostCapabilities(widget.key, runtime),
|
|
27630
|
+
},
|
|
27631
|
+
},
|
|
27632
|
+
};
|
|
27633
|
+
}
|
|
27634
|
+
buildRichContentHostCapabilities(widgetKey, runtime) {
|
|
27635
|
+
return {
|
|
27636
|
+
dispatchAction: (actionId, payload) => this.dispatchRichContentAction(widgetKey, actionId, payload),
|
|
27637
|
+
isActionAvailable: (actionId) => this.isRichContentActionAvailable(widgetKey, actionId),
|
|
27638
|
+
hasCapability: (capabilityId) => this.hasRichContentCapability(widgetKey, capabilityId, runtime),
|
|
27639
|
+
};
|
|
27640
|
+
}
|
|
27641
|
+
dispatchRichContentAction(widgetKey, actionId, payload) {
|
|
27642
|
+
if (!actionId) {
|
|
27643
|
+
return;
|
|
27644
|
+
}
|
|
27645
|
+
if (this.globalActions.has(actionId)) {
|
|
27646
|
+
void this.globalActions.execute(actionId, payload, {
|
|
27647
|
+
sourceId: widgetKey,
|
|
27648
|
+
widgetKey,
|
|
27649
|
+
payload: {
|
|
27650
|
+
widgetKey,
|
|
27651
|
+
actionId,
|
|
27652
|
+
payload,
|
|
27653
|
+
pageContext: this.mergedContext,
|
|
27654
|
+
pageState: this.cloneStateValues(this.pageRuntime?.effectiveValues || {}),
|
|
27655
|
+
},
|
|
27656
|
+
meta: {
|
|
27657
|
+
origin: 'dynamic-page.rich-content',
|
|
27658
|
+
componentId: 'praxis-dynamic-page',
|
|
27659
|
+
},
|
|
27660
|
+
});
|
|
27661
|
+
return;
|
|
27662
|
+
}
|
|
27663
|
+
this.onWidgetEvent(widgetKey, {
|
|
27664
|
+
ownerWidgetKey: widgetKey,
|
|
27665
|
+
sourceComponentId: 'praxis-rich-content',
|
|
27666
|
+
output: 'customAction',
|
|
27667
|
+
payload: {
|
|
27668
|
+
actionId,
|
|
27669
|
+
payload,
|
|
27670
|
+
globalAction: {
|
|
27671
|
+
actionId,
|
|
27672
|
+
payload,
|
|
27673
|
+
},
|
|
27674
|
+
},
|
|
27675
|
+
});
|
|
27676
|
+
}
|
|
27677
|
+
isRichContentActionAvailable(widgetKey, actionId) {
|
|
27678
|
+
if (!actionId) {
|
|
27679
|
+
return false;
|
|
27680
|
+
}
|
|
27681
|
+
const hasGlobalAction = this.globalActions &&
|
|
27682
|
+
typeof this.globalActions.has === 'function'
|
|
27683
|
+
? this.globalActions.has(actionId)
|
|
27684
|
+
: false;
|
|
27685
|
+
if (hasGlobalAction) {
|
|
27686
|
+
return true;
|
|
27687
|
+
}
|
|
27688
|
+
const widget = this.widgets().find((candidate) => candidate.key === widgetKey);
|
|
27689
|
+
return !!widget;
|
|
27690
|
+
}
|
|
27691
|
+
hasRichContentCapability(widgetKey, capabilityId, runtime) {
|
|
27692
|
+
switch (capabilityId) {
|
|
27693
|
+
case 'page.customization.enabled':
|
|
27694
|
+
return !!this.enableCustomization;
|
|
27695
|
+
case 'page.customization.disabled':
|
|
27696
|
+
return !this.enableCustomization;
|
|
27697
|
+
case 'page.layout.canvas':
|
|
27698
|
+
return this.isCanvasMode();
|
|
27699
|
+
case 'page.layout.flow':
|
|
27700
|
+
return !this.isCanvasMode();
|
|
27701
|
+
case 'page.state.available':
|
|
27702
|
+
return !!runtime;
|
|
27703
|
+
case 'page.autoPersist.enabled':
|
|
27704
|
+
return !!this.autoPersist;
|
|
27705
|
+
case 'page.autoPersist.disabled':
|
|
27706
|
+
return !this.autoPersist;
|
|
27707
|
+
case 'page.widget.selected':
|
|
27708
|
+
return this.selectedCanvasWidgetKey === widgetKey;
|
|
27709
|
+
case 'page.widget.configurable': {
|
|
27710
|
+
const widget = this.widgets().find((candidate) => candidate.key === widgetKey);
|
|
27711
|
+
const widgetType = widget?.definition?.id || '';
|
|
27712
|
+
return !!this.componentMetadata?.get(widgetType)?.configEditor;
|
|
27713
|
+
}
|
|
27714
|
+
default:
|
|
27715
|
+
return false;
|
|
27716
|
+
}
|
|
27717
|
+
}
|
|
26633
27718
|
resolveComponentBindingPath(portId, bindingPath) {
|
|
26634
27719
|
const normalizedPortId = String(portId || '').trim();
|
|
26635
27720
|
const normalizedBindingPath = String(bindingPath || '').trim();
|
|
@@ -28668,7 +29753,7 @@ const PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA = {
|
|
|
28668
29753
|
selector: 'praxis-dynamic-page',
|
|
28669
29754
|
component: DynamicWidgetPageComponent,
|
|
28670
29755
|
friendlyName: 'Dynamic Page',
|
|
28671
|
-
description: 'Pagina dinamica com widgets e composition.links em layout
|
|
29756
|
+
description: 'Pagina dinamica com widgets e composition.links em layout responsivo, incluindo mediacao runtime para rich-content hospedado.',
|
|
28672
29757
|
icon: 'dashboard',
|
|
28673
29758
|
inputs: [
|
|
28674
29759
|
{ name: 'page', type: 'WidgetPageDefinition', description: 'Definicao da pagina (widgets, layout e composition.links).' },
|
|
@@ -30127,4 +31212,4 @@ function provideHookWhitelist(allowed) {
|
|
|
30127
31212
|
* Generated bundle index. Do not edit.
|
|
30128
31213
|
*/
|
|
30129
31214
|
|
|
30130
|
-
export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, AnalyticsPresentationResolver, AnalyticsSchemaContractService, AnalyticsStatsRequestBuilderService, ApiConfigStorage, ApiEndpoint, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, BUILTIN_SHELL_PRESETS, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_TABLE_CONFIG, DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK, DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DomainCatalogService, DomainRuleService, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, EmptyStateCardComponent, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRichTextBlockComponent, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceSurfaceOpenAdapterService, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SurfaceBindingRuntimeService, SurfaceOpenActionEditorComponent, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisLayerScaleCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isFormLayoutItem, isGlobalActionRef, isInlineFilterControlType, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldConstraints, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef, normalizePath, normalizePraxisDataQueryContext, normalizeResourceAvailabilityReasonCode, normalizeStart, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, removeDiacritics, reportTelemetryHookFactory, requiredCheckedValidator, resolveBuiltinPresets, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveValuePresentation, resolveValuePresentationLocale, serializePraxisCollectionToCsv, serializePraxisCollectionToJson, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withMessage, withPraxisHttpLoading };
|
|
31215
|
+
export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, AnalyticsPresentationResolver, AnalyticsSchemaContractService, AnalyticsStatsRequestBuilderService, ApiConfigStorage, ApiEndpoint, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, BUILTIN_SHELL_PRESETS, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_TABLE_CONFIG, DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK, DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DomainCatalogService, DomainKnowledgeService, DomainRuleService, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, EmptyStateCardComponent, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRichTextBlockComponent, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceSurfaceOpenAdapterService, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SurfaceBindingRuntimeService, SurfaceOpenActionEditorComponent, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisLayerScaleCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, classifyEntityLookupResult, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldConstraints, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizeResourceAvailabilityReasonCode, normalizeStart, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, removeDiacritics, reportTelemetryHookFactory, requiredCheckedValidator, resolveBuiltinPresets, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveValuePresentation, resolveValuePresentationLocale, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToJson, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withMessage, withPraxisHttpLoading };
|