@praxisui/core 9.0.0-beta.35 → 9.0.0-beta.37
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 +107 -3
- package/fesm2022/praxisui-core.mjs +621 -10
- package/package.json +1 -1
- package/types/praxisui-core.d.ts +151 -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, input, output } 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: {
|
|
@@ -20908,15 +21099,16 @@ function createSection(groupKey, groupFields, sectionIndex, policy, options) {
|
|
|
20908
21099
|
: {}),
|
|
20909
21100
|
rows: policy.preset === 'groupedCommand'
|
|
20910
21101
|
? createCommandRows(groupFields, sectionId)
|
|
20911
|
-
: createPresentationRows(groupFields, sectionId),
|
|
21102
|
+
: createPresentationRows(groupFields, sectionId, policy),
|
|
20912
21103
|
};
|
|
20913
21104
|
}
|
|
20914
|
-
function createPresentationRows(fields, sectionId) {
|
|
21105
|
+
function createPresentationRows(fields, sectionId, policy) {
|
|
20915
21106
|
const presentationFields = resolvePresentationFields(fields);
|
|
20916
21107
|
const rows = [];
|
|
20917
21108
|
let pending = [];
|
|
20918
21109
|
let pendingSpan = 0;
|
|
20919
21110
|
let rowIndex = 0;
|
|
21111
|
+
const summarySpan = resolveDetailSummaryColumnSpan(policy);
|
|
20920
21112
|
const flush = () => {
|
|
20921
21113
|
if (!pending.length)
|
|
20922
21114
|
return;
|
|
@@ -20927,25 +21119,25 @@ function createPresentationRows(fields, sectionId) {
|
|
|
20927
21119
|
for (const field of presentationFields) {
|
|
20928
21120
|
const span = hasExplicitWidth(field)
|
|
20929
21121
|
? resolveCommandSpan(field)
|
|
20930
|
-
: { xs: 12, sm: 12, md: 12, lg: 12, xl: 12 };
|
|
20931
|
-
const
|
|
21122
|
+
: (summarySpan ?? { xs: 12, sm: 12, md: 12, lg: 12, xl: 12 });
|
|
21123
|
+
const packingSpan = resolveRowPackingSpan(span);
|
|
20932
21124
|
const column = {
|
|
20933
21125
|
id: `${sectionId}-col-${field.name}`,
|
|
20934
21126
|
fields: [field.name],
|
|
20935
21127
|
items: [{ id: `${sectionId}-item-${field.name}`, kind: 'field', fieldName: field.name }],
|
|
20936
21128
|
span,
|
|
20937
21129
|
};
|
|
20938
|
-
if (
|
|
21130
|
+
if (packingSpan >= 12) {
|
|
20939
21131
|
flush();
|
|
20940
21132
|
pending = [column];
|
|
20941
21133
|
flush();
|
|
20942
21134
|
continue;
|
|
20943
21135
|
}
|
|
20944
|
-
if (pendingSpan +
|
|
21136
|
+
if (pendingSpan + packingSpan > 12) {
|
|
20945
21137
|
flush();
|
|
20946
21138
|
}
|
|
20947
21139
|
pending.push(column);
|
|
20948
|
-
pendingSpan +=
|
|
21140
|
+
pendingSpan += packingSpan;
|
|
20949
21141
|
}
|
|
20950
21142
|
flush();
|
|
20951
21143
|
return rows;
|
|
@@ -21025,10 +21217,62 @@ function resolveCommandSpan(field) {
|
|
|
21025
21217
|
}
|
|
21026
21218
|
return { xs: 12, sm: 12, md: 6, lg: 6, xl: 6 };
|
|
21027
21219
|
}
|
|
21220
|
+
function resolveRowPackingSpan(span) {
|
|
21221
|
+
return Math.max(span.md ?? 12, span.lg ?? span.md ?? 12, span.xl ?? span.lg ?? span.md ?? 12);
|
|
21222
|
+
}
|
|
21028
21223
|
function hasExplicitWidth(field) {
|
|
21029
21224
|
const rawWidth = field.width;
|
|
21030
21225
|
return rawWidth !== undefined && rawWidth !== null && String(rawWidth).trim() !== '';
|
|
21031
21226
|
}
|
|
21227
|
+
function resolveDetailSummaryColumnSpan(policy) {
|
|
21228
|
+
if (policy.preset !== 'compactPresentation' || policy.intent === 'command') {
|
|
21229
|
+
return null;
|
|
21230
|
+
}
|
|
21231
|
+
const summary = policy.detailSummary;
|
|
21232
|
+
if (!summary) {
|
|
21233
|
+
return null;
|
|
21234
|
+
}
|
|
21235
|
+
const columns = normalizeResponsiveColumns(summary.columns, summary.responsiveColumns);
|
|
21236
|
+
if (!columns) {
|
|
21237
|
+
return null;
|
|
21238
|
+
}
|
|
21239
|
+
return {
|
|
21240
|
+
xs: spanForColumns(columns.xs),
|
|
21241
|
+
sm: spanForColumns(columns.sm),
|
|
21242
|
+
md: spanForColumns(columns.md),
|
|
21243
|
+
lg: spanForColumns(columns.lg),
|
|
21244
|
+
xl: spanForColumns(columns.xl),
|
|
21245
|
+
};
|
|
21246
|
+
}
|
|
21247
|
+
function normalizeResponsiveColumns(baseColumns, responsiveColumns) {
|
|
21248
|
+
const explicitBase = normalizeColumnCount(baseColumns);
|
|
21249
|
+
const xs = normalizeColumnCount(responsiveColumns?.xs) ?? 1;
|
|
21250
|
+
const sm = normalizeColumnCount(responsiveColumns?.sm) ?? xs;
|
|
21251
|
+
const md = normalizeColumnCount(responsiveColumns?.md) ?? explicitBase ?? sm;
|
|
21252
|
+
const lg = normalizeColumnCount(responsiveColumns?.lg) ?? explicitBase ?? md;
|
|
21253
|
+
const xl = normalizeColumnCount(responsiveColumns?.xl) ?? explicitBase ?? lg;
|
|
21254
|
+
if (!explicitBase && !responsiveColumns) {
|
|
21255
|
+
return null;
|
|
21256
|
+
}
|
|
21257
|
+
return { xs, sm, md, lg, xl };
|
|
21258
|
+
}
|
|
21259
|
+
function normalizeColumnCount(value) {
|
|
21260
|
+
if (value == null) {
|
|
21261
|
+
return null;
|
|
21262
|
+
}
|
|
21263
|
+
const numeric = typeof value === 'number'
|
|
21264
|
+
? value
|
|
21265
|
+
: typeof value === 'string' && /^\d+$/.test(value.trim())
|
|
21266
|
+
? Number(value.trim())
|
|
21267
|
+
: NaN;
|
|
21268
|
+
if (!Number.isFinite(numeric)) {
|
|
21269
|
+
return null;
|
|
21270
|
+
}
|
|
21271
|
+
return Math.max(1, Math.min(12, Math.round(numeric)));
|
|
21272
|
+
}
|
|
21273
|
+
function spanForColumns(columns) {
|
|
21274
|
+
return Math.max(1, Math.min(12, Math.floor(12 / columns)));
|
|
21275
|
+
}
|
|
21032
21276
|
function fieldsForPolicy(fields, policy) {
|
|
21033
21277
|
if (policy.preset !== 'compactPresentation') {
|
|
21034
21278
|
return fields;
|
|
@@ -36107,6 +36351,7 @@ class PraxisSurfaceHostComponent {
|
|
|
36107
36351
|
widgetEvent = new EventEmitter();
|
|
36108
36352
|
rowClick = new EventEmitter();
|
|
36109
36353
|
selectionChange = new EventEmitter();
|
|
36354
|
+
resourceEvent = new EventEmitter();
|
|
36110
36355
|
beforeWidgetLoader;
|
|
36111
36356
|
mainWidgetLoader;
|
|
36112
36357
|
afterWidgetLoader;
|
|
@@ -36220,19 +36465,103 @@ class PraxisSurfaceHostComponent {
|
|
|
36220
36465
|
}
|
|
36221
36466
|
}
|
|
36222
36467
|
onSlotWidgetEvent(ownerWidgetKey, event) {
|
|
36468
|
+
const resourceEvent = event.resourceEvent ?? this.toResourceEvent(ownerWidgetKey, event);
|
|
36223
36469
|
if (event.output === 'rowClick') {
|
|
36224
36470
|
this.rowClick.emit(event.payload);
|
|
36225
36471
|
}
|
|
36226
36472
|
if (event.output === 'selectionChange') {
|
|
36227
36473
|
this.selectionChange.emit(event.payload);
|
|
36228
36474
|
}
|
|
36475
|
+
if (resourceEvent) {
|
|
36476
|
+
this.resourceEvent.emit(resourceEvent);
|
|
36477
|
+
}
|
|
36229
36478
|
this.widgetEvent.emit({
|
|
36230
36479
|
...event,
|
|
36480
|
+
resourceEvent: resourceEvent ?? undefined,
|
|
36231
36481
|
ownerWidgetKey: event.ownerWidgetKey || ownerWidgetKey,
|
|
36232
36482
|
});
|
|
36233
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
|
+
}
|
|
36234
36563
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisSurfaceHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
36235
|
-
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: `
|
|
36236
36565
|
<div class="pdx-surface-host">
|
|
36237
36566
|
@if (subtitle || (title && renderTitleInsideBody)) {
|
|
36238
36567
|
<header class="pdx-surface-host__header">
|
|
@@ -36381,6 +36710,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
36381
36710
|
type: Output
|
|
36382
36711
|
}], selectionChange: [{
|
|
36383
36712
|
type: Output
|
|
36713
|
+
}], resourceEvent: [{
|
|
36714
|
+
type: Output
|
|
36384
36715
|
}], beforeWidgetLoader: [{
|
|
36385
36716
|
type: ViewChild,
|
|
36386
36717
|
args: ['beforeWidgetLoader', { read: DynamicWidgetLoaderDirective }]
|
|
@@ -36392,6 +36723,286 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
36392
36723
|
args: ['afterWidgetLoader', { read: DynamicWidgetLoaderDirective }]
|
|
36393
36724
|
}] } });
|
|
36394
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
|
+
surface = input(null, ...(ngDevMode ? [{ debugName: "surface" }] : /* istanbul ignore next */ []));
|
|
36774
|
+
parentRecord = input(null, ...(ngDevMode ? [{ debugName: "parentRecord" }] : /* istanbul ignore next */ []));
|
|
36775
|
+
parentResourceId = input(null, ...(ngDevMode ? [{ debugName: "parentResourceId" }] : /* istanbul ignore next */ []));
|
|
36776
|
+
parentResourcePath = input(null, ...(ngDevMode ? [{ debugName: "parentResourcePath" }] : /* istanbul ignore next */ []));
|
|
36777
|
+
presentation = input('drawer', ...(ngDevMode ? [{ debugName: "presentation" }] : /* istanbul ignore next */ []));
|
|
36778
|
+
title = input(null, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
36779
|
+
subtitle = input(null, ...(ngDevMode ? [{ debugName: "subtitle" }] : /* istanbul ignore next */ []));
|
|
36780
|
+
icon = input(null, ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
36781
|
+
tableId = input(null, ...(ngDevMode ? [{ debugName: "tableId" }] : /* istanbul ignore next */ []));
|
|
36782
|
+
queryContext = input(null, ...(ngDevMode ? [{ debugName: "queryContext" }] : /* istanbul ignore next */ []));
|
|
36783
|
+
mode = input('inline', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
36784
|
+
state = input(null, ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
|
|
36785
|
+
stateReason = input(null, ...(ngDevMode ? [{ debugName: "stateReason" }] : /* istanbul ignore next */ []));
|
|
36786
|
+
compact = input(false, ...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
|
|
36787
|
+
strictValidation = input(false, ...(ngDevMode ? [{ debugName: "strictValidation" }] : /* istanbul ignore next */ []));
|
|
36788
|
+
ownerWidgetKey = input('related-resource.outlet', ...(ngDevMode ? [{ debugName: "ownerWidgetKey" }] : /* istanbul ignore next */ []));
|
|
36789
|
+
surfaceOpen = output();
|
|
36790
|
+
widgetEvent = output();
|
|
36791
|
+
resourceEvent = output();
|
|
36792
|
+
resolution = computed(() => {
|
|
36793
|
+
const state = this.state();
|
|
36794
|
+
if (state && state !== 'ready') {
|
|
36795
|
+
return this.resolver.state(state, this.stateReason() || undefined);
|
|
36796
|
+
}
|
|
36797
|
+
return this.resolver.resolve({
|
|
36798
|
+
surface: this.surface(),
|
|
36799
|
+
parentRecord: this.parentRecord(),
|
|
36800
|
+
parentResourceId: this.parentResourceId(),
|
|
36801
|
+
parentResourcePath: this.parentResourcePath(),
|
|
36802
|
+
presentation: this.presentation(),
|
|
36803
|
+
title: this.title(),
|
|
36804
|
+
subtitle: this.subtitle(),
|
|
36805
|
+
icon: this.icon(),
|
|
36806
|
+
tableId: this.tableId(),
|
|
36807
|
+
queryContext: this.queryContext(),
|
|
36808
|
+
});
|
|
36809
|
+
}, ...(ngDevMode ? [{ debugName: "resolution" }] : /* istanbul ignore next */ []));
|
|
36810
|
+
isBusy = computed(() => {
|
|
36811
|
+
const state = this.resolution().state;
|
|
36812
|
+
return state === 'resolving' || state === 'loading';
|
|
36813
|
+
}, ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
|
|
36814
|
+
openRelated() {
|
|
36815
|
+
const payload = this.resolution().payload;
|
|
36816
|
+
if (payload) {
|
|
36817
|
+
this.surfaceOpen.emit(payload);
|
|
36818
|
+
}
|
|
36819
|
+
}
|
|
36820
|
+
onWidgetEvent(event) {
|
|
36821
|
+
const resourceEvent = event.resourceEvent ?? this.extractResourceEvent(event);
|
|
36822
|
+
if (resourceEvent) {
|
|
36823
|
+
this.resourceEvent.emit(resourceEvent);
|
|
36824
|
+
this.widgetEvent.emit({ ...event, resourceEvent });
|
|
36825
|
+
return;
|
|
36826
|
+
}
|
|
36827
|
+
this.widgetEvent.emit(event);
|
|
36828
|
+
}
|
|
36829
|
+
stateIcon() {
|
|
36830
|
+
switch (this.resolution().state) {
|
|
36831
|
+
case 'ready':
|
|
36832
|
+
return 'hub';
|
|
36833
|
+
case 'permission-limited':
|
|
36834
|
+
return 'lock';
|
|
36835
|
+
case 'not-found':
|
|
36836
|
+
return 'link_off';
|
|
36837
|
+
case 'empty':
|
|
36838
|
+
return 'playlist_remove';
|
|
36839
|
+
case 'error':
|
|
36840
|
+
return 'error';
|
|
36841
|
+
default:
|
|
36842
|
+
return 'account_tree';
|
|
36843
|
+
}
|
|
36844
|
+
}
|
|
36845
|
+
stateTitle() {
|
|
36846
|
+
const state = this.resolution().state;
|
|
36847
|
+
return this.t(`state.${state}.title`, this.defaultTitle(state));
|
|
36848
|
+
}
|
|
36849
|
+
stateDescription() {
|
|
36850
|
+
const state = this.resolution().state;
|
|
36851
|
+
return this.t(`state.${state}.description`, this.defaultDescription(state));
|
|
36852
|
+
}
|
|
36853
|
+
t(key, fallback) {
|
|
36854
|
+
return this.i18n.t(key, undefined, fallback, RELATED_RESOURCE_OUTLET_I18N_NAMESPACE);
|
|
36855
|
+
}
|
|
36856
|
+
defaultTitle(state) {
|
|
36857
|
+
return state === 'ready'
|
|
36858
|
+
? this.t('status.ready', 'Related resource ready')
|
|
36859
|
+
: 'Related resource';
|
|
36860
|
+
}
|
|
36861
|
+
defaultDescription(state) {
|
|
36862
|
+
return this.resolution().reason || state;
|
|
36863
|
+
}
|
|
36864
|
+
extractResourceEvent(event) {
|
|
36865
|
+
if (event.output !== 'resourceEvent' || !event.payload || typeof event.payload !== 'object') {
|
|
36866
|
+
return null;
|
|
36867
|
+
}
|
|
36868
|
+
const candidate = event.payload;
|
|
36869
|
+
return typeof candidate.kind === 'string'
|
|
36870
|
+
&& typeof candidate.sourceComponentId === 'string'
|
|
36871
|
+
&& 'payload' in candidate
|
|
36872
|
+
? candidate
|
|
36873
|
+
: null;
|
|
36874
|
+
}
|
|
36875
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisRelatedResourceOutletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
36876
|
+
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 }, 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: `
|
|
36877
|
+
<section class="pdx-related-outlet" [class.pdx-related-outlet--compact]="compact()">
|
|
36878
|
+
@if (resolution().state === 'ready' && mode() === 'inline' && resolution().payload?.widget) {
|
|
36879
|
+
<ng-container
|
|
36880
|
+
[dynamicWidgetLoader]="resolution().payload!.widget"
|
|
36881
|
+
[ownerWidgetKey]="ownerWidgetKey()"
|
|
36882
|
+
[context]="resolution().payload!.context || null"
|
|
36883
|
+
[strictValidation]="strictValidation()"
|
|
36884
|
+
[autoWireOutputs]="true"
|
|
36885
|
+
(widgetEvent)="onWidgetEvent($event)"
|
|
36886
|
+
></ng-container>
|
|
36887
|
+
} @else {
|
|
36888
|
+
<div
|
|
36889
|
+
class="pdx-related-outlet__state"
|
|
36890
|
+
[class.pdx-related-outlet__state--ready]="resolution().state === 'ready'"
|
|
36891
|
+
[class.pdx-related-outlet__state--busy]="isBusy()"
|
|
36892
|
+
role="status"
|
|
36893
|
+
aria-live="polite"
|
|
36894
|
+
>
|
|
36895
|
+
<div class="pdx-related-outlet__icon" aria-hidden="true">
|
|
36896
|
+
@if (isBusy()) {
|
|
36897
|
+
<mat-progress-spinner mode="indeterminate" diameter="22"></mat-progress-spinner>
|
|
36898
|
+
} @else {
|
|
36899
|
+
<mat-icon [fontIcon]="stateIcon()"></mat-icon>
|
|
36900
|
+
}
|
|
36901
|
+
</div>
|
|
36902
|
+
<div class="pdx-related-outlet__copy">
|
|
36903
|
+
<h3>{{ stateTitle() }}</h3>
|
|
36904
|
+
<p>{{ stateDescription() }}</p>
|
|
36905
|
+
</div>
|
|
36906
|
+
@if (resolution().state === 'ready' && mode() === 'open-action') {
|
|
36907
|
+
<button mat-flat-button type="button" color="primary" (click)="openRelated()">
|
|
36908
|
+
<mat-icon fontIcon="open_in_new" aria-hidden="true"></mat-icon>
|
|
36909
|
+
{{ t('action.open', 'Open related') }}
|
|
36910
|
+
</button>
|
|
36911
|
+
}
|
|
36912
|
+
</div>
|
|
36913
|
+
}
|
|
36914
|
+
</section>
|
|
36915
|
+
`, 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"] }] });
|
|
36916
|
+
}
|
|
36917
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisRelatedResourceOutletComponent, decorators: [{
|
|
36918
|
+
type: Component,
|
|
36919
|
+
args: [{ selector: 'praxis-related-resource-outlet', standalone: true, host: {
|
|
36920
|
+
'data-praxis-related-resource-outlet': 'core',
|
|
36921
|
+
'[attr.data-state]': 'resolution().state',
|
|
36922
|
+
}, imports: [
|
|
36923
|
+
DynamicWidgetLoaderDirective,
|
|
36924
|
+
MatButtonModule,
|
|
36925
|
+
MatIconModule,
|
|
36926
|
+
MatProgressSpinnerModule,
|
|
36927
|
+
], providers: [providePraxisI18nConfig(RELATED_RESOURCE_OUTLET_I18N_CONFIG)], template: `
|
|
36928
|
+
<section class="pdx-related-outlet" [class.pdx-related-outlet--compact]="compact()">
|
|
36929
|
+
@if (resolution().state === 'ready' && mode() === 'inline' && resolution().payload?.widget) {
|
|
36930
|
+
<ng-container
|
|
36931
|
+
[dynamicWidgetLoader]="resolution().payload!.widget"
|
|
36932
|
+
[ownerWidgetKey]="ownerWidgetKey()"
|
|
36933
|
+
[context]="resolution().payload!.context || null"
|
|
36934
|
+
[strictValidation]="strictValidation()"
|
|
36935
|
+
[autoWireOutputs]="true"
|
|
36936
|
+
(widgetEvent)="onWidgetEvent($event)"
|
|
36937
|
+
></ng-container>
|
|
36938
|
+
} @else {
|
|
36939
|
+
<div
|
|
36940
|
+
class="pdx-related-outlet__state"
|
|
36941
|
+
[class.pdx-related-outlet__state--ready]="resolution().state === 'ready'"
|
|
36942
|
+
[class.pdx-related-outlet__state--busy]="isBusy()"
|
|
36943
|
+
role="status"
|
|
36944
|
+
aria-live="polite"
|
|
36945
|
+
>
|
|
36946
|
+
<div class="pdx-related-outlet__icon" aria-hidden="true">
|
|
36947
|
+
@if (isBusy()) {
|
|
36948
|
+
<mat-progress-spinner mode="indeterminate" diameter="22"></mat-progress-spinner>
|
|
36949
|
+
} @else {
|
|
36950
|
+
<mat-icon [fontIcon]="stateIcon()"></mat-icon>
|
|
36951
|
+
}
|
|
36952
|
+
</div>
|
|
36953
|
+
<div class="pdx-related-outlet__copy">
|
|
36954
|
+
<h3>{{ stateTitle() }}</h3>
|
|
36955
|
+
<p>{{ stateDescription() }}</p>
|
|
36956
|
+
</div>
|
|
36957
|
+
@if (resolution().state === 'ready' && mode() === 'open-action') {
|
|
36958
|
+
<button mat-flat-button type="button" color="primary" (click)="openRelated()">
|
|
36959
|
+
<mat-icon fontIcon="open_in_new" aria-hidden="true"></mat-icon>
|
|
36960
|
+
{{ t('action.open', 'Open related') }}
|
|
36961
|
+
</button>
|
|
36962
|
+
}
|
|
36963
|
+
</div>
|
|
36964
|
+
}
|
|
36965
|
+
</section>
|
|
36966
|
+
`, 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"] }]
|
|
36967
|
+
}], propDecorators: { surface: [{ type: i0.Input, args: [{ isSignal: true, alias: "surface", 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"] }] } });
|
|
36968
|
+
|
|
36969
|
+
const PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA = {
|
|
36970
|
+
id: 'praxis-related-resource-outlet',
|
|
36971
|
+
selector: 'praxis-related-resource-outlet',
|
|
36972
|
+
component: PraxisRelatedResourceOutletComponent,
|
|
36973
|
+
friendlyName: 'Related Resource Outlet',
|
|
36974
|
+
description: 'Runtime genérico para materializar surface.relatedResource como tabela filha governada por metadata.',
|
|
36975
|
+
icon: 'hub',
|
|
36976
|
+
inputs: [
|
|
36977
|
+
{ name: 'surface', type: 'ResourceSurfaceCatalogItem | null', description: 'Surface de catálogo que pode publicar relatedResource.' },
|
|
36978
|
+
{ name: 'parentRecord', type: 'Record<string, unknown> | null', description: 'Registro pai usado para resolver parentIdPathVariable.' },
|
|
36979
|
+
{ name: 'parentResourceId', type: 'string | number | null', description: 'Identificador explícito do registro pai quando não vem do record.' },
|
|
36980
|
+
{ name: 'parentResourcePath', type: 'string | null', description: 'ResourcePath do recurso pai para contexto da surface.' },
|
|
36981
|
+
{ name: 'queryContext', type: 'RelatedResourceQueryContext | null', description: 'QueryContext base mesclado com o filtro canônico da relação filha.' },
|
|
36982
|
+
{ name: 'mode', type: "'inline' | 'open-action'", description: 'Renderiza a tabela filha inline ou emite payload para abertura host-mediated.', default: 'inline' },
|
|
36983
|
+
{ name: 'state', type: 'RelatedResourceResolutionState | null', description: 'Override de estado para hosts/outlets que estejam carregando discovery remoto.' },
|
|
36984
|
+
{ name: 'compact', type: 'boolean', description: 'Reduz densidade visual dos estados não materializados.', default: false },
|
|
36985
|
+
{ name: 'strictValidation', type: 'boolean', description: 'Validação estrita do widget materializado pelo DynamicWidgetLoader.', default: false },
|
|
36986
|
+
],
|
|
36987
|
+
outputs: [
|
|
36988
|
+
{ name: 'surfaceOpen', type: 'SurfaceOpenPayload', description: 'Emitido em modo open-action com o payload pronto de surface.open.' },
|
|
36989
|
+
{ name: 'widgetEvent', type: 'WidgetEventEnvelope', description: 'Reemite eventos do widget filho materializado.' },
|
|
36990
|
+
{ name: 'resourceEvent', type: 'PraxisResourceEvent', description: 'Promove eventos canonicos emitidos pelo widget filho materializado.' },
|
|
36991
|
+
],
|
|
36992
|
+
tags: ['resource', 'surface', 'related-resource', 'runtime', 'metadata-driven'],
|
|
36993
|
+
lib: '@praxisui/core',
|
|
36994
|
+
};
|
|
36995
|
+
function providePraxisRelatedResourceOutletMetadata() {
|
|
36996
|
+
return {
|
|
36997
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
36998
|
+
multi: true,
|
|
36999
|
+
useFactory: (registry) => () => {
|
|
37000
|
+
registry.register(PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA);
|
|
37001
|
+
},
|
|
37002
|
+
deps: [ComponentMetadataRegistry],
|
|
37003
|
+
};
|
|
37004
|
+
}
|
|
37005
|
+
|
|
36395
37006
|
class EmptyStateCardComponent {
|
|
36396
37007
|
icon = 'tab';
|
|
36397
37008
|
title = 'Sem configuração disponível';
|
|
@@ -37850,4 +38461,4 @@ function provideHookWhitelist(allowed) {
|
|
|
37850
38461
|
* Generated bundle index. Do not edit.
|
|
37851
38462
|
*/
|
|
37852
38463
|
|
|
37853
|
-
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 };
|
|
38464
|
+
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 };
|