@praxisui/core 9.0.0-beta.2 → 9.0.0-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -3
- package/ai/component-registry.json +3473 -0
- package/fesm2022/praxisui-core.mjs +590 -204
- package/package.json +7 -10
- package/types/praxisui-core.d.ts +79 -6
|
@@ -2020,6 +2020,9 @@ class SchemaNormalizerService {
|
|
|
2020
2020
|
if (ui.helpText !== undefined) {
|
|
2021
2021
|
field.helpText = String(ui.helpText);
|
|
2022
2022
|
}
|
|
2023
|
+
if (ui.tooltip !== undefined) {
|
|
2024
|
+
field.tooltip = String(ui.tooltip);
|
|
2025
|
+
}
|
|
2023
2026
|
if (ui.hint !== undefined) {
|
|
2024
2027
|
field.hint = ui.hint;
|
|
2025
2028
|
}
|
|
@@ -5533,15 +5536,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
5533
5536
|
}], ctorParameters: () => [] });
|
|
5534
5537
|
|
|
5535
5538
|
function buildBaseColumnFromDef(def) {
|
|
5539
|
+
const type = resolveColumnTypeFromFieldDefinition(def);
|
|
5540
|
+
const format = type === 'string' ? resolveTextMaskFormatFromFieldDefinition(def) : undefined;
|
|
5536
5541
|
return {
|
|
5537
5542
|
field: def.name,
|
|
5538
5543
|
header: def.label || def.name,
|
|
5539
|
-
type
|
|
5544
|
+
type,
|
|
5540
5545
|
visible: def.tableHidden === true ? false : true,
|
|
5541
5546
|
sortable: def.sortable !== false,
|
|
5542
5547
|
filterable: def.filterable === true,
|
|
5543
5548
|
resizable: true,
|
|
5544
5549
|
order: typeof def.order === 'number' ? def.order : undefined,
|
|
5550
|
+
...(format ? { format } : {}),
|
|
5545
5551
|
};
|
|
5546
5552
|
}
|
|
5547
5553
|
function applyLocalCustomizations$2(baseCol, localCol) {
|
|
@@ -5575,9 +5581,10 @@ function applyLocalCustomizations$2(baseCol, localCol) {
|
|
|
5575
5581
|
result.renderer = localCol.renderer ?? baseCol.renderer;
|
|
5576
5582
|
}
|
|
5577
5583
|
else {
|
|
5578
|
-
//
|
|
5579
|
-
|
|
5580
|
-
result.
|
|
5584
|
+
// Drop local presentation that may be incompatible with the new server type,
|
|
5585
|
+
// but keep canonical server presentation for the resolved type.
|
|
5586
|
+
result.format = baseCol.format;
|
|
5587
|
+
result.valueMapping = baseCol.valueMapping;
|
|
5581
5588
|
result.renderer = undefined;
|
|
5582
5589
|
}
|
|
5583
5590
|
return result;
|
|
@@ -5603,15 +5610,121 @@ function reconcileTableConfig(layout, serverDefs) {
|
|
|
5603
5610
|
};
|
|
5604
5611
|
return next;
|
|
5605
5612
|
}
|
|
5606
|
-
function
|
|
5607
|
-
const
|
|
5608
|
-
if (
|
|
5613
|
+
function resolveColumnTypeFromFieldDefinition(def, fallback) {
|
|
5614
|
+
const semanticType = resolveSemanticColumnTypeFromFieldDefinition(def);
|
|
5615
|
+
if (resolveTextMaskFormatFromFieldDefinition(def) &&
|
|
5616
|
+
shouldUseTextMaskForColumn(def, semanticType)) {
|
|
5617
|
+
return 'string';
|
|
5618
|
+
}
|
|
5619
|
+
if (semanticType)
|
|
5620
|
+
return semanticType;
|
|
5621
|
+
if (fallback)
|
|
5622
|
+
return fallback;
|
|
5623
|
+
return 'string';
|
|
5624
|
+
}
|
|
5625
|
+
function resolveSemanticColumnTypeFromFieldDefinition(def) {
|
|
5626
|
+
const controlType = normalizePresentationToken(def.controlType);
|
|
5627
|
+
const numericFormat = normalizePresentationToken(def.numericFormat ?? def.format);
|
|
5628
|
+
const valuePresentationType = normalizePresentationToken(def.valuePresentation?.type);
|
|
5629
|
+
const dataType = normalizePresentationToken(def.type);
|
|
5630
|
+
if (valuePresentationType === 'currency')
|
|
5631
|
+
return 'currency';
|
|
5632
|
+
if (valuePresentationType === 'percent' || valuePresentationType === 'percentage')
|
|
5633
|
+
return 'percentage';
|
|
5634
|
+
if (valuePresentationType === 'date' || valuePresentationType === 'datetime' || valuePresentationType === 'time')
|
|
5609
5635
|
return 'date';
|
|
5610
|
-
if (
|
|
5636
|
+
if (valuePresentationType === 'boolean')
|
|
5611
5637
|
return 'boolean';
|
|
5612
|
-
if (
|
|
5638
|
+
if (valuePresentationType === 'number')
|
|
5613
5639
|
return 'number';
|
|
5614
|
-
|
|
5640
|
+
if (valuePresentationType === 'string')
|
|
5641
|
+
return 'string';
|
|
5642
|
+
if (numericFormat === 'currency' || controlType === 'currency')
|
|
5643
|
+
return 'currency';
|
|
5644
|
+
if (numericFormat === 'percent' || numericFormat === 'percentage')
|
|
5645
|
+
return 'percentage';
|
|
5646
|
+
if (numericFormat === 'date' || numericFormat === 'datetime')
|
|
5647
|
+
return 'date';
|
|
5648
|
+
if (controlType === 'numerictextbox' || controlType === 'inlinenumber')
|
|
5649
|
+
return 'number';
|
|
5650
|
+
if (controlType === 'checkbox' || controlType === 'toggle' || controlType === 'inlinetoggle')
|
|
5651
|
+
return 'boolean';
|
|
5652
|
+
if (controlType.includes('date') || controlType === 'time' || controlType === 'timepicker')
|
|
5653
|
+
return 'date';
|
|
5654
|
+
if (isColumnType(dataType))
|
|
5655
|
+
return dataType;
|
|
5656
|
+
if (dataType === 'text' || dataType === 'email' || dataType === 'url' || dataType === 'password')
|
|
5657
|
+
return 'string';
|
|
5658
|
+
if (dataType.includes('date') || dataType === 'time')
|
|
5659
|
+
return 'date';
|
|
5660
|
+
if (dataType.includes('bool'))
|
|
5661
|
+
return 'boolean';
|
|
5662
|
+
if (dataType.includes('number') ||
|
|
5663
|
+
dataType.includes('int') ||
|
|
5664
|
+
dataType.includes('decimal') ||
|
|
5665
|
+
dataType.includes('double') ||
|
|
5666
|
+
dataType.includes('float')) {
|
|
5667
|
+
return 'number';
|
|
5668
|
+
}
|
|
5669
|
+
if (isTextualControlType(controlType))
|
|
5670
|
+
return 'string';
|
|
5671
|
+
return undefined;
|
|
5672
|
+
}
|
|
5673
|
+
function shouldUseTextMaskForColumn(def, semanticType) {
|
|
5674
|
+
if (!semanticType || semanticType === 'string')
|
|
5675
|
+
return true;
|
|
5676
|
+
const controlType = normalizePresentationToken(def.controlType);
|
|
5677
|
+
if (isTextualControlType(controlType))
|
|
5678
|
+
return true;
|
|
5679
|
+
if (['date', 'boolean', 'currency', 'percentage', 'custom'].includes(semanticType)) {
|
|
5680
|
+
return false;
|
|
5681
|
+
}
|
|
5682
|
+
const valuePresentationType = normalizePresentationToken(def.valuePresentation?.type);
|
|
5683
|
+
const numericFormat = normalizePresentationToken(def.numericFormat ?? def.format);
|
|
5684
|
+
return !valuePresentationType && !numericFormat;
|
|
5685
|
+
}
|
|
5686
|
+
function resolveTextMaskFormatFromFieldDefinition(def) {
|
|
5687
|
+
return resolveTextMaskFormat(def.mask ??
|
|
5688
|
+
def.displayMask ??
|
|
5689
|
+
def.inputMask ??
|
|
5690
|
+
def.extraProperties?.mask);
|
|
5691
|
+
}
|
|
5692
|
+
function resolveTextMaskFormat(value) {
|
|
5693
|
+
if (typeof value !== 'string')
|
|
5694
|
+
return undefined;
|
|
5695
|
+
const format = value.trim();
|
|
5696
|
+
if (!format)
|
|
5697
|
+
return undefined;
|
|
5698
|
+
const hasMaskTokens = /[0#9Xx]/.test(format);
|
|
5699
|
+
const hasInvalidMaskLetters = /[A-WYZa-wyz]/.test(format);
|
|
5700
|
+
return hasMaskTokens && !hasInvalidMaskLetters ? format : undefined;
|
|
5701
|
+
}
|
|
5702
|
+
function normalizePresentationToken(value) {
|
|
5703
|
+
return String(value ?? '').trim().toLowerCase().replace(/[\s_-]+/g, '');
|
|
5704
|
+
}
|
|
5705
|
+
function isColumnType(value) {
|
|
5706
|
+
return [
|
|
5707
|
+
'string',
|
|
5708
|
+
'number',
|
|
5709
|
+
'date',
|
|
5710
|
+
'boolean',
|
|
5711
|
+
'currency',
|
|
5712
|
+
'percentage',
|
|
5713
|
+
'custom',
|
|
5714
|
+
].includes(value);
|
|
5715
|
+
}
|
|
5716
|
+
function isTextualControlType(value) {
|
|
5717
|
+
return [
|
|
5718
|
+
'input',
|
|
5719
|
+
'inlineinput',
|
|
5720
|
+
'textarea',
|
|
5721
|
+
'search',
|
|
5722
|
+
'email',
|
|
5723
|
+
'url',
|
|
5724
|
+
'phone',
|
|
5725
|
+
'cpfcnpjinput',
|
|
5726
|
+
'password',
|
|
5727
|
+
].includes(value);
|
|
5615
5728
|
}
|
|
5616
5729
|
|
|
5617
5730
|
const PRAXIS_I18N_CONFIG = new InjectionToken('PRAXIS_I18N_CONFIG', {
|
|
@@ -6331,7 +6444,7 @@ const GLOBAL_SURFACE_SERVICE = new InjectionToken('GLOBAL_SURFACE_SERVICE');
|
|
|
6331
6444
|
|
|
6332
6445
|
const dialogBaseFields = [
|
|
6333
6446
|
{ key: 'message', label: 'Mensagem', type: 'textarea', rows: 2, placeholder: 'Texto principal' },
|
|
6334
|
-
{ key: 'title', label: '
|
|
6447
|
+
{ key: 'title', label: 'Título', type: 'text', placeholder: 'Título do diálogo' },
|
|
6335
6448
|
{
|
|
6336
6449
|
key: 'themeColor',
|
|
6337
6450
|
label: 'Tema',
|
|
@@ -6342,13 +6455,13 @@ const dialogBaseFields = [
|
|
|
6342
6455
|
{ value: 'dark', label: 'Dark' },
|
|
6343
6456
|
],
|
|
6344
6457
|
},
|
|
6345
|
-
{ key: 'positionTop', label: '
|
|
6346
|
-
{ key: 'positionRight', label: '
|
|
6347
|
-
{ key: 'positionBottom', label: '
|
|
6348
|
-
{ key: 'positionLeft', label: '
|
|
6458
|
+
{ key: 'positionTop', label: 'Posição topo', type: 'text', placeholder: '12px' },
|
|
6459
|
+
{ key: 'positionRight', label: 'Posição direita', type: 'text', placeholder: '12px' },
|
|
6460
|
+
{ key: 'positionBottom', label: 'Posição base', type: 'text', placeholder: '12px' },
|
|
6461
|
+
{ key: 'positionLeft', label: 'Posição esquerda', type: 'text', placeholder: '12px' },
|
|
6349
6462
|
{
|
|
6350
6463
|
key: 'actionsLayout',
|
|
6351
|
-
label: 'Layout das
|
|
6464
|
+
label: 'Layout das ações',
|
|
6352
6465
|
type: 'select',
|
|
6353
6466
|
options: [
|
|
6354
6467
|
{ value: 'start', label: 'Start' },
|
|
@@ -6359,7 +6472,7 @@ const dialogBaseFields = [
|
|
|
6359
6472
|
},
|
|
6360
6473
|
{
|
|
6361
6474
|
key: 'animationType',
|
|
6362
|
-
label: '
|
|
6475
|
+
label: 'Animação',
|
|
6363
6476
|
type: 'select',
|
|
6364
6477
|
options: [
|
|
6365
6478
|
{ value: 'translate', label: 'Translate' },
|
|
@@ -6371,7 +6484,7 @@ const dialogBaseFields = [
|
|
|
6371
6484
|
},
|
|
6372
6485
|
{
|
|
6373
6486
|
key: 'animationDirection',
|
|
6374
|
-
label: '
|
|
6487
|
+
label: 'Direção animação',
|
|
6375
6488
|
type: 'select',
|
|
6376
6489
|
options: [
|
|
6377
6490
|
{ value: 'up', label: 'Up' },
|
|
@@ -6380,13 +6493,13 @@ const dialogBaseFields = [
|
|
|
6380
6493
|
{ value: 'right', label: 'Right' },
|
|
6381
6494
|
],
|
|
6382
6495
|
},
|
|
6383
|
-
{ key: 'animationDuration', label: '
|
|
6496
|
+
{ key: 'animationDuration', label: 'Duração (ms)', type: 'number', placeholder: '300' },
|
|
6384
6497
|
{ key: 'width', label: 'Largura', type: 'text', placeholder: '480px' },
|
|
6385
6498
|
{ key: 'height', label: 'Altura', type: 'text', placeholder: 'auto' },
|
|
6386
|
-
{ key: 'minWidth', label: 'Largura
|
|
6387
|
-
{ key: 'maxWidth', label: 'Largura
|
|
6388
|
-
{ key: 'minHeight', label: 'Altura
|
|
6389
|
-
{ key: 'maxHeight', label: 'Altura
|
|
6499
|
+
{ key: 'minWidth', label: 'Largura mínima', type: 'text', placeholder: '280px' },
|
|
6500
|
+
{ key: 'maxWidth', label: 'Largura máxima', type: 'text', placeholder: '90vw' },
|
|
6501
|
+
{ key: 'minHeight', label: 'Altura mínima', type: 'text', placeholder: '120px' },
|
|
6502
|
+
{ key: 'maxHeight', label: 'Altura máxima', type: 'text', placeholder: '90vh' },
|
|
6390
6503
|
{ key: 'disableClose', label: 'Bloquear fechar', type: 'toggle' },
|
|
6391
6504
|
{ key: 'hasBackdrop', label: 'Backdrop', type: 'toggle' },
|
|
6392
6505
|
{ key: 'closeOnBackdropClick', label: 'Fechar ao clicar no backdrop', type: 'toggle' },
|
|
@@ -6414,7 +6527,7 @@ const dialogFieldsWithModeDependency = dialogFieldsWithoutMessage.map((field) =>
|
|
|
6414
6527
|
...field,
|
|
6415
6528
|
dependsOnKey: field.dependsOnKey ?? 'mode',
|
|
6416
6529
|
dependsOnValue: field.dependsOnValue ?? 'true',
|
|
6417
|
-
hint: field.hint ?? '
|
|
6530
|
+
hint: field.hint ?? 'Disponível quando "Usar diálogo" estiver ativo.',
|
|
6418
6531
|
}));
|
|
6419
6532
|
const GLOBAL_ACTION_UI_SCHEMAS = [
|
|
6420
6533
|
{
|
|
@@ -6462,7 +6575,7 @@ const GLOBAL_ACTION_UI_SCHEMAS = [
|
|
|
6462
6575
|
required: true,
|
|
6463
6576
|
placeholder: 'Texto exibido no alerta simples',
|
|
6464
6577
|
},
|
|
6465
|
-
{ key: 'mode', label: 'Usar
|
|
6578
|
+
{ key: 'mode', label: 'Usar diálogo (avançado)', type: 'toggle' },
|
|
6466
6579
|
...dialogFieldsWithModeDependency,
|
|
6467
6580
|
],
|
|
6468
6581
|
},
|
|
@@ -6481,19 +6594,19 @@ const GLOBAL_ACTION_UI_SCHEMAS = [
|
|
|
6481
6594
|
fields: [
|
|
6482
6595
|
...dialogBaseFields,
|
|
6483
6596
|
{ key: 'placeholder', label: 'Placeholder', type: 'text' },
|
|
6484
|
-
{ key: 'defaultValue', label: 'Valor
|
|
6597
|
+
{ key: 'defaultValue', label: 'Valor padrão', type: 'text' },
|
|
6485
6598
|
{ key: 'okLabel', label: 'Texto OK', type: 'text' },
|
|
6486
6599
|
{ key: 'cancelLabel', label: 'Texto cancelar', type: 'text' },
|
|
6487
6600
|
],
|
|
6488
6601
|
},
|
|
6489
6602
|
{
|
|
6490
6603
|
id: 'dialog.open',
|
|
6491
|
-
label: 'Abrir
|
|
6604
|
+
label: 'Abrir diálogo',
|
|
6492
6605
|
fields: [
|
|
6493
6606
|
...dialogBaseFields,
|
|
6494
6607
|
{
|
|
6495
6608
|
key: 'contentType',
|
|
6496
|
-
label: 'Tipo de
|
|
6609
|
+
label: 'Tipo de conteúdo',
|
|
6497
6610
|
type: 'select',
|
|
6498
6611
|
options: [
|
|
6499
6612
|
{ value: 'template', label: 'Template' },
|
|
@@ -6514,7 +6627,7 @@ const GLOBAL_ACTION_UI_SCHEMAS = [
|
|
|
6514
6627
|
{ key: 'message', label: 'Mensagem', type: 'text' },
|
|
6515
6628
|
{
|
|
6516
6629
|
key: 'level',
|
|
6517
|
-
label: '
|
|
6630
|
+
label: 'Nível',
|
|
6518
6631
|
type: 'select',
|
|
6519
6632
|
options: [
|
|
6520
6633
|
{ value: 'log', label: 'log' },
|
|
@@ -9496,9 +9609,25 @@ function mapFieldDefinitionToMetadata(field) {
|
|
|
9496
9609
|
metadata.maxLength = field.maxLength;
|
|
9497
9610
|
if (field.pattern !== undefined)
|
|
9498
9611
|
metadata.pattern = field.pattern;
|
|
9612
|
+
if (field.helpText !== undefined) {
|
|
9613
|
+
metadata.helpText = field.helpText;
|
|
9614
|
+
}
|
|
9499
9615
|
if (field.hint || field.helpText) {
|
|
9500
9616
|
metadata.hint = field.hint ?? field.helpText;
|
|
9501
9617
|
}
|
|
9618
|
+
if (field.tooltipOnHover !== undefined) {
|
|
9619
|
+
metadata.tooltipOnHover = field.tooltipOnHover;
|
|
9620
|
+
const tooltip = field.tooltip ??
|
|
9621
|
+
(field.tooltipOnHover === true
|
|
9622
|
+
? field.description ?? field.helpText ?? field.hint
|
|
9623
|
+
: undefined);
|
|
9624
|
+
if (tooltip !== undefined && tooltip !== null) {
|
|
9625
|
+
metadata.tooltip = String(tooltip);
|
|
9626
|
+
}
|
|
9627
|
+
}
|
|
9628
|
+
else if (field.tooltip !== undefined) {
|
|
9629
|
+
metadata.tooltip = String(field.tooltip);
|
|
9630
|
+
}
|
|
9502
9631
|
if (field.hiddenCondition !== undefined) {
|
|
9503
9632
|
metadata.hiddenCondition = field.hiddenCondition;
|
|
9504
9633
|
}
|
|
@@ -16392,6 +16521,37 @@ function normalizeSelectLike(meta) {
|
|
|
16392
16521
|
return m;
|
|
16393
16522
|
}
|
|
16394
16523
|
|
|
16524
|
+
const SERVER_OWNED_FIELD_SEMANTIC_KEYS = [
|
|
16525
|
+
'label',
|
|
16526
|
+
'hint',
|
|
16527
|
+
'helpText',
|
|
16528
|
+
'description',
|
|
16529
|
+
'tooltip',
|
|
16530
|
+
'tooltipOnHover',
|
|
16531
|
+
'icon',
|
|
16532
|
+
'prefixIcon',
|
|
16533
|
+
'suffixIcon',
|
|
16534
|
+
'iconPosition',
|
|
16535
|
+
'iconSize',
|
|
16536
|
+
'iconColor',
|
|
16537
|
+
'iconClass',
|
|
16538
|
+
'iconStyle',
|
|
16539
|
+
'iconFontSize',
|
|
16540
|
+
];
|
|
16541
|
+
function applyServerOwnedFieldSemantics(merged, serverField) {
|
|
16542
|
+
const next = { ...merged };
|
|
16543
|
+
const server = serverField;
|
|
16544
|
+
for (const key of SERVER_OWNED_FIELD_SEMANTIC_KEYS) {
|
|
16545
|
+
if (server[key] === undefined) {
|
|
16546
|
+
delete next[key];
|
|
16547
|
+
}
|
|
16548
|
+
else {
|
|
16549
|
+
next[key] = server[key];
|
|
16550
|
+
}
|
|
16551
|
+
}
|
|
16552
|
+
return next;
|
|
16553
|
+
}
|
|
16554
|
+
|
|
16395
16555
|
function createDefaultFormConfig() {
|
|
16396
16556
|
const config = {
|
|
16397
16557
|
sections: [
|
|
@@ -16554,7 +16714,7 @@ function syncWithServerMetadata(localConfig, serverMetadata) {
|
|
|
16554
16714
|
toggleOptions: pick('toggleOptions'),
|
|
16555
16715
|
nodes: pick('nodes'),
|
|
16556
16716
|
};
|
|
16557
|
-
mergedOverlapping.push(merged);
|
|
16717
|
+
mergedOverlapping.push(applyServerOwnedFieldSemantics(merged, serverField));
|
|
16558
16718
|
// Track simple modifications for diagnostics
|
|
16559
16719
|
['label', 'required', 'maxLength', 'minLength', 'dataType', 'controlType'].forEach((prop) => {
|
|
16560
16720
|
if (loc[prop] !== base[prop]) {
|
|
@@ -16894,7 +17054,7 @@ const EVENT_REGISTRATION_EDITORIAL_TEMPLATE = {
|
|
|
16894
17054
|
content: [
|
|
16895
17055
|
{
|
|
16896
17056
|
type: 'text',
|
|
16897
|
-
text: 'Ao enviar a
|
|
17057
|
+
text: 'Ao enviar a inscrição, o participante reconhece o tratamento dos dados para credenciamento, comunicações e operação do evento.',
|
|
16898
17058
|
},
|
|
16899
17059
|
],
|
|
16900
17060
|
}),
|
|
@@ -17035,7 +17195,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17035
17195
|
wrap: true,
|
|
17036
17196
|
items: [
|
|
17037
17197
|
{ type: 'badge', label: 'onboarding' },
|
|
17038
|
-
{ type: 'text', text: '
|
|
17198
|
+
{ type: 'text', text: 'Admissão, conferência e preferências iniciais' },
|
|
17039
17199
|
],
|
|
17040
17200
|
},
|
|
17041
17201
|
}, {
|
|
@@ -17044,7 +17204,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17044
17204
|
subtitle: 'Resumo do fluxo',
|
|
17045
17205
|
content: [
|
|
17046
17206
|
{ type: 'text', text: 'Dados pessoais e de contato.' },
|
|
17047
|
-
{ type: 'text', text: '
|
|
17207
|
+
{ type: 'text', text: 'Preferências operacionais iniciais.' },
|
|
17048
17208
|
{ type: 'text', text: 'Anexos e termos obrigatorios.' },
|
|
17049
17209
|
],
|
|
17050
17210
|
}),
|
|
@@ -17076,7 +17236,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17076
17236
|
id: 'operations',
|
|
17077
17237
|
appearance: 'step',
|
|
17078
17238
|
stepLabel: '2',
|
|
17079
|
-
title: '
|
|
17239
|
+
title: 'Operação inicial',
|
|
17080
17240
|
description: 'Dados para preparacao do ambiente e comunicacao inicial.',
|
|
17081
17241
|
rows: [
|
|
17082
17242
|
{
|
|
@@ -17102,7 +17262,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17102
17262
|
title: 'Uso interno',
|
|
17103
17263
|
subtitle: 'Antes do envio',
|
|
17104
17264
|
badge: 'info',
|
|
17105
|
-
description: 'As
|
|
17265
|
+
description: 'As informações deste fluxo são usadas exclusivamente para cadastro interno, provisionamento e comunicação de onboarding.',
|
|
17106
17266
|
}),
|
|
17107
17267
|
formBlocksBeforeActionsPlacement: 'afterSections',
|
|
17108
17268
|
actions: {
|
|
@@ -17151,7 +17311,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17151
17311
|
required: true,
|
|
17152
17312
|
options: [
|
|
17153
17313
|
{ text: 'Presencial', value: 'ONSITE' },
|
|
17154
|
-
{ text: '
|
|
17314
|
+
{ text: 'Híbrido', value: 'HYBRID' },
|
|
17155
17315
|
{ text: 'Remoto', value: 'REMOTE' },
|
|
17156
17316
|
],
|
|
17157
17317
|
},
|
|
@@ -17162,22 +17322,22 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17162
17322
|
required: true,
|
|
17163
17323
|
options: [
|
|
17164
17324
|
{ text: 'Sim', value: 'YES' },
|
|
17165
|
-
{ text: '
|
|
17325
|
+
{ text: 'Não', value: 'NO' },
|
|
17166
17326
|
],
|
|
17167
17327
|
},
|
|
17168
17328
|
{
|
|
17169
17329
|
name: 'shippingAddress',
|
|
17170
|
-
label: '
|
|
17330
|
+
label: 'Endereço para envio',
|
|
17171
17331
|
controlType: 'textarea',
|
|
17172
17332
|
},
|
|
17173
17333
|
{
|
|
17174
17334
|
name: 'accessibilityNotes',
|
|
17175
|
-
label: '
|
|
17335
|
+
label: 'Observações de acessibilidade ou preferências',
|
|
17176
17336
|
controlType: 'textarea',
|
|
17177
17337
|
},
|
|
17178
17338
|
{
|
|
17179
17339
|
name: 'privacyConsent',
|
|
17180
|
-
label: 'Confirmo
|
|
17340
|
+
label: 'Confirmo ciência sobre o tratamento dos meus dados no processo de onboarding.',
|
|
17181
17341
|
controlType: 'checkbox',
|
|
17182
17342
|
selectionMode: 'boolean',
|
|
17183
17343
|
variant: 'consent',
|
|
@@ -17250,7 +17410,7 @@ const EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE = {
|
|
|
17250
17410
|
id: 'operations',
|
|
17251
17411
|
appearance: 'step',
|
|
17252
17412
|
stepLabel: '2',
|
|
17253
|
-
title: '
|
|
17413
|
+
title: 'Operação inicial',
|
|
17254
17414
|
description: 'Configure os recursos necessarios para o primeiro dia.',
|
|
17255
17415
|
rows: [
|
|
17256
17416
|
{
|
|
@@ -17360,17 +17520,17 @@ const EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE = {
|
|
|
17360
17520
|
options: [
|
|
17361
17521
|
{ text: 'Presencial', value: 'Presencial' },
|
|
17362
17522
|
{ text: 'Remoto', value: 'Remoto' },
|
|
17363
|
-
{ text: '
|
|
17523
|
+
{ text: 'Híbrido', value: 'Híbrido' },
|
|
17364
17524
|
],
|
|
17365
17525
|
},
|
|
17366
17526
|
{
|
|
17367
17527
|
name: 'accessibilityNotes',
|
|
17368
|
-
label: '
|
|
17528
|
+
label: 'Observações adicionais',
|
|
17369
17529
|
controlType: 'textarea',
|
|
17370
17530
|
},
|
|
17371
17531
|
{
|
|
17372
17532
|
name: 'privacyConsent',
|
|
17373
|
-
label: 'Confirmo
|
|
17533
|
+
label: 'Confirmo ciência sobre o tratamento dos meus dados no processo de onboarding.',
|
|
17374
17534
|
controlType: 'checkbox',
|
|
17375
17535
|
selectionMode: 'boolean',
|
|
17376
17536
|
variant: 'consent',
|
|
@@ -17386,7 +17546,7 @@ const PRIVACY_CONSENT_EDITORIAL_TEMPLATE = {
|
|
|
17386
17546
|
version: '1.0.0',
|
|
17387
17547
|
metadata: {
|
|
17388
17548
|
title: 'Privacy Consent',
|
|
17389
|
-
description: 'Template focado em aceite
|
|
17549
|
+
description: 'Template focado em aceite explícito, base legal, preferências de comunicação e registro de consentimento.',
|
|
17390
17550
|
category: 'consent',
|
|
17391
17551
|
tags: ['privacy', 'consent', 'compliance', 'legal'],
|
|
17392
17552
|
source: 'catalog',
|
|
@@ -17408,13 +17568,13 @@ const PRIVACY_CONSENT_EDITORIAL_TEMPLATE = {
|
|
|
17408
17568
|
title: 'Consentimento e tratamento de dados',
|
|
17409
17569
|
subtitle: 'Template regulatorio',
|
|
17410
17570
|
badge: 'info',
|
|
17411
|
-
description: 'Use este template quando o objetivo principal do fluxo for registrar
|
|
17571
|
+
description: 'Use este template quando o objetivo principal do fluxo for registrar ciência, aceite e preferências relacionadas a privacidade.',
|
|
17412
17572
|
}),
|
|
17413
17573
|
sections: [
|
|
17414
17574
|
{
|
|
17415
17575
|
id: 'consent',
|
|
17416
17576
|
appearance: 'card',
|
|
17417
|
-
title: '
|
|
17577
|
+
title: 'Preferências e consentimentos',
|
|
17418
17578
|
description: 'Aceites explicitos e canais opcionais de comunicacao.',
|
|
17419
17579
|
rows: [
|
|
17420
17580
|
{
|
|
@@ -17497,7 +17657,7 @@ const PRIVACY_CONSENT_EDITORIAL_TEMPLATE = {
|
|
|
17497
17657
|
},
|
|
17498
17658
|
{
|
|
17499
17659
|
name: 'consentNotes',
|
|
17500
|
-
label: '
|
|
17660
|
+
label: 'Observações adicionais',
|
|
17501
17661
|
controlType: 'textarea',
|
|
17502
17662
|
},
|
|
17503
17663
|
],
|
|
@@ -18256,8 +18416,8 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION = {
|
|
|
18256
18416
|
fields: [
|
|
18257
18417
|
{ key: 'selectedEquipment', label: 'Equipamentos', valuePath: 'formData.selectedEquipment', hideWhenEmpty: true },
|
|
18258
18418
|
{ key: 'needsEquipment', label: 'Necessita envio de equipamento', valuePath: 'formData.needsEquipment', hideWhenEmpty: true },
|
|
18259
|
-
{ key: 'shippingAddress', label: '
|
|
18260
|
-
{ key: 'accessibilityNotes', label: '
|
|
18419
|
+
{ key: 'shippingAddress', label: 'Endereço para envio', valuePath: 'formData.shippingAddress', hideWhenEmpty: true },
|
|
18420
|
+
{ key: 'accessibilityNotes', label: 'Observações adicionais', valuePath: 'formData.accessibilityNotes', hideWhenEmpty: true },
|
|
18261
18421
|
],
|
|
18262
18422
|
},
|
|
18263
18423
|
],
|
|
@@ -20346,7 +20506,7 @@ class SurfaceOpenActionEditorComponent {
|
|
|
20346
20506
|
.filter(Boolean)));
|
|
20347
20507
|
}
|
|
20348
20508
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: SurfaceOpenActionEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
20349
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: SurfaceOpenActionEditorComponent, isStandalone: true, selector: "praxis-surface-open-action-editor", inputs: { value: "value", hostKind: "hostKind" }, outputs: { valueChange: "valueChange" }, providers: [providePraxisI18nConfig(SURFACE_OPEN_I18N_CONFIG)], usesOnChanges: true, ngImport: i0, template: `
|
|
20509
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: SurfaceOpenActionEditorComponent, isStandalone: true, selector: "praxis-surface-open-action-editor", inputs: { value: "value", hostKind: "hostKind" }, outputs: { valueChange: "valueChange" }, host: { attributes: { "data-praxis-surface-open-action-editor": "core" } }, providers: [providePraxisI18nConfig(SURFACE_OPEN_I18N_CONFIG)], usesOnChanges: true, ngImport: i0, template: `
|
|
20350
20510
|
<div class="surface-editor">
|
|
20351
20511
|
<div class="surface-section">
|
|
20352
20512
|
<div class="surface-section-title">{{ t('editor.presets.title', 'Presets') }}</div>
|
|
@@ -20643,17 +20803,17 @@ class SurfaceOpenActionEditorComponent {
|
|
|
20643
20803
|
{{ t('editor.bindings.empty', 'No bindings configured yet.') }}
|
|
20644
20804
|
</div>
|
|
20645
20805
|
}
|
|
20646
|
-
<div class="surface-
|
|
20806
|
+
<div class="surface-guidance">
|
|
20647
20807
|
@if (bindingSourceSuggestionsPreview) {
|
|
20648
|
-
<div>
|
|
20808
|
+
<div class="surface-guidance__item">
|
|
20649
20809
|
{{ t('editor.bindings.suggestedSources', 'Suggested sources: {{value}}', { value: bindingSourceSuggestionsPreview }) }}
|
|
20650
20810
|
</div>
|
|
20651
20811
|
}
|
|
20652
|
-
<div>
|
|
20812
|
+
<div class="surface-guidance__item surface-guidance__item--primary">
|
|
20653
20813
|
{{ t('editor.bindings.sourceSemantics', 'Use payload.* for the canonical event envelope and runtime.* for direct host state when the source component exposes it.') }}
|
|
20654
20814
|
</div>
|
|
20655
20815
|
@if (bindingTargetSuggestionsPreview) {
|
|
20656
|
-
<div>
|
|
20816
|
+
<div class="surface-guidance__item">
|
|
20657
20817
|
{{ t('editor.bindings.suggestedTargets', 'Suggested targets: {{value}}', { value: bindingTargetSuggestionsPreview }) }}
|
|
20658
20818
|
</div>
|
|
20659
20819
|
}
|
|
@@ -20689,11 +20849,11 @@ class SurfaceOpenActionEditorComponent {
|
|
|
20689
20849
|
</mat-form-field>
|
|
20690
20850
|
</div>
|
|
20691
20851
|
</div>
|
|
20692
|
-
`, isInline: true, styles: [".surface-editor{display:grid;gap:
|
|
20852
|
+
`, isInline: true, styles: [".surface-editor{display:grid;gap:14px;min-width:0}.surface-section{display:grid;gap:10px;min-width:0;padding:14px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-low)}.surface-section-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:0}.surface-section-title{font-size:12px;font-weight:700;letter-spacing:0;text-transform:uppercase;color:var(--md-sys-color-on-surface-variant);margin-bottom:0}.surface-section-header .surface-section-title{margin-bottom:0}.surface-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:12px 16px;min-width:0}.surface-preset-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.surface-span-2{grid-column:span 2}.surface-span-all{width:100%;min-width:0}.surface-component-meta{display:grid;gap:4px;padding:10px 12px;border-radius:8px;background:var(--md-sys-color-surface-container)}.surface-component-title{font-weight:600;color:var(--md-sys-color-on-surface)}.surface-component-description,.surface-empty{color:var(--md-sys-color-on-surface-variant);font-size:12px;line-height:1.45}.surface-bindings{display:grid;gap:10px;min-width:0}.surface-binding-row{display:grid;grid-template-columns:minmax(min(220px,100%),1.15fr) minmax(min(240px,100%),1.25fr) minmax(128px,.55fr) auto;gap:10px;align-items:start;min-width:0;padding:10px;border-radius:8px;background:var(--md-sys-color-surface-container)}.surface-binding-row mat-form-field:nth-child(4){grid-column:1 / -2}.surface-guidance{display:grid;gap:4px;padding:10px 12px;border-radius:8px;background:color-mix(in srgb,var(--md-sys-color-primary-container) 18%,transparent);color:var(--md-sys-color-on-surface-variant);font-size:12px;line-height:1.45}.surface-guidance__item{overflow-wrap:anywhere}.surface-guidance__item--primary{color:var(--md-sys-color-on-surface)}mat-form-field{width:100%;min-width:0}@media(max-width:960px){.surface-section{padding:12px}.surface-span-2{grid-column:1 / -1}.surface-binding-row{grid-template-columns:minmax(0,1fr)}.surface-binding-row mat-form-field:nth-child(4){grid-column:auto}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
|
|
20693
20853
|
}
|
|
20694
20854
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: SurfaceOpenActionEditorComponent, decorators: [{
|
|
20695
20855
|
type: Component,
|
|
20696
|
-
args: [{ selector: 'praxis-surface-open-action-editor', standalone: true, providers: [providePraxisI18nConfig(SURFACE_OPEN_I18N_CONFIG)], imports: [
|
|
20856
|
+
args: [{ selector: 'praxis-surface-open-action-editor', standalone: true, host: { 'data-praxis-surface-open-action-editor': 'core' }, providers: [providePraxisI18nConfig(SURFACE_OPEN_I18N_CONFIG)], imports: [
|
|
20697
20857
|
FormsModule,
|
|
20698
20858
|
MatButtonModule,
|
|
20699
20859
|
MatFormFieldModule,
|
|
@@ -20999,17 +21159,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
20999
21159
|
{{ t('editor.bindings.empty', 'No bindings configured yet.') }}
|
|
21000
21160
|
</div>
|
|
21001
21161
|
}
|
|
21002
|
-
<div class="surface-
|
|
21162
|
+
<div class="surface-guidance">
|
|
21003
21163
|
@if (bindingSourceSuggestionsPreview) {
|
|
21004
|
-
<div>
|
|
21164
|
+
<div class="surface-guidance__item">
|
|
21005
21165
|
{{ t('editor.bindings.suggestedSources', 'Suggested sources: {{value}}', { value: bindingSourceSuggestionsPreview }) }}
|
|
21006
21166
|
</div>
|
|
21007
21167
|
}
|
|
21008
|
-
<div>
|
|
21168
|
+
<div class="surface-guidance__item surface-guidance__item--primary">
|
|
21009
21169
|
{{ t('editor.bindings.sourceSemantics', 'Use payload.* for the canonical event envelope and runtime.* for direct host state when the source component exposes it.') }}
|
|
21010
21170
|
</div>
|
|
21011
21171
|
@if (bindingTargetSuggestionsPreview) {
|
|
21012
|
-
<div>
|
|
21172
|
+
<div class="surface-guidance__item">
|
|
21013
21173
|
{{ t('editor.bindings.suggestedTargets', 'Suggested targets: {{value}}', { value: bindingTargetSuggestionsPreview }) }}
|
|
21014
21174
|
</div>
|
|
21015
21175
|
}
|
|
@@ -21045,7 +21205,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
21045
21205
|
</mat-form-field>
|
|
21046
21206
|
</div>
|
|
21047
21207
|
</div>
|
|
21048
|
-
`, styles: [".surface-editor{display:grid;gap:
|
|
21208
|
+
`, styles: [".surface-editor{display:grid;gap:14px;min-width:0}.surface-section{display:grid;gap:10px;min-width:0;padding:14px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-low)}.surface-section-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:0}.surface-section-title{font-size:12px;font-weight:700;letter-spacing:0;text-transform:uppercase;color:var(--md-sys-color-on-surface-variant);margin-bottom:0}.surface-section-header .surface-section-title{margin-bottom:0}.surface-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:12px 16px;min-width:0}.surface-preset-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.surface-span-2{grid-column:span 2}.surface-span-all{width:100%;min-width:0}.surface-component-meta{display:grid;gap:4px;padding:10px 12px;border-radius:8px;background:var(--md-sys-color-surface-container)}.surface-component-title{font-weight:600;color:var(--md-sys-color-on-surface)}.surface-component-description,.surface-empty{color:var(--md-sys-color-on-surface-variant);font-size:12px;line-height:1.45}.surface-bindings{display:grid;gap:10px;min-width:0}.surface-binding-row{display:grid;grid-template-columns:minmax(min(220px,100%),1.15fr) minmax(min(240px,100%),1.25fr) minmax(128px,.55fr) auto;gap:10px;align-items:start;min-width:0;padding:10px;border-radius:8px;background:var(--md-sys-color-surface-container)}.surface-binding-row mat-form-field:nth-child(4){grid-column:1 / -2}.surface-guidance{display:grid;gap:4px;padding:10px 12px;border-radius:8px;background:color-mix(in srgb,var(--md-sys-color-primary-container) 18%,transparent);color:var(--md-sys-color-on-surface-variant);font-size:12px;line-height:1.45}.surface-guidance__item{overflow-wrap:anywhere}.surface-guidance__item--primary{color:var(--md-sys-color-on-surface)}mat-form-field{width:100%;min-width:0}@media(max-width:960px){.surface-section{padding:12px}.surface-span-2{grid-column:1 / -1}.surface-binding-row{grid-template-columns:minmax(0,1fr)}.surface-binding-row mat-form-field:nth-child(4){grid-column:auto}}\n"] }]
|
|
21049
21209
|
}], propDecorators: { value: [{
|
|
21050
21210
|
type: Input
|
|
21051
21211
|
}], hostKind: [{
|
|
@@ -21091,7 +21251,7 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21091
21251
|
'Detalhes específicos de cada controle (ex: opções de datepicker, máscaras específicas) devem ser consultados nos catálogos de microcomponentes.',
|
|
21092
21252
|
'POLICY: Arrays e objetos (ex: options, validators) devem sofrer merge/append, nunca substituição completa sem confirmação.',
|
|
21093
21253
|
'Não gere função para conditionalDisplay/conditionalRequired. Use Json Logic serializável; funções ficam restritas a transforms e validators customizados.',
|
|
21094
|
-
'POLICY: Campos auxiliares do host devem usar source=local ou transient=true em FieldMetadata;
|
|
21254
|
+
'POLICY: Campos auxiliares do host devem usar source=local ou transient=true em FieldMetadata; não invente campos no DTO/backend quando eles não devem participar do payload persistido.',
|
|
21095
21255
|
'POLICY: formSubmit.formData e o payload filtrado para backend; formSubmit.rawFormData preserva os valores completos da UI, incluindo campos locais/transient.',
|
|
21096
21256
|
],
|
|
21097
21257
|
capabilities: [
|
|
@@ -21194,6 +21354,13 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21194
21354
|
description: 'Texto de ajuda exibido abaixo do campo.',
|
|
21195
21355
|
intentExamples: ['colocar dica', 'ajuda no rodapé do campo'],
|
|
21196
21356
|
},
|
|
21357
|
+
{
|
|
21358
|
+
path: 'helpText',
|
|
21359
|
+
category: 'identity',
|
|
21360
|
+
valueKind: 'string',
|
|
21361
|
+
description: 'Texto semântico de ajuda publicado pelo schema/DTO.',
|
|
21362
|
+
intentExamples: ['explicar regra de negócio do campo', 'ajuda vinda do backend'],
|
|
21363
|
+
},
|
|
21197
21364
|
{
|
|
21198
21365
|
path: 'tooltip',
|
|
21199
21366
|
category: 'identity',
|
|
@@ -21201,6 +21368,13 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21201
21368
|
description: 'Texto exibido ao passar o mouse.',
|
|
21202
21369
|
intentExamples: ['adicionar tooltip'],
|
|
21203
21370
|
},
|
|
21371
|
+
{
|
|
21372
|
+
path: 'tooltipOnHover',
|
|
21373
|
+
category: 'identity',
|
|
21374
|
+
valueKind: 'boolean',
|
|
21375
|
+
description: 'Habilita apresentação do tooltip no hover quando suportado pelo renderer.',
|
|
21376
|
+
intentExamples: ['mostrar tooltip ao passar o mouse', 'ativar dica no hover'],
|
|
21377
|
+
},
|
|
21204
21378
|
{
|
|
21205
21379
|
path: 'description',
|
|
21206
21380
|
category: 'identity',
|
|
@@ -21292,24 +21466,24 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21292
21466
|
category: 'data',
|
|
21293
21467
|
valueKind: 'enum',
|
|
21294
21468
|
allowedValues: ENUMS$1.fieldSource,
|
|
21295
|
-
description: 'Origem
|
|
21296
|
-
intentExamples: ['campo local', 'campo auxiliar do host', 'campo que
|
|
21297
|
-
safetyNotes: '
|
|
21469
|
+
description: 'Origem semântica do campo. Use local para campos do host que não vêm do schema backend.',
|
|
21470
|
+
intentExamples: ['campo local', 'campo auxiliar do host', 'campo que não vem do schema'],
|
|
21471
|
+
safetyNotes: 'Não marque como local um campo que exista no schema backend; remova a semântica local quando houver colisão com campo server-backed.',
|
|
21298
21472
|
},
|
|
21299
21473
|
{
|
|
21300
21474
|
path: 'transient',
|
|
21301
21475
|
category: 'data',
|
|
21302
21476
|
valueKind: 'boolean',
|
|
21303
|
-
description: 'Marca o campo como
|
|
21304
|
-
intentExamples: ['campo
|
|
21305
|
-
safetyNotes: 'Campos transient continuam participando de UI,
|
|
21477
|
+
description: 'Marca o campo como temporário/local para preenchimento. O dynamic-form omite do submit por padrão.',
|
|
21478
|
+
intentExamples: ['campo temporário', 'campo transient', 'não enviar no payload', 'usar apenas na UI'],
|
|
21479
|
+
safetyNotes: 'Campos transient continuam participando de UI, validação, regras, visibilidade e valueChange; eles apenas saem do payload persistido por padrão.',
|
|
21306
21480
|
},
|
|
21307
21481
|
{
|
|
21308
21482
|
path: 'submitPolicy',
|
|
21309
21483
|
category: 'behavior',
|
|
21310
21484
|
valueKind: 'enum',
|
|
21311
21485
|
allowedValues: ENUMS$1.fieldSubmitPolicy,
|
|
21312
|
-
description: '
|
|
21486
|
+
description: 'Política de submit para sobrescrever o padrão de campos locais/transient.',
|
|
21313
21487
|
intentExamples: ['omitir do submit', 'enviar mesmo sendo local', 'enviar apenas se alterado'],
|
|
21314
21488
|
safetyNotes: 'Use omit para nunca persistir, include para enviar sempre e includeWhenDirty apenas quando o controle estiver dirty.',
|
|
21315
21489
|
},
|
|
@@ -21412,6 +21586,34 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21412
21586
|
description: 'Tamanho do ícone.',
|
|
21413
21587
|
intentExamples: ['ícone pequeno', 'aumentar tamanho do ícone', 'ícone grande'],
|
|
21414
21588
|
},
|
|
21589
|
+
{
|
|
21590
|
+
path: 'iconColor',
|
|
21591
|
+
category: 'appearance',
|
|
21592
|
+
valueKind: 'string',
|
|
21593
|
+
description: 'Cor semântica ou token de cor aplicado ao ícone principal.',
|
|
21594
|
+
intentExamples: ['ícone em cor primária', 'usar token do tema no ícone'],
|
|
21595
|
+
},
|
|
21596
|
+
{
|
|
21597
|
+
path: 'iconClass',
|
|
21598
|
+
category: 'appearance',
|
|
21599
|
+
valueKind: 'string',
|
|
21600
|
+
description: 'Classe CSS controlada pelo host para o ícone principal.',
|
|
21601
|
+
intentExamples: ['usar classe de ícone outlined', 'aplicar classe corporativa'],
|
|
21602
|
+
},
|
|
21603
|
+
{
|
|
21604
|
+
path: 'iconStyle',
|
|
21605
|
+
category: 'appearance',
|
|
21606
|
+
valueKind: 'string',
|
|
21607
|
+
description: 'Estilo visual semântico do ícone quando o renderer suportar variações.',
|
|
21608
|
+
intentExamples: ['usar ícone arredondado', 'aplicar estilo filled'],
|
|
21609
|
+
},
|
|
21610
|
+
{
|
|
21611
|
+
path: 'iconFontSize',
|
|
21612
|
+
category: 'appearance',
|
|
21613
|
+
valueKind: 'string',
|
|
21614
|
+
description: 'Tamanho tipográfico do ícone principal.',
|
|
21615
|
+
intentExamples: ['ícone com 18px', 'ajustar tamanho do ícone'],
|
|
21616
|
+
},
|
|
21415
21617
|
// =============================================================================
|
|
21416
21618
|
// MASK / FORMAT
|
|
21417
21619
|
// =============================================================================
|
|
@@ -21451,8 +21653,8 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21451
21653
|
path: 'required',
|
|
21452
21654
|
category: 'validation',
|
|
21453
21655
|
valueKind: 'boolean',
|
|
21454
|
-
description: 'Campo
|
|
21455
|
-
intentExamples: ['campo
|
|
21656
|
+
description: 'Campo obrigatório (alias rápido do validators.required).',
|
|
21657
|
+
intentExamples: ['campo obrigatório', 'exigir preenchimento'],
|
|
21456
21658
|
},
|
|
21457
21659
|
{
|
|
21458
21660
|
path: 'validators.requiredMessage',
|
|
@@ -21471,7 +21673,7 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21471
21673
|
path: 'validators.emailMessage',
|
|
21472
21674
|
category: 'validation',
|
|
21473
21675
|
valueKind: 'string',
|
|
21474
|
-
description: 'Mensagem customizada para
|
|
21676
|
+
description: 'Mensagem customizada para validação de email.',
|
|
21475
21677
|
},
|
|
21476
21678
|
{
|
|
21477
21679
|
path: 'validators.minLength',
|
|
@@ -21611,15 +21813,15 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21611
21813
|
path: 'validators.customValidator',
|
|
21612
21814
|
category: 'validation',
|
|
21613
21815
|
valueKind: 'expression',
|
|
21614
|
-
description: 'Validador customizado (
|
|
21615
|
-
safetyNotes: '
|
|
21816
|
+
description: 'Validador customizado (função).',
|
|
21817
|
+
safetyNotes: 'Funções não são serializáveis; exige wiring manual.',
|
|
21616
21818
|
},
|
|
21617
21819
|
{
|
|
21618
21820
|
path: 'validators.asyncValidator',
|
|
21619
21821
|
category: 'validation',
|
|
21620
21822
|
valueKind: 'expression',
|
|
21621
|
-
description: 'Validador async customizado (
|
|
21622
|
-
safetyNotes: '
|
|
21823
|
+
description: 'Validador async customizado (função).',
|
|
21824
|
+
safetyNotes: 'Funções não são serializáveis; exige wiring manual.',
|
|
21623
21825
|
},
|
|
21624
21826
|
{
|
|
21625
21827
|
path: 'validators.matchField',
|
|
@@ -21637,8 +21839,8 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21637
21839
|
path: 'validators.uniqueValidator',
|
|
21638
21840
|
category: 'validation',
|
|
21639
21841
|
valueKind: 'expression',
|
|
21640
|
-
description: 'Validador de unicidade via API (
|
|
21641
|
-
safetyNotes: '
|
|
21842
|
+
description: 'Validador de unicidade via API (função).',
|
|
21843
|
+
safetyNotes: 'Funções não são serializáveis; exige wiring manual.',
|
|
21642
21844
|
},
|
|
21643
21845
|
{
|
|
21644
21846
|
path: 'validators.uniqueMessage',
|
|
@@ -21650,8 +21852,8 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21650
21852
|
path: 'validators.conditionalValidation',
|
|
21651
21853
|
category: 'validation',
|
|
21652
21854
|
valueKind: 'array',
|
|
21653
|
-
description: 'Regras de
|
|
21654
|
-
safetyNotes: 'Use regras declarativas com Json Logic
|
|
21855
|
+
description: 'Regras de validação condicional.',
|
|
21856
|
+
safetyNotes: 'Use regras declarativas com Json Logic serializável; não gere funções aqui.',
|
|
21655
21857
|
},
|
|
21656
21858
|
{
|
|
21657
21859
|
path: 'validators.conditionalValidation[].condition',
|
|
@@ -21671,13 +21873,13 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21671
21873
|
category: 'validation',
|
|
21672
21874
|
valueKind: 'enum',
|
|
21673
21875
|
allowedValues: ENUMS$1.validatorTrigger,
|
|
21674
|
-
description: 'Gatilho de
|
|
21876
|
+
description: 'Gatilho de validação no validator.',
|
|
21675
21877
|
},
|
|
21676
21878
|
{
|
|
21677
21879
|
path: 'validators.validationDebounce',
|
|
21678
21880
|
category: 'validation',
|
|
21679
21881
|
valueKind: 'number',
|
|
21680
|
-
description: 'Debounce de
|
|
21882
|
+
description: 'Debounce de validação no validator (ms).',
|
|
21681
21883
|
},
|
|
21682
21884
|
{
|
|
21683
21885
|
path: 'validators.showInlineErrors',
|
|
@@ -22004,12 +22206,12 @@ const ENUMS = {
|
|
|
22004
22206
|
actionPlacement: ['header', 'window'],
|
|
22005
22207
|
};
|
|
22006
22208
|
const CAPS = [
|
|
22007
|
-
{ path: 'page', category: 'page', valueKind: 'object', description: '
|
|
22209
|
+
{ path: 'page', category: 'page', valueKind: 'object', description: 'Definição da página dinâmica.' },
|
|
22008
22210
|
{ path: 'page.context', category: 'context', valueKind: 'object', description: 'Contexto compartilhado entre widgets.' },
|
|
22009
|
-
{ path: 'page.layoutPreset', category: 'layout', valueKind: 'string', description: 'ID
|
|
22010
|
-
{ path: 'page.layoutPresetOptions', category: 'layout', valueKind: 'object', description: '
|
|
22011
|
-
{ path: 'page.themePreset', category: 'appearance', valueKind: 'string', description: 'ID opcional do preset de tema para shell,
|
|
22012
|
-
{ path: 'page.layout', category: 'layout', valueKind: 'object', description: 'Layout base da
|
|
22211
|
+
{ path: 'page.layoutPreset', category: 'layout', valueKind: 'string', description: 'ID canônico opcional do preset estrutural da página.' },
|
|
22212
|
+
{ path: 'page.layoutPresetOptions', category: 'layout', valueKind: 'object', description: 'Opções específicas do preset estrutural consumidas por builders e runtimes futuros.' },
|
|
22213
|
+
{ path: 'page.themePreset', category: 'appearance', valueKind: 'string', description: 'ID opcional do preset de tema para shell, gráficos, densidade e defaults visuais.' },
|
|
22214
|
+
{ path: 'page.layout', category: 'layout', valueKind: 'object', description: 'Layout base da página.' },
|
|
22013
22215
|
{ path: 'page.layout.orientation', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutOrientation, description: 'Orientacao do grid (vertical/columns).' },
|
|
22014
22216
|
{ path: 'page.layout.columns', category: 'layout', valueKind: 'number', description: 'Numero de colunas (quando orientation=columns).' },
|
|
22015
22217
|
{ path: 'page.layout.gap', category: 'layout', valueKind: 'string', description: 'Gap entre widgets (ex: 16px).' },
|
|
@@ -22018,7 +22220,7 @@ const CAPS = [
|
|
|
22018
22220
|
{ path: 'page.layout.breakpoints.md', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint md.' },
|
|
22019
22221
|
{ path: 'page.layout.breakpoints.lg', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint lg.' },
|
|
22020
22222
|
{ path: 'page.layout.breakpoints.xl', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint xl.' },
|
|
22021
|
-
{ path: 'page.canvas', category: 'layout', valueKind: 'object', description: 'Canvas espacial
|
|
22223
|
+
{ path: 'page.canvas', category: 'layout', valueKind: 'object', description: 'Canvas espacial canônico da página quando houver geometria explícita.' },
|
|
22022
22224
|
{ path: 'page.canvas.mode', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.canvasMode, description: 'Modo canonico do canvas. Valor atual: grid.' },
|
|
22023
22225
|
{ path: 'page.canvas.columns', category: 'layout', valueKind: 'number', description: 'Numero de colunas do canvas espacial.' },
|
|
22024
22226
|
{ path: 'page.canvas.rowUnit', category: 'layout', valueKind: 'string', description: 'Altura base das linhas do canvas, como 80px.' },
|
|
@@ -22032,10 +22234,10 @@ const CAPS = [
|
|
|
22032
22234
|
{ path: 'page.canvas.items.<widgetKey>.rowSpan', category: 'layout', valueKind: 'number', description: 'Quantidade de linhas ocupadas pelo widget.' },
|
|
22033
22235
|
{ path: 'page.canvas.items.<widgetKey>.zIndex', category: 'layout', valueKind: 'number', description: 'Camada opcional do item no canvas.' },
|
|
22034
22236
|
{ path: 'page.canvas.items.<widgetKey>.constraints', category: 'layout', valueKind: 'object', description: 'Restricoes opcionais de posicao e tamanho do item no canvas.' },
|
|
22035
|
-
{ path: 'page.canvas.items.<widgetKey>.constraints.minColSpan', category: 'layout', valueKind: 'number', description: 'Span
|
|
22036
|
-
{ path: 'page.canvas.items.<widgetKey>.constraints.minRowSpan', category: 'layout', valueKind: 'number', description: 'Span
|
|
22037
|
-
{ path: 'page.canvas.items.<widgetKey>.constraints.maxColSpan', category: 'layout', valueKind: 'number', description: 'Span
|
|
22038
|
-
{ path: 'page.canvas.items.<widgetKey>.constraints.maxRowSpan', category: 'layout', valueKind: 'number', description: 'Span
|
|
22237
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.minColSpan', category: 'layout', valueKind: 'number', description: 'Span mínimo de colunas permitido.' },
|
|
22238
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.minRowSpan', category: 'layout', valueKind: 'number', description: 'Span mínimo de linhas permitido.' },
|
|
22239
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.maxColSpan', category: 'layout', valueKind: 'number', description: 'Span máximo de colunas permitido.' },
|
|
22240
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.maxRowSpan', category: 'layout', valueKind: 'number', description: 'Span máximo de linhas permitido.' },
|
|
22039
22241
|
{ path: 'page.canvas.items.<widgetKey>.constraints.lockPosition', category: 'layout', valueKind: 'boolean', description: 'Bloqueia alteracao de posicao do item no canvas.' },
|
|
22040
22242
|
{ path: 'page.canvas.items.<widgetKey>.constraints.lockSize', category: 'layout', valueKind: 'boolean', description: 'Bloqueia alteracao de tamanho do item no canvas.' },
|
|
22041
22243
|
{ path: 'page.widgets', category: 'widgets', valueKind: 'array', description: 'Lista de widgets renderizados.' },
|
|
@@ -22043,32 +22245,32 @@ const CAPS = [
|
|
|
22043
22245
|
{ path: 'page.widgets[].className', category: 'widgets', valueKind: 'string', description: 'Classe CSS opcional do widget.' },
|
|
22044
22246
|
{ path: 'page.widgets[].definition.id', category: 'widgets', valueKind: 'string', description: 'ID do componente do widget (ex: praxis-table).' },
|
|
22045
22247
|
{ path: 'page.widgets[].definition.inputs', category: 'widgets', valueKind: 'object', description: 'Inputs iniciais do widget.' },
|
|
22046
|
-
{ path: 'page.widgets[].definition.inputs.hostCapabilities', category: 'widgets', valueKind: 'object', description: 'Capacidades runtime mediadas pelo host quando definition.id = praxis-rich-content.
|
|
22047
|
-
{ path: 'page.widgets[].definition.inputs.hostCapabilities.dispatchAction', category: 'widgets', valueKind: 'object', description: 'Dispatcher runtime para actionButton e actions declarativas de rich content hospedado na
|
|
22048
|
-
{ path: 'page.widgets[].definition.inputs.hostCapabilities.isActionAvailable', category: 'widgets', valueKind: 'object', description: 'Resolver runtime de disponibilidade de actionId para rich content hospedado na
|
|
22049
|
-
{ path: 'page.widgets[].definition.inputs.hostCapabilities.hasCapability', category: 'widgets', valueKind: 'object', description: 'Resolver runtime de capabilities como page.customization.enabled e page.widget.selected para rich content hospedado na
|
|
22248
|
+
{ path: 'page.widgets[].definition.inputs.hostCapabilities', category: 'widgets', valueKind: 'object', description: 'Capacidades runtime mediadas pelo host quando definition.id = praxis-rich-content. Não pertence ao JSON persistido.' },
|
|
22249
|
+
{ path: 'page.widgets[].definition.inputs.hostCapabilities.dispatchAction', category: 'widgets', valueKind: 'object', description: 'Dispatcher runtime para actionButton e actions declarativas de rich content hospedado na página.' },
|
|
22250
|
+
{ path: 'page.widgets[].definition.inputs.hostCapabilities.isActionAvailable', category: 'widgets', valueKind: 'object', description: 'Resolver runtime de disponibilidade de actionId para rich content hospedado na página.' },
|
|
22251
|
+
{ path: 'page.widgets[].definition.inputs.hostCapabilities.hasCapability', category: 'widgets', valueKind: 'object', description: 'Resolver runtime de capabilities como page.customization.enabled e page.widget.selected para rich content hospedado na página.' },
|
|
22050
22252
|
{ path: 'page.widgets[].definition.bindingOrder', category: 'widgets', valueKind: 'array', description: 'Ordem de binding de inputs.' },
|
|
22051
|
-
{ path: 'page.widgets[].shell', category: 'shell', valueKind: 'object', description: '
|
|
22253
|
+
{ path: 'page.widgets[].shell', category: 'shell', valueKind: 'object', description: 'Configuração do shell do widget.' },
|
|
22052
22254
|
{ path: 'page.widgets[].shell.kind', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.shellKind, description: 'Tipo de shell.' },
|
|
22053
|
-
{ path: 'page.widgets[].shell.title', category: 'shell', valueKind: 'string', description: '
|
|
22054
|
-
{ path: 'page.widgets[].shell.subtitle', category: 'shell', valueKind: 'string', description: '
|
|
22055
|
-
{ path: 'page.widgets[].shell.icon', category: 'shell', valueKind: 'string', description: '
|
|
22255
|
+
{ path: 'page.widgets[].shell.title', category: 'shell', valueKind: 'string', description: 'Título do shell.' },
|
|
22256
|
+
{ path: 'page.widgets[].shell.subtitle', category: 'shell', valueKind: 'string', description: 'Subtítulo do shell.' },
|
|
22257
|
+
{ path: 'page.widgets[].shell.icon', category: 'shell', valueKind: 'string', description: 'Ícone do shell.' },
|
|
22056
22258
|
{ path: 'page.widgets[].shell.showHeader', category: 'shell', valueKind: 'boolean', description: 'Exibe o header do shell.' },
|
|
22057
|
-
{ path: 'page.widgets[].shell.actions', category: 'shell', valueKind: 'array', description: '
|
|
22058
|
-
{ path: 'page.widgets[].shell.actions[].id', category: 'shell', valueKind: 'string', description: 'ID da
|
|
22059
|
-
{ path: 'page.widgets[].shell.actions[].label', category: 'shell', valueKind: 'string', description: 'Label da
|
|
22060
|
-
{ path: 'page.widgets[].shell.actions[].icon', category: 'shell', valueKind: 'string', description: '
|
|
22061
|
-
{ path: 'page.widgets[].shell.actions[].variant', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionVariant, description: 'Estilo visual da
|
|
22062
|
-
{ path: 'page.widgets[].shell.actions[].placement', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionPlacement, description: 'Posicionamento da
|
|
22063
|
-
{ path: 'page.widgets[].shell.actions[].emit', category: 'shell', valueKind: 'string', description: 'Evento emitido ao acionar a
|
|
22259
|
+
{ path: 'page.widgets[].shell.actions', category: 'shell', valueKind: 'array', description: 'Ações do shell.' },
|
|
22260
|
+
{ path: 'page.widgets[].shell.actions[].id', category: 'shell', valueKind: 'string', description: 'ID da ação.' },
|
|
22261
|
+
{ path: 'page.widgets[].shell.actions[].label', category: 'shell', valueKind: 'string', description: 'Label da ação.' },
|
|
22262
|
+
{ path: 'page.widgets[].shell.actions[].icon', category: 'shell', valueKind: 'string', description: 'Ícone da ação.' },
|
|
22263
|
+
{ path: 'page.widgets[].shell.actions[].variant', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionVariant, description: 'Estilo visual da ação.' },
|
|
22264
|
+
{ path: 'page.widgets[].shell.actions[].placement', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionPlacement, description: 'Posicionamento da ação.' },
|
|
22265
|
+
{ path: 'page.widgets[].shell.actions[].emit', category: 'shell', valueKind: 'string', description: 'Evento emitido ao acionar a ação.' },
|
|
22064
22266
|
{ path: 'page.state', category: 'state', valueKind: 'object', description: 'Estado declarativo opcional compartilhado por widgets e composicao.' },
|
|
22065
22267
|
{ path: 'page.state.values', category: 'state', valueKind: 'object', description: 'Valores primarios mutaveis escritos por widgets, defaults ou host.' },
|
|
22066
22268
|
{ path: 'page.state.schema', category: 'state', valueKind: 'object', description: 'Descritores dos paths primarios de estado.' },
|
|
22067
22269
|
{ path: 'page.state.schema.<token>.type', category: 'state', valueKind: 'string', description: 'Tipo semantico opcional do path de estado.' },
|
|
22068
22270
|
{ path: 'page.state.schema.<token>.initial', category: 'state', valueKind: 'object', description: 'Valor inicial usado quando page.state.values omite o path.' },
|
|
22069
|
-
{ path: 'page.state.schema.<token>.persist', category: 'state', valueKind: 'boolean', description: 'Indica se o path
|
|
22271
|
+
{ path: 'page.state.schema.<token>.persist', category: 'state', valueKind: 'boolean', description: 'Indica se o path primário deve ser persistido com a página.' },
|
|
22070
22272
|
{ path: 'page.state.schema.<token>.mergeStrategy', category: 'state', valueKind: 'enum', allowedValues: ENUMS.stateMergeStrategy, description: 'Como escritas de widget/estado combinam com o valor atual.' },
|
|
22071
|
-
{ path: 'page.state.schema.<token>.description', category: 'state', valueKind: 'string', description: '
|
|
22273
|
+
{ path: 'page.state.schema.<token>.description', category: 'state', valueKind: 'string', description: 'Descrição opcional do path para builders e catálogos AI.' },
|
|
22072
22274
|
{ path: 'page.state.schema.<token>.tags', category: 'state', valueKind: 'array', description: 'Tags opcionais para busca e governanca do estado.' },
|
|
22073
22275
|
{ path: 'page.state.derived', category: 'state', valueKind: 'object', description: 'Descritores de estado derivado recomputado pelo runtime.' },
|
|
22074
22276
|
{ path: 'page.state.derived.<token>.dependsOn', category: 'state', valueKind: 'array', description: 'Paths de estado que alimentam o valor derivado.' },
|
|
@@ -22077,9 +22279,9 @@ const CAPS = [
|
|
|
22077
22279
|
{ path: 'page.state.derived.<token>.compute.expression', category: 'state', valueKind: 'expression', description: 'Expressao Json Logic para compute.kind=json-logic.' },
|
|
22078
22280
|
{ path: 'page.state.derived.<token>.compute.value', category: 'state', valueKind: 'object', description: 'Valor template para compute.kind=template.' },
|
|
22079
22281
|
{ path: 'page.state.derived.<token>.compute.operator', category: 'state', valueKind: 'string', description: 'Operador para compute.kind=operator.' },
|
|
22080
|
-
{ path: 'page.state.derived.<token>.compute.options', category: 'state', valueKind: 'object', description: '
|
|
22282
|
+
{ path: 'page.state.derived.<token>.compute.options', category: 'state', valueKind: 'object', description: 'Opções do operador ou transformer.' },
|
|
22081
22283
|
{ path: 'page.state.derived.<token>.compute.transformerId', category: 'state', valueKind: 'string', description: 'Identificador do transformer para compute.kind=transformer.' },
|
|
22082
|
-
{ path: 'page.state.derived.<token>.description', category: 'state', valueKind: 'string', description: '
|
|
22284
|
+
{ path: 'page.state.derived.<token>.description', category: 'state', valueKind: 'string', description: 'Descrição opcional do estado derivado.' },
|
|
22083
22285
|
{ path: 'page.state.derived.<token>.cache', category: 'state', valueKind: 'boolean', description: 'Permite cache futuro do valor derivado.' },
|
|
22084
22286
|
{ path: 'page.composition', category: 'connections', valueKind: 'object', description: 'Envelope canonico da composicao persistida.' },
|
|
22085
22287
|
{ path: 'page.composition.version', category: 'connections', valueKind: 'string', description: 'Versao do envelope de composicao.' },
|
|
@@ -22095,7 +22297,7 @@ const CAPS = [
|
|
|
22095
22297
|
{ path: 'page.composition.links[].from.ref.nestedPath[].kind', category: 'connections', valueKind: 'string', description: 'Tipo do segmento nested de origem.' },
|
|
22096
22298
|
{ path: 'page.composition.links[].from.ref.nestedPath[].id', category: 'connections', valueKind: 'string', description: 'Identificador estrutural do segmento nested de origem.' },
|
|
22097
22299
|
{ 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 },
|
|
22098
|
-
{ path: 'page.composition.links[].from.ref.nestedPath[].index', category: 'connections', valueKind: 'number', description: '
|
|
22300
|
+
{ path: 'page.composition.links[].from.ref.nestedPath[].index', category: 'connections', valueKind: 'number', description: 'Índice auxiliar para diagnóstico visual; não use como identidade primária.' },
|
|
22099
22301
|
{ path: 'page.composition.links[].from.ref.nestedPath[].componentType', category: 'connections', valueKind: 'string', description: 'Tipo do componente real do widget filho de origem.' },
|
|
22100
22302
|
{ path: 'page.composition.links[].to', category: 'connections', valueKind: 'object', description: 'Endpoint de destino do link.' },
|
|
22101
22303
|
{ path: 'page.composition.links[].to.kind', category: 'connections', valueKind: 'string', description: 'Tipo do endpoint de destino, como component-port, state ou global-action.' },
|
|
@@ -22110,11 +22312,11 @@ const CAPS = [
|
|
|
22110
22312
|
{ path: 'page.composition.links[].to.ref.nestedPath[].kind', category: 'connections', valueKind: 'string', description: 'Tipo do segmento nested de destino.' },
|
|
22111
22313
|
{ path: 'page.composition.links[].to.ref.nestedPath[].id', category: 'connections', valueKind: 'string', description: 'Identificador estrutural do segmento nested de destino.' },
|
|
22112
22314
|
{ 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 },
|
|
22113
|
-
{ path: 'page.composition.links[].to.ref.nestedPath[].index', category: 'connections', valueKind: 'number', description: '
|
|
22315
|
+
{ path: 'page.composition.links[].to.ref.nestedPath[].index', category: 'connections', valueKind: 'number', description: 'Índice auxiliar para diagnóstico visual; não use como identidade primária.' },
|
|
22114
22316
|
{ path: 'page.composition.links[].to.ref.nestedPath[].componentType', category: 'connections', valueKind: 'string', description: 'Tipo do componente real do widget filho de destino.' },
|
|
22115
|
-
{ path: 'page.composition.links[].intent', category: 'connections', valueKind: 'string', description: '
|
|
22317
|
+
{ path: 'page.composition.links[].intent', category: 'connections', valueKind: 'string', description: 'Intenção semântica do link.' },
|
|
22116
22318
|
{ path: 'page.composition.links[].transform', category: 'connections', valueKind: 'object', description: 'Pipeline de transformacao do link.' },
|
|
22117
|
-
{ path: 'page.composition.links[].condition', category: 'connections', valueKind: 'expression', description: 'Guarda
|
|
22319
|
+
{ path: 'page.composition.links[].condition', category: 'connections', valueKind: 'expression', description: 'Guarda semântica opcional do link, expressa como um único AST Json Logic canônico.' },
|
|
22118
22320
|
{ path: 'page.composition.links[].policy', category: 'connections', valueKind: 'object', description: 'Politicas operacionais opcionais do link, como debounce, distinct e missing-value.' },
|
|
22119
22321
|
{ path: 'page.composition.links[].metadata', category: 'connections', valueKind: 'object', description: 'Metadados opcionais do link.' },
|
|
22120
22322
|
{ path: 'page.grouping', category: 'layout', valueKind: 'array', description: 'Modelo semantico opcional de secoes, abas, areas hero e rails.' },
|
|
@@ -22155,15 +22357,15 @@ const DYNAMIC_PAGE_AI_CAPABILITIES = {
|
|
|
22155
22357
|
enums: ENUMS,
|
|
22156
22358
|
targets: ['praxis-dynamic-page'],
|
|
22157
22359
|
notes: [
|
|
22158
|
-
'Este
|
|
22360
|
+
'Este catálogo é específico para o runtime praxis-dynamic-page; operações de authoring/mutação pertencem ao manifesto do praxis-page-builder.',
|
|
22159
22361
|
'WidgetPageDefinition e o contrato canonico persistido: widgets, composition.links, state, context, layout, canvas, presets, grouping, slotAssignments, deviceLayouts e themePreset.',
|
|
22160
22362
|
'Widgets e page.composition.links sao arrays; ferramentas de patch legadas fazem merge por key estavel e id estavel.',
|
|
22161
|
-
'page.canvas.items
|
|
22162
|
-
'Taxonomia editorial: condition usa Json Logic
|
|
22363
|
+
'page.canvas.items é um mapa por widget key; não modele canvas.items como array.',
|
|
22364
|
+
'Taxonomia editorial: condition usa Json Logic canônico; transform usa pipeline declarativo; não trate ambos como a mesma "expression".',
|
|
22163
22365
|
'Para remocao/replace, use flags {_remove:true} ou {_replace:true} no item.',
|
|
22164
22366
|
'Para renomear um link, inclua {_beforeKey:"link-id-anterior"} no item.',
|
|
22165
|
-
'Inputs de widgets dependem do componente (ex: praxis-table, praxis-dynamic-form). Evite inventar campos; prefira pedir
|
|
22166
|
-
'Quando page.widgets[].definition.id for praxis-rich-content, o host praxis-dynamic-page injeta hostCapabilities em runtime para actions e capability gating;
|
|
22367
|
+
'Inputs de widgets dependem do componente (ex: praxis-table, praxis-dynamic-form). Evite inventar campos; prefira pedir confirmação.',
|
|
22368
|
+
'Quando page.widgets[].definition.id for praxis-rich-content, o host praxis-dynamic-page injeta hostCapabilities em runtime para actions e capability gating; não serialize funções nem tente persistir page.widgets[].definition.inputs.hostCapabilities.',
|
|
22167
22369
|
'Use ids estaveis para links e keys estaveis para widgets.',
|
|
22168
22370
|
'Nested component ports usam endpoint component-port com nestedPath; o owner em ref.widget continua sendo o widget top-level.',
|
|
22169
22371
|
'Objetivo: compor widgets e relacionamentos canonicos (ex.: master-detail).',
|
|
@@ -22192,7 +22394,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22192
22394
|
mode: 'enum',
|
|
22193
22395
|
options: [
|
|
22194
22396
|
{ value: 'fixed', label: 'Linhas fixas' },
|
|
22195
|
-
{ value: 'content', label: '
|
|
22397
|
+
{ value: 'content', label: 'Conteúdo' },
|
|
22196
22398
|
],
|
|
22197
22399
|
},
|
|
22198
22400
|
'page.canvas.collisionPolicy': {
|
|
@@ -22261,7 +22463,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22261
22463
|
'page.widgets[].shell.actions[].variant': {
|
|
22262
22464
|
mode: 'enum',
|
|
22263
22465
|
options: [
|
|
22264
|
-
{ value: 'icon', label: '
|
|
22466
|
+
{ value: 'icon', label: 'Ícone' },
|
|
22265
22467
|
{ value: 'text', label: 'Texto' },
|
|
22266
22468
|
{ value: 'outlined', label: 'Outlined' },
|
|
22267
22469
|
],
|
|
@@ -22291,7 +22493,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22291
22493
|
mode: 'suggested',
|
|
22292
22494
|
options: [
|
|
22293
22495
|
{ value: 'rowClick', label: 'Clique na linha (praxis-table)', example: 'Usar table.rowClick -> form.resourceId via transform pick-path payload.row.id' },
|
|
22294
|
-
{ value: 'rowAction', label: '
|
|
22496
|
+
{ value: 'rowAction', label: 'Ação da linha (praxis-table)' },
|
|
22295
22497
|
{ value: 'formSubmit', label: 'Submit do formulario (praxis-dynamic-form)' },
|
|
22296
22498
|
],
|
|
22297
22499
|
},
|
|
@@ -22305,7 +22507,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22305
22507
|
'page.composition.links[].transform.steps[].config.path': {
|
|
22306
22508
|
mode: 'suggested',
|
|
22307
22509
|
options: [
|
|
22308
|
-
{ value: 'payload.row.id', label: 'ID
|
|
22510
|
+
{ value: 'payload.row.id', label: 'ID padrão do registro', example: 'rowClick -> resourceId' },
|
|
22309
22511
|
],
|
|
22310
22512
|
},
|
|
22311
22513
|
},
|
|
@@ -22617,7 +22819,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22617
22819
|
{ name: 'toInput', type: 'STRING' },
|
|
22618
22820
|
{ name: 'map', type: 'STRING' },
|
|
22619
22821
|
],
|
|
22620
|
-
safetyNotes: 'Use transform pick-path payload.row.id para master-detail
|
|
22822
|
+
safetyNotes: 'Use transform pick-path payload.row.id para master-detail padrão.',
|
|
22621
22823
|
patchTemplate: {
|
|
22622
22824
|
page: {
|
|
22623
22825
|
composition: {
|
|
@@ -22668,7 +22870,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22668
22870
|
{ name: 'fromWidget', type: 'STRING' },
|
|
22669
22871
|
{ name: 'toWidget', type: 'STRING' },
|
|
22670
22872
|
],
|
|
22671
|
-
safetyNotes: '
|
|
22873
|
+
safetyNotes: 'Padrão master-detail: rowClick -> resourceId com transform pick-path payload.row.id.',
|
|
22672
22874
|
patchTemplate: {
|
|
22673
22875
|
page: {
|
|
22674
22876
|
composition: {
|
|
@@ -22711,7 +22913,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22711
22913
|
},
|
|
22712
22914
|
{
|
|
22713
22915
|
id: 'page.template.applyMasterDetail',
|
|
22714
|
-
intentExamples: ['criar
|
|
22916
|
+
intentExamples: ['criar página master detail', 'setup master detail', 'tabela e formulário', 'master-detail'],
|
|
22715
22917
|
operation: 'create',
|
|
22716
22918
|
scope: 'GLOBAL',
|
|
22717
22919
|
valueType: 'OBJECT',
|
|
@@ -22720,7 +22922,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22720
22922
|
{ name: 'formId', type: 'STRING' },
|
|
22721
22923
|
{ name: 'resourcePath', type: 'STRING' },
|
|
22722
22924
|
],
|
|
22723
|
-
safetyNotes: '
|
|
22925
|
+
safetyNotes: 'Padrão master-detail: tabela (rowClick) -> formulario (resourceId) com transform pick-path payload.row.id.',
|
|
22724
22926
|
patchTemplate: {
|
|
22725
22927
|
page: {
|
|
22726
22928
|
widgets: [
|
|
@@ -22796,30 +22998,30 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22796
22998
|
},
|
|
22797
22999
|
hints: [
|
|
22798
23000
|
'praxis-dynamic-page e runtime de composicao: consome WidgetPageDefinition, renderiza widgets e mantem relacoes em page.composition.links.',
|
|
22799
|
-
'
|
|
23001
|
+
'Mutações agentic de página pertencem ao manifesto do praxis-page-builder; use este context pack como descoberta/runtime guidance.',
|
|
22800
23002
|
'WidgetPageDefinition inclui widgets, composition.links, state, context, layout, canvas, layoutPreset, layoutPresetOptions, grouping, slotAssignments, deviceLayouts e themePreset.',
|
|
22801
|
-
'page.canvas.items
|
|
23003
|
+
'page.canvas.items é um mapa por widget key, não um array; cada entrada guarda col, row, colSpan, rowSpan, zIndex e constraints opcionais.',
|
|
22802
23004
|
'Widgets e composition.links sao arrays; o patching deve fazer merge por key (widgets) e por id (links).',
|
|
22803
|
-
'Preferir
|
|
23005
|
+
'Preferir mudanças incrementais: alterar/estender em vez de substituir toda a página.',
|
|
22804
23006
|
'Para remover um item, envie {_remove: true} junto ao widget/link.',
|
|
22805
23007
|
'Para substituir um item inteiro, envie {_replace: true}.',
|
|
22806
23008
|
'Para alterar origem/destino de link, use {_beforeKey} com o id antigo.',
|
|
22807
23009
|
'Use keys estaveis para widgets e ids estaveis para links ao criar composicoes.',
|
|
22808
23010
|
'resourcePath sempre e o path base do recurso (sem /filter, /all).',
|
|
22809
|
-
'Praxis Table gera colunas dinamicamente a partir do resourcePath quando columns
|
|
22810
|
-
'Praxis Dynamic Form gera campos dinamicamente a partir do resourcePath quando config
|
|
22811
|
-
'Quando um widget praxis-rich-content estiver hospedado na
|
|
23011
|
+
'Praxis Table gera colunas dinamicamente a partir do resourcePath quando columns não forem definidas.',
|
|
23012
|
+
'Praxis Dynamic Form gera campos dinamicamente a partir do resourcePath quando config não for definida.',
|
|
23013
|
+
'Quando um widget praxis-rich-content estiver hospedado na página, definition.inputs.document continua sendo o contrato persistido; hostCapabilities é injetado somente em runtime pelo praxis-dynamic-page para actions e capability gating.',
|
|
22812
23014
|
'Praxis List pode filtrar via config.dataSource.query (enviado para /filter).',
|
|
22813
23015
|
'Quando houver recursos secundarios (ex.: enderecos), use contextHints.addressResourcePath.',
|
|
22814
23016
|
'Exemplo master-detail: tabela emite rowClick -> form.resourceId via transform pick-path payload.row.id.',
|
|
22815
23017
|
'Pattern Master-Detail: { "id":"master.rowClick->detail.resourceId", "from":{"kind":"component-port","ref":{"port":"rowClick","direction":"output"}}, "to":{"kind":"component-port","ref":{"port":"resourceId","direction":"input"}}, "transform":{"steps":[{"kind":"pick-path","config":{"path":"payload.row.id"}}]}}',
|
|
22816
23018
|
'Ao criar widgets, use inputs minimos e complemente depois (evite inventar campos).',
|
|
22817
23019
|
'Quando widgets ja existem, interpretar ports de origem/destino antes de conectar.',
|
|
22818
|
-
'
|
|
22819
|
-
'
|
|
23020
|
+
'Intenção comum: criar página master-detail = criar tabela + criar formulário + conectar seleção via composition.links.',
|
|
23021
|
+
'Intenção comum: ajustar página existente = modificar apenas widgets/inputs necessários.',
|
|
22820
23022
|
'Exemplo de link canonico (master-detail): { id:"masterTable.rowClick->detailForm.resourceId", from:{kind:"component-port",ref:{widget:"masterTable",port:"rowClick",direction:"output"}}, to:{kind:"component-port",ref:{widget:"detailForm",port:"resourceId",direction:"input"}}, intent:"event-propagation", transform:{version:"2.0",phase:"link-propagation",mode:"single-value",steps:[{kind:"pick-path",phase:"link-propagation",input:{source:"event"},config:{path:"payload.row.id"}}]}}',
|
|
22821
|
-
'Exemplo de widget tabela (
|
|
22822
|
-
'Exemplo de widget
|
|
23023
|
+
'Exemplo de widget tabela (mínimo): { key:"masterTable", definition:{ id:"praxis-table", inputs:{ resourcePath:"/api/x" }}}',
|
|
23024
|
+
'Exemplo de widget formulário (mínimo): { key:"detailForm", definition:{ id:"praxis-dynamic-form", inputs:{ resourcePath:"/api/x", mode:"view" }}}',
|
|
22823
23025
|
'Se houver idField conhecido, use transform pick-path payload.row.{idField} em links canonicos.',
|
|
22824
23026
|
],
|
|
22825
23027
|
};
|
|
@@ -24947,7 +25149,7 @@ class DynamicWidgetLoaderDirective {
|
|
|
24947
25149
|
'praxis-crud': ['crudId', 'componentInstanceId', 'metadata'],
|
|
24948
25150
|
'praxis-dynamic-form': ['formId', 'componentInstanceId', 'resourcePath'],
|
|
24949
25151
|
'praxis-tabs': ['tabsId', 'componentInstanceId', 'configPersistenceStrategy', 'config'],
|
|
24950
|
-
'praxis-list': ['listId', 'componentInstanceId', 'config'],
|
|
25152
|
+
'praxis-list': ['listId', 'componentInstanceId', 'enableCustomization', 'config'],
|
|
24951
25153
|
'praxis-expansion': ['expansionId', 'componentInstanceId', 'config'],
|
|
24952
25154
|
'praxis-stepper': ['stepperId', 'componentInstanceId', 'config'],
|
|
24953
25155
|
'praxis-files-upload': ['filesUploadId', 'componentInstanceId', 'config'],
|
|
@@ -25307,28 +25509,160 @@ const BUILTIN_SHELL_PRESETS = {
|
|
|
25307
25509
|
},
|
|
25308
25510
|
'light-neutral': {
|
|
25309
25511
|
card: {
|
|
25310
|
-
background: '
|
|
25311
|
-
borderColor: '
|
|
25512
|
+
background: 'var(--md-sys-color-surface)',
|
|
25513
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 82%, transparent)',
|
|
25312
25514
|
borderRadius: '12px',
|
|
25313
|
-
shadow: '0 4px
|
|
25515
|
+
shadow: '0 4px 14px color-mix(in srgb, var(--md-sys-color-shadow, #000) 7%, transparent)',
|
|
25314
25516
|
},
|
|
25315
25517
|
header: {
|
|
25316
|
-
|
|
25317
|
-
|
|
25318
|
-
|
|
25518
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-container-low) 72%, transparent)',
|
|
25519
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 70%, transparent)',
|
|
25520
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
25521
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
25522
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
25523
|
+
},
|
|
25524
|
+
body: {
|
|
25525
|
+
background: 'var(--md-sys-color-surface)',
|
|
25526
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
25319
25527
|
},
|
|
25320
25528
|
},
|
|
25321
25529
|
graphite: {
|
|
25322
25530
|
card: {
|
|
25323
|
-
background: '
|
|
25324
|
-
borderColor: '
|
|
25325
|
-
borderRadius: '
|
|
25326
|
-
shadow: '0
|
|
25531
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface) 94%, var(--md-sys-color-surface-container-high) 6%)',
|
|
25532
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 74%, transparent)',
|
|
25533
|
+
borderRadius: '12px',
|
|
25534
|
+
shadow: '0 8px 22px color-mix(in srgb, var(--md-sys-color-shadow, #000) 11%, transparent)',
|
|
25535
|
+
},
|
|
25536
|
+
header: {
|
|
25537
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-container-low) 76%, transparent)',
|
|
25538
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 62%, transparent)',
|
|
25539
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
25540
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
25541
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
25542
|
+
},
|
|
25543
|
+
body: {
|
|
25544
|
+
background: 'var(--md-sys-color-surface)',
|
|
25545
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
25546
|
+
},
|
|
25547
|
+
},
|
|
25548
|
+
frameless: {
|
|
25549
|
+
card: {
|
|
25550
|
+
background: 'transparent',
|
|
25551
|
+
borderColor: 'transparent',
|
|
25552
|
+
borderRadius: '0',
|
|
25553
|
+
shadow: 'none',
|
|
25554
|
+
},
|
|
25555
|
+
header: {
|
|
25556
|
+
background: 'transparent',
|
|
25557
|
+
borderColor: 'transparent',
|
|
25558
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
25559
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
25560
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
25561
|
+
},
|
|
25562
|
+
body: {
|
|
25563
|
+
background: 'transparent',
|
|
25564
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
25565
|
+
padding: '0',
|
|
25566
|
+
},
|
|
25567
|
+
},
|
|
25568
|
+
'data-panel': {
|
|
25569
|
+
card: {
|
|
25570
|
+
background: 'var(--md-sys-color-surface)',
|
|
25571
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 76%, transparent)',
|
|
25572
|
+
borderRadius: '10px',
|
|
25573
|
+
shadow: '0 5px 16px color-mix(in srgb, var(--md-sys-color-shadow, #000) 7%, transparent)',
|
|
25327
25574
|
},
|
|
25328
25575
|
header: {
|
|
25329
|
-
|
|
25330
|
-
|
|
25331
|
-
|
|
25576
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-container-low) 64%, transparent)',
|
|
25577
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 58%, transparent)',
|
|
25578
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
25579
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
25580
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
25581
|
+
},
|
|
25582
|
+
body: {
|
|
25583
|
+
background: 'var(--md-sys-color-surface)',
|
|
25584
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
25585
|
+
padding: '12px',
|
|
25586
|
+
},
|
|
25587
|
+
},
|
|
25588
|
+
'chart-panel': {
|
|
25589
|
+
card: {
|
|
25590
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface) 92%, var(--md-sys-color-primary-container) 8%)',
|
|
25591
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 22%, var(--md-sys-color-outline-variant) 62%)',
|
|
25592
|
+
borderRadius: '12px',
|
|
25593
|
+
shadow: '0 10px 24px color-mix(in srgb, var(--md-sys-color-shadow, #000) 9%, transparent)',
|
|
25594
|
+
},
|
|
25595
|
+
header: {
|
|
25596
|
+
background: 'color-mix(in srgb, var(--md-sys-color-primary-container) 22%, transparent)',
|
|
25597
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 20%, transparent)',
|
|
25598
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
25599
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
25600
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
25601
|
+
},
|
|
25602
|
+
body: {
|
|
25603
|
+
background: 'transparent',
|
|
25604
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
25605
|
+
padding: '12px',
|
|
25606
|
+
},
|
|
25607
|
+
},
|
|
25608
|
+
'metric-panel': {
|
|
25609
|
+
card: {
|
|
25610
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-container-low) 78%, var(--md-sys-color-primary-container) 22%)',
|
|
25611
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 24%, transparent)',
|
|
25612
|
+
borderRadius: '10px',
|
|
25613
|
+
shadow: '0 8px 18px color-mix(in srgb, var(--md-sys-color-shadow, #000) 8%, transparent)',
|
|
25614
|
+
},
|
|
25615
|
+
header: {
|
|
25616
|
+
background: 'transparent',
|
|
25617
|
+
borderColor: 'transparent',
|
|
25618
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
25619
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
25620
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
25621
|
+
},
|
|
25622
|
+
body: {
|
|
25623
|
+
background: 'transparent',
|
|
25624
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
25625
|
+
padding: '10px 12px',
|
|
25626
|
+
},
|
|
25627
|
+
},
|
|
25628
|
+
'executive-card': {
|
|
25629
|
+
card: {
|
|
25630
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface) 88%, var(--md-sys-color-surface-container-high) 12%)',
|
|
25631
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 28%, var(--md-sys-color-outline-variant) 50%)',
|
|
25632
|
+
borderRadius: '10px',
|
|
25633
|
+
shadow: '0 12px 28px color-mix(in srgb, var(--md-sys-color-shadow, #000) 13%, transparent)',
|
|
25634
|
+
},
|
|
25635
|
+
header: {
|
|
25636
|
+
background: 'color-mix(in srgb, var(--md-sys-color-primary-container) 18%, transparent)',
|
|
25637
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 22%, transparent)',
|
|
25638
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
25639
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
25640
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
25641
|
+
},
|
|
25642
|
+
body: {
|
|
25643
|
+
background: 'transparent',
|
|
25644
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
25645
|
+
padding: '14px',
|
|
25646
|
+
},
|
|
25647
|
+
},
|
|
25648
|
+
'filter-bar': {
|
|
25649
|
+
card: {
|
|
25650
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-container-low) 74%, var(--md-sys-color-secondary-container) 26%)',
|
|
25651
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-secondary) 24%, transparent)',
|
|
25652
|
+
borderRadius: '999px',
|
|
25653
|
+
shadow: '0 6px 18px color-mix(in srgb, var(--md-sys-color-shadow, #000) 7%, transparent)',
|
|
25654
|
+
},
|
|
25655
|
+
header: {
|
|
25656
|
+
background: 'transparent',
|
|
25657
|
+
borderColor: 'transparent',
|
|
25658
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
25659
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
25660
|
+
iconColor: 'var(--md-sys-color-secondary)',
|
|
25661
|
+
},
|
|
25662
|
+
body: {
|
|
25663
|
+
background: 'transparent',
|
|
25664
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
25665
|
+
padding: '10px 14px',
|
|
25332
25666
|
},
|
|
25333
25667
|
},
|
|
25334
25668
|
};
|
|
@@ -25404,6 +25738,11 @@ class WidgetShellComponent {
|
|
|
25404
25738
|
const builtins = this.buildWindowActions(custom);
|
|
25405
25739
|
return [...builtins, ...custom];
|
|
25406
25740
|
}
|
|
25741
|
+
displayActionIcon(action) {
|
|
25742
|
+
return action.pressed === true && action.pressedIcon
|
|
25743
|
+
? action.pressedIcon
|
|
25744
|
+
: action.icon;
|
|
25745
|
+
}
|
|
25407
25746
|
onAction(action, ev) {
|
|
25408
25747
|
ev.stopPropagation();
|
|
25409
25748
|
const handled = this.handleWindowAction(action);
|
|
@@ -25413,6 +25752,7 @@ class WidgetShellComponent {
|
|
|
25413
25752
|
command: action.command,
|
|
25414
25753
|
emit: action.emit,
|
|
25415
25754
|
payload,
|
|
25755
|
+
pressed: action.pressed,
|
|
25416
25756
|
action,
|
|
25417
25757
|
};
|
|
25418
25758
|
this.loader?.dispatchAction(event);
|
|
@@ -25603,14 +25943,16 @@ class WidgetShellComponent {
|
|
|
25603
25943
|
<button
|
|
25604
25944
|
[disabled]="action.disabled"
|
|
25605
25945
|
[matTooltip]="action.tooltip || ''"
|
|
25606
|
-
matTooltipPosition="
|
|
25946
|
+
matTooltipPosition="above"
|
|
25607
25947
|
[ngClass]="action.variant === 'outlined' ? 'pdx-action-outlined' : 'pdx-action-text'"
|
|
25948
|
+
[class.pdx-shell-action--pressed]="action.pressed === true"
|
|
25608
25949
|
mat-button
|
|
25609
25950
|
type="button"
|
|
25951
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
25610
25952
|
(click)="onAction(action, $event)"
|
|
25611
25953
|
>
|
|
25612
|
-
@if (action
|
|
25613
|
-
<mat-icon [praxisIcon]="
|
|
25954
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
25955
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25614
25956
|
}
|
|
25615
25957
|
<span class="pdx-action-label">{{ action.label }}</span>
|
|
25616
25958
|
</button>
|
|
@@ -25620,13 +25962,15 @@ class WidgetShellComponent {
|
|
|
25620
25962
|
mat-icon-button
|
|
25621
25963
|
[disabled]="action.disabled"
|
|
25622
25964
|
[matTooltip]="action.tooltip || action.label || ''"
|
|
25623
|
-
matTooltipPosition="
|
|
25965
|
+
matTooltipPosition="above"
|
|
25624
25966
|
[attr.aria-label]="action.label || action.tooltip || action.id"
|
|
25967
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
25968
|
+
[class.pdx-shell-action--pressed]="action.pressed === true"
|
|
25625
25969
|
type="button"
|
|
25626
25970
|
(click)="onAction(action, $event)"
|
|
25627
25971
|
>
|
|
25628
|
-
@if (action
|
|
25629
|
-
<mat-icon [praxisIcon]="
|
|
25972
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
25973
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25630
25974
|
}
|
|
25631
25975
|
</button>
|
|
25632
25976
|
}
|
|
@@ -25637,7 +25981,7 @@ class WidgetShellComponent {
|
|
|
25637
25981
|
mat-icon-button
|
|
25638
25982
|
type="button"
|
|
25639
25983
|
[matTooltip]="moreActionsLabel()"
|
|
25640
|
-
matTooltipPosition="
|
|
25984
|
+
matTooltipPosition="above"
|
|
25641
25985
|
[attr.aria-label]="moreActionsLabel()"
|
|
25642
25986
|
[matMenuTriggerFor]="overflowMenu"
|
|
25643
25987
|
(click)="$event.stopPropagation()"
|
|
@@ -25653,13 +25997,15 @@ class WidgetShellComponent {
|
|
|
25653
25997
|
mat-icon-button
|
|
25654
25998
|
[disabled]="action.disabled"
|
|
25655
25999
|
[matTooltip]="action.tooltip || action.label || ''"
|
|
25656
|
-
matTooltipPosition="
|
|
26000
|
+
matTooltipPosition="above"
|
|
25657
26001
|
[attr.aria-label]="action.label || action.tooltip || action.id"
|
|
26002
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
26003
|
+
[class.pdx-shell-action--pressed]="action.pressed === true"
|
|
25658
26004
|
type="button"
|
|
25659
26005
|
(click)="onAction(action, $event)"
|
|
25660
26006
|
>
|
|
25661
|
-
@if (action
|
|
25662
|
-
<mat-icon [praxisIcon]="
|
|
26007
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26008
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25663
26009
|
}
|
|
25664
26010
|
</button>
|
|
25665
26011
|
}
|
|
@@ -25670,10 +26016,11 @@ class WidgetShellComponent {
|
|
|
25670
26016
|
@for (action of overflowHeaderActions; track action.id) {
|
|
25671
26017
|
<button
|
|
25672
26018
|
mat-menu-item
|
|
26019
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
25673
26020
|
(click)="onAction(action, $event)"
|
|
25674
26021
|
>
|
|
25675
|
-
@if (action
|
|
25676
|
-
<mat-icon [praxisIcon]="
|
|
26022
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26023
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25677
26024
|
}
|
|
25678
26025
|
<span>{{ action.label || action.id }}</span>
|
|
25679
26026
|
</button>
|
|
@@ -25688,7 +26035,7 @@ class WidgetShellComponent {
|
|
|
25688
26035
|
@if (expanded || fullscreen) {
|
|
25689
26036
|
<div class="pdx-shell-backdrop" (click)="closeOverlay()"></div>
|
|
25690
26037
|
}
|
|
25691
|
-
`, isInline: true, styles: [":host{display:block;height:100%}:host(.pdx-widget-shell-collapsed){height:auto}.pdx-shell{position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));border:1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var(--pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06));overflow:hidden}.pdx-shell-header{display:flex;align-items:center;gap:10px;padding:8px 10px 7px;border-bottom:1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var(--pdx-shell-header-bg, var(--md-sys-color-surface-container))}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);opacity:.75;color:var(--pdx-shell-subtitle-color, currentColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;align-items:center;gap:4px}.pdx-shell-window-actions{margin-left:auto}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 8px 10px 10px 10px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell .pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed{height:auto}.pdx-shell.collapsed .pdx-shell-header{border-bottom-color:transparent}.pdx-shell.body-fill .pdx-shell-body,.pdx-shell.body-scroll .pdx-shell-body,.pdx-shell.expanded .pdx-shell-body,.pdx-shell.fullscreen .pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.collapsed .pdx-shell-body{display:none}.pdx-shell.body-fill .pdx-shell-body{overflow:hidden}.pdx-shell.body-scroll .pdx-shell-body{overflow:auto}.pdx-shell.body-fill .pdx-shell-body>*,.pdx-shell.body-scroll .pdx-shell-body>*,.pdx-shell.expanded .pdx-shell-body>*,.pdx-shell.fullscreen .pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen{position:fixed;inset:0;width:auto;height:auto;transform:none;border-radius:0;z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", 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: MatMenuModule }, { kind: "component", type: i4$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
26038
|
+
`, isInline: true, styles: [":host{display:block;height:100%}:host(.pdx-widget-shell-collapsed){height:auto}.pdx-shell{position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));border:1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var(--pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06));overflow:hidden}.pdx-shell-header{display:flex;align-items:center;gap:10px;padding:8px 10px 7px;border-bottom:1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var(--pdx-shell-header-bg, var(--md-sys-color-surface-container))}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);opacity:.75;color:var(--pdx-shell-subtitle-color, currentColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;align-items:center;gap:4px}.pdx-shell-window-actions{margin-left:auto}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-shell-action--pressed{color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary) 12%,transparent)}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 8px 10px 10px 10px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell .pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed{height:auto}.pdx-shell.collapsed .pdx-shell-header{border-bottom-color:transparent}.pdx-shell.body-fill .pdx-shell-body,.pdx-shell.body-scroll .pdx-shell-body,.pdx-shell.expanded .pdx-shell-body,.pdx-shell.fullscreen .pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.collapsed .pdx-shell-body{display:none}.pdx-shell.body-fill .pdx-shell-body{overflow:hidden}.pdx-shell.body-scroll .pdx-shell-body{overflow:auto}.pdx-shell.body-fill .pdx-shell-body>*,.pdx-shell.body-scroll .pdx-shell-body>*,.pdx-shell.expanded .pdx-shell-body>*,.pdx-shell.fullscreen .pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen{position:fixed;inset:0;width:auto;height:auto;transform:none;border-radius:0;z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", 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: MatMenuModule }, { kind: "component", type: i4$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
25692
26039
|
}
|
|
25693
26040
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: WidgetShellComponent, decorators: [{
|
|
25694
26041
|
type: Component,
|
|
@@ -25747,14 +26094,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
25747
26094
|
<button
|
|
25748
26095
|
[disabled]="action.disabled"
|
|
25749
26096
|
[matTooltip]="action.tooltip || ''"
|
|
25750
|
-
matTooltipPosition="
|
|
26097
|
+
matTooltipPosition="above"
|
|
25751
26098
|
[ngClass]="action.variant === 'outlined' ? 'pdx-action-outlined' : 'pdx-action-text'"
|
|
26099
|
+
[class.pdx-shell-action--pressed]="action.pressed === true"
|
|
25752
26100
|
mat-button
|
|
25753
26101
|
type="button"
|
|
26102
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
25754
26103
|
(click)="onAction(action, $event)"
|
|
25755
26104
|
>
|
|
25756
|
-
@if (action
|
|
25757
|
-
<mat-icon [praxisIcon]="
|
|
26105
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26106
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25758
26107
|
}
|
|
25759
26108
|
<span class="pdx-action-label">{{ action.label }}</span>
|
|
25760
26109
|
</button>
|
|
@@ -25764,13 +26113,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
25764
26113
|
mat-icon-button
|
|
25765
26114
|
[disabled]="action.disabled"
|
|
25766
26115
|
[matTooltip]="action.tooltip || action.label || ''"
|
|
25767
|
-
matTooltipPosition="
|
|
26116
|
+
matTooltipPosition="above"
|
|
25768
26117
|
[attr.aria-label]="action.label || action.tooltip || action.id"
|
|
26118
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
26119
|
+
[class.pdx-shell-action--pressed]="action.pressed === true"
|
|
25769
26120
|
type="button"
|
|
25770
26121
|
(click)="onAction(action, $event)"
|
|
25771
26122
|
>
|
|
25772
|
-
@if (action
|
|
25773
|
-
<mat-icon [praxisIcon]="
|
|
26123
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26124
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25774
26125
|
}
|
|
25775
26126
|
</button>
|
|
25776
26127
|
}
|
|
@@ -25781,7 +26132,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
25781
26132
|
mat-icon-button
|
|
25782
26133
|
type="button"
|
|
25783
26134
|
[matTooltip]="moreActionsLabel()"
|
|
25784
|
-
matTooltipPosition="
|
|
26135
|
+
matTooltipPosition="above"
|
|
25785
26136
|
[attr.aria-label]="moreActionsLabel()"
|
|
25786
26137
|
[matMenuTriggerFor]="overflowMenu"
|
|
25787
26138
|
(click)="$event.stopPropagation()"
|
|
@@ -25797,13 +26148,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
25797
26148
|
mat-icon-button
|
|
25798
26149
|
[disabled]="action.disabled"
|
|
25799
26150
|
[matTooltip]="action.tooltip || action.label || ''"
|
|
25800
|
-
matTooltipPosition="
|
|
26151
|
+
matTooltipPosition="above"
|
|
25801
26152
|
[attr.aria-label]="action.label || action.tooltip || action.id"
|
|
26153
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
26154
|
+
[class.pdx-shell-action--pressed]="action.pressed === true"
|
|
25802
26155
|
type="button"
|
|
25803
26156
|
(click)="onAction(action, $event)"
|
|
25804
26157
|
>
|
|
25805
|
-
@if (action
|
|
25806
|
-
<mat-icon [praxisIcon]="
|
|
26158
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26159
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25807
26160
|
}
|
|
25808
26161
|
</button>
|
|
25809
26162
|
}
|
|
@@ -25814,10 +26167,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
25814
26167
|
@for (action of overflowHeaderActions; track action.id) {
|
|
25815
26168
|
<button
|
|
25816
26169
|
mat-menu-item
|
|
26170
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
25817
26171
|
(click)="onAction(action, $event)"
|
|
25818
26172
|
>
|
|
25819
|
-
@if (action
|
|
25820
|
-
<mat-icon [praxisIcon]="
|
|
26173
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26174
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25821
26175
|
}
|
|
25822
26176
|
<span>{{ action.label || action.id }}</span>
|
|
25823
26177
|
</button>
|
|
@@ -25832,7 +26186,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
25832
26186
|
@if (expanded || fullscreen) {
|
|
25833
26187
|
<div class="pdx-shell-backdrop" (click)="closeOverlay()"></div>
|
|
25834
26188
|
}
|
|
25835
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;height:100%}:host(.pdx-widget-shell-collapsed){height:auto}.pdx-shell{position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));border:1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var(--pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06));overflow:hidden}.pdx-shell-header{display:flex;align-items:center;gap:10px;padding:8px 10px 7px;border-bottom:1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var(--pdx-shell-header-bg, var(--md-sys-color-surface-container))}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);opacity:.75;color:var(--pdx-shell-subtitle-color, currentColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;align-items:center;gap:4px}.pdx-shell-window-actions{margin-left:auto}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 8px 10px 10px 10px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell .pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed{height:auto}.pdx-shell.collapsed .pdx-shell-header{border-bottom-color:transparent}.pdx-shell.body-fill .pdx-shell-body,.pdx-shell.body-scroll .pdx-shell-body,.pdx-shell.expanded .pdx-shell-body,.pdx-shell.fullscreen .pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.collapsed .pdx-shell-body{display:none}.pdx-shell.body-fill .pdx-shell-body{overflow:hidden}.pdx-shell.body-scroll .pdx-shell-body{overflow:auto}.pdx-shell.body-fill .pdx-shell-body>*,.pdx-shell.body-scroll .pdx-shell-body>*,.pdx-shell.expanded .pdx-shell-body>*,.pdx-shell.fullscreen .pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen{position:fixed;inset:0;width:auto;height:auto;transform:none;border-radius:0;z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"] }]
|
|
26189
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;height:100%}:host(.pdx-widget-shell-collapsed){height:auto}.pdx-shell{position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));border:1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var(--pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06));overflow:hidden}.pdx-shell-header{display:flex;align-items:center;gap:10px;padding:8px 10px 7px;border-bottom:1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var(--pdx-shell-header-bg, var(--md-sys-color-surface-container))}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);opacity:.75;color:var(--pdx-shell-subtitle-color, currentColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;align-items:center;gap:4px}.pdx-shell-window-actions{margin-left:auto}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-shell-action--pressed{color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary) 12%,transparent)}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 8px 10px 10px 10px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell .pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed{height:auto}.pdx-shell.collapsed .pdx-shell-header{border-bottom-color:transparent}.pdx-shell.body-fill .pdx-shell-body,.pdx-shell.body-scroll .pdx-shell-body,.pdx-shell.expanded .pdx-shell-body,.pdx-shell.fullscreen .pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.collapsed .pdx-shell-body{display:none}.pdx-shell.body-fill .pdx-shell-body{overflow:hidden}.pdx-shell.body-scroll .pdx-shell-body{overflow:auto}.pdx-shell.body-fill .pdx-shell-body>*,.pdx-shell.body-scroll .pdx-shell-body>*,.pdx-shell.expanded .pdx-shell-body>*,.pdx-shell.fullscreen .pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen{position:fixed;inset:0;width:auto;height:auto;transform:none;border-radius:0;z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"] }]
|
|
25836
26190
|
}], propDecorators: { hostCollapsed: [{
|
|
25837
26191
|
type: HostBinding,
|
|
25838
26192
|
args: ['class.pdx-widget-shell-collapsed']
|
|
@@ -26010,7 +26364,7 @@ const BUILTIN_PAGE_THEME_PRESETS = {
|
|
|
26010
26364
|
id: 'analytics-calm',
|
|
26011
26365
|
label: 'Analytics Calm',
|
|
26012
26366
|
description: 'Superfícies leves, ênfase clara em dados e motion sutil.',
|
|
26013
|
-
shellPreset: '
|
|
26367
|
+
shellPreset: 'chart-panel',
|
|
26014
26368
|
chartThemePreset: 'executive',
|
|
26015
26369
|
density: 'comfortable',
|
|
26016
26370
|
motion: 'subtle',
|
|
@@ -26027,7 +26381,7 @@ const BUILTIN_PAGE_THEME_PRESETS = {
|
|
|
26027
26381
|
id: 'workspace-balanced',
|
|
26028
26382
|
label: 'Workspace Balanced',
|
|
26029
26383
|
description: 'Equilíbrio entre densidade operacional e clareza visual.',
|
|
26030
|
-
shellPreset: '
|
|
26384
|
+
shellPreset: 'data-panel',
|
|
26031
26385
|
chartThemePreset: 'default',
|
|
26032
26386
|
density: 'comfortable',
|
|
26033
26387
|
motion: 'subtle',
|
|
@@ -26044,7 +26398,7 @@ const BUILTIN_PAGE_THEME_PRESETS = {
|
|
|
26044
26398
|
id: 'ops-monitoring',
|
|
26045
26399
|
label: 'Ops Monitoring',
|
|
26046
26400
|
description: 'Contraste um pouco maior para leitura rápida de status, filas e alertas.',
|
|
26047
|
-
shellPreset: '
|
|
26401
|
+
shellPreset: 'data-panel',
|
|
26048
26402
|
chartThemePreset: 'compact',
|
|
26049
26403
|
density: 'compact',
|
|
26050
26404
|
motion: 'subtle',
|
|
@@ -26061,7 +26415,7 @@ const BUILTIN_PAGE_THEME_PRESETS = {
|
|
|
26061
26415
|
id: 'executive-command-center',
|
|
26062
26416
|
label: 'Executive Command Center',
|
|
26063
26417
|
description: 'Superfície premium para dashboards corporativos com hierarquia executiva, dados densos e ações de decisão.',
|
|
26064
|
-
shellPreset: '
|
|
26418
|
+
shellPreset: 'executive-card',
|
|
26065
26419
|
chartThemePreset: 'executive',
|
|
26066
26420
|
density: 'compact',
|
|
26067
26421
|
motion: 'subtle',
|
|
@@ -31033,9 +31387,18 @@ class DynamicWidgetPageComponent {
|
|
|
31033
31387
|
if (!widget.shell) {
|
|
31034
31388
|
return runtimeEnrichedWidget;
|
|
31035
31389
|
}
|
|
31390
|
+
const widgetTemplateContext = {
|
|
31391
|
+
...templateContext,
|
|
31392
|
+
widget: {
|
|
31393
|
+
key: widget.key,
|
|
31394
|
+
definition: this.cloneStateValues(widget.definition),
|
|
31395
|
+
inputs: this.cloneStateValues(widget.definition?.inputs || {}),
|
|
31396
|
+
shell: this.cloneStateValues(widget.shell || {}),
|
|
31397
|
+
},
|
|
31398
|
+
};
|
|
31036
31399
|
return {
|
|
31037
31400
|
...runtimeEnrichedWidget,
|
|
31038
|
-
shell: this.resolveTemplate(widget.shell,
|
|
31401
|
+
shell: this.resolveTemplate(widget.shell, widgetTemplateContext),
|
|
31039
31402
|
};
|
|
31040
31403
|
});
|
|
31041
31404
|
}
|
|
@@ -31412,6 +31775,8 @@ class DynamicWidgetPageComponent {
|
|
|
31412
31775
|
void this.confirmAndRemoveWidget(fromKey);
|
|
31413
31776
|
return;
|
|
31414
31777
|
}
|
|
31778
|
+
if (this.handleToggleInputCommand(fromKey, evt))
|
|
31779
|
+
return;
|
|
31415
31780
|
if (this.handleSetInputCommand(fromKey, evt))
|
|
31416
31781
|
return;
|
|
31417
31782
|
const output = evt?.emit || (evt?.id ? `shell:${evt.id}` : undefined);
|
|
@@ -31436,6 +31801,32 @@ class DynamicWidgetPageComponent {
|
|
|
31436
31801
|
this.widgets.set(widgets);
|
|
31437
31802
|
return true;
|
|
31438
31803
|
}
|
|
31804
|
+
handleToggleInputCommand(fromKey, evt) {
|
|
31805
|
+
if (evt?.command !== 'pdx:toggle-input')
|
|
31806
|
+
return false;
|
|
31807
|
+
const payload = evt?.payload;
|
|
31808
|
+
const input = typeof payload?.input === 'string' ? payload.input.trim() : '';
|
|
31809
|
+
if (!input)
|
|
31810
|
+
return true;
|
|
31811
|
+
const page = this.ensurePageDefinition();
|
|
31812
|
+
const widget = (page.widgets || []).find((candidate) => candidate.key === fromKey);
|
|
31813
|
+
const currentValue = this.lookup(widget?.definition?.inputs || {}, input);
|
|
31814
|
+
const nextValue = !Boolean(currentValue);
|
|
31815
|
+
const result = this.applyWidgetInputPatchToPage(page, fromKey, {
|
|
31816
|
+
ownerWidgetKey: fromKey,
|
|
31817
|
+
sourceComponentId: 'widget-shell',
|
|
31818
|
+
output: evt.emit || `shell:${evt.id}`,
|
|
31819
|
+
payload: {
|
|
31820
|
+
inputPatch: {
|
|
31821
|
+
[input]: nextValue,
|
|
31822
|
+
},
|
|
31823
|
+
},
|
|
31824
|
+
});
|
|
31825
|
+
if (result.changed) {
|
|
31826
|
+
this.applyPageUpdate(result.page, true, undefined, false, true);
|
|
31827
|
+
}
|
|
31828
|
+
return true;
|
|
31829
|
+
}
|
|
31439
31830
|
mergeOrder(keys) {
|
|
31440
31831
|
const seen = new Set();
|
|
31441
31832
|
const out = [];
|
|
@@ -33974,24 +34365,24 @@ const PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA = {
|
|
|
33974
34365
|
selector: 'praxis-dynamic-page',
|
|
33975
34366
|
component: DynamicWidgetPageComponent,
|
|
33976
34367
|
friendlyName: 'Dynamic Page',
|
|
33977
|
-
description: '
|
|
34368
|
+
description: 'Página dinâmica com widgets e composition.links em layout responsivo, incluindo mediação runtime para rich-content hospedado.',
|
|
33978
34369
|
icon: 'dashboard',
|
|
33979
34370
|
inputs: [
|
|
33980
|
-
{ name: 'page', type: 'WidgetPageDefinition', description: '
|
|
34371
|
+
{ name: 'page', type: 'WidgetPageDefinition', description: 'Definição da página (widgets, layout e composition.links).' },
|
|
33981
34372
|
{ name: 'context', type: 'Record<string, any>', description: 'Contexto adicional compartilhado entre widgets.' },
|
|
33982
|
-
{ name: 'strictValidation', type: 'boolean', description: 'Habilita
|
|
33983
|
-
{ name: 'enableCustomization', type: 'boolean', description: 'Habilita affordances de
|
|
33984
|
-
{ name: 'showPageSettingsButton', type: 'boolean', description: 'Exibe
|
|
34373
|
+
{ name: 'strictValidation', type: 'boolean', description: 'Habilita validação estrita de inputs.' },
|
|
34374
|
+
{ name: 'enableCustomization', type: 'boolean', description: 'Habilita affordances de edição na página.' },
|
|
34375
|
+
{ name: 'showPageSettingsButton', type: 'boolean', description: 'Exibe botão de configuração da página.' },
|
|
33985
34376
|
{ name: 'shellEditorComponent', type: 'Type<any>', description: 'Override do editor de shell dos widgets.' },
|
|
33986
|
-
{ name: 'pageEditorComponent', type: 'Type<any>', description: 'Override do editor de
|
|
33987
|
-
{ name: 'autoPersist', type: 'boolean', description: 'Ativa
|
|
33988
|
-
{ name: 'pageIdentity', type: 'PageIdentity', description: 'Identidade de
|
|
33989
|
-
{ name: 'componentInstanceId', type: 'string', description: 'Identificador opcional para
|
|
34377
|
+
{ name: 'pageEditorComponent', type: 'Type<any>', description: 'Override do editor de configuração da página.' },
|
|
34378
|
+
{ name: 'autoPersist', type: 'boolean', description: 'Ativa persistência automática (load/save) da página.' },
|
|
34379
|
+
{ name: 'pageIdentity', type: 'PageIdentity', description: 'Identidade de persistência (tenant/usuário/rota/locale).' },
|
|
34380
|
+
{ name: 'componentInstanceId', type: 'string', description: 'Identificador opcional para múltiplas instâncias na mesma rota.' },
|
|
33990
34381
|
],
|
|
33991
34382
|
outputs: [
|
|
33992
|
-
{ name: 'pageChange', type: 'WidgetPageDefinition', description: 'Emitido ao alterar a
|
|
33993
|
-
{ name: 'widgetEvent', type: 'WidgetEventEnvelope', description: 'Reemite eventos dos widgets filhos com ownerWidgetKey para
|
|
33994
|
-
{ name: 'widgetDiagnosticsChange', type: 'Record<string, WidgetResolutionDiagnostic>', description: 'Emitido quando o runtime detecta widgets resolvidos ou falhos durante o carregamento
|
|
34383
|
+
{ name: 'pageChange', type: 'WidgetPageDefinition', description: 'Emitido ao alterar a definição da página.' },
|
|
34384
|
+
{ name: 'widgetEvent', type: 'WidgetEventEnvelope', description: 'Reemite eventos dos widgets filhos com ownerWidgetKey para integrações do host.' },
|
|
34385
|
+
{ name: 'widgetDiagnosticsChange', type: 'Record<string, WidgetResolutionDiagnostic>', description: 'Emitido quando o runtime detecta widgets resolvidos ou falhos durante o carregamento dinâmico.' },
|
|
33995
34386
|
],
|
|
33996
34387
|
tags: ['widget', 'page', 'dynamic', 'layout'],
|
|
33997
34388
|
lib: '@praxisui/core',
|
|
@@ -35244,15 +35635,9 @@ function applyLocalCustomizations$1(base, local) {
|
|
|
35244
35635
|
// Server authority on identity/core props
|
|
35245
35636
|
const authoritative = {
|
|
35246
35637
|
name: base.name,
|
|
35247
|
-
label: base.label,
|
|
35248
35638
|
type: base.type,
|
|
35249
35639
|
controlType: base.controlType,
|
|
35250
35640
|
required: base.required,
|
|
35251
|
-
hint: base.hint,
|
|
35252
|
-
helpText: base.helpText,
|
|
35253
|
-
description: base.description,
|
|
35254
|
-
icon: base.icon,
|
|
35255
|
-
iconPosition: base.iconPosition,
|
|
35256
35641
|
endpoint: base.endpoint,
|
|
35257
35642
|
resourcePath: base.resourcePath,
|
|
35258
35643
|
optionSource: base.optionSource,
|
|
@@ -35288,12 +35673,13 @@ function applyLocalCustomizations$1(base, local) {
|
|
|
35288
35673
|
? serverBackedLocal.queryParams
|
|
35289
35674
|
: base.queryParams,
|
|
35290
35675
|
};
|
|
35291
|
-
|
|
35676
|
+
const merged = {
|
|
35292
35677
|
...base,
|
|
35293
35678
|
...serverBackedLocal,
|
|
35294
35679
|
...authoritative,
|
|
35295
35680
|
...preserved,
|
|
35296
35681
|
};
|
|
35682
|
+
return applyServerOwnedFieldSemantics(merged, base);
|
|
35297
35683
|
}
|
|
35298
35684
|
function mergeServerVisibilityFlag(serverValue) {
|
|
35299
35685
|
return serverValue === true ? true : undefined;
|
|
@@ -35758,4 +36144,4 @@ function provideHookWhitelist(allowed) {
|
|
|
35758
36144
|
* Generated bundle index. Do not edit.
|
|
35759
36145
|
*/
|
|
35760
36146
|
|
|
35761
|
-
export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, AnalyticsPresentationResolver, AnalyticsSchemaContractService, AnalyticsStatsRequestBuilderService, ApiConfigStorage, ApiEndpoint, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, BUILTIN_SHELL_PRESETS, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_TABLE_CONFIG, DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK, DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DomainCatalogService, DomainKnowledgeService, DomainRuleService, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, EmptyStateCardComponent, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_QUERY_FILTER_EXPRESSION_SCHEMA_VERSION, 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, 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, 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, isPraxisRuntimeGlobalActionEffect, 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$1 as normalizeGlobalActionRef, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, 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, 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, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveValuePresentation, resolveValuePresentationLocale, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToJson, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withMessage, withPraxisHttpLoading };
|
|
36147
|
+
export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, AnalyticsPresentationResolver, AnalyticsSchemaContractService, AnalyticsStatsRequestBuilderService, ApiConfigStorage, ApiEndpoint, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, BUILTIN_SHELL_PRESETS, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_TABLE_CONFIG, DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK, DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DomainCatalogService, DomainKnowledgeService, DomainRuleService, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, EmptyStateCardComponent, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_QUERY_FILTER_EXPRESSION_SCHEMA_VERSION, 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, 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, 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, isPraxisRuntimeGlobalActionEffect, 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$1 as normalizeGlobalActionRef, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, 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, 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, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, 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, withMessage, withPraxisHttpLoading };
|