@praxisui/core 10.0.0-rc.11 → 10.0.0-rc.13
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.
|
@@ -3551,6 +3551,20 @@ class SchemaNormalizationKernel {
|
|
|
3551
3551
|
}
|
|
3552
3552
|
fields.push(field);
|
|
3553
3553
|
}
|
|
3554
|
+
if (fields.length === 0 &&
|
|
3555
|
+
properties['parameters'] &&
|
|
3556
|
+
typeof properties['parameters'] === 'object' &&
|
|
3557
|
+
!Array.isArray(properties['parameters'])) {
|
|
3558
|
+
const parametersProp = properties['parameters'];
|
|
3559
|
+
const resolvedParametersSchema = this.resolveSchemaRef(parametersProp.$ref, rootSchema) ?? parametersProp;
|
|
3560
|
+
if (resolvedParametersSchema &&
|
|
3561
|
+
typeof resolvedParametersSchema === 'object' &&
|
|
3562
|
+
resolvedParametersSchema !== schema &&
|
|
3563
|
+
resolvedParametersSchema.properties &&
|
|
3564
|
+
typeof resolvedParametersSchema.properties === 'object') {
|
|
3565
|
+
return this.normalizeObjectSchema(resolvedParametersSchema, rootSchema);
|
|
3566
|
+
}
|
|
3567
|
+
}
|
|
3554
3568
|
// Order by the optional 'order' property when present
|
|
3555
3569
|
fields.sort((a, b) => {
|
|
3556
3570
|
const orderA = a.order ?? Number.MAX_SAFE_INTEGER;
|
|
@@ -6516,12 +6530,10 @@ function createDefaultTableConfig() {
|
|
|
6516
6530
|
showPageInfo: true,
|
|
6517
6531
|
position: 'bottom',
|
|
6518
6532
|
style: 'default',
|
|
6519
|
-
strategy: 'client',
|
|
6520
6533
|
},
|
|
6521
6534
|
sorting: {
|
|
6522
6535
|
enabled: true,
|
|
6523
6536
|
multiSort: false,
|
|
6524
|
-
strategy: 'client',
|
|
6525
6537
|
showSortIndicators: true,
|
|
6526
6538
|
indicatorPosition: 'end',
|
|
6527
6539
|
allowClearSort: true,
|
|
@@ -10968,15 +10980,26 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
10968
10980
|
operator: 'round',
|
|
10969
10981
|
namespace: 'praxis',
|
|
10970
10982
|
minArgs: 1,
|
|
10971
|
-
maxArgs:
|
|
10983
|
+
maxArgs: 2,
|
|
10972
10984
|
returnType: 'number',
|
|
10973
10985
|
purity: 'pure',
|
|
10974
10986
|
evaluate: (args, _context, helpers) => {
|
|
10975
|
-
const [value] = helpers.requireArgs('round', args, 1,
|
|
10987
|
+
const [value, precisionArg] = helpers.requireArgs('round', args, 1, 2);
|
|
10976
10988
|
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
10977
10989
|
throw new PraxisJsonLogicError('RULE_ARGUMENT_TYPE_INVALID', '`round` requires a finite numeric argument.');
|
|
10978
10990
|
}
|
|
10979
|
-
|
|
10991
|
+
if (precisionArg === undefined || precisionArg === null) {
|
|
10992
|
+
return Math.round(value);
|
|
10993
|
+
}
|
|
10994
|
+
if (typeof precisionArg !== 'number' || !Number.isFinite(precisionArg)) {
|
|
10995
|
+
throw new PraxisJsonLogicError('RULE_ARGUMENT_TYPE_INVALID', '`round` precision must be a finite numeric argument.');
|
|
10996
|
+
}
|
|
10997
|
+
const decimals = Math.max(0, Math.min(10, Math.trunc(precisionArg)));
|
|
10998
|
+
if (decimals === 0) {
|
|
10999
|
+
return Math.round(value);
|
|
11000
|
+
}
|
|
11001
|
+
const factor = Math.pow(10, decimals);
|
|
11002
|
+
return Math.round((value + Number.EPSILON) * factor) / factor;
|
|
10980
11003
|
},
|
|
10981
11004
|
},
|
|
10982
11005
|
{
|
|
@@ -11487,7 +11510,7 @@ function hasPath(target, path) {
|
|
|
11487
11510
|
return true;
|
|
11488
11511
|
}
|
|
11489
11512
|
|
|
11490
|
-
const DEFAULT_JSON_LOGIC$
|
|
11513
|
+
const DEFAULT_JSON_LOGIC$4 = new PraxisJsonLogicService(null);
|
|
11491
11514
|
const FORM_RULE_OPTIONS = {
|
|
11492
11515
|
availableRoots: ['form'],
|
|
11493
11516
|
defaultRoot: 'form',
|
|
@@ -11675,7 +11698,7 @@ function matchesConditionalValidationRule(jsonLogic, condition, model) {
|
|
|
11675
11698
|
throw error;
|
|
11676
11699
|
}
|
|
11677
11700
|
}
|
|
11678
|
-
function composeConditionalValidators(rules, jsonLogic = DEFAULT_JSON_LOGIC$
|
|
11701
|
+
function composeConditionalValidators(rules, jsonLogic = DEFAULT_JSON_LOGIC$4) {
|
|
11679
11702
|
// Build per-rule validators once
|
|
11680
11703
|
const built = rules.map((r) => buildValidatorsFromValidatorOptions(r.validators, jsonLogic));
|
|
11681
11704
|
const sync = (control) => {
|
|
@@ -11920,7 +11943,7 @@ function buildAngularValidators(field) {
|
|
|
11920
11943
|
av.push(uniqueAsyncValidator(field.uniqueValidator, field.uniqueMessage));
|
|
11921
11944
|
// Conditional (canonical declarative array)
|
|
11922
11945
|
if (Array.isArray(field.conditionalValidation)) {
|
|
11923
|
-
const composed = composeConditionalValidators(field.conditionalValidation, DEFAULT_JSON_LOGIC$
|
|
11946
|
+
const composed = composeConditionalValidators(field.conditionalValidation, DEFAULT_JSON_LOGIC$4);
|
|
11924
11947
|
if (composed.sync)
|
|
11925
11948
|
v.push(composed.sync);
|
|
11926
11949
|
if (composed.async)
|
|
@@ -11938,7 +11961,7 @@ function isBooleanRequiredField(field) {
|
|
|
11938
11961
|
const type = String(field.type ?? field.dataType ?? '').toLowerCase();
|
|
11939
11962
|
return type === 'boolean' || controlType === 'checkbox' || controlType === 'toggle';
|
|
11940
11963
|
}
|
|
11941
|
-
function buildValidatorsFromValidatorOptions(opts = {}, jsonLogic = DEFAULT_JSON_LOGIC$
|
|
11964
|
+
function buildValidatorsFromValidatorOptions(opts = {}, jsonLogic = DEFAULT_JSON_LOGIC$4) {
|
|
11942
11965
|
const v = [];
|
|
11943
11966
|
let av = [];
|
|
11944
11967
|
if (opts.required)
|
|
@@ -15593,6 +15616,70 @@ class PraxisBulkClientService {
|
|
|
15593
15616
|
})
|
|
15594
15617
|
.pipe(map((res) => this.unwrap(res)));
|
|
15595
15618
|
}
|
|
15619
|
+
/**
|
|
15620
|
+
* Consulta a pagina de resultados por item de uma proposta (cursor-based pagination).
|
|
15621
|
+
*/
|
|
15622
|
+
getProposalResults(proposalResultsOp, proposalId, size = 100, after, options) {
|
|
15623
|
+
const path = this.interpolatePath(this.extractOpPath(proposalResultsOp), { proposalId });
|
|
15624
|
+
const baseUrl = this.resolveUrl(path, options);
|
|
15625
|
+
const sep = baseUrl.includes('?') ? '&' : '?';
|
|
15626
|
+
const cursorParam = after ? `&after=${encodeURIComponent(after)}` : '';
|
|
15627
|
+
const url = `${baseUrl}${sep}size=${encodeURIComponent(String(size))}${cursorParam}`;
|
|
15628
|
+
const headers = this.buildHeaders(options);
|
|
15629
|
+
const method = this.extractOpMethod(proposalResultsOp, 'GET');
|
|
15630
|
+
return this.http
|
|
15631
|
+
.request(method, url, { headers })
|
|
15632
|
+
.pipe(map((res) => {
|
|
15633
|
+
const raw = this.unwrap(res);
|
|
15634
|
+
const items = Array.isArray(raw?.items)
|
|
15635
|
+
? raw.items
|
|
15636
|
+
: Array.isArray(raw?.content)
|
|
15637
|
+
? raw.content
|
|
15638
|
+
: [];
|
|
15639
|
+
const nextCursor = raw?.nextCursor ?? raw?.next ?? null;
|
|
15640
|
+
return {
|
|
15641
|
+
...raw,
|
|
15642
|
+
items,
|
|
15643
|
+
nextCursor,
|
|
15644
|
+
hasMore: Boolean(raw?.hasMore ?? nextCursor),
|
|
15645
|
+
};
|
|
15646
|
+
}));
|
|
15647
|
+
}
|
|
15648
|
+
/**
|
|
15649
|
+
* Consulta a pagina de resultados por item de uma execucao (cursor-based pagination).
|
|
15650
|
+
*/
|
|
15651
|
+
getExecutionResults(resultsOp, executionId, size = 100, after, options) {
|
|
15652
|
+
const path = this.interpolatePath(this.extractOpPath(resultsOp), { executionId });
|
|
15653
|
+
const baseUrl = this.resolveUrl(path, options);
|
|
15654
|
+
const sep = baseUrl.includes('?') ? '&' : '?';
|
|
15655
|
+
const cursorParam = after ? `&after=${encodeURIComponent(after)}` : '';
|
|
15656
|
+
const url = `${baseUrl}${sep}size=${encodeURIComponent(String(size))}${cursorParam}`;
|
|
15657
|
+
const headers = this.buildHeaders(options);
|
|
15658
|
+
const method = this.extractOpMethod(resultsOp, 'GET');
|
|
15659
|
+
return this.http
|
|
15660
|
+
.request(method, url, { headers })
|
|
15661
|
+
.pipe(map((res) => {
|
|
15662
|
+
const raw = this.unwrap(res);
|
|
15663
|
+
const items = Array.isArray(raw?.items)
|
|
15664
|
+
? raw.items
|
|
15665
|
+
: Array.isArray(raw?.content)
|
|
15666
|
+
? raw.content
|
|
15667
|
+
: [];
|
|
15668
|
+
const nextCursor = raw?.nextCursor ?? raw?.next ?? null;
|
|
15669
|
+
return {
|
|
15670
|
+
...raw,
|
|
15671
|
+
items,
|
|
15672
|
+
nextCursor,
|
|
15673
|
+
hasMore: Boolean(raw?.hasMore ?? nextCursor),
|
|
15674
|
+
};
|
|
15675
|
+
}));
|
|
15676
|
+
}
|
|
15677
|
+
/**
|
|
15678
|
+
* Busca o schema canonico referenciado por uma operacao ou contrato de campos editaveis.
|
|
15679
|
+
*/
|
|
15680
|
+
fetchSchema(schemaUrl, options) {
|
|
15681
|
+
return this.discovery.getSchemaByUrl(schemaUrl, options);
|
|
15682
|
+
}
|
|
15596
15683
|
/**
|
|
15597
15684
|
* Solicita cancelamento de uma execucao em andamento.
|
|
15598
15685
|
*/
|
|
@@ -15631,20 +15718,32 @@ class PraxisBulkClientService {
|
|
|
15631
15718
|
return this.discovery.resolveHref(path, options);
|
|
15632
15719
|
}
|
|
15633
15720
|
interpolatePath(path, params) {
|
|
15721
|
+
const hadProposalPlaceholder = path.includes('{proposalId}');
|
|
15722
|
+
const hadExecutionPlaceholder = path.includes('{executionId}');
|
|
15634
15723
|
let result = path;
|
|
15635
15724
|
for (const [key, val] of Object.entries(params)) {
|
|
15636
15725
|
const placeholder = `{${key}}`;
|
|
15637
15726
|
if (result.includes(placeholder)) {
|
|
15638
|
-
result = result.
|
|
15727
|
+
result = result.split(placeholder).join(encodeURIComponent(String(val)));
|
|
15639
15728
|
}
|
|
15640
15729
|
}
|
|
15641
15730
|
const [basePath, query] = result.split('?');
|
|
15642
15731
|
let updatedBase = basePath;
|
|
15643
|
-
|
|
15644
|
-
|
|
15732
|
+
const hasPathSegment = (targetPath, encodedSegment) => {
|
|
15733
|
+
const escaped = encodedSegment.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
15734
|
+
return new RegExp(`(^|/)${escaped}(/|$)`).test(targetPath);
|
|
15735
|
+
};
|
|
15736
|
+
if (params['proposalId'] != null && !hadProposalPlaceholder) {
|
|
15737
|
+
const encodedProposalId = encodeURIComponent(String(params['proposalId']));
|
|
15738
|
+
if (!hasPathSegment(updatedBase, encodedProposalId)) {
|
|
15739
|
+
updatedBase = `${updatedBase.replace(/\/+$/, '')}/${encodedProposalId}`;
|
|
15740
|
+
}
|
|
15645
15741
|
}
|
|
15646
|
-
else if (params['executionId']
|
|
15647
|
-
|
|
15742
|
+
else if (params['executionId'] != null && !hadExecutionPlaceholder) {
|
|
15743
|
+
const encodedExecutionId = encodeURIComponent(String(params['executionId']));
|
|
15744
|
+
if (!hasPathSegment(updatedBase, encodedExecutionId)) {
|
|
15745
|
+
updatedBase = `${updatedBase.replace(/\/+$/, '')}/${encodedExecutionId}`;
|
|
15746
|
+
}
|
|
15648
15747
|
}
|
|
15649
15748
|
return query != null ? `${updatedBase}?${query}` : updatedBase;
|
|
15650
15749
|
}
|
|
@@ -39360,7 +39459,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
39360
39459
|
args: [{ providedIn: 'root' }]
|
|
39361
39460
|
}] });
|
|
39362
39461
|
|
|
39363
|
-
const DEFAULT_JSON_LOGIC$
|
|
39462
|
+
const DEFAULT_JSON_LOGIC$3 = new PraxisJsonLogicService(null);
|
|
39364
39463
|
class WidgetPageStateRuntimeService {
|
|
39365
39464
|
jsonLogic;
|
|
39366
39465
|
connections = new ConnectionManagerService();
|
|
@@ -39374,7 +39473,7 @@ class WidgetPageStateRuntimeService {
|
|
|
39374
39473
|
defaultRoot: 'state',
|
|
39375
39474
|
allowImplicitRoot: true,
|
|
39376
39475
|
};
|
|
39377
|
-
constructor(jsonLogic = DEFAULT_JSON_LOGIC$
|
|
39476
|
+
constructor(jsonLogic = DEFAULT_JSON_LOGIC$3) {
|
|
39378
39477
|
this.jsonLogic = jsonLogic;
|
|
39379
39478
|
}
|
|
39380
39479
|
normalizeState(state) {
|
|
@@ -39872,6 +39971,282 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
39872
39971
|
args: [{ providedIn: 'root' }]
|
|
39873
39972
|
}], ctorParameters: () => [{ type: PraxisJsonLogicService }] });
|
|
39874
39973
|
|
|
39974
|
+
const DEFAULT_JSON_LOGIC$2 = new PraxisJsonLogicService(null);
|
|
39975
|
+
class WidgetPageDataSourceRuntimeService {
|
|
39976
|
+
http = inject(HttpClient, { optional: true });
|
|
39977
|
+
apiUrlConfig = inject(API_URL, { optional: true });
|
|
39978
|
+
jsonLogic = inject(PraxisJsonLogicService, { optional: true }) || DEFAULT_JSON_LOGIC$2;
|
|
39979
|
+
connections = inject(ConnectionManagerService);
|
|
39980
|
+
/**
|
|
39981
|
+
* Constrói a URL canônica completa para o resourcePath declarado no dataSource.
|
|
39982
|
+
*/
|
|
39983
|
+
resolveUrl(resourcePath) {
|
|
39984
|
+
const trimmed = (resourcePath || '').trim();
|
|
39985
|
+
if (!trimmed)
|
|
39986
|
+
return '';
|
|
39987
|
+
if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) {
|
|
39988
|
+
return trimmed;
|
|
39989
|
+
}
|
|
39990
|
+
let base = '';
|
|
39991
|
+
if (this.apiUrlConfig) {
|
|
39992
|
+
const entry = this.apiUrlConfig['default'] || Object.values(this.apiUrlConfig)[0];
|
|
39993
|
+
if (entry) {
|
|
39994
|
+
base = buildApiUrl(entry);
|
|
39995
|
+
}
|
|
39996
|
+
}
|
|
39997
|
+
if (!base) {
|
|
39998
|
+
return trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
|
|
39999
|
+
}
|
|
40000
|
+
const cleanBase = base.replace(/\/+$/, '');
|
|
40001
|
+
const cleanPath = trimmed.replace(/^\/+/, '');
|
|
40002
|
+
return `${cleanBase}/${cleanPath}`;
|
|
40003
|
+
}
|
|
40004
|
+
/**
|
|
40005
|
+
* Executa uma única consulta para um DataSource e retorna o resultado transformado.
|
|
40006
|
+
*/
|
|
40007
|
+
fetchDataSource(dataSource) {
|
|
40008
|
+
if (!this.http) {
|
|
40009
|
+
return of(dataSource.fallbackValue ?? null);
|
|
40010
|
+
}
|
|
40011
|
+
const url = this.resolveUrl(dataSource.resourcePath);
|
|
40012
|
+
if (!url) {
|
|
40013
|
+
return of(dataSource.fallbackValue ?? null);
|
|
40014
|
+
}
|
|
40015
|
+
return this.executeRawRequest(dataSource, url).pipe(catchError((error) => {
|
|
40016
|
+
if (dataSource.errorPolicy === 'fallback' && dataSource.fallbackValue !== undefined) {
|
|
40017
|
+
return of(this.clone(dataSource.fallbackValue));
|
|
40018
|
+
}
|
|
40019
|
+
if (dataSource.errorPolicy === 'silent') {
|
|
40020
|
+
return EMPTY;
|
|
40021
|
+
}
|
|
40022
|
+
if (dataSource.errorPolicy === 'propagate') {
|
|
40023
|
+
return throwError(() => error);
|
|
40024
|
+
}
|
|
40025
|
+
if (dataSource.fallbackValue !== undefined) {
|
|
40026
|
+
return of(this.clone(dataSource.fallbackValue));
|
|
40027
|
+
}
|
|
40028
|
+
return throwError(() => error);
|
|
40029
|
+
}));
|
|
40030
|
+
}
|
|
40031
|
+
executeRawRequest(dataSource, resolvedUrl) {
|
|
40032
|
+
if (!this.http) {
|
|
40033
|
+
return of(dataSource.fallbackValue ?? null);
|
|
40034
|
+
}
|
|
40035
|
+
const url = resolvedUrl ?? this.resolveUrl(dataSource.resourcePath);
|
|
40036
|
+
if (!url) {
|
|
40037
|
+
return of(dataSource.fallbackValue ?? null);
|
|
40038
|
+
}
|
|
40039
|
+
const method = dataSource.method ??
|
|
40040
|
+
(dataSource.kind === 'stats-query' || dataSource.resourcePath.includes('/stats/')
|
|
40041
|
+
? 'POST'
|
|
40042
|
+
: 'GET');
|
|
40043
|
+
let request$;
|
|
40044
|
+
if (method === 'POST') {
|
|
40045
|
+
request$ = this.http.post(url, dataSource.query || {});
|
|
40046
|
+
}
|
|
40047
|
+
else {
|
|
40048
|
+
let params = new HttpParams();
|
|
40049
|
+
if (dataSource.query && typeof dataSource.query === 'object') {
|
|
40050
|
+
for (const [key, val] of Object.entries(dataSource.query)) {
|
|
40051
|
+
if (Array.isArray(val)) {
|
|
40052
|
+
for (const item of val) {
|
|
40053
|
+
if (item !== undefined && item !== null) {
|
|
40054
|
+
params = params.append(key, String(item));
|
|
40055
|
+
}
|
|
40056
|
+
}
|
|
40057
|
+
}
|
|
40058
|
+
else if (val !== undefined && val !== null) {
|
|
40059
|
+
params = params.set(key, String(val));
|
|
40060
|
+
}
|
|
40061
|
+
}
|
|
40062
|
+
}
|
|
40063
|
+
request$ = this.http.get(url, { params });
|
|
40064
|
+
}
|
|
40065
|
+
return request$.pipe(map((res) => this.transformPayload(res, dataSource)));
|
|
40066
|
+
}
|
|
40067
|
+
/**
|
|
40068
|
+
* Inicia a orquestração reativa de todos os DataSources declarados em uma página dinâmica.
|
|
40069
|
+
* Retorna uma função de teardown que cancela todas as requisições em voo e timers de polling.
|
|
40070
|
+
*/
|
|
40071
|
+
startDataSources(dataSources, onUpdate, onDiagnostic) {
|
|
40072
|
+
if (!dataSources || !dataSources.length) {
|
|
40073
|
+
return () => { };
|
|
40074
|
+
}
|
|
40075
|
+
const destroy$ = new Subject();
|
|
40076
|
+
for (const ds of dataSources) {
|
|
40077
|
+
if (ds.autoFetch === false) {
|
|
40078
|
+
continue;
|
|
40079
|
+
}
|
|
40080
|
+
const targetPath = ds.targetStatePath || ds.id;
|
|
40081
|
+
const intervalMs = ds.refreshIntervalMs ?? 0;
|
|
40082
|
+
let hasSucceededOnce = false;
|
|
40083
|
+
onDiagnostic?.({
|
|
40084
|
+
dataSourceId: ds.id,
|
|
40085
|
+
status: 'loading',
|
|
40086
|
+
});
|
|
40087
|
+
const runSingleFetch$ = () => this.executeRawRequest(ds).pipe(map((value) => {
|
|
40088
|
+
hasSucceededOnce = true;
|
|
40089
|
+
const now = new Date().toISOString();
|
|
40090
|
+
onDiagnostic?.({
|
|
40091
|
+
dataSourceId: ds.id,
|
|
40092
|
+
status: 'success',
|
|
40093
|
+
lastUpdated: now,
|
|
40094
|
+
});
|
|
40095
|
+
onUpdate({
|
|
40096
|
+
dataSourceId: ds.id,
|
|
40097
|
+
targetStatePath: targetPath,
|
|
40098
|
+
value,
|
|
40099
|
+
fetchedAt: now,
|
|
40100
|
+
});
|
|
40101
|
+
return value;
|
|
40102
|
+
}), catchError((err) => {
|
|
40103
|
+
onDiagnostic?.({
|
|
40104
|
+
dataSourceId: ds.id,
|
|
40105
|
+
status: 'error',
|
|
40106
|
+
error: err?.message || String(err),
|
|
40107
|
+
});
|
|
40108
|
+
if (!hasSucceededOnce &&
|
|
40109
|
+
ds.errorPolicy !== 'silent' &&
|
|
40110
|
+
ds.errorPolicy !== 'propagate' &&
|
|
40111
|
+
ds.fallbackValue !== undefined) {
|
|
40112
|
+
onUpdate({
|
|
40113
|
+
dataSourceId: ds.id,
|
|
40114
|
+
targetStatePath: targetPath,
|
|
40115
|
+
value: this.clone(ds.fallbackValue),
|
|
40116
|
+
fetchedAt: new Date().toISOString(),
|
|
40117
|
+
});
|
|
40118
|
+
}
|
|
40119
|
+
return EMPTY;
|
|
40120
|
+
}));
|
|
40121
|
+
const stream$ = intervalMs > 0
|
|
40122
|
+
? timer(0, intervalMs).pipe(takeUntil(destroy$), switchMap(() => {
|
|
40123
|
+
if (typeof document !== 'undefined' &&
|
|
40124
|
+
document.visibilityState === 'hidden') {
|
|
40125
|
+
return EMPTY;
|
|
40126
|
+
}
|
|
40127
|
+
return runSingleFetch$();
|
|
40128
|
+
}))
|
|
40129
|
+
: runSingleFetch$().pipe(takeUntil(destroy$));
|
|
40130
|
+
stream$.subscribe();
|
|
40131
|
+
}
|
|
40132
|
+
return () => {
|
|
40133
|
+
destroy$.next();
|
|
40134
|
+
destroy$.complete();
|
|
40135
|
+
};
|
|
40136
|
+
}
|
|
40137
|
+
/**
|
|
40138
|
+
* Transforma a resposta bruta do backend aplicando envelope canônico ou JsonLogic.
|
|
40139
|
+
*/
|
|
40140
|
+
transformPayload(raw, dataSource) {
|
|
40141
|
+
if (raw == null)
|
|
40142
|
+
return raw;
|
|
40143
|
+
let payload = raw;
|
|
40144
|
+
// Se a resposta vier no envelope padrão REST { data: ... } e não for um array puro
|
|
40145
|
+
if (typeof raw === 'object' &&
|
|
40146
|
+
!Array.isArray(raw) &&
|
|
40147
|
+
'data' in raw &&
|
|
40148
|
+
raw.data !== undefined) {
|
|
40149
|
+
payload = raw.data;
|
|
40150
|
+
}
|
|
40151
|
+
const transform = dataSource.transform;
|
|
40152
|
+
if (!transform) {
|
|
40153
|
+
return payload;
|
|
40154
|
+
}
|
|
40155
|
+
if (typeof transform === 'object' &&
|
|
40156
|
+
transform !== null &&
|
|
40157
|
+
'kind' in transform) {
|
|
40158
|
+
const transformObj = transform;
|
|
40159
|
+
const kind = transformObj['kind'];
|
|
40160
|
+
if (kind === 'path' && typeof transformObj['path'] === 'string') {
|
|
40161
|
+
const extracted = this.connections.extractByPath(payload, transformObj['path']);
|
|
40162
|
+
return extracted !== undefined
|
|
40163
|
+
? extracted
|
|
40164
|
+
: this.connections.extractByPath(raw, transformObj['path']);
|
|
40165
|
+
}
|
|
40166
|
+
if (kind === 'group-by-map') {
|
|
40167
|
+
const rawBuckets = raw?.buckets ??
|
|
40168
|
+
payload?.buckets ??
|
|
40169
|
+
(Array.isArray(raw) ? raw : Array.isArray(payload) ? payload : []);
|
|
40170
|
+
const buckets = Array.isArray(rawBuckets) ? rawBuckets : [];
|
|
40171
|
+
const mappings = transformObj['mappings'] || {};
|
|
40172
|
+
const totalField = transformObj['totalField'];
|
|
40173
|
+
const result = {};
|
|
40174
|
+
for (const targetField of Object.values(mappings)) {
|
|
40175
|
+
if (typeof targetField === 'string' && targetField.trim()) {
|
|
40176
|
+
result[targetField] = 0;
|
|
40177
|
+
}
|
|
40178
|
+
}
|
|
40179
|
+
let total = 0;
|
|
40180
|
+
for (const bucket of buckets) {
|
|
40181
|
+
const keyStr = String(bucket?.key ?? '');
|
|
40182
|
+
const val = Number(bucket?.value ?? bucket?.count ?? 0);
|
|
40183
|
+
const safeVal = Number.isFinite(val) ? val : 0;
|
|
40184
|
+
total += safeVal;
|
|
40185
|
+
const mappedField = mappings[keyStr];
|
|
40186
|
+
if (mappedField) {
|
|
40187
|
+
result[mappedField] = (result[mappedField] || 0) + safeVal;
|
|
40188
|
+
}
|
|
40189
|
+
}
|
|
40190
|
+
if (totalField) {
|
|
40191
|
+
result[totalField] = total;
|
|
40192
|
+
}
|
|
40193
|
+
return result;
|
|
40194
|
+
}
|
|
40195
|
+
if (kind === 'timeseries-last') {
|
|
40196
|
+
const rawPoints = raw?.points ??
|
|
40197
|
+
payload?.points ??
|
|
40198
|
+
(Array.isArray(raw) ? raw : Array.isArray(payload) ? payload : []);
|
|
40199
|
+
const points = Array.isArray(rawPoints) ? rawPoints : [];
|
|
40200
|
+
if (!points.length) {
|
|
40201
|
+
return {};
|
|
40202
|
+
}
|
|
40203
|
+
const lastPoint = points[points.length - 1];
|
|
40204
|
+
const mappings = transformObj['mappings'] || {};
|
|
40205
|
+
const result = {};
|
|
40206
|
+
for (const [sourcePath, targetKey] of Object.entries(mappings)) {
|
|
40207
|
+
let extracted = this.connections.extractByPath(lastPoint, sourcePath);
|
|
40208
|
+
if (extracted === undefined && sourcePath.startsWith('values.')) {
|
|
40209
|
+
extracted = lastPoint?.value;
|
|
40210
|
+
}
|
|
40211
|
+
if (extracted === undefined && sourcePath === 'label') {
|
|
40212
|
+
extracted = lastPoint?.period ?? lastPoint?.start ?? lastPoint?.bucket;
|
|
40213
|
+
}
|
|
40214
|
+
if (extracted !== undefined) {
|
|
40215
|
+
result[String(targetKey)] = extracted;
|
|
40216
|
+
}
|
|
40217
|
+
}
|
|
40218
|
+
return result;
|
|
40219
|
+
}
|
|
40220
|
+
}
|
|
40221
|
+
try {
|
|
40222
|
+
return this.jsonLogic.evaluate(transform, {
|
|
40223
|
+
data: payload,
|
|
40224
|
+
response: raw,
|
|
40225
|
+
result: payload,
|
|
40226
|
+
});
|
|
40227
|
+
}
|
|
40228
|
+
catch {
|
|
40229
|
+
return payload;
|
|
40230
|
+
}
|
|
40231
|
+
}
|
|
40232
|
+
clone(val) {
|
|
40233
|
+
if (val == null || typeof val !== 'object')
|
|
40234
|
+
return val;
|
|
40235
|
+
try {
|
|
40236
|
+
return JSON.parse(JSON.stringify(val));
|
|
40237
|
+
}
|
|
40238
|
+
catch {
|
|
40239
|
+
return val;
|
|
40240
|
+
}
|
|
40241
|
+
}
|
|
40242
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: WidgetPageDataSourceRuntimeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
40243
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: WidgetPageDataSourceRuntimeService, providedIn: 'root' });
|
|
40244
|
+
}
|
|
40245
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: WidgetPageDataSourceRuntimeService, decorators: [{
|
|
40246
|
+
type: Injectable,
|
|
40247
|
+
args: [{ providedIn: 'root' }]
|
|
40248
|
+
}] });
|
|
40249
|
+
|
|
39875
40250
|
const TRANSFORM_CATALOG = [
|
|
39876
40251
|
{
|
|
39877
40252
|
kind: 'format-value', phase: 'link-propagation', label: 'Format Value',
|
|
@@ -45335,6 +45710,12 @@ class DynamicWidgetPageComponent {
|
|
|
45335
45710
|
})();
|
|
45336
45711
|
conn = inject(ConnectionManagerService);
|
|
45337
45712
|
stateRuntime = inject(WidgetPageStateRuntimeService);
|
|
45713
|
+
dataSourceRuntime = inject(WidgetPageDataSourceRuntimeService);
|
|
45714
|
+
dataSourceTeardown;
|
|
45715
|
+
currentDataSourcesSignature = null;
|
|
45716
|
+
pendingDataSourceUpdates = [];
|
|
45717
|
+
isCoalescingDataSourceUpdates = false;
|
|
45718
|
+
dataSourceRuntimeOverlay = new Map();
|
|
45338
45719
|
nestedWidgetAccessor = new NestedWidgetConfigAccessor();
|
|
45339
45720
|
settingsPanel = inject(SETTINGS_PANEL_BRIDGE, {
|
|
45340
45721
|
optional: true,
|
|
@@ -45420,6 +45801,12 @@ class DynamicWidgetPageComponent {
|
|
|
45420
45801
|
afterNextRender({ read: () => this.observeHostWidth() });
|
|
45421
45802
|
}
|
|
45422
45803
|
ngOnDestroy() {
|
|
45804
|
+
this.dataSourceTeardown?.();
|
|
45805
|
+
this.dataSourceTeardown = undefined;
|
|
45806
|
+
this.currentDataSourcesSignature = null;
|
|
45807
|
+
this.pendingDataSourceUpdates = [];
|
|
45808
|
+
this.isCoalescingDataSourceUpdates = false;
|
|
45809
|
+
this.dataSourceRuntimeOverlay.clear();
|
|
45423
45810
|
this.persistenceGeneration++;
|
|
45424
45811
|
this.persistenceLoad?.unsubscribe();
|
|
45425
45812
|
this.persistenceMutation?.unsubscribe();
|
|
@@ -45500,12 +45887,17 @@ class DynamicWidgetPageComponent {
|
|
|
45500
45887
|
state: this.stateRuntime.normalizeState(resolvedPage.state),
|
|
45501
45888
|
}
|
|
45502
45889
|
: resolvedPage;
|
|
45890
|
+
if (changes['pageIdentity'] ||
|
|
45891
|
+
this.getDataSourcesSignature(this.pageDefinition?.dataSources) !==
|
|
45892
|
+
this.currentDataSourcesSignature) {
|
|
45893
|
+
this.dataSourceRuntimeOverlay.clear();
|
|
45894
|
+
}
|
|
45503
45895
|
this.pageRuntime = this.buildStateRuntime(this.pageDefinition?.state, this.pageDefinition?.context);
|
|
45504
45896
|
this.pageState = this.pageRuntime.state;
|
|
45505
45897
|
const bootstrapSnapshot = this.bootstrapCompositionAdapter(this.pageDefinition);
|
|
45506
45898
|
const rawWidgets = this.pageDefinition?.widgets || [];
|
|
45507
45899
|
let widgets = this.applyEditShellActions(rawWidgets);
|
|
45508
|
-
widgets = this.applyBootstrapCompositionHydration(widgets, bootstrapSnapshot);
|
|
45900
|
+
widgets = this.applyBootstrapCompositionHydration(widgets, bootstrapSnapshot, this.pageRuntime);
|
|
45509
45901
|
widgets = this.applyChildCustomizationProjection(widgets);
|
|
45510
45902
|
this.pageDefinition = this.pageDefinition
|
|
45511
45903
|
? { ...this.pageDefinition, widgets }
|
|
@@ -45513,6 +45905,7 @@ class DynamicWidgetPageComponent {
|
|
|
45513
45905
|
this.page = this.pageDefinition;
|
|
45514
45906
|
this.applyResponsivePresentation(this.pageDefinition, widgets, this.pageRuntime);
|
|
45515
45907
|
this.reportStateDiagnostics(this.pageRuntime.diagnostics);
|
|
45908
|
+
this.restartDataSources(this.pageDefinition);
|
|
45516
45909
|
}
|
|
45517
45910
|
if (!changes['page'] &&
|
|
45518
45911
|
!changes['context'] &&
|
|
@@ -45792,7 +46185,38 @@ class DynamicWidgetPageComponent {
|
|
|
45792
46185
|
return projected.length ? Object.fromEntries(projected) : null;
|
|
45793
46186
|
}
|
|
45794
46187
|
buildStateRuntime(state, pageContext) {
|
|
45795
|
-
|
|
46188
|
+
const normalizedAuthoredState = this.stateRuntime.normalizeState(state);
|
|
46189
|
+
if (this.dataSourceRuntimeOverlay.size === 0) {
|
|
46190
|
+
return this.stateRuntime.buildRuntimeSnapshot(normalizedAuthoredState, this.buildStateContext(pageContext));
|
|
46191
|
+
}
|
|
46192
|
+
let mergedValues = this.cloneStateValues(normalizedAuthoredState.values || {});
|
|
46193
|
+
for (const [targetPath, rawValue] of this.dataSourceRuntimeOverlay.entries()) {
|
|
46194
|
+
const existingAtTarget = this.conn.extractByPath(mergedValues, targetPath);
|
|
46195
|
+
let incomingValue = this.cloneStateValues(rawValue);
|
|
46196
|
+
if (existingAtTarget != null &&
|
|
46197
|
+
typeof existingAtTarget === 'object' &&
|
|
46198
|
+
!Array.isArray(existingAtTarget) &&
|
|
46199
|
+
incomingValue != null &&
|
|
46200
|
+
typeof incomingValue === 'object' &&
|
|
46201
|
+
!Array.isArray(incomingValue)) {
|
|
46202
|
+
incomingValue = { ...existingAtTarget, ...incomingValue };
|
|
46203
|
+
}
|
|
46204
|
+
mergedValues = this.conn.setValueAtPath(mergedValues, targetPath, incomingValue);
|
|
46205
|
+
}
|
|
46206
|
+
const effectiveStateInput = {
|
|
46207
|
+
...normalizedAuthoredState,
|
|
46208
|
+
values: mergedValues,
|
|
46209
|
+
};
|
|
46210
|
+
const snapshot = this.stateRuntime.buildRuntimeSnapshot(effectiveStateInput, this.buildStateContext(pageContext));
|
|
46211
|
+
return {
|
|
46212
|
+
...snapshot,
|
|
46213
|
+
state: normalizedAuthoredState,
|
|
46214
|
+
};
|
|
46215
|
+
}
|
|
46216
|
+
getDataSourcesSignature(dataSources) {
|
|
46217
|
+
return dataSources && dataSources.length > 0
|
|
46218
|
+
? JSON.stringify(dataSources)
|
|
46219
|
+
: null;
|
|
45796
46220
|
}
|
|
45797
46221
|
bootstrapCompositionAdapter(page) {
|
|
45798
46222
|
if (!page) {
|
|
@@ -45842,13 +46266,20 @@ class DynamicWidgetPageComponent {
|
|
|
45842
46266
|
};
|
|
45843
46267
|
});
|
|
45844
46268
|
}
|
|
45845
|
-
applyBootstrapCompositionHydration(widgets, bootstrapSnapshot) {
|
|
46269
|
+
applyBootstrapCompositionHydration(widgets, bootstrapSnapshot, runtime) {
|
|
45846
46270
|
if (!this.compositionDefinition || !bootstrapSnapshot) {
|
|
45847
46271
|
return this.cloneWidgets(widgets);
|
|
45848
46272
|
}
|
|
46273
|
+
const effectiveState = runtime
|
|
46274
|
+
? {
|
|
46275
|
+
...bootstrapSnapshot.state,
|
|
46276
|
+
primaryValues: this.cloneStateValues(runtime.primaryValues),
|
|
46277
|
+
derivedValues: this.cloneStateValues(runtime.derivedValues),
|
|
46278
|
+
}
|
|
46279
|
+
: bootstrapSnapshot.state;
|
|
45849
46280
|
const projected = this.compositionRuntime.projectStateWidgetInputs(this.compositionDefinition, {
|
|
45850
46281
|
widgets,
|
|
45851
|
-
state:
|
|
46282
|
+
state: effectiveState,
|
|
45852
46283
|
now: bootstrapSnapshot.generatedAt,
|
|
45853
46284
|
}).widgets;
|
|
45854
46285
|
return this.applyRecordRelatedSurfaceAiContext(projected);
|
|
@@ -46734,13 +47165,19 @@ class DynamicWidgetPageComponent {
|
|
|
46734
47165
|
if (widget.definition?.id !== 'praxis-rich-content') {
|
|
46735
47166
|
return widget;
|
|
46736
47167
|
}
|
|
47168
|
+
const authoredContext = (widget.definition.inputs?.['context'] || {});
|
|
47169
|
+
const mergedRichContext = {
|
|
47170
|
+
...(runtime.effectiveValues || {}),
|
|
47171
|
+
...authoredContext,
|
|
47172
|
+
};
|
|
46737
47173
|
return {
|
|
46738
47174
|
...widget,
|
|
46739
47175
|
definition: {
|
|
46740
47176
|
...widget.definition,
|
|
46741
47177
|
inputs: {
|
|
46742
47178
|
...(widget.definition.inputs || {}),
|
|
46743
|
-
|
|
47179
|
+
context: mergedRichContext,
|
|
47180
|
+
hostCapabilities: this.buildRichContentHostCapabilities(widget.key, runtime, mergedRichContext),
|
|
46744
47181
|
},
|
|
46745
47182
|
},
|
|
46746
47183
|
};
|
|
@@ -47342,7 +47779,27 @@ class DynamicWidgetPageComponent {
|
|
|
47342
47779
|
return raw;
|
|
47343
47780
|
}
|
|
47344
47781
|
lookup(ctx, path) {
|
|
47345
|
-
|
|
47782
|
+
if (ctx == null || !path)
|
|
47783
|
+
return undefined;
|
|
47784
|
+
const direct = path.split('.').reduce((acc, key) => acc?.[key], ctx);
|
|
47785
|
+
if (direct !== undefined)
|
|
47786
|
+
return direct;
|
|
47787
|
+
if (ctx.state) {
|
|
47788
|
+
const fromState = path.split('.').reduce((acc, key) => acc?.[key], ctx.state);
|
|
47789
|
+
if (fromState !== undefined)
|
|
47790
|
+
return fromState;
|
|
47791
|
+
}
|
|
47792
|
+
if (ctx.values) {
|
|
47793
|
+
const fromValues = path.split('.').reduce((acc, key) => acc?.[key], ctx.values);
|
|
47794
|
+
if (fromValues !== undefined)
|
|
47795
|
+
return fromValues;
|
|
47796
|
+
}
|
|
47797
|
+
if (ctx.context) {
|
|
47798
|
+
const fromContext = path.split('.').reduce((acc, key) => acc?.[key], ctx.context);
|
|
47799
|
+
if (fromContext !== undefined)
|
|
47800
|
+
return fromContext;
|
|
47801
|
+
}
|
|
47802
|
+
return undefined;
|
|
47346
47803
|
}
|
|
47347
47804
|
openWidgetShellSettings(key) {
|
|
47348
47805
|
if (!this.canOpenWidgetShellSettings())
|
|
@@ -48182,7 +48639,7 @@ class DynamicWidgetPageComponent {
|
|
|
48182
48639
|
const stateBoundWidgets = skipStateWidgetProjection
|
|
48183
48640
|
? normalizedWidgets
|
|
48184
48641
|
: bootstrapSnapshot
|
|
48185
|
-
? this.applyBootstrapCompositionHydration(normalizedWidgets, bootstrapSnapshot)
|
|
48642
|
+
? this.applyBootstrapCompositionHydration(normalizedWidgets, bootstrapSnapshot, runtime)
|
|
48186
48643
|
: this.compositionDefinition
|
|
48187
48644
|
? this.compositionRuntime.projectStateWidgetInputs(this.compositionDefinition, {
|
|
48188
48645
|
widgets: normalizedWidgets,
|
|
@@ -48204,6 +48661,7 @@ class DynamicWidgetPageComponent {
|
|
|
48204
48661
|
this.pageState = runtime.state;
|
|
48205
48662
|
this.pageRuntime = runtime;
|
|
48206
48663
|
this.applyResponsivePresentation(hydrated, hydrated?.widgets || stateBoundWidgets, runtime);
|
|
48664
|
+
this.restartDataSources(hydrated);
|
|
48207
48665
|
if (this.widgetEventBus) {
|
|
48208
48666
|
this.wiringSubscription?.unsubscribe();
|
|
48209
48667
|
if (hydrated?.wiring && hydrated.wiring.length > 0) {
|
|
@@ -48226,6 +48684,84 @@ class DynamicWidgetPageComponent {
|
|
|
48226
48684
|
this.savePage(canonicalPage);
|
|
48227
48685
|
}
|
|
48228
48686
|
}
|
|
48687
|
+
handleDataSourceUpdate(update) {
|
|
48688
|
+
if (this.destroyed || !this.pageDefinition) {
|
|
48689
|
+
return;
|
|
48690
|
+
}
|
|
48691
|
+
this.pendingDataSourceUpdates.push(update);
|
|
48692
|
+
if (this.isCoalescingDataSourceUpdates) {
|
|
48693
|
+
return;
|
|
48694
|
+
}
|
|
48695
|
+
this.isCoalescingDataSourceUpdates = true;
|
|
48696
|
+
queueMicrotask(() => this.flushPendingDataSourceUpdates());
|
|
48697
|
+
}
|
|
48698
|
+
flushPendingDataSourceUpdates() {
|
|
48699
|
+
this.isCoalescingDataSourceUpdates = false;
|
|
48700
|
+
if (this.destroyed || !this.pageDefinition || this.pendingDataSourceUpdates.length === 0) {
|
|
48701
|
+
this.pendingDataSourceUpdates = [];
|
|
48702
|
+
return;
|
|
48703
|
+
}
|
|
48704
|
+
const updates = [...this.pendingDataSourceUpdates];
|
|
48705
|
+
this.pendingDataSourceUpdates = [];
|
|
48706
|
+
for (const update of updates) {
|
|
48707
|
+
const existingAtTarget = this.dataSourceRuntimeOverlay.get(update.targetStatePath);
|
|
48708
|
+
let incomingValue = this.cloneStateValues(update.value);
|
|
48709
|
+
if (existingAtTarget != null &&
|
|
48710
|
+
typeof existingAtTarget === 'object' &&
|
|
48711
|
+
!Array.isArray(existingAtTarget) &&
|
|
48712
|
+
incomingValue != null &&
|
|
48713
|
+
typeof incomingValue === 'object' &&
|
|
48714
|
+
!Array.isArray(incomingValue)) {
|
|
48715
|
+
incomingValue = { ...existingAtTarget, ...incomingValue };
|
|
48716
|
+
}
|
|
48717
|
+
this.dataSourceRuntimeOverlay.set(update.targetStatePath, incomingValue);
|
|
48718
|
+
}
|
|
48719
|
+
const previousEffective = this.cloneStateValues(this.pageRuntime.effectiveValues);
|
|
48720
|
+
const nextRuntime = this.buildStateRuntime(this.pageDefinition.state, this.pageDefinition.context);
|
|
48721
|
+
if (this.areStateValuesEqual(previousEffective, nextRuntime.effectiveValues)) {
|
|
48722
|
+
return;
|
|
48723
|
+
}
|
|
48724
|
+
this.pageRuntime = nextRuntime;
|
|
48725
|
+
this.pageState = nextRuntime.state;
|
|
48726
|
+
let widgets = this.pageDefinition.widgets || [];
|
|
48727
|
+
if (this.compositionDefinition) {
|
|
48728
|
+
const projected = this.compositionRuntime.projectStateWidgetInputs(this.compositionDefinition, {
|
|
48729
|
+
widgets: this.applyEditShellActions(widgets),
|
|
48730
|
+
state: {
|
|
48731
|
+
primaryValues: this.cloneStateValues(nextRuntime.primaryValues),
|
|
48732
|
+
derivedValues: this.cloneStateValues(nextRuntime.derivedValues),
|
|
48733
|
+
transientValues: {},
|
|
48734
|
+
changedPaths: updates.map((u) => u.targetStatePath),
|
|
48735
|
+
diagnostics: [],
|
|
48736
|
+
},
|
|
48737
|
+
}).widgets;
|
|
48738
|
+
const hydrated = this.resolvePagePresets({
|
|
48739
|
+
...this.pageDefinition,
|
|
48740
|
+
widgets: this.applyChildCustomizationProjection(this.applyRecordRelatedSurfaceAiContext(projected)),
|
|
48741
|
+
});
|
|
48742
|
+
this.pageDefinition = hydrated;
|
|
48743
|
+
this.page = hydrated;
|
|
48744
|
+
widgets = hydrated?.widgets || projected;
|
|
48745
|
+
}
|
|
48746
|
+
this.applyResponsivePresentation(this.pageDefinition, widgets, nextRuntime);
|
|
48747
|
+
this.reportStateDiagnostics(nextRuntime.diagnostics);
|
|
48748
|
+
this.changeDetector.markForCheck();
|
|
48749
|
+
}
|
|
48750
|
+
restartDataSources(page) {
|
|
48751
|
+
const dataSources = page?.dataSources;
|
|
48752
|
+
const signature = this.getDataSourcesSignature(dataSources);
|
|
48753
|
+
if (signature === this.currentDataSourcesSignature) {
|
|
48754
|
+
return;
|
|
48755
|
+
}
|
|
48756
|
+
this.currentDataSourcesSignature = signature;
|
|
48757
|
+
this.dataSourceRuntimeOverlay.clear();
|
|
48758
|
+
this.dataSourceTeardown?.();
|
|
48759
|
+
this.dataSourceTeardown = undefined;
|
|
48760
|
+
if (!dataSources || dataSources.length === 0) {
|
|
48761
|
+
return;
|
|
48762
|
+
}
|
|
48763
|
+
this.dataSourceTeardown = this.dataSourceRuntime.startDataSources(dataSources, (update) => this.handleDataSourceUpdate(update));
|
|
48764
|
+
}
|
|
48229
48765
|
applyLayout(layout, grouping, deviceLayoutColumnsSelected = false) {
|
|
48230
48766
|
this.layout = layout;
|
|
48231
48767
|
this.canvas = undefined;
|
|
@@ -48263,6 +48799,8 @@ class DynamicWidgetPageComponent {
|
|
|
48263
48799
|
const merged = {
|
|
48264
48800
|
...baseContext,
|
|
48265
48801
|
...(inputContext || {}),
|
|
48802
|
+
...this.cloneStateValues(runtime.effectiveValues),
|
|
48803
|
+
state: this.cloneStateValues(runtime.effectiveValues),
|
|
48266
48804
|
pageDeviceKind: this.resolveDeviceKind(),
|
|
48267
48805
|
pageLayoutPreset: layoutPreset || null,
|
|
48268
48806
|
pageThemePreset: themePreset || null,
|
|
@@ -51214,7 +51752,26 @@ class DynamicWidgetPageComponent {
|
|
|
51214
51752
|
if (stored !== null || defaultPage) {
|
|
51215
51753
|
this.isHydrating = true;
|
|
51216
51754
|
try {
|
|
51217
|
-
const
|
|
51755
|
+
const baseline = defaultPage ?? this.authoredPageDefinition ?? this.pageDefinition;
|
|
51756
|
+
const loaded = stored && baseline
|
|
51757
|
+
? {
|
|
51758
|
+
...baseline,
|
|
51759
|
+
...stored,
|
|
51760
|
+
state: {
|
|
51761
|
+
...(baseline.state || {}),
|
|
51762
|
+
...(stored.state || {}),
|
|
51763
|
+
values: {
|
|
51764
|
+
...(baseline.state?.values || {}),
|
|
51765
|
+
...(stored.state?.values || {}),
|
|
51766
|
+
},
|
|
51767
|
+
derived: {
|
|
51768
|
+
...(baseline.state?.derived || {}),
|
|
51769
|
+
...(stored.state?.derived || {}),
|
|
51770
|
+
},
|
|
51771
|
+
},
|
|
51772
|
+
dataSources: stored.dataSources ?? baseline.dataSources,
|
|
51773
|
+
}
|
|
51774
|
+
: (stored ?? defaultPage);
|
|
51218
51775
|
this.authoredPageDefinition = this.clonePageDefinition(loaded);
|
|
51219
51776
|
this.applyPageUpdate(loaded, false);
|
|
51220
51777
|
}
|
|
@@ -57268,4 +57825,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
57268
57825
|
* Generated bundle index. Do not edit.
|
|
57269
57826
|
*/
|
|
57270
57827
|
|
|
57271
|
-
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, BUILTIN_WIDGET_SHELL_PRESETS, BulkOperationClientService, BulkSyncSession, BulkSyncStateService, COMPONENT_METADATA_REGISTRY_I18N_CONFIG, COMPONENT_METADATA_REGISTRY_I18N_NAMESPACE, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentAuthoringManifestProjectionError, ComponentKeyService, ComponentMetadataRegistry, ComponentRuntimeProfileService, CompositionRuntimeFacade, CompositionValidatorService, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_DYNAMIC_FORM_SCHEMA_CACHE_MAX_ENTRIES, DEFAULT_DYNAMIC_FORM_SCHEMA_CACHE_TTL_MS, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_SCHEMA_REQUEST_TIMEOUT_MS, 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, EFFECTIVE_UI_LAYOUT_COMPOSITION_SCHEMA_VERSION, 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, EffectiveUiLayoutContractError, EffectiveUiLayoutHttpError, EffectiveUiLayoutService, EmptyStateCardComponent, EnterpriseRuntimeContextObsoleteError, EnterpriseRuntimeContextService, 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, GOVERNED_COLOR_PALETTE_OPTIONS, GenericCrudService, GlobalActionService, GlobalConfigService, GovernedColorPaletteService, 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_ACTION_CONTROL_DEFAULTS, PRAXIS_ACTION_CONTROL_VARS, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_COLLECTION_SEARCH_DEFAULTS, PRAXIS_COLLECTION_SEARCH_VARS, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_EFFECTIVE_UI_LAYOUT_OPTIONS, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_OPTIONS, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_READY, 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_QUERY_FILTER_EXPRESSION_SCHEMA_VERSION, PRAXIS_RELATED_RESOURCE_OUTLET_AUTHORING_MANIFEST, PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA, PRAXIS_RELATED_RESOURCE_OUTLET_PORTS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, PRAXIS_TABLE_DETAIL_RESOURCE_RESOLVER, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_THEME_SURFACE_DEFAULTS, PRAXIS_THEME_SURFACE_VARS, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisAppShellComponent, PraxisBulkClientService, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconButtonComponent, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisKeepAliveTabDirective, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRelatedResourceOutletComponent, PraxisRelatedResourceOutletConfigEditorComponent, PraxisResourceIdentityComponent, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, PraxisWidgetEventBus, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RelatedResourceSurfaceResolverService, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceRecordOpenError, ResourceRecordOpenService, ResourceSurfaceOpenAdapterService, SCHEMA_METADATA_CLIENT_OPTIONS, SCHEMA_VIEWER_CONTEXT, SETTINGS_EDITOR_SECTIONS_HOSTED, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_DRAWER_CONTENT_DATA, SURFACE_DRAWER_REF, SURFACE_NAVIGATION_I18N_CONFIG, SURFACE_NAVIGATION_I18N_NAMESPACE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SafeExpressionEvaluator, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SettingsSectionTabsComponent, SurfaceBindingRuntimeService, SurfaceNavigationError, SurfaceOpenActionEditorComponent, SurfaceOpenMaterializerService, SurfaceOutletRegistryService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, UiLayoutLifecycleContractError, UiLayoutLifecycleHttpError, UiLayoutLifecycleService, ValidationPattern, WidgetPageCompositionFactory, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisActionControlCss, buildPraxisCollectionSearchCss, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildPraxisThemeSurfaceCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, canonicalJsonSha256, canonicalJsonStringify, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, cloneTableConfig, cloneUiLayoutJsonDocument, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createDynamicRecord, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, evaluateFieldAccess, extractNormalizedError, extractRecordId, fetchWithETag, fileTypeValidator, fillUndefined, findBuiltinWidgetShellPreset, formIdentityIssues, generateBulkIdempotencyKey, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionProviderEvidence, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getPraxisTableCellVisualizationConstraint, getPraxisTableCellVisualizationGuidance, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, getWidgetShellActionIdError, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isBulkExecutionTerminal, isCssTextTransform, isDomainRuleSnapshotProblemResponse, isDynamicDataRecord, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionProviderOperational, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisI18nMessageDescriptor, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isProgrammaticDateRangePreset, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isStaticDateRangePreset, isSurfaceNavigationError, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, markGlobalActionProviderOperational, matchFieldValidator, materializeFormLayoutFromMetadata, materializeGovernedPaletteColors, materializeGovernedPaletteEntries, materializeResourceIdentity, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, nestedPortPathIdentity, normalizeCardMediaAspectRatio, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldAccessMetadata, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeReactiveDeterminations, normalizeResourceAvailabilityReasonCode, normalizeResourceIdentityContract, normalizeStart, normalizeSurfaceOperationContext, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, prepareCanvasArrangement, projectComponentAuthoringManifest, projectGroupedCommandPartialRows, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisEnterpriseRuntimeContext, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRelatedResourceOutletMetadata, providePraxisRichTextBlockMetadata, providePraxisTelemetry, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveBuiltinWidgetShellAppearance, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDataField, resolveDateRangeShortcutPreset, resolveDateRangeShortcutPresets, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveGroupedCommandPartialRowSpans, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolvePraxisI18nDocument, resolvePraxisMicroVisualizationTone, resolveResourceAvailabilityReasonKey, resolveResourceIdentityContract, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, resolveWidgetPageLayoutPreset, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToExcel, serializePraxisCollectionToJson, slugify, staticDateRangePresetToPreset, stripMasksHook, supportsConfigDocuments, supportsImplicitValuePresentation, syncWithServerMetadata, textSha256, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateSurfaceNavigationRejected, translateSurfaceOpenFailed, translateUnavailableWorkflowMessage, trim, uiLayoutJsonIdentity, uniqueAsyncValidator, urlValidator, validateCanvasArrangement, validateGlobalActionRef, validateGlobalActionRefs, withFormConfigSections, withMessage, withPraxisHttpLoading };
|
|
57828
|
+
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, BUILTIN_WIDGET_SHELL_PRESETS, BulkOperationClientService, BulkSyncSession, BulkSyncStateService, COMPONENT_METADATA_REGISTRY_I18N_CONFIG, COMPONENT_METADATA_REGISTRY_I18N_NAMESPACE, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentAuthoringManifestProjectionError, ComponentKeyService, ComponentMetadataRegistry, ComponentRuntimeProfileService, CompositionRuntimeFacade, CompositionValidatorService, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_DYNAMIC_FORM_SCHEMA_CACHE_MAX_ENTRIES, DEFAULT_DYNAMIC_FORM_SCHEMA_CACHE_TTL_MS, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_SCHEMA_REQUEST_TIMEOUT_MS, 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, EFFECTIVE_UI_LAYOUT_COMPOSITION_SCHEMA_VERSION, 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, EffectiveUiLayoutContractError, EffectiveUiLayoutHttpError, EffectiveUiLayoutService, EmptyStateCardComponent, EnterpriseRuntimeContextObsoleteError, EnterpriseRuntimeContextService, 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, GOVERNED_COLOR_PALETTE_OPTIONS, GenericCrudService, GlobalActionService, GlobalConfigService, GovernedColorPaletteService, 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_ACTION_CONTROL_DEFAULTS, PRAXIS_ACTION_CONTROL_VARS, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_COLLECTION_SEARCH_DEFAULTS, PRAXIS_COLLECTION_SEARCH_VARS, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_EFFECTIVE_UI_LAYOUT_OPTIONS, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_OPTIONS, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_READY, 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_QUERY_FILTER_EXPRESSION_SCHEMA_VERSION, PRAXIS_RELATED_RESOURCE_OUTLET_AUTHORING_MANIFEST, PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA, PRAXIS_RELATED_RESOURCE_OUTLET_PORTS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, PRAXIS_TABLE_DETAIL_RESOURCE_RESOLVER, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_THEME_SURFACE_DEFAULTS, PRAXIS_THEME_SURFACE_VARS, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisAppShellComponent, PraxisBulkClientService, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconButtonComponent, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisKeepAliveTabDirective, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRelatedResourceOutletComponent, PraxisRelatedResourceOutletConfigEditorComponent, PraxisResourceIdentityComponent, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, PraxisWidgetEventBus, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RelatedResourceSurfaceResolverService, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceRecordOpenError, ResourceRecordOpenService, ResourceSurfaceOpenAdapterService, SCHEMA_METADATA_CLIENT_OPTIONS, SCHEMA_VIEWER_CONTEXT, SETTINGS_EDITOR_SECTIONS_HOSTED, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_DRAWER_CONTENT_DATA, SURFACE_DRAWER_REF, SURFACE_NAVIGATION_I18N_CONFIG, SURFACE_NAVIGATION_I18N_NAMESPACE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SafeExpressionEvaluator, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SettingsSectionTabsComponent, SurfaceBindingRuntimeService, SurfaceNavigationError, SurfaceOpenActionEditorComponent, SurfaceOpenMaterializerService, SurfaceOutletRegistryService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, UiLayoutLifecycleContractError, UiLayoutLifecycleHttpError, UiLayoutLifecycleService, ValidationPattern, WidgetPageCompositionFactory, WidgetPageDataSourceRuntimeService, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisActionControlCss, buildPraxisCollectionSearchCss, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildPraxisThemeSurfaceCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, canonicalJsonSha256, canonicalJsonStringify, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, cloneTableConfig, cloneUiLayoutJsonDocument, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createDynamicRecord, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, evaluateFieldAccess, extractNormalizedError, extractRecordId, fetchWithETag, fileTypeValidator, fillUndefined, findBuiltinWidgetShellPreset, formIdentityIssues, generateBulkIdempotencyKey, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionProviderEvidence, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getPraxisTableCellVisualizationConstraint, getPraxisTableCellVisualizationGuidance, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, getWidgetShellActionIdError, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isBulkExecutionTerminal, isCssTextTransform, isDomainRuleSnapshotProblemResponse, isDynamicDataRecord, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionProviderOperational, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisI18nMessageDescriptor, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isProgrammaticDateRangePreset, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isStaticDateRangePreset, isSurfaceNavigationError, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, markGlobalActionProviderOperational, matchFieldValidator, materializeFormLayoutFromMetadata, materializeGovernedPaletteColors, materializeGovernedPaletteEntries, materializeResourceIdentity, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, nestedPortPathIdentity, normalizeCardMediaAspectRatio, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldAccessMetadata, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeReactiveDeterminations, normalizeResourceAvailabilityReasonCode, normalizeResourceIdentityContract, normalizeStart, normalizeSurfaceOperationContext, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, prepareCanvasArrangement, projectComponentAuthoringManifest, projectGroupedCommandPartialRows, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisEnterpriseRuntimeContext, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRelatedResourceOutletMetadata, providePraxisRichTextBlockMetadata, providePraxisTelemetry, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveBuiltinWidgetShellAppearance, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDataField, resolveDateRangeShortcutPreset, resolveDateRangeShortcutPresets, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveGroupedCommandPartialRowSpans, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolvePraxisI18nDocument, resolvePraxisMicroVisualizationTone, resolveResourceAvailabilityReasonKey, resolveResourceIdentityContract, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, resolveWidgetPageLayoutPreset, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToExcel, serializePraxisCollectionToJson, slugify, staticDateRangePresetToPreset, stripMasksHook, supportsConfigDocuments, supportsImplicitValuePresentation, syncWithServerMetadata, textSha256, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateSurfaceNavigationRejected, translateSurfaceOpenFailed, translateUnavailableWorkflowMessage, trim, uiLayoutJsonIdentity, uniqueAsyncValidator, urlValidator, validateCanvasArrangement, validateGlobalActionRef, validateGlobalActionRefs, withFormConfigSections, withMessage, withPraxisHttpLoading };
|