@praxisui/core 8.0.0-beta.11 → 8.0.0-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -0
- package/fesm2022/praxisui-core.mjs +803 -13
- package/index.d.ts +192 -15
- package/package.json +1 -1
|
@@ -127,6 +127,25 @@ function buildSchemaId(params) {
|
|
|
127
127
|
parts.push(`origin:${params.apiOrigin}`);
|
|
128
128
|
return parts.join('|');
|
|
129
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Produces a deterministic, storage-safe segment for places that impose short
|
|
132
|
+
* identifier limits. This must not replace the semantic schemaId stored in
|
|
133
|
+
* payloads or metadata.
|
|
134
|
+
*/
|
|
135
|
+
function buildSchemaIdStorageKeySegment(schemaId) {
|
|
136
|
+
const normalized = String(schemaId || '').trim();
|
|
137
|
+
if (!normalized)
|
|
138
|
+
return '';
|
|
139
|
+
return `schema-${fnv1a32Base36(normalized)}-${normalized.length.toString(36)}`;
|
|
140
|
+
}
|
|
141
|
+
function fnv1a32Base36(value) {
|
|
142
|
+
let hash = 0x811c9dc5;
|
|
143
|
+
for (let i = 0; i < value.length; i++) {
|
|
144
|
+
hash ^= value.charCodeAt(i);
|
|
145
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
146
|
+
}
|
|
147
|
+
return hash.toString(36).padStart(7, '0');
|
|
148
|
+
}
|
|
130
149
|
|
|
131
150
|
function hash(input) {
|
|
132
151
|
let h = 0;
|
|
@@ -5351,6 +5370,26 @@ class SurfaceBindingRuntimeService {
|
|
|
5351
5370
|
}
|
|
5352
5371
|
return resolvedWidget;
|
|
5353
5372
|
}
|
|
5373
|
+
resolveSurfacePayload(surfacePayload, actionContext, explicitContext) {
|
|
5374
|
+
const context = this.buildContext(surfacePayload, actionContext, explicitContext);
|
|
5375
|
+
let resolvedPayload = this.resolveTemplate(this.clone(surfacePayload), context);
|
|
5376
|
+
for (const binding of surfacePayload.bindings || []) {
|
|
5377
|
+
const rawTargetPath = String(binding?.to || '').trim();
|
|
5378
|
+
if (!rawTargetPath)
|
|
5379
|
+
continue;
|
|
5380
|
+
const value = this.resolveBindingValue(binding, context);
|
|
5381
|
+
if (rawTargetPath.startsWith('widget.')) {
|
|
5382
|
+
resolvedPayload = {
|
|
5383
|
+
...resolvedPayload,
|
|
5384
|
+
widget: this.setValueAtPath(resolvedPayload.widget, this.normalizeWidgetTargetPath(rawTargetPath), value),
|
|
5385
|
+
};
|
|
5386
|
+
}
|
|
5387
|
+
else {
|
|
5388
|
+
resolvedPayload = this.setValueAtPath(resolvedPayload, rawTargetPath, value);
|
|
5389
|
+
}
|
|
5390
|
+
}
|
|
5391
|
+
return resolvedPayload;
|
|
5392
|
+
}
|
|
5354
5393
|
extractByPath(obj, path) {
|
|
5355
5394
|
if (!path)
|
|
5356
5395
|
return obj;
|
|
@@ -5442,6 +5481,9 @@ class SurfaceBindingRuntimeService {
|
|
|
5442
5481
|
return '';
|
|
5443
5482
|
return path.startsWith('widget.') ? path.slice('widget.'.length) : path;
|
|
5444
5483
|
}
|
|
5484
|
+
normalizeWidgetTargetPath(rawPath) {
|
|
5485
|
+
return this.normalizeTargetPath(rawPath);
|
|
5486
|
+
}
|
|
5445
5487
|
tokenizePath(path) {
|
|
5446
5488
|
const tokens = [];
|
|
5447
5489
|
let buffer = '';
|
|
@@ -5925,9 +5967,14 @@ class GlobalActionService {
|
|
|
5925
5967
|
const payload = normalized.payloadExpr
|
|
5926
5968
|
? this.resolvePayloadExpr(normalized.payloadExpr, context)
|
|
5927
5969
|
: normalized.payload;
|
|
5970
|
+
const contextPayload = normalized.payloadExpr
|
|
5971
|
+
? payload
|
|
5972
|
+
: (context && Object.prototype.hasOwnProperty.call(context, 'payload')
|
|
5973
|
+
? context.payload
|
|
5974
|
+
: payload);
|
|
5928
5975
|
return this.execute(normalized.actionId, payload, {
|
|
5929
5976
|
...context,
|
|
5930
|
-
payload,
|
|
5977
|
+
payload: contextPayload,
|
|
5931
5978
|
meta: {
|
|
5932
5979
|
...(context?.meta || {}),
|
|
5933
5980
|
...(normalized.meta ? { actionRef: normalized.meta } : {}),
|
|
@@ -6029,8 +6076,8 @@ class GlobalActionService {
|
|
|
6029
6076
|
if (!surfacePayload?.widget?.id) {
|
|
6030
6077
|
return { success: false, error: 'surface.open requires widget.id' };
|
|
6031
6078
|
}
|
|
6032
|
-
const
|
|
6033
|
-
const data = await this.surface.open(
|
|
6079
|
+
const resolvedPayload = this.surfaceBindingRuntime.resolveSurfacePayload(surfacePayload, context, surfacePayload.context);
|
|
6080
|
+
const data = await this.surface.open(resolvedPayload, context);
|
|
6034
6081
|
return { success: true, data };
|
|
6035
6082
|
});
|
|
6036
6083
|
this.register('toast.success', async (payload) => {
|
|
@@ -7447,7 +7494,10 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
7447
7494
|
if (!parsed || !Array.isArray(rawDays)) {
|
|
7448
7495
|
return false;
|
|
7449
7496
|
}
|
|
7450
|
-
const normalized = rawDays
|
|
7497
|
+
const normalized = rawDays
|
|
7498
|
+
.map((item) => Number(item))
|
|
7499
|
+
.filter(Number.isFinite)
|
|
7500
|
+
.map((item) => item === 0 ? 7 : item);
|
|
7451
7501
|
if (!normalized.length) {
|
|
7452
7502
|
return false;
|
|
7453
7503
|
}
|
|
@@ -9421,6 +9471,439 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
9421
9471
|
args: [{ providedIn: 'root' }]
|
|
9422
9472
|
}] });
|
|
9423
9473
|
|
|
9474
|
+
const PRAXIS_EXPORT_FORMULA_PREFIXES = ['=', '+', '-', '@', '\t', '\r'];
|
|
9475
|
+
const PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY = {
|
|
9476
|
+
escapeFormulaValues: true,
|
|
9477
|
+
formulaPrefixes: PRAXIS_EXPORT_FORMULA_PREFIXES,
|
|
9478
|
+
formulaEscapePrefix: "'",
|
|
9479
|
+
};
|
|
9480
|
+
function resolvePraxisExportScope(request) {
|
|
9481
|
+
if (request.scope !== 'auto') {
|
|
9482
|
+
return request.scope;
|
|
9483
|
+
}
|
|
9484
|
+
const selection = request.selection;
|
|
9485
|
+
const hasSelectedItems = !!selection?.selectedItems?.length;
|
|
9486
|
+
const hasSelectedKeys = !!selection?.selectedKeys?.length;
|
|
9487
|
+
const hasAllMatchingSelection = selection?.allMatchingSelected === true;
|
|
9488
|
+
if (hasSelectedItems || hasSelectedKeys || hasAllMatchingSelection) {
|
|
9489
|
+
return 'selected';
|
|
9490
|
+
}
|
|
9491
|
+
return request.filters || request.query ? 'filtered' : 'currentPage';
|
|
9492
|
+
}
|
|
9493
|
+
function resolvePraxisCollectionExportItems(request) {
|
|
9494
|
+
const scope = resolvePraxisExportScope(request);
|
|
9495
|
+
const loadedItems = request.loadedItems ?? [];
|
|
9496
|
+
if (scope === 'selected') {
|
|
9497
|
+
const selectedItems = request.selection?.selectedItems;
|
|
9498
|
+
if (selectedItems?.length) {
|
|
9499
|
+
return selectedItems;
|
|
9500
|
+
}
|
|
9501
|
+
const keyField = request.selection?.keyField;
|
|
9502
|
+
const selectedKeys = request.selection?.selectedKeys;
|
|
9503
|
+
if (!keyField || !selectedKeys?.length) {
|
|
9504
|
+
return [];
|
|
9505
|
+
}
|
|
9506
|
+
const selectedKeySet = new Set(selectedKeys);
|
|
9507
|
+
return loadedItems.filter((item) => selectedKeySet.has(readPraxisExportValue(item, keyField)));
|
|
9508
|
+
}
|
|
9509
|
+
return loadedItems;
|
|
9510
|
+
}
|
|
9511
|
+
function resolvePraxisExportFields(request) {
|
|
9512
|
+
const configuredFields = request.fields?.filter((field) => field.exportable !== false && field.visible !== false);
|
|
9513
|
+
if (configuredFields?.length) {
|
|
9514
|
+
return configuredFields;
|
|
9515
|
+
}
|
|
9516
|
+
const sample = resolvePraxisCollectionExportItems(request)[0];
|
|
9517
|
+
if (!sample || typeof sample !== 'object') {
|
|
9518
|
+
return [];
|
|
9519
|
+
}
|
|
9520
|
+
return Object.keys(sample).map((key) => ({
|
|
9521
|
+
key,
|
|
9522
|
+
label: key,
|
|
9523
|
+
valuePath: key,
|
|
9524
|
+
}));
|
|
9525
|
+
}
|
|
9526
|
+
function readPraxisExportValue(item, path) {
|
|
9527
|
+
if (!item || !path) {
|
|
9528
|
+
return undefined;
|
|
9529
|
+
}
|
|
9530
|
+
return path.split('.').reduce((value, segment) => {
|
|
9531
|
+
if (!value || typeof value !== 'object') {
|
|
9532
|
+
return undefined;
|
|
9533
|
+
}
|
|
9534
|
+
return value[segment];
|
|
9535
|
+
}, item);
|
|
9536
|
+
}
|
|
9537
|
+
function escapePraxisExportCell(value, policy = PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY) {
|
|
9538
|
+
if (value === null || value === undefined) {
|
|
9539
|
+
return '';
|
|
9540
|
+
}
|
|
9541
|
+
const text = value instanceof Date ? value.toISOString() : String(value);
|
|
9542
|
+
if (!policy.escapeFormulaValues || !text) {
|
|
9543
|
+
return text;
|
|
9544
|
+
}
|
|
9545
|
+
return startsWithPraxisFormula(text, policy.formulaPrefixes)
|
|
9546
|
+
? `${policy.formulaEscapePrefix}${text}`
|
|
9547
|
+
: text;
|
|
9548
|
+
}
|
|
9549
|
+
function serializePraxisCollectionToCsv(request, policy = PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY) {
|
|
9550
|
+
const fields = resolvePraxisExportFields(request);
|
|
9551
|
+
const items = resolvePraxisCollectionExportItems(request);
|
|
9552
|
+
const rows = [];
|
|
9553
|
+
if (request.includeHeaders !== false) {
|
|
9554
|
+
rows.push(fields.map((field) => quoteCsvCell(field.label ?? field.key)).join(','));
|
|
9555
|
+
}
|
|
9556
|
+
for (const item of applyPraxisExportLimit(items, request.maxRows)) {
|
|
9557
|
+
const cells = fields.map((field) => {
|
|
9558
|
+
const rawValue = field.valueGetter
|
|
9559
|
+
? field.valueGetter(item)
|
|
9560
|
+
: readPraxisExportValue(item, field.valuePath ?? field.key);
|
|
9561
|
+
const formattedValue = request.applyFormatting !== false && field.formatter
|
|
9562
|
+
? field.formatter(rawValue, item)
|
|
9563
|
+
: rawValue;
|
|
9564
|
+
return quoteCsvCell(escapePraxisExportCell(formattedValue, policy));
|
|
9565
|
+
});
|
|
9566
|
+
rows.push(cells.join(','));
|
|
9567
|
+
}
|
|
9568
|
+
return rows.join('\r\n');
|
|
9569
|
+
}
|
|
9570
|
+
function serializePraxisCollectionToJson(request) {
|
|
9571
|
+
const fields = resolvePraxisExportFields(request);
|
|
9572
|
+
const items = applyPraxisExportLimit(resolvePraxisCollectionExportItems(request), request.maxRows);
|
|
9573
|
+
const rows = items.map((item) => fields.reduce((row, field) => {
|
|
9574
|
+
const rawValue = field.valueGetter
|
|
9575
|
+
? field.valueGetter(item)
|
|
9576
|
+
: readPraxisExportValue(item, field.valuePath ?? field.key);
|
|
9577
|
+
row[field.key] = request.applyFormatting !== false && field.formatter
|
|
9578
|
+
? field.formatter(rawValue, item)
|
|
9579
|
+
: rawValue;
|
|
9580
|
+
return row;
|
|
9581
|
+
}, {}));
|
|
9582
|
+
return JSON.stringify(rows, null, 2);
|
|
9583
|
+
}
|
|
9584
|
+
function hasPraxisCollectionExportArtifact(result) {
|
|
9585
|
+
if (!result) {
|
|
9586
|
+
return false;
|
|
9587
|
+
}
|
|
9588
|
+
if (result.status === 'deferred') {
|
|
9589
|
+
return true;
|
|
9590
|
+
}
|
|
9591
|
+
if (typeof result.downloadUrl === 'string' && result.downloadUrl.trim()) {
|
|
9592
|
+
return true;
|
|
9593
|
+
}
|
|
9594
|
+
return result.content !== undefined && result.content !== null;
|
|
9595
|
+
}
|
|
9596
|
+
function assertPraxisCollectionExportArtifact(result) {
|
|
9597
|
+
if (!hasPraxisCollectionExportArtifact(result)) {
|
|
9598
|
+
throw new Error('Collection export completed without content, downloadUrl, or deferred status.');
|
|
9599
|
+
}
|
|
9600
|
+
}
|
|
9601
|
+
function applyPraxisExportLimit(items, maxRows) {
|
|
9602
|
+
if (!maxRows || maxRows <= 0 || items.length <= maxRows) {
|
|
9603
|
+
return items;
|
|
9604
|
+
}
|
|
9605
|
+
return items.slice(0, maxRows);
|
|
9606
|
+
}
|
|
9607
|
+
function quoteCsvCell(value) {
|
|
9608
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
9609
|
+
}
|
|
9610
|
+
function startsWithPraxisFormula(text, formulaPrefixes) {
|
|
9611
|
+
let index = 0;
|
|
9612
|
+
while (index < text.length && /\s/.test(text.charAt(index))) {
|
|
9613
|
+
index += 1;
|
|
9614
|
+
}
|
|
9615
|
+
if (index >= text.length) {
|
|
9616
|
+
return false;
|
|
9617
|
+
}
|
|
9618
|
+
const candidate = text.slice(index);
|
|
9619
|
+
return formulaPrefixes.some((prefix) => candidate.startsWith(prefix));
|
|
9620
|
+
}
|
|
9621
|
+
|
|
9622
|
+
const PRAXIS_COLLECTION_EXPORT_PROVIDER = new InjectionToken('PRAXIS_COLLECTION_EXPORT_PROVIDER');
|
|
9623
|
+
const PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS = new InjectionToken('PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS', {
|
|
9624
|
+
providedIn: 'root',
|
|
9625
|
+
factory: () => ({}),
|
|
9626
|
+
});
|
|
9627
|
+
const PRAXIS_EXPORT_SECURITY_POLICY = new InjectionToken('PRAXIS_EXPORT_SECURITY_POLICY', {
|
|
9628
|
+
providedIn: 'root',
|
|
9629
|
+
factory: () => PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY,
|
|
9630
|
+
});
|
|
9631
|
+
function providePraxisCollectionExportProvider(provider) {
|
|
9632
|
+
return {
|
|
9633
|
+
provide: PRAXIS_COLLECTION_EXPORT_PROVIDER,
|
|
9634
|
+
useValue: provider,
|
|
9635
|
+
};
|
|
9636
|
+
}
|
|
9637
|
+
|
|
9638
|
+
class PraxisCollectionExportService {
|
|
9639
|
+
provider;
|
|
9640
|
+
securityPolicy;
|
|
9641
|
+
constructor(provider, securityPolicy) {
|
|
9642
|
+
this.provider = provider;
|
|
9643
|
+
this.securityPolicy = securityPolicy;
|
|
9644
|
+
}
|
|
9645
|
+
async exportCollection(request) {
|
|
9646
|
+
if (this.provider) {
|
|
9647
|
+
return this.provider.exportCollection(request);
|
|
9648
|
+
}
|
|
9649
|
+
return this.exportLocalCollection(request);
|
|
9650
|
+
}
|
|
9651
|
+
exportLocalCollection(request) {
|
|
9652
|
+
const scope = resolvePraxisExportScope(request);
|
|
9653
|
+
const requiresRemoteProvider = !!request.resourcePath && (scope === 'filtered' || scope === 'all');
|
|
9654
|
+
if (requiresRemoteProvider) {
|
|
9655
|
+
throw new Error(`PraxisCollectionExportService requires a collection export provider for remote "${scope}" exports.`);
|
|
9656
|
+
}
|
|
9657
|
+
const items = resolvePraxisCollectionExportItems(request);
|
|
9658
|
+
const rowCount = request.maxRows && request.maxRows > 0
|
|
9659
|
+
? Math.min(items.length, request.maxRows)
|
|
9660
|
+
: items.length;
|
|
9661
|
+
if (request.format === 'csv') {
|
|
9662
|
+
return {
|
|
9663
|
+
status: 'completed',
|
|
9664
|
+
format: request.format,
|
|
9665
|
+
scope,
|
|
9666
|
+
fileName: request.fileName,
|
|
9667
|
+
mimeType: 'text/csv;charset=utf-8',
|
|
9668
|
+
content: serializePraxisCollectionToCsv(request, this.securityPolicy),
|
|
9669
|
+
rowCount,
|
|
9670
|
+
};
|
|
9671
|
+
}
|
|
9672
|
+
if (request.format === 'json') {
|
|
9673
|
+
return {
|
|
9674
|
+
status: 'completed',
|
|
9675
|
+
format: request.format,
|
|
9676
|
+
scope,
|
|
9677
|
+
fileName: request.fileName,
|
|
9678
|
+
mimeType: 'application/json;charset=utf-8',
|
|
9679
|
+
content: serializePraxisCollectionToJson(request),
|
|
9680
|
+
rowCount,
|
|
9681
|
+
};
|
|
9682
|
+
}
|
|
9683
|
+
throw new Error(`PraxisCollectionExportService requires a collection export provider for "${request.format}" exports.`);
|
|
9684
|
+
}
|
|
9685
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisCollectionExportService, deps: [{ token: PRAXIS_COLLECTION_EXPORT_PROVIDER, optional: true }, { token: PRAXIS_EXPORT_SECURITY_POLICY }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
9686
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisCollectionExportService, providedIn: 'root' });
|
|
9687
|
+
}
|
|
9688
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisCollectionExportService, decorators: [{
|
|
9689
|
+
type: Injectable,
|
|
9690
|
+
args: [{
|
|
9691
|
+
providedIn: 'root',
|
|
9692
|
+
}]
|
|
9693
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
9694
|
+
type: Optional
|
|
9695
|
+
}, {
|
|
9696
|
+
type: Inject,
|
|
9697
|
+
args: [PRAXIS_COLLECTION_EXPORT_PROVIDER]
|
|
9698
|
+
}] }, { type: undefined, decorators: [{
|
|
9699
|
+
type: Inject,
|
|
9700
|
+
args: [PRAXIS_EXPORT_SECURITY_POLICY]
|
|
9701
|
+
}] }] });
|
|
9702
|
+
|
|
9703
|
+
class PraxisHttpCollectionExportProvider {
|
|
9704
|
+
http;
|
|
9705
|
+
apiUrlConfig;
|
|
9706
|
+
options;
|
|
9707
|
+
constructor(http, apiUrlConfig, options) {
|
|
9708
|
+
this.http = http;
|
|
9709
|
+
this.apiUrlConfig = apiUrlConfig;
|
|
9710
|
+
this.options = options;
|
|
9711
|
+
}
|
|
9712
|
+
async exportCollection(request) {
|
|
9713
|
+
const url = this.resolveEndpoint(request);
|
|
9714
|
+
const body = this.buildRequestBody(request);
|
|
9715
|
+
const response = await firstValueFrom(this.http.post(url, body, {
|
|
9716
|
+
headers: this.buildHeaders(),
|
|
9717
|
+
observe: 'response',
|
|
9718
|
+
responseType: 'blob',
|
|
9719
|
+
withCredentials: this.options?.withCredentials,
|
|
9720
|
+
}));
|
|
9721
|
+
return this.normalizeResponse(response, request);
|
|
9722
|
+
}
|
|
9723
|
+
resolveEndpoint(request) {
|
|
9724
|
+
const configuredEndpoint = this.options?.endpoint;
|
|
9725
|
+
if (typeof configuredEndpoint === 'function') {
|
|
9726
|
+
return this.resolveUrl(configuredEndpoint(request));
|
|
9727
|
+
}
|
|
9728
|
+
if (configuredEndpoint) {
|
|
9729
|
+
return this.resolveUrl(configuredEndpoint);
|
|
9730
|
+
}
|
|
9731
|
+
const resourcePath = request.resourcePath?.trim();
|
|
9732
|
+
if (!resourcePath) {
|
|
9733
|
+
throw new Error('PraxisHttpCollectionExportProvider requires request.resourcePath or an explicit endpoint option.');
|
|
9734
|
+
}
|
|
9735
|
+
return this.resolveUrl(`${resourcePath.replace(/\/+$/, '')}/export`);
|
|
9736
|
+
}
|
|
9737
|
+
resolveUrl(pathOrUrl) {
|
|
9738
|
+
const value = pathOrUrl.trim();
|
|
9739
|
+
if (/^https?:\/\//i.test(value)) {
|
|
9740
|
+
return value;
|
|
9741
|
+
}
|
|
9742
|
+
const base = this.resolveApiBaseUrl();
|
|
9743
|
+
const path = this.normalizePathForBase(value, base);
|
|
9744
|
+
return base ? `${base}/${path}` : `/${path}`;
|
|
9745
|
+
}
|
|
9746
|
+
normalizePathForBase(pathOrUrl, base) {
|
|
9747
|
+
const path = pathOrUrl.replace(/^\/+/, '');
|
|
9748
|
+
const baseLastSegment = base
|
|
9749
|
+
.replace(/\/+$/, '')
|
|
9750
|
+
.split('/')
|
|
9751
|
+
.filter(Boolean)
|
|
9752
|
+
.pop();
|
|
9753
|
+
if (baseLastSegment && path === baseLastSegment) {
|
|
9754
|
+
return '';
|
|
9755
|
+
}
|
|
9756
|
+
const duplicatedPrefix = baseLastSegment ? `${baseLastSegment}/` : '';
|
|
9757
|
+
return duplicatedPrefix && path.startsWith(duplicatedPrefix)
|
|
9758
|
+
? path.slice(duplicatedPrefix.length)
|
|
9759
|
+
: path;
|
|
9760
|
+
}
|
|
9761
|
+
resolveApiBaseUrl() {
|
|
9762
|
+
const key = this.options?.apiUrlKey || 'default';
|
|
9763
|
+
const entry = this.apiUrlConfig?.[key] || this.apiUrlConfig?.['default'];
|
|
9764
|
+
return buildApiUrl(entry || {}).replace(/\/+$/, '');
|
|
9765
|
+
}
|
|
9766
|
+
buildHeaders() {
|
|
9767
|
+
const key = this.options?.apiUrlKey || 'default';
|
|
9768
|
+
const entry = this.apiUrlConfig?.[key] || this.apiUrlConfig?.['default'];
|
|
9769
|
+
let headers = buildHeaders(entry || {});
|
|
9770
|
+
for (const [name, value] of Object.entries(this.options?.headers || {})) {
|
|
9771
|
+
headers = (headers || new HttpHeaders()).set(name, value);
|
|
9772
|
+
}
|
|
9773
|
+
return headers;
|
|
9774
|
+
}
|
|
9775
|
+
buildRequestBody(request) {
|
|
9776
|
+
const effectiveScope = resolvePraxisExportScope(request);
|
|
9777
|
+
const includeLoadedItems = this.options?.includeLoadedItems === true ||
|
|
9778
|
+
!request.resourcePath ||
|
|
9779
|
+
effectiveScope === 'currentPage' ||
|
|
9780
|
+
effectiveScope === 'selected';
|
|
9781
|
+
return {
|
|
9782
|
+
...request,
|
|
9783
|
+
scope: effectiveScope,
|
|
9784
|
+
loadedItems: includeLoadedItems ? request.loadedItems : undefined,
|
|
9785
|
+
metadata: {
|
|
9786
|
+
...request.metadata,
|
|
9787
|
+
configuredScope: request.scope,
|
|
9788
|
+
effectiveScope,
|
|
9789
|
+
},
|
|
9790
|
+
};
|
|
9791
|
+
}
|
|
9792
|
+
async normalizeResponse(response, request) {
|
|
9793
|
+
const blob = response.body || new Blob();
|
|
9794
|
+
const contentType = response.headers.get('content-type') || blob.type || undefined;
|
|
9795
|
+
if (contentType?.includes('application/json')) {
|
|
9796
|
+
const text = await blob.text();
|
|
9797
|
+
const parsed = JSON.parse(text || '{}');
|
|
9798
|
+
const exportHeaders = this.normalizeExportHeaders(response);
|
|
9799
|
+
return {
|
|
9800
|
+
...parsed,
|
|
9801
|
+
format: parsed.format || request.format,
|
|
9802
|
+
scope: parsed.scope || resolvePraxisExportScope(request),
|
|
9803
|
+
fileName: parsed.fileName || this.resolveFileName(response, request),
|
|
9804
|
+
rowCount: parsed.rowCount ?? exportHeaders.rowCount,
|
|
9805
|
+
warnings: this.mergeWarnings(parsed.warnings, exportHeaders.warnings),
|
|
9806
|
+
metadata: {
|
|
9807
|
+
...exportHeaders.metadata,
|
|
9808
|
+
...parsed.metadata,
|
|
9809
|
+
},
|
|
9810
|
+
};
|
|
9811
|
+
}
|
|
9812
|
+
const exportHeaders = this.normalizeExportHeaders(response);
|
|
9813
|
+
return {
|
|
9814
|
+
status: 'completed',
|
|
9815
|
+
format: request.format,
|
|
9816
|
+
scope: resolvePraxisExportScope(request),
|
|
9817
|
+
fileName: this.resolveFileName(response, request),
|
|
9818
|
+
mimeType: contentType,
|
|
9819
|
+
content: blob,
|
|
9820
|
+
rowCount: exportHeaders.rowCount,
|
|
9821
|
+
warnings: exportHeaders.warnings,
|
|
9822
|
+
metadata: {
|
|
9823
|
+
httpStatus: response.status,
|
|
9824
|
+
...exportHeaders.metadata,
|
|
9825
|
+
},
|
|
9826
|
+
};
|
|
9827
|
+
}
|
|
9828
|
+
normalizeExportHeaders(response) {
|
|
9829
|
+
const rowCount = this.readNumberHeader(response, 'X-Export-Row-Count');
|
|
9830
|
+
const truncated = this.readBooleanHeader(response, 'X-Export-Truncated');
|
|
9831
|
+
const maxRows = this.readNumberHeader(response, 'X-Export-Max-Rows');
|
|
9832
|
+
const candidateRows = this.readNumberHeader(response, 'X-Export-Candidate-Row-Count');
|
|
9833
|
+
const warnings = this.readWarningHeader(response);
|
|
9834
|
+
const metadata = {};
|
|
9835
|
+
if (truncated !== undefined) {
|
|
9836
|
+
metadata['truncated'] = truncated;
|
|
9837
|
+
}
|
|
9838
|
+
if (maxRows !== undefined) {
|
|
9839
|
+
metadata['maxRows'] = maxRows;
|
|
9840
|
+
}
|
|
9841
|
+
if (candidateRows !== undefined) {
|
|
9842
|
+
metadata['candidateRows'] = candidateRows;
|
|
9843
|
+
}
|
|
9844
|
+
return { rowCount, warnings, metadata };
|
|
9845
|
+
}
|
|
9846
|
+
readNumberHeader(response, headerName) {
|
|
9847
|
+
const value = response.headers.get(headerName);
|
|
9848
|
+
if (!value) {
|
|
9849
|
+
return undefined;
|
|
9850
|
+
}
|
|
9851
|
+
const parsed = Number(value);
|
|
9852
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
9853
|
+
}
|
|
9854
|
+
readBooleanHeader(response, headerName) {
|
|
9855
|
+
const value = response.headers.get(headerName);
|
|
9856
|
+
if (value === null) {
|
|
9857
|
+
return undefined;
|
|
9858
|
+
}
|
|
9859
|
+
return value.toLowerCase() === 'true';
|
|
9860
|
+
}
|
|
9861
|
+
readWarningHeader(response) {
|
|
9862
|
+
const value = response.headers.get('X-Export-Warnings');
|
|
9863
|
+
if (!value) {
|
|
9864
|
+
return [];
|
|
9865
|
+
}
|
|
9866
|
+
return value
|
|
9867
|
+
.split('|')
|
|
9868
|
+
.map((warning) => warning.trim())
|
|
9869
|
+
.filter(Boolean);
|
|
9870
|
+
}
|
|
9871
|
+
mergeWarnings(parsedWarnings, headerWarnings) {
|
|
9872
|
+
const warnings = [
|
|
9873
|
+
...(parsedWarnings || []),
|
|
9874
|
+
...headerWarnings,
|
|
9875
|
+
];
|
|
9876
|
+
return warnings.length ? warnings : undefined;
|
|
9877
|
+
}
|
|
9878
|
+
resolveFileName(response, request) {
|
|
9879
|
+
const disposition = response.headers.get('content-disposition') || '';
|
|
9880
|
+
const utf8Match = disposition.match(/filename\*=UTF-8''([^;]+)/i);
|
|
9881
|
+
if (utf8Match?.[1]) {
|
|
9882
|
+
return decodeURIComponent(utf8Match[1].trim().replace(/^"|"$/g, ''));
|
|
9883
|
+
}
|
|
9884
|
+
const asciiMatch = disposition.match(/filename="?([^";]+)"?/i);
|
|
9885
|
+
if (asciiMatch?.[1]) {
|
|
9886
|
+
return asciiMatch[1].trim();
|
|
9887
|
+
}
|
|
9888
|
+
return request.fileName;
|
|
9889
|
+
}
|
|
9890
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisHttpCollectionExportProvider, deps: [{ token: i1.HttpClient }, { token: API_URL, optional: true }, { token: PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
9891
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisHttpCollectionExportProvider });
|
|
9892
|
+
}
|
|
9893
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisHttpCollectionExportProvider, decorators: [{
|
|
9894
|
+
type: Injectable
|
|
9895
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
9896
|
+
type: Optional
|
|
9897
|
+
}, {
|
|
9898
|
+
type: Inject,
|
|
9899
|
+
args: [API_URL]
|
|
9900
|
+
}] }, { type: undefined, decorators: [{
|
|
9901
|
+
type: Optional
|
|
9902
|
+
}, {
|
|
9903
|
+
type: Inject,
|
|
9904
|
+
args: [PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS]
|
|
9905
|
+
}] }] });
|
|
9906
|
+
|
|
9424
9907
|
const FIELD_SELECTOR_REGISTRY_BASE = new InjectionToken('FIELD_SELECTOR_REGISTRY_BASE');
|
|
9425
9908
|
const FIELD_SELECTOR_REGISTRY_OVERRIDES = new InjectionToken('FIELD_SELECTOR_REGISTRY_OVERRIDES');
|
|
9426
9909
|
const FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS = new InjectionToken('FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS');
|
|
@@ -12967,6 +13450,17 @@ const STEPPER_CONFIG_EDITOR = new InjectionToken('STEPPER_CONFIG_EDITOR');
|
|
|
12967
13450
|
const DYNAMIC_PAGE_SHELL_EDITOR = new InjectionToken('DYNAMIC_PAGE_SHELL_EDITOR');
|
|
12968
13451
|
const DYNAMIC_PAGE_CONFIG_EDITOR = new InjectionToken('DYNAMIC_PAGE_CONFIG_EDITOR');
|
|
12969
13452
|
|
|
13453
|
+
function providePraxisHttpCollectionExportProvider(options = {}) {
|
|
13454
|
+
return [
|
|
13455
|
+
{ provide: PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, useValue: options },
|
|
13456
|
+
PraxisHttpCollectionExportProvider,
|
|
13457
|
+
{
|
|
13458
|
+
provide: PRAXIS_COLLECTION_EXPORT_PROVIDER,
|
|
13459
|
+
useExisting: PraxisHttpCollectionExportProvider,
|
|
13460
|
+
},
|
|
13461
|
+
];
|
|
13462
|
+
}
|
|
13463
|
+
|
|
12970
13464
|
const RESOURCE_DISCOVERY_I18N_NAMESPACE = 'resourceDiscovery';
|
|
12971
13465
|
const RESOURCE_AVAILABILITY_REASON_KEY_BY_CODE = {
|
|
12972
13466
|
'resource-state-blocked': 'availability.reason.resource-state-blocked',
|
|
@@ -13256,6 +13750,99 @@ function createEmptyRichContentDocument() {
|
|
|
13256
13750
|
};
|
|
13257
13751
|
}
|
|
13258
13752
|
|
|
13753
|
+
function normalizeItemId(kind, value, index) {
|
|
13754
|
+
const candidate = typeof value === 'string' ? value.trim() : '';
|
|
13755
|
+
if (candidate)
|
|
13756
|
+
return candidate;
|
|
13757
|
+
return `${kind}-${index + 1}`;
|
|
13758
|
+
}
|
|
13759
|
+
function fieldItemId(fieldName, index) {
|
|
13760
|
+
const slug = fieldName
|
|
13761
|
+
.trim()
|
|
13762
|
+
.toLowerCase()
|
|
13763
|
+
.replace(/[^a-z0-9_-]+/g, '-')
|
|
13764
|
+
.replace(/^-+|-+$/g, '');
|
|
13765
|
+
return `field-${slug || 'unnamed'}-${index + 1}`;
|
|
13766
|
+
}
|
|
13767
|
+
function getLegacyFieldName(value) {
|
|
13768
|
+
if (typeof value === 'string') {
|
|
13769
|
+
const trimmed = value.trim();
|
|
13770
|
+
return trimmed || null;
|
|
13771
|
+
}
|
|
13772
|
+
if (value && typeof value === 'object') {
|
|
13773
|
+
const name = value.name;
|
|
13774
|
+
if (typeof name === 'string') {
|
|
13775
|
+
const trimmed = name.trim();
|
|
13776
|
+
return trimmed || null;
|
|
13777
|
+
}
|
|
13778
|
+
}
|
|
13779
|
+
return null;
|
|
13780
|
+
}
|
|
13781
|
+
function createFieldLayoutItem(fieldName, index = 0) {
|
|
13782
|
+
return {
|
|
13783
|
+
kind: 'field',
|
|
13784
|
+
id: fieldItemId(fieldName, index),
|
|
13785
|
+
fieldName,
|
|
13786
|
+
};
|
|
13787
|
+
}
|
|
13788
|
+
function isFormLayoutItem(value) {
|
|
13789
|
+
if (!value || typeof value !== 'object')
|
|
13790
|
+
return false;
|
|
13791
|
+
const item = value;
|
|
13792
|
+
if (item.kind === 'field') {
|
|
13793
|
+
return typeof item.fieldName === 'string';
|
|
13794
|
+
}
|
|
13795
|
+
if (item.kind === 'richContent') {
|
|
13796
|
+
const document = item.document;
|
|
13797
|
+
return !!document && typeof document === 'object';
|
|
13798
|
+
}
|
|
13799
|
+
return false;
|
|
13800
|
+
}
|
|
13801
|
+
function normalizeFormLayoutItems(column) {
|
|
13802
|
+
const rawItems = column?.items;
|
|
13803
|
+
if (Array.isArray(rawItems)) {
|
|
13804
|
+
return rawItems
|
|
13805
|
+
.map((rawItem, index) => {
|
|
13806
|
+
if (!isFormLayoutItem(rawItem))
|
|
13807
|
+
return null;
|
|
13808
|
+
if (rawItem.kind === 'field') {
|
|
13809
|
+
const fieldName = rawItem.fieldName.trim();
|
|
13810
|
+
if (!fieldName)
|
|
13811
|
+
return null;
|
|
13812
|
+
return {
|
|
13813
|
+
...rawItem,
|
|
13814
|
+
id: normalizeItemId('field', rawItem.id, index),
|
|
13815
|
+
fieldName,
|
|
13816
|
+
};
|
|
13817
|
+
}
|
|
13818
|
+
return {
|
|
13819
|
+
...rawItem,
|
|
13820
|
+
id: normalizeItemId('richContent', rawItem.id, index),
|
|
13821
|
+
};
|
|
13822
|
+
})
|
|
13823
|
+
.filter((item) => item !== null);
|
|
13824
|
+
}
|
|
13825
|
+
const rawFields = column?.fields;
|
|
13826
|
+
if (!Array.isArray(rawFields))
|
|
13827
|
+
return [];
|
|
13828
|
+
return rawFields
|
|
13829
|
+
.map((field, index) => {
|
|
13830
|
+
const fieldName = getLegacyFieldName(field);
|
|
13831
|
+
return fieldName ? createFieldLayoutItem(fieldName, index) : null;
|
|
13832
|
+
})
|
|
13833
|
+
.filter((item) => item !== null);
|
|
13834
|
+
}
|
|
13835
|
+
function getFormLayoutFieldNames(items) {
|
|
13836
|
+
if (!Array.isArray(items))
|
|
13837
|
+
return [];
|
|
13838
|
+
return items
|
|
13839
|
+
.filter((item) => item.kind === 'field')
|
|
13840
|
+
.map((item) => item.fieldName);
|
|
13841
|
+
}
|
|
13842
|
+
function getFormColumnFieldNames(column) {
|
|
13843
|
+
return getFormLayoutFieldNames(normalizeFormLayoutItems(column));
|
|
13844
|
+
}
|
|
13845
|
+
|
|
13259
13846
|
function defaultGenerateId(kind, used) {
|
|
13260
13847
|
// determinístico + compacto, evitando Math.random (facilita tests/replays)
|
|
13261
13848
|
let seq = 1;
|
|
@@ -13309,12 +13896,13 @@ function ensureIds(config, options = {}) {
|
|
|
13309
13896
|
const rowId = takeOrGenerate('row', row.id, used, keepExistingUnique, generateId);
|
|
13310
13897
|
const safeColumns = (row.columns ?? []).map((col) => {
|
|
13311
13898
|
const colId = takeOrGenerate('col', col.id, used, keepExistingUnique, generateId);
|
|
13312
|
-
|
|
13313
|
-
const fields =
|
|
13899
|
+
const items = normalizeFormLayoutItems(col);
|
|
13900
|
+
const fields = getFormLayoutFieldNames(items);
|
|
13314
13901
|
return {
|
|
13315
13902
|
...col,
|
|
13316
13903
|
id: colId,
|
|
13317
13904
|
fields,
|
|
13905
|
+
items,
|
|
13318
13906
|
};
|
|
13319
13907
|
});
|
|
13320
13908
|
return {
|
|
@@ -13612,7 +14200,7 @@ function getReferencedFieldMetadata(config, allFieldMetadata) {
|
|
|
13612
14200
|
config.sections.forEach((section) => {
|
|
13613
14201
|
section.rows.forEach((row) => {
|
|
13614
14202
|
row.columns.forEach((column) => {
|
|
13615
|
-
column.
|
|
14203
|
+
getFormColumnFieldNames(column).forEach((fieldName) => {
|
|
13616
14204
|
referencedFieldNames.add(fieldName);
|
|
13617
14205
|
});
|
|
13618
14206
|
});
|
|
@@ -14862,6 +15450,23 @@ const RULE_PROPERTY_SCHEMA = {
|
|
|
14862
15450
|
{ name: 'className', type: 'string', label: 'Classe CSS' },
|
|
14863
15451
|
{ name: 'style', type: 'object', label: 'Estilos inline' },
|
|
14864
15452
|
],
|
|
15453
|
+
visualBlock: [
|
|
15454
|
+
{ name: 'visible', type: 'boolean', label: 'Visível', category: 'behavior' },
|
|
15455
|
+
{ name: 'hidden', type: 'boolean', label: 'Oculto', category: 'behavior' },
|
|
15456
|
+
{
|
|
15457
|
+
name: 'layout',
|
|
15458
|
+
type: 'enum',
|
|
15459
|
+
label: 'Layout',
|
|
15460
|
+
category: 'layout',
|
|
15461
|
+
enumValues: [
|
|
15462
|
+
{ value: 'block', label: 'Bloco' },
|
|
15463
|
+
{ value: 'inline', label: 'Inline' },
|
|
15464
|
+
],
|
|
15465
|
+
},
|
|
15466
|
+
{ name: 'rootClassName', type: 'string', label: 'Classe raiz', category: 'appearance' },
|
|
15467
|
+
{ name: 'className', type: 'string', label: 'Classe CSS', category: 'appearance' },
|
|
15468
|
+
{ name: 'style', type: 'object', label: 'Estilos inline', category: 'appearance' },
|
|
15469
|
+
],
|
|
14865
15470
|
};
|
|
14866
15471
|
|
|
14867
15472
|
const EDITORIAL_THEME_PRESETS = [
|
|
@@ -16382,7 +16987,8 @@ function normalizeTargets(rule) {
|
|
|
16382
16987
|
: rawTargets.some((t) => t?.startsWith('action:')) ? 'action'
|
|
16383
16988
|
: rawTargets.some((t) => t?.startsWith('row:')) ? 'row'
|
|
16384
16989
|
: rawTargets.some((t) => t?.startsWith('column:')) ? 'column'
|
|
16385
|
-
: '
|
|
16990
|
+
: rawTargets.some((t) => t?.startsWith('visualBlock:')) ? 'visualBlock'
|
|
16991
|
+
: 'field');
|
|
16386
16992
|
const targets = rawTargets.map((t) => stripPrefix(t));
|
|
16387
16993
|
return { targetType, targets };
|
|
16388
16994
|
}
|
|
@@ -16398,6 +17004,8 @@ function stripPrefix(value) {
|
|
|
16398
17004
|
return value.substring('row:'.length);
|
|
16399
17005
|
if (value?.startsWith('column:'))
|
|
16400
17006
|
return value.substring('column:'.length);
|
|
17007
|
+
if (value?.startsWith('visualBlock:'))
|
|
17008
|
+
return value.substring('visualBlock:'.length);
|
|
16401
17009
|
return value;
|
|
16402
17010
|
}
|
|
16403
17011
|
function isScopedSectionHeaderActionTarget(value) {
|
|
@@ -18717,6 +19325,16 @@ function getFieldMetadataCapabilities() {
|
|
|
18717
19325
|
*/
|
|
18718
19326
|
const ENUMS = {
|
|
18719
19327
|
layoutOrientation: ['vertical', 'columns'],
|
|
19328
|
+
canvasMode: ['grid'],
|
|
19329
|
+
canvasAutoRows: ['fixed', 'content'],
|
|
19330
|
+
canvasCollisionPolicy: ['block', 'swap'],
|
|
19331
|
+
groupingKind: ['section', 'tabs', 'hero', 'rail'],
|
|
19332
|
+
groupingLayout: ['stack', 'grid', 'row'],
|
|
19333
|
+
heroEmphasis: ['high', 'medium'],
|
|
19334
|
+
railSide: ['left', 'right'],
|
|
19335
|
+
deviceKind: ['desktop', 'tablet', 'mobile'],
|
|
19336
|
+
stateMergeStrategy: ['replace', 'merge', 'append', 'remove-keys'],
|
|
19337
|
+
derivedStateComputeKind: ['json-logic', 'template', 'operator', 'transformer'],
|
|
18720
19338
|
shellKind: ['dashboard-card', 'none'],
|
|
18721
19339
|
actionVariant: ['icon', 'text', 'outlined'],
|
|
18722
19340
|
actionPlacement: ['header', 'window'],
|
|
@@ -18724,6 +19342,9 @@ const ENUMS = {
|
|
|
18724
19342
|
const CAPS = [
|
|
18725
19343
|
{ path: 'page', category: 'page', valueKind: 'object', description: 'Definicao da pagina dinamica.' },
|
|
18726
19344
|
{ path: 'page.context', category: 'context', valueKind: 'object', description: 'Contexto compartilhado entre widgets.' },
|
|
19345
|
+
{ path: 'page.layoutPreset', category: 'layout', valueKind: 'string', description: 'ID canonico opcional do preset estrutural da pagina.' },
|
|
19346
|
+
{ path: 'page.layoutPresetOptions', category: 'layout', valueKind: 'object', description: 'Opcoes especificas do preset estrutural consumidas por builders e runtimes futuros.' },
|
|
19347
|
+
{ path: 'page.themePreset', category: 'appearance', valueKind: 'string', description: 'ID opcional do preset de tema para shell, graficos, densidade e defaults visuais.' },
|
|
18727
19348
|
{ path: 'page.layout', category: 'layout', valueKind: 'object', description: 'Layout base da pagina.' },
|
|
18728
19349
|
{ path: 'page.layout.orientation', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutOrientation, description: 'Orientacao do grid (vertical/columns).' },
|
|
18729
19350
|
{ path: 'page.layout.columns', category: 'layout', valueKind: 'number', description: 'Numero de colunas (quando orientation=columns).' },
|
|
@@ -18733,6 +19354,26 @@ const CAPS = [
|
|
|
18733
19354
|
{ path: 'page.layout.breakpoints.md', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint md.' },
|
|
18734
19355
|
{ path: 'page.layout.breakpoints.lg', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint lg.' },
|
|
18735
19356
|
{ path: 'page.layout.breakpoints.xl', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint xl.' },
|
|
19357
|
+
{ path: 'page.canvas', category: 'layout', valueKind: 'object', description: 'Canvas espacial canonico da pagina quando houver geometria explicita.' },
|
|
19358
|
+
{ path: 'page.canvas.mode', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.canvasMode, description: 'Modo canonico do canvas. Valor atual: grid.' },
|
|
19359
|
+
{ path: 'page.canvas.columns', category: 'layout', valueKind: 'number', description: 'Numero de colunas do canvas espacial.' },
|
|
19360
|
+
{ path: 'page.canvas.rowUnit', category: 'layout', valueKind: 'string', description: 'Altura base das linhas do canvas, como 80px.' },
|
|
19361
|
+
{ path: 'page.canvas.gap', category: 'layout', valueKind: 'string', description: 'Espacamento entre itens do canvas.' },
|
|
19362
|
+
{ path: 'page.canvas.autoRows', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.canvasAutoRows, description: 'Politica de linhas automaticas do canvas.' },
|
|
19363
|
+
{ path: 'page.canvas.collisionPolicy', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.canvasCollisionPolicy, description: 'Politica de colisao do canvas espacial.' },
|
|
19364
|
+
{ path: 'page.canvas.items', category: 'layout', valueKind: 'object', description: 'Mapa canonico de geometria por widget key.' },
|
|
19365
|
+
{ path: 'page.canvas.items.<widgetKey>.col', category: 'layout', valueKind: 'number', description: 'Coluna inicial do widget no canvas.' },
|
|
19366
|
+
{ path: 'page.canvas.items.<widgetKey>.row', category: 'layout', valueKind: 'number', description: 'Linha inicial do widget no canvas.' },
|
|
19367
|
+
{ path: 'page.canvas.items.<widgetKey>.colSpan', category: 'layout', valueKind: 'number', description: 'Quantidade de colunas ocupadas pelo widget.' },
|
|
19368
|
+
{ path: 'page.canvas.items.<widgetKey>.rowSpan', category: 'layout', valueKind: 'number', description: 'Quantidade de linhas ocupadas pelo widget.' },
|
|
19369
|
+
{ path: 'page.canvas.items.<widgetKey>.zIndex', category: 'layout', valueKind: 'number', description: 'Camada opcional do item no canvas.' },
|
|
19370
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints', category: 'layout', valueKind: 'object', description: 'Restricoes opcionais de posicao e tamanho do item no canvas.' },
|
|
19371
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.minColSpan', category: 'layout', valueKind: 'number', description: 'Span minimo de colunas permitido.' },
|
|
19372
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.minRowSpan', category: 'layout', valueKind: 'number', description: 'Span minimo de linhas permitido.' },
|
|
19373
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.maxColSpan', category: 'layout', valueKind: 'number', description: 'Span maximo de colunas permitido.' },
|
|
19374
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.maxRowSpan', category: 'layout', valueKind: 'number', description: 'Span maximo de linhas permitido.' },
|
|
19375
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.lockPosition', category: 'layout', valueKind: 'boolean', description: 'Bloqueia alteracao de posicao do item no canvas.' },
|
|
19376
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.lockSize', category: 'layout', valueKind: 'boolean', description: 'Bloqueia alteracao de tamanho do item no canvas.' },
|
|
18736
19377
|
{ path: 'page.widgets', category: 'widgets', valueKind: 'array', description: 'Lista de widgets renderizados.' },
|
|
18737
19378
|
{ path: 'page.widgets[].key', category: 'widgets', valueKind: 'string', description: 'Identificador unico do widget.' },
|
|
18738
19379
|
{ path: 'page.widgets[].className', category: 'widgets', valueKind: 'string', description: 'Classe CSS opcional do widget.' },
|
|
@@ -18752,30 +19393,107 @@ const CAPS = [
|
|
|
18752
19393
|
{ path: 'page.widgets[].shell.actions[].variant', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionVariant, description: 'Estilo visual da acao.' },
|
|
18753
19394
|
{ path: 'page.widgets[].shell.actions[].placement', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionPlacement, description: 'Posicionamento da acao.' },
|
|
18754
19395
|
{ path: 'page.widgets[].shell.actions[].emit', category: 'shell', valueKind: 'string', description: 'Evento emitido ao acionar a acao.' },
|
|
19396
|
+
{ path: 'page.state', category: 'state', valueKind: 'object', description: 'Estado declarativo opcional compartilhado por widgets e composicao.' },
|
|
19397
|
+
{ path: 'page.state.values', category: 'state', valueKind: 'object', description: 'Valores primarios mutaveis escritos por widgets, defaults ou host.' },
|
|
19398
|
+
{ path: 'page.state.schema', category: 'state', valueKind: 'object', description: 'Descritores dos paths primarios de estado.' },
|
|
19399
|
+
{ path: 'page.state.schema.<token>.type', category: 'state', valueKind: 'string', description: 'Tipo semantico opcional do path de estado.' },
|
|
19400
|
+
{ path: 'page.state.schema.<token>.initial', category: 'state', valueKind: 'object', description: 'Valor inicial usado quando page.state.values omite o path.' },
|
|
19401
|
+
{ path: 'page.state.schema.<token>.persist', category: 'state', valueKind: 'boolean', description: 'Indica se o path primario deve ser persistido com a pagina.' },
|
|
19402
|
+
{ path: 'page.state.schema.<token>.mergeStrategy', category: 'state', valueKind: 'enum', allowedValues: ENUMS.stateMergeStrategy, description: 'Como escritas de widget/estado combinam com o valor atual.' },
|
|
19403
|
+
{ path: 'page.state.schema.<token>.description', category: 'state', valueKind: 'string', description: 'Descricao opcional do path para builders e catalogos AI.' },
|
|
19404
|
+
{ path: 'page.state.schema.<token>.tags', category: 'state', valueKind: 'array', description: 'Tags opcionais para busca e governanca do estado.' },
|
|
19405
|
+
{ path: 'page.state.derived', category: 'state', valueKind: 'object', description: 'Descritores de estado derivado recomputado pelo runtime.' },
|
|
19406
|
+
{ path: 'page.state.derived.<token>.dependsOn', category: 'state', valueKind: 'array', description: 'Paths de estado que alimentam o valor derivado.' },
|
|
19407
|
+
{ path: 'page.state.derived.<token>.compute', category: 'state', valueKind: 'object', description: 'Descritor de computacao do estado derivado.' },
|
|
19408
|
+
{ path: 'page.state.derived.<token>.compute.kind', category: 'state', valueKind: 'enum', allowedValues: ENUMS.derivedStateComputeKind, description: 'Tipo de computacao do estado derivado.' },
|
|
19409
|
+
{ path: 'page.state.derived.<token>.compute.expression', category: 'state', valueKind: 'expression', description: 'Expressao Json Logic para compute.kind=json-logic.' },
|
|
19410
|
+
{ path: 'page.state.derived.<token>.compute.value', category: 'state', valueKind: 'object', description: 'Valor template para compute.kind=template.' },
|
|
19411
|
+
{ path: 'page.state.derived.<token>.compute.operator', category: 'state', valueKind: 'string', description: 'Operador para compute.kind=operator.' },
|
|
19412
|
+
{ path: 'page.state.derived.<token>.compute.options', category: 'state', valueKind: 'object', description: 'Opcoes do operador ou transformer.' },
|
|
19413
|
+
{ path: 'page.state.derived.<token>.compute.transformerId', category: 'state', valueKind: 'string', description: 'Identificador do transformer para compute.kind=transformer.' },
|
|
19414
|
+
{ path: 'page.state.derived.<token>.description', category: 'state', valueKind: 'string', description: 'Descricao opcional do estado derivado.' },
|
|
19415
|
+
{ path: 'page.state.derived.<token>.cache', category: 'state', valueKind: 'boolean', description: 'Permite cache futuro do valor derivado.' },
|
|
18755
19416
|
{ path: 'page.composition', category: 'connections', valueKind: 'object', description: 'Envelope canonico da composicao persistida.' },
|
|
18756
19417
|
{ path: 'page.composition.version', category: 'connections', valueKind: 'string', description: 'Versao do envelope de composicao.' },
|
|
18757
19418
|
{ path: 'page.composition.links', category: 'connections', valueKind: 'array', description: 'Links canonicos entre widgets e estado.' },
|
|
18758
19419
|
{ path: 'page.composition.links[].id', category: 'connections', valueKind: 'string', description: 'Identificador estavel do link.' },
|
|
18759
19420
|
{ path: 'page.composition.links[].from', category: 'connections', valueKind: 'object', description: 'Endpoint de origem do link.' },
|
|
19421
|
+
{ path: 'page.composition.links[].from.kind', category: 'connections', valueKind: 'string', description: 'Tipo do endpoint de origem, como component-port ou state.' },
|
|
19422
|
+
{ path: 'page.composition.links[].from.ref', category: 'connections', valueKind: 'object', description: 'Referencia estruturada do endpoint de origem.' },
|
|
19423
|
+
{ path: 'page.composition.links[].from.ref.widget', category: 'connections', valueKind: 'string', description: 'Widget top-level dono do endpoint de origem.' },
|
|
19424
|
+
{ path: 'page.composition.links[].from.ref.port', category: 'connections', valueKind: 'string', description: 'Porta de origem do componente.' },
|
|
19425
|
+
{ path: 'page.composition.links[].from.ref.direction', category: 'connections', valueKind: 'string', description: 'Direcao da porta de origem.' },
|
|
19426
|
+
{ path: 'page.composition.links[].from.ref.nestedPath', category: 'connections', valueKind: 'array', description: 'NestedPath canonico para porta de componente filho de origem.' },
|
|
19427
|
+
{ path: 'page.composition.links[].from.ref.nestedPath[].kind', category: 'connections', valueKind: 'string', description: 'Tipo do segmento nested de origem.' },
|
|
19428
|
+
{ path: 'page.composition.links[].from.ref.nestedPath[].id', category: 'connections', valueKind: 'string', description: 'Identificador estrutural do segmento nested de origem.' },
|
|
19429
|
+
{ path: 'page.composition.links[].from.ref.nestedPath[].key', category: 'connections', valueKind: 'string', description: 'Chave estavel do widget filho no segmento terminal de origem.', critical: true },
|
|
19430
|
+
{ path: 'page.composition.links[].from.ref.nestedPath[].index', category: 'connections', valueKind: 'number', description: 'Indice auxiliar para diagnostico visual; nao use como identidade primaria.' },
|
|
19431
|
+
{ path: 'page.composition.links[].from.ref.nestedPath[].componentType', category: 'connections', valueKind: 'string', description: 'Tipo do componente real do widget filho de origem.' },
|
|
18760
19432
|
{ path: 'page.composition.links[].to', category: 'connections', valueKind: 'object', description: 'Endpoint de destino do link.' },
|
|
19433
|
+
{ path: 'page.composition.links[].to.kind', category: 'connections', valueKind: 'string', description: 'Tipo do endpoint de destino, como component-port ou state.' },
|
|
19434
|
+
{ path: 'page.composition.links[].to.ref', category: 'connections', valueKind: 'object', description: 'Referencia estruturada do endpoint de destino.' },
|
|
19435
|
+
{ path: 'page.composition.links[].to.ref.widget', category: 'connections', valueKind: 'string', description: 'Widget top-level dono do endpoint de destino.' },
|
|
19436
|
+
{ path: 'page.composition.links[].to.ref.port', category: 'connections', valueKind: 'string', description: 'Porta de destino do componente.' },
|
|
19437
|
+
{ path: 'page.composition.links[].to.ref.direction', category: 'connections', valueKind: 'string', description: 'Direcao da porta de destino.' },
|
|
19438
|
+
{ path: 'page.composition.links[].to.ref.nestedPath', category: 'connections', valueKind: 'array', description: 'NestedPath canonico para porta de componente filho de destino.' },
|
|
19439
|
+
{ path: 'page.composition.links[].to.ref.nestedPath[].kind', category: 'connections', valueKind: 'string', description: 'Tipo do segmento nested de destino.' },
|
|
19440
|
+
{ path: 'page.composition.links[].to.ref.nestedPath[].id', category: 'connections', valueKind: 'string', description: 'Identificador estrutural do segmento nested de destino.' },
|
|
19441
|
+
{ path: 'page.composition.links[].to.ref.nestedPath[].key', category: 'connections', valueKind: 'string', description: 'Chave estavel do widget filho no segmento terminal de destino.', critical: true },
|
|
19442
|
+
{ path: 'page.composition.links[].to.ref.nestedPath[].index', category: 'connections', valueKind: 'number', description: 'Indice auxiliar para diagnostico visual; nao use como identidade primaria.' },
|
|
19443
|
+
{ path: 'page.composition.links[].to.ref.nestedPath[].componentType', category: 'connections', valueKind: 'string', description: 'Tipo do componente real do widget filho de destino.' },
|
|
18761
19444
|
{ path: 'page.composition.links[].intent', category: 'connections', valueKind: 'string', description: 'Intencao semantica do link.' },
|
|
18762
19445
|
{ path: 'page.composition.links[].transform', category: 'connections', valueKind: 'object', description: 'Pipeline de transformacao do link.' },
|
|
18763
19446
|
{ path: 'page.composition.links[].condition', category: 'connections', valueKind: 'expression', description: 'Guarda semantica opcional do link, expressa como um unico AST Json Logic canonico.' },
|
|
18764
19447
|
{ path: 'page.composition.links[].policy', category: 'connections', valueKind: 'object', description: 'Politicas operacionais opcionais do link, como debounce, distinct e missing-value.' },
|
|
18765
19448
|
{ path: 'page.composition.links[].metadata', category: 'connections', valueKind: 'object', description: 'Metadados opcionais do link.' },
|
|
19449
|
+
{ path: 'page.grouping', category: 'layout', valueKind: 'array', description: 'Modelo semantico opcional de secoes, abas, areas hero e rails.' },
|
|
19450
|
+
{ path: 'page.grouping[].kind', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.groupingKind, description: 'Tipo do agrupamento semantico.' },
|
|
19451
|
+
{ path: 'page.grouping[].id', category: 'layout', valueKind: 'string', description: 'Identificador estavel do agrupamento.' },
|
|
19452
|
+
{ path: 'page.grouping[].label', category: 'layout', valueKind: 'string', description: 'Rotulo opcional do agrupamento.' },
|
|
19453
|
+
{ path: 'page.grouping[].widgetKeys', category: 'layout', valueKind: 'array', description: 'Widgets pertencentes ao agrupamento section, hero ou rail.' },
|
|
19454
|
+
{ path: 'page.grouping[].layout', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.groupingLayout, description: 'Layout opcional para agrupamento section.' },
|
|
19455
|
+
{ path: 'page.grouping[].tabs', category: 'layout', valueKind: 'array', description: 'Abas do agrupamento kind=tabs.' },
|
|
19456
|
+
{ path: 'page.grouping[].tabs[].id', category: 'layout', valueKind: 'string', description: 'Identificador estavel da aba.' },
|
|
19457
|
+
{ path: 'page.grouping[].tabs[].label', category: 'layout', valueKind: 'string', description: 'Rotulo da aba.' },
|
|
19458
|
+
{ path: 'page.grouping[].tabs[].widgetKeys', category: 'layout', valueKind: 'array', description: 'Widgets renderizados dentro da aba.' },
|
|
19459
|
+
{ path: 'page.grouping[].emphasis', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.heroEmphasis, description: 'Enfase opcional para agrupamento hero.' },
|
|
19460
|
+
{ path: 'page.grouping[].side', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.railSide, description: 'Lado do rail quando kind=rail.' },
|
|
19461
|
+
{ path: 'page.slotAssignments', category: 'layout', valueKind: 'object', description: 'Mapa canonico de widget key para slot semantico de preset.' },
|
|
19462
|
+
{ path: 'page.deviceLayouts', category: 'layout', valueKind: 'object', description: 'Variantes opcionais de layout por dispositivo.' },
|
|
19463
|
+
{ path: 'page.deviceLayouts.desktop', category: 'layout', valueKind: 'object', description: 'Overrides de layout para desktop.' },
|
|
19464
|
+
{ path: 'page.deviceLayouts.tablet', category: 'layout', valueKind: 'object', description: 'Overrides de layout para tablet.' },
|
|
19465
|
+
{ path: 'page.deviceLayouts.mobile', category: 'layout', valueKind: 'object', description: 'Overrides de layout para mobile.' },
|
|
19466
|
+
{ path: 'page.deviceLayouts.desktop.layout', category: 'layout', valueKind: 'object', description: 'Override de WidgetPageLayout para desktop.' },
|
|
19467
|
+
{ path: 'page.deviceLayouts.desktop.canvas', category: 'layout', valueKind: 'object', description: 'Override de canvas para desktop.' },
|
|
19468
|
+
{ path: 'page.deviceLayouts.desktop.groupingOverrides', category: 'layout', valueKind: 'array', description: 'Overrides de agrupamentos para desktop.' },
|
|
19469
|
+
{ path: 'page.deviceLayouts.desktop.widgetOverrides', category: 'layout', valueKind: 'object', description: 'Overrides por widget key para desktop.' },
|
|
19470
|
+
{ path: 'page.deviceLayouts.desktop.widgetOverrides.<widgetKey>.hidden', category: 'layout', valueKind: 'boolean', description: 'Oculta o widget em desktop.' },
|
|
19471
|
+
{ path: 'page.deviceLayouts.tablet.layout', category: 'layout', valueKind: 'object', description: 'Override de WidgetPageLayout para tablet.' },
|
|
19472
|
+
{ path: 'page.deviceLayouts.tablet.canvas', category: 'layout', valueKind: 'object', description: 'Override de canvas para tablet.' },
|
|
19473
|
+
{ path: 'page.deviceLayouts.tablet.groupingOverrides', category: 'layout', valueKind: 'array', description: 'Overrides de agrupamentos para tablet.' },
|
|
19474
|
+
{ path: 'page.deviceLayouts.tablet.widgetOverrides', category: 'layout', valueKind: 'object', description: 'Overrides por widget key para tablet.' },
|
|
19475
|
+
{ path: 'page.deviceLayouts.tablet.widgetOverrides.<widgetKey>.hidden', category: 'layout', valueKind: 'boolean', description: 'Oculta o widget em tablet.' },
|
|
19476
|
+
{ path: 'page.deviceLayouts.mobile.layout', category: 'layout', valueKind: 'object', description: 'Override de WidgetPageLayout para mobile.' },
|
|
19477
|
+
{ path: 'page.deviceLayouts.mobile.canvas', category: 'layout', valueKind: 'object', description: 'Override de canvas para mobile.' },
|
|
19478
|
+
{ path: 'page.deviceLayouts.mobile.groupingOverrides', category: 'layout', valueKind: 'array', description: 'Overrides de agrupamentos para mobile.' },
|
|
19479
|
+
{ path: 'page.deviceLayouts.mobile.widgetOverrides', category: 'layout', valueKind: 'object', description: 'Overrides por widget key para mobile.' },
|
|
19480
|
+
{ path: 'page.deviceLayouts.mobile.widgetOverrides.<widgetKey>.hidden', category: 'layout', valueKind: 'boolean', description: 'Oculta o widget em mobile.' },
|
|
18766
19481
|
];
|
|
18767
19482
|
const DYNAMIC_PAGE_AI_CAPABILITIES = {
|
|
18768
|
-
version: 'v1.
|
|
19483
|
+
version: 'v1.1',
|
|
18769
19484
|
enums: ENUMS,
|
|
18770
19485
|
targets: ['praxis-dynamic-page'],
|
|
18771
19486
|
notes: [
|
|
18772
|
-
'Este catalogo e especifico para o
|
|
18773
|
-
'
|
|
19487
|
+
'Este catalogo e especifico para o runtime praxis-dynamic-page; operacoes de authoring/mutacao pertencem ao manifesto do praxis-page-builder.',
|
|
19488
|
+
'WidgetPageDefinition e o contrato canonico persistido: widgets, composition.links, state, context, layout, canvas, presets, grouping, slotAssignments, deviceLayouts e themePreset.',
|
|
19489
|
+
'Widgets e page.composition.links sao arrays; ferramentas de patch legadas fazem merge por key estavel e id estavel.',
|
|
19490
|
+
'page.canvas.items e um mapa por widget key; nao modele canvas.items como array.',
|
|
18774
19491
|
'Taxonomia editorial: condition usa Json Logic canonico; transform usa pipeline declarativo; nao trate ambos como a mesma "expression".',
|
|
18775
19492
|
'Para remocao/replace, use flags {_remove:true} ou {_replace:true} no item.',
|
|
18776
19493
|
'Para renomear um link, inclua {_beforeKey:"link-id-anterior"} no item.',
|
|
18777
19494
|
'Inputs de widgets dependem do componente (ex: praxis-table, praxis-dynamic-form). Evite inventar campos; prefira pedir confirmacao.',
|
|
18778
19495
|
'Use ids estaveis para links e keys estaveis para widgets.',
|
|
19496
|
+
'Nested component ports usam endpoint component-port com nestedPath; o owner em ref.widget continua sendo o widget top-level.',
|
|
18779
19497
|
'Objetivo: compor widgets e relacionamentos canonicos (ex.: master-detail).',
|
|
18780
19498
|
'Link tipico de master-detail: component-port(table.rowClick) -> component-port(form.resourceId) com transform map payload.row.id.',
|
|
18781
19499
|
],
|
|
@@ -18792,6 +19510,75 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
18792
19510
|
{ value: 'columns', label: 'Colunas' },
|
|
18793
19511
|
],
|
|
18794
19512
|
},
|
|
19513
|
+
'page.canvas.mode': {
|
|
19514
|
+
mode: 'enum',
|
|
19515
|
+
options: [
|
|
19516
|
+
{ value: 'grid', label: 'Grid' },
|
|
19517
|
+
],
|
|
19518
|
+
},
|
|
19519
|
+
'page.canvas.autoRows': {
|
|
19520
|
+
mode: 'enum',
|
|
19521
|
+
options: [
|
|
19522
|
+
{ value: 'fixed', label: 'Linhas fixas' },
|
|
19523
|
+
{ value: 'content', label: 'Conteudo' },
|
|
19524
|
+
],
|
|
19525
|
+
},
|
|
19526
|
+
'page.canvas.collisionPolicy': {
|
|
19527
|
+
mode: 'enum',
|
|
19528
|
+
options: [
|
|
19529
|
+
{ value: 'block', label: 'Bloquear colisao' },
|
|
19530
|
+
{ value: 'swap', label: 'Trocar posicao' },
|
|
19531
|
+
],
|
|
19532
|
+
},
|
|
19533
|
+
'page.grouping[].kind': {
|
|
19534
|
+
mode: 'enum',
|
|
19535
|
+
options: [
|
|
19536
|
+
{ value: 'section', label: 'Secao' },
|
|
19537
|
+
{ value: 'tabs', label: 'Abas' },
|
|
19538
|
+
{ value: 'hero', label: 'Hero' },
|
|
19539
|
+
{ value: 'rail', label: 'Rail' },
|
|
19540
|
+
],
|
|
19541
|
+
},
|
|
19542
|
+
'page.grouping[].layout': {
|
|
19543
|
+
mode: 'enum',
|
|
19544
|
+
options: [
|
|
19545
|
+
{ value: 'stack', label: 'Empilhado' },
|
|
19546
|
+
{ value: 'grid', label: 'Grid' },
|
|
19547
|
+
{ value: 'row', label: 'Linha' },
|
|
19548
|
+
],
|
|
19549
|
+
},
|
|
19550
|
+
'page.grouping[].emphasis': {
|
|
19551
|
+
mode: 'enum',
|
|
19552
|
+
options: [
|
|
19553
|
+
{ value: 'high', label: 'Alta' },
|
|
19554
|
+
{ value: 'medium', label: 'Media' },
|
|
19555
|
+
],
|
|
19556
|
+
},
|
|
19557
|
+
'page.grouping[].side': {
|
|
19558
|
+
mode: 'enum',
|
|
19559
|
+
options: [
|
|
19560
|
+
{ value: 'left', label: 'Esquerda' },
|
|
19561
|
+
{ value: 'right', label: 'Direita' },
|
|
19562
|
+
],
|
|
19563
|
+
},
|
|
19564
|
+
'page.state.schema.<token>.mergeStrategy': {
|
|
19565
|
+
mode: 'enum',
|
|
19566
|
+
options: [
|
|
19567
|
+
{ value: 'replace', label: 'Substituir' },
|
|
19568
|
+
{ value: 'merge', label: 'Mesclar' },
|
|
19569
|
+
{ value: 'append', label: 'Acrescentar' },
|
|
19570
|
+
{ value: 'remove-keys', label: 'Remover chaves' },
|
|
19571
|
+
],
|
|
19572
|
+
},
|
|
19573
|
+
'page.state.derived.<token>.compute.kind': {
|
|
19574
|
+
mode: 'enum',
|
|
19575
|
+
options: [
|
|
19576
|
+
{ value: 'json-logic', label: 'Json Logic' },
|
|
19577
|
+
{ value: 'template', label: 'Template' },
|
|
19578
|
+
{ value: 'operator', label: 'Operador' },
|
|
19579
|
+
{ value: 'transformer', label: 'Transformer' },
|
|
19580
|
+
],
|
|
19581
|
+
},
|
|
18795
19582
|
'page.widgets[].shell.kind': {
|
|
18796
19583
|
mode: 'enum',
|
|
18797
19584
|
options: [
|
|
@@ -19336,7 +20123,10 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
19336
20123
|
'page.composition.links[]': ['id'],
|
|
19337
20124
|
},
|
|
19338
20125
|
hints: [
|
|
19339
|
-
'praxis-dynamic-page e
|
|
20126
|
+
'praxis-dynamic-page e runtime de composicao: consome WidgetPageDefinition, renderiza widgets e mantem relacoes em page.composition.links.',
|
|
20127
|
+
'Mutacoes agentic de pagina pertencem ao manifesto do praxis-page-builder; use este context pack como descoberta/runtime guidance.',
|
|
20128
|
+
'WidgetPageDefinition inclui widgets, composition.links, state, context, layout, canvas, layoutPreset, layoutPresetOptions, grouping, slotAssignments, deviceLayouts e themePreset.',
|
|
20129
|
+
'page.canvas.items e um mapa por widget key, nao um array; cada entrada guarda col, row, colSpan, rowSpan, zIndex e constraints opcionais.',
|
|
19340
20130
|
'Widgets e composition.links sao arrays; o patching deve fazer merge por key (widgets) e por id (links).',
|
|
19341
20131
|
'Preferir mudancas incrementais: alterar/estender em vez de substituir toda a pagina.',
|
|
19342
20132
|
'Para remover um item, envie {_remove: true} junto ao widget/link.',
|
|
@@ -28983,4 +29773,4 @@ function provideHookWhitelist(allowed) {
|
|
|
28983
29773
|
* Generated bundle index. Do not edit.
|
|
28984
29774
|
*/
|
|
28985
29775
|
|
|
28986
|
-
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, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, EmptyStateCardComponent, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisI18nService, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRichTextBlockComponent, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceSurfaceOpenAdapterService, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SurfaceBindingRuntimeService, SurfaceOpenActionEditorComponent, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisLayerScaleCss, buildSchemaId, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, hasMeaningfulGlobalActionPayloadValue, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isGlobalActionRef, isInlineFilterControlType, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldConstraints, normalizeFormConfig, normalizeFormMetadata, normalizeGlobalActionRef, normalizePath, normalizePraxisDataQueryContext, normalizeResourceAvailabilityReasonCode, normalizeStart, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisDynamicPageMetadata, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, removeDiacritics, reportTelemetryHookFactory, requiredCheckedValidator, resolveBuiltinPresets, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveValuePresentation, resolveValuePresentationLocale, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withMessage, withPraxisHttpLoading };
|
|
29776
|
+
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, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, EmptyStateCardComponent, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRichTextBlockComponent, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceSurfaceOpenAdapterService, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SurfaceBindingRuntimeService, SurfaceOpenActionEditorComponent, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisLayerScaleCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isFormLayoutItem, isGlobalActionRef, isInlineFilterControlType, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldConstraints, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef, normalizePath, normalizePraxisDataQueryContext, normalizeResourceAvailabilityReasonCode, normalizeStart, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, removeDiacritics, reportTelemetryHookFactory, requiredCheckedValidator, resolveBuiltinPresets, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveValuePresentation, resolveValuePresentationLocale, serializePraxisCollectionToCsv, serializePraxisCollectionToJson, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withMessage, withPraxisHttpLoading };
|