@praxisui/core 9.0.0-beta.36 → 9.0.0-beta.38
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/ai/component-registry.json +137 -3
- package/fesm2022/praxisui-core.mjs +706 -3
- package/package.json +1 -1
- package/types/praxisui-core.d.ts +166 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, InjectionToken, Injectable, inject, Inject, Optional, makeEnvironmentProviders, APP_INITIALIZER, signal, computed, DestroyRef, ENVIRONMENT_INITIALIZER, ErrorHandler, EventEmitter, Output, Input, ChangeDetectionStrategy, Directive, SecurityContext, ViewContainerRef, SimpleChange, ContentChild, HostBinding, HostListener, ViewChildren, ViewChild } from '@angular/core';
|
|
2
|
+
import { Component, InjectionToken, Injectable, inject, Inject, Optional, makeEnvironmentProviders, APP_INITIALIZER, signal, computed, DestroyRef, ENVIRONMENT_INITIALIZER, ErrorHandler, EventEmitter, Output, Input, ChangeDetectionStrategy, Directive, SecurityContext, ViewContainerRef, SimpleChange, ContentChild, HostBinding, HostListener, ViewChildren, ViewChild, Injector, input, output, effect } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common/http';
|
|
4
4
|
import { HttpHeaders, HttpClient, HttpParams, HttpResponse, HttpContextToken, HTTP_INTERCEPTORS, withInterceptors } from '@angular/common/http';
|
|
5
5
|
import { of, defer, throwError, from, EMPTY, BehaviorSubject, firstValueFrom, Subject, map as map$1, switchMap as switchMap$1 } from 'rxjs';
|
|
@@ -27,6 +27,8 @@ import { MatTooltipModule } from '@angular/material/tooltip';
|
|
|
27
27
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
28
28
|
import * as i4$1 from '@angular/material/menu';
|
|
29
29
|
import { MatMenuModule } from '@angular/material/menu';
|
|
30
|
+
import * as i3$2 from '@angular/material/progress-spinner';
|
|
31
|
+
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
30
32
|
import * as i2$1 from '@angular/material/card';
|
|
31
33
|
import { MatCardModule } from '@angular/material/card';
|
|
32
34
|
import * as i8 from '@angular/material/chips';
|
|
@@ -13572,8 +13574,11 @@ class ResourceSurfaceOpenAdapterService {
|
|
|
13572
13574
|
},
|
|
13573
13575
|
surface: {
|
|
13574
13576
|
id: surface.id,
|
|
13577
|
+
resourceKey: surface.resourceKey,
|
|
13575
13578
|
kind: surface.kind,
|
|
13576
13579
|
scope: surface.scope,
|
|
13580
|
+
title: surface.title,
|
|
13581
|
+
description: surface.description ?? null,
|
|
13577
13582
|
intent: surface.intent ?? null,
|
|
13578
13583
|
operationId: surface.operationId,
|
|
13579
13584
|
path: surface.path,
|
|
@@ -13582,7 +13587,9 @@ class ResourceSurfaceOpenAdapterService {
|
|
|
13582
13587
|
schemaUrl: surface.schemaUrl,
|
|
13583
13588
|
responseCardinality: surface.responseCardinality ?? null,
|
|
13584
13589
|
availability: surface.availability,
|
|
13590
|
+
order: surface.order,
|
|
13585
13591
|
tags: surface.tags,
|
|
13592
|
+
relatedResource: surface.relatedResource ?? null,
|
|
13586
13593
|
},
|
|
13587
13594
|
},
|
|
13588
13595
|
};
|
|
@@ -13720,6 +13727,188 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
13720
13727
|
args: [{ providedIn: 'any' }]
|
|
13721
13728
|
}] });
|
|
13722
13729
|
|
|
13730
|
+
class RelatedResourceSurfaceResolverService {
|
|
13731
|
+
resolve(request) {
|
|
13732
|
+
try {
|
|
13733
|
+
if (!request?.surface) {
|
|
13734
|
+
return { state: 'idle', reason: 'surface-not-provided' };
|
|
13735
|
+
}
|
|
13736
|
+
const surface = request.surface;
|
|
13737
|
+
if (surface.availability?.allowed === false) {
|
|
13738
|
+
return {
|
|
13739
|
+
state: 'permission-limited',
|
|
13740
|
+
reason: surface.availability.reason || 'surface-not-allowed',
|
|
13741
|
+
surface,
|
|
13742
|
+
relatedResource: surface.relatedResource ?? null,
|
|
13743
|
+
};
|
|
13744
|
+
}
|
|
13745
|
+
const relatedResource = surface.relatedResource ?? null;
|
|
13746
|
+
if (!this.isCompleteRelatedResource(relatedResource)) {
|
|
13747
|
+
return {
|
|
13748
|
+
state: 'not-found',
|
|
13749
|
+
reason: 'related-resource-not-published',
|
|
13750
|
+
surface,
|
|
13751
|
+
relatedResource,
|
|
13752
|
+
};
|
|
13753
|
+
}
|
|
13754
|
+
if (!this.hasReadOperation(relatedResource)) {
|
|
13755
|
+
return {
|
|
13756
|
+
state: 'empty',
|
|
13757
|
+
reason: 'related-resource-read-operation-not-published',
|
|
13758
|
+
surface,
|
|
13759
|
+
relatedResource,
|
|
13760
|
+
};
|
|
13761
|
+
}
|
|
13762
|
+
const parentResourceId = this.resolveParentResourceId(request, relatedResource);
|
|
13763
|
+
if (parentResourceId == null || parentResourceId === '') {
|
|
13764
|
+
return {
|
|
13765
|
+
state: 'not-found',
|
|
13766
|
+
reason: 'parent-resource-id-not-resolved',
|
|
13767
|
+
surface,
|
|
13768
|
+
relatedResource,
|
|
13769
|
+
};
|
|
13770
|
+
}
|
|
13771
|
+
const queryContext = this.buildQueryContext(request.queryContext, relatedResource.childParentField, parentResourceId);
|
|
13772
|
+
const payload = this.buildPayload(surface, relatedResource, parentResourceId, queryContext, request);
|
|
13773
|
+
return {
|
|
13774
|
+
state: 'ready',
|
|
13775
|
+
surface,
|
|
13776
|
+
relatedResource,
|
|
13777
|
+
parentResourceId,
|
|
13778
|
+
childResourcePath: relatedResource.childResourcePath,
|
|
13779
|
+
childResourceKey: relatedResource.childResourceKey,
|
|
13780
|
+
queryContext,
|
|
13781
|
+
payload,
|
|
13782
|
+
};
|
|
13783
|
+
}
|
|
13784
|
+
catch (error) {
|
|
13785
|
+
return {
|
|
13786
|
+
state: 'error',
|
|
13787
|
+
reason: error instanceof Error ? error.message : 'related-resource-resolution-failed',
|
|
13788
|
+
surface: request?.surface ?? null,
|
|
13789
|
+
relatedResource: request?.surface?.relatedResource ?? null,
|
|
13790
|
+
};
|
|
13791
|
+
}
|
|
13792
|
+
}
|
|
13793
|
+
state(state, reason) {
|
|
13794
|
+
return { state, reason };
|
|
13795
|
+
}
|
|
13796
|
+
buildPayload(surface, relatedResource, parentResourceId, queryContext, request) {
|
|
13797
|
+
const preset = SURFACE_OPEN_PRESETS.find((candidate) => candidate.id === 'praxis-table');
|
|
13798
|
+
if (!preset) {
|
|
13799
|
+
throw new Error('Missing canonical surface preset "praxis-table".');
|
|
13800
|
+
}
|
|
13801
|
+
const payload = this.clone(preset.payload);
|
|
13802
|
+
payload.presentation = request.presentation ?? payload.presentation;
|
|
13803
|
+
payload.title = request.title || surface.title;
|
|
13804
|
+
payload.subtitle = request.subtitle || surface.description || undefined;
|
|
13805
|
+
payload.icon = request.icon || payload.icon;
|
|
13806
|
+
payload.widget.inputs = {
|
|
13807
|
+
...(payload.widget.inputs || {}),
|
|
13808
|
+
configPersistenceStrategy: 'volatile',
|
|
13809
|
+
resourcePath: this.normalizeResourcePath(relatedResource.childResourcePath),
|
|
13810
|
+
tableId: request.tableId || this.buildStableTableId(surface, relatedResource, parentResourceId),
|
|
13811
|
+
queryContext,
|
|
13812
|
+
};
|
|
13813
|
+
payload.context = {
|
|
13814
|
+
...(payload.context || {}),
|
|
13815
|
+
resource: {
|
|
13816
|
+
resourceKey: surface.resourceKey,
|
|
13817
|
+
resourcePath: this.normalizeResourcePath(request.parentResourcePath || ''),
|
|
13818
|
+
resourceId: parentResourceId,
|
|
13819
|
+
},
|
|
13820
|
+
surface,
|
|
13821
|
+
relatedResource,
|
|
13822
|
+
childResource: {
|
|
13823
|
+
resourceKey: relatedResource.childResourceKey,
|
|
13824
|
+
resourcePath: this.normalizeResourcePath(relatedResource.childResourcePath),
|
|
13825
|
+
parentField: relatedResource.childParentField,
|
|
13826
|
+
selectable: relatedResource.selectable,
|
|
13827
|
+
selectionKeyField: relatedResource.selectionKeyField,
|
|
13828
|
+
operations: relatedResource.childOperations,
|
|
13829
|
+
},
|
|
13830
|
+
};
|
|
13831
|
+
return payload;
|
|
13832
|
+
}
|
|
13833
|
+
buildQueryContext(queryContext, childParentField, parentResourceId) {
|
|
13834
|
+
return {
|
|
13835
|
+
...(queryContext || {}),
|
|
13836
|
+
filters: {
|
|
13837
|
+
...(queryContext?.filters || {}),
|
|
13838
|
+
[childParentField]: parentResourceId,
|
|
13839
|
+
},
|
|
13840
|
+
meta: {
|
|
13841
|
+
...(queryContext?.meta || {}),
|
|
13842
|
+
relatedResource: true,
|
|
13843
|
+
parentFilterField: childParentField,
|
|
13844
|
+
},
|
|
13845
|
+
};
|
|
13846
|
+
}
|
|
13847
|
+
resolveParentResourceId(request, relatedResource) {
|
|
13848
|
+
if (request.parentResourceId != null) {
|
|
13849
|
+
return request.parentResourceId;
|
|
13850
|
+
}
|
|
13851
|
+
return this.readPath(request.parentRecord, relatedResource.parentIdPathVariable);
|
|
13852
|
+
}
|
|
13853
|
+
readPath(record, path) {
|
|
13854
|
+
if (!record || !path) {
|
|
13855
|
+
return null;
|
|
13856
|
+
}
|
|
13857
|
+
const value = path.split('.').reduce((current, segment) => {
|
|
13858
|
+
if (!current || typeof current !== 'object' || Array.isArray(current)) {
|
|
13859
|
+
return undefined;
|
|
13860
|
+
}
|
|
13861
|
+
return current[segment];
|
|
13862
|
+
}, record);
|
|
13863
|
+
return typeof value === 'string' || typeof value === 'number' ? value : null;
|
|
13864
|
+
}
|
|
13865
|
+
isCompleteRelatedResource(relatedResource) {
|
|
13866
|
+
return !!relatedResource
|
|
13867
|
+
&& !!this.trim(relatedResource.childResourceKey)
|
|
13868
|
+
&& !!this.trim(relatedResource.childResourcePath)
|
|
13869
|
+
&& !!this.trim(relatedResource.childParentField)
|
|
13870
|
+
&& !!this.trim(relatedResource.parentIdPathVariable)
|
|
13871
|
+
&& Array.isArray(relatedResource.childOperations);
|
|
13872
|
+
}
|
|
13873
|
+
hasReadOperation(relatedResource) {
|
|
13874
|
+
return relatedResource.childOperations.includes('LIST')
|
|
13875
|
+
|| relatedResource.childOperations.includes('FILTER');
|
|
13876
|
+
}
|
|
13877
|
+
buildStableTableId(surface, relatedResource, parentResourceId) {
|
|
13878
|
+
return this.sanitizeStableId(`${relatedResource.childResourceKey}.${surface.id}.${String(parentResourceId)}`);
|
|
13879
|
+
}
|
|
13880
|
+
normalizeResourcePath(resourcePath) {
|
|
13881
|
+
let normalized = this.trim(resourcePath);
|
|
13882
|
+
if (/^https?:\/\//i.test(normalized)) {
|
|
13883
|
+
try {
|
|
13884
|
+
normalized = new URL(normalized).pathname;
|
|
13885
|
+
}
|
|
13886
|
+
catch {
|
|
13887
|
+
return '';
|
|
13888
|
+
}
|
|
13889
|
+
}
|
|
13890
|
+
return normalized
|
|
13891
|
+
.replace(/^\/+/, '')
|
|
13892
|
+
.replace(/^(?:api\/)+/i, '')
|
|
13893
|
+
.replace(/\/+$/, '');
|
|
13894
|
+
}
|
|
13895
|
+
sanitizeStableId(value) {
|
|
13896
|
+
return value.replace(/[^a-zA-Z0-9._-]+/g, '-');
|
|
13897
|
+
}
|
|
13898
|
+
trim(value) {
|
|
13899
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
13900
|
+
}
|
|
13901
|
+
clone(value) {
|
|
13902
|
+
return value == null ? value : JSON.parse(JSON.stringify(value));
|
|
13903
|
+
}
|
|
13904
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: RelatedResourceSurfaceResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
13905
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: RelatedResourceSurfaceResolverService, providedIn: 'any' });
|
|
13906
|
+
}
|
|
13907
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: RelatedResourceSurfaceResolverService, decorators: [{
|
|
13908
|
+
type: Injectable,
|
|
13909
|
+
args: [{ providedIn: 'any' }]
|
|
13910
|
+
}] });
|
|
13911
|
+
|
|
13723
13912
|
class SurfaceOpenMaterializerService {
|
|
13724
13913
|
discovery = inject(ResourceDiscoveryService);
|
|
13725
13914
|
async materialize(payload, context) {
|
|
@@ -13964,6 +14153,7 @@ class SurfaceOpenMaterializerService {
|
|
|
13964
14153
|
outputs: {
|
|
13965
14154
|
rowClick: 'emit',
|
|
13966
14155
|
selectionChange: 'emit',
|
|
14156
|
+
resourceEvent: 'emit',
|
|
13967
14157
|
widgetEvent: 'emit',
|
|
13968
14158
|
},
|
|
13969
14159
|
inputs: {
|
|
@@ -14000,6 +14190,7 @@ class SurfaceOpenMaterializerService {
|
|
|
14000
14190
|
...(payload.widget.outputs || {}),
|
|
14001
14191
|
rowClick: 'emit',
|
|
14002
14192
|
selectionChange: 'emit',
|
|
14193
|
+
resourceEvent: 'emit',
|
|
14003
14194
|
widgetEvent: 'emit',
|
|
14004
14195
|
},
|
|
14005
14196
|
inputs: {
|
|
@@ -36160,6 +36351,7 @@ class PraxisSurfaceHostComponent {
|
|
|
36160
36351
|
widgetEvent = new EventEmitter();
|
|
36161
36352
|
rowClick = new EventEmitter();
|
|
36162
36353
|
selectionChange = new EventEmitter();
|
|
36354
|
+
resourceEvent = new EventEmitter();
|
|
36163
36355
|
beforeWidgetLoader;
|
|
36164
36356
|
mainWidgetLoader;
|
|
36165
36357
|
afterWidgetLoader;
|
|
@@ -36273,19 +36465,103 @@ class PraxisSurfaceHostComponent {
|
|
|
36273
36465
|
}
|
|
36274
36466
|
}
|
|
36275
36467
|
onSlotWidgetEvent(ownerWidgetKey, event) {
|
|
36468
|
+
const resourceEvent = event.resourceEvent ?? this.toResourceEvent(ownerWidgetKey, event);
|
|
36276
36469
|
if (event.output === 'rowClick') {
|
|
36277
36470
|
this.rowClick.emit(event.payload);
|
|
36278
36471
|
}
|
|
36279
36472
|
if (event.output === 'selectionChange') {
|
|
36280
36473
|
this.selectionChange.emit(event.payload);
|
|
36281
36474
|
}
|
|
36475
|
+
if (resourceEvent) {
|
|
36476
|
+
this.resourceEvent.emit(resourceEvent);
|
|
36477
|
+
}
|
|
36282
36478
|
this.widgetEvent.emit({
|
|
36283
36479
|
...event,
|
|
36480
|
+
resourceEvent: resourceEvent ?? undefined,
|
|
36284
36481
|
ownerWidgetKey: event.ownerWidgetKey || ownerWidgetKey,
|
|
36285
36482
|
});
|
|
36286
36483
|
}
|
|
36484
|
+
toResourceEvent(ownerWidgetKey, event) {
|
|
36485
|
+
const sourceOutput = String(event.output || '').trim();
|
|
36486
|
+
if (!sourceOutput) {
|
|
36487
|
+
return null;
|
|
36488
|
+
}
|
|
36489
|
+
const kind = sourceOutput === 'rowClick'
|
|
36490
|
+
? 'row-click'
|
|
36491
|
+
: sourceOutput === 'selectionChange'
|
|
36492
|
+
? 'selection-change'
|
|
36493
|
+
: sourceOutput === 'recordSurfaceOpen'
|
|
36494
|
+
? 'surface-open'
|
|
36495
|
+
: 'widget-event';
|
|
36496
|
+
const resourceContext = this.readRecord(this.context?.['resource']);
|
|
36497
|
+
const surfaceContext = this.readRecord(this.context?.['surface']);
|
|
36498
|
+
return {
|
|
36499
|
+
kind,
|
|
36500
|
+
sourceComponentId: event.sourceComponentId,
|
|
36501
|
+
sourceOutput,
|
|
36502
|
+
phase: kind === 'surface-open' ? 'request' : 'notification',
|
|
36503
|
+
resourcePath: this.stringOrNull(resourceContext?.['resourcePath']),
|
|
36504
|
+
resourceKey: this.stringOrNull(resourceContext?.['resourceKey']),
|
|
36505
|
+
resourceId: this.resourceIdOrNull(resourceContext?.['resourceId']),
|
|
36506
|
+
surface: this.toResourceSurface(surfaceContext, resourceContext),
|
|
36507
|
+
payload: event.payload,
|
|
36508
|
+
context: {
|
|
36509
|
+
...(this.context || {}),
|
|
36510
|
+
ownerWidgetKey: event.ownerWidgetKey || ownerWidgetKey,
|
|
36511
|
+
sourceChildWidgetKey: event.sourceChildWidgetKey,
|
|
36512
|
+
},
|
|
36513
|
+
};
|
|
36514
|
+
}
|
|
36515
|
+
readRecord(value) {
|
|
36516
|
+
return value && typeof value === 'object' && !Array.isArray(value)
|
|
36517
|
+
? value
|
|
36518
|
+
: null;
|
|
36519
|
+
}
|
|
36520
|
+
stringOrNull(value) {
|
|
36521
|
+
const text = typeof value === 'string' ? value.trim() : '';
|
|
36522
|
+
return text || null;
|
|
36523
|
+
}
|
|
36524
|
+
resourceIdOrNull(value) {
|
|
36525
|
+
return typeof value === 'string' || typeof value === 'number' ? value : null;
|
|
36526
|
+
}
|
|
36527
|
+
toResourceSurface(surface, resource) {
|
|
36528
|
+
const availability = this.readRecord(surface?.['availability']);
|
|
36529
|
+
if (!surface || !availability) {
|
|
36530
|
+
return null;
|
|
36531
|
+
}
|
|
36532
|
+
const id = this.stringOrNull(surface['id']);
|
|
36533
|
+
const resourceKey = this.stringOrNull(surface['resourceKey'])
|
|
36534
|
+
|| this.stringOrNull(resource?.['resourceKey']);
|
|
36535
|
+
const operationId = this.stringOrNull(surface['operationId']);
|
|
36536
|
+
const path = this.stringOrNull(surface['path']);
|
|
36537
|
+
const method = this.stringOrNull(surface['method']);
|
|
36538
|
+
const schemaId = this.stringOrNull(surface['schemaId']);
|
|
36539
|
+
const schemaUrl = this.stringOrNull(surface['schemaUrl']);
|
|
36540
|
+
if (!id || !resourceKey || !operationId || !path || !method || !schemaId || !schemaUrl) {
|
|
36541
|
+
return null;
|
|
36542
|
+
}
|
|
36543
|
+
return {
|
|
36544
|
+
id,
|
|
36545
|
+
resourceKey,
|
|
36546
|
+
kind: surface['kind'],
|
|
36547
|
+
scope: surface['scope'],
|
|
36548
|
+
title: String(surface['title'] || id),
|
|
36549
|
+
description: surface['description'],
|
|
36550
|
+
intent: surface['intent'],
|
|
36551
|
+
operationId,
|
|
36552
|
+
path,
|
|
36553
|
+
method,
|
|
36554
|
+
schemaId,
|
|
36555
|
+
schemaUrl,
|
|
36556
|
+
responseCardinality: surface['responseCardinality'],
|
|
36557
|
+
availability: availability,
|
|
36558
|
+
order: Number(surface['order'] || 0),
|
|
36559
|
+
tags: Array.isArray(surface['tags']) ? surface['tags'] : [],
|
|
36560
|
+
relatedResource: surface['relatedResource'],
|
|
36561
|
+
};
|
|
36562
|
+
}
|
|
36287
36563
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisSurfaceHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
36288
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisSurfaceHostComponent, isStandalone: true, selector: "praxis-surface-host", inputs: { title: "title", subtitle: "subtitle", icon: "icon", beforeWidget: "beforeWidget", widget: "widget", afterWidget: "afterWidget", context: "context", strictValidation: "strictValidation", renderTitleInsideBody: "renderTitleInsideBody" }, outputs: { widgetEvent: "widgetEvent", rowClick: "rowClick", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "beforeWidgetLoader", first: true, predicate: ["beforeWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "mainWidgetLoader", first: true, predicate: ["mainWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "afterWidgetLoader", first: true, predicate: ["afterWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }], usesOnChanges: true, ngImport: i0, template: `
|
|
36564
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisSurfaceHostComponent, isStandalone: true, selector: "praxis-surface-host", inputs: { title: "title", subtitle: "subtitle", icon: "icon", beforeWidget: "beforeWidget", widget: "widget", afterWidget: "afterWidget", context: "context", strictValidation: "strictValidation", renderTitleInsideBody: "renderTitleInsideBody" }, outputs: { widgetEvent: "widgetEvent", rowClick: "rowClick", selectionChange: "selectionChange", resourceEvent: "resourceEvent" }, viewQueries: [{ propertyName: "beforeWidgetLoader", first: true, predicate: ["beforeWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "mainWidgetLoader", first: true, predicate: ["mainWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "afterWidgetLoader", first: true, predicate: ["afterWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }], usesOnChanges: true, ngImport: i0, template: `
|
|
36289
36565
|
<div class="pdx-surface-host">
|
|
36290
36566
|
@if (subtitle || (title && renderTitleInsideBody)) {
|
|
36291
36567
|
<header class="pdx-surface-host__header">
|
|
@@ -36434,6 +36710,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
36434
36710
|
type: Output
|
|
36435
36711
|
}], selectionChange: [{
|
|
36436
36712
|
type: Output
|
|
36713
|
+
}], resourceEvent: [{
|
|
36714
|
+
type: Output
|
|
36437
36715
|
}], beforeWidgetLoader: [{
|
|
36438
36716
|
type: ViewChild,
|
|
36439
36717
|
args: ['beforeWidgetLoader', { read: DynamicWidgetLoaderDirective }]
|
|
@@ -36445,6 +36723,431 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
36445
36723
|
args: ['afterWidgetLoader', { read: DynamicWidgetLoaderDirective }]
|
|
36446
36724
|
}] } });
|
|
36447
36725
|
|
|
36726
|
+
const RELATED_RESOURCE_OUTLET_I18N_NAMESPACE = 'relatedResourceOutlet';
|
|
36727
|
+
const RELATED_RESOURCE_OUTLET_I18N_CONFIG = {
|
|
36728
|
+
namespaces: {
|
|
36729
|
+
[RELATED_RESOURCE_OUTLET_I18N_NAMESPACE]: {
|
|
36730
|
+
'pt-BR': {
|
|
36731
|
+
'state.idle.title': 'Recurso relacionado não selecionado',
|
|
36732
|
+
'state.idle.description': 'Selecione uma surface relacionada para carregar os dados.',
|
|
36733
|
+
'state.resolving.title': 'Resolvendo recurso relacionado',
|
|
36734
|
+
'state.resolving.description': 'Validando metadados e permissões da relação.',
|
|
36735
|
+
'state.loading.title': 'Carregando recurso relacionado',
|
|
36736
|
+
'state.loading.description': 'Aguarde enquanto a coleção relacionada é carregada.',
|
|
36737
|
+
'state.empty.title': 'Nenhuma operação de leitura publicada',
|
|
36738
|
+
'state.empty.description': 'A relação existe, mas não há operação de lista ou filtro disponível.',
|
|
36739
|
+
'state.permission-limited.title': 'Acesso limitado',
|
|
36740
|
+
'state.permission-limited.description': 'O contexto atual não permite abrir este recurso relacionado.',
|
|
36741
|
+
'state.not-found.title': 'Relação indisponível',
|
|
36742
|
+
'state.not-found.description': 'Não foi possível resolver a relação ou o identificador do registro pai.',
|
|
36743
|
+
'state.error.title': 'Falha ao preparar recurso relacionado',
|
|
36744
|
+
'state.error.description': 'Ocorreu um erro ao preparar a superfície relacionada.',
|
|
36745
|
+
'action.open': 'Abrir relacionado',
|
|
36746
|
+
'status.ready': 'Recurso relacionado pronto',
|
|
36747
|
+
},
|
|
36748
|
+
'en-US': {
|
|
36749
|
+
'state.idle.title': 'Related resource not selected',
|
|
36750
|
+
'state.idle.description': 'Select a related surface to load its data.',
|
|
36751
|
+
'state.resolving.title': 'Resolving related resource',
|
|
36752
|
+
'state.resolving.description': 'Validating relation metadata and permissions.',
|
|
36753
|
+
'state.loading.title': 'Loading related resource',
|
|
36754
|
+
'state.loading.description': 'Wait while the related collection is loaded.',
|
|
36755
|
+
'state.empty.title': 'No read operation published',
|
|
36756
|
+
'state.empty.description': 'The relation exists, but no list or filter operation is available.',
|
|
36757
|
+
'state.permission-limited.title': 'Limited access',
|
|
36758
|
+
'state.permission-limited.description': 'The current context cannot open this related resource.',
|
|
36759
|
+
'state.not-found.title': 'Relation unavailable',
|
|
36760
|
+
'state.not-found.description': 'The relation or parent record identifier could not be resolved.',
|
|
36761
|
+
'state.error.title': 'Failed to prepare related resource',
|
|
36762
|
+
'state.error.description': 'An error occurred while preparing the related surface.',
|
|
36763
|
+
'action.open': 'Open related',
|
|
36764
|
+
'status.ready': 'Related resource ready',
|
|
36765
|
+
},
|
|
36766
|
+
},
|
|
36767
|
+
},
|
|
36768
|
+
};
|
|
36769
|
+
|
|
36770
|
+
class PraxisRelatedResourceOutletComponent {
|
|
36771
|
+
resolver = inject(RelatedResourceSurfaceResolverService);
|
|
36772
|
+
i18n = inject(PraxisI18nService);
|
|
36773
|
+
injector = inject(Injector);
|
|
36774
|
+
discoverySubscription;
|
|
36775
|
+
discoveryRequestKey = '';
|
|
36776
|
+
surface = input(null, ...(ngDevMode ? [{ debugName: "surface" }] : /* istanbul ignore next */ []));
|
|
36777
|
+
surfaceId = input(null, ...(ngDevMode ? [{ debugName: "surfaceId" }] : /* istanbul ignore next */ []));
|
|
36778
|
+
surfaceCatalog = input(null, ...(ngDevMode ? [{ debugName: "surfaceCatalog" }] : /* istanbul ignore next */ []));
|
|
36779
|
+
discoverySource = input(null, ...(ngDevMode ? [{ debugName: "discoverySource" }] : /* istanbul ignore next */ []));
|
|
36780
|
+
parentLinks = input(null, ...(ngDevMode ? [{ debugName: "parentLinks" }] : /* istanbul ignore next */ []));
|
|
36781
|
+
apiEndpointKey = input(null, ...(ngDevMode ? [{ debugName: "apiEndpointKey" }] : /* istanbul ignore next */ []));
|
|
36782
|
+
apiUrlEntry = input(null, ...(ngDevMode ? [{ debugName: "apiUrlEntry" }] : /* istanbul ignore next */ []));
|
|
36783
|
+
parentRecord = input(null, ...(ngDevMode ? [{ debugName: "parentRecord" }] : /* istanbul ignore next */ []));
|
|
36784
|
+
parentResourceId = input(null, ...(ngDevMode ? [{ debugName: "parentResourceId" }] : /* istanbul ignore next */ []));
|
|
36785
|
+
parentResourcePath = input(null, ...(ngDevMode ? [{ debugName: "parentResourcePath" }] : /* istanbul ignore next */ []));
|
|
36786
|
+
presentation = input('drawer', ...(ngDevMode ? [{ debugName: "presentation" }] : /* istanbul ignore next */ []));
|
|
36787
|
+
title = input(null, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
36788
|
+
subtitle = input(null, ...(ngDevMode ? [{ debugName: "subtitle" }] : /* istanbul ignore next */ []));
|
|
36789
|
+
icon = input(null, ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
36790
|
+
tableId = input(null, ...(ngDevMode ? [{ debugName: "tableId" }] : /* istanbul ignore next */ []));
|
|
36791
|
+
queryContext = input(null, ...(ngDevMode ? [{ debugName: "queryContext" }] : /* istanbul ignore next */ []));
|
|
36792
|
+
mode = input('inline', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
36793
|
+
state = input(null, ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
|
|
36794
|
+
stateReason = input(null, ...(ngDevMode ? [{ debugName: "stateReason" }] : /* istanbul ignore next */ []));
|
|
36795
|
+
compact = input(false, ...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
|
|
36796
|
+
strictValidation = input(false, ...(ngDevMode ? [{ debugName: "strictValidation" }] : /* istanbul ignore next */ []));
|
|
36797
|
+
ownerWidgetKey = input('related-resource.outlet', ...(ngDevMode ? [{ debugName: "ownerWidgetKey" }] : /* istanbul ignore next */ []));
|
|
36798
|
+
surfaceOpen = output();
|
|
36799
|
+
widgetEvent = output();
|
|
36800
|
+
resourceEvent = output();
|
|
36801
|
+
discoveredSurface = signal(null, ...(ngDevMode ? [{ debugName: "discoveredSurface" }] : /* istanbul ignore next */ []));
|
|
36802
|
+
discoveryState = signal(null, ...(ngDevMode ? [{ debugName: "discoveryState" }] : /* istanbul ignore next */ []));
|
|
36803
|
+
discoveryStateReason = signal(null, ...(ngDevMode ? [{ debugName: "discoveryStateReason" }] : /* istanbul ignore next */ []));
|
|
36804
|
+
resolution = computed(() => {
|
|
36805
|
+
const state = this.state();
|
|
36806
|
+
if (state && state !== 'ready') {
|
|
36807
|
+
return this.resolver.state(state, this.stateReason() || undefined);
|
|
36808
|
+
}
|
|
36809
|
+
const discoveryState = this.discoveryState();
|
|
36810
|
+
if (discoveryState && discoveryState !== 'ready') {
|
|
36811
|
+
return this.resolver.state(discoveryState, this.discoveryStateReason() || undefined);
|
|
36812
|
+
}
|
|
36813
|
+
return this.resolver.resolve({
|
|
36814
|
+
surface: this.surface() || this.discoveredSurface(),
|
|
36815
|
+
parentRecord: this.parentRecord(),
|
|
36816
|
+
parentResourceId: this.parentResourceId(),
|
|
36817
|
+
parentResourcePath: this.parentResourcePath(),
|
|
36818
|
+
presentation: this.presentation(),
|
|
36819
|
+
title: this.title(),
|
|
36820
|
+
subtitle: this.subtitle(),
|
|
36821
|
+
icon: this.icon(),
|
|
36822
|
+
tableId: this.tableId(),
|
|
36823
|
+
queryContext: this.queryContext(),
|
|
36824
|
+
});
|
|
36825
|
+
}, ...(ngDevMode ? [{ debugName: "resolution" }] : /* istanbul ignore next */ []));
|
|
36826
|
+
isBusy = computed(() => {
|
|
36827
|
+
const state = this.resolution().state;
|
|
36828
|
+
return state === 'resolving' || state === 'loading';
|
|
36829
|
+
}, ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
|
|
36830
|
+
constructor() {
|
|
36831
|
+
effect((onCleanup) => {
|
|
36832
|
+
const surface = this.surface();
|
|
36833
|
+
const surfaceId = this.surfaceId();
|
|
36834
|
+
const catalog = this.surfaceCatalog();
|
|
36835
|
+
const discoverySource = this.discoverySource() || this.parentLinks();
|
|
36836
|
+
const parentResourcePath = this.parentResourcePath();
|
|
36837
|
+
const parentResourceId = this.parentResourceId();
|
|
36838
|
+
const apiEndpointKey = this.apiEndpointKey();
|
|
36839
|
+
const apiUrlEntry = this.apiUrlEntry();
|
|
36840
|
+
this.discoverySubscription?.unsubscribe();
|
|
36841
|
+
this.discoverySubscription = undefined;
|
|
36842
|
+
if (surface || !this.trim(surfaceId)) {
|
|
36843
|
+
this.resetDiscoveryState();
|
|
36844
|
+
return;
|
|
36845
|
+
}
|
|
36846
|
+
if (catalog) {
|
|
36847
|
+
this.applyCatalogSurface(surfaceId, catalog);
|
|
36848
|
+
return;
|
|
36849
|
+
}
|
|
36850
|
+
const href = this.resolveFallbackSurfaceCatalogHref(parentResourcePath, parentResourceId);
|
|
36851
|
+
if (!discoverySource && !href) {
|
|
36852
|
+
this.discoveredSurface.set(null);
|
|
36853
|
+
this.discoveryState.set('not-found');
|
|
36854
|
+
this.discoveryStateReason.set('surface-discovery-source-not-provided');
|
|
36855
|
+
return;
|
|
36856
|
+
}
|
|
36857
|
+
const options = this.discoveryOptions(apiEndpointKey, apiUrlEntry);
|
|
36858
|
+
const requestKey = this.buildDiscoveryRequestKey(surfaceId, discoverySource, href, options);
|
|
36859
|
+
this.discoveryRequestKey = requestKey;
|
|
36860
|
+
this.discoveredSurface.set(null);
|
|
36861
|
+
this.discoveryState.set('resolving');
|
|
36862
|
+
this.discoveryStateReason.set(null);
|
|
36863
|
+
const discovery = this.injector.get(ResourceDiscoveryService);
|
|
36864
|
+
const catalog$ = discoverySource
|
|
36865
|
+
? discovery.getSurfaces(discoverySource, options)
|
|
36866
|
+
: discovery.fetchJson(href, options);
|
|
36867
|
+
this.discoverySubscription = catalog$.subscribe({
|
|
36868
|
+
next: (response) => {
|
|
36869
|
+
if (this.discoveryRequestKey !== requestKey) {
|
|
36870
|
+
return;
|
|
36871
|
+
}
|
|
36872
|
+
this.applyCatalogSurface(surfaceId, response);
|
|
36873
|
+
},
|
|
36874
|
+
error: (error) => {
|
|
36875
|
+
if (this.discoveryRequestKey !== requestKey) {
|
|
36876
|
+
return;
|
|
36877
|
+
}
|
|
36878
|
+
this.discoveredSurface.set(null);
|
|
36879
|
+
this.discoveryState.set(this.isPermissionError(error) ? 'permission-limited' : 'error');
|
|
36880
|
+
this.discoveryStateReason.set(this.isPermissionError(error)
|
|
36881
|
+
? 'surface-discovery-permission-limited'
|
|
36882
|
+
: 'surface-discovery-failed');
|
|
36883
|
+
},
|
|
36884
|
+
});
|
|
36885
|
+
onCleanup(() => {
|
|
36886
|
+
this.discoverySubscription?.unsubscribe();
|
|
36887
|
+
this.discoverySubscription = undefined;
|
|
36888
|
+
});
|
|
36889
|
+
});
|
|
36890
|
+
}
|
|
36891
|
+
openRelated() {
|
|
36892
|
+
const payload = this.resolution().payload;
|
|
36893
|
+
if (payload) {
|
|
36894
|
+
this.surfaceOpen.emit(payload);
|
|
36895
|
+
}
|
|
36896
|
+
}
|
|
36897
|
+
onWidgetEvent(event) {
|
|
36898
|
+
const resourceEvent = event.resourceEvent ?? this.extractResourceEvent(event);
|
|
36899
|
+
if (resourceEvent) {
|
|
36900
|
+
this.resourceEvent.emit(resourceEvent);
|
|
36901
|
+
this.widgetEvent.emit({ ...event, resourceEvent });
|
|
36902
|
+
return;
|
|
36903
|
+
}
|
|
36904
|
+
this.widgetEvent.emit(event);
|
|
36905
|
+
}
|
|
36906
|
+
stateIcon() {
|
|
36907
|
+
switch (this.resolution().state) {
|
|
36908
|
+
case 'ready':
|
|
36909
|
+
return 'hub';
|
|
36910
|
+
case 'permission-limited':
|
|
36911
|
+
return 'lock';
|
|
36912
|
+
case 'not-found':
|
|
36913
|
+
return 'link_off';
|
|
36914
|
+
case 'empty':
|
|
36915
|
+
return 'playlist_remove';
|
|
36916
|
+
case 'error':
|
|
36917
|
+
return 'error';
|
|
36918
|
+
default:
|
|
36919
|
+
return 'account_tree';
|
|
36920
|
+
}
|
|
36921
|
+
}
|
|
36922
|
+
stateTitle() {
|
|
36923
|
+
const state = this.resolution().state;
|
|
36924
|
+
return this.t(`state.${state}.title`, this.defaultTitle(state));
|
|
36925
|
+
}
|
|
36926
|
+
stateDescription() {
|
|
36927
|
+
const state = this.resolution().state;
|
|
36928
|
+
return this.t(`state.${state}.description`, this.defaultDescription(state));
|
|
36929
|
+
}
|
|
36930
|
+
t(key, fallback) {
|
|
36931
|
+
return this.i18n.t(key, undefined, fallback, RELATED_RESOURCE_OUTLET_I18N_NAMESPACE);
|
|
36932
|
+
}
|
|
36933
|
+
defaultTitle(state) {
|
|
36934
|
+
return state === 'ready'
|
|
36935
|
+
? this.t('status.ready', 'Related resource ready')
|
|
36936
|
+
: 'Related resource';
|
|
36937
|
+
}
|
|
36938
|
+
defaultDescription(state) {
|
|
36939
|
+
return this.resolution().reason || state;
|
|
36940
|
+
}
|
|
36941
|
+
applyCatalogSurface(surfaceId, catalog) {
|
|
36942
|
+
const normalizedId = this.trim(surfaceId);
|
|
36943
|
+
const surface = (catalog?.surfaces || []).find((candidate) => this.trim(candidate.id) === normalizedId) || null;
|
|
36944
|
+
this.discoveredSurface.set(surface);
|
|
36945
|
+
this.discoveryState.set(surface ? null : 'not-found');
|
|
36946
|
+
this.discoveryStateReason.set(surface ? null : 'surface-id-not-found');
|
|
36947
|
+
}
|
|
36948
|
+
resetDiscoveryState() {
|
|
36949
|
+
this.discoveredSurface.set(null);
|
|
36950
|
+
this.discoveryState.set(null);
|
|
36951
|
+
this.discoveryStateReason.set(null);
|
|
36952
|
+
this.discoveryRequestKey = '';
|
|
36953
|
+
}
|
|
36954
|
+
discoveryOptions(endpointKey, apiUrlEntry) {
|
|
36955
|
+
if (!endpointKey && !apiUrlEntry) {
|
|
36956
|
+
return undefined;
|
|
36957
|
+
}
|
|
36958
|
+
return {
|
|
36959
|
+
endpointKey: endpointKey || undefined,
|
|
36960
|
+
apiUrlEntry: apiUrlEntry || null,
|
|
36961
|
+
};
|
|
36962
|
+
}
|
|
36963
|
+
resolveFallbackSurfaceCatalogHref(parentResourcePath, parentResourceId) {
|
|
36964
|
+
const path = this.normalizeResourcePath(parentResourcePath || '');
|
|
36965
|
+
if (!path || parentResourceId == null || parentResourceId === '') {
|
|
36966
|
+
return null;
|
|
36967
|
+
}
|
|
36968
|
+
return `/api/${path}/${encodeURIComponent(String(parentResourceId))}/surfaces`;
|
|
36969
|
+
}
|
|
36970
|
+
normalizeResourcePath(resourcePath) {
|
|
36971
|
+
let normalized = this.trim(resourcePath);
|
|
36972
|
+
if (/^https?:\/\//i.test(normalized)) {
|
|
36973
|
+
try {
|
|
36974
|
+
normalized = new URL(normalized).pathname;
|
|
36975
|
+
}
|
|
36976
|
+
catch {
|
|
36977
|
+
return '';
|
|
36978
|
+
}
|
|
36979
|
+
}
|
|
36980
|
+
return normalized
|
|
36981
|
+
.replace(/^\/+/, '')
|
|
36982
|
+
.replace(/^(?:api\/)+/i, '')
|
|
36983
|
+
.replace(/\/+$/, '');
|
|
36984
|
+
}
|
|
36985
|
+
buildDiscoveryRequestKey(surfaceId, source, href, options) {
|
|
36986
|
+
return JSON.stringify({
|
|
36987
|
+
surfaceId: this.trim(surfaceId),
|
|
36988
|
+
source,
|
|
36989
|
+
href,
|
|
36990
|
+
endpointKey: options?.endpointKey || null,
|
|
36991
|
+
apiUrlEntry: options?.apiUrlEntry || null,
|
|
36992
|
+
});
|
|
36993
|
+
}
|
|
36994
|
+
isPermissionError(error) {
|
|
36995
|
+
const status = typeof error === 'object' && error
|
|
36996
|
+
? error.status
|
|
36997
|
+
: null;
|
|
36998
|
+
return status === 401 || status === 403;
|
|
36999
|
+
}
|
|
37000
|
+
extractResourceEvent(event) {
|
|
37001
|
+
if (event.output !== 'resourceEvent' || !event.payload || typeof event.payload !== 'object') {
|
|
37002
|
+
return null;
|
|
37003
|
+
}
|
|
37004
|
+
const candidate = event.payload;
|
|
37005
|
+
return typeof candidate.kind === 'string'
|
|
37006
|
+
&& typeof candidate.sourceComponentId === 'string'
|
|
37007
|
+
&& 'payload' in candidate
|
|
37008
|
+
? candidate
|
|
37009
|
+
: null;
|
|
37010
|
+
}
|
|
37011
|
+
trim(value) {
|
|
37012
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
37013
|
+
}
|
|
37014
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisRelatedResourceOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
37015
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisRelatedResourceOutletComponent, isStandalone: true, selector: "praxis-related-resource-outlet", inputs: { surface: { classPropertyName: "surface", publicName: "surface", isSignal: true, isRequired: false, transformFunction: null }, surfaceId: { classPropertyName: "surfaceId", publicName: "surfaceId", isSignal: true, isRequired: false, transformFunction: null }, surfaceCatalog: { classPropertyName: "surfaceCatalog", publicName: "surfaceCatalog", isSignal: true, isRequired: false, transformFunction: null }, discoverySource: { classPropertyName: "discoverySource", publicName: "discoverySource", isSignal: true, isRequired: false, transformFunction: null }, parentLinks: { classPropertyName: "parentLinks", publicName: "parentLinks", isSignal: true, isRequired: false, transformFunction: null }, apiEndpointKey: { classPropertyName: "apiEndpointKey", publicName: "apiEndpointKey", isSignal: true, isRequired: false, transformFunction: null }, apiUrlEntry: { classPropertyName: "apiUrlEntry", publicName: "apiUrlEntry", isSignal: true, isRequired: false, transformFunction: null }, parentRecord: { classPropertyName: "parentRecord", publicName: "parentRecord", isSignal: true, isRequired: false, transformFunction: null }, parentResourceId: { classPropertyName: "parentResourceId", publicName: "parentResourceId", isSignal: true, isRequired: false, transformFunction: null }, parentResourcePath: { classPropertyName: "parentResourcePath", publicName: "parentResourcePath", isSignal: true, isRequired: false, transformFunction: null }, presentation: { classPropertyName: "presentation", publicName: "presentation", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, tableId: { classPropertyName: "tableId", publicName: "tableId", isSignal: true, isRequired: false, transformFunction: null }, queryContext: { classPropertyName: "queryContext", publicName: "queryContext", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, stateReason: { classPropertyName: "stateReason", publicName: "stateReason", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, strictValidation: { classPropertyName: "strictValidation", publicName: "strictValidation", isSignal: true, isRequired: false, transformFunction: null }, ownerWidgetKey: { classPropertyName: "ownerWidgetKey", publicName: "ownerWidgetKey", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { surfaceOpen: "surfaceOpen", widgetEvent: "widgetEvent", resourceEvent: "resourceEvent" }, host: { attributes: { "data-praxis-related-resource-outlet": "core" }, properties: { "attr.data-state": "resolution().state" } }, providers: [providePraxisI18nConfig(RELATED_RESOURCE_OUTLET_I18N_CONFIG)], ngImport: i0, template: `
|
|
37016
|
+
<section class="pdx-related-outlet" [class.pdx-related-outlet--compact]="compact()">
|
|
37017
|
+
@if (resolution().state === 'ready' && mode() === 'inline' && resolution().payload?.widget) {
|
|
37018
|
+
<ng-container
|
|
37019
|
+
[dynamicWidgetLoader]="resolution().payload!.widget"
|
|
37020
|
+
[ownerWidgetKey]="ownerWidgetKey()"
|
|
37021
|
+
[context]="resolution().payload!.context || null"
|
|
37022
|
+
[strictValidation]="strictValidation()"
|
|
37023
|
+
[autoWireOutputs]="true"
|
|
37024
|
+
(widgetEvent)="onWidgetEvent($event)"
|
|
37025
|
+
></ng-container>
|
|
37026
|
+
} @else {
|
|
37027
|
+
<div
|
|
37028
|
+
class="pdx-related-outlet__state"
|
|
37029
|
+
[class.pdx-related-outlet__state--ready]="resolution().state === 'ready'"
|
|
37030
|
+
[class.pdx-related-outlet__state--busy]="isBusy()"
|
|
37031
|
+
role="status"
|
|
37032
|
+
aria-live="polite"
|
|
37033
|
+
>
|
|
37034
|
+
<div class="pdx-related-outlet__icon" aria-hidden="true">
|
|
37035
|
+
@if (isBusy()) {
|
|
37036
|
+
<mat-progress-spinner mode="indeterminate" diameter="22"></mat-progress-spinner>
|
|
37037
|
+
} @else {
|
|
37038
|
+
<mat-icon [fontIcon]="stateIcon()"></mat-icon>
|
|
37039
|
+
}
|
|
37040
|
+
</div>
|
|
37041
|
+
<div class="pdx-related-outlet__copy">
|
|
37042
|
+
<h3>{{ stateTitle() }}</h3>
|
|
37043
|
+
<p>{{ stateDescription() }}</p>
|
|
37044
|
+
</div>
|
|
37045
|
+
@if (resolution().state === 'ready' && mode() === 'open-action') {
|
|
37046
|
+
<button mat-flat-button type="button" color="primary" (click)="openRelated()">
|
|
37047
|
+
<mat-icon fontIcon="open_in_new" aria-hidden="true"></mat-icon>
|
|
37048
|
+
{{ t('action.open', 'Open related') }}
|
|
37049
|
+
</button>
|
|
37050
|
+
}
|
|
37051
|
+
</div>
|
|
37052
|
+
}
|
|
37053
|
+
</section>
|
|
37054
|
+
`, isInline: true, styles: [":host{display:block;min-width:0}.pdx-related-outlet{display:block;min-width:0;color:var(--md-sys-color-on-surface, currentColor)}.pdx-related-outlet__state{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--pdx-related-outlet-gap, 12px);min-height:var(--pdx-related-outlet-min-height, 64px);padding:var(--pdx-related-outlet-padding, 12px);border:1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, .16));border-radius:var(--pdx-related-outlet-radius, 8px);background:var(--md-sys-color-surface-container-low, var(--md-sys-color-surface, transparent))}.pdx-related-outlet--compact .pdx-related-outlet__state{min-height:var(--pdx-related-outlet-compact-min-height, 48px);padding:var(--pdx-related-outlet-compact-padding, 8px 10px)}.pdx-related-outlet__state--ready{border-color:var(--md-sys-color-primary, currentColor)}.pdx-related-outlet__icon{display:inline-grid;place-items:center;width:32px;height:32px;color:var(--md-sys-color-primary, currentColor)}.pdx-related-outlet__state--busy .pdx-related-outlet__icon{color:var(--md-sys-color-secondary, currentColor)}.pdx-related-outlet__copy{display:grid;gap:2px;min-width:0}.pdx-related-outlet__copy h3,.pdx-related-outlet__copy p{margin:0}.pdx-related-outlet__copy h3{font:var(--md-sys-typescale-title-small, 600 .95rem/1.25rem system-ui);color:var(--md-sys-color-on-surface, currentColor)}.pdx-related-outlet__copy p{font:var(--md-sys-typescale-body-small, 400 .82rem/1.15rem system-ui);color:var(--md-sys-color-on-surface-variant, currentColor)}@media(max-width:600px){.pdx-related-outlet__state{grid-template-columns:auto minmax(0,1fr)}.pdx-related-outlet__state button{grid-column:1 / -1;justify-self:start}}\n"], dependencies: [{ kind: "directive", type: DynamicWidgetLoaderDirective, selector: "[dynamicWidgetLoader]", inputs: ["dynamicWidgetLoader", "ownerWidgetKey", "context", "strictValidation", "autoWireOutputs"], outputs: ["widgetEvent", "widgetDiagnostic"], exportAs: ["dynamicWidgetLoader"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i3$2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] });
|
|
37055
|
+
}
|
|
37056
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisRelatedResourceOutletComponent, decorators: [{
|
|
37057
|
+
type: Component,
|
|
37058
|
+
args: [{ selector: 'praxis-related-resource-outlet', standalone: true, host: {
|
|
37059
|
+
'data-praxis-related-resource-outlet': 'core',
|
|
37060
|
+
'[attr.data-state]': 'resolution().state',
|
|
37061
|
+
}, imports: [
|
|
37062
|
+
DynamicWidgetLoaderDirective,
|
|
37063
|
+
MatButtonModule,
|
|
37064
|
+
MatIconModule,
|
|
37065
|
+
MatProgressSpinnerModule,
|
|
37066
|
+
], providers: [providePraxisI18nConfig(RELATED_RESOURCE_OUTLET_I18N_CONFIG)], template: `
|
|
37067
|
+
<section class="pdx-related-outlet" [class.pdx-related-outlet--compact]="compact()">
|
|
37068
|
+
@if (resolution().state === 'ready' && mode() === 'inline' && resolution().payload?.widget) {
|
|
37069
|
+
<ng-container
|
|
37070
|
+
[dynamicWidgetLoader]="resolution().payload!.widget"
|
|
37071
|
+
[ownerWidgetKey]="ownerWidgetKey()"
|
|
37072
|
+
[context]="resolution().payload!.context || null"
|
|
37073
|
+
[strictValidation]="strictValidation()"
|
|
37074
|
+
[autoWireOutputs]="true"
|
|
37075
|
+
(widgetEvent)="onWidgetEvent($event)"
|
|
37076
|
+
></ng-container>
|
|
37077
|
+
} @else {
|
|
37078
|
+
<div
|
|
37079
|
+
class="pdx-related-outlet__state"
|
|
37080
|
+
[class.pdx-related-outlet__state--ready]="resolution().state === 'ready'"
|
|
37081
|
+
[class.pdx-related-outlet__state--busy]="isBusy()"
|
|
37082
|
+
role="status"
|
|
37083
|
+
aria-live="polite"
|
|
37084
|
+
>
|
|
37085
|
+
<div class="pdx-related-outlet__icon" aria-hidden="true">
|
|
37086
|
+
@if (isBusy()) {
|
|
37087
|
+
<mat-progress-spinner mode="indeterminate" diameter="22"></mat-progress-spinner>
|
|
37088
|
+
} @else {
|
|
37089
|
+
<mat-icon [fontIcon]="stateIcon()"></mat-icon>
|
|
37090
|
+
}
|
|
37091
|
+
</div>
|
|
37092
|
+
<div class="pdx-related-outlet__copy">
|
|
37093
|
+
<h3>{{ stateTitle() }}</h3>
|
|
37094
|
+
<p>{{ stateDescription() }}</p>
|
|
37095
|
+
</div>
|
|
37096
|
+
@if (resolution().state === 'ready' && mode() === 'open-action') {
|
|
37097
|
+
<button mat-flat-button type="button" color="primary" (click)="openRelated()">
|
|
37098
|
+
<mat-icon fontIcon="open_in_new" aria-hidden="true"></mat-icon>
|
|
37099
|
+
{{ t('action.open', 'Open related') }}
|
|
37100
|
+
</button>
|
|
37101
|
+
}
|
|
37102
|
+
</div>
|
|
37103
|
+
}
|
|
37104
|
+
</section>
|
|
37105
|
+
`, styles: [":host{display:block;min-width:0}.pdx-related-outlet{display:block;min-width:0;color:var(--md-sys-color-on-surface, currentColor)}.pdx-related-outlet__state{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--pdx-related-outlet-gap, 12px);min-height:var(--pdx-related-outlet-min-height, 64px);padding:var(--pdx-related-outlet-padding, 12px);border:1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, .16));border-radius:var(--pdx-related-outlet-radius, 8px);background:var(--md-sys-color-surface-container-low, var(--md-sys-color-surface, transparent))}.pdx-related-outlet--compact .pdx-related-outlet__state{min-height:var(--pdx-related-outlet-compact-min-height, 48px);padding:var(--pdx-related-outlet-compact-padding, 8px 10px)}.pdx-related-outlet__state--ready{border-color:var(--md-sys-color-primary, currentColor)}.pdx-related-outlet__icon{display:inline-grid;place-items:center;width:32px;height:32px;color:var(--md-sys-color-primary, currentColor)}.pdx-related-outlet__state--busy .pdx-related-outlet__icon{color:var(--md-sys-color-secondary, currentColor)}.pdx-related-outlet__copy{display:grid;gap:2px;min-width:0}.pdx-related-outlet__copy h3,.pdx-related-outlet__copy p{margin:0}.pdx-related-outlet__copy h3{font:var(--md-sys-typescale-title-small, 600 .95rem/1.25rem system-ui);color:var(--md-sys-color-on-surface, currentColor)}.pdx-related-outlet__copy p{font:var(--md-sys-typescale-body-small, 400 .82rem/1.15rem system-ui);color:var(--md-sys-color-on-surface-variant, currentColor)}@media(max-width:600px){.pdx-related-outlet__state{grid-template-columns:auto minmax(0,1fr)}.pdx-related-outlet__state button{grid-column:1 / -1;justify-self:start}}\n"] }]
|
|
37106
|
+
}], ctorParameters: () => [], propDecorators: { surface: [{ type: i0.Input, args: [{ isSignal: true, alias: "surface", required: false }] }], surfaceId: [{ type: i0.Input, args: [{ isSignal: true, alias: "surfaceId", required: false }] }], surfaceCatalog: [{ type: i0.Input, args: [{ isSignal: true, alias: "surfaceCatalog", required: false }] }], discoverySource: [{ type: i0.Input, args: [{ isSignal: true, alias: "discoverySource", required: false }] }], parentLinks: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentLinks", required: false }] }], apiEndpointKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "apiEndpointKey", required: false }] }], apiUrlEntry: [{ type: i0.Input, args: [{ isSignal: true, alias: "apiUrlEntry", required: false }] }], parentRecord: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentRecord", required: false }] }], parentResourceId: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentResourceId", required: false }] }], parentResourcePath: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentResourcePath", required: false }] }], presentation: [{ type: i0.Input, args: [{ isSignal: true, alias: "presentation", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], tableId: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableId", required: false }] }], queryContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "queryContext", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], stateReason: [{ type: i0.Input, args: [{ isSignal: true, alias: "stateReason", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], strictValidation: [{ type: i0.Input, args: [{ isSignal: true, alias: "strictValidation", required: false }] }], ownerWidgetKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "ownerWidgetKey", required: false }] }], surfaceOpen: [{ type: i0.Output, args: ["surfaceOpen"] }], widgetEvent: [{ type: i0.Output, args: ["widgetEvent"] }], resourceEvent: [{ type: i0.Output, args: ["resourceEvent"] }] } });
|
|
37107
|
+
|
|
37108
|
+
const PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA = {
|
|
37109
|
+
id: 'praxis-related-resource-outlet',
|
|
37110
|
+
selector: 'praxis-related-resource-outlet',
|
|
37111
|
+
component: PraxisRelatedResourceOutletComponent,
|
|
37112
|
+
friendlyName: 'Related Resource Outlet',
|
|
37113
|
+
description: 'Runtime genérico para materializar surface.relatedResource como tabela filha governada por metadata.',
|
|
37114
|
+
icon: 'hub',
|
|
37115
|
+
inputs: [
|
|
37116
|
+
{ name: 'surfaceId', type: 'string | null', description: 'Identidade declarativa da surface quando o outlet deve descobri-la no catálogo do recurso.' },
|
|
37117
|
+
{ name: 'surfaceCatalog', type: 'ResourceSurfaceCatalogResponse | null', description: 'Catálogo de surfaces já carregado pelo host; evita nova consulta quando disponível.' },
|
|
37118
|
+
{ name: 'discoverySource', type: 'ResourceLinkSource | null', description: 'Resposta HATEOAS ou mapa de links usado para seguir rel surfaces quando surface não foi fornecida.' },
|
|
37119
|
+
{ name: 'parentLinks', type: 'RestApiLinks | RestApiResponse<unknown> | null', description: 'Atalho para links do registro pai; tem o mesmo papel de discoverySource para rel surfaces.' },
|
|
37120
|
+
{ name: 'apiEndpointKey', type: 'ApiEndpoint | null', description: 'Endpoint Praxis usado pelo ResourceDiscoveryService ao resolver links ou fallback do catálogo.' },
|
|
37121
|
+
{ name: 'apiUrlEntry', type: 'ApiUrlEntry | null', description: 'Entrada de API já resolvida para hosts destacados ou integrações remotas.' },
|
|
37122
|
+
{ name: 'surface', type: 'ResourceSurfaceCatalogItem | null', description: 'Surface de catálogo que pode publicar relatedResource.' },
|
|
37123
|
+
{ name: 'parentRecord', type: 'Record<string, unknown> | null', description: 'Registro pai usado para resolver parentIdPathVariable.' },
|
|
37124
|
+
{ name: 'parentResourceId', type: 'string | number | null', description: 'Identificador explícito do registro pai quando não vem do record.' },
|
|
37125
|
+
{ name: 'parentResourcePath', type: 'string | null', description: 'ResourcePath do recurso pai para contexto da surface.' },
|
|
37126
|
+
{ name: 'queryContext', type: 'RelatedResourceQueryContext | null', description: 'QueryContext base mesclado com o filtro canônico da relação filha.' },
|
|
37127
|
+
{ name: 'mode', type: "'inline' | 'open-action'", description: 'Renderiza a tabela filha inline ou emite payload para abertura host-mediated.', default: 'inline' },
|
|
37128
|
+
{ name: 'state', type: 'RelatedResourceResolutionState | null', description: 'Override de estado para hosts/outlets que estejam carregando discovery remoto.' },
|
|
37129
|
+
{ name: 'compact', type: 'boolean', description: 'Reduz densidade visual dos estados não materializados.', default: false },
|
|
37130
|
+
{ name: 'strictValidation', type: 'boolean', description: 'Validação estrita do widget materializado pelo DynamicWidgetLoader.', default: false },
|
|
37131
|
+
],
|
|
37132
|
+
outputs: [
|
|
37133
|
+
{ name: 'surfaceOpen', type: 'SurfaceOpenPayload', description: 'Emitido em modo open-action com o payload pronto de surface.open.' },
|
|
37134
|
+
{ name: 'widgetEvent', type: 'WidgetEventEnvelope', description: 'Reemite eventos do widget filho materializado.' },
|
|
37135
|
+
{ name: 'resourceEvent', type: 'PraxisResourceEvent', description: 'Promove eventos canonicos emitidos pelo widget filho materializado.' },
|
|
37136
|
+
],
|
|
37137
|
+
tags: ['resource', 'surface', 'related-resource', 'runtime', 'metadata-driven'],
|
|
37138
|
+
lib: '@praxisui/core',
|
|
37139
|
+
};
|
|
37140
|
+
function providePraxisRelatedResourceOutletMetadata() {
|
|
37141
|
+
return {
|
|
37142
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
37143
|
+
multi: true,
|
|
37144
|
+
useFactory: (registry) => () => {
|
|
37145
|
+
registry.register(PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA);
|
|
37146
|
+
},
|
|
37147
|
+
deps: [ComponentMetadataRegistry],
|
|
37148
|
+
};
|
|
37149
|
+
}
|
|
37150
|
+
|
|
36448
37151
|
class EmptyStateCardComponent {
|
|
36449
37152
|
icon = 'tab';
|
|
36450
37153
|
title = 'Sem configuração disponível';
|
|
@@ -37903,4 +38606,4 @@ function provideHookWhitelist(allowed) {
|
|
|
37903
38606
|
* Generated bundle index. Do not edit.
|
|
37904
38607
|
*/
|
|
37905
38608
|
|
|
37906
|
-
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, 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, 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_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_RICH_TEXT_BLOCK_METADATA, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, 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, PraxisRuntimeComponentObservationRegistryService, 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, SurfaceOpenMaterializerService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, 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, evaluateFieldAccess, 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, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, materializeFormLayoutFromMetadata, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldAccessMetadata, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, 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, providePraxisEnterpriseRuntimeContext, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, 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, withFormConfigSections, withMessage, withPraxisHttpLoading };
|
|
38609
|
+
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, 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, 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_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_COMPONENT_METADATA, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, 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, PraxisRelatedResourceOutletComponent, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RelatedResourceSurfaceResolverService, 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, SurfaceOpenMaterializerService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, 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, evaluateFieldAccess, 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, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, materializeFormLayoutFromMetadata, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldAccessMetadata, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, 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, providePraxisEnterpriseRuntimeContext, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRelatedResourceOutletMetadata, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, 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, withFormConfigSections, withMessage, withPraxisHttpLoading };
|