@praxisui/core 9.0.0-beta.2 → 9.0.0-beta.21
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 +1005 -205
- package/package.json +7 -10
- package/types/praxisui-core.d.ts +202 -7
|
@@ -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
|
}
|
|
@@ -16016,6 +16145,278 @@ const FieldDataType = {
|
|
|
16016
16145
|
* - Angular Material 3 native support
|
|
16017
16146
|
*/
|
|
16018
16147
|
|
|
16148
|
+
const VISUALIZATION_KINDS = new Set([
|
|
16149
|
+
'line',
|
|
16150
|
+
'area',
|
|
16151
|
+
'column',
|
|
16152
|
+
'comparison',
|
|
16153
|
+
'stackedBar',
|
|
16154
|
+
'radial',
|
|
16155
|
+
'harveyBall',
|
|
16156
|
+
'bullet',
|
|
16157
|
+
'delta',
|
|
16158
|
+
'processFlow',
|
|
16159
|
+
]);
|
|
16160
|
+
const VISUALIZATION_SURFACES = new Set([
|
|
16161
|
+
'table-cell',
|
|
16162
|
+
'list-item',
|
|
16163
|
+
'object-header',
|
|
16164
|
+
'card-summary',
|
|
16165
|
+
'form-presentation',
|
|
16166
|
+
]);
|
|
16167
|
+
const VISUALIZATION_SIZES = new Set([
|
|
16168
|
+
'xs',
|
|
16169
|
+
'sm',
|
|
16170
|
+
'md',
|
|
16171
|
+
'lg',
|
|
16172
|
+
'responsive',
|
|
16173
|
+
]);
|
|
16174
|
+
const VISUALIZATION_TONES = new Set([
|
|
16175
|
+
'neutral',
|
|
16176
|
+
'info',
|
|
16177
|
+
'success',
|
|
16178
|
+
'warning',
|
|
16179
|
+
'danger',
|
|
16180
|
+
'critical',
|
|
16181
|
+
]);
|
|
16182
|
+
const TABLE_SAFE_KINDS = new Set([
|
|
16183
|
+
'comparison',
|
|
16184
|
+
'stackedBar',
|
|
16185
|
+
'bullet',
|
|
16186
|
+
'delta',
|
|
16187
|
+
]);
|
|
16188
|
+
function normalizePraxisPresentationVisualization(value) {
|
|
16189
|
+
if (!value || typeof value !== 'object') {
|
|
16190
|
+
return undefined;
|
|
16191
|
+
}
|
|
16192
|
+
const kind = normalizeEnum$1(value.kind, VISUALIZATION_KINDS);
|
|
16193
|
+
const fallbackText = normalizeText$1(value.fallbackText);
|
|
16194
|
+
if (!kind || !fallbackText) {
|
|
16195
|
+
return undefined;
|
|
16196
|
+
}
|
|
16197
|
+
const surface = normalizeEnum$1(value.surface, VISUALIZATION_SURFACES);
|
|
16198
|
+
const size = normalizeEnum$1(value.size, VISUALIZATION_SIZES);
|
|
16199
|
+
const tone = normalizeEnum$1(value.tone, VISUALIZATION_TONES);
|
|
16200
|
+
const ariaLabel = normalizeText$1(value.ariaLabel);
|
|
16201
|
+
return {
|
|
16202
|
+
kind,
|
|
16203
|
+
fallbackText,
|
|
16204
|
+
...(surface ? { surface } : {}),
|
|
16205
|
+
...(size ? { size } : {}),
|
|
16206
|
+
...(tone ? { tone } : {}),
|
|
16207
|
+
...(ariaLabel ? { ariaLabel } : {}),
|
|
16208
|
+
...(Object.prototype.hasOwnProperty.call(value, 'value') ? { value: value.value } : {}),
|
|
16209
|
+
...(normalizeNumber(value.total, 'total') ?? {}),
|
|
16210
|
+
...(normalizeNumber(value.target, 'target') ?? {}),
|
|
16211
|
+
...(normalizeNumber(value.baseline, 'baseline') ?? {}),
|
|
16212
|
+
...(normalizePoints(value.points) ?? {}),
|
|
16213
|
+
...(normalizeSegments(value.segments) ?? {}),
|
|
16214
|
+
...(normalizeThresholds(value.thresholds) ?? {}),
|
|
16215
|
+
...(normalizeItems(value.items) ?? {}),
|
|
16216
|
+
};
|
|
16217
|
+
}
|
|
16218
|
+
function isPraxisPresentationVisualizationTableSafe(value) {
|
|
16219
|
+
const normalized = normalizePraxisPresentationVisualization(value);
|
|
16220
|
+
return !!normalized && TABLE_SAFE_KINDS.has(normalized.kind);
|
|
16221
|
+
}
|
|
16222
|
+
function normalizePoints(value) {
|
|
16223
|
+
const points = normalizeNumericEntries(value);
|
|
16224
|
+
return points.length ? { points } : undefined;
|
|
16225
|
+
}
|
|
16226
|
+
function normalizeSegments(value) {
|
|
16227
|
+
const segments = normalizeNumericEntries(value);
|
|
16228
|
+
return segments.length ? { segments } : undefined;
|
|
16229
|
+
}
|
|
16230
|
+
function normalizeThresholds(value) {
|
|
16231
|
+
const thresholds = normalizeNumericEntries(value);
|
|
16232
|
+
return thresholds.length ? { thresholds } : undefined;
|
|
16233
|
+
}
|
|
16234
|
+
function normalizeItems(value) {
|
|
16235
|
+
if (!Array.isArray(value)) {
|
|
16236
|
+
return undefined;
|
|
16237
|
+
}
|
|
16238
|
+
const items = value
|
|
16239
|
+
.map((item) => normalizeVisualizationItem(item))
|
|
16240
|
+
.filter((item) => !!item);
|
|
16241
|
+
return items.length ? { items } : undefined;
|
|
16242
|
+
}
|
|
16243
|
+
function normalizeNumericEntries(value) {
|
|
16244
|
+
if (!Array.isArray(value)) {
|
|
16245
|
+
return [];
|
|
16246
|
+
}
|
|
16247
|
+
return value
|
|
16248
|
+
.map((item) => {
|
|
16249
|
+
if (!item || typeof item !== 'object' || !Number.isFinite(item.value)) {
|
|
16250
|
+
return null;
|
|
16251
|
+
}
|
|
16252
|
+
const label = normalizeText$1(item.label);
|
|
16253
|
+
const tone = normalizeEnum$1(item.tone, VISUALIZATION_TONES);
|
|
16254
|
+
return {
|
|
16255
|
+
value: item.value,
|
|
16256
|
+
...(label ? { label } : {}),
|
|
16257
|
+
...(tone ? { tone } : {}),
|
|
16258
|
+
};
|
|
16259
|
+
})
|
|
16260
|
+
.filter((item) => !!item);
|
|
16261
|
+
}
|
|
16262
|
+
function normalizeVisualizationItem(item) {
|
|
16263
|
+
if (!item || typeof item !== 'object') {
|
|
16264
|
+
return null;
|
|
16265
|
+
}
|
|
16266
|
+
const id = normalizeText$1(item.id);
|
|
16267
|
+
const label = normalizeText$1(item.label);
|
|
16268
|
+
const icon = normalizeText$1(item.icon);
|
|
16269
|
+
const state = normalizeText$1(item.state);
|
|
16270
|
+
const tone = normalizeEnum$1(item.tone, VISUALIZATION_TONES);
|
|
16271
|
+
const normalizedValue = Number.isFinite(item.value) ? item.value : undefined;
|
|
16272
|
+
if (!id && !label && normalizedValue === undefined && !icon && !state && !tone) {
|
|
16273
|
+
return null;
|
|
16274
|
+
}
|
|
16275
|
+
return {
|
|
16276
|
+
...(id ? { id } : {}),
|
|
16277
|
+
...(label ? { label } : {}),
|
|
16278
|
+
...(normalizedValue !== undefined ? { value: normalizedValue } : {}),
|
|
16279
|
+
...(icon ? { icon } : {}),
|
|
16280
|
+
...(state ? { state } : {}),
|
|
16281
|
+
...(tone ? { tone } : {}),
|
|
16282
|
+
};
|
|
16283
|
+
}
|
|
16284
|
+
function normalizeNumber(value, key) {
|
|
16285
|
+
return Number.isFinite(value) ? { [key]: value } : undefined;
|
|
16286
|
+
}
|
|
16287
|
+
function normalizeEnum$1(value, allowed) {
|
|
16288
|
+
if (typeof value !== 'string') {
|
|
16289
|
+
return undefined;
|
|
16290
|
+
}
|
|
16291
|
+
const normalized = value.trim();
|
|
16292
|
+
return allowed.has(normalized) ? normalized : undefined;
|
|
16293
|
+
}
|
|
16294
|
+
function normalizeText$1(value) {
|
|
16295
|
+
if (typeof value !== 'string') {
|
|
16296
|
+
return undefined;
|
|
16297
|
+
}
|
|
16298
|
+
const trimmed = value.trim();
|
|
16299
|
+
return trimmed.length ? trimmed : undefined;
|
|
16300
|
+
}
|
|
16301
|
+
|
|
16302
|
+
const TONES = new Set([
|
|
16303
|
+
'neutral',
|
|
16304
|
+
'info',
|
|
16305
|
+
'success',
|
|
16306
|
+
'warning',
|
|
16307
|
+
'danger',
|
|
16308
|
+
]);
|
|
16309
|
+
const APPEARANCES = new Set([
|
|
16310
|
+
'plain',
|
|
16311
|
+
'soft',
|
|
16312
|
+
'outlined',
|
|
16313
|
+
'filled',
|
|
16314
|
+
]);
|
|
16315
|
+
const PRESENTERS = new Set([
|
|
16316
|
+
'text',
|
|
16317
|
+
'badge',
|
|
16318
|
+
'chip',
|
|
16319
|
+
'status',
|
|
16320
|
+
'iconValue',
|
|
16321
|
+
'progress',
|
|
16322
|
+
'rating',
|
|
16323
|
+
'microVisualization',
|
|
16324
|
+
]);
|
|
16325
|
+
/**
|
|
16326
|
+
* Resolves readonly field presentation from a base semantic config plus ordered
|
|
16327
|
+
* Json Logic rules. Later matching rules override earlier presentation values.
|
|
16328
|
+
*/
|
|
16329
|
+
function resolveFieldPresentation(base, rules, context = {}, options = {}) {
|
|
16330
|
+
let resolved = normalizeFieldPresentation(base);
|
|
16331
|
+
let matchedRule = false;
|
|
16332
|
+
if (!Array.isArray(rules) || !options.jsonLogic) {
|
|
16333
|
+
return resolved;
|
|
16334
|
+
}
|
|
16335
|
+
for (const rule of rules) {
|
|
16336
|
+
if (!rule?.when || !matchesPresentationRule(rule, context, options.jsonLogic)) {
|
|
16337
|
+
continue;
|
|
16338
|
+
}
|
|
16339
|
+
const effect = normalizeFieldPresentation(rule.set ?? rule.effect);
|
|
16340
|
+
resolved = {
|
|
16341
|
+
...resolved,
|
|
16342
|
+
...effect,
|
|
16343
|
+
};
|
|
16344
|
+
matchedRule = true;
|
|
16345
|
+
}
|
|
16346
|
+
return matchedRule ? { ...resolved, matchedRule } : resolved;
|
|
16347
|
+
}
|
|
16348
|
+
function normalizeFieldPresentation(value) {
|
|
16349
|
+
if (!value || typeof value !== 'object') {
|
|
16350
|
+
return {};
|
|
16351
|
+
}
|
|
16352
|
+
const presenter = normalizePresenter(value.presenter ?? value.variant);
|
|
16353
|
+
const tone = normalizeTone(value.tone);
|
|
16354
|
+
const appearance = normalizeAppearance(value.appearance);
|
|
16355
|
+
const icon = normalizeText(value.icon);
|
|
16356
|
+
const label = normalizeText(value.label);
|
|
16357
|
+
const badge = normalizeText(value.badge);
|
|
16358
|
+
const tooltip = normalizeText(value.tooltip);
|
|
16359
|
+
const visualization = normalizePraxisPresentationVisualization(value.visualization);
|
|
16360
|
+
return {
|
|
16361
|
+
...(presenter ? { presenter } : {}),
|
|
16362
|
+
...(tone ? { tone } : {}),
|
|
16363
|
+
...(appearance ? { appearance } : {}),
|
|
16364
|
+
...(icon ? { icon } : {}),
|
|
16365
|
+
...(label ? { label } : {}),
|
|
16366
|
+
...(badge ? { badge } : {}),
|
|
16367
|
+
...(tooltip ? { tooltip } : {}),
|
|
16368
|
+
...(value.valuePresentation && typeof value.valuePresentation === 'object'
|
|
16369
|
+
? { valuePresentation: value.valuePresentation }
|
|
16370
|
+
: {}),
|
|
16371
|
+
...(visualization ? { visualization } : {}),
|
|
16372
|
+
...(value.interactions && typeof value.interactions === 'object'
|
|
16373
|
+
? { interactions: normalizeInteractions(value.interactions) }
|
|
16374
|
+
: {}),
|
|
16375
|
+
};
|
|
16376
|
+
}
|
|
16377
|
+
function matchesPresentationRule(rule, context, jsonLogic) {
|
|
16378
|
+
try {
|
|
16379
|
+
const result = jsonLogic.evaluate(rule.when, context);
|
|
16380
|
+
return typeof jsonLogic.truthy === 'function'
|
|
16381
|
+
? jsonLogic.truthy(result)
|
|
16382
|
+
: Boolean(result);
|
|
16383
|
+
}
|
|
16384
|
+
catch {
|
|
16385
|
+
return false;
|
|
16386
|
+
}
|
|
16387
|
+
}
|
|
16388
|
+
function normalizePresenter(value) {
|
|
16389
|
+
return normalizeEnum(value, PRESENTERS);
|
|
16390
|
+
}
|
|
16391
|
+
function normalizeTone(value) {
|
|
16392
|
+
return normalizeEnum(value, TONES);
|
|
16393
|
+
}
|
|
16394
|
+
function normalizeAppearance(value) {
|
|
16395
|
+
return normalizeEnum(value, APPEARANCES);
|
|
16396
|
+
}
|
|
16397
|
+
function normalizeEnum(value, allowed) {
|
|
16398
|
+
if (typeof value !== 'string') {
|
|
16399
|
+
return undefined;
|
|
16400
|
+
}
|
|
16401
|
+
const normalized = value.trim();
|
|
16402
|
+
return allowed.has(normalized) ? normalized : undefined;
|
|
16403
|
+
}
|
|
16404
|
+
function normalizeText(value) {
|
|
16405
|
+
if (typeof value !== 'string') {
|
|
16406
|
+
return undefined;
|
|
16407
|
+
}
|
|
16408
|
+
const trimmed = value.trim();
|
|
16409
|
+
return trimmed.length ? trimmed : undefined;
|
|
16410
|
+
}
|
|
16411
|
+
function normalizeInteractions(value) {
|
|
16412
|
+
return {
|
|
16413
|
+
...(value.copy === true ? { copy: true } : {}),
|
|
16414
|
+
...(value.details === true ? { details: true } : {}),
|
|
16415
|
+
...(value.expand === true ? { expand: true } : {}),
|
|
16416
|
+
...(value.link === true ? { link: true } : {}),
|
|
16417
|
+
};
|
|
16418
|
+
}
|
|
16419
|
+
|
|
16019
16420
|
/**
|
|
16020
16421
|
* @fileoverview Specialized metadata interfaces for Angular Material components
|
|
16021
16422
|
*
|
|
@@ -16392,6 +16793,37 @@ function normalizeSelectLike(meta) {
|
|
|
16392
16793
|
return m;
|
|
16393
16794
|
}
|
|
16394
16795
|
|
|
16796
|
+
const SERVER_OWNED_FIELD_SEMANTIC_KEYS = [
|
|
16797
|
+
'label',
|
|
16798
|
+
'hint',
|
|
16799
|
+
'helpText',
|
|
16800
|
+
'description',
|
|
16801
|
+
'tooltip',
|
|
16802
|
+
'tooltipOnHover',
|
|
16803
|
+
'icon',
|
|
16804
|
+
'prefixIcon',
|
|
16805
|
+
'suffixIcon',
|
|
16806
|
+
'iconPosition',
|
|
16807
|
+
'iconSize',
|
|
16808
|
+
'iconColor',
|
|
16809
|
+
'iconClass',
|
|
16810
|
+
'iconStyle',
|
|
16811
|
+
'iconFontSize',
|
|
16812
|
+
];
|
|
16813
|
+
function applyServerOwnedFieldSemantics(merged, serverField) {
|
|
16814
|
+
const next = { ...merged };
|
|
16815
|
+
const server = serverField;
|
|
16816
|
+
for (const key of SERVER_OWNED_FIELD_SEMANTIC_KEYS) {
|
|
16817
|
+
if (server[key] === undefined) {
|
|
16818
|
+
delete next[key];
|
|
16819
|
+
}
|
|
16820
|
+
else {
|
|
16821
|
+
next[key] = server[key];
|
|
16822
|
+
}
|
|
16823
|
+
}
|
|
16824
|
+
return next;
|
|
16825
|
+
}
|
|
16826
|
+
|
|
16395
16827
|
function createDefaultFormConfig() {
|
|
16396
16828
|
const config = {
|
|
16397
16829
|
sections: [
|
|
@@ -16554,7 +16986,7 @@ function syncWithServerMetadata(localConfig, serverMetadata) {
|
|
|
16554
16986
|
toggleOptions: pick('toggleOptions'),
|
|
16555
16987
|
nodes: pick('nodes'),
|
|
16556
16988
|
};
|
|
16557
|
-
mergedOverlapping.push(merged);
|
|
16989
|
+
mergedOverlapping.push(applyServerOwnedFieldSemantics(merged, serverField));
|
|
16558
16990
|
// Track simple modifications for diagnostics
|
|
16559
16991
|
['label', 'required', 'maxLength', 'minLength', 'dataType', 'controlType'].forEach((prop) => {
|
|
16560
16992
|
if (loc[prop] !== base[prop]) {
|
|
@@ -16894,7 +17326,7 @@ const EVENT_REGISTRATION_EDITORIAL_TEMPLATE = {
|
|
|
16894
17326
|
content: [
|
|
16895
17327
|
{
|
|
16896
17328
|
type: 'text',
|
|
16897
|
-
text: 'Ao enviar a
|
|
17329
|
+
text: 'Ao enviar a inscrição, o participante reconhece o tratamento dos dados para credenciamento, comunicações e operação do evento.',
|
|
16898
17330
|
},
|
|
16899
17331
|
],
|
|
16900
17332
|
}),
|
|
@@ -17035,7 +17467,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17035
17467
|
wrap: true,
|
|
17036
17468
|
items: [
|
|
17037
17469
|
{ type: 'badge', label: 'onboarding' },
|
|
17038
|
-
{ type: 'text', text: '
|
|
17470
|
+
{ type: 'text', text: 'Admissão, conferência e preferências iniciais' },
|
|
17039
17471
|
],
|
|
17040
17472
|
},
|
|
17041
17473
|
}, {
|
|
@@ -17044,7 +17476,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17044
17476
|
subtitle: 'Resumo do fluxo',
|
|
17045
17477
|
content: [
|
|
17046
17478
|
{ type: 'text', text: 'Dados pessoais e de contato.' },
|
|
17047
|
-
{ type: 'text', text: '
|
|
17479
|
+
{ type: 'text', text: 'Preferências operacionais iniciais.' },
|
|
17048
17480
|
{ type: 'text', text: 'Anexos e termos obrigatorios.' },
|
|
17049
17481
|
],
|
|
17050
17482
|
}),
|
|
@@ -17076,7 +17508,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17076
17508
|
id: 'operations',
|
|
17077
17509
|
appearance: 'step',
|
|
17078
17510
|
stepLabel: '2',
|
|
17079
|
-
title: '
|
|
17511
|
+
title: 'Operação inicial',
|
|
17080
17512
|
description: 'Dados para preparacao do ambiente e comunicacao inicial.',
|
|
17081
17513
|
rows: [
|
|
17082
17514
|
{
|
|
@@ -17102,7 +17534,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17102
17534
|
title: 'Uso interno',
|
|
17103
17535
|
subtitle: 'Antes do envio',
|
|
17104
17536
|
badge: 'info',
|
|
17105
|
-
description: 'As
|
|
17537
|
+
description: 'As informações deste fluxo são usadas exclusivamente para cadastro interno, provisionamento e comunicação de onboarding.',
|
|
17106
17538
|
}),
|
|
17107
17539
|
formBlocksBeforeActionsPlacement: 'afterSections',
|
|
17108
17540
|
actions: {
|
|
@@ -17151,7 +17583,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17151
17583
|
required: true,
|
|
17152
17584
|
options: [
|
|
17153
17585
|
{ text: 'Presencial', value: 'ONSITE' },
|
|
17154
|
-
{ text: '
|
|
17586
|
+
{ text: 'Híbrido', value: 'HYBRID' },
|
|
17155
17587
|
{ text: 'Remoto', value: 'REMOTE' },
|
|
17156
17588
|
],
|
|
17157
17589
|
},
|
|
@@ -17162,22 +17594,22 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17162
17594
|
required: true,
|
|
17163
17595
|
options: [
|
|
17164
17596
|
{ text: 'Sim', value: 'YES' },
|
|
17165
|
-
{ text: '
|
|
17597
|
+
{ text: 'Não', value: 'NO' },
|
|
17166
17598
|
],
|
|
17167
17599
|
},
|
|
17168
17600
|
{
|
|
17169
17601
|
name: 'shippingAddress',
|
|
17170
|
-
label: '
|
|
17602
|
+
label: 'Endereço para envio',
|
|
17171
17603
|
controlType: 'textarea',
|
|
17172
17604
|
},
|
|
17173
17605
|
{
|
|
17174
17606
|
name: 'accessibilityNotes',
|
|
17175
|
-
label: '
|
|
17607
|
+
label: 'Observações de acessibilidade ou preferências',
|
|
17176
17608
|
controlType: 'textarea',
|
|
17177
17609
|
},
|
|
17178
17610
|
{
|
|
17179
17611
|
name: 'privacyConsent',
|
|
17180
|
-
label: 'Confirmo
|
|
17612
|
+
label: 'Confirmo ciência sobre o tratamento dos meus dados no processo de onboarding.',
|
|
17181
17613
|
controlType: 'checkbox',
|
|
17182
17614
|
selectionMode: 'boolean',
|
|
17183
17615
|
variant: 'consent',
|
|
@@ -17250,7 +17682,7 @@ const EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE = {
|
|
|
17250
17682
|
id: 'operations',
|
|
17251
17683
|
appearance: 'step',
|
|
17252
17684
|
stepLabel: '2',
|
|
17253
|
-
title: '
|
|
17685
|
+
title: 'Operação inicial',
|
|
17254
17686
|
description: 'Configure os recursos necessarios para o primeiro dia.',
|
|
17255
17687
|
rows: [
|
|
17256
17688
|
{
|
|
@@ -17360,17 +17792,17 @@ const EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE = {
|
|
|
17360
17792
|
options: [
|
|
17361
17793
|
{ text: 'Presencial', value: 'Presencial' },
|
|
17362
17794
|
{ text: 'Remoto', value: 'Remoto' },
|
|
17363
|
-
{ text: '
|
|
17795
|
+
{ text: 'Híbrido', value: 'Híbrido' },
|
|
17364
17796
|
],
|
|
17365
17797
|
},
|
|
17366
17798
|
{
|
|
17367
17799
|
name: 'accessibilityNotes',
|
|
17368
|
-
label: '
|
|
17800
|
+
label: 'Observações adicionais',
|
|
17369
17801
|
controlType: 'textarea',
|
|
17370
17802
|
},
|
|
17371
17803
|
{
|
|
17372
17804
|
name: 'privacyConsent',
|
|
17373
|
-
label: 'Confirmo
|
|
17805
|
+
label: 'Confirmo ciência sobre o tratamento dos meus dados no processo de onboarding.',
|
|
17374
17806
|
controlType: 'checkbox',
|
|
17375
17807
|
selectionMode: 'boolean',
|
|
17376
17808
|
variant: 'consent',
|
|
@@ -17386,7 +17818,7 @@ const PRIVACY_CONSENT_EDITORIAL_TEMPLATE = {
|
|
|
17386
17818
|
version: '1.0.0',
|
|
17387
17819
|
metadata: {
|
|
17388
17820
|
title: 'Privacy Consent',
|
|
17389
|
-
description: 'Template focado em aceite
|
|
17821
|
+
description: 'Template focado em aceite explícito, base legal, preferências de comunicação e registro de consentimento.',
|
|
17390
17822
|
category: 'consent',
|
|
17391
17823
|
tags: ['privacy', 'consent', 'compliance', 'legal'],
|
|
17392
17824
|
source: 'catalog',
|
|
@@ -17408,13 +17840,13 @@ const PRIVACY_CONSENT_EDITORIAL_TEMPLATE = {
|
|
|
17408
17840
|
title: 'Consentimento e tratamento de dados',
|
|
17409
17841
|
subtitle: 'Template regulatorio',
|
|
17410
17842
|
badge: 'info',
|
|
17411
|
-
description: 'Use este template quando o objetivo principal do fluxo for registrar
|
|
17843
|
+
description: 'Use este template quando o objetivo principal do fluxo for registrar ciência, aceite e preferências relacionadas a privacidade.',
|
|
17412
17844
|
}),
|
|
17413
17845
|
sections: [
|
|
17414
17846
|
{
|
|
17415
17847
|
id: 'consent',
|
|
17416
17848
|
appearance: 'card',
|
|
17417
|
-
title: '
|
|
17849
|
+
title: 'Preferências e consentimentos',
|
|
17418
17850
|
description: 'Aceites explicitos e canais opcionais de comunicacao.',
|
|
17419
17851
|
rows: [
|
|
17420
17852
|
{
|
|
@@ -17497,7 +17929,7 @@ const PRIVACY_CONSENT_EDITORIAL_TEMPLATE = {
|
|
|
17497
17929
|
},
|
|
17498
17930
|
{
|
|
17499
17931
|
name: 'consentNotes',
|
|
17500
|
-
label: '
|
|
17932
|
+
label: 'Observações adicionais',
|
|
17501
17933
|
controlType: 'textarea',
|
|
17502
17934
|
},
|
|
17503
17935
|
],
|
|
@@ -17533,6 +17965,8 @@ const RULE_PROPERTY_SCHEMA = {
|
|
|
17533
17965
|
{ name: 'tooltip', type: 'string', label: 'Tooltip' },
|
|
17534
17966
|
{ name: 'prefixIcon', type: 'string', label: 'Ícone prefixo' },
|
|
17535
17967
|
{ name: 'suffixIcon', type: 'string', label: 'Ícone sufixo' },
|
|
17968
|
+
{ name: 'presentation', type: 'object', label: 'Apresentação', category: 'appearance' },
|
|
17969
|
+
{ name: 'presentationRules', type: 'array', label: 'Regras de apresentação', category: 'appearance' },
|
|
17536
17970
|
{ name: 'prefixText', type: 'string', label: 'Texto prefixo' },
|
|
17537
17971
|
{ name: 'suffixText', type: 'string', label: 'Texto sufixo' },
|
|
17538
17972
|
{ name: 'defaultValue', type: 'object', label: 'Valor padrão' },
|
|
@@ -18256,8 +18690,8 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION = {
|
|
|
18256
18690
|
fields: [
|
|
18257
18691
|
{ key: 'selectedEquipment', label: 'Equipamentos', valuePath: 'formData.selectedEquipment', hideWhenEmpty: true },
|
|
18258
18692
|
{ key: 'needsEquipment', label: 'Necessita envio de equipamento', valuePath: 'formData.needsEquipment', hideWhenEmpty: true },
|
|
18259
|
-
{ key: 'shippingAddress', label: '
|
|
18260
|
-
{ key: 'accessibilityNotes', label: '
|
|
18693
|
+
{ key: 'shippingAddress', label: 'Endereço para envio', valuePath: 'formData.shippingAddress', hideWhenEmpty: true },
|
|
18694
|
+
{ key: 'accessibilityNotes', label: 'Observações adicionais', valuePath: 'formData.accessibilityNotes', hideWhenEmpty: true },
|
|
18261
18695
|
],
|
|
18262
18696
|
},
|
|
18263
18697
|
],
|
|
@@ -20346,7 +20780,7 @@ class SurfaceOpenActionEditorComponent {
|
|
|
20346
20780
|
.filter(Boolean)));
|
|
20347
20781
|
}
|
|
20348
20782
|
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: `
|
|
20783
|
+
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
20784
|
<div class="surface-editor">
|
|
20351
20785
|
<div class="surface-section">
|
|
20352
20786
|
<div class="surface-section-title">{{ t('editor.presets.title', 'Presets') }}</div>
|
|
@@ -20643,17 +21077,17 @@ class SurfaceOpenActionEditorComponent {
|
|
|
20643
21077
|
{{ t('editor.bindings.empty', 'No bindings configured yet.') }}
|
|
20644
21078
|
</div>
|
|
20645
21079
|
}
|
|
20646
|
-
<div class="surface-
|
|
21080
|
+
<div class="surface-guidance">
|
|
20647
21081
|
@if (bindingSourceSuggestionsPreview) {
|
|
20648
|
-
<div>
|
|
21082
|
+
<div class="surface-guidance__item">
|
|
20649
21083
|
{{ t('editor.bindings.suggestedSources', 'Suggested sources: {{value}}', { value: bindingSourceSuggestionsPreview }) }}
|
|
20650
21084
|
</div>
|
|
20651
21085
|
}
|
|
20652
|
-
<div>
|
|
21086
|
+
<div class="surface-guidance__item surface-guidance__item--primary">
|
|
20653
21087
|
{{ t('editor.bindings.sourceSemantics', 'Use payload.* for the canonical event envelope and runtime.* for direct host state when the source component exposes it.') }}
|
|
20654
21088
|
</div>
|
|
20655
21089
|
@if (bindingTargetSuggestionsPreview) {
|
|
20656
|
-
<div>
|
|
21090
|
+
<div class="surface-guidance__item">
|
|
20657
21091
|
{{ t('editor.bindings.suggestedTargets', 'Suggested targets: {{value}}', { value: bindingTargetSuggestionsPreview }) }}
|
|
20658
21092
|
</div>
|
|
20659
21093
|
}
|
|
@@ -20689,11 +21123,11 @@ class SurfaceOpenActionEditorComponent {
|
|
|
20689
21123
|
</mat-form-field>
|
|
20690
21124
|
</div>
|
|
20691
21125
|
</div>
|
|
20692
|
-
`, isInline: true, styles: [".surface-editor{display:grid;gap:
|
|
21126
|
+
`, 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
21127
|
}
|
|
20694
21128
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: SurfaceOpenActionEditorComponent, decorators: [{
|
|
20695
21129
|
type: Component,
|
|
20696
|
-
args: [{ selector: 'praxis-surface-open-action-editor', standalone: true, providers: [providePraxisI18nConfig(SURFACE_OPEN_I18N_CONFIG)], imports: [
|
|
21130
|
+
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
21131
|
FormsModule,
|
|
20698
21132
|
MatButtonModule,
|
|
20699
21133
|
MatFormFieldModule,
|
|
@@ -20999,17 +21433,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
20999
21433
|
{{ t('editor.bindings.empty', 'No bindings configured yet.') }}
|
|
21000
21434
|
</div>
|
|
21001
21435
|
}
|
|
21002
|
-
<div class="surface-
|
|
21436
|
+
<div class="surface-guidance">
|
|
21003
21437
|
@if (bindingSourceSuggestionsPreview) {
|
|
21004
|
-
<div>
|
|
21438
|
+
<div class="surface-guidance__item">
|
|
21005
21439
|
{{ t('editor.bindings.suggestedSources', 'Suggested sources: {{value}}', { value: bindingSourceSuggestionsPreview }) }}
|
|
21006
21440
|
</div>
|
|
21007
21441
|
}
|
|
21008
|
-
<div>
|
|
21442
|
+
<div class="surface-guidance__item surface-guidance__item--primary">
|
|
21009
21443
|
{{ t('editor.bindings.sourceSemantics', 'Use payload.* for the canonical event envelope and runtime.* for direct host state when the source component exposes it.') }}
|
|
21010
21444
|
</div>
|
|
21011
21445
|
@if (bindingTargetSuggestionsPreview) {
|
|
21012
|
-
<div>
|
|
21446
|
+
<div class="surface-guidance__item">
|
|
21013
21447
|
{{ t('editor.bindings.suggestedTargets', 'Suggested targets: {{value}}', { value: bindingTargetSuggestionsPreview }) }}
|
|
21014
21448
|
</div>
|
|
21015
21449
|
}
|
|
@@ -21045,7 +21479,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
21045
21479
|
</mat-form-field>
|
|
21046
21480
|
</div>
|
|
21047
21481
|
</div>
|
|
21048
|
-
`, styles: [".surface-editor{display:grid;gap:
|
|
21482
|
+
`, 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
21483
|
}], propDecorators: { value: [{
|
|
21050
21484
|
type: Input
|
|
21051
21485
|
}], hostKind: [{
|
|
@@ -21072,6 +21506,12 @@ const ENUMS$1 = {
|
|
|
21072
21506
|
textTransformApply: ['displayOnly', 'saveOnly', 'both'],
|
|
21073
21507
|
fieldSource: ['schema', 'local'],
|
|
21074
21508
|
fieldSubmitPolicy: ['include', 'omit', 'includeWhenDirty'],
|
|
21509
|
+
fieldPresentationTone: ['neutral', 'info', 'success', 'warning', 'danger'],
|
|
21510
|
+
fieldPresentationAppearance: ['plain', 'soft', 'outlined', 'filled'],
|
|
21511
|
+
fieldPresenterKind: ['text', 'badge', 'chip', 'status', 'iconValue', 'progress', 'rating', 'microVisualization'],
|
|
21512
|
+
presentationVisualizationKind: ['line', 'area', 'column', 'comparison', 'stackedBar', 'radial', 'harveyBall', 'bullet', 'delta', 'processFlow'],
|
|
21513
|
+
presentationVisualizationSurface: ['table-cell', 'list-item', 'object-header', 'card-summary', 'form-presentation'],
|
|
21514
|
+
presentationVisualizationSize: ['xs', 'sm', 'md', 'lg', 'responsive'],
|
|
21075
21515
|
visibleIn: ['form', 'filter', 'table', 'dialog'],
|
|
21076
21516
|
appearance: ['fill', 'outline'],
|
|
21077
21517
|
color: ['primary', 'accent', 'warn'],
|
|
@@ -21082,7 +21522,7 @@ const ENUMS$1 = {
|
|
|
21082
21522
|
sectionDescriptionStyle: ['bodyLarge', 'bodyMedium', 'bodySmall'],
|
|
21083
21523
|
};
|
|
21084
21524
|
const FIELD_METADATA_CAPABILITIES = {
|
|
21085
|
-
version: 'v1.
|
|
21525
|
+
version: 'v1.5',
|
|
21086
21526
|
enums: ENUMS$1,
|
|
21087
21527
|
notes: [
|
|
21088
21528
|
'Condições booleanas declarativas devem usar Json Logic canônico. Funções permanecem restritas a escapes host-level como transforms e validators customizados.',
|
|
@@ -21091,8 +21531,10 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21091
21531
|
'Detalhes específicos de cada controle (ex: opções de datepicker, máscaras específicas) devem ser consultados nos catálogos de microcomponentes.',
|
|
21092
21532
|
'POLICY: Arrays e objetos (ex: options, validators) devem sofrer merge/append, nunca substituição completa sem confirmação.',
|
|
21093
21533
|
'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;
|
|
21534
|
+
'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
21535
|
'POLICY: formSubmit.formData e o payload filtrado para backend; formSubmit.rawFormData preserva os valores completos da UI, incluindo campos locais/transient.',
|
|
21536
|
+
'POLICY: presentation/presentationRules descrevem somente estado visual semantico em modo leitura. Nao gere CSS, HTML, comandos ou mutacoes por Json Logic.',
|
|
21537
|
+
'POLICY: presentation.visualization e renderer-neutral. Nao gere EChartsOption, SVG, HTML ou CSS; use kind/surface/size/fallbackText e dados semanticos.',
|
|
21096
21538
|
],
|
|
21097
21539
|
capabilities: [
|
|
21098
21540
|
// =============================================================================
|
|
@@ -21194,6 +21636,13 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21194
21636
|
description: 'Texto de ajuda exibido abaixo do campo.',
|
|
21195
21637
|
intentExamples: ['colocar dica', 'ajuda no rodapé do campo'],
|
|
21196
21638
|
},
|
|
21639
|
+
{
|
|
21640
|
+
path: 'helpText',
|
|
21641
|
+
category: 'identity',
|
|
21642
|
+
valueKind: 'string',
|
|
21643
|
+
description: 'Texto semântico de ajuda publicado pelo schema/DTO.',
|
|
21644
|
+
intentExamples: ['explicar regra de negócio do campo', 'ajuda vinda do backend'],
|
|
21645
|
+
},
|
|
21197
21646
|
{
|
|
21198
21647
|
path: 'tooltip',
|
|
21199
21648
|
category: 'identity',
|
|
@@ -21201,6 +21650,13 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21201
21650
|
description: 'Texto exibido ao passar o mouse.',
|
|
21202
21651
|
intentExamples: ['adicionar tooltip'],
|
|
21203
21652
|
},
|
|
21653
|
+
{
|
|
21654
|
+
path: 'tooltipOnHover',
|
|
21655
|
+
category: 'identity',
|
|
21656
|
+
valueKind: 'boolean',
|
|
21657
|
+
description: 'Habilita apresentação do tooltip no hover quando suportado pelo renderer.',
|
|
21658
|
+
intentExamples: ['mostrar tooltip ao passar o mouse', 'ativar dica no hover'],
|
|
21659
|
+
},
|
|
21204
21660
|
{
|
|
21205
21661
|
path: 'description',
|
|
21206
21662
|
category: 'identity',
|
|
@@ -21292,24 +21748,24 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21292
21748
|
category: 'data',
|
|
21293
21749
|
valueKind: 'enum',
|
|
21294
21750
|
allowedValues: ENUMS$1.fieldSource,
|
|
21295
|
-
description: 'Origem
|
|
21296
|
-
intentExamples: ['campo local', 'campo auxiliar do host', 'campo que
|
|
21297
|
-
safetyNotes: '
|
|
21751
|
+
description: 'Origem semântica do campo. Use local para campos do host que não vêm do schema backend.',
|
|
21752
|
+
intentExamples: ['campo local', 'campo auxiliar do host', 'campo que não vem do schema'],
|
|
21753
|
+
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
21754
|
},
|
|
21299
21755
|
{
|
|
21300
21756
|
path: 'transient',
|
|
21301
21757
|
category: 'data',
|
|
21302
21758
|
valueKind: 'boolean',
|
|
21303
|
-
description: 'Marca o campo como
|
|
21304
|
-
intentExamples: ['campo
|
|
21305
|
-
safetyNotes: 'Campos transient continuam participando de UI,
|
|
21759
|
+
description: 'Marca o campo como temporário/local para preenchimento. O dynamic-form omite do submit por padrão.',
|
|
21760
|
+
intentExamples: ['campo temporário', 'campo transient', 'não enviar no payload', 'usar apenas na UI'],
|
|
21761
|
+
safetyNotes: 'Campos transient continuam participando de UI, validação, regras, visibilidade e valueChange; eles apenas saem do payload persistido por padrão.',
|
|
21306
21762
|
},
|
|
21307
21763
|
{
|
|
21308
21764
|
path: 'submitPolicy',
|
|
21309
21765
|
category: 'behavior',
|
|
21310
21766
|
valueKind: 'enum',
|
|
21311
21767
|
allowedValues: ENUMS$1.fieldSubmitPolicy,
|
|
21312
|
-
description: '
|
|
21768
|
+
description: 'Política de submit para sobrescrever o padrão de campos locais/transient.',
|
|
21313
21769
|
intentExamples: ['omitir do submit', 'enviar mesmo sendo local', 'enviar apenas se alterado'],
|
|
21314
21770
|
safetyNotes: 'Use omit para nunca persistir, include para enviar sempre e includeWhenDirty apenas quando o controle estiver dirty.',
|
|
21315
21771
|
},
|
|
@@ -21412,6 +21868,166 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21412
21868
|
description: 'Tamanho do ícone.',
|
|
21413
21869
|
intentExamples: ['ícone pequeno', 'aumentar tamanho do ícone', 'ícone grande'],
|
|
21414
21870
|
},
|
|
21871
|
+
{
|
|
21872
|
+
path: 'iconColor',
|
|
21873
|
+
category: 'appearance',
|
|
21874
|
+
valueKind: 'string',
|
|
21875
|
+
description: 'Cor semântica ou token de cor aplicado ao ícone principal.',
|
|
21876
|
+
intentExamples: ['ícone em cor primária', 'usar token do tema no ícone'],
|
|
21877
|
+
},
|
|
21878
|
+
{
|
|
21879
|
+
path: 'iconClass',
|
|
21880
|
+
category: 'appearance',
|
|
21881
|
+
valueKind: 'string',
|
|
21882
|
+
description: 'Classe CSS controlada pelo host para o ícone principal.',
|
|
21883
|
+
intentExamples: ['usar classe de ícone outlined', 'aplicar classe corporativa'],
|
|
21884
|
+
},
|
|
21885
|
+
{
|
|
21886
|
+
path: 'iconStyle',
|
|
21887
|
+
category: 'appearance',
|
|
21888
|
+
valueKind: 'string',
|
|
21889
|
+
description: 'Estilo visual semântico do ícone quando o renderer suportar variações.',
|
|
21890
|
+
intentExamples: ['usar ícone arredondado', 'aplicar estilo filled'],
|
|
21891
|
+
},
|
|
21892
|
+
{
|
|
21893
|
+
path: 'iconFontSize',
|
|
21894
|
+
category: 'appearance',
|
|
21895
|
+
valueKind: 'string',
|
|
21896
|
+
description: 'Tamanho tipográfico do ícone principal.',
|
|
21897
|
+
intentExamples: ['ícone com 18px', 'ajustar tamanho do ícone'],
|
|
21898
|
+
},
|
|
21899
|
+
// =============================================================================
|
|
21900
|
+
// PRESENTATION MODE
|
|
21901
|
+
// =============================================================================
|
|
21902
|
+
{
|
|
21903
|
+
path: 'valuePresentation',
|
|
21904
|
+
category: 'appearance',
|
|
21905
|
+
valueKind: 'object',
|
|
21906
|
+
description: 'Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.',
|
|
21907
|
+
safetyNotes: 'Preferir este contrato a formatadores legados quando a intencao for apresentacao de valor.',
|
|
21908
|
+
intentExamples: ['mostrar como moeda', 'formatar como data longa', 'exibir percentual'],
|
|
21909
|
+
},
|
|
21910
|
+
{
|
|
21911
|
+
path: 'presentation',
|
|
21912
|
+
category: 'appearance',
|
|
21913
|
+
valueKind: 'object',
|
|
21914
|
+
description: 'Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.',
|
|
21915
|
+
safetyNotes: 'Use apenas semantica declarativa; nao incluir CSS arbitrario, HTML, comandos ou efeitos mutaveis.',
|
|
21916
|
+
intentExamples: ['status com icone', 'badge de pendente', 'campo em tom warning'],
|
|
21917
|
+
},
|
|
21918
|
+
{
|
|
21919
|
+
path: 'presentation.presenter',
|
|
21920
|
+
category: 'appearance',
|
|
21921
|
+
valueKind: 'enum',
|
|
21922
|
+
allowedValues: ENUMS$1.fieldPresenterKind,
|
|
21923
|
+
description: 'Tipo semantico de renderizacao em modo apresentacao.',
|
|
21924
|
+
intentExamples: ['renderizar como status', 'usar chip', 'mostrar icone com valor'],
|
|
21925
|
+
},
|
|
21926
|
+
{
|
|
21927
|
+
path: 'presentation.tone',
|
|
21928
|
+
category: 'appearance',
|
|
21929
|
+
valueKind: 'enum',
|
|
21930
|
+
allowedValues: ENUMS$1.fieldPresentationTone,
|
|
21931
|
+
description: 'Tom semantico mapeado pelo consumidor para tokens de tema.',
|
|
21932
|
+
intentExamples: ['tom de sucesso', 'tom de alerta', 'tom de erro'],
|
|
21933
|
+
},
|
|
21934
|
+
{
|
|
21935
|
+
path: 'presentation.appearance',
|
|
21936
|
+
category: 'appearance',
|
|
21937
|
+
valueKind: 'enum',
|
|
21938
|
+
allowedValues: ENUMS$1.fieldPresentationAppearance,
|
|
21939
|
+
description: 'Nivel de enfase visual do apresentador.',
|
|
21940
|
+
intentExamples: ['status preenchido', 'badge contornado', 'chip suave'],
|
|
21941
|
+
},
|
|
21942
|
+
{
|
|
21943
|
+
path: 'presentation.icon',
|
|
21944
|
+
category: 'appearance',
|
|
21945
|
+
valueKind: 'string',
|
|
21946
|
+
description: 'Nome de icone Material Symbols usado pelo apresentador semantico.',
|
|
21947
|
+
intentExamples: ['icone lock', 'icone payments', 'icone schedule'],
|
|
21948
|
+
},
|
|
21949
|
+
{
|
|
21950
|
+
path: 'presentation.label',
|
|
21951
|
+
category: 'identity',
|
|
21952
|
+
valueKind: 'string',
|
|
21953
|
+
description: 'Rotulo semantico exibido por apresentadores como status, badge ou chip.',
|
|
21954
|
+
intentExamples: ['rotulo Bloqueado', 'texto Aprovado', 'status Aguardando aprovacao'],
|
|
21955
|
+
},
|
|
21956
|
+
{
|
|
21957
|
+
path: 'presentation.badge',
|
|
21958
|
+
category: 'appearance',
|
|
21959
|
+
valueKind: 'string',
|
|
21960
|
+
description: 'Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.',
|
|
21961
|
+
intentExamples: ['badge alto valor', 'marcador D+35', 'sinalizar revisao executiva'],
|
|
21962
|
+
},
|
|
21963
|
+
{
|
|
21964
|
+
path: 'presentation.valuePresentation',
|
|
21965
|
+
category: 'appearance',
|
|
21966
|
+
valueKind: 'object',
|
|
21967
|
+
description: 'Override de formatacao aplicado apenas pela superficie de apresentacao.',
|
|
21968
|
+
safetyNotes: 'Nao altera o valor real do FormControl nem o payload de submit.',
|
|
21969
|
+
},
|
|
21970
|
+
{
|
|
21971
|
+
path: 'presentation.visualization',
|
|
21972
|
+
category: 'appearance',
|
|
21973
|
+
valueKind: 'object',
|
|
21974
|
+
description: 'Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.',
|
|
21975
|
+
safetyNotes: 'Exige fallback textual e nao pode conter opcoes de ECharts, HTML, SVG bruto, CSS ou comandos.',
|
|
21976
|
+
intentExamples: ['micro chart de SLA', 'barra empilhada em celula', 'bullet chart de orcamento', 'fluxo compacto de aprovacao'],
|
|
21977
|
+
},
|
|
21978
|
+
{
|
|
21979
|
+
path: 'presentation.visualization.kind',
|
|
21980
|
+
category: 'appearance',
|
|
21981
|
+
valueKind: 'enum',
|
|
21982
|
+
allowedValues: ENUMS$1.presentationVisualizationKind,
|
|
21983
|
+
description: 'Tipo semantico da micro visualizacao de apresentacao.',
|
|
21984
|
+
intentExamples: ['comparison', 'stackedBar', 'bullet', 'processFlow'],
|
|
21985
|
+
},
|
|
21986
|
+
{
|
|
21987
|
+
path: 'presentation.visualization.surface',
|
|
21988
|
+
category: 'layout',
|
|
21989
|
+
valueKind: 'enum',
|
|
21990
|
+
allowedValues: ENUMS$1.presentationVisualizationSurface,
|
|
21991
|
+
description: 'Superficie alvo usada para aplicar regras de densidade e fallback.',
|
|
21992
|
+
intentExamples: ['table-cell', 'list-item', 'form-presentation'],
|
|
21993
|
+
},
|
|
21994
|
+
{
|
|
21995
|
+
path: 'presentation.visualization.size',
|
|
21996
|
+
category: 'layout',
|
|
21997
|
+
valueKind: 'enum',
|
|
21998
|
+
allowedValues: ENUMS$1.presentationVisualizationSize,
|
|
21999
|
+
description: 'Tamanho semantico da micro visualizacao.',
|
|
22000
|
+
intentExamples: ['xs em tabela', 'md em header', 'responsive em card'],
|
|
22001
|
+
},
|
|
22002
|
+
{
|
|
22003
|
+
path: 'presentation.visualization.fallbackText',
|
|
22004
|
+
category: 'accessibility',
|
|
22005
|
+
valueKind: 'string',
|
|
22006
|
+
description: 'Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.',
|
|
22007
|
+
safetyNotes: 'Deve explicar valor, unidade, meta, tendencia ou estado quando aplicavel.',
|
|
22008
|
+
},
|
|
22009
|
+
{
|
|
22010
|
+
path: 'presentationRules',
|
|
22011
|
+
category: 'appearance',
|
|
22012
|
+
valueKind: 'array',
|
|
22013
|
+
description: 'Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.',
|
|
22014
|
+
safetyNotes: 'As regras devem produzir apenas set/effect semantico. Nao use para alterar valor, executar acao, navegar ou injetar HTML/CSS.',
|
|
22015
|
+
intentExamples: ['se status for BLOQUEADO, usar tone danger', 'se valor maior que limite, mostrar badge de revisao'],
|
|
22016
|
+
},
|
|
22017
|
+
{
|
|
22018
|
+
path: 'presentationRules[].when',
|
|
22019
|
+
category: 'behavior',
|
|
22020
|
+
valueKind: 'object',
|
|
22021
|
+
description: 'Guarda Json Logic avaliada contra o contexto de apresentacao do campo.',
|
|
22022
|
+
safetyNotes: 'Use Json Logic serializavel; funcoes nao sao aceitas.',
|
|
22023
|
+
},
|
|
22024
|
+
{
|
|
22025
|
+
path: 'presentationRules[].set',
|
|
22026
|
+
category: 'appearance',
|
|
22027
|
+
valueKind: 'object',
|
|
22028
|
+
description: 'Patch semantico aplicado sobre presentation quando a guarda for verdadeira.',
|
|
22029
|
+
safetyNotes: 'Somente presenter, tone, icon, label, badge, tooltip, appearance, valuePresentation e interactions seguras.',
|
|
22030
|
+
},
|
|
21415
22031
|
// =============================================================================
|
|
21416
22032
|
// MASK / FORMAT
|
|
21417
22033
|
// =============================================================================
|
|
@@ -21451,8 +22067,8 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21451
22067
|
path: 'required',
|
|
21452
22068
|
category: 'validation',
|
|
21453
22069
|
valueKind: 'boolean',
|
|
21454
|
-
description: 'Campo
|
|
21455
|
-
intentExamples: ['campo
|
|
22070
|
+
description: 'Campo obrigatório (alias rápido do validators.required).',
|
|
22071
|
+
intentExamples: ['campo obrigatório', 'exigir preenchimento'],
|
|
21456
22072
|
},
|
|
21457
22073
|
{
|
|
21458
22074
|
path: 'validators.requiredMessage',
|
|
@@ -21471,7 +22087,7 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21471
22087
|
path: 'validators.emailMessage',
|
|
21472
22088
|
category: 'validation',
|
|
21473
22089
|
valueKind: 'string',
|
|
21474
|
-
description: 'Mensagem customizada para
|
|
22090
|
+
description: 'Mensagem customizada para validação de email.',
|
|
21475
22091
|
},
|
|
21476
22092
|
{
|
|
21477
22093
|
path: 'validators.minLength',
|
|
@@ -21611,15 +22227,15 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21611
22227
|
path: 'validators.customValidator',
|
|
21612
22228
|
category: 'validation',
|
|
21613
22229
|
valueKind: 'expression',
|
|
21614
|
-
description: 'Validador customizado (
|
|
21615
|
-
safetyNotes: '
|
|
22230
|
+
description: 'Validador customizado (função).',
|
|
22231
|
+
safetyNotes: 'Funções não são serializáveis; exige wiring manual.',
|
|
21616
22232
|
},
|
|
21617
22233
|
{
|
|
21618
22234
|
path: 'validators.asyncValidator',
|
|
21619
22235
|
category: 'validation',
|
|
21620
22236
|
valueKind: 'expression',
|
|
21621
|
-
description: 'Validador async customizado (
|
|
21622
|
-
safetyNotes: '
|
|
22237
|
+
description: 'Validador async customizado (função).',
|
|
22238
|
+
safetyNotes: 'Funções não são serializáveis; exige wiring manual.',
|
|
21623
22239
|
},
|
|
21624
22240
|
{
|
|
21625
22241
|
path: 'validators.matchField',
|
|
@@ -21637,8 +22253,8 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21637
22253
|
path: 'validators.uniqueValidator',
|
|
21638
22254
|
category: 'validation',
|
|
21639
22255
|
valueKind: 'expression',
|
|
21640
|
-
description: 'Validador de unicidade via API (
|
|
21641
|
-
safetyNotes: '
|
|
22256
|
+
description: 'Validador de unicidade via API (função).',
|
|
22257
|
+
safetyNotes: 'Funções não são serializáveis; exige wiring manual.',
|
|
21642
22258
|
},
|
|
21643
22259
|
{
|
|
21644
22260
|
path: 'validators.uniqueMessage',
|
|
@@ -21650,8 +22266,8 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21650
22266
|
path: 'validators.conditionalValidation',
|
|
21651
22267
|
category: 'validation',
|
|
21652
22268
|
valueKind: 'array',
|
|
21653
|
-
description: 'Regras de
|
|
21654
|
-
safetyNotes: 'Use regras declarativas com Json Logic
|
|
22269
|
+
description: 'Regras de validação condicional.',
|
|
22270
|
+
safetyNotes: 'Use regras declarativas com Json Logic serializável; não gere funções aqui.',
|
|
21655
22271
|
},
|
|
21656
22272
|
{
|
|
21657
22273
|
path: 'validators.conditionalValidation[].condition',
|
|
@@ -21671,13 +22287,13 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21671
22287
|
category: 'validation',
|
|
21672
22288
|
valueKind: 'enum',
|
|
21673
22289
|
allowedValues: ENUMS$1.validatorTrigger,
|
|
21674
|
-
description: 'Gatilho de
|
|
22290
|
+
description: 'Gatilho de validação no validator.',
|
|
21675
22291
|
},
|
|
21676
22292
|
{
|
|
21677
22293
|
path: 'validators.validationDebounce',
|
|
21678
22294
|
category: 'validation',
|
|
21679
22295
|
valueKind: 'number',
|
|
21680
|
-
description: 'Debounce de
|
|
22296
|
+
description: 'Debounce de validação no validator (ms).',
|
|
21681
22297
|
},
|
|
21682
22298
|
{
|
|
21683
22299
|
path: 'validators.showInlineErrors',
|
|
@@ -22004,12 +22620,12 @@ const ENUMS = {
|
|
|
22004
22620
|
actionPlacement: ['header', 'window'],
|
|
22005
22621
|
};
|
|
22006
22622
|
const CAPS = [
|
|
22007
|
-
{ path: 'page', category: 'page', valueKind: 'object', description: '
|
|
22623
|
+
{ path: 'page', category: 'page', valueKind: 'object', description: 'Definição da página dinâmica.' },
|
|
22008
22624
|
{ 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
|
|
22625
|
+
{ path: 'page.layoutPreset', category: 'layout', valueKind: 'string', description: 'ID canônico opcional do preset estrutural da página.' },
|
|
22626
|
+
{ path: 'page.layoutPresetOptions', category: 'layout', valueKind: 'object', description: 'Opções específicas do preset estrutural consumidas por builders e runtimes futuros.' },
|
|
22627
|
+
{ path: 'page.themePreset', category: 'appearance', valueKind: 'string', description: 'ID opcional do preset de tema para shell, gráficos, densidade e defaults visuais.' },
|
|
22628
|
+
{ path: 'page.layout', category: 'layout', valueKind: 'object', description: 'Layout base da página.' },
|
|
22013
22629
|
{ path: 'page.layout.orientation', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutOrientation, description: 'Orientacao do grid (vertical/columns).' },
|
|
22014
22630
|
{ path: 'page.layout.columns', category: 'layout', valueKind: 'number', description: 'Numero de colunas (quando orientation=columns).' },
|
|
22015
22631
|
{ path: 'page.layout.gap', category: 'layout', valueKind: 'string', description: 'Gap entre widgets (ex: 16px).' },
|
|
@@ -22018,7 +22634,7 @@ const CAPS = [
|
|
|
22018
22634
|
{ path: 'page.layout.breakpoints.md', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint md.' },
|
|
22019
22635
|
{ path: 'page.layout.breakpoints.lg', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint lg.' },
|
|
22020
22636
|
{ 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
|
|
22637
|
+
{ path: 'page.canvas', category: 'layout', valueKind: 'object', description: 'Canvas espacial canônico da página quando houver geometria explícita.' },
|
|
22022
22638
|
{ path: 'page.canvas.mode', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.canvasMode, description: 'Modo canonico do canvas. Valor atual: grid.' },
|
|
22023
22639
|
{ path: 'page.canvas.columns', category: 'layout', valueKind: 'number', description: 'Numero de colunas do canvas espacial.' },
|
|
22024
22640
|
{ path: 'page.canvas.rowUnit', category: 'layout', valueKind: 'string', description: 'Altura base das linhas do canvas, como 80px.' },
|
|
@@ -22032,10 +22648,10 @@ const CAPS = [
|
|
|
22032
22648
|
{ path: 'page.canvas.items.<widgetKey>.rowSpan', category: 'layout', valueKind: 'number', description: 'Quantidade de linhas ocupadas pelo widget.' },
|
|
22033
22649
|
{ path: 'page.canvas.items.<widgetKey>.zIndex', category: 'layout', valueKind: 'number', description: 'Camada opcional do item no canvas.' },
|
|
22034
22650
|
{ 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
|
|
22651
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.minColSpan', category: 'layout', valueKind: 'number', description: 'Span mínimo de colunas permitido.' },
|
|
22652
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.minRowSpan', category: 'layout', valueKind: 'number', description: 'Span mínimo de linhas permitido.' },
|
|
22653
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.maxColSpan', category: 'layout', valueKind: 'number', description: 'Span máximo de colunas permitido.' },
|
|
22654
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.maxRowSpan', category: 'layout', valueKind: 'number', description: 'Span máximo de linhas permitido.' },
|
|
22039
22655
|
{ path: 'page.canvas.items.<widgetKey>.constraints.lockPosition', category: 'layout', valueKind: 'boolean', description: 'Bloqueia alteracao de posicao do item no canvas.' },
|
|
22040
22656
|
{ path: 'page.canvas.items.<widgetKey>.constraints.lockSize', category: 'layout', valueKind: 'boolean', description: 'Bloqueia alteracao de tamanho do item no canvas.' },
|
|
22041
22657
|
{ path: 'page.widgets', category: 'widgets', valueKind: 'array', description: 'Lista de widgets renderizados.' },
|
|
@@ -22043,32 +22659,32 @@ const CAPS = [
|
|
|
22043
22659
|
{ path: 'page.widgets[].className', category: 'widgets', valueKind: 'string', description: 'Classe CSS opcional do widget.' },
|
|
22044
22660
|
{ path: 'page.widgets[].definition.id', category: 'widgets', valueKind: 'string', description: 'ID do componente do widget (ex: praxis-table).' },
|
|
22045
22661
|
{ 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
|
|
22662
|
+
{ 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.' },
|
|
22663
|
+
{ 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.' },
|
|
22664
|
+
{ 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.' },
|
|
22665
|
+
{ 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
22666
|
{ 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: '
|
|
22667
|
+
{ path: 'page.widgets[].shell', category: 'shell', valueKind: 'object', description: 'Configuração do shell do widget.' },
|
|
22052
22668
|
{ 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: '
|
|
22669
|
+
{ path: 'page.widgets[].shell.title', category: 'shell', valueKind: 'string', description: 'Título do shell.' },
|
|
22670
|
+
{ path: 'page.widgets[].shell.subtitle', category: 'shell', valueKind: 'string', description: 'Subtítulo do shell.' },
|
|
22671
|
+
{ path: 'page.widgets[].shell.icon', category: 'shell', valueKind: 'string', description: 'Ícone do shell.' },
|
|
22056
22672
|
{ 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
|
|
22673
|
+
{ path: 'page.widgets[].shell.actions', category: 'shell', valueKind: 'array', description: 'Ações do shell.' },
|
|
22674
|
+
{ path: 'page.widgets[].shell.actions[].id', category: 'shell', valueKind: 'string', description: 'ID da ação.' },
|
|
22675
|
+
{ path: 'page.widgets[].shell.actions[].label', category: 'shell', valueKind: 'string', description: 'Label da ação.' },
|
|
22676
|
+
{ path: 'page.widgets[].shell.actions[].icon', category: 'shell', valueKind: 'string', description: 'Ícone da ação.' },
|
|
22677
|
+
{ path: 'page.widgets[].shell.actions[].variant', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionVariant, description: 'Estilo visual da ação.' },
|
|
22678
|
+
{ path: 'page.widgets[].shell.actions[].placement', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionPlacement, description: 'Posicionamento da ação.' },
|
|
22679
|
+
{ path: 'page.widgets[].shell.actions[].emit', category: 'shell', valueKind: 'string', description: 'Evento emitido ao acionar a ação.' },
|
|
22064
22680
|
{ path: 'page.state', category: 'state', valueKind: 'object', description: 'Estado declarativo opcional compartilhado por widgets e composicao.' },
|
|
22065
22681
|
{ path: 'page.state.values', category: 'state', valueKind: 'object', description: 'Valores primarios mutaveis escritos por widgets, defaults ou host.' },
|
|
22066
22682
|
{ path: 'page.state.schema', category: 'state', valueKind: 'object', description: 'Descritores dos paths primarios de estado.' },
|
|
22067
22683
|
{ path: 'page.state.schema.<token>.type', category: 'state', valueKind: 'string', description: 'Tipo semantico opcional do path de estado.' },
|
|
22068
22684
|
{ 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
|
|
22685
|
+
{ 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
22686
|
{ 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: '
|
|
22687
|
+
{ path: 'page.state.schema.<token>.description', category: 'state', valueKind: 'string', description: 'Descrição opcional do path para builders e catálogos AI.' },
|
|
22072
22688
|
{ path: 'page.state.schema.<token>.tags', category: 'state', valueKind: 'array', description: 'Tags opcionais para busca e governanca do estado.' },
|
|
22073
22689
|
{ path: 'page.state.derived', category: 'state', valueKind: 'object', description: 'Descritores de estado derivado recomputado pelo runtime.' },
|
|
22074
22690
|
{ path: 'page.state.derived.<token>.dependsOn', category: 'state', valueKind: 'array', description: 'Paths de estado que alimentam o valor derivado.' },
|
|
@@ -22077,9 +22693,9 @@ const CAPS = [
|
|
|
22077
22693
|
{ path: 'page.state.derived.<token>.compute.expression', category: 'state', valueKind: 'expression', description: 'Expressao Json Logic para compute.kind=json-logic.' },
|
|
22078
22694
|
{ path: 'page.state.derived.<token>.compute.value', category: 'state', valueKind: 'object', description: 'Valor template para compute.kind=template.' },
|
|
22079
22695
|
{ 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: '
|
|
22696
|
+
{ path: 'page.state.derived.<token>.compute.options', category: 'state', valueKind: 'object', description: 'Opções do operador ou transformer.' },
|
|
22081
22697
|
{ 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: '
|
|
22698
|
+
{ path: 'page.state.derived.<token>.description', category: 'state', valueKind: 'string', description: 'Descrição opcional do estado derivado.' },
|
|
22083
22699
|
{ path: 'page.state.derived.<token>.cache', category: 'state', valueKind: 'boolean', description: 'Permite cache futuro do valor derivado.' },
|
|
22084
22700
|
{ path: 'page.composition', category: 'connections', valueKind: 'object', description: 'Envelope canonico da composicao persistida.' },
|
|
22085
22701
|
{ path: 'page.composition.version', category: 'connections', valueKind: 'string', description: 'Versao do envelope de composicao.' },
|
|
@@ -22095,7 +22711,7 @@ const CAPS = [
|
|
|
22095
22711
|
{ path: 'page.composition.links[].from.ref.nestedPath[].kind', category: 'connections', valueKind: 'string', description: 'Tipo do segmento nested de origem.' },
|
|
22096
22712
|
{ path: 'page.composition.links[].from.ref.nestedPath[].id', category: 'connections', valueKind: 'string', description: 'Identificador estrutural do segmento nested de origem.' },
|
|
22097
22713
|
{ 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: '
|
|
22714
|
+
{ 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
22715
|
{ path: 'page.composition.links[].from.ref.nestedPath[].componentType', category: 'connections', valueKind: 'string', description: 'Tipo do componente real do widget filho de origem.' },
|
|
22100
22716
|
{ path: 'page.composition.links[].to', category: 'connections', valueKind: 'object', description: 'Endpoint de destino do link.' },
|
|
22101
22717
|
{ 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 +22726,11 @@ const CAPS = [
|
|
|
22110
22726
|
{ path: 'page.composition.links[].to.ref.nestedPath[].kind', category: 'connections', valueKind: 'string', description: 'Tipo do segmento nested de destino.' },
|
|
22111
22727
|
{ path: 'page.composition.links[].to.ref.nestedPath[].id', category: 'connections', valueKind: 'string', description: 'Identificador estrutural do segmento nested de destino.' },
|
|
22112
22728
|
{ 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: '
|
|
22729
|
+
{ 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
22730
|
{ 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: '
|
|
22731
|
+
{ path: 'page.composition.links[].intent', category: 'connections', valueKind: 'string', description: 'Intenção semântica do link.' },
|
|
22116
22732
|
{ 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
|
|
22733
|
+
{ 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
22734
|
{ path: 'page.composition.links[].policy', category: 'connections', valueKind: 'object', description: 'Politicas operacionais opcionais do link, como debounce, distinct e missing-value.' },
|
|
22119
22735
|
{ path: 'page.composition.links[].metadata', category: 'connections', valueKind: 'object', description: 'Metadados opcionais do link.' },
|
|
22120
22736
|
{ path: 'page.grouping', category: 'layout', valueKind: 'array', description: 'Modelo semantico opcional de secoes, abas, areas hero e rails.' },
|
|
@@ -22155,15 +22771,15 @@ const DYNAMIC_PAGE_AI_CAPABILITIES = {
|
|
|
22155
22771
|
enums: ENUMS,
|
|
22156
22772
|
targets: ['praxis-dynamic-page'],
|
|
22157
22773
|
notes: [
|
|
22158
|
-
'Este
|
|
22774
|
+
'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
22775
|
'WidgetPageDefinition e o contrato canonico persistido: widgets, composition.links, state, context, layout, canvas, presets, grouping, slotAssignments, deviceLayouts e themePreset.',
|
|
22160
22776
|
'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
|
|
22777
|
+
'page.canvas.items é um mapa por widget key; não modele canvas.items como array.',
|
|
22778
|
+
'Taxonomia editorial: condition usa Json Logic canônico; transform usa pipeline declarativo; não trate ambos como a mesma "expression".',
|
|
22163
22779
|
'Para remocao/replace, use flags {_remove:true} ou {_replace:true} no item.',
|
|
22164
22780
|
'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;
|
|
22781
|
+
'Inputs de widgets dependem do componente (ex: praxis-table, praxis-dynamic-form). Evite inventar campos; prefira pedir confirmação.',
|
|
22782
|
+
'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
22783
|
'Use ids estaveis para links e keys estaveis para widgets.',
|
|
22168
22784
|
'Nested component ports usam endpoint component-port com nestedPath; o owner em ref.widget continua sendo o widget top-level.',
|
|
22169
22785
|
'Objetivo: compor widgets e relacionamentos canonicos (ex.: master-detail).',
|
|
@@ -22192,7 +22808,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22192
22808
|
mode: 'enum',
|
|
22193
22809
|
options: [
|
|
22194
22810
|
{ value: 'fixed', label: 'Linhas fixas' },
|
|
22195
|
-
{ value: 'content', label: '
|
|
22811
|
+
{ value: 'content', label: 'Conteúdo' },
|
|
22196
22812
|
],
|
|
22197
22813
|
},
|
|
22198
22814
|
'page.canvas.collisionPolicy': {
|
|
@@ -22261,7 +22877,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22261
22877
|
'page.widgets[].shell.actions[].variant': {
|
|
22262
22878
|
mode: 'enum',
|
|
22263
22879
|
options: [
|
|
22264
|
-
{ value: 'icon', label: '
|
|
22880
|
+
{ value: 'icon', label: 'Ícone' },
|
|
22265
22881
|
{ value: 'text', label: 'Texto' },
|
|
22266
22882
|
{ value: 'outlined', label: 'Outlined' },
|
|
22267
22883
|
],
|
|
@@ -22291,7 +22907,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22291
22907
|
mode: 'suggested',
|
|
22292
22908
|
options: [
|
|
22293
22909
|
{ 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: '
|
|
22910
|
+
{ value: 'rowAction', label: 'Ação da linha (praxis-table)' },
|
|
22295
22911
|
{ value: 'formSubmit', label: 'Submit do formulario (praxis-dynamic-form)' },
|
|
22296
22912
|
],
|
|
22297
22913
|
},
|
|
@@ -22305,7 +22921,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22305
22921
|
'page.composition.links[].transform.steps[].config.path': {
|
|
22306
22922
|
mode: 'suggested',
|
|
22307
22923
|
options: [
|
|
22308
|
-
{ value: 'payload.row.id', label: 'ID
|
|
22924
|
+
{ value: 'payload.row.id', label: 'ID padrão do registro', example: 'rowClick -> resourceId' },
|
|
22309
22925
|
],
|
|
22310
22926
|
},
|
|
22311
22927
|
},
|
|
@@ -22617,7 +23233,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22617
23233
|
{ name: 'toInput', type: 'STRING' },
|
|
22618
23234
|
{ name: 'map', type: 'STRING' },
|
|
22619
23235
|
],
|
|
22620
|
-
safetyNotes: 'Use transform pick-path payload.row.id para master-detail
|
|
23236
|
+
safetyNotes: 'Use transform pick-path payload.row.id para master-detail padrão.',
|
|
22621
23237
|
patchTemplate: {
|
|
22622
23238
|
page: {
|
|
22623
23239
|
composition: {
|
|
@@ -22668,7 +23284,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22668
23284
|
{ name: 'fromWidget', type: 'STRING' },
|
|
22669
23285
|
{ name: 'toWidget', type: 'STRING' },
|
|
22670
23286
|
],
|
|
22671
|
-
safetyNotes: '
|
|
23287
|
+
safetyNotes: 'Padrão master-detail: rowClick -> resourceId com transform pick-path payload.row.id.',
|
|
22672
23288
|
patchTemplate: {
|
|
22673
23289
|
page: {
|
|
22674
23290
|
composition: {
|
|
@@ -22711,7 +23327,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22711
23327
|
},
|
|
22712
23328
|
{
|
|
22713
23329
|
id: 'page.template.applyMasterDetail',
|
|
22714
|
-
intentExamples: ['criar
|
|
23330
|
+
intentExamples: ['criar página master detail', 'setup master detail', 'tabela e formulário', 'master-detail'],
|
|
22715
23331
|
operation: 'create',
|
|
22716
23332
|
scope: 'GLOBAL',
|
|
22717
23333
|
valueType: 'OBJECT',
|
|
@@ -22720,7 +23336,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22720
23336
|
{ name: 'formId', type: 'STRING' },
|
|
22721
23337
|
{ name: 'resourcePath', type: 'STRING' },
|
|
22722
23338
|
],
|
|
22723
|
-
safetyNotes: '
|
|
23339
|
+
safetyNotes: 'Padrão master-detail: tabela (rowClick) -> formulario (resourceId) com transform pick-path payload.row.id.',
|
|
22724
23340
|
patchTemplate: {
|
|
22725
23341
|
page: {
|
|
22726
23342
|
widgets: [
|
|
@@ -22796,30 +23412,30 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22796
23412
|
},
|
|
22797
23413
|
hints: [
|
|
22798
23414
|
'praxis-dynamic-page e runtime de composicao: consome WidgetPageDefinition, renderiza widgets e mantem relacoes em page.composition.links.',
|
|
22799
|
-
'
|
|
23415
|
+
'Mutações agentic de página pertencem ao manifesto do praxis-page-builder; use este context pack como descoberta/runtime guidance.',
|
|
22800
23416
|
'WidgetPageDefinition inclui widgets, composition.links, state, context, layout, canvas, layoutPreset, layoutPresetOptions, grouping, slotAssignments, deviceLayouts e themePreset.',
|
|
22801
|
-
'page.canvas.items
|
|
23417
|
+
'page.canvas.items é um mapa por widget key, não um array; cada entrada guarda col, row, colSpan, rowSpan, zIndex e constraints opcionais.',
|
|
22802
23418
|
'Widgets e composition.links sao arrays; o patching deve fazer merge por key (widgets) e por id (links).',
|
|
22803
|
-
'Preferir
|
|
23419
|
+
'Preferir mudanças incrementais: alterar/estender em vez de substituir toda a página.',
|
|
22804
23420
|
'Para remover um item, envie {_remove: true} junto ao widget/link.',
|
|
22805
23421
|
'Para substituir um item inteiro, envie {_replace: true}.',
|
|
22806
23422
|
'Para alterar origem/destino de link, use {_beforeKey} com o id antigo.',
|
|
22807
23423
|
'Use keys estaveis para widgets e ids estaveis para links ao criar composicoes.',
|
|
22808
23424
|
'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
|
|
23425
|
+
'Praxis Table gera colunas dinamicamente a partir do resourcePath quando columns não forem definidas.',
|
|
23426
|
+
'Praxis Dynamic Form gera campos dinamicamente a partir do resourcePath quando config não for definida.',
|
|
23427
|
+
'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
23428
|
'Praxis List pode filtrar via config.dataSource.query (enviado para /filter).',
|
|
22813
23429
|
'Quando houver recursos secundarios (ex.: enderecos), use contextHints.addressResourcePath.',
|
|
22814
23430
|
'Exemplo master-detail: tabela emite rowClick -> form.resourceId via transform pick-path payload.row.id.',
|
|
22815
23431
|
'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
23432
|
'Ao criar widgets, use inputs minimos e complemente depois (evite inventar campos).',
|
|
22817
23433
|
'Quando widgets ja existem, interpretar ports de origem/destino antes de conectar.',
|
|
22818
|
-
'
|
|
22819
|
-
'
|
|
23434
|
+
'Intenção comum: criar página master-detail = criar tabela + criar formulário + conectar seleção via composition.links.',
|
|
23435
|
+
'Intenção comum: ajustar página existente = modificar apenas widgets/inputs necessários.',
|
|
22820
23436
|
'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
|
|
23437
|
+
'Exemplo de widget tabela (mínimo): { key:"masterTable", definition:{ id:"praxis-table", inputs:{ resourcePath:"/api/x" }}}',
|
|
23438
|
+
'Exemplo de widget formulário (mínimo): { key:"detailForm", definition:{ id:"praxis-dynamic-form", inputs:{ resourcePath:"/api/x", mode:"view" }}}',
|
|
22823
23439
|
'Se houver idField conhecido, use transform pick-path payload.row.{idField} em links canonicos.',
|
|
22824
23440
|
],
|
|
22825
23441
|
};
|
|
@@ -24947,7 +25563,7 @@ class DynamicWidgetLoaderDirective {
|
|
|
24947
25563
|
'praxis-crud': ['crudId', 'componentInstanceId', 'metadata'],
|
|
24948
25564
|
'praxis-dynamic-form': ['formId', 'componentInstanceId', 'resourcePath'],
|
|
24949
25565
|
'praxis-tabs': ['tabsId', 'componentInstanceId', 'configPersistenceStrategy', 'config'],
|
|
24950
|
-
'praxis-list': ['listId', 'componentInstanceId', 'config'],
|
|
25566
|
+
'praxis-list': ['listId', 'componentInstanceId', 'enableCustomization', 'config'],
|
|
24951
25567
|
'praxis-expansion': ['expansionId', 'componentInstanceId', 'config'],
|
|
24952
25568
|
'praxis-stepper': ['stepperId', 'componentInstanceId', 'config'],
|
|
24953
25569
|
'praxis-files-upload': ['filesUploadId', 'componentInstanceId', 'config'],
|
|
@@ -25307,28 +25923,160 @@ const BUILTIN_SHELL_PRESETS = {
|
|
|
25307
25923
|
},
|
|
25308
25924
|
'light-neutral': {
|
|
25309
25925
|
card: {
|
|
25310
|
-
background: '
|
|
25311
|
-
borderColor: '
|
|
25926
|
+
background: 'var(--md-sys-color-surface)',
|
|
25927
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 82%, transparent)',
|
|
25312
25928
|
borderRadius: '12px',
|
|
25313
|
-
shadow: '0 4px
|
|
25929
|
+
shadow: '0 4px 14px color-mix(in srgb, var(--md-sys-color-shadow, #000) 7%, transparent)',
|
|
25314
25930
|
},
|
|
25315
25931
|
header: {
|
|
25316
|
-
|
|
25317
|
-
|
|
25318
|
-
|
|
25932
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-container-low) 72%, transparent)',
|
|
25933
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 70%, transparent)',
|
|
25934
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
25935
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
25936
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
25937
|
+
},
|
|
25938
|
+
body: {
|
|
25939
|
+
background: 'var(--md-sys-color-surface)',
|
|
25940
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
25319
25941
|
},
|
|
25320
25942
|
},
|
|
25321
25943
|
graphite: {
|
|
25322
25944
|
card: {
|
|
25323
|
-
background: '
|
|
25324
|
-
borderColor: '
|
|
25325
|
-
borderRadius: '
|
|
25326
|
-
shadow: '0
|
|
25945
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface) 94%, var(--md-sys-color-surface-container-high) 6%)',
|
|
25946
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 74%, transparent)',
|
|
25947
|
+
borderRadius: '12px',
|
|
25948
|
+
shadow: '0 8px 22px color-mix(in srgb, var(--md-sys-color-shadow, #000) 11%, transparent)',
|
|
25327
25949
|
},
|
|
25328
25950
|
header: {
|
|
25329
|
-
|
|
25330
|
-
|
|
25331
|
-
|
|
25951
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-container-low) 76%, transparent)',
|
|
25952
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 62%, transparent)',
|
|
25953
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
25954
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
25955
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
25956
|
+
},
|
|
25957
|
+
body: {
|
|
25958
|
+
background: 'var(--md-sys-color-surface)',
|
|
25959
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
25960
|
+
},
|
|
25961
|
+
},
|
|
25962
|
+
frameless: {
|
|
25963
|
+
card: {
|
|
25964
|
+
background: 'transparent',
|
|
25965
|
+
borderColor: 'transparent',
|
|
25966
|
+
borderRadius: '0',
|
|
25967
|
+
shadow: 'none',
|
|
25968
|
+
},
|
|
25969
|
+
header: {
|
|
25970
|
+
background: 'transparent',
|
|
25971
|
+
borderColor: 'transparent',
|
|
25972
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
25973
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
25974
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
25975
|
+
},
|
|
25976
|
+
body: {
|
|
25977
|
+
background: 'transparent',
|
|
25978
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
25979
|
+
padding: '0',
|
|
25980
|
+
},
|
|
25981
|
+
},
|
|
25982
|
+
'data-panel': {
|
|
25983
|
+
card: {
|
|
25984
|
+
background: 'var(--md-sys-color-surface)',
|
|
25985
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 76%, transparent)',
|
|
25986
|
+
borderRadius: '10px',
|
|
25987
|
+
shadow: '0 5px 16px color-mix(in srgb, var(--md-sys-color-shadow, #000) 7%, transparent)',
|
|
25988
|
+
},
|
|
25989
|
+
header: {
|
|
25990
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-container-low) 64%, transparent)',
|
|
25991
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-outline-variant) 58%, transparent)',
|
|
25992
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
25993
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
25994
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
25995
|
+
},
|
|
25996
|
+
body: {
|
|
25997
|
+
background: 'var(--md-sys-color-surface)',
|
|
25998
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
25999
|
+
padding: '12px',
|
|
26000
|
+
},
|
|
26001
|
+
},
|
|
26002
|
+
'chart-panel': {
|
|
26003
|
+
card: {
|
|
26004
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface) 92%, var(--md-sys-color-primary-container) 8%)',
|
|
26005
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 22%, var(--md-sys-color-outline-variant) 62%)',
|
|
26006
|
+
borderRadius: '12px',
|
|
26007
|
+
shadow: '0 10px 24px color-mix(in srgb, var(--md-sys-color-shadow, #000) 9%, transparent)',
|
|
26008
|
+
},
|
|
26009
|
+
header: {
|
|
26010
|
+
background: 'color-mix(in srgb, var(--md-sys-color-primary-container) 22%, transparent)',
|
|
26011
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 20%, transparent)',
|
|
26012
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
26013
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
26014
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
26015
|
+
},
|
|
26016
|
+
body: {
|
|
26017
|
+
background: 'transparent',
|
|
26018
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
26019
|
+
padding: '12px',
|
|
26020
|
+
},
|
|
26021
|
+
},
|
|
26022
|
+
'metric-panel': {
|
|
26023
|
+
card: {
|
|
26024
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-container-low) 78%, var(--md-sys-color-primary-container) 22%)',
|
|
26025
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 24%, transparent)',
|
|
26026
|
+
borderRadius: '10px',
|
|
26027
|
+
shadow: '0 8px 18px color-mix(in srgb, var(--md-sys-color-shadow, #000) 8%, transparent)',
|
|
26028
|
+
},
|
|
26029
|
+
header: {
|
|
26030
|
+
background: 'transparent',
|
|
26031
|
+
borderColor: 'transparent',
|
|
26032
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
26033
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
26034
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
26035
|
+
},
|
|
26036
|
+
body: {
|
|
26037
|
+
background: 'transparent',
|
|
26038
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
26039
|
+
padding: '10px 12px',
|
|
26040
|
+
},
|
|
26041
|
+
},
|
|
26042
|
+
'executive-card': {
|
|
26043
|
+
card: {
|
|
26044
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface) 88%, var(--md-sys-color-surface-container-high) 12%)',
|
|
26045
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 28%, var(--md-sys-color-outline-variant) 50%)',
|
|
26046
|
+
borderRadius: '10px',
|
|
26047
|
+
shadow: '0 12px 28px color-mix(in srgb, var(--md-sys-color-shadow, #000) 13%, transparent)',
|
|
26048
|
+
},
|
|
26049
|
+
header: {
|
|
26050
|
+
background: 'color-mix(in srgb, var(--md-sys-color-primary-container) 18%, transparent)',
|
|
26051
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-primary) 22%, transparent)',
|
|
26052
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
26053
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
26054
|
+
iconColor: 'var(--md-sys-color-primary)',
|
|
26055
|
+
},
|
|
26056
|
+
body: {
|
|
26057
|
+
background: 'transparent',
|
|
26058
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
26059
|
+
padding: '14px',
|
|
26060
|
+
},
|
|
26061
|
+
},
|
|
26062
|
+
'filter-bar': {
|
|
26063
|
+
card: {
|
|
26064
|
+
background: 'color-mix(in srgb, var(--md-sys-color-surface-container-low) 74%, var(--md-sys-color-secondary-container) 26%)',
|
|
26065
|
+
borderColor: 'color-mix(in srgb, var(--md-sys-color-secondary) 24%, transparent)',
|
|
26066
|
+
borderRadius: '999px',
|
|
26067
|
+
shadow: '0 6px 18px color-mix(in srgb, var(--md-sys-color-shadow, #000) 7%, transparent)',
|
|
26068
|
+
},
|
|
26069
|
+
header: {
|
|
26070
|
+
background: 'transparent',
|
|
26071
|
+
borderColor: 'transparent',
|
|
26072
|
+
titleColor: 'var(--md-sys-color-on-surface)',
|
|
26073
|
+
subtitleColor: 'var(--md-sys-color-on-surface-variant)',
|
|
26074
|
+
iconColor: 'var(--md-sys-color-secondary)',
|
|
26075
|
+
},
|
|
26076
|
+
body: {
|
|
26077
|
+
background: 'transparent',
|
|
26078
|
+
textColor: 'var(--md-sys-color-on-surface)',
|
|
26079
|
+
padding: '10px 14px',
|
|
25332
26080
|
},
|
|
25333
26081
|
},
|
|
25334
26082
|
};
|
|
@@ -25404,6 +26152,11 @@ class WidgetShellComponent {
|
|
|
25404
26152
|
const builtins = this.buildWindowActions(custom);
|
|
25405
26153
|
return [...builtins, ...custom];
|
|
25406
26154
|
}
|
|
26155
|
+
displayActionIcon(action) {
|
|
26156
|
+
return action.pressed === true && action.pressedIcon
|
|
26157
|
+
? action.pressedIcon
|
|
26158
|
+
: action.icon;
|
|
26159
|
+
}
|
|
25407
26160
|
onAction(action, ev) {
|
|
25408
26161
|
ev.stopPropagation();
|
|
25409
26162
|
const handled = this.handleWindowAction(action);
|
|
@@ -25413,6 +26166,7 @@ class WidgetShellComponent {
|
|
|
25413
26166
|
command: action.command,
|
|
25414
26167
|
emit: action.emit,
|
|
25415
26168
|
payload,
|
|
26169
|
+
pressed: action.pressed,
|
|
25416
26170
|
action,
|
|
25417
26171
|
};
|
|
25418
26172
|
this.loader?.dispatchAction(event);
|
|
@@ -25603,14 +26357,16 @@ class WidgetShellComponent {
|
|
|
25603
26357
|
<button
|
|
25604
26358
|
[disabled]="action.disabled"
|
|
25605
26359
|
[matTooltip]="action.tooltip || ''"
|
|
25606
|
-
matTooltipPosition="
|
|
26360
|
+
matTooltipPosition="above"
|
|
25607
26361
|
[ngClass]="action.variant === 'outlined' ? 'pdx-action-outlined' : 'pdx-action-text'"
|
|
26362
|
+
[class.pdx-shell-action--pressed]="action.pressed === true"
|
|
25608
26363
|
mat-button
|
|
25609
26364
|
type="button"
|
|
26365
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
25610
26366
|
(click)="onAction(action, $event)"
|
|
25611
26367
|
>
|
|
25612
|
-
@if (action
|
|
25613
|
-
<mat-icon [praxisIcon]="
|
|
26368
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26369
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25614
26370
|
}
|
|
25615
26371
|
<span class="pdx-action-label">{{ action.label }}</span>
|
|
25616
26372
|
</button>
|
|
@@ -25620,13 +26376,15 @@ class WidgetShellComponent {
|
|
|
25620
26376
|
mat-icon-button
|
|
25621
26377
|
[disabled]="action.disabled"
|
|
25622
26378
|
[matTooltip]="action.tooltip || action.label || ''"
|
|
25623
|
-
matTooltipPosition="
|
|
26379
|
+
matTooltipPosition="above"
|
|
25624
26380
|
[attr.aria-label]="action.label || action.tooltip || action.id"
|
|
26381
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
26382
|
+
[class.pdx-shell-action--pressed]="action.pressed === true"
|
|
25625
26383
|
type="button"
|
|
25626
26384
|
(click)="onAction(action, $event)"
|
|
25627
26385
|
>
|
|
25628
|
-
@if (action
|
|
25629
|
-
<mat-icon [praxisIcon]="
|
|
26386
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26387
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25630
26388
|
}
|
|
25631
26389
|
</button>
|
|
25632
26390
|
}
|
|
@@ -25637,7 +26395,7 @@ class WidgetShellComponent {
|
|
|
25637
26395
|
mat-icon-button
|
|
25638
26396
|
type="button"
|
|
25639
26397
|
[matTooltip]="moreActionsLabel()"
|
|
25640
|
-
matTooltipPosition="
|
|
26398
|
+
matTooltipPosition="above"
|
|
25641
26399
|
[attr.aria-label]="moreActionsLabel()"
|
|
25642
26400
|
[matMenuTriggerFor]="overflowMenu"
|
|
25643
26401
|
(click)="$event.stopPropagation()"
|
|
@@ -25653,13 +26411,15 @@ class WidgetShellComponent {
|
|
|
25653
26411
|
mat-icon-button
|
|
25654
26412
|
[disabled]="action.disabled"
|
|
25655
26413
|
[matTooltip]="action.tooltip || action.label || ''"
|
|
25656
|
-
matTooltipPosition="
|
|
26414
|
+
matTooltipPosition="above"
|
|
25657
26415
|
[attr.aria-label]="action.label || action.tooltip || action.id"
|
|
26416
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
26417
|
+
[class.pdx-shell-action--pressed]="action.pressed === true"
|
|
25658
26418
|
type="button"
|
|
25659
26419
|
(click)="onAction(action, $event)"
|
|
25660
26420
|
>
|
|
25661
|
-
@if (action
|
|
25662
|
-
<mat-icon [praxisIcon]="
|
|
26421
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26422
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25663
26423
|
}
|
|
25664
26424
|
</button>
|
|
25665
26425
|
}
|
|
@@ -25670,10 +26430,11 @@ class WidgetShellComponent {
|
|
|
25670
26430
|
@for (action of overflowHeaderActions; track action.id) {
|
|
25671
26431
|
<button
|
|
25672
26432
|
mat-menu-item
|
|
26433
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
25673
26434
|
(click)="onAction(action, $event)"
|
|
25674
26435
|
>
|
|
25675
|
-
@if (action
|
|
25676
|
-
<mat-icon [praxisIcon]="
|
|
26436
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26437
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25677
26438
|
}
|
|
25678
26439
|
<span>{{ action.label || action.id }}</span>
|
|
25679
26440
|
</button>
|
|
@@ -25688,7 +26449,7 @@ class WidgetShellComponent {
|
|
|
25688
26449
|
@if (expanded || fullscreen) {
|
|
25689
26450
|
<div class="pdx-shell-backdrop" (click)="closeOverlay()"></div>
|
|
25690
26451
|
}
|
|
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 });
|
|
26452
|
+
`, 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
26453
|
}
|
|
25693
26454
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: WidgetShellComponent, decorators: [{
|
|
25694
26455
|
type: Component,
|
|
@@ -25747,14 +26508,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
25747
26508
|
<button
|
|
25748
26509
|
[disabled]="action.disabled"
|
|
25749
26510
|
[matTooltip]="action.tooltip || ''"
|
|
25750
|
-
matTooltipPosition="
|
|
26511
|
+
matTooltipPosition="above"
|
|
25751
26512
|
[ngClass]="action.variant === 'outlined' ? 'pdx-action-outlined' : 'pdx-action-text'"
|
|
26513
|
+
[class.pdx-shell-action--pressed]="action.pressed === true"
|
|
25752
26514
|
mat-button
|
|
25753
26515
|
type="button"
|
|
26516
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
25754
26517
|
(click)="onAction(action, $event)"
|
|
25755
26518
|
>
|
|
25756
|
-
@if (action
|
|
25757
|
-
<mat-icon [praxisIcon]="
|
|
26519
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26520
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25758
26521
|
}
|
|
25759
26522
|
<span class="pdx-action-label">{{ action.label }}</span>
|
|
25760
26523
|
</button>
|
|
@@ -25764,13 +26527,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
25764
26527
|
mat-icon-button
|
|
25765
26528
|
[disabled]="action.disabled"
|
|
25766
26529
|
[matTooltip]="action.tooltip || action.label || ''"
|
|
25767
|
-
matTooltipPosition="
|
|
26530
|
+
matTooltipPosition="above"
|
|
25768
26531
|
[attr.aria-label]="action.label || action.tooltip || action.id"
|
|
26532
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
26533
|
+
[class.pdx-shell-action--pressed]="action.pressed === true"
|
|
25769
26534
|
type="button"
|
|
25770
26535
|
(click)="onAction(action, $event)"
|
|
25771
26536
|
>
|
|
25772
|
-
@if (action
|
|
25773
|
-
<mat-icon [praxisIcon]="
|
|
26537
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26538
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25774
26539
|
}
|
|
25775
26540
|
</button>
|
|
25776
26541
|
}
|
|
@@ -25781,7 +26546,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
25781
26546
|
mat-icon-button
|
|
25782
26547
|
type="button"
|
|
25783
26548
|
[matTooltip]="moreActionsLabel()"
|
|
25784
|
-
matTooltipPosition="
|
|
26549
|
+
matTooltipPosition="above"
|
|
25785
26550
|
[attr.aria-label]="moreActionsLabel()"
|
|
25786
26551
|
[matMenuTriggerFor]="overflowMenu"
|
|
25787
26552
|
(click)="$event.stopPropagation()"
|
|
@@ -25797,13 +26562,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
25797
26562
|
mat-icon-button
|
|
25798
26563
|
[disabled]="action.disabled"
|
|
25799
26564
|
[matTooltip]="action.tooltip || action.label || ''"
|
|
25800
|
-
matTooltipPosition="
|
|
26565
|
+
matTooltipPosition="above"
|
|
25801
26566
|
[attr.aria-label]="action.label || action.tooltip || action.id"
|
|
26567
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
26568
|
+
[class.pdx-shell-action--pressed]="action.pressed === true"
|
|
25802
26569
|
type="button"
|
|
25803
26570
|
(click)="onAction(action, $event)"
|
|
25804
26571
|
>
|
|
25805
|
-
@if (action
|
|
25806
|
-
<mat-icon [praxisIcon]="
|
|
26572
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26573
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25807
26574
|
}
|
|
25808
26575
|
</button>
|
|
25809
26576
|
}
|
|
@@ -25814,10 +26581,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
25814
26581
|
@for (action of overflowHeaderActions; track action.id) {
|
|
25815
26582
|
<button
|
|
25816
26583
|
mat-menu-item
|
|
26584
|
+
[attr.aria-pressed]="action.pressed == null ? null : action.pressed"
|
|
25817
26585
|
(click)="onAction(action, $event)"
|
|
25818
26586
|
>
|
|
25819
|
-
@if (action
|
|
25820
|
-
<mat-icon [praxisIcon]="
|
|
26587
|
+
@if (displayActionIcon(action); as actionIcon) {
|
|
26588
|
+
<mat-icon [praxisIcon]="actionIcon"></mat-icon>
|
|
25821
26589
|
}
|
|
25822
26590
|
<span>{{ action.label || action.id }}</span>
|
|
25823
26591
|
</button>
|
|
@@ -25832,7 +26600,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
25832
26600
|
@if (expanded || fullscreen) {
|
|
25833
26601
|
<div class="pdx-shell-backdrop" (click)="closeOverlay()"></div>
|
|
25834
26602
|
}
|
|
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"] }]
|
|
26603
|
+
`, 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
26604
|
}], propDecorators: { hostCollapsed: [{
|
|
25837
26605
|
type: HostBinding,
|
|
25838
26606
|
args: ['class.pdx-widget-shell-collapsed']
|
|
@@ -26010,7 +26778,7 @@ const BUILTIN_PAGE_THEME_PRESETS = {
|
|
|
26010
26778
|
id: 'analytics-calm',
|
|
26011
26779
|
label: 'Analytics Calm',
|
|
26012
26780
|
description: 'Superfícies leves, ênfase clara em dados e motion sutil.',
|
|
26013
|
-
shellPreset: '
|
|
26781
|
+
shellPreset: 'chart-panel',
|
|
26014
26782
|
chartThemePreset: 'executive',
|
|
26015
26783
|
density: 'comfortable',
|
|
26016
26784
|
motion: 'subtle',
|
|
@@ -26027,7 +26795,7 @@ const BUILTIN_PAGE_THEME_PRESETS = {
|
|
|
26027
26795
|
id: 'workspace-balanced',
|
|
26028
26796
|
label: 'Workspace Balanced',
|
|
26029
26797
|
description: 'Equilíbrio entre densidade operacional e clareza visual.',
|
|
26030
|
-
shellPreset: '
|
|
26798
|
+
shellPreset: 'data-panel',
|
|
26031
26799
|
chartThemePreset: 'default',
|
|
26032
26800
|
density: 'comfortable',
|
|
26033
26801
|
motion: 'subtle',
|
|
@@ -26044,7 +26812,7 @@ const BUILTIN_PAGE_THEME_PRESETS = {
|
|
|
26044
26812
|
id: 'ops-monitoring',
|
|
26045
26813
|
label: 'Ops Monitoring',
|
|
26046
26814
|
description: 'Contraste um pouco maior para leitura rápida de status, filas e alertas.',
|
|
26047
|
-
shellPreset: '
|
|
26815
|
+
shellPreset: 'data-panel',
|
|
26048
26816
|
chartThemePreset: 'compact',
|
|
26049
26817
|
density: 'compact',
|
|
26050
26818
|
motion: 'subtle',
|
|
@@ -26061,7 +26829,7 @@ const BUILTIN_PAGE_THEME_PRESETS = {
|
|
|
26061
26829
|
id: 'executive-command-center',
|
|
26062
26830
|
label: 'Executive Command Center',
|
|
26063
26831
|
description: 'Superfície premium para dashboards corporativos com hierarquia executiva, dados densos e ações de decisão.',
|
|
26064
|
-
shellPreset: '
|
|
26832
|
+
shellPreset: 'executive-card',
|
|
26065
26833
|
chartThemePreset: 'executive',
|
|
26066
26834
|
density: 'compact',
|
|
26067
26835
|
motion: 'subtle',
|
|
@@ -31033,9 +31801,18 @@ class DynamicWidgetPageComponent {
|
|
|
31033
31801
|
if (!widget.shell) {
|
|
31034
31802
|
return runtimeEnrichedWidget;
|
|
31035
31803
|
}
|
|
31804
|
+
const widgetTemplateContext = {
|
|
31805
|
+
...templateContext,
|
|
31806
|
+
widget: {
|
|
31807
|
+
key: widget.key,
|
|
31808
|
+
definition: this.cloneStateValues(widget.definition),
|
|
31809
|
+
inputs: this.cloneStateValues(widget.definition?.inputs || {}),
|
|
31810
|
+
shell: this.cloneStateValues(widget.shell || {}),
|
|
31811
|
+
},
|
|
31812
|
+
};
|
|
31036
31813
|
return {
|
|
31037
31814
|
...runtimeEnrichedWidget,
|
|
31038
|
-
shell: this.resolveTemplate(widget.shell,
|
|
31815
|
+
shell: this.resolveTemplate(widget.shell, widgetTemplateContext),
|
|
31039
31816
|
};
|
|
31040
31817
|
});
|
|
31041
31818
|
}
|
|
@@ -31412,6 +32189,8 @@ class DynamicWidgetPageComponent {
|
|
|
31412
32189
|
void this.confirmAndRemoveWidget(fromKey);
|
|
31413
32190
|
return;
|
|
31414
32191
|
}
|
|
32192
|
+
if (this.handleToggleInputCommand(fromKey, evt))
|
|
32193
|
+
return;
|
|
31415
32194
|
if (this.handleSetInputCommand(fromKey, evt))
|
|
31416
32195
|
return;
|
|
31417
32196
|
const output = evt?.emit || (evt?.id ? `shell:${evt.id}` : undefined);
|
|
@@ -31436,6 +32215,32 @@ class DynamicWidgetPageComponent {
|
|
|
31436
32215
|
this.widgets.set(widgets);
|
|
31437
32216
|
return true;
|
|
31438
32217
|
}
|
|
32218
|
+
handleToggleInputCommand(fromKey, evt) {
|
|
32219
|
+
if (evt?.command !== 'pdx:toggle-input')
|
|
32220
|
+
return false;
|
|
32221
|
+
const payload = evt?.payload;
|
|
32222
|
+
const input = typeof payload?.input === 'string' ? payload.input.trim() : '';
|
|
32223
|
+
if (!input)
|
|
32224
|
+
return true;
|
|
32225
|
+
const page = this.ensurePageDefinition();
|
|
32226
|
+
const widget = (page.widgets || []).find((candidate) => candidate.key === fromKey);
|
|
32227
|
+
const currentValue = this.lookup(widget?.definition?.inputs || {}, input);
|
|
32228
|
+
const nextValue = !Boolean(currentValue);
|
|
32229
|
+
const result = this.applyWidgetInputPatchToPage(page, fromKey, {
|
|
32230
|
+
ownerWidgetKey: fromKey,
|
|
32231
|
+
sourceComponentId: 'widget-shell',
|
|
32232
|
+
output: evt.emit || `shell:${evt.id}`,
|
|
32233
|
+
payload: {
|
|
32234
|
+
inputPatch: {
|
|
32235
|
+
[input]: nextValue,
|
|
32236
|
+
},
|
|
32237
|
+
},
|
|
32238
|
+
});
|
|
32239
|
+
if (result.changed) {
|
|
32240
|
+
this.applyPageUpdate(result.page, true, undefined, false, true);
|
|
32241
|
+
}
|
|
32242
|
+
return true;
|
|
32243
|
+
}
|
|
31439
32244
|
mergeOrder(keys) {
|
|
31440
32245
|
const seen = new Set();
|
|
31441
32246
|
const out = [];
|
|
@@ -33974,24 +34779,24 @@ const PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA = {
|
|
|
33974
34779
|
selector: 'praxis-dynamic-page',
|
|
33975
34780
|
component: DynamicWidgetPageComponent,
|
|
33976
34781
|
friendlyName: 'Dynamic Page',
|
|
33977
|
-
description: '
|
|
34782
|
+
description: 'Página dinâmica com widgets e composition.links em layout responsivo, incluindo mediação runtime para rich-content hospedado.',
|
|
33978
34783
|
icon: 'dashboard',
|
|
33979
34784
|
inputs: [
|
|
33980
|
-
{ name: 'page', type: 'WidgetPageDefinition', description: '
|
|
34785
|
+
{ name: 'page', type: 'WidgetPageDefinition', description: 'Definição da página (widgets, layout e composition.links).' },
|
|
33981
34786
|
{ 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
|
|
34787
|
+
{ name: 'strictValidation', type: 'boolean', description: 'Habilita validação estrita de inputs.' },
|
|
34788
|
+
{ name: 'enableCustomization', type: 'boolean', description: 'Habilita affordances de edição na página.' },
|
|
34789
|
+
{ name: 'showPageSettingsButton', type: 'boolean', description: 'Exibe botão de configuração da página.' },
|
|
33985
34790
|
{ 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
|
|
34791
|
+
{ name: 'pageEditorComponent', type: 'Type<any>', description: 'Override do editor de configuração da página.' },
|
|
34792
|
+
{ name: 'autoPersist', type: 'boolean', description: 'Ativa persistência automática (load/save) da página.' },
|
|
34793
|
+
{ name: 'pageIdentity', type: 'PageIdentity', description: 'Identidade de persistência (tenant/usuário/rota/locale).' },
|
|
34794
|
+
{ name: 'componentInstanceId', type: 'string', description: 'Identificador opcional para múltiplas instâncias na mesma rota.' },
|
|
33990
34795
|
],
|
|
33991
34796
|
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
|
|
34797
|
+
{ name: 'pageChange', type: 'WidgetPageDefinition', description: 'Emitido ao alterar a definição da página.' },
|
|
34798
|
+
{ name: 'widgetEvent', type: 'WidgetEventEnvelope', description: 'Reemite eventos dos widgets filhos com ownerWidgetKey para integrações do host.' },
|
|
34799
|
+
{ name: 'widgetDiagnosticsChange', type: 'Record<string, WidgetResolutionDiagnostic>', description: 'Emitido quando o runtime detecta widgets resolvidos ou falhos durante o carregamento dinâmico.' },
|
|
33995
34800
|
],
|
|
33996
34801
|
tags: ['widget', 'page', 'dynamic', 'layout'],
|
|
33997
34802
|
lib: '@praxisui/core',
|
|
@@ -35244,15 +36049,9 @@ function applyLocalCustomizations$1(base, local) {
|
|
|
35244
36049
|
// Server authority on identity/core props
|
|
35245
36050
|
const authoritative = {
|
|
35246
36051
|
name: base.name,
|
|
35247
|
-
label: base.label,
|
|
35248
36052
|
type: base.type,
|
|
35249
36053
|
controlType: base.controlType,
|
|
35250
36054
|
required: base.required,
|
|
35251
|
-
hint: base.hint,
|
|
35252
|
-
helpText: base.helpText,
|
|
35253
|
-
description: base.description,
|
|
35254
|
-
icon: base.icon,
|
|
35255
|
-
iconPosition: base.iconPosition,
|
|
35256
36055
|
endpoint: base.endpoint,
|
|
35257
36056
|
resourcePath: base.resourcePath,
|
|
35258
36057
|
optionSource: base.optionSource,
|
|
@@ -35288,12 +36087,13 @@ function applyLocalCustomizations$1(base, local) {
|
|
|
35288
36087
|
? serverBackedLocal.queryParams
|
|
35289
36088
|
: base.queryParams,
|
|
35290
36089
|
};
|
|
35291
|
-
|
|
36090
|
+
const merged = {
|
|
35292
36091
|
...base,
|
|
35293
36092
|
...serverBackedLocal,
|
|
35294
36093
|
...authoritative,
|
|
35295
36094
|
...preserved,
|
|
35296
36095
|
};
|
|
36096
|
+
return applyServerOwnedFieldSemantics(merged, base);
|
|
35297
36097
|
}
|
|
35298
36098
|
function mergeServerVisibilityFlag(serverValue) {
|
|
35299
36099
|
return serverValue === true ? true : undefined;
|
|
@@ -35758,4 +36558,4 @@ function provideHookWhitelist(allowed) {
|
|
|
35758
36558
|
* Generated bundle index. Do not edit.
|
|
35759
36559
|
*/
|
|
35760
36560
|
|
|
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 };
|
|
36561
|
+
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, isPraxisPresentationVisualizationTableSafe, 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, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeResourceAvailabilityReasonCode, normalizeStart, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, 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, resolveFieldPresentation, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToJson, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withMessage, withPraxisHttpLoading };
|