@praxisui/core 9.0.0-beta.17 → 9.0.0-beta.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/component-registry.json +62 -62
- package/fesm2022/praxisui-core.mjs +128 -128
- package/package.json +1 -1
- package/types/praxisui-core.d.ts +3 -3
|
@@ -6444,7 +6444,7 @@ const GLOBAL_SURFACE_SERVICE = new InjectionToken('GLOBAL_SURFACE_SERVICE');
|
|
|
6444
6444
|
|
|
6445
6445
|
const dialogBaseFields = [
|
|
6446
6446
|
{ key: 'message', label: 'Mensagem', type: 'textarea', rows: 2, placeholder: 'Texto principal' },
|
|
6447
|
-
{ key: 'title', label: '
|
|
6447
|
+
{ key: 'title', label: 'Título', type: 'text', placeholder: 'Título do diálogo' },
|
|
6448
6448
|
{
|
|
6449
6449
|
key: 'themeColor',
|
|
6450
6450
|
label: 'Tema',
|
|
@@ -6455,13 +6455,13 @@ const dialogBaseFields = [
|
|
|
6455
6455
|
{ value: 'dark', label: 'Dark' },
|
|
6456
6456
|
],
|
|
6457
6457
|
},
|
|
6458
|
-
{ key: 'positionTop', label: '
|
|
6459
|
-
{ key: 'positionRight', label: '
|
|
6460
|
-
{ key: 'positionBottom', label: '
|
|
6461
|
-
{ 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' },
|
|
6462
6462
|
{
|
|
6463
6463
|
key: 'actionsLayout',
|
|
6464
|
-
label: 'Layout das
|
|
6464
|
+
label: 'Layout das ações',
|
|
6465
6465
|
type: 'select',
|
|
6466
6466
|
options: [
|
|
6467
6467
|
{ value: 'start', label: 'Start' },
|
|
@@ -6472,7 +6472,7 @@ const dialogBaseFields = [
|
|
|
6472
6472
|
},
|
|
6473
6473
|
{
|
|
6474
6474
|
key: 'animationType',
|
|
6475
|
-
label: '
|
|
6475
|
+
label: 'Animação',
|
|
6476
6476
|
type: 'select',
|
|
6477
6477
|
options: [
|
|
6478
6478
|
{ value: 'translate', label: 'Translate' },
|
|
@@ -6484,7 +6484,7 @@ const dialogBaseFields = [
|
|
|
6484
6484
|
},
|
|
6485
6485
|
{
|
|
6486
6486
|
key: 'animationDirection',
|
|
6487
|
-
label: '
|
|
6487
|
+
label: 'Direção animação',
|
|
6488
6488
|
type: 'select',
|
|
6489
6489
|
options: [
|
|
6490
6490
|
{ value: 'up', label: 'Up' },
|
|
@@ -6493,13 +6493,13 @@ const dialogBaseFields = [
|
|
|
6493
6493
|
{ value: 'right', label: 'Right' },
|
|
6494
6494
|
],
|
|
6495
6495
|
},
|
|
6496
|
-
{ key: 'animationDuration', label: '
|
|
6496
|
+
{ key: 'animationDuration', label: 'Duração (ms)', type: 'number', placeholder: '300' },
|
|
6497
6497
|
{ key: 'width', label: 'Largura', type: 'text', placeholder: '480px' },
|
|
6498
6498
|
{ key: 'height', label: 'Altura', type: 'text', placeholder: 'auto' },
|
|
6499
|
-
{ key: 'minWidth', label: 'Largura
|
|
6500
|
-
{ key: 'maxWidth', label: 'Largura
|
|
6501
|
-
{ key: 'minHeight', label: 'Altura
|
|
6502
|
-
{ 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' },
|
|
6503
6503
|
{ key: 'disableClose', label: 'Bloquear fechar', type: 'toggle' },
|
|
6504
6504
|
{ key: 'hasBackdrop', label: 'Backdrop', type: 'toggle' },
|
|
6505
6505
|
{ key: 'closeOnBackdropClick', label: 'Fechar ao clicar no backdrop', type: 'toggle' },
|
|
@@ -6527,7 +6527,7 @@ const dialogFieldsWithModeDependency = dialogFieldsWithoutMessage.map((field) =>
|
|
|
6527
6527
|
...field,
|
|
6528
6528
|
dependsOnKey: field.dependsOnKey ?? 'mode',
|
|
6529
6529
|
dependsOnValue: field.dependsOnValue ?? 'true',
|
|
6530
|
-
hint: field.hint ?? '
|
|
6530
|
+
hint: field.hint ?? 'Disponível quando "Usar diálogo" estiver ativo.',
|
|
6531
6531
|
}));
|
|
6532
6532
|
const GLOBAL_ACTION_UI_SCHEMAS = [
|
|
6533
6533
|
{
|
|
@@ -6575,7 +6575,7 @@ const GLOBAL_ACTION_UI_SCHEMAS = [
|
|
|
6575
6575
|
required: true,
|
|
6576
6576
|
placeholder: 'Texto exibido no alerta simples',
|
|
6577
6577
|
},
|
|
6578
|
-
{ key: 'mode', label: 'Usar
|
|
6578
|
+
{ key: 'mode', label: 'Usar diálogo (avançado)', type: 'toggle' },
|
|
6579
6579
|
...dialogFieldsWithModeDependency,
|
|
6580
6580
|
],
|
|
6581
6581
|
},
|
|
@@ -6594,19 +6594,19 @@ const GLOBAL_ACTION_UI_SCHEMAS = [
|
|
|
6594
6594
|
fields: [
|
|
6595
6595
|
...dialogBaseFields,
|
|
6596
6596
|
{ key: 'placeholder', label: 'Placeholder', type: 'text' },
|
|
6597
|
-
{ key: 'defaultValue', label: 'Valor
|
|
6597
|
+
{ key: 'defaultValue', label: 'Valor padrão', type: 'text' },
|
|
6598
6598
|
{ key: 'okLabel', label: 'Texto OK', type: 'text' },
|
|
6599
6599
|
{ key: 'cancelLabel', label: 'Texto cancelar', type: 'text' },
|
|
6600
6600
|
],
|
|
6601
6601
|
},
|
|
6602
6602
|
{
|
|
6603
6603
|
id: 'dialog.open',
|
|
6604
|
-
label: 'Abrir
|
|
6604
|
+
label: 'Abrir diálogo',
|
|
6605
6605
|
fields: [
|
|
6606
6606
|
...dialogBaseFields,
|
|
6607
6607
|
{
|
|
6608
6608
|
key: 'contentType',
|
|
6609
|
-
label: 'Tipo de
|
|
6609
|
+
label: 'Tipo de conteúdo',
|
|
6610
6610
|
type: 'select',
|
|
6611
6611
|
options: [
|
|
6612
6612
|
{ value: 'template', label: 'Template' },
|
|
@@ -6627,7 +6627,7 @@ const GLOBAL_ACTION_UI_SCHEMAS = [
|
|
|
6627
6627
|
{ key: 'message', label: 'Mensagem', type: 'text' },
|
|
6628
6628
|
{
|
|
6629
6629
|
key: 'level',
|
|
6630
|
-
label: '
|
|
6630
|
+
label: 'Nível',
|
|
6631
6631
|
type: 'select',
|
|
6632
6632
|
options: [
|
|
6633
6633
|
{ value: 'log', label: 'log' },
|
|
@@ -17054,7 +17054,7 @@ const EVENT_REGISTRATION_EDITORIAL_TEMPLATE = {
|
|
|
17054
17054
|
content: [
|
|
17055
17055
|
{
|
|
17056
17056
|
type: 'text',
|
|
17057
|
-
text: 'Ao enviar a
|
|
17057
|
+
text: 'Ao enviar a inscrição, o participante reconhece o tratamento dos dados para credenciamento, comunicações e operação do evento.',
|
|
17058
17058
|
},
|
|
17059
17059
|
],
|
|
17060
17060
|
}),
|
|
@@ -17195,7 +17195,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17195
17195
|
wrap: true,
|
|
17196
17196
|
items: [
|
|
17197
17197
|
{ type: 'badge', label: 'onboarding' },
|
|
17198
|
-
{ type: 'text', text: '
|
|
17198
|
+
{ type: 'text', text: 'Admissão, conferência e preferências iniciais' },
|
|
17199
17199
|
],
|
|
17200
17200
|
},
|
|
17201
17201
|
}, {
|
|
@@ -17204,7 +17204,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17204
17204
|
subtitle: 'Resumo do fluxo',
|
|
17205
17205
|
content: [
|
|
17206
17206
|
{ type: 'text', text: 'Dados pessoais e de contato.' },
|
|
17207
|
-
{ type: 'text', text: '
|
|
17207
|
+
{ type: 'text', text: 'Preferências operacionais iniciais.' },
|
|
17208
17208
|
{ type: 'text', text: 'Anexos e termos obrigatorios.' },
|
|
17209
17209
|
],
|
|
17210
17210
|
}),
|
|
@@ -17236,7 +17236,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17236
17236
|
id: 'operations',
|
|
17237
17237
|
appearance: 'step',
|
|
17238
17238
|
stepLabel: '2',
|
|
17239
|
-
title: '
|
|
17239
|
+
title: 'Operação inicial',
|
|
17240
17240
|
description: 'Dados para preparacao do ambiente e comunicacao inicial.',
|
|
17241
17241
|
rows: [
|
|
17242
17242
|
{
|
|
@@ -17262,7 +17262,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17262
17262
|
title: 'Uso interno',
|
|
17263
17263
|
subtitle: 'Antes do envio',
|
|
17264
17264
|
badge: 'info',
|
|
17265
|
-
description: 'As
|
|
17265
|
+
description: 'As informações deste fluxo são usadas exclusivamente para cadastro interno, provisionamento e comunicação de onboarding.',
|
|
17266
17266
|
}),
|
|
17267
17267
|
formBlocksBeforeActionsPlacement: 'afterSections',
|
|
17268
17268
|
actions: {
|
|
@@ -17311,7 +17311,7 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17311
17311
|
required: true,
|
|
17312
17312
|
options: [
|
|
17313
17313
|
{ text: 'Presencial', value: 'ONSITE' },
|
|
17314
|
-
{ text: '
|
|
17314
|
+
{ text: 'Híbrido', value: 'HYBRID' },
|
|
17315
17315
|
{ text: 'Remoto', value: 'REMOTE' },
|
|
17316
17316
|
],
|
|
17317
17317
|
},
|
|
@@ -17322,22 +17322,22 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE = {
|
|
|
17322
17322
|
required: true,
|
|
17323
17323
|
options: [
|
|
17324
17324
|
{ text: 'Sim', value: 'YES' },
|
|
17325
|
-
{ text: '
|
|
17325
|
+
{ text: 'Não', value: 'NO' },
|
|
17326
17326
|
],
|
|
17327
17327
|
},
|
|
17328
17328
|
{
|
|
17329
17329
|
name: 'shippingAddress',
|
|
17330
|
-
label: '
|
|
17330
|
+
label: 'Endereço para envio',
|
|
17331
17331
|
controlType: 'textarea',
|
|
17332
17332
|
},
|
|
17333
17333
|
{
|
|
17334
17334
|
name: 'accessibilityNotes',
|
|
17335
|
-
label: '
|
|
17335
|
+
label: 'Observações de acessibilidade ou preferências',
|
|
17336
17336
|
controlType: 'textarea',
|
|
17337
17337
|
},
|
|
17338
17338
|
{
|
|
17339
17339
|
name: 'privacyConsent',
|
|
17340
|
-
label: 'Confirmo
|
|
17340
|
+
label: 'Confirmo ciência sobre o tratamento dos meus dados no processo de onboarding.',
|
|
17341
17341
|
controlType: 'checkbox',
|
|
17342
17342
|
selectionMode: 'boolean',
|
|
17343
17343
|
variant: 'consent',
|
|
@@ -17410,7 +17410,7 @@ const EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE = {
|
|
|
17410
17410
|
id: 'operations',
|
|
17411
17411
|
appearance: 'step',
|
|
17412
17412
|
stepLabel: '2',
|
|
17413
|
-
title: '
|
|
17413
|
+
title: 'Operação inicial',
|
|
17414
17414
|
description: 'Configure os recursos necessarios para o primeiro dia.',
|
|
17415
17415
|
rows: [
|
|
17416
17416
|
{
|
|
@@ -17520,17 +17520,17 @@ const EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE = {
|
|
|
17520
17520
|
options: [
|
|
17521
17521
|
{ text: 'Presencial', value: 'Presencial' },
|
|
17522
17522
|
{ text: 'Remoto', value: 'Remoto' },
|
|
17523
|
-
{ text: '
|
|
17523
|
+
{ text: 'Híbrido', value: 'Híbrido' },
|
|
17524
17524
|
],
|
|
17525
17525
|
},
|
|
17526
17526
|
{
|
|
17527
17527
|
name: 'accessibilityNotes',
|
|
17528
|
-
label: '
|
|
17528
|
+
label: 'Observações adicionais',
|
|
17529
17529
|
controlType: 'textarea',
|
|
17530
17530
|
},
|
|
17531
17531
|
{
|
|
17532
17532
|
name: 'privacyConsent',
|
|
17533
|
-
label: 'Confirmo
|
|
17533
|
+
label: 'Confirmo ciência sobre o tratamento dos meus dados no processo de onboarding.',
|
|
17534
17534
|
controlType: 'checkbox',
|
|
17535
17535
|
selectionMode: 'boolean',
|
|
17536
17536
|
variant: 'consent',
|
|
@@ -17546,7 +17546,7 @@ const PRIVACY_CONSENT_EDITORIAL_TEMPLATE = {
|
|
|
17546
17546
|
version: '1.0.0',
|
|
17547
17547
|
metadata: {
|
|
17548
17548
|
title: 'Privacy Consent',
|
|
17549
|
-
description: 'Template focado em aceite
|
|
17549
|
+
description: 'Template focado em aceite explícito, base legal, preferências de comunicação e registro de consentimento.',
|
|
17550
17550
|
category: 'consent',
|
|
17551
17551
|
tags: ['privacy', 'consent', 'compliance', 'legal'],
|
|
17552
17552
|
source: 'catalog',
|
|
@@ -17568,13 +17568,13 @@ const PRIVACY_CONSENT_EDITORIAL_TEMPLATE = {
|
|
|
17568
17568
|
title: 'Consentimento e tratamento de dados',
|
|
17569
17569
|
subtitle: 'Template regulatorio',
|
|
17570
17570
|
badge: 'info',
|
|
17571
|
-
description: 'Use este template quando o objetivo principal do fluxo for registrar
|
|
17571
|
+
description: 'Use este template quando o objetivo principal do fluxo for registrar ciência, aceite e preferências relacionadas a privacidade.',
|
|
17572
17572
|
}),
|
|
17573
17573
|
sections: [
|
|
17574
17574
|
{
|
|
17575
17575
|
id: 'consent',
|
|
17576
17576
|
appearance: 'card',
|
|
17577
|
-
title: '
|
|
17577
|
+
title: 'Preferências e consentimentos',
|
|
17578
17578
|
description: 'Aceites explicitos e canais opcionais de comunicacao.',
|
|
17579
17579
|
rows: [
|
|
17580
17580
|
{
|
|
@@ -17657,7 +17657,7 @@ const PRIVACY_CONSENT_EDITORIAL_TEMPLATE = {
|
|
|
17657
17657
|
},
|
|
17658
17658
|
{
|
|
17659
17659
|
name: 'consentNotes',
|
|
17660
|
-
label: '
|
|
17660
|
+
label: 'Observações adicionais',
|
|
17661
17661
|
controlType: 'textarea',
|
|
17662
17662
|
},
|
|
17663
17663
|
],
|
|
@@ -18416,8 +18416,8 @@ const EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION = {
|
|
|
18416
18416
|
fields: [
|
|
18417
18417
|
{ key: 'selectedEquipment', label: 'Equipamentos', valuePath: 'formData.selectedEquipment', hideWhenEmpty: true },
|
|
18418
18418
|
{ key: 'needsEquipment', label: 'Necessita envio de equipamento', valuePath: 'formData.needsEquipment', hideWhenEmpty: true },
|
|
18419
|
-
{ key: 'shippingAddress', label: '
|
|
18420
|
-
{ key: 'accessibilityNotes', label: '
|
|
18419
|
+
{ key: 'shippingAddress', label: 'Endereço para envio', valuePath: 'formData.shippingAddress', hideWhenEmpty: true },
|
|
18420
|
+
{ key: 'accessibilityNotes', label: 'Observações adicionais', valuePath: 'formData.accessibilityNotes', hideWhenEmpty: true },
|
|
18421
18421
|
],
|
|
18422
18422
|
},
|
|
18423
18423
|
],
|
|
@@ -21251,7 +21251,7 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21251
21251
|
'Detalhes específicos de cada controle (ex: opções de datepicker, máscaras específicas) devem ser consultados nos catálogos de microcomponentes.',
|
|
21252
21252
|
'POLICY: Arrays e objetos (ex: options, validators) devem sofrer merge/append, nunca substituição completa sem confirmação.',
|
|
21253
21253
|
'Não gere função para conditionalDisplay/conditionalRequired. Use Json Logic serializável; funções ficam restritas a transforms e validators customizados.',
|
|
21254
|
-
'POLICY: Campos auxiliares do host devem usar source=local ou transient=true em FieldMetadata;
|
|
21254
|
+
'POLICY: Campos auxiliares do host devem usar source=local ou transient=true em FieldMetadata; não invente campos no DTO/backend quando eles não devem participar do payload persistido.',
|
|
21255
21255
|
'POLICY: formSubmit.formData e o payload filtrado para backend; formSubmit.rawFormData preserva os valores completos da UI, incluindo campos locais/transient.',
|
|
21256
21256
|
],
|
|
21257
21257
|
capabilities: [
|
|
@@ -21466,24 +21466,24 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21466
21466
|
category: 'data',
|
|
21467
21467
|
valueKind: 'enum',
|
|
21468
21468
|
allowedValues: ENUMS$1.fieldSource,
|
|
21469
|
-
description: 'Origem
|
|
21470
|
-
intentExamples: ['campo local', 'campo auxiliar do host', 'campo que
|
|
21471
|
-
safetyNotes: '
|
|
21469
|
+
description: 'Origem semântica do campo. Use local para campos do host que não vêm do schema backend.',
|
|
21470
|
+
intentExamples: ['campo local', 'campo auxiliar do host', 'campo que não vem do schema'],
|
|
21471
|
+
safetyNotes: 'Não marque como local um campo que exista no schema backend; remova a semântica local quando houver colisão com campo server-backed.',
|
|
21472
21472
|
},
|
|
21473
21473
|
{
|
|
21474
21474
|
path: 'transient',
|
|
21475
21475
|
category: 'data',
|
|
21476
21476
|
valueKind: 'boolean',
|
|
21477
|
-
description: 'Marca o campo como
|
|
21478
|
-
intentExamples: ['campo
|
|
21479
|
-
safetyNotes: 'Campos transient continuam participando de UI,
|
|
21477
|
+
description: 'Marca o campo como temporário/local para preenchimento. O dynamic-form omite do submit por padrão.',
|
|
21478
|
+
intentExamples: ['campo temporário', 'campo transient', 'não enviar no payload', 'usar apenas na UI'],
|
|
21479
|
+
safetyNotes: 'Campos transient continuam participando de UI, validação, regras, visibilidade e valueChange; eles apenas saem do payload persistido por padrão.',
|
|
21480
21480
|
},
|
|
21481
21481
|
{
|
|
21482
21482
|
path: 'submitPolicy',
|
|
21483
21483
|
category: 'behavior',
|
|
21484
21484
|
valueKind: 'enum',
|
|
21485
21485
|
allowedValues: ENUMS$1.fieldSubmitPolicy,
|
|
21486
|
-
description: '
|
|
21486
|
+
description: 'Política de submit para sobrescrever o padrão de campos locais/transient.',
|
|
21487
21487
|
intentExamples: ['omitir do submit', 'enviar mesmo sendo local', 'enviar apenas se alterado'],
|
|
21488
21488
|
safetyNotes: 'Use omit para nunca persistir, include para enviar sempre e includeWhenDirty apenas quando o controle estiver dirty.',
|
|
21489
21489
|
},
|
|
@@ -21653,8 +21653,8 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21653
21653
|
path: 'required',
|
|
21654
21654
|
category: 'validation',
|
|
21655
21655
|
valueKind: 'boolean',
|
|
21656
|
-
description: 'Campo
|
|
21657
|
-
intentExamples: ['campo
|
|
21656
|
+
description: 'Campo obrigatório (alias rápido do validators.required).',
|
|
21657
|
+
intentExamples: ['campo obrigatório', 'exigir preenchimento'],
|
|
21658
21658
|
},
|
|
21659
21659
|
{
|
|
21660
21660
|
path: 'validators.requiredMessage',
|
|
@@ -21673,7 +21673,7 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21673
21673
|
path: 'validators.emailMessage',
|
|
21674
21674
|
category: 'validation',
|
|
21675
21675
|
valueKind: 'string',
|
|
21676
|
-
description: 'Mensagem customizada para
|
|
21676
|
+
description: 'Mensagem customizada para validação de email.',
|
|
21677
21677
|
},
|
|
21678
21678
|
{
|
|
21679
21679
|
path: 'validators.minLength',
|
|
@@ -21813,15 +21813,15 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21813
21813
|
path: 'validators.customValidator',
|
|
21814
21814
|
category: 'validation',
|
|
21815
21815
|
valueKind: 'expression',
|
|
21816
|
-
description: 'Validador customizado (
|
|
21817
|
-
safetyNotes: '
|
|
21816
|
+
description: 'Validador customizado (função).',
|
|
21817
|
+
safetyNotes: 'Funções não são serializáveis; exige wiring manual.',
|
|
21818
21818
|
},
|
|
21819
21819
|
{
|
|
21820
21820
|
path: 'validators.asyncValidator',
|
|
21821
21821
|
category: 'validation',
|
|
21822
21822
|
valueKind: 'expression',
|
|
21823
|
-
description: 'Validador async customizado (
|
|
21824
|
-
safetyNotes: '
|
|
21823
|
+
description: 'Validador async customizado (função).',
|
|
21824
|
+
safetyNotes: 'Funções não são serializáveis; exige wiring manual.',
|
|
21825
21825
|
},
|
|
21826
21826
|
{
|
|
21827
21827
|
path: 'validators.matchField',
|
|
@@ -21839,8 +21839,8 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21839
21839
|
path: 'validators.uniqueValidator',
|
|
21840
21840
|
category: 'validation',
|
|
21841
21841
|
valueKind: 'expression',
|
|
21842
|
-
description: 'Validador de unicidade via API (
|
|
21843
|
-
safetyNotes: '
|
|
21842
|
+
description: 'Validador de unicidade via API (função).',
|
|
21843
|
+
safetyNotes: 'Funções não são serializáveis; exige wiring manual.',
|
|
21844
21844
|
},
|
|
21845
21845
|
{
|
|
21846
21846
|
path: 'validators.uniqueMessage',
|
|
@@ -21852,8 +21852,8 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21852
21852
|
path: 'validators.conditionalValidation',
|
|
21853
21853
|
category: 'validation',
|
|
21854
21854
|
valueKind: 'array',
|
|
21855
|
-
description: 'Regras de
|
|
21856
|
-
safetyNotes: 'Use regras declarativas com Json Logic
|
|
21855
|
+
description: 'Regras de validação condicional.',
|
|
21856
|
+
safetyNotes: 'Use regras declarativas com Json Logic serializável; não gere funções aqui.',
|
|
21857
21857
|
},
|
|
21858
21858
|
{
|
|
21859
21859
|
path: 'validators.conditionalValidation[].condition',
|
|
@@ -21873,13 +21873,13 @@ const FIELD_METADATA_CAPABILITIES = {
|
|
|
21873
21873
|
category: 'validation',
|
|
21874
21874
|
valueKind: 'enum',
|
|
21875
21875
|
allowedValues: ENUMS$1.validatorTrigger,
|
|
21876
|
-
description: 'Gatilho de
|
|
21876
|
+
description: 'Gatilho de validação no validator.',
|
|
21877
21877
|
},
|
|
21878
21878
|
{
|
|
21879
21879
|
path: 'validators.validationDebounce',
|
|
21880
21880
|
category: 'validation',
|
|
21881
21881
|
valueKind: 'number',
|
|
21882
|
-
description: 'Debounce de
|
|
21882
|
+
description: 'Debounce de validação no validator (ms).',
|
|
21883
21883
|
},
|
|
21884
21884
|
{
|
|
21885
21885
|
path: 'validators.showInlineErrors',
|
|
@@ -22206,12 +22206,12 @@ const ENUMS = {
|
|
|
22206
22206
|
actionPlacement: ['header', 'window'],
|
|
22207
22207
|
};
|
|
22208
22208
|
const CAPS = [
|
|
22209
|
-
{ path: 'page', category: 'page', valueKind: 'object', description: '
|
|
22209
|
+
{ path: 'page', category: 'page', valueKind: 'object', description: 'Definição da página dinâmica.' },
|
|
22210
22210
|
{ path: 'page.context', category: 'context', valueKind: 'object', description: 'Contexto compartilhado entre widgets.' },
|
|
22211
|
-
{ path: 'page.layoutPreset', category: 'layout', valueKind: 'string', description: 'ID
|
|
22212
|
-
{ path: 'page.layoutPresetOptions', category: 'layout', valueKind: 'object', description: '
|
|
22213
|
-
{ path: 'page.themePreset', category: 'appearance', valueKind: 'string', description: 'ID opcional do preset de tema para shell,
|
|
22214
|
-
{ path: 'page.layout', category: 'layout', valueKind: 'object', description: 'Layout base da
|
|
22211
|
+
{ path: 'page.layoutPreset', category: 'layout', valueKind: 'string', description: 'ID canônico opcional do preset estrutural da página.' },
|
|
22212
|
+
{ path: 'page.layoutPresetOptions', category: 'layout', valueKind: 'object', description: 'Opções específicas do preset estrutural consumidas por builders e runtimes futuros.' },
|
|
22213
|
+
{ path: 'page.themePreset', category: 'appearance', valueKind: 'string', description: 'ID opcional do preset de tema para shell, gráficos, densidade e defaults visuais.' },
|
|
22214
|
+
{ path: 'page.layout', category: 'layout', valueKind: 'object', description: 'Layout base da página.' },
|
|
22215
22215
|
{ path: 'page.layout.orientation', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.layoutOrientation, description: 'Orientacao do grid (vertical/columns).' },
|
|
22216
22216
|
{ path: 'page.layout.columns', category: 'layout', valueKind: 'number', description: 'Numero de colunas (quando orientation=columns).' },
|
|
22217
22217
|
{ path: 'page.layout.gap', category: 'layout', valueKind: 'string', description: 'Gap entre widgets (ex: 16px).' },
|
|
@@ -22220,7 +22220,7 @@ const CAPS = [
|
|
|
22220
22220
|
{ path: 'page.layout.breakpoints.md', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint md.' },
|
|
22221
22221
|
{ path: 'page.layout.breakpoints.lg', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint lg.' },
|
|
22222
22222
|
{ path: 'page.layout.breakpoints.xl', category: 'layout', valueKind: 'number', description: 'Colunas para breakpoint xl.' },
|
|
22223
|
-
{ path: 'page.canvas', category: 'layout', valueKind: 'object', description: 'Canvas espacial
|
|
22223
|
+
{ path: 'page.canvas', category: 'layout', valueKind: 'object', description: 'Canvas espacial canônico da página quando houver geometria explícita.' },
|
|
22224
22224
|
{ path: 'page.canvas.mode', category: 'layout', valueKind: 'enum', allowedValues: ENUMS.canvasMode, description: 'Modo canonico do canvas. Valor atual: grid.' },
|
|
22225
22225
|
{ path: 'page.canvas.columns', category: 'layout', valueKind: 'number', description: 'Numero de colunas do canvas espacial.' },
|
|
22226
22226
|
{ path: 'page.canvas.rowUnit', category: 'layout', valueKind: 'string', description: 'Altura base das linhas do canvas, como 80px.' },
|
|
@@ -22234,10 +22234,10 @@ const CAPS = [
|
|
|
22234
22234
|
{ path: 'page.canvas.items.<widgetKey>.rowSpan', category: 'layout', valueKind: 'number', description: 'Quantidade de linhas ocupadas pelo widget.' },
|
|
22235
22235
|
{ path: 'page.canvas.items.<widgetKey>.zIndex', category: 'layout', valueKind: 'number', description: 'Camada opcional do item no canvas.' },
|
|
22236
22236
|
{ path: 'page.canvas.items.<widgetKey>.constraints', category: 'layout', valueKind: 'object', description: 'Restricoes opcionais de posicao e tamanho do item no canvas.' },
|
|
22237
|
-
{ path: 'page.canvas.items.<widgetKey>.constraints.minColSpan', category: 'layout', valueKind: 'number', description: 'Span
|
|
22238
|
-
{ path: 'page.canvas.items.<widgetKey>.constraints.minRowSpan', category: 'layout', valueKind: 'number', description: 'Span
|
|
22239
|
-
{ path: 'page.canvas.items.<widgetKey>.constraints.maxColSpan', category: 'layout', valueKind: 'number', description: 'Span
|
|
22240
|
-
{ path: 'page.canvas.items.<widgetKey>.constraints.maxRowSpan', category: 'layout', valueKind: 'number', description: 'Span
|
|
22237
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.minColSpan', category: 'layout', valueKind: 'number', description: 'Span mínimo de colunas permitido.' },
|
|
22238
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.minRowSpan', category: 'layout', valueKind: 'number', description: 'Span mínimo de linhas permitido.' },
|
|
22239
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.maxColSpan', category: 'layout', valueKind: 'number', description: 'Span máximo de colunas permitido.' },
|
|
22240
|
+
{ path: 'page.canvas.items.<widgetKey>.constraints.maxRowSpan', category: 'layout', valueKind: 'number', description: 'Span máximo de linhas permitido.' },
|
|
22241
22241
|
{ path: 'page.canvas.items.<widgetKey>.constraints.lockPosition', category: 'layout', valueKind: 'boolean', description: 'Bloqueia alteracao de posicao do item no canvas.' },
|
|
22242
22242
|
{ path: 'page.canvas.items.<widgetKey>.constraints.lockSize', category: 'layout', valueKind: 'boolean', description: 'Bloqueia alteracao de tamanho do item no canvas.' },
|
|
22243
22243
|
{ path: 'page.widgets', category: 'widgets', valueKind: 'array', description: 'Lista de widgets renderizados.' },
|
|
@@ -22245,32 +22245,32 @@ const CAPS = [
|
|
|
22245
22245
|
{ path: 'page.widgets[].className', category: 'widgets', valueKind: 'string', description: 'Classe CSS opcional do widget.' },
|
|
22246
22246
|
{ path: 'page.widgets[].definition.id', category: 'widgets', valueKind: 'string', description: 'ID do componente do widget (ex: praxis-table).' },
|
|
22247
22247
|
{ path: 'page.widgets[].definition.inputs', category: 'widgets', valueKind: 'object', description: 'Inputs iniciais do widget.' },
|
|
22248
|
-
{ path: 'page.widgets[].definition.inputs.hostCapabilities', category: 'widgets', valueKind: 'object', description: 'Capacidades runtime mediadas pelo host quando definition.id = praxis-rich-content.
|
|
22249
|
-
{ path: 'page.widgets[].definition.inputs.hostCapabilities.dispatchAction', category: 'widgets', valueKind: 'object', description: 'Dispatcher runtime para actionButton e actions declarativas de rich content hospedado na
|
|
22250
|
-
{ path: 'page.widgets[].definition.inputs.hostCapabilities.isActionAvailable', category: 'widgets', valueKind: 'object', description: 'Resolver runtime de disponibilidade de actionId para rich content hospedado na
|
|
22251
|
-
{ path: 'page.widgets[].definition.inputs.hostCapabilities.hasCapability', category: 'widgets', valueKind: 'object', description: 'Resolver runtime de capabilities como page.customization.enabled e page.widget.selected para rich content hospedado na
|
|
22248
|
+
{ path: 'page.widgets[].definition.inputs.hostCapabilities', category: 'widgets', valueKind: 'object', description: 'Capacidades runtime mediadas pelo host quando definition.id = praxis-rich-content. Não pertence ao JSON persistido.' },
|
|
22249
|
+
{ path: 'page.widgets[].definition.inputs.hostCapabilities.dispatchAction', category: 'widgets', valueKind: 'object', description: 'Dispatcher runtime para actionButton e actions declarativas de rich content hospedado na página.' },
|
|
22250
|
+
{ path: 'page.widgets[].definition.inputs.hostCapabilities.isActionAvailable', category: 'widgets', valueKind: 'object', description: 'Resolver runtime de disponibilidade de actionId para rich content hospedado na página.' },
|
|
22251
|
+
{ path: 'page.widgets[].definition.inputs.hostCapabilities.hasCapability', category: 'widgets', valueKind: 'object', description: 'Resolver runtime de capabilities como page.customization.enabled e page.widget.selected para rich content hospedado na página.' },
|
|
22252
22252
|
{ path: 'page.widgets[].definition.bindingOrder', category: 'widgets', valueKind: 'array', description: 'Ordem de binding de inputs.' },
|
|
22253
|
-
{ path: 'page.widgets[].shell', category: 'shell', valueKind: 'object', description: '
|
|
22253
|
+
{ path: 'page.widgets[].shell', category: 'shell', valueKind: 'object', description: 'Configuração do shell do widget.' },
|
|
22254
22254
|
{ path: 'page.widgets[].shell.kind', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.shellKind, description: 'Tipo de shell.' },
|
|
22255
|
-
{ path: 'page.widgets[].shell.title', category: 'shell', valueKind: 'string', description: '
|
|
22256
|
-
{ path: 'page.widgets[].shell.subtitle', category: 'shell', valueKind: 'string', description: '
|
|
22257
|
-
{ path: 'page.widgets[].shell.icon', category: 'shell', valueKind: 'string', description: '
|
|
22255
|
+
{ path: 'page.widgets[].shell.title', category: 'shell', valueKind: 'string', description: 'Título do shell.' },
|
|
22256
|
+
{ path: 'page.widgets[].shell.subtitle', category: 'shell', valueKind: 'string', description: 'Subtítulo do shell.' },
|
|
22257
|
+
{ path: 'page.widgets[].shell.icon', category: 'shell', valueKind: 'string', description: 'Ícone do shell.' },
|
|
22258
22258
|
{ path: 'page.widgets[].shell.showHeader', category: 'shell', valueKind: 'boolean', description: 'Exibe o header do shell.' },
|
|
22259
|
-
{ path: 'page.widgets[].shell.actions', category: 'shell', valueKind: 'array', description: '
|
|
22260
|
-
{ path: 'page.widgets[].shell.actions[].id', category: 'shell', valueKind: 'string', description: 'ID da
|
|
22261
|
-
{ path: 'page.widgets[].shell.actions[].label', category: 'shell', valueKind: 'string', description: 'Label da
|
|
22262
|
-
{ path: 'page.widgets[].shell.actions[].icon', category: 'shell', valueKind: 'string', description: '
|
|
22263
|
-
{ path: 'page.widgets[].shell.actions[].variant', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionVariant, description: 'Estilo visual da
|
|
22264
|
-
{ path: 'page.widgets[].shell.actions[].placement', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionPlacement, description: 'Posicionamento da
|
|
22265
|
-
{ path: 'page.widgets[].shell.actions[].emit', category: 'shell', valueKind: 'string', description: 'Evento emitido ao acionar a
|
|
22259
|
+
{ path: 'page.widgets[].shell.actions', category: 'shell', valueKind: 'array', description: 'Ações do shell.' },
|
|
22260
|
+
{ path: 'page.widgets[].shell.actions[].id', category: 'shell', valueKind: 'string', description: 'ID da ação.' },
|
|
22261
|
+
{ path: 'page.widgets[].shell.actions[].label', category: 'shell', valueKind: 'string', description: 'Label da ação.' },
|
|
22262
|
+
{ path: 'page.widgets[].shell.actions[].icon', category: 'shell', valueKind: 'string', description: 'Ícone da ação.' },
|
|
22263
|
+
{ path: 'page.widgets[].shell.actions[].variant', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionVariant, description: 'Estilo visual da ação.' },
|
|
22264
|
+
{ path: 'page.widgets[].shell.actions[].placement', category: 'shell', valueKind: 'enum', allowedValues: ENUMS.actionPlacement, description: 'Posicionamento da ação.' },
|
|
22265
|
+
{ path: 'page.widgets[].shell.actions[].emit', category: 'shell', valueKind: 'string', description: 'Evento emitido ao acionar a ação.' },
|
|
22266
22266
|
{ path: 'page.state', category: 'state', valueKind: 'object', description: 'Estado declarativo opcional compartilhado por widgets e composicao.' },
|
|
22267
22267
|
{ path: 'page.state.values', category: 'state', valueKind: 'object', description: 'Valores primarios mutaveis escritos por widgets, defaults ou host.' },
|
|
22268
22268
|
{ path: 'page.state.schema', category: 'state', valueKind: 'object', description: 'Descritores dos paths primarios de estado.' },
|
|
22269
22269
|
{ path: 'page.state.schema.<token>.type', category: 'state', valueKind: 'string', description: 'Tipo semantico opcional do path de estado.' },
|
|
22270
22270
|
{ path: 'page.state.schema.<token>.initial', category: 'state', valueKind: 'object', description: 'Valor inicial usado quando page.state.values omite o path.' },
|
|
22271
|
-
{ path: 'page.state.schema.<token>.persist', category: 'state', valueKind: 'boolean', description: 'Indica se o path
|
|
22271
|
+
{ path: 'page.state.schema.<token>.persist', category: 'state', valueKind: 'boolean', description: 'Indica se o path primário deve ser persistido com a página.' },
|
|
22272
22272
|
{ path: 'page.state.schema.<token>.mergeStrategy', category: 'state', valueKind: 'enum', allowedValues: ENUMS.stateMergeStrategy, description: 'Como escritas de widget/estado combinam com o valor atual.' },
|
|
22273
|
-
{ path: 'page.state.schema.<token>.description', category: 'state', valueKind: 'string', description: '
|
|
22273
|
+
{ path: 'page.state.schema.<token>.description', category: 'state', valueKind: 'string', description: 'Descrição opcional do path para builders e catálogos AI.' },
|
|
22274
22274
|
{ path: 'page.state.schema.<token>.tags', category: 'state', valueKind: 'array', description: 'Tags opcionais para busca e governanca do estado.' },
|
|
22275
22275
|
{ path: 'page.state.derived', category: 'state', valueKind: 'object', description: 'Descritores de estado derivado recomputado pelo runtime.' },
|
|
22276
22276
|
{ path: 'page.state.derived.<token>.dependsOn', category: 'state', valueKind: 'array', description: 'Paths de estado que alimentam o valor derivado.' },
|
|
@@ -22279,9 +22279,9 @@ const CAPS = [
|
|
|
22279
22279
|
{ path: 'page.state.derived.<token>.compute.expression', category: 'state', valueKind: 'expression', description: 'Expressao Json Logic para compute.kind=json-logic.' },
|
|
22280
22280
|
{ path: 'page.state.derived.<token>.compute.value', category: 'state', valueKind: 'object', description: 'Valor template para compute.kind=template.' },
|
|
22281
22281
|
{ path: 'page.state.derived.<token>.compute.operator', category: 'state', valueKind: 'string', description: 'Operador para compute.kind=operator.' },
|
|
22282
|
-
{ path: 'page.state.derived.<token>.compute.options', category: 'state', valueKind: 'object', description: '
|
|
22282
|
+
{ path: 'page.state.derived.<token>.compute.options', category: 'state', valueKind: 'object', description: 'Opções do operador ou transformer.' },
|
|
22283
22283
|
{ path: 'page.state.derived.<token>.compute.transformerId', category: 'state', valueKind: 'string', description: 'Identificador do transformer para compute.kind=transformer.' },
|
|
22284
|
-
{ path: 'page.state.derived.<token>.description', category: 'state', valueKind: 'string', description: '
|
|
22284
|
+
{ path: 'page.state.derived.<token>.description', category: 'state', valueKind: 'string', description: 'Descrição opcional do estado derivado.' },
|
|
22285
22285
|
{ path: 'page.state.derived.<token>.cache', category: 'state', valueKind: 'boolean', description: 'Permite cache futuro do valor derivado.' },
|
|
22286
22286
|
{ path: 'page.composition', category: 'connections', valueKind: 'object', description: 'Envelope canonico da composicao persistida.' },
|
|
22287
22287
|
{ path: 'page.composition.version', category: 'connections', valueKind: 'string', description: 'Versao do envelope de composicao.' },
|
|
@@ -22297,7 +22297,7 @@ const CAPS = [
|
|
|
22297
22297
|
{ path: 'page.composition.links[].from.ref.nestedPath[].kind', category: 'connections', valueKind: 'string', description: 'Tipo do segmento nested de origem.' },
|
|
22298
22298
|
{ path: 'page.composition.links[].from.ref.nestedPath[].id', category: 'connections', valueKind: 'string', description: 'Identificador estrutural do segmento nested de origem.' },
|
|
22299
22299
|
{ path: 'page.composition.links[].from.ref.nestedPath[].key', category: 'connections', valueKind: 'string', description: 'Chave estavel do widget filho no segmento terminal de origem.', critical: true },
|
|
22300
|
-
{ path: 'page.composition.links[].from.ref.nestedPath[].index', category: 'connections', valueKind: 'number', description: '
|
|
22300
|
+
{ path: 'page.composition.links[].from.ref.nestedPath[].index', category: 'connections', valueKind: 'number', description: 'Índice auxiliar para diagnóstico visual; não use como identidade primária.' },
|
|
22301
22301
|
{ path: 'page.composition.links[].from.ref.nestedPath[].componentType', category: 'connections', valueKind: 'string', description: 'Tipo do componente real do widget filho de origem.' },
|
|
22302
22302
|
{ path: 'page.composition.links[].to', category: 'connections', valueKind: 'object', description: 'Endpoint de destino do link.' },
|
|
22303
22303
|
{ path: 'page.composition.links[].to.kind', category: 'connections', valueKind: 'string', description: 'Tipo do endpoint de destino, como component-port, state ou global-action.' },
|
|
@@ -22312,11 +22312,11 @@ const CAPS = [
|
|
|
22312
22312
|
{ path: 'page.composition.links[].to.ref.nestedPath[].kind', category: 'connections', valueKind: 'string', description: 'Tipo do segmento nested de destino.' },
|
|
22313
22313
|
{ path: 'page.composition.links[].to.ref.nestedPath[].id', category: 'connections', valueKind: 'string', description: 'Identificador estrutural do segmento nested de destino.' },
|
|
22314
22314
|
{ path: 'page.composition.links[].to.ref.nestedPath[].key', category: 'connections', valueKind: 'string', description: 'Chave estavel do widget filho no segmento terminal de destino.', critical: true },
|
|
22315
|
-
{ path: 'page.composition.links[].to.ref.nestedPath[].index', category: 'connections', valueKind: 'number', description: '
|
|
22315
|
+
{ path: 'page.composition.links[].to.ref.nestedPath[].index', category: 'connections', valueKind: 'number', description: 'Índice auxiliar para diagnóstico visual; não use como identidade primária.' },
|
|
22316
22316
|
{ path: 'page.composition.links[].to.ref.nestedPath[].componentType', category: 'connections', valueKind: 'string', description: 'Tipo do componente real do widget filho de destino.' },
|
|
22317
|
-
{ path: 'page.composition.links[].intent', category: 'connections', valueKind: 'string', description: '
|
|
22317
|
+
{ path: 'page.composition.links[].intent', category: 'connections', valueKind: 'string', description: 'Intenção semântica do link.' },
|
|
22318
22318
|
{ path: 'page.composition.links[].transform', category: 'connections', valueKind: 'object', description: 'Pipeline de transformacao do link.' },
|
|
22319
|
-
{ path: 'page.composition.links[].condition', category: 'connections', valueKind: 'expression', description: 'Guarda
|
|
22319
|
+
{ path: 'page.composition.links[].condition', category: 'connections', valueKind: 'expression', description: 'Guarda semântica opcional do link, expressa como um único AST Json Logic canônico.' },
|
|
22320
22320
|
{ path: 'page.composition.links[].policy', category: 'connections', valueKind: 'object', description: 'Politicas operacionais opcionais do link, como debounce, distinct e missing-value.' },
|
|
22321
22321
|
{ path: 'page.composition.links[].metadata', category: 'connections', valueKind: 'object', description: 'Metadados opcionais do link.' },
|
|
22322
22322
|
{ path: 'page.grouping', category: 'layout', valueKind: 'array', description: 'Modelo semantico opcional de secoes, abas, areas hero e rails.' },
|
|
@@ -22357,15 +22357,15 @@ const DYNAMIC_PAGE_AI_CAPABILITIES = {
|
|
|
22357
22357
|
enums: ENUMS,
|
|
22358
22358
|
targets: ['praxis-dynamic-page'],
|
|
22359
22359
|
notes: [
|
|
22360
|
-
'Este
|
|
22360
|
+
'Este catálogo é específico para o runtime praxis-dynamic-page; operações de authoring/mutação pertencem ao manifesto do praxis-page-builder.',
|
|
22361
22361
|
'WidgetPageDefinition e o contrato canonico persistido: widgets, composition.links, state, context, layout, canvas, presets, grouping, slotAssignments, deviceLayouts e themePreset.',
|
|
22362
22362
|
'Widgets e page.composition.links sao arrays; ferramentas de patch legadas fazem merge por key estavel e id estavel.',
|
|
22363
|
-
'page.canvas.items
|
|
22364
|
-
'Taxonomia editorial: condition usa Json Logic
|
|
22363
|
+
'page.canvas.items é um mapa por widget key; não modele canvas.items como array.',
|
|
22364
|
+
'Taxonomia editorial: condition usa Json Logic canônico; transform usa pipeline declarativo; não trate ambos como a mesma "expression".',
|
|
22365
22365
|
'Para remocao/replace, use flags {_remove:true} ou {_replace:true} no item.',
|
|
22366
22366
|
'Para renomear um link, inclua {_beforeKey:"link-id-anterior"} no item.',
|
|
22367
|
-
'Inputs de widgets dependem do componente (ex: praxis-table, praxis-dynamic-form). Evite inventar campos; prefira pedir
|
|
22368
|
-
'Quando page.widgets[].definition.id for praxis-rich-content, o host praxis-dynamic-page injeta hostCapabilities em runtime para actions e capability gating;
|
|
22367
|
+
'Inputs de widgets dependem do componente (ex: praxis-table, praxis-dynamic-form). Evite inventar campos; prefira pedir confirmação.',
|
|
22368
|
+
'Quando page.widgets[].definition.id for praxis-rich-content, o host praxis-dynamic-page injeta hostCapabilities em runtime para actions e capability gating; não serialize funções nem tente persistir page.widgets[].definition.inputs.hostCapabilities.',
|
|
22369
22369
|
'Use ids estaveis para links e keys estaveis para widgets.',
|
|
22370
22370
|
'Nested component ports usam endpoint component-port com nestedPath; o owner em ref.widget continua sendo o widget top-level.',
|
|
22371
22371
|
'Objetivo: compor widgets e relacionamentos canonicos (ex.: master-detail).',
|
|
@@ -22394,7 +22394,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22394
22394
|
mode: 'enum',
|
|
22395
22395
|
options: [
|
|
22396
22396
|
{ value: 'fixed', label: 'Linhas fixas' },
|
|
22397
|
-
{ value: 'content', label: '
|
|
22397
|
+
{ value: 'content', label: 'Conteúdo' },
|
|
22398
22398
|
],
|
|
22399
22399
|
},
|
|
22400
22400
|
'page.canvas.collisionPolicy': {
|
|
@@ -22463,7 +22463,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22463
22463
|
'page.widgets[].shell.actions[].variant': {
|
|
22464
22464
|
mode: 'enum',
|
|
22465
22465
|
options: [
|
|
22466
|
-
{ value: 'icon', label: '
|
|
22466
|
+
{ value: 'icon', label: 'Ícone' },
|
|
22467
22467
|
{ value: 'text', label: 'Texto' },
|
|
22468
22468
|
{ value: 'outlined', label: 'Outlined' },
|
|
22469
22469
|
],
|
|
@@ -22493,7 +22493,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22493
22493
|
mode: 'suggested',
|
|
22494
22494
|
options: [
|
|
22495
22495
|
{ value: 'rowClick', label: 'Clique na linha (praxis-table)', example: 'Usar table.rowClick -> form.resourceId via transform pick-path payload.row.id' },
|
|
22496
|
-
{ value: 'rowAction', label: '
|
|
22496
|
+
{ value: 'rowAction', label: 'Ação da linha (praxis-table)' },
|
|
22497
22497
|
{ value: 'formSubmit', label: 'Submit do formulario (praxis-dynamic-form)' },
|
|
22498
22498
|
],
|
|
22499
22499
|
},
|
|
@@ -22507,7 +22507,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22507
22507
|
'page.composition.links[].transform.steps[].config.path': {
|
|
22508
22508
|
mode: 'suggested',
|
|
22509
22509
|
options: [
|
|
22510
|
-
{ value: 'payload.row.id', label: 'ID
|
|
22510
|
+
{ value: 'payload.row.id', label: 'ID padrão do registro', example: 'rowClick -> resourceId' },
|
|
22511
22511
|
],
|
|
22512
22512
|
},
|
|
22513
22513
|
},
|
|
@@ -22819,7 +22819,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22819
22819
|
{ name: 'toInput', type: 'STRING' },
|
|
22820
22820
|
{ name: 'map', type: 'STRING' },
|
|
22821
22821
|
],
|
|
22822
|
-
safetyNotes: 'Use transform pick-path payload.row.id para master-detail
|
|
22822
|
+
safetyNotes: 'Use transform pick-path payload.row.id para master-detail padrão.',
|
|
22823
22823
|
patchTemplate: {
|
|
22824
22824
|
page: {
|
|
22825
22825
|
composition: {
|
|
@@ -22870,7 +22870,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22870
22870
|
{ name: 'fromWidget', type: 'STRING' },
|
|
22871
22871
|
{ name: 'toWidget', type: 'STRING' },
|
|
22872
22872
|
],
|
|
22873
|
-
safetyNotes: '
|
|
22873
|
+
safetyNotes: 'Padrão master-detail: rowClick -> resourceId com transform pick-path payload.row.id.',
|
|
22874
22874
|
patchTemplate: {
|
|
22875
22875
|
page: {
|
|
22876
22876
|
composition: {
|
|
@@ -22913,7 +22913,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22913
22913
|
},
|
|
22914
22914
|
{
|
|
22915
22915
|
id: 'page.template.applyMasterDetail',
|
|
22916
|
-
intentExamples: ['criar
|
|
22916
|
+
intentExamples: ['criar página master detail', 'setup master detail', 'tabela e formulário', 'master-detail'],
|
|
22917
22917
|
operation: 'create',
|
|
22918
22918
|
scope: 'GLOBAL',
|
|
22919
22919
|
valueType: 'OBJECT',
|
|
@@ -22922,7 +22922,7 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22922
22922
|
{ name: 'formId', type: 'STRING' },
|
|
22923
22923
|
{ name: 'resourcePath', type: 'STRING' },
|
|
22924
22924
|
],
|
|
22925
|
-
safetyNotes: '
|
|
22925
|
+
safetyNotes: 'Padrão master-detail: tabela (rowClick) -> formulario (resourceId) com transform pick-path payload.row.id.',
|
|
22926
22926
|
patchTemplate: {
|
|
22927
22927
|
page: {
|
|
22928
22928
|
widgets: [
|
|
@@ -22998,30 +22998,30 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
22998
22998
|
},
|
|
22999
22999
|
hints: [
|
|
23000
23000
|
'praxis-dynamic-page e runtime de composicao: consome WidgetPageDefinition, renderiza widgets e mantem relacoes em page.composition.links.',
|
|
23001
|
-
'
|
|
23001
|
+
'Mutações agentic de página pertencem ao manifesto do praxis-page-builder; use este context pack como descoberta/runtime guidance.',
|
|
23002
23002
|
'WidgetPageDefinition inclui widgets, composition.links, state, context, layout, canvas, layoutPreset, layoutPresetOptions, grouping, slotAssignments, deviceLayouts e themePreset.',
|
|
23003
|
-
'page.canvas.items
|
|
23003
|
+
'page.canvas.items é um mapa por widget key, não um array; cada entrada guarda col, row, colSpan, rowSpan, zIndex e constraints opcionais.',
|
|
23004
23004
|
'Widgets e composition.links sao arrays; o patching deve fazer merge por key (widgets) e por id (links).',
|
|
23005
|
-
'Preferir
|
|
23005
|
+
'Preferir mudanças incrementais: alterar/estender em vez de substituir toda a página.',
|
|
23006
23006
|
'Para remover um item, envie {_remove: true} junto ao widget/link.',
|
|
23007
23007
|
'Para substituir um item inteiro, envie {_replace: true}.',
|
|
23008
23008
|
'Para alterar origem/destino de link, use {_beforeKey} com o id antigo.',
|
|
23009
23009
|
'Use keys estaveis para widgets e ids estaveis para links ao criar composicoes.',
|
|
23010
23010
|
'resourcePath sempre e o path base do recurso (sem /filter, /all).',
|
|
23011
|
-
'Praxis Table gera colunas dinamicamente a partir do resourcePath quando columns
|
|
23012
|
-
'Praxis Dynamic Form gera campos dinamicamente a partir do resourcePath quando config
|
|
23013
|
-
'Quando um widget praxis-rich-content estiver hospedado na
|
|
23011
|
+
'Praxis Table gera colunas dinamicamente a partir do resourcePath quando columns não forem definidas.',
|
|
23012
|
+
'Praxis Dynamic Form gera campos dinamicamente a partir do resourcePath quando config não for definida.',
|
|
23013
|
+
'Quando um widget praxis-rich-content estiver hospedado na página, definition.inputs.document continua sendo o contrato persistido; hostCapabilities é injetado somente em runtime pelo praxis-dynamic-page para actions e capability gating.',
|
|
23014
23014
|
'Praxis List pode filtrar via config.dataSource.query (enviado para /filter).',
|
|
23015
23015
|
'Quando houver recursos secundarios (ex.: enderecos), use contextHints.addressResourcePath.',
|
|
23016
23016
|
'Exemplo master-detail: tabela emite rowClick -> form.resourceId via transform pick-path payload.row.id.',
|
|
23017
23017
|
'Pattern Master-Detail: { "id":"master.rowClick->detail.resourceId", "from":{"kind":"component-port","ref":{"port":"rowClick","direction":"output"}}, "to":{"kind":"component-port","ref":{"port":"resourceId","direction":"input"}}, "transform":{"steps":[{"kind":"pick-path","config":{"path":"payload.row.id"}}]}}',
|
|
23018
23018
|
'Ao criar widgets, use inputs minimos e complemente depois (evite inventar campos).',
|
|
23019
23019
|
'Quando widgets ja existem, interpretar ports de origem/destino antes de conectar.',
|
|
23020
|
-
'
|
|
23021
|
-
'
|
|
23020
|
+
'Intenção comum: criar página master-detail = criar tabela + criar formulário + conectar seleção via composition.links.',
|
|
23021
|
+
'Intenção comum: ajustar página existente = modificar apenas widgets/inputs necessários.',
|
|
23022
23022
|
'Exemplo de link canonico (master-detail): { id:"masterTable.rowClick->detailForm.resourceId", from:{kind:"component-port",ref:{widget:"masterTable",port:"rowClick",direction:"output"}}, to:{kind:"component-port",ref:{widget:"detailForm",port:"resourceId",direction:"input"}}, intent:"event-propagation", transform:{version:"2.0",phase:"link-propagation",mode:"single-value",steps:[{kind:"pick-path",phase:"link-propagation",input:{source:"event"},config:{path:"payload.row.id"}}]}}',
|
|
23023
|
-
'Exemplo de widget tabela (
|
|
23024
|
-
'Exemplo de widget
|
|
23023
|
+
'Exemplo de widget tabela (mínimo): { key:"masterTable", definition:{ id:"praxis-table", inputs:{ resourcePath:"/api/x" }}}',
|
|
23024
|
+
'Exemplo de widget formulário (mínimo): { key:"detailForm", definition:{ id:"praxis-dynamic-form", inputs:{ resourcePath:"/api/x", mode:"view" }}}',
|
|
23025
23025
|
'Se houver idField conhecido, use transform pick-path payload.row.{idField} em links canonicos.',
|
|
23026
23026
|
],
|
|
23027
23027
|
};
|
|
@@ -34365,24 +34365,24 @@ const PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA = {
|
|
|
34365
34365
|
selector: 'praxis-dynamic-page',
|
|
34366
34366
|
component: DynamicWidgetPageComponent,
|
|
34367
34367
|
friendlyName: 'Dynamic Page',
|
|
34368
|
-
description: '
|
|
34368
|
+
description: 'Página dinâmica com widgets e composition.links em layout responsivo, incluindo mediação runtime para rich-content hospedado.',
|
|
34369
34369
|
icon: 'dashboard',
|
|
34370
34370
|
inputs: [
|
|
34371
|
-
{ name: 'page', type: 'WidgetPageDefinition', description: '
|
|
34371
|
+
{ name: 'page', type: 'WidgetPageDefinition', description: 'Definição da página (widgets, layout e composition.links).' },
|
|
34372
34372
|
{ name: 'context', type: 'Record<string, any>', description: 'Contexto adicional compartilhado entre widgets.' },
|
|
34373
|
-
{ name: 'strictValidation', type: 'boolean', description: 'Habilita
|
|
34374
|
-
{ name: 'enableCustomization', type: 'boolean', description: 'Habilita affordances de
|
|
34375
|
-
{ name: 'showPageSettingsButton', type: 'boolean', description: 'Exibe
|
|
34373
|
+
{ name: 'strictValidation', type: 'boolean', description: 'Habilita validação estrita de inputs.' },
|
|
34374
|
+
{ name: 'enableCustomization', type: 'boolean', description: 'Habilita affordances de edição na página.' },
|
|
34375
|
+
{ name: 'showPageSettingsButton', type: 'boolean', description: 'Exibe botão de configuração da página.' },
|
|
34376
34376
|
{ name: 'shellEditorComponent', type: 'Type<any>', description: 'Override do editor de shell dos widgets.' },
|
|
34377
|
-
{ name: 'pageEditorComponent', type: 'Type<any>', description: 'Override do editor de
|
|
34378
|
-
{ name: 'autoPersist', type: 'boolean', description: 'Ativa
|
|
34379
|
-
{ name: 'pageIdentity', type: 'PageIdentity', description: 'Identidade de
|
|
34380
|
-
{ name: 'componentInstanceId', type: 'string', description: 'Identificador opcional para
|
|
34377
|
+
{ name: 'pageEditorComponent', type: 'Type<any>', description: 'Override do editor de configuração da página.' },
|
|
34378
|
+
{ name: 'autoPersist', type: 'boolean', description: 'Ativa persistência automática (load/save) da página.' },
|
|
34379
|
+
{ name: 'pageIdentity', type: 'PageIdentity', description: 'Identidade de persistência (tenant/usuário/rota/locale).' },
|
|
34380
|
+
{ name: 'componentInstanceId', type: 'string', description: 'Identificador opcional para múltiplas instâncias na mesma rota.' },
|
|
34381
34381
|
],
|
|
34382
34382
|
outputs: [
|
|
34383
|
-
{ name: 'pageChange', type: 'WidgetPageDefinition', description: 'Emitido ao alterar a
|
|
34384
|
-
{ name: 'widgetEvent', type: 'WidgetEventEnvelope', description: 'Reemite eventos dos widgets filhos com ownerWidgetKey para
|
|
34385
|
-
{ name: 'widgetDiagnosticsChange', type: 'Record<string, WidgetResolutionDiagnostic>', description: 'Emitido quando o runtime detecta widgets resolvidos ou falhos durante o carregamento
|
|
34383
|
+
{ name: 'pageChange', type: 'WidgetPageDefinition', description: 'Emitido ao alterar a definição da página.' },
|
|
34384
|
+
{ name: 'widgetEvent', type: 'WidgetEventEnvelope', description: 'Reemite eventos dos widgets filhos com ownerWidgetKey para integrações do host.' },
|
|
34385
|
+
{ name: 'widgetDiagnosticsChange', type: 'Record<string, WidgetResolutionDiagnostic>', description: 'Emitido quando o runtime detecta widgets resolvidos ou falhos durante o carregamento dinâmico.' },
|
|
34386
34386
|
],
|
|
34387
34387
|
tags: ['widget', 'page', 'dynamic', 'layout'],
|
|
34388
34388
|
lib: '@praxisui/core',
|