@praxisui/dynamic-form 10.0.0-rc.4 → 10.0.0-rc.41
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 +92 -0
- package/ai/component-registry.json +630 -156
- package/docs/custom-fields-enterprise-review.md +229 -0
- package/docs/dynamic-form-authoring-document-semantics.md +68 -2
- package/docs/evidence/form-authoring-635-20261023/final-review.md +46 -0
- package/docs/evidence/form-authoring-635-20261023/independent-review-vb-form.md +50 -0
- package/docs/evidence/form-authoring-635-20261023/validation.md +76 -0
- package/docs/evidence/p1-authoring-20261022/validation.md +134 -0
- package/docs/governed-page-widget-adapter.md +58 -0
- package/docs/hot-metadata-updates.md +16 -0
- package/fesm2022/praxisui-dynamic-form.mjs +4177 -1130
- package/package.json +8 -8
- package/src/lib/config-editor/praxis-dynamic-form-config-editor.json-api.md +11 -3
- package/src/lib/praxis-dynamic-form.json-api.md +41 -7
- package/types/praxisui-dynamic-form.d.ts +310 -27
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-10-
|
|
3
|
+
"generatedAt": "2026-10-27T22:14:23.237Z",
|
|
4
4
|
"packageName": "@praxisui/dynamic-form",
|
|
5
|
-
"packageVersion": "10.0.0-rc.
|
|
5
|
+
"packageVersion": "10.0.0-rc.41",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 2,
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
"name": "mode",
|
|
52
|
-
"type": "'create' | 'edit' | 'view'",
|
|
52
|
+
"type": "'create' | 'edit' | 'view' | 'presentation' | 'dossier'",
|
|
53
53
|
"required": false,
|
|
54
54
|
"description": "Modo do formulario",
|
|
55
55
|
"label": "Modo",
|
|
@@ -71,11 +71,23 @@
|
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
73
|
"name": "schemaSource",
|
|
74
|
-
"type": "'resource' | 'filter'",
|
|
74
|
+
"type": "'resource' | 'filter' | 'action'",
|
|
75
75
|
"required": false,
|
|
76
76
|
"description": "Fonte do schema de campos",
|
|
77
77
|
"default": "resource"
|
|
78
78
|
},
|
|
79
|
+
{
|
|
80
|
+
"name": "actionId",
|
|
81
|
+
"type": "string | null",
|
|
82
|
+
"required": false,
|
|
83
|
+
"description": "Identificador canônico da ação de workflow ou comando governado associado ao formulário"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "operationId",
|
|
87
|
+
"type": "string | null",
|
|
88
|
+
"required": false,
|
|
89
|
+
"description": "OperationId canônico publicado pelo catálogo de ações ou surfaces para execução do comando"
|
|
90
|
+
},
|
|
79
91
|
{
|
|
80
92
|
"name": "schemaUrl",
|
|
81
93
|
"type": "string | null",
|
|
@@ -176,9 +188,9 @@
|
|
|
176
188
|
},
|
|
177
189
|
{
|
|
178
190
|
"name": "configPersistenceStrategy",
|
|
179
|
-
"type": "'local-first' | 'input-first'",
|
|
191
|
+
"type": "'local-first' | 'input-first' | 'volatile'",
|
|
180
192
|
"required": false,
|
|
181
|
-
"description": "Define se a configuracao local persistida ou os inputs do host tem precedencia; input-first preserva inclusive o mode
|
|
193
|
+
"description": "Define se a configuracao local persistida ou os inputs do host tem precedencia; input-first preserva inclusive o mode explícito; volatile usa a configuração do host sem ler, salvar ou limpar preferências do filho.",
|
|
182
194
|
"default": "local-first"
|
|
183
195
|
},
|
|
184
196
|
{
|
|
@@ -272,6 +284,13 @@
|
|
|
272
284
|
"required": false,
|
|
273
285
|
"description": "Projeção de contextSnapshot.presentation para hosts e Page Builder. Tamanhos em pixels; null remove ajustes explícitos. Não altera mode nem presentationModeGlobal."
|
|
274
286
|
},
|
|
287
|
+
{
|
|
288
|
+
"name": "presentationPreset",
|
|
289
|
+
"type": "FormPresentationPreset",
|
|
290
|
+
"required": false,
|
|
291
|
+
"description": "Preset visual nativo para modo apresentação: corporate-dossier, editorial-card, compact-presentation ou default.",
|
|
292
|
+
"label": "Preset de Apresentação"
|
|
293
|
+
},
|
|
275
294
|
{
|
|
276
295
|
"name": "presentationModeGlobal",
|
|
277
296
|
"type": "boolean | null",
|
|
@@ -890,7 +909,6 @@
|
|
|
890
909
|
}
|
|
891
910
|
],
|
|
892
911
|
"configEditor": {
|
|
893
|
-
"component": "[ref:PraxisDynamicFormWidgetConfigEditor]",
|
|
894
912
|
"title": "Configurar formulário"
|
|
895
913
|
},
|
|
896
914
|
"authoringManifestRef": {
|
|
@@ -3635,6 +3653,185 @@
|
|
|
3635
3653
|
"responsive em card"
|
|
3636
3654
|
]
|
|
3637
3655
|
},
|
|
3656
|
+
{
|
|
3657
|
+
"path": "fieldMetadata[].presentation.visualization.scaleScope",
|
|
3658
|
+
"category": "layout",
|
|
3659
|
+
"valueKind": "enum",
|
|
3660
|
+
"allowedValues": [
|
|
3661
|
+
"row",
|
|
3662
|
+
"page"
|
|
3663
|
+
],
|
|
3664
|
+
"description": "Escopo de normalizacao de escala para series e valores em colecoes: row (local por linha) ou page (sincronizado na pagina visivel).",
|
|
3665
|
+
"intentExamples": [
|
|
3666
|
+
"sincronizar escala de sparklines na pagina",
|
|
3667
|
+
"comparar amplitude entre linhas"
|
|
3668
|
+
]
|
|
3669
|
+
},
|
|
3670
|
+
{
|
|
3671
|
+
"path": "fieldMetadata[].presentation.visualization.tone",
|
|
3672
|
+
"category": "appearance",
|
|
3673
|
+
"valueKind": "enum",
|
|
3674
|
+
"allowedValues": [
|
|
3675
|
+
"neutral",
|
|
3676
|
+
"info",
|
|
3677
|
+
"success",
|
|
3678
|
+
"warning",
|
|
3679
|
+
"danger",
|
|
3680
|
+
"critical"
|
|
3681
|
+
],
|
|
3682
|
+
"description": "Tom semantico estatico da micro visualizacao.",
|
|
3683
|
+
"intentExamples": [
|
|
3684
|
+
"neutral",
|
|
3685
|
+
"success",
|
|
3686
|
+
"warning",
|
|
3687
|
+
"danger",
|
|
3688
|
+
"critical"
|
|
3689
|
+
]
|
|
3690
|
+
},
|
|
3691
|
+
{
|
|
3692
|
+
"path": "fieldMetadata[].presentation.visualization.toneExpr",
|
|
3693
|
+
"category": "appearance",
|
|
3694
|
+
"valueKind": "object",
|
|
3695
|
+
"description": "Expressao Json Logic ou caminho row.<campo> para resolver dinamicamente o tom semantico da micro visualizacao.",
|
|
3696
|
+
"safetyNotes": "Deve retornar apenas um dos tons permitidos em presentationVisualizationTone."
|
|
3697
|
+
},
|
|
3698
|
+
{
|
|
3699
|
+
"path": "fieldMetadata[].presentation.visualization.valueExpr",
|
|
3700
|
+
"category": "behavior",
|
|
3701
|
+
"valueKind": "object",
|
|
3702
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para obter o valor principal da micro visualizacao.",
|
|
3703
|
+
"intentExamples": [
|
|
3704
|
+
"row.slaValue",
|
|
3705
|
+
"row.progresso"
|
|
3706
|
+
]
|
|
3707
|
+
},
|
|
3708
|
+
{
|
|
3709
|
+
"path": "fieldMetadata[].presentation.visualization.valueSuffix",
|
|
3710
|
+
"category": "appearance",
|
|
3711
|
+
"valueKind": "string",
|
|
3712
|
+
"description": "Sufixo de unidade anexado ao valor numerico formatado (ex: \"%\", \" pts\", \" ms\", \" d\").",
|
|
3713
|
+
"intentExamples": [
|
|
3714
|
+
"mostrar % no bullet",
|
|
3715
|
+
"adicionar sufixo pts no radial"
|
|
3716
|
+
]
|
|
3717
|
+
},
|
|
3718
|
+
{
|
|
3719
|
+
"path": "fieldMetadata[].presentation.visualization.compactValue",
|
|
3720
|
+
"category": "appearance",
|
|
3721
|
+
"valueKind": "boolean",
|
|
3722
|
+
"description": "Formata valores numericos em notacao compacta (ex: 1.2M, 45.3K) para celulas densas.",
|
|
3723
|
+
"intentExamples": [
|
|
3724
|
+
"compactar valores financeiros grandes",
|
|
3725
|
+
"mostrar 1.2M em comparison"
|
|
3726
|
+
]
|
|
3727
|
+
},
|
|
3728
|
+
{
|
|
3729
|
+
"path": "fieldMetadata[].presentation.visualization.min",
|
|
3730
|
+
"category": "behavior",
|
|
3731
|
+
"valueKind": "number",
|
|
3732
|
+
"description": "Limite minimo explicito da escala numerica."
|
|
3733
|
+
},
|
|
3734
|
+
{
|
|
3735
|
+
"path": "fieldMetadata[].presentation.visualization.max",
|
|
3736
|
+
"category": "behavior",
|
|
3737
|
+
"valueKind": "number",
|
|
3738
|
+
"description": "Limite maximo explicito da escala numerica."
|
|
3739
|
+
},
|
|
3740
|
+
{
|
|
3741
|
+
"path": "fieldMetadata[].presentation.visualization.total",
|
|
3742
|
+
"category": "behavior",
|
|
3743
|
+
"valueKind": "number",
|
|
3744
|
+
"description": "Total explicito para proporcionalidade em stackedBar ou radial."
|
|
3745
|
+
},
|
|
3746
|
+
{
|
|
3747
|
+
"path": "fieldMetadata[].presentation.visualization.target",
|
|
3748
|
+
"category": "behavior",
|
|
3749
|
+
"valueKind": "number",
|
|
3750
|
+
"description": "Meta fixa para comparacao em bullet."
|
|
3751
|
+
},
|
|
3752
|
+
{
|
|
3753
|
+
"path": "fieldMetadata[].presentation.visualization.targetExpr",
|
|
3754
|
+
"category": "behavior",
|
|
3755
|
+
"valueKind": "object",
|
|
3756
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para obter a meta por linha em bullet.",
|
|
3757
|
+
"intentExamples": [
|
|
3758
|
+
"row.metaSla",
|
|
3759
|
+
"row.target"
|
|
3760
|
+
]
|
|
3761
|
+
},
|
|
3762
|
+
{
|
|
3763
|
+
"path": "fieldMetadata[].presentation.visualization.baseline",
|
|
3764
|
+
"category": "behavior",
|
|
3765
|
+
"valueKind": "number",
|
|
3766
|
+
"description": "Valor de referencia fixo para comparison ou delta."
|
|
3767
|
+
},
|
|
3768
|
+
{
|
|
3769
|
+
"path": "fieldMetadata[].presentation.visualization.baselineExpr",
|
|
3770
|
+
"category": "behavior",
|
|
3771
|
+
"valueKind": "object",
|
|
3772
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para obter o valor de referencia (baseline) por linha em comparison ou delta.",
|
|
3773
|
+
"intentExamples": [
|
|
3774
|
+
"row.orcamentoPrevisto",
|
|
3775
|
+
"row.indenizacoesTotal"
|
|
3776
|
+
]
|
|
3777
|
+
},
|
|
3778
|
+
{
|
|
3779
|
+
"path": "fieldMetadata[].presentation.visualization.pointsExpr",
|
|
3780
|
+
"category": "behavior",
|
|
3781
|
+
"valueKind": "object",
|
|
3782
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para serie de pontos em line, area ou column.",
|
|
3783
|
+
"intentExamples": [
|
|
3784
|
+
"row.trend",
|
|
3785
|
+
"row.historicoMensal"
|
|
3786
|
+
]
|
|
3787
|
+
},
|
|
3788
|
+
{
|
|
3789
|
+
"path": "fieldMetadata[].presentation.visualization.segmentsExpr",
|
|
3790
|
+
"category": "behavior",
|
|
3791
|
+
"valueKind": "object",
|
|
3792
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para lista de segmentos em stackedBar.",
|
|
3793
|
+
"intentExamples": [
|
|
3794
|
+
"row.capacitySegments",
|
|
3795
|
+
"row.distribuicao"
|
|
3796
|
+
]
|
|
3797
|
+
},
|
|
3798
|
+
{
|
|
3799
|
+
"path": "fieldMetadata[].presentation.visualization.itemsExpr",
|
|
3800
|
+
"category": "behavior",
|
|
3801
|
+
"valueKind": "object",
|
|
3802
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para lista de etapas em processFlow.",
|
|
3803
|
+
"intentExamples": [
|
|
3804
|
+
"row.flowSteps",
|
|
3805
|
+
"row.etapasAprovacao"
|
|
3806
|
+
]
|
|
3807
|
+
},
|
|
3808
|
+
{
|
|
3809
|
+
"path": "fieldMetadata[].presentation.visualization.thresholds",
|
|
3810
|
+
"category": "appearance",
|
|
3811
|
+
"valueKind": "array",
|
|
3812
|
+
"description": "Faixas e limiares semanticos declarativos ({ value, min, max, tone, label }) para coloracao automatica e faixas qualitativas de bullet.",
|
|
3813
|
+
"intentExamples": [
|
|
3814
|
+
"[{ \"value\": 0, \"tone\": \"danger\" }, { \"value\": 60, \"tone\": \"warning\" }, { \"value\": 85, \"tone\": \"success\" }]"
|
|
3815
|
+
]
|
|
3816
|
+
},
|
|
3817
|
+
{
|
|
3818
|
+
"path": "fieldMetadata[].presentation.visualization.stepLabelLineClamp",
|
|
3819
|
+
"category": "layout",
|
|
3820
|
+
"valueKind": "number",
|
|
3821
|
+
"description": "Numero maximo de linhas (1 ou 2) para rotulos de etapas em processFlow."
|
|
3822
|
+
},
|
|
3823
|
+
{
|
|
3824
|
+
"path": "fieldMetadata[].presentation.visualization.ariaLabel",
|
|
3825
|
+
"category": "accessibility",
|
|
3826
|
+
"valueKind": "string",
|
|
3827
|
+
"description": "Rotulo acessivel explicito da micro visualizacao."
|
|
3828
|
+
},
|
|
3829
|
+
{
|
|
3830
|
+
"path": "fieldMetadata[].presentation.visualization.ariaLabelExpr",
|
|
3831
|
+
"category": "accessibility",
|
|
3832
|
+
"valueKind": "object",
|
|
3833
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para compor o rotulo acessivel por linha."
|
|
3834
|
+
},
|
|
3638
3835
|
{
|
|
3639
3836
|
"path": "fieldMetadata[].presentation.visualization.fallbackText",
|
|
3640
3837
|
"category": "accessibility",
|
|
@@ -3642,6 +3839,12 @@
|
|
|
3642
3839
|
"description": "Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.",
|
|
3643
3840
|
"safetyNotes": "Deve explicar valor, unidade, meta, tendencia ou estado quando aplicavel."
|
|
3644
3841
|
},
|
|
3842
|
+
{
|
|
3843
|
+
"path": "fieldMetadata[].presentation.visualization.fallbackTextExpr",
|
|
3844
|
+
"category": "accessibility",
|
|
3845
|
+
"valueKind": "object",
|
|
3846
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para gerar o fallback textual dinamico por linha."
|
|
3847
|
+
},
|
|
3645
3848
|
{
|
|
3646
3849
|
"path": "fieldMetadata[].presentationRules",
|
|
3647
3850
|
"category": "appearance",
|
|
@@ -3690,6 +3893,30 @@
|
|
|
3690
3893
|
"exibir como porcentagem"
|
|
3691
3894
|
]
|
|
3692
3895
|
},
|
|
3896
|
+
{
|
|
3897
|
+
"path": "fieldMetadata[].inlineVisualStyle",
|
|
3898
|
+
"category": "appearance",
|
|
3899
|
+
"valueKind": "enum",
|
|
3900
|
+
"allowedValues": [
|
|
3901
|
+
"compact",
|
|
3902
|
+
"graphic"
|
|
3903
|
+
],
|
|
3904
|
+
"description": "Estilo visual para controles numericos percentuais inline (compact: pilula liquida com micro-anel e popover; graphic: card expandido com donut, trilho graduado e presets).",
|
|
3905
|
+
"intentExamples": [
|
|
3906
|
+
"usar percentual compacto na barra",
|
|
3907
|
+
"exibir card grafico de percentual"
|
|
3908
|
+
]
|
|
3909
|
+
},
|
|
3910
|
+
{
|
|
3911
|
+
"path": "fieldMetadata[].percentPresets",
|
|
3912
|
+
"category": "data",
|
|
3913
|
+
"valueKind": "array",
|
|
3914
|
+
"description": "Lista de percentuais rapidos exibidos nos botoes de preset do Percent Studio (ex.: [0, 25, 50, 75, 100]).",
|
|
3915
|
+
"intentExamples": [
|
|
3916
|
+
"atalhos de percentual 10, 25, 50 e 100%",
|
|
3917
|
+
"definir presets de porcentagem"
|
|
3918
|
+
]
|
|
3919
|
+
},
|
|
3693
3920
|
{
|
|
3694
3921
|
"path": "fieldMetadata[].validators",
|
|
3695
3922
|
"category": "validation",
|
|
@@ -6650,9 +6877,11 @@
|
|
|
6650
6877
|
"allowedValues": [
|
|
6651
6878
|
"create",
|
|
6652
6879
|
"edit",
|
|
6653
|
-
"view"
|
|
6880
|
+
"view",
|
|
6881
|
+
"presentation",
|
|
6882
|
+
"dossier"
|
|
6654
6883
|
],
|
|
6655
|
-
"description": "
|
|
6884
|
+
"description": "Modos nativos preservados em documentos. Em novos fluxos, prefira view com presentationModeGlobal para separar operação dos dados e apresentação."
|
|
6656
6885
|
},
|
|
6657
6886
|
{
|
|
6658
6887
|
"name": "presentation",
|
|
@@ -6669,9 +6898,10 @@
|
|
|
6669
6898
|
"type": "string",
|
|
6670
6899
|
"allowedValues": [
|
|
6671
6900
|
"local-first",
|
|
6672
|
-
"input-first"
|
|
6901
|
+
"input-first",
|
|
6902
|
+
"volatile"
|
|
6673
6903
|
],
|
|
6674
|
-
"description": "Precedência entre configuração persistida e contrato explícito do host. Use input-first em dialogs e surfaces transitórias governadas por schema para preservar mode e estados operacionais publicados pelo servidor."
|
|
6904
|
+
"description": "Precedência entre configuração persistida e contrato explícito do host. Use volatile para filhos controlados por página, sem storage independente. Use input-first em dialogs e surfaces transitórias governadas por schema para preservar mode e estados operacionais publicados pelo servidor."
|
|
6675
6905
|
},
|
|
6676
6906
|
{
|
|
6677
6907
|
"name": "generatedLayoutPreset",
|
|
@@ -9200,9 +9430,9 @@
|
|
|
9200
9430
|
{
|
|
9201
9431
|
"chunkIndex": 0,
|
|
9202
9432
|
"chunkKind": "summary",
|
|
9203
|
-
"content": "Component ID: praxis-dynamic-form\nSelector: praxis-dynamic-form\nFriendly Name: Praxis Dynamic Form\nDescription: Formulario dinamico com layout por secoes/linhas/colunas e campos renderizados por metadados.\nCategory: form\nLib/Package: @praxisui/dynamic-form\nTags: widget, form, configurable, hasWizard, stable\nInputs:\n - resourcePath (string)\n - resourceId (string | number | null)\n - initialValue (Record<string, unknown> | null)\n - emptyState (PraxisDynamicFormEmptyState | null)\n - editorialContext (Record<string, unknown> | null)\n - mode ('create' | 'edit' | 'view')\n - config (FormConfig)\n - actions (FormConfig['actions'] | null)\n - schemaSource ('resource' | 'filter')\n - schemaUrl (string | null)\n - readUrl (string | null)\n - apiEndpointKey (ApiEndpoint | string | null)\n - apiUrlEntry (ApiUrlEntry | null)\n - submitUrl (string | null)\n - submitMethod ('post' | 'put' | 'patch' | null)\n - submitIdempotencyKey (string | null)\n - submitCorrelationId (string | null)\n - submitResourceVersion (string | number | null)\n - submitResourceVersionTargetResourceKey (string | null)\n - submitResourceVersionTargetIdField (string | null)\n - responseSchemaUrl (string | null)\n - enableCustomization (boolean)\n - showAiAssistant (boolean)\n - formId (string)\n - componentInstanceId (string)\n - configPersistenceStrategy ('local-first' | 'input-first')\n - layout (FormLayout)\n - generatedLayoutPreset ('default' | 'compactPresentation')\n - layoutPolicy (DynamicFormLayoutPolicy | null)\n - backConfig (BackConfig)\n - hooks (FormHooksLayout)\n - removeEmptyContainersOnSave (boolean)\n - reactiveValidation (boolean | null)\n - reactiveValidationDebounceMs (number | null)\n - notifyIfOutdated ('inline' | 'snackbar' | 'both' | 'none')\n - snoozeMs (number)\n - autoOpenSettingsOnOutdated (boolean)\n - readonlyModeGlobal (boolean | null)\n - disabledModeGlobal (boolean | null)\n - presentation (DynamicFormPresentationSnapshot | null)\n - presentationModeGlobal (boolean | null)\n - fieldIconPolicy ('all' | 'presentation-only' | 'none')\n - visibleGlobal (boolean | null)\n - customEndpoints (EndpointConfig)\nOutputs:\n - formSubmit (FormSubmitEvent)\n - formCancel (void)\n - formReset (void)\n - configChange (FormConfig)\n - configPatchChange (DynamicFormConfigPatchChangeEvent)\n - formReady (FormReadyEvent)\n - valueChange (FormValueChangeEvent)\n - payloadPreviewChange (FormPayloadPreviewEvent)\n - syncCompleted (SyncResult)\n - initializationError (FormInitializationError)\n - enableCustomizationChange (boolean)\n - customAction (FormCustomActionEvent)\n - actionConfirmation (FormActionConfirmationEvent)\n - schemaStatusChange ({ outdated: boolean; serverHash?: string; lastVerifiedAt?: string; formId?: string })\n - reactiveDeterminationExecuted (ReactiveDeterminationExecutionEvent)\n - reactiveDeterminationPendingChange (boolean)\n",
|
|
9433
|
+
"content": "Component ID: praxis-dynamic-form\nSelector: praxis-dynamic-form\nFriendly Name: Praxis Dynamic Form\nDescription: Formulario dinamico com layout por secoes/linhas/colunas e campos renderizados por metadados.\nCategory: form\nLib/Package: @praxisui/dynamic-form\nTags: widget, form, configurable, hasWizard, stable\nInputs:\n - resourcePath (string)\n - resourceId (string | number | null)\n - initialValue (Record<string, unknown> | null)\n - emptyState (PraxisDynamicFormEmptyState | null)\n - editorialContext (Record<string, unknown> | null)\n - mode ('create' | 'edit' | 'view' | 'presentation' | 'dossier')\n - config (FormConfig)\n - actions (FormConfig['actions'] | null)\n - schemaSource ('resource' | 'filter' | 'action')\n - actionId (string | null)\n - operationId (string | null)\n - schemaUrl (string | null)\n - readUrl (string | null)\n - apiEndpointKey (ApiEndpoint | string | null)\n - apiUrlEntry (ApiUrlEntry | null)\n - submitUrl (string | null)\n - submitMethod ('post' | 'put' | 'patch' | null)\n - submitIdempotencyKey (string | null)\n - submitCorrelationId (string | null)\n - submitResourceVersion (string | number | null)\n - submitResourceVersionTargetResourceKey (string | null)\n - submitResourceVersionTargetIdField (string | null)\n - responseSchemaUrl (string | null)\n - enableCustomization (boolean)\n - showAiAssistant (boolean)\n - formId (string)\n - componentInstanceId (string)\n - configPersistenceStrategy ('local-first' | 'input-first' | 'volatile')\n - layout (FormLayout)\n - generatedLayoutPreset ('default' | 'compactPresentation')\n - layoutPolicy (DynamicFormLayoutPolicy | null)\n - backConfig (BackConfig)\n - hooks (FormHooksLayout)\n - removeEmptyContainersOnSave (boolean)\n - reactiveValidation (boolean | null)\n - reactiveValidationDebounceMs (number | null)\n - notifyIfOutdated ('inline' | 'snackbar' | 'both' | 'none')\n - snoozeMs (number)\n - autoOpenSettingsOnOutdated (boolean)\n - readonlyModeGlobal (boolean | null)\n - disabledModeGlobal (boolean | null)\n - presentation (DynamicFormPresentationSnapshot | null)\n - presentationPreset (FormPresentationPreset)\n - presentationModeGlobal (boolean | null)\n - fieldIconPolicy ('all' | 'presentation-only' | 'none')\n - visibleGlobal (boolean | null)\n - customEndpoints (EndpointConfig)\nOutputs:\n - formSubmit (FormSubmitEvent)\n - formCancel (void)\n - formReset (void)\n - configChange (FormConfig)\n - configPatchChange (DynamicFormConfigPatchChangeEvent)\n - formReady (FormReadyEvent)\n - valueChange (FormValueChangeEvent)\n - payloadPreviewChange (FormPayloadPreviewEvent)\n - syncCompleted (SyncResult)\n - initializationError (FormInitializationError)\n - enableCustomizationChange (boolean)\n - customAction (FormCustomActionEvent)\n - actionConfirmation (FormActionConfirmationEvent)\n - schemaStatusChange ({ outdated: boolean; serverHash?: string; lastVerifiedAt?: string; formId?: string })\n - reactiveDeterminationExecuted (ReactiveDeterminationExecutionEvent)\n - reactiveDeterminationPendingChange (boolean)\n",
|
|
9204
9434
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/praxis-dynamic-form.metadata.ts",
|
|
9205
|
-
"contentHash": "
|
|
9435
|
+
"contentHash": "97e0c3da46840798955442e4cb38ad5e4946c2fa4f5eb841b85182993a83a59e",
|
|
9206
9436
|
"sourceKind": "component_definition",
|
|
9207
9437
|
"sourceId": "praxis-dynamic-form",
|
|
9208
9438
|
"corpusVersion": "1.0.0"
|
|
@@ -9280,9 +9510,9 @@
|
|
|
9280
9510
|
{
|
|
9281
9511
|
"chunkIndex": 8,
|
|
9282
9512
|
"chunkKind": "capabilities",
|
|
9283
|
-
"content": "Schema Capability:\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.prefix\n Category: appearance\n Kind: string\n Description: Prefixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.suffix\n Category: appearance\n Kind: string\n Description: Sufixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.
|
|
9513
|
+
"content": "Schema Capability:\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.prefix\n Category: appearance\n Kind: string\n Description: Prefixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.suffix\n Category: appearance\n Kind: string\n Description: Sufixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.scaleScope\n Category: layout\n Kind: enum\n Description: Escopo de normalizacao de escala para series e valores em colecoes: row (local por linha) ou page (sincronizado na pagina visivel).\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico estatico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.toneExpr\n Category: appearance\n Kind: object\n Description: Expressao Json Logic ou caminho row.<campo> para resolver dinamicamente o tom semantico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.valueExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para obter o valor principal da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.valueSuffix\n Category: appearance\n Kind: string\n Description: Sufixo de unidade anexado ao valor numerico formatado (ex: \"%\", \" pts\", \" ms\", \" d\").\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.compactValue\n Category: appearance\n Kind: boolean\n Description: Formata valores numericos em notacao compacta (ex: 1.2M, 45.3K) para celulas densas.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.min\n Category: behavior\n Kind: number\n Description: Limite minimo explicito da escala numerica.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.max\n Category: behavior\n Kind: number\n Description: Limite maximo explicito da escala numerica.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.total\n Category: behavior\n Kind: number\n Description: Total explicito para proporcionalidade em stackedBar ou radial.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.target\n Category: behavior\n Kind: number\n Description: Meta fixa para comparacao em bullet.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.targetExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para obter a meta por linha em bullet.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.baseline\n Category: behavior\n Kind: number\n Description: Valor de referencia fixo para comparison ou delta.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.baselineExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para obter o valor de referencia (baseline) por linha em comparison ou delta.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.pointsExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para serie de pontos em line, area ou column.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.segmentsExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para lista de segmentos em stackedBar.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.itemsExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para lista de etapas em processFlow.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.thresholds\n Category: appearance\n Kind: array\n Description: Faixas e limiares semanticos declarativos ({ value, min, max, tone, label }) para coloracao automatica e faixas qualitativas de bullet.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.stepLabelLineClamp\n Category: layout\n Kind: number\n Description: Numero maximo de linhas (1 ou 2) para rotulos de etapas em processFlow.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.ariaLabel\n Category: accessibility\n Kind: string\n Description: Rotulo acessivel explicito da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.ariaLabelExpr\n Category: accessibility\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para compor o rotulo acessivel por linha.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.fallbackText\n Category: accessibility\n Kind: string\n Description: Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.",
|
|
9284
9514
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
|
|
9285
|
-
"contentHash": "
|
|
9515
|
+
"contentHash": "dc6be0dc67a901095196573bc7a8f81c4cae31110aa85265ef4ff6e1646b940b",
|
|
9286
9516
|
"sourceKind": "component_definition",
|
|
9287
9517
|
"sourceId": "praxis-dynamic-form",
|
|
9288
9518
|
"corpusVersion": "1.0.0"
|
|
@@ -9290,9 +9520,9 @@
|
|
|
9290
9520
|
{
|
|
9291
9521
|
"chunkIndex": 9,
|
|
9292
9522
|
"chunkKind": "capabilities",
|
|
9293
|
-
"content": "Schema Capability:\n - Path: fieldMetadata[].
|
|
9523
|
+
"content": "Schema Capability:\n - Path: fieldMetadata[].presentation.visualization.fallbackTextExpr\n Category: accessibility\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para gerar o fallback textual dinamico por linha.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules\n Category: appearance\n Kind: array\n Description: Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].when\n Category: behavior\n Kind: object\n Description: Guarda Json Logic avaliada contra o contexto de apresentacao do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n\nSchema Capability:\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n\nSchema Capability:\n - Path: fieldMetadata[].inlineVisualStyle\n Category: appearance\n Kind: enum\n Description: Estilo visual para controles numericos percentuais inline (compact: pilula liquida com micro-anel e popover; graphic: card expandido com donut, trilho graduado e presets).\n\nSchema Capability:\n - Path: fieldMetadata[].percentPresets\n Category: data\n Kind: array\n Description: Lista de percentuais rapidos exibidos nos botoes de preset do Percent Studio (ex.: [0, 25, 50, 75, 100]).\n\nSchema Capability:\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n\nSchema Capability:\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).",
|
|
9294
9524
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
|
|
9295
|
-
"contentHash": "
|
|
9525
|
+
"contentHash": "1e418f6ed02cbfa86ec339516bc55adf540acfabcf2fa04fda54ccf2e15c1843",
|
|
9296
9526
|
"sourceKind": "component_definition",
|
|
9297
9527
|
"sourceId": "praxis-dynamic-form",
|
|
9298
9528
|
"corpusVersion": "1.0.0"
|
|
@@ -9300,9 +9530,9 @@
|
|
|
9300
9530
|
{
|
|
9301
9531
|
"chunkIndex": 10,
|
|
9302
9532
|
"chunkKind": "capabilities",
|
|
9303
|
-
"content": "Schema Capability:\n - Path: fieldMetadata[].
|
|
9533
|
+
"content": "Schema Capability:\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n\nSchema Capability:\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n\nSchema Capability:\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n\nSchema Capability:\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n\nSchema Capability:\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n\nSchema Capability:\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n\nSchema Capability:\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n\nSchema Capability:\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n\nSchema Capability:\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess\n Category: behavior\n Kind: object\n Description: Politica canonica de UX para visibilidade/edicao por authorities publicadas pelo backend.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.visibleForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem ver o campo no runtime quando a UX tiver claims explicitas.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.editableForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem editar o campo no runtime quando a UX tiver claims explicitas.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.reason\n Category: misc\n Kind: string\n Description: Justificativa explicativa/auditavel da politica de acesso do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n\nSchema Capability:\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n\nSchema Capability:\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n\nSchema Capability:\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n\nSchema Capability:\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n\nSchema Capability:\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n\nSchema Capability:\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n\nSchema Capability:\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n\nSchema Capability:\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n\nSchema Capability:\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n\nSchema Capability:\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n\nComponent Capability:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n\nComponent Capability:\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n\nComponent Capability:\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n\nComponent Capability:\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n\nComponent Capability:\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n\nComponent Capability:\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).",
|
|
9304
9534
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
|
|
9305
|
-
"contentHash": "
|
|
9535
|
+
"contentHash": "f5e8c17c1a6e0f3ab98cc132d55ffcf4067ebed9ff5d23daf3d63dbc9072f4ca",
|
|
9306
9536
|
"sourceKind": "component_definition",
|
|
9307
9537
|
"sourceId": "praxis-dynamic-form",
|
|
9308
9538
|
"corpusVersion": "1.0.0"
|
|
@@ -9310,9 +9540,9 @@
|
|
|
9310
9540
|
{
|
|
9311
9541
|
"chunkIndex": 11,
|
|
9312
9542
|
"chunkKind": "capabilities",
|
|
9313
|
-
"content": "Component Capability:\n - Path: inputs.
|
|
9543
|
+
"content": "Component Capability:\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n\nComponent Capability:\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n\nComponent Capability:\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n\nComponent Capability:\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n\nComponent Capability:\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n\nComponent Capability:\n - Path: inputs.submitIdempotencyKey\n Category: inputs\n Kind: string\n Description: Identidade estavel da tentativa de comando, materializada a partir da politica execution da action.\n\nComponent Capability:\n - Path: inputs.submitCorrelationId\n Category: inputs\n Kind: string\n Description: Identificador de correlacao governado para rastreabilidade ponta a ponta do comando.\n\nComponent Capability:\n - Path: inputs.submitResourceVersion\n Category: inputs\n Kind: string\n Description: Versao persistida esperada, transportada como If-Match quando exigida pela action.\n\nComponent Capability:\n - Path: inputs.submitResourceVersionTargetResourceKey\n Category: inputs\n Kind: string\n Description: Resource key canônico materializado pela action para resolver o ETag de outro agregado no momento do submit.\n\nComponent Capability:\n - Path: inputs.submitResourceVersionTargetIdField\n Category: inputs\n Kind: string\n Description: Campo exato do request que identifica o agregado cujo ETag governa a action.\n\nComponent Capability:\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n\nComponent Capability:\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n\nComponent Capability:\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n\nComponent Capability:\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n\nComponent Capability:\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n\nComponent Capability:\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n\nComponent Capability:\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n\nComponent Capability:\n - Path: inputs.configPersistenceStrategy\n Category: inputs\n Kind: enum\n Description: Define se preferências locais persistidas ou o contrato explícito do host governam a materialização corrente.\n\nComponent Capability:\n - Path: inputs.layoutPolicy\n Category: inputs\n Kind: object\n Description: Politica opt-in para materializar layout diretamente do schema atual sem depender de FormConfig.sections authoradas.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.preset\n Category: inputs\n Kind: enum\n Description: Preset de layout schema-driven. compactPresentation cobre detalhe read-only; groupedCommand cobre create/edit.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.persistence\n Category: inputs\n Kind: enum\n Description: Define se sections geradas sao transient ou podem virar layout authorado apos detach explicito.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.orphanFieldExpansion\n Category: inputs\n Kind: enum\n Description: Define como uma linha groupedCommand com um unico campo usa o espaco restante. O default medium-and-wide expande spans 6 ou 8 e preserva campos compactos.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.contextFields\n Category: inputs\n Kind: array\n Description: Campos canônicos do request cujo valor vem do contexto da surface. Eles permanecem no FormGroup e no payload, sem renderizar controles redundantes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.partialRowStrategy\n Category: inputs\n Kind: enum\n Description: Define se cada linha visual parcial, depois de resolver visibilidade responsiva, CSS order e wrap, preserva os spans canônicos ou redistribui apenas campos compatíveis para completar 12 colunas no breakpoint atual.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.",
|
|
9314
9544
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
|
|
9315
|
-
"contentHash": "
|
|
9545
|
+
"contentHash": "fb0074203e0a6e14fec64b7a21f0d85f815714122bb49a18404c5e5c64904c4c",
|
|
9316
9546
|
"sourceKind": "component_definition",
|
|
9317
9547
|
"sourceId": "praxis-dynamic-form",
|
|
9318
9548
|
"corpusVersion": "1.0.0"
|
|
@@ -9320,15 +9550,25 @@
|
|
|
9320
9550
|
{
|
|
9321
9551
|
"chunkIndex": 12,
|
|
9322
9552
|
"chunkKind": "capabilities",
|
|
9323
|
-
"content": "Component Capability:\n - Path: inputs.
|
|
9553
|
+
"content": "Component Capability:\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n\nComponent Capability:\n - Path: inputs.fieldIconPolicy\n Category: inputs\n Kind: enum\n Description: Controla se icones prefix/suffix dos metadados aparecem em todos os modos, apenas apresentacao, ou nunca.\n\nComponent Capability:\n - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n\nComponent Capability:\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n\nComponent Capability:\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n\nComponent Capability:\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n\nComponent Capability:\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n\nComponent Capability:\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n\nComponent Capability:\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n\nComponent Capability:\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n\nComponent Capability:\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n\nComponent Capability:\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n\nComponent Capability:\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n\nComponent Capability:\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n\nComponent Capability:\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n\nComponent Capability:\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n\nComponent Capability:\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n\nComponent Capability:\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n\nComponent Capability:\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n\nComponent Capability:\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n\nComponent Capability:\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n\nComponent Capability:\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n\nComponent Capability:\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n\nComponent Capability:\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n\nComponent Capability:\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n\nComponent Capability:\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n\nComponent Capability:\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n\nComponent Capability:\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n\nComponent Capability:\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n\nComponent Capability:\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n\nComponent Capability:\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n\nComponent Capability:\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n\nComponent Capability:\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.",
|
|
9324
9554
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
|
|
9325
|
-
"contentHash": "
|
|
9555
|
+
"contentHash": "581cd896c206465873181d72b074d69d2bacefd3bae0bca8cc3db46a378af5d3",
|
|
9326
9556
|
"sourceKind": "component_definition",
|
|
9327
9557
|
"sourceId": "praxis-dynamic-form",
|
|
9328
9558
|
"corpusVersion": "1.0.0"
|
|
9329
9559
|
},
|
|
9330
9560
|
{
|
|
9331
9561
|
"chunkIndex": 13,
|
|
9562
|
+
"chunkKind": "capabilities",
|
|
9563
|
+
"content": "Component Capability:\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n\nComponent Capability:\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n\nComponent Capability:\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n\nComponent Capability:\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n\nComponent Capability:\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n\nComponent Capability:\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n\nComponent Capability:\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\n\nCapability Note:\n - Este catalogo descreve inputs e outputs do componente.\n\nCapability Note:\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n\nCapability Note:\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n\nCapability Note:\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n\nCapability Note:\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n\nCapability Note:\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.",
|
|
9564
|
+
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
|
|
9565
|
+
"contentHash": "2ce7f5421defeaee7239892584b36760cd38d627750678d49068eaee9ecfd09c",
|
|
9566
|
+
"sourceKind": "component_definition",
|
|
9567
|
+
"sourceId": "praxis-dynamic-form",
|
|
9568
|
+
"corpusVersion": "1.0.0"
|
|
9569
|
+
},
|
|
9570
|
+
{
|
|
9571
|
+
"chunkIndex": 14,
|
|
9332
9572
|
"chunkKind": "authoring_manifest",
|
|
9333
9573
|
"content": "{\"operationId\":\"field.label.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Alterar rótulo do campo Effects: merge-by-key. Mudar o label do campo email para \\\"E-mail Corporativo\\\" Alterar o label do campo \\\"campoInexistente\\\" Salvar e reabrir o formulário editado sem drift de configuração\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"label\"],\"properties\":[\"label\"],\"semanticTerms\":[\"label\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].label\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"relabel-schema-backed-field\",\"request\":\"Mudar o label do campo email para \\\"E-mail Corporativo\\\"\",\"operationId\":\"field.label.set\",\"target\":\"email\",\"params\":{\"label\":\"E-mail Corporativo\"},\"isPositive\":true},{\"id\":\"round-trip-no-drift\",\"request\":\"Salvar e reabrir o formulário editado sem drift de configuração\",\"operationId\":\"field.label.set\",\"target\":\"nome\",\"params\":{\"label\":\"Nome Completo\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-unknown-field\",\"request\":\"Alterar o label do campo \\\"campoInexistente\\\"\",\"operationId\":\"field.label.set\",\"target\":\"campoInexistente\",\"params\":{\"label\":\"Novo Label\"},\"isPositive\":false}]}",
|
|
9334
9574
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9338,7 +9578,7 @@
|
|
|
9338
9578
|
"corpusVersion": "1.0.0"
|
|
9339
9579
|
},
|
|
9340
9580
|
{
|
|
9341
|
-
"chunkIndex":
|
|
9581
|
+
"chunkIndex": 15,
|
|
9342
9582
|
"chunkKind": "authoring_manifest",
|
|
9343
9583
|
"content": "{\"operationId\":\"field.placeholder.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Alterar placeholder do campo Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"placeholder\"],\"properties\":[\"placeholder\"],\"semanticTerms\":[\"placeholder\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].placeholder\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9344
9584
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9348,7 +9588,7 @@
|
|
|
9348
9588
|
"corpusVersion": "1.0.0"
|
|
9349
9589
|
},
|
|
9350
9590
|
{
|
|
9351
|
-
"chunkIndex":
|
|
9591
|
+
"chunkIndex": 16,
|
|
9352
9592
|
"chunkKind": "authoring_manifest",
|
|
9353
9593
|
"content": "{\"operationId\":\"field.required.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir obrigatoriedade Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"required\"],\"properties\":[\"required\"],\"semanticTerms\":[\"required\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].required\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9354
9594
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9358,7 +9598,7 @@
|
|
|
9358
9598
|
"corpusVersion": "1.0.0"
|
|
9359
9599
|
},
|
|
9360
9600
|
{
|
|
9361
|
-
"chunkIndex":
|
|
9601
|
+
"chunkIndex": 17,
|
|
9362
9602
|
"chunkKind": "authoring_manifest",
|
|
9363
9603
|
"content": "{\"operationId\":\"field.readOnly.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir campo como somente leitura Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"readOnly\"],\"properties\":[\"readOnly\"],\"semanticTerms\":[\"readOnly\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].readOnly\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9364
9604
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9368,7 +9608,7 @@
|
|
|
9368
9608
|
"corpusVersion": "1.0.0"
|
|
9369
9609
|
},
|
|
9370
9610
|
{
|
|
9371
|
-
"chunkIndex":
|
|
9611
|
+
"chunkIndex": 18,
|
|
9372
9612
|
"chunkKind": "authoring_manifest",
|
|
9373
9613
|
"content": "{\"operationId\":\"field.disabled.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir campo como desabilitado Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"disabled\"],\"properties\":[\"disabled\"],\"semanticTerms\":[\"disabled\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].disabled\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9374
9614
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9378,7 +9618,7 @@
|
|
|
9378
9618
|
"corpusVersion": "1.0.0"
|
|
9379
9619
|
},
|
|
9380
9620
|
{
|
|
9381
|
-
"chunkIndex":
|
|
9621
|
+
"chunkIndex": 19,
|
|
9382
9622
|
"chunkKind": "authoring_manifest",
|
|
9383
9623
|
"content": "{\"operationId\":\"field.hidden.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir visibilidade inicial Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"hidden\"],\"properties\":[\"hidden\"],\"semanticTerms\":[\"hidden\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].hidden\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9384
9624
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9388,7 +9628,7 @@
|
|
|
9388
9628
|
"corpusVersion": "1.0.0"
|
|
9389
9629
|
},
|
|
9390
9630
|
{
|
|
9391
|
-
"chunkIndex":
|
|
9631
|
+
"chunkIndex": 20,
|
|
9392
9632
|
"chunkKind": "authoring_manifest",
|
|
9393
9633
|
"content": "{\"operationId\":\"field.controlType.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Alterar tipo de controle Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"controlType\"],\"properties\":[\"controlType\"],\"semanticTerms\":[\"controlType\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].controlType\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"control-type-compatible\",\"level\":\"error\",\"code\":\"DF017\",\"description\":\"O tipo de controle deve ser compatível com o tipo de dado do campo.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9394
9634
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9398,7 +9638,7 @@
|
|
|
9398
9638
|
"corpusVersion": "1.0.0"
|
|
9399
9639
|
},
|
|
9400
9640
|
{
|
|
9401
|
-
"chunkIndex":
|
|
9641
|
+
"chunkIndex": 21,
|
|
9402
9642
|
"chunkKind": "authoring_manifest",
|
|
9403
9643
|
"content": "{\"operationId\":\"field.optionSource.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir fonte de opções do campo Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"optionSource\"],\"properties\":[\"optionSource\"],\"semanticTerms\":[\"optionSource\",\"optionSource.key\",\"optionSource.type\",\"optionSource.resourcePath\",\"optionSource.valuePropertyPath\",\"optionSource.labelPropertyPath\",\"optionSource.dependsOn\",\"optionSource.dependencyFilterMap\",\"optionSource.includeIds\",\"optionSource.capabilities\",\"optionSource.display\",\"optionSource.selectionPolicy\",\"RESOURCE_ENTITY\",\"DISTINCT_DIMENSION\",\"CATEGORICAL_BUCKET\",\"LIGHT_LOOKUP\",\"STATIC_CANONICAL\",\"optionSource.capabilities.filter\",\"optionSource.capabilities.byIds\",\"optionSource.capabilities.detail\",\"optionSource.capabilities.create\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].optionSource\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"option-source-valid\",\"level\":\"error\",\"code\":\"DF018\",\"description\":\"A fonte de opções deve ser válida para o tipo de controle especificado.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-remote-binding\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9404
9644
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9408,7 +9648,7 @@
|
|
|
9408
9648
|
"corpusVersion": "1.0.0"
|
|
9409
9649
|
},
|
|
9410
9650
|
{
|
|
9411
|
-
"chunkIndex":
|
|
9651
|
+
"chunkIndex": 22,
|
|
9412
9652
|
"chunkKind": "authoring_manifest",
|
|
9413
9653
|
"content": "{\"operationId\":\"field.local.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar campo local Effects: append-unique. Adicionar campo auxiliar local \\\"notasInternas\\\" que não deve aparecer no payload de envio\",\"scope\":\"global\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"required\":false},\"inputContract\":{\"required\":[\"name\",\"label\",\"controlType\",\"source\"],\"properties\":[\"name\",\"label\",\"controlType\",\"source\",\"transient\",\"submitPolicy\"],\"semanticTerms\":[\"name\",\"label\",\"controlType\",\"source\",\"transient\",\"submitPolicy\",\"local\",\"omit\",\"include\",\"includeWhenDirty\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"fieldMetadata[]\"],\"validators\":[{\"validatorId\":\"field-name-unique\",\"level\":\"error\",\"code\":\"DF002\",\"description\":\"Nomes de campos devem ser únicos em fieldMetadata.\"},{\"validatorId\":\"local-schema-name-no-collision\",\"level\":\"error\",\"code\":\"DF006\",\"description\":\"Nome de campo local não pode colidir com campo schema-backed existente.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-local-transient-field\",\"request\":\"Adicionar campo auxiliar local \\\"notasInternas\\\" que não deve aparecer no payload de envio\",\"operationId\":\"field.local.add\",\"params\":{\"name\":\"notasInternas\",\"label\":\"Notas Internas\",\"controlType\":\"textarea\",\"source\":\"local\",\"transient\":true,\"submitPolicy\":\"omit\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
9414
9654
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9418,7 +9658,7 @@
|
|
|
9418
9658
|
"corpusVersion": "1.0.0"
|
|
9419
9659
|
},
|
|
9420
9660
|
{
|
|
9421
|
-
"chunkIndex":
|
|
9661
|
+
"chunkIndex": 23,
|
|
9422
9662
|
"chunkKind": "authoring_manifest",
|
|
9423
9663
|
"content": "{\"operationId\":\"field.local.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remover campo local Effects: remove-by-key, compile-domain-patch. Remover o campo auxiliar \\\"notasInternas\\\"\",\"scope\":\"field\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[],\"semanticTerms\":[]},\"effects\":[\"remove-by-key\",\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"field-is-local\",\"level\":\"error\",\"code\":\"DF007\",\"description\":\"Operação restrita a campos locais (source:\\\"local\\\"). Campo schema-backed não pode ser removido ou ter submitPolicy alterada.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"require-confirmation-remove-field\",\"request\":\"Remover o campo auxiliar \\\"notasInternas\\\"\",\"operationId\":\"field.local.remove\",\"target\":\"notasInternas\",\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
9424
9664
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9428,7 +9668,7 @@
|
|
|
9428
9668
|
"corpusVersion": "1.0.0"
|
|
9429
9669
|
},
|
|
9430
9670
|
{
|
|
9431
|
-
"chunkIndex":
|
|
9671
|
+
"chunkIndex": 24,
|
|
9432
9672
|
"chunkKind": "authoring_manifest",
|
|
9433
9673
|
"content": "{\"operationId\":\"field.submitPolicy.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir política de submissão do campo Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"required\":true},\"inputContract\":{\"required\":[\"submitPolicy\"],\"properties\":[\"submitPolicy\"],\"semanticTerms\":[\"submitPolicy\",\"omit\",\"include\",\"includeWhenDirty\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].submitPolicy\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"field-is-local\",\"level\":\"error\",\"code\":\"DF007\",\"description\":\"Operação restrita a campos locais (source:\\\"local\\\"). Campo schema-backed não pode ser removido ou ter submitPolicy alterada.\"},{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9434
9674
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9438,7 +9678,7 @@
|
|
|
9438
9678
|
"corpusVersion": "1.0.0"
|
|
9439
9679
|
},
|
|
9440
9680
|
{
|
|
9441
|
-
"chunkIndex":
|
|
9681
|
+
"chunkIndex": 25,
|
|
9442
9682
|
"chunkKind": "authoring_manifest",
|
|
9443
9683
|
"content": "{\"operationId\":\"layout.section.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar nova seção Effects: append-unique.\",\"scope\":\"global\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"required\":false},\"inputContract\":{\"required\":[\"id\",\"title\"],\"properties\":[\"id\",\"title\",\"icon\",\"collapsible\"],\"semanticTerms\":[\"id\",\"title\",\"icon\",\"collapsible\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"sections[]\"],\"validators\":[{\"validatorId\":\"section-id-unique\",\"level\":\"error\",\"code\":\"DF003\",\"description\":\"IDs de seções devem ser únicos em sections[].\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9444
9684
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9448,7 +9688,7 @@
|
|
|
9448
9688
|
"corpusVersion": "1.0.0"
|
|
9449
9689
|
},
|
|
9450
9690
|
{
|
|
9451
|
-
"chunkIndex":
|
|
9691
|
+
"chunkIndex": 26,
|
|
9452
9692
|
"chunkKind": "authoring_manifest",
|
|
9453
9693
|
"content": "{\"operationId\":\"layout.section.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remover seção Effects: remove-by-key, compile-domain-patch. Remover a seção \\\"Dados Adicionais\\\"\",\"scope\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[],\"semanticTerms\":[]},\"effects\":[\"remove-by-key\",\"compile-domain-patch\"],\"affectedPaths\":[\"sections[]\",\"sections[].rows[]\",\"sections[].rows[].columns[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"validators\":[{\"validatorId\":\"section-exists\",\"level\":\"error\",\"code\":\"DF004\",\"description\":\"A seção alvo deve existir em sections[].\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"require-confirmation-remove-section\",\"request\":\"Remover a seção \\\"Dados Adicionais\\\"\",\"operationId\":\"layout.section.remove\",\"target\":\"secao-dados-adicionais\",\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
9454
9694
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9458,7 +9698,7 @@
|
|
|
9458
9698
|
"corpusVersion": "1.0.0"
|
|
9459
9699
|
},
|
|
9460
9700
|
{
|
|
9461
|
-
"chunkIndex":
|
|
9701
|
+
"chunkIndex": 27,
|
|
9462
9702
|
"chunkKind": "authoring_manifest",
|
|
9463
9703
|
"content": "{\"operationId\":\"layout.row.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar linha numa seção Effects: append-unique.\",\"scope\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"required\":true},\"inputContract\":{\"required\":[\"id\"],\"properties\":[\"id\",\"columns\"],\"semanticTerms\":[\"id\",\"columns\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"sections[].rows[]\"],\"validators\":[{\"validatorId\":\"section-exists\",\"level\":\"error\",\"code\":\"DF004\",\"description\":\"A seção alvo deve existir em sections[].\"},{\"validatorId\":\"row-id-unique-in-section\",\"level\":\"error\",\"code\":\"DF015\",\"description\":\"O id da nova linha deve ser único dentro da seção alvo.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9464
9704
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9468,7 +9708,7 @@
|
|
|
9468
9708
|
"corpusVersion": "1.0.0"
|
|
9469
9709
|
},
|
|
9470
9710
|
{
|
|
9471
|
-
"chunkIndex":
|
|
9711
|
+
"chunkIndex": 28,
|
|
9472
9712
|
"chunkKind": "authoring_manifest",
|
|
9473
9713
|
"content": "{\"operationId\":\"layout.column.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar coluna numa linha Effects: append-unique.\",\"scope\":\"row\",\"target\":{\"kind\":\"row\",\"resolver\":\"row-by-id-in-section\",\"required\":true},\"inputContract\":{\"required\":[\"id\"],\"properties\":[\"id\",\"span\"],\"semanticTerms\":[\"id\",\"span\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"sections[].rows[].columns[]\"],\"validators\":[{\"validatorId\":\"row-exists\",\"level\":\"error\",\"code\":\"DF014\",\"description\":\"A linha alvo deve existir na seção especificada.\"},{\"validatorId\":\"column-id-unique-in-row\",\"level\":\"error\",\"code\":\"DF016\",\"description\":\"O id da nova coluna deve ser único dentro da linha alvo.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9474
9714
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9478,7 +9718,7 @@
|
|
|
9478
9718
|
"corpusVersion": "1.0.0"
|
|
9479
9719
|
},
|
|
9480
9720
|
{
|
|
9481
|
-
"chunkIndex":
|
|
9721
|
+
"chunkIndex": 29,
|
|
9482
9722
|
"chunkKind": "authoring_manifest",
|
|
9483
9723
|
"content": "{\"operationId\":\"layout.field.move\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Mover campo no layout Effects: compile-domain-patch. Mover campo telefone para a primeira coluna da seção de contato\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\",\"index\"],\"semanticTerms\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\",\"index\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"layout-target-exists\",\"level\":\"error\",\"code\":\"DF012\",\"description\":\"A seção/linha/coluna de destino devem existir antes de mover o campo.\"},{\"validatorId\":\"no-index-as-identity\",\"level\":\"error\",\"code\":\"DF013\",\"description\":\"Operações de layout não devem usar índice de array como identidade canônica; use IDs estáveis.\"},{\"validatorId\":\"field-exists-in-layout\",\"level\":\"warning\",\"code\":\"DF005\",\"description\":\"Campo definido em fieldMetadata mas ausente no layout.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"move-field-to-column\",\"request\":\"Mover campo telefone para a primeira coluna da seção de contato\",\"operationId\":\"layout.field.move\",\"target\":\"telefone\",\"params\":{\"targetSectionId\":\"secao-contato\",\"targetRowId\":\"row-1\",\"targetColumnId\":\"col-1\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
9484
9724
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9488,7 +9728,7 @@
|
|
|
9488
9728
|
"corpusVersion": "1.0.0"
|
|
9489
9729
|
},
|
|
9490
9730
|
{
|
|
9491
|
-
"chunkIndex":
|
|
9731
|
+
"chunkIndex": 30,
|
|
9492
9732
|
"chunkKind": "authoring_manifest",
|
|
9493
9733
|
"content": "{\"operationId\":\"layout.visualBlock.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar bloco visual Effects: compile-domain-patch. Adicionar um aviso visual antes dos campos de contato\",\"scope\":\"column\",\"target\":{\"kind\":\"column\",\"resolver\":\"column-by-id-in-row\",\"required\":true},\"inputContract\":{\"required\":[\"id\",\"document\"],\"properties\":[\"id\",\"document\",\"layout\",\"rootClassName\",\"index\"],\"semanticTerms\":[\"id\",\"document\",\"layout\",\"rootClassName\",\"index\",\"document.kind\",\"document.version\",\"document.nodes\",\"block\",\"inline\",\"praxis.rich-content\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"validators\":[{\"validatorId\":\"layout-target-exists\",\"level\":\"error\",\"code\":\"DF012\",\"description\":\"A seção/linha/coluna de destino devem existir antes de mover o campo.\"},{\"validatorId\":\"visual-block-id-unique\",\"level\":\"error\",\"code\":\"DF021\",\"description\":\"IDs de blocos visuais devem ser unicos entre os itens de layout do formulario.\"},{\"validatorId\":\"rich-content-document-valid\",\"level\":\"error\",\"code\":\"DF022\",\"description\":\"O document do bloco visual deve seguir o contrato RichContentDocument canonico.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-visual-block\",\"request\":\"Adicionar um aviso visual antes dos campos de contato\",\"operationId\":\"layout.visualBlock.add\",\"target\":\"col-contato\",\"params\":{\"id\":\"aviso-contato\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"text\":\"Confira os dados antes de salvar.\"}]},\"layout\":\"block\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
9494
9734
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9498,7 +9738,7 @@
|
|
|
9498
9738
|
"corpusVersion": "1.0.0"
|
|
9499
9739
|
},
|
|
9500
9740
|
{
|
|
9501
|
-
"chunkIndex":
|
|
9741
|
+
"chunkIndex": 31,
|
|
9502
9742
|
"chunkKind": "authoring_manifest",
|
|
9503
9743
|
"content": "{\"operationId\":\"layout.visualBlock.update\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Atualizar bloco visual Effects: compile-domain-patch.\",\"scope\":\"layout\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"document\",\"layout\",\"rootClassName\"],\"semanticTerms\":[\"document\",\"layout\",\"rootClassName\",\"document.kind\",\"document.version\",\"document.nodes\",\"block\",\"inline\",\"praxis.rich-content\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"validators\":[{\"validatorId\":\"visual-block-exists\",\"level\":\"error\",\"code\":\"DF020\",\"description\":\"O bloco visual alvo deve existir como item kind:\\\"richContent\\\" em sections[].rows[].columns[].items[].\"},{\"validatorId\":\"rich-content-document-valid\",\"level\":\"error\",\"code\":\"DF022\",\"description\":\"O document do bloco visual deve seguir o contrato RichContentDocument canonico.\"},{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9504
9744
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9508,7 +9748,7 @@
|
|
|
9508
9748
|
"corpusVersion": "1.0.0"
|
|
9509
9749
|
},
|
|
9510
9750
|
{
|
|
9511
|
-
"chunkIndex":
|
|
9751
|
+
"chunkIndex": 32,
|
|
9512
9752
|
"chunkKind": "authoring_manifest",
|
|
9513
9753
|
"content": "{\"operationId\":\"layout.visualBlock.move\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Mover bloco visual Effects: compile-domain-patch. Mover o aviso visual para a segunda coluna da secao de contato\",\"scope\":\"layout\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"required\":true},\"inputContract\":{\"required\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\",\"index\"],\"semanticTerms\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\",\"index\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"validators\":[{\"validatorId\":\"visual-block-exists\",\"level\":\"error\",\"code\":\"DF020\",\"description\":\"O bloco visual alvo deve existir como item kind:\\\"richContent\\\" em sections[].rows[].columns[].items[].\"},{\"validatorId\":\"layout-target-exists\",\"level\":\"error\",\"code\":\"DF012\",\"description\":\"A seção/linha/coluna de destino devem existir antes de mover o campo.\"},{\"validatorId\":\"no-index-as-identity\",\"level\":\"error\",\"code\":\"DF013\",\"description\":\"Operações de layout não devem usar índice de array como identidade canônica; use IDs estáveis.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"move-visual-block\",\"request\":\"Mover o aviso visual para a segunda coluna da secao de contato\",\"operationId\":\"layout.visualBlock.move\",\"target\":\"aviso-contato\",\"params\":{\"targetSectionId\":\"secao-contato\",\"targetRowId\":\"row-1\",\"targetColumnId\":\"col-2\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
9514
9754
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9518,7 +9758,7 @@
|
|
|
9518
9758
|
"corpusVersion": "1.0.0"
|
|
9519
9759
|
},
|
|
9520
9760
|
{
|
|
9521
|
-
"chunkIndex":
|
|
9761
|
+
"chunkIndex": 33,
|
|
9522
9762
|
"chunkKind": "authoring_manifest",
|
|
9523
9763
|
"content": "{\"operationId\":\"layout.visualBlock.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remover bloco visual Effects: compile-domain-patch.\",\"scope\":\"layout\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[],\"semanticTerms\":[]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"validators\":[{\"validatorId\":\"visual-block-exists\",\"level\":\"error\",\"code\":\"DF020\",\"description\":\"O bloco visual alvo deve existir como item kind:\\\"richContent\\\" em sections[].rows[].columns[].items[].\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9524
9764
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9528,7 +9768,7 @@
|
|
|
9528
9768
|
"corpusVersion": "1.0.0"
|
|
9529
9769
|
},
|
|
9530
9770
|
{
|
|
9531
|
-
"chunkIndex":
|
|
9771
|
+
"chunkIndex": 34,
|
|
9532
9772
|
"chunkKind": "authoring_manifest",
|
|
9533
9773
|
"content": "{\"operationId\":\"rule.visibility.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar regra de visibilidade Effects: append-unique. Ocultar o campo cpf quando o tipo de pessoa for jurídica\",\"scope\":\"global\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"required\":false},\"inputContract\":{\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"metadata\"],\"properties\":[\"id\",\"name\",\"type\",\"targetType\",\"targets\",\"condition\",\"metadata\"],\"semanticTerms\":[\"id\",\"name\",\"type\",\"targetType\",\"targets\",\"condition\",\"metadata\",\"visibility\",\"field\",\"section\",\"row\",\"column\",\"action\",\"visualBlock\",\"metadata.origin\",\"metadata.reviewStatus\",\"llm\",\"pending\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"formRules[]\"],\"validators\":[{\"validatorId\":\"rule-id-unique\",\"level\":\"error\",\"code\":\"DF008\",\"description\":\"IDs de regras devem ser únicos em formRules[].\"},{\"validatorId\":\"rule-target-refs-exist\",\"level\":\"error\",\"code\":\"DF010\",\"description\":\"Todos os targets da regra devem referenciar campos, seções, ações ou blocos visuais existentes.\"},{\"validatorId\":\"json-logic-valid\",\"level\":\"error\",\"code\":\"DF011\",\"description\":\"A expressão JsonLogic deve ser um AST válido (suporte canônico à spec JsonLogic).\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-visibility-rule\",\"request\":\"Ocultar o campo cpf quando o tipo de pessoa for jurídica\",\"operationId\":\"rule.visibility.add\",\"params\":{\"id\":\"ocultar-cpf-pj\",\"name\":\"Ocultar CPF para PJ\",\"targetType\":\"field\",\"targets\":[\"cpf\"],\"condition\":{\"==\":[{\"var\":\"tipoPessoa\"},\"juridica\"]}},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
9534
9774
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9538,7 +9778,7 @@
|
|
|
9538
9778
|
"corpusVersion": "1.0.0"
|
|
9539
9779
|
},
|
|
9540
9780
|
{
|
|
9541
|
-
"chunkIndex":
|
|
9781
|
+
"chunkIndex": 35,
|
|
9542
9782
|
"chunkKind": "authoring_manifest",
|
|
9543
9783
|
"content": "{\"operationId\":\"rule.validation.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar regra de validação Effects: append-unique.\",\"scope\":\"global\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"required\":false},\"inputContract\":{\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"message\",\"metadata\"],\"properties\":[\"id\",\"name\",\"type\",\"targetType\",\"targets\",\"condition\",\"message\",\"level\",\"metadata\"],\"semanticTerms\":[\"id\",\"name\",\"type\",\"targetType\",\"targets\",\"condition\",\"message\",\"level\",\"metadata\",\"validation\",\"field\",\"section\",\"row\",\"column\",\"action\",\"visualBlock\",\"error\",\"warning\",\"metadata.origin\",\"metadata.reviewStatus\",\"llm\",\"pending\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"formRules[]\"],\"validators\":[{\"validatorId\":\"rule-id-unique\",\"level\":\"error\",\"code\":\"DF008\",\"description\":\"IDs de regras devem ser únicos em formRules[].\"},{\"validatorId\":\"rule-target-refs-exist\",\"level\":\"error\",\"code\":\"DF010\",\"description\":\"Todos os targets da regra devem referenciar campos, seções, ações ou blocos visuais existentes.\"},{\"validatorId\":\"json-logic-valid\",\"level\":\"error\",\"code\":\"DF011\",\"description\":\"A expressão JsonLogic deve ser um AST válido (suporte canônico à spec JsonLogic).\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9544
9784
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9548,7 +9788,7 @@
|
|
|
9548
9788
|
"corpusVersion": "1.0.0"
|
|
9549
9789
|
},
|
|
9550
9790
|
{
|
|
9551
|
-
"chunkIndex":
|
|
9791
|
+
"chunkIndex": 36,
|
|
9552
9792
|
"chunkKind": "authoring_manifest",
|
|
9553
9793
|
"content": "{\"operationId\":\"rule.computedValue.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar regra de valor calculado Effects: append-unique. Calcular idade a partir da data de nascimento e limpar quando a data estiver vazia\",\"scope\":\"global\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"required\":false},\"inputContract\":{\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"value\",\"metadata\"],\"properties\":[\"id\",\"name\",\"type\",\"targetType\",\"targets\",\"condition\",\"value\",\"valueWhenFalse\",\"metadata\"],\"semanticTerms\":[\"id\",\"name\",\"type\",\"targetType\",\"targets\",\"condition\",\"value\",\"valueWhenFalse\",\"metadata\",\"computedValue\",\"field\",\"value.expression\",\"value.literal\",\"valueWhenFalse.expression\",\"valueWhenFalse.literal\",\"metadata.origin\",\"metadata.reviewStatus\",\"llm\",\"pending\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"formRules[]\"],\"validators\":[{\"validatorId\":\"rule-id-unique\",\"level\":\"error\",\"code\":\"DF008\",\"description\":\"IDs de regras devem ser únicos em formRules[].\"},{\"validatorId\":\"rule-target-refs-exist\",\"level\":\"error\",\"code\":\"DF010\",\"description\":\"Todos os targets da regra devem referenciar campos, seções, ações ou blocos visuais existentes.\"},{\"validatorId\":\"json-logic-valid\",\"level\":\"error\",\"code\":\"DF011\",\"description\":\"A expressão JsonLogic deve ser um AST válido (suporte canônico à spec JsonLogic).\"},{\"validatorId\":\"computed-value-envelope-valid\",\"level\":\"error\",\"code\":\"DF023\",\"description\":\"Valores calculados devem usar envelope explícito e fechado, exatamente { expression: <JsonLogic> } ou exatamente { literal: <valor> }; objetos literais sem envelope ou envelopes com chaves extras são ambíguos.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-computed-value-rule\",\"request\":\"Calcular idade a partir da data de nascimento e limpar quando a data estiver vazia\",\"operationId\":\"rule.computedValue.add\",\"params\":{\"id\":\"birth-date-computes-age\",\"name\":\"Calcular idade\",\"type\":\"computedValue\",\"targetType\":\"field\",\"targets\":[\"age\"],\"condition\":{\"!\":[{\"isBlank\":[{\"var\":\"birthDate\"}]}]},\"value\":{\"expression\":{\"yearsSince\":[{\"var\":\"birthDate\"}]}},\"valueWhenFalse\":{},\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"}},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
9554
9794
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9558,7 +9798,7 @@
|
|
|
9558
9798
|
"corpusVersion": "1.0.0"
|
|
9559
9799
|
},
|
|
9560
9800
|
{
|
|
9561
|
-
"chunkIndex":
|
|
9801
|
+
"chunkIndex": 37,
|
|
9562
9802
|
"chunkKind": "authoring_manifest",
|
|
9563
9803
|
"content": "{\"operationId\":\"rule.visualBlockGuidance.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Materializar orientação visual derivada Effects: append-unique. Materializar no aviso visual a decisao governada que exige aprovacao de compliance para fornecedor com risco critico\",\"scope\":\"global\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"required\":false},\"inputContract\":{\"required\":[\"id\",\"type\",\"targetType\",\"targets\",\"condition\",\"properties\",\"metadata\"],\"properties\":[\"id\",\"name\",\"description\",\"type\",\"targetType\",\"context\",\"targets\",\"condition\",\"properties\",\"propertiesWhenFalse\",\"metadata\"],\"semanticTerms\":[\"id\",\"name\",\"description\",\"type\",\"targetType\",\"context\",\"targets\",\"condition\",\"properties\",\"propertiesWhenFalse\",\"metadata\",\"visualBlockGuidance\",\"visualBlock\",\"notification\",\"style\",\"properties.visible\",\"properties.hidden\",\"properties.layout\",\"properties.className\",\"properties.rootClassName\",\"properties.style\",\"properties.text\",\"properties.title\",\"properties.message\",\"properties.textNodeId\",\"properties.titleNodeId\",\"properties.messageNodeId\",\"propertiesWhenFalse.visible\",\"propertiesWhenFalse.hidden\",\"propertiesWhenFalse.layout\",\"propertiesWhenFalse.className\",\"propertiesWhenFalse.rootClassName\",\"propertiesWhenFalse.style\",\"propertiesWhenFalse.text\",\"propertiesWhenFalse.title\",\"propertiesWhenFalse.message\",\"propertiesWhenFalse.textNodeId\",\"propertiesWhenFalse.titleNodeId\",\"propertiesWhenFalse.messageNodeId\",\"metadata.origin\",\"metadata.reviewStatus\",\"block\",\"inline\",\"llm\",\"pending\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"formRules[]\"],\"validators\":[{\"validatorId\":\"rule-id-unique\",\"level\":\"error\",\"code\":\"DF008\",\"description\":\"IDs de regras devem ser únicos em formRules[].\"},{\"validatorId\":\"visual-block-exists\",\"level\":\"error\",\"code\":\"DF020\",\"description\":\"O bloco visual alvo deve existir como item kind:\\\"richContent\\\" em sections[].rows[].columns[].items[].\"},{\"validatorId\":\"json-logic-valid\",\"level\":\"error\",\"code\":\"DF011\",\"description\":\"A expressão JsonLogic deve ser um AST válido (suporte canônico à spec JsonLogic).\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-visual-block-guidance-rule\",\"request\":\"Materializar no aviso visual a decisao governada que exige aprovacao de compliance para fornecedor com risco critico\",\"operationId\":\"rule.visualBlockGuidance.add\",\"params\":{\"id\":\"supplier-risk-guidance\",\"name\":\"Supplier risk guidance\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"targets\":[\"supplier-risk-notice\"],\"condition\":{\"===\":[{\"var\":\"riscoFornecedor\"},\"critico\"]},\"properties\":{\"message\":\"Fornecedor critico exige aprovacao de compliance antes de emitir o pedido.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--critical\"},\"propertiesWhenFalse\":{\"message\":\"Fornecedor sem bloqueios criticos para este pedido.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--neutral\"},\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"}},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
9564
9804
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9568,7 +9808,7 @@
|
|
|
9568
9808
|
"corpusVersion": "1.0.0"
|
|
9569
9809
|
},
|
|
9570
9810
|
{
|
|
9571
|
-
"chunkIndex":
|
|
9811
|
+
"chunkIndex": 38,
|
|
9572
9812
|
"chunkKind": "authoring_manifest",
|
|
9573
9813
|
"content": "{\"operationId\":\"rule.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remover regra Effects: remove-by-key.\",\"scope\":\"rule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[],\"semanticTerms\":[]},\"effects\":[\"remove-by-key\"],\"affectedPaths\":[\"formRules[]\"],\"validators\":[{\"validatorId\":\"rule-exists\",\"level\":\"error\",\"code\":\"DF009\",\"description\":\"A regra alvo deve existir em formRules[].\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9574
9814
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9578,7 +9818,7 @@
|
|
|
9578
9818
|
"corpusVersion": "1.0.0"
|
|
9579
9819
|
},
|
|
9580
9820
|
{
|
|
9581
|
-
"chunkIndex":
|
|
9821
|
+
"chunkIndex": 39,
|
|
9582
9822
|
"chunkKind": "authoring_manifest",
|
|
9583
9823
|
"content": "{\"operationId\":\"action.submit.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configurar botão de envio Effects: merge-object.\",\"scope\":\"global\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"label\",\"icon\",\"visible\",\"color\"],\"semanticTerms\":[\"label\",\"icon\",\"visible\",\"color\",\"primary\",\"accent\",\"warn\",\"basic\"]},\"effects\":[\"merge-object\"],\"affectedPaths\":[\"actions.submit\"],\"validators\":[{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9584
9824
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9588,7 +9828,7 @@
|
|
|
9588
9828
|
"corpusVersion": "1.0.0"
|
|
9589
9829
|
},
|
|
9590
9830
|
{
|
|
9591
|
-
"chunkIndex":
|
|
9831
|
+
"chunkIndex": 40,
|
|
9592
9832
|
"chunkKind": "authoring_manifest",
|
|
9593
9833
|
"content": "{\"operationId\":\"action.cancel.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configurar botão de cancelar Effects: merge-object.\",\"scope\":\"global\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"label\",\"icon\",\"visible\",\"color\",\"navigateTo\"],\"semanticTerms\":[\"label\",\"icon\",\"visible\",\"color\",\"navigateTo\",\"primary\",\"accent\",\"warn\",\"basic\"]},\"effects\":[\"merge-object\"],\"affectedPaths\":[\"actions.cancel\"],\"validators\":[{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9594
9834
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9598,7 +9838,7 @@
|
|
|
9598
9838
|
"corpusVersion": "1.0.0"
|
|
9599
9839
|
},
|
|
9600
9840
|
{
|
|
9601
|
-
"chunkIndex":
|
|
9841
|
+
"chunkIndex": 41,
|
|
9602
9842
|
"chunkKind": "authoring_manifest",
|
|
9603
9843
|
"content": "{\"operationId\":\"action.reset.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configurar botão de reset Effects: merge-object.\",\"scope\":\"global\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"label\",\"icon\",\"visible\",\"color\",\"confirmBeforeReset\"],\"semanticTerms\":[\"label\",\"icon\",\"visible\",\"color\",\"confirmBeforeReset\",\"primary\",\"accent\",\"warn\",\"basic\"]},\"effects\":[\"merge-object\"],\"affectedPaths\":[\"actions.reset\"],\"validators\":[{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
9604
9844
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9608,7 +9848,7 @@
|
|
|
9608
9848
|
"corpusVersion": "1.0.0"
|
|
9609
9849
|
},
|
|
9610
9850
|
{
|
|
9611
|
-
"chunkIndex":
|
|
9851
|
+
"chunkIndex": 42,
|
|
9612
9852
|
"chunkKind": "authoring_manifest",
|
|
9613
9853
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"identity\"}",
|
|
9614
9854
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9618,17 +9858,17 @@
|
|
|
9618
9858
|
"corpusVersion": "1.0.0"
|
|
9619
9859
|
},
|
|
9620
9860
|
{
|
|
9621
|
-
"chunkIndex":
|
|
9861
|
+
"chunkIndex": 43,
|
|
9622
9862
|
"chunkKind": "authoring_manifest",
|
|
9623
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"showAiAssistant\",\"type\":\"boolean\",\"description\":\"Mostra os gatilhos do copiloto semantico Praxis\"},{\"name\":\"config\",\"type\":\"FormConfig\",\"description\":\"Configuração do formulário; sections é opcional em forms schema-driven e não deve ser criado como array vazio apenas para satisfazer TypeScript.\"},{\"name\":\"actions\",\"type\":\"FormConfig['actions'] | null\",\"description\":\"Overrides de apresentação da barra de ações fornecidos pelo host sem substituir o contrato HTTP da surface.\"},{\"name\":\"formId\",\"type\":\"string\",\"description\":\"Identidade estável usada pelo runtime para persistência local da configuração.\"},{\"name\":\"resourcePath\",\"type\":\"string\",\"description\":\"Caminho do recurso (API)\"},{\"name\":\"resourceId\",\"type\":\"string | number | null\",\"description\":\"Identidade canônica do registro carregado em modos edit e view.\"},{\"name\":\"emptyState\",\"type\":\"PraxisDynamicFormEmptyState | null\",\"description\":\"Authorado em bindings.emptyState no editor; null desliga explicitamente. Placeholder opt-in para mode=view sem resourceId nem snapshot local; reutiliza o empty state compartilhado e mantém a mensagem de negócio no plano/host.\"},{\"name\":\"readUrl\",\"type\":\"string\",\"description\":\"Endpoint canonico de leitura para surfaces VIEW/READ_PROJECTION\"},{\"name\":\"mode\",\"type\":\"string\",\"allowedValues\":[\"create\",\"edit\",\"view\"],\"description\":\"
|
|
9863
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"showAiAssistant\",\"type\":\"boolean\",\"description\":\"Mostra os gatilhos do copiloto semantico Praxis\"},{\"name\":\"config\",\"type\":\"FormConfig\",\"description\":\"Configuração do formulário; sections é opcional em forms schema-driven e não deve ser criado como array vazio apenas para satisfazer TypeScript.\"},{\"name\":\"actions\",\"type\":\"FormConfig['actions'] | null\",\"description\":\"Overrides de apresentação da barra de ações fornecidos pelo host sem substituir o contrato HTTP da surface.\"},{\"name\":\"formId\",\"type\":\"string\",\"description\":\"Identidade estável usada pelo runtime para persistência local da configuração.\"},{\"name\":\"resourcePath\",\"type\":\"string\",\"description\":\"Caminho do recurso (API)\"},{\"name\":\"resourceId\",\"type\":\"string | number | null\",\"description\":\"Identidade canônica do registro carregado em modos edit e view.\"},{\"name\":\"emptyState\",\"type\":\"PraxisDynamicFormEmptyState | null\",\"description\":\"Authorado em bindings.emptyState no editor; null desliga explicitamente. Placeholder opt-in para mode=view sem resourceId nem snapshot local; reutiliza o empty state compartilhado e mantém a mensagem de negócio no plano/host.\"},{\"name\":\"readUrl\",\"type\":\"string\",\"description\":\"Endpoint canonico de leitura para surfaces VIEW/READ_PROJECTION\"},{\"name\":\"mode\",\"type\":\"string\",\"allowedValues\":[\"create\",\"edit\",\"view\",\"presentation\",\"dossier\"],\"description\":\"Modos nativos preservados em documentos. Em novos fluxos, prefira view com presentationModeGlobal para separar operação dos dados e apresentação.\"},{\"name\":\"presentation\",\"type\":\"DynamicFormPresentationSnapshot | null\",\"description\":\"Projeção de contextSnapshot.presentation para hosts e Page Builder. Tamanhos em pixels; null remove ajustes explícitos. Não altera mode nem presentationModeGlobal.\"},{\"name\":\"presentationModeGlobal\",\"type\":\"boolean | null\",\"description\":\"Preferência de exibição, também authorada em bindings.presentationModeGlobal: true apresenta rótulos e valores somente em mode=view; false força campos; null/ausência segue layoutPolicy. Não altera o modo dos dados.\"},{\"name\":\"configPersistenceStrategy\",\"type\":\"string\",\"allowedValues\":[\"local-first\",\"input-first\",\"volatile\"],\"description\":\"Precedência entre configuração persistida e contrato explícito do host. Use volatile para filhos controlados por página, sem storage independente. Use input-first em dialogs e surfaces transitórias governadas por schema para preservar mode e estados operacionais publicados pelo servidor.\"},{\"name\":\"generatedLayoutPreset\",\"type\":\"string\",\"allowedValues\":[\"default\",\"compactPresentation\"],\"description\":\"Preset usado apenas ao gerar a configuracao inicial a partir de metadata/schema; nao reprocessa layouts persistidos ou autorados.\"},{\"name\":\"layoutPolicy\",\"type\":\"DynamicFormLayoutPolicy\",\"description\":\"Politica opt-in para layout schema-driven transient. Use source=schema apenas quando o backend schema for a fonte canonica do agrupamento; use detailSummary para seleção de campos e densidade responsiva do resumo read-only compacto sem FormConfig.sections locais. Quando o resumo precisar vencer x-ui.width publicado para outras surfaces, use detailSummary.widthPrecedence=summary. Em groupedCommand, orphanFieldExpansion governa linhas lógicas com um unico campo; partialRowStrategy=fill-compatible projeta spans compatíveis depois de resolver visibilidade responsiva, CSS order e wrap, sem alterar x-ui.width ou persistir sections; contextFields identifica campos do request hidratados pela surface que permanecem no payload sem criar controles redundantes.\"},{\"name\":\"fieldIconPolicy\",\"type\":\"string\",\"allowedValues\":[\"all\",\"presentation-only\",\"none\"],\"description\":\"Politica visual do host para icones prefix/suffix de campos vindos da metadata. Use presentation-only para manter icones decorativos em apresentacao e ocultar em controles tradicionais.\"},{\"name\":\"enableCustomization\",\"type\":\"boolean\",\"description\":\"Habilita edição visual\"}]}",
|
|
9624
9864
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
9625
|
-
"contentHash": "
|
|
9865
|
+
"contentHash": "2c3f132524d3cf73b6c9cb6f4591d2b1c076e1b444aa5c792be33a8d3d758c46",
|
|
9626
9866
|
"sourceKind": "component_definition",
|
|
9627
9867
|
"sourceId": "praxis-dynamic-form",
|
|
9628
9868
|
"corpusVersion": "1.0.0"
|
|
9629
9869
|
},
|
|
9630
9870
|
{
|
|
9631
|
-
"chunkIndex":
|
|
9871
|
+
"chunkIndex": 44,
|
|
9632
9872
|
"chunkKind": "authoring_manifest",
|
|
9633
9873
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"description\":\"Campos do formulário (metadados schema-backed ou local; use para ops de propriedade)\"},{\"kind\":\"schemaBackedField\",\"resolver\":\"field-by-name-or-label\",\"description\":\"Campos com origem no schema do backend; não removíveis via authoring\"},{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"description\":\"Campos locais com source:\\\"local\\\"; adicionados/removidos via authoring\"},{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"description\":\"Seções de layout identificadas por id estável\"},{\"kind\":\"row\",\"resolver\":\"row-by-id-in-section\",\"description\":\"Linhas dentro de seções, identificadas por id estável\"},{\"kind\":\"column\",\"resolver\":\"column-by-id-in-row\",\"description\":\"Colunas dentro de linhas, identificadas por id estável\"},{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"description\":\"Blocos visuais richContent em sections[].rows[].columns[].items[]; não participam do payload de submissão\"},{\"kind\":\"layoutPlacement\",\"resolver\":\"layout-placement-by-field\",\"description\":\"Posicionamento de campo no layout; target para ops de reposicionamento\"},{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"description\":\"Ações da toolbar (submit, cancel, reset)\"},{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"description\":\"Regras de visibilidade e validação\"},{\"kind\":\"message\",\"resolver\":\"message-by-id\",\"description\":\"Mensagens inline do formulário (info, warning, error); ops em desenvolvimento\"}]}",
|
|
9634
9874
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9638,7 +9878,7 @@
|
|
|
9638
9878
|
"corpusVersion": "1.0.0"
|
|
9639
9879
|
},
|
|
9640
9880
|
{
|
|
9641
|
-
"chunkIndex":
|
|
9881
|
+
"chunkIndex": 45,
|
|
9642
9882
|
"chunkKind": "authoring_manifest",
|
|
9643
9883
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"field.label.set\",\"title\":\"Alterar rótulo do campo\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"label\"],\"properties\":{\"label\":{\"type\":\"string\",\"minLength\":1}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].label\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.placeholder.set\",\"title\":\"Alterar placeholder do campo\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"placeholder\"],\"properties\":{\"placeholder\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].placeholder\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.required.set\",\"title\":\"Definir obrigatoriedade\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"required\"],\"properties\":{\"required\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].required\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.readOnly.set\",\"title\":\"Definir campo como somente leitura\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"readOnly\"],\"properties\":{\"readOnly\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].readOnly\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.disabled.set\",\"title\":\"Definir campo como desabilitado\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"disabled\"],\"properties\":{\"disabled\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].disabled\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.hidden.set\",\"title\":\"Definir visibilidade inicial\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"hidden\"],\"properties\":{\"hidden\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].hidden\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.controlType.set\",\"title\":\"Alterar tipo de controle\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"controlType\"],\"properties\":{\"controlType\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"field-exists\",\"control-type-compatible\"],\"affectedPaths\":[\"fieldMetadata[].controlType\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.optionSource.set\",\"title\":\"Definir fonte de opções do campo\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"optionSource\"],\"properties\":{\"optionSource\":{\"type\":\"object\",\"required\":[\"key\",\"type\",\"resourcePath\"],\"properties\":{\"key\":{\"type\":\"string\"},\"type\":{\"enum\":[\"RESOURCE_ENTITY\",\"DISTINCT_DIMENSION\",\"CATEGORICAL_BUCKET\",\"LIGHT_LOOKUP\",\"STATIC_CANONICAL\"]},\"resourcePath\":{\"type\":\"string\"},\"valuePropertyPath\":{\"type\":\"string\"},\"labelPropertyPath\":{\"type\":\"string\"},\"dependsOn\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"dependencyFilterMap\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}},\"includeIds\":{\"type\":\"boolean\"},\"capabilities\":{\"type\":\"object\",\"properties\":{\"filter\":{\"type\":\"boolean\"},\"byIds\":{\"type\":\"boolean\"},\"detail\":{\"type\":\"boolean\"},\"create\":{\"type\":\"boolean\"}}},\"display\":{\"type\":\"object\"},\"selectionPolicy\":{\"type\":\"object\"}}}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\",\"option-source-valid\"],\"affectedPaths\":[\"fieldMetadata[].optionSource\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.local.add\",\"title\":\"Adicionar campo local\",\"scope\":\"global\",\"targetKind\":\"localField\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"name\",\"label\",\"controlType\",\"source\"],\"properties\":{\"name\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"controlType\":{\"type\":\"string\"},\"source\":{\"const\":\"local\",\"description\":\"Obrigatório. Discriminador que distingue campos locais de schema-backed.\"},\"transient\":{\"type\":\"boolean\",\"default\":false,\"description\":\"Se true, o valor não persiste entre navegações.\"},\"submitPolicy\":{\"enum\":[\"omit\",\"include\",\"includeWhenDirty\"],\"default\":\"omit\"}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-name-unique\",\"local-schema-name-no-collision\"],\"affectedPaths\":[\"fieldMetadata[]\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"field.local.remove\",\"title\":\"Remover campo local\",\"scope\":\"field\",\"targetKind\":\"localField\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"},{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-field-cleanup\",\"handlerContract\":{\"reads\":[\"fieldMetadata[].name\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"writes\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"identityKeys\":[\"fieldMetadata[].name\",\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.name\"],\"properties\":{\"target.name\":{\"type\":\"string\"}}},\"failureModes\":[\"target-field-not-found\",\"target-field-not-local\",\"layout-reference-conflict\"],\"description\":\"Remove every layout placement that references the removed local field by fieldMetadata[].name.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"field-exists\",\"field-is-local\"],\"affectedPaths\":[\"fieldMetadata[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\",\"target-exists\"]}]}",
|
|
9644
9884
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9648,7 +9888,7 @@
|
|
|
9648
9888
|
"corpusVersion": "1.0.0"
|
|
9649
9889
|
},
|
|
9650
9890
|
{
|
|
9651
|
-
"chunkIndex":
|
|
9891
|
+
"chunkIndex": 46,
|
|
9652
9892
|
"chunkKind": "authoring_manifest",
|
|
9653
9893
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"field.submitPolicy.set\",\"title\":\"Definir política de submissão do campo\",\"scope\":\"field\",\"targetKind\":\"localField\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"submitPolicy\"],\"properties\":{\"submitPolicy\":{\"enum\":[\"omit\",\"include\",\"includeWhenDirty\"]}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\",\"field-is-local\",\"editor-round-trip-preserve\"],\"affectedPaths\":[\"fieldMetadata[].submitPolicy\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.section.add\",\"title\":\"Adicionar nova seção\",\"scope\":\"global\",\"targetKind\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"title\"],\"properties\":{\"id\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"collapsible\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"sections[]\",\"key\":\"id\"}],\"validators\":[\"section-id-unique\"],\"affectedPaths\":[\"sections[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"layout.section.remove\",\"title\":\"Remover seção\",\"scope\":\"section\",\"targetKind\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"sections[]\",\"key\":\"id\"},{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-section-cleanup\",\"handlerContract\":{\"reads\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"writes\":[\"sections[]\"],\"identityKeys\":[\"sections[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.id\"],\"properties\":{\"target.id\":{\"type\":\"string\"}}},\"failureModes\":[\"target-section-not-found\",\"ambiguous-section-target\"],\"description\":\"Removes the target section and its nested rows, columns, and field placements without deleting fieldMetadata records.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"section-exists\"],\"affectedPaths\":[\"sections[]\",\"sections[].rows[]\",\"sections[].rows[].columns[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.row.add\",\"title\":\"Adicionar linha numa seção\",\"scope\":\"section\",\"targetKind\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\"},\"columns\":{\"type\":\"number\",\"minimum\":1,\"maximum\":12,\"default\":1}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"sections[].rows[]\",\"key\":\"id\"}],\"validators\":[\"section-exists\",\"row-id-unique-in-section\"],\"affectedPaths\":[\"sections[].rows[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.column.add\",\"title\":\"Adicionar coluna numa linha\",\"scope\":\"row\",\"targetKind\":\"row\",\"target\":{\"kind\":\"row\",\"resolver\":\"row-by-id-in-section\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\"},\"span\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":12,\"default\":6}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"sections[].rows[].columns[]\",\"key\":\"id\"}],\"validators\":[\"row-exists\",\"column-id-unique-in-row\"],\"affectedPaths\":[\"sections[].rows[].columns[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.field.move\",\"title\":\"Mover campo no layout\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-reconciler\",\"handlerContract\":{\"reads\":[\"fieldMetadata[].name\",\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"writes\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"identityKeys\":[\"fieldMetadata[].name\",\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.name\",\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"target.name\":{\"type\":\"string\"},\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"failureModes\":[\"target-field-not-found\",\"target-layout-location-not-found\",\"ambiguous-field-target\",\"duplicate-field-placement\"],\"description\":\"Moves a field placement by stable section, row, column, and field ids; index is insertion position only.\"}}],\"validators\":[\"field-exists\",\"layout-target-exists\",\"no-index-as-identity\",\"field-exists-in-layout\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.visualBlock.add\",\"title\":\"Adicionar bloco visual\",\"scope\":\"column\",\"targetKind\":\"column\",\"target\":{\"kind\":\"column\",\"resolver\":\"column-by-id-in-row\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"document\"],\"properties\":{\"id\":{\"type\":\"string\"},\"document\":{\"type\":\"object\",\"required\":[\"kind\",\"version\",\"nodes\"],\"properties\":{\"kind\":{\"const\":\"praxis.rich-content\"},\"version\":{\"type\":\"string\"},\"nodes\":{\"type\":\"array\"}}},\"layout\":{\"enum\":[\"block\",\"inline\"],\"default\":\"block\"},\"rootClassName\":{\"type\":[\"string\",\"null\"]},\"index\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-visual-block-add\",\"handlerContract\":{\"reads\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items\"],\"writes\":[\"sections[].rows[].columns[].items\"],\"identityKeys\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.sectionId\",\"target.rowId\",\"target.columnId\",\"id\",\"document\"],\"properties\":{\"target.sectionId\":{\"type\":\"string\"},\"target.rowId\":{\"type\":\"string\"},\"target.columnId\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"document\":{\"type\":\"object\"},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"rootClassName\":{\"type\":[\"string\",\"null\"]},\"index\":{\"type\":\"number\"}}},\"failureModes\":[\"target-layout-location-not-found\",\"duplicate-visual-block-id\",\"invalid-rich-content-document\"],\"description\":\"Adds a richContent layout item into sections[].rows[].columns[].items[] by stable section, row, and column ids.\"}}],\"validators\":[\"layout-target-exists\",\"visual-block-id-unique\",\"rich-content-document-valid\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]}]}",
|
|
9654
9894
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9658,7 +9898,7 @@
|
|
|
9658
9898
|
"corpusVersion": "1.0.0"
|
|
9659
9899
|
},
|
|
9660
9900
|
{
|
|
9661
|
-
"chunkIndex":
|
|
9901
|
+
"chunkIndex": 47,
|
|
9662
9902
|
"chunkKind": "authoring_manifest",
|
|
9663
9903
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"layout.visualBlock.update\",\"title\":\"Atualizar bloco visual\",\"scope\":\"layout\",\"targetKind\":\"visualBlock\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"document\":{\"type\":\"object\",\"required\":[\"kind\",\"version\",\"nodes\"],\"properties\":{\"kind\":{\"const\":\"praxis.rich-content\"},\"version\":{\"type\":\"string\"},\"nodes\":{\"type\":\"array\"}}},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"rootClassName\":{\"type\":[\"string\",\"null\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-visual-block-update\",\"handlerContract\":{\"reads\":[\"sections[].rows[].columns[].items[].id\"],\"writes\":[\"sections[].rows[].columns[].items\"],\"identityKeys\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.itemId\"],\"properties\":{\"target.itemId\":{\"type\":\"string\"},\"document\":{\"type\":\"object\"},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"rootClassName\":{\"type\":[\"string\",\"null\"]}}},\"failureModes\":[\"target-visual-block-not-found\",\"invalid-rich-content-document\"],\"description\":\"Updates a richContent layout item by stable layout item id without touching fieldMetadata or form submit payload.\"}}],\"validators\":[\"visual-block-exists\",\"rich-content-document-valid\",\"editor-round-trip-preserve\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.visualBlock.move\",\"title\":\"Mover bloco visual\",\"scope\":\"layout\",\"targetKind\":\"visualBlock\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-visual-block-move\",\"handlerContract\":{\"reads\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"writes\":[\"sections[].rows[].columns[].items\"],\"identityKeys\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.itemId\",\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"target.itemId\":{\"type\":\"string\"},\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"failureModes\":[\"target-visual-block-not-found\",\"target-layout-location-not-found\",\"ambiguous-visual-block-target\"],\"description\":\"Moves a richContent layout item by stable item, section, row, and column ids; index is insertion position only.\"}}],\"validators\":[\"visual-block-exists\",\"layout-target-exists\",\"no-index-as-identity\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.visualBlock.remove\",\"title\":\"Remover bloco visual\",\"scope\":\"layout\",\"targetKind\":\"visualBlock\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-visual-block-remove\",\"handlerContract\":{\"reads\":[\"sections[].rows[].columns[].items[].id\"],\"writes\":[\"sections[].rows[].columns[].items\"],\"identityKeys\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.itemId\"],\"properties\":{\"target.itemId\":{\"type\":\"string\"}}},\"failureModes\":[\"target-visual-block-not-found\",\"ambiguous-visual-block-target\"],\"description\":\"Removes a richContent layout item from sections[].rows[].columns[].items[] without touching fieldMetadata or form submit payload.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"visual-block-exists\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"rule.visibility.add\",\"title\":\"Adicionar regra de visibilidade\",\"scope\":\"global\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"const\":\"visibility\",\"description\":\"Discriminador de tipo da regra; obrigatório para distinção em formRules[]\"},\"targetType\":{\"enum\":[\"field\",\"section\",\"row\",\"column\",\"action\",\"visualBlock\"],\"default\":\"field\"},\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1},\"condition\":{\"type\":\"object\",\"description\":\"JsonLogic AST. Visual-safe subset: field comparisons with scalar or field operands plus and/or groups. Advanced operators are runtime JSON-only until focused visual round-trip support exists.\"},\"metadata\":{\"type\":\"object\",\"required\":[\"origin\",\"reviewStatus\"],\"properties\":{\"origin\":{\"const\":\"llm\",\"description\":\"Origem obrigatória para regra sugerida por IA.\"},\"reviewStatus\":{\"const\":\"pending\",\"description\":\"Toda regra criada pela IA entra pendente de revisão humana.\"}}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"validators\":[\"rule-id-unique\",\"rule-target-refs-exist\",\"json-logic-valid\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"rule.validation.add\",\"title\":\"Adicionar regra de validação\",\"scope\":\"global\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"message\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"const\":\"validation\",\"description\":\"Discriminador de tipo da regra; obrigatório para distinção em formRules[]\"},\"targetType\":{\"enum\":[\"field\",\"section\",\"row\",\"column\",\"action\",\"visualBlock\"],\"default\":\"field\"},\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1},\"condition\":{\"type\":\"object\",\"description\":\"JsonLogic AST; quando true, exibe mensagem de erro. Visual-safe subset: field comparisons with scalar or field operands plus and/or groups. Advanced operators are runtime JSON-only until focused visual round-trip support exists.\"},\"message\":{\"type\":\"string\",\"description\":\"Mensagem de erro a exibir ao usuário\"},\"level\":{\"enum\":[\"error\",\"warning\"],\"default\":\"error\"},\"metadata\":{\"type\":\"object\",\"required\":[\"origin\",\"reviewStatus\"],\"properties\":{\"origin\":{\"const\":\"llm\",\"description\":\"Origem obrigatória para regra sugerida por IA.\"},\"reviewStatus\":{\"const\":\"pending\",\"description\":\"Toda regra criada pela IA entra pendente de revisão humana.\"}}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"validators\":[\"rule-id-unique\",\"rule-target-refs-exist\",\"json-logic-valid\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]}]}",
|
|
9664
9904
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9668,7 +9908,7 @@
|
|
|
9668
9908
|
"corpusVersion": "1.0.0"
|
|
9669
9909
|
},
|
|
9670
9910
|
{
|
|
9671
|
-
"chunkIndex":
|
|
9911
|
+
"chunkIndex": 48,
|
|
9672
9912
|
"chunkKind": "authoring_manifest",
|
|
9673
9913
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"rule.computedValue.add\",\"title\":\"Adicionar regra de valor calculado\",\"scope\":\"global\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"value\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"const\":\"computedValue\",\"description\":\"Discriminador de regra que escreve effect.properties.value em formRules[].\"},\"targetType\":{\"const\":\"field\",\"description\":\"Valor calculado só é materializado em FormControl de campo.\"},\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1},\"condition\":{\"type\":\"object\",\"description\":\"JsonLogic AST; quando true aplica value, quando false aplica valueWhenFalse se informado. Computed expressions are runtime JSON-only unless a focused visual round-trip path exists.\"},\"value\":{\"type\":\"object\",\"description\":\"Envelope obrigatório e fechado: exatamente { expression: <JsonLogic> } para cálculo ou exatamente { literal: <valor> } para valor literal estruturado.\",\"oneOf\":[{\"required\":[\"expression\"],\"not\":{\"required\":[\"literal\"]},\"additionalProperties\":false},{\"required\":[\"literal\"],\"not\":{\"required\":[\"expression\"]},\"additionalProperties\":false}],\"properties\":{\"expression\":{\"type\":\"object\",\"description\":\"JsonLogic AST avaliado contra o contexto do formulário.\"},\"literal\":{\"description\":\"Valor literal, inclusive objeto estruturado.\"}}},\"valueWhenFalse\":{\"type\":\"object\",\"description\":\"Envelope opcional e fechado aplicado no ramo falso. Use exatamente { literal: null } para limpar o valor.\",\"oneOf\":[{\"required\":[\"expression\"],\"not\":{\"required\":[\"literal\"]},\"additionalProperties\":false},{\"required\":[\"literal\"],\"not\":{\"required\":[\"expression\"]},\"additionalProperties\":false}],\"properties\":{\"expression\":{\"type\":\"object\",\"description\":\"JsonLogic AST avaliado contra o contexto do formulário.\"},\"literal\":{\"description\":\"Valor literal, inclusive null.\"}}},\"metadata\":{\"type\":\"object\",\"required\":[\"origin\",\"reviewStatus\"],\"properties\":{\"origin\":{\"const\":\"llm\",\"description\":\"Origem obrigatória para regra sugerida por IA.\"},\"reviewStatus\":{\"const\":\"pending\",\"description\":\"Toda regra criada pela IA entra pendente de revisão humana.\"}}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"validators\":[\"rule-id-unique\",\"rule-target-refs-exist\",\"json-logic-valid\",\"computed-value-envelope-valid\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"rule.visualBlockGuidance.add\",\"title\":\"Materializar orientação visual derivada\",\"scope\":\"global\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"targetType\",\"targets\",\"condition\",\"properties\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"type\":{\"const\":\"visualBlockGuidance\",\"description\":\"Discriminador para regra de orientação visual derivada em formRules[].\"},\"targetType\":{\"const\":\"visualBlock\",\"description\":\"Projeções visuais sempre apontam para richContent layout items e não representam a decisão canônica.\"},\"context\":{\"enum\":[\"notification\",\"style\"],\"default\":\"notification\"},\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1},\"condition\":{\"type\":\"object\",\"description\":\"JsonLogic AST; quando true aplica properties, quando false aplica propertiesWhenFalse. Visual-safe subset: field comparisons with scalar or field operands plus and/or groups. Advanced operators are runtime JSON-only until focused visual round-trip support exists.\"},\"properties\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"visible\":{\"type\":\"boolean\"},\"hidden\":{\"type\":\"boolean\"},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"className\":{\"type\":\"string\"},\"rootClassName\":{\"type\":\"string\"},\"style\":{\"type\":\"object\"},\"text\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"message\":{\"type\":\"string\"},\"textNodeId\":{\"type\":\"string\"},\"titleNodeId\":{\"type\":\"string\"},\"messageNodeId\":{\"type\":\"string\"}},\"description\":\"Use apenas propriedades suportadas por RULE_PROPERTY_SCHEMA.visualBlock; não escreva document, HTML, handlers, dados de payload ou regra de negócio canônica.\"},\"propertiesWhenFalse\":{\"type\":\"object\",\"properties\":{\"visible\":{\"type\":\"boolean\"},\"hidden\":{\"type\":\"boolean\"},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"className\":{\"type\":\"string\"},\"rootClassName\":{\"type\":\"string\"},\"style\":{\"type\":\"object\"},\"text\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"message\":{\"type\":\"string\"},\"textNodeId\":{\"type\":\"string\"},\"titleNodeId\":{\"type\":\"string\"},\"messageNodeId\":{\"type\":\"string\"}}},\"metadata\":{\"type\":\"object\",\"required\":[\"origin\",\"reviewStatus\"],\"properties\":{\"origin\":{\"const\":\"llm\",\"description\":\"Origem obrigatória para regra sugerida por IA.\"},\"reviewStatus\":{\"const\":\"pending\",\"description\":\"Toda regra criada pela IA entra pendente de revisão humana.\"}}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"validators\":[\"rule-id-unique\",\"visual-block-exists\",\"json-logic-valid\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"rule.remove\",\"title\":\"Remover regra\",\"scope\":\"rule\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"rule-exists\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"action.submit.configure\",\"title\":\"Configurar botão de envio\",\"scope\":\"global\",\"targetKind\":\"formAction\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"visible\":{\"type\":\"boolean\"},\"color\":{\"enum\":[\"primary\",\"accent\",\"warn\",\"basic\"]}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"actions.submit\"}],\"validators\":[\"editor-round-trip-preserve\"],\"affectedPaths\":[\"actions.submit\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"action.cancel.configure\",\"title\":\"Configurar botão de cancelar\",\"scope\":\"global\",\"targetKind\":\"formAction\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"visible\":{\"type\":\"boolean\"},\"color\":{\"enum\":[\"primary\",\"accent\",\"warn\",\"basic\"]},\"navigateTo\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"actions.cancel\"}],\"validators\":[\"editor-round-trip-preserve\"],\"affectedPaths\":[\"actions.cancel\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]}]}",
|
|
9674
9914
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9678,7 +9918,7 @@
|
|
|
9678
9918
|
"corpusVersion": "1.0.0"
|
|
9679
9919
|
},
|
|
9680
9920
|
{
|
|
9681
|
-
"chunkIndex":
|
|
9921
|
+
"chunkIndex": 49,
|
|
9682
9922
|
"chunkKind": "authoring_manifest",
|
|
9683
9923
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"action.reset.configure\",\"title\":\"Configurar botão de reset\",\"scope\":\"global\",\"targetKind\":\"formAction\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"visible\":{\"type\":\"boolean\"},\"color\":{\"enum\":[\"primary\",\"accent\",\"warn\",\"basic\"]},\"confirmBeforeReset\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"actions.reset\"}],\"validators\":[\"editor-round-trip-preserve\"],\"affectedPaths\":[\"actions.reset\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]}]}",
|
|
9684
9924
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9688,7 +9928,7 @@
|
|
|
9688
9928
|
"corpusVersion": "1.0.0"
|
|
9689
9929
|
},
|
|
9690
9930
|
{
|
|
9691
|
-
"chunkIndex":
|
|
9931
|
+
"chunkIndex": 50,
|
|
9692
9932
|
"chunkKind": "authoring_manifest",
|
|
9693
9933
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"field-name-unique\",\"level\":\"error\",\"code\":\"DF002\",\"description\":\"Nomes de campos devem ser únicos em fieldMetadata.\"},{\"validatorId\":\"section-id-unique\",\"level\":\"error\",\"code\":\"DF003\",\"description\":\"IDs de seções devem ser únicos em sections[].\"},{\"validatorId\":\"section-exists\",\"level\":\"error\",\"code\":\"DF004\",\"description\":\"A seção alvo deve existir em sections[].\"},{\"validatorId\":\"field-exists-in-layout\",\"level\":\"warning\",\"code\":\"DF005\",\"description\":\"Campo definido em fieldMetadata mas ausente no layout.\"},{\"validatorId\":\"local-schema-name-no-collision\",\"level\":\"error\",\"code\":\"DF006\",\"description\":\"Nome de campo local não pode colidir com campo schema-backed existente.\"},{\"validatorId\":\"field-is-local\",\"level\":\"error\",\"code\":\"DF007\",\"description\":\"Operação restrita a campos locais (source:\\\"local\\\"). Campo schema-backed não pode ser removido ou ter submitPolicy alterada.\"},{\"validatorId\":\"rule-id-unique\",\"level\":\"error\",\"code\":\"DF008\",\"description\":\"IDs de regras devem ser únicos em formRules[].\"},{\"validatorId\":\"rule-exists\",\"level\":\"error\",\"code\":\"DF009\",\"description\":\"A regra alvo deve existir em formRules[].\"},{\"validatorId\":\"rule-target-refs-exist\",\"level\":\"error\",\"code\":\"DF010\",\"description\":\"Todos os targets da regra devem referenciar campos, seções, ações ou blocos visuais existentes.\"},{\"validatorId\":\"computed-value-envelope-valid\",\"level\":\"error\",\"code\":\"DF023\",\"description\":\"Valores calculados devem usar envelope explícito e fechado, exatamente { expression: <JsonLogic> } ou exatamente { literal: <valor> }; objetos literais sem envelope ou envelopes com chaves extras são ambíguos.\"},{\"validatorId\":\"json-logic-valid\",\"level\":\"error\",\"code\":\"DF011\",\"description\":\"A expressão JsonLogic deve ser um AST válido (suporte canônico à spec JsonLogic).\"},{\"validatorId\":\"layout-target-exists\",\"level\":\"error\",\"code\":\"DF012\",\"description\":\"A seção/linha/coluna de destino devem existir antes de mover o campo.\"},{\"validatorId\":\"no-index-as-identity\",\"level\":\"error\",\"code\":\"DF013\",\"description\":\"Operações de layout não devem usar índice de array como identidade canônica; use IDs estáveis.\"},{\"validatorId\":\"row-exists\",\"level\":\"error\",\"code\":\"DF014\",\"description\":\"A linha alvo deve existir na seção especificada.\"},{\"validatorId\":\"row-id-unique-in-section\",\"level\":\"error\",\"code\":\"DF015\",\"description\":\"O id da nova linha deve ser único dentro da seção alvo.\"},{\"validatorId\":\"column-id-unique-in-row\",\"level\":\"error\",\"code\":\"DF016\",\"description\":\"O id da nova coluna deve ser único dentro da linha alvo.\"},{\"validatorId\":\"control-type-compatible\",\"level\":\"error\",\"code\":\"DF017\",\"description\":\"O tipo de controle deve ser compatível com o tipo de dado do campo.\"},{\"validatorId\":\"option-source-valid\",\"level\":\"error\",\"code\":\"DF018\",\"description\":\"A fonte de opções deve ser válida para o tipo de controle especificado.\"},{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"},{\"validatorId\":\"visual-block-exists\",\"level\":\"error\",\"code\":\"DF020\",\"description\":\"O bloco visual alvo deve existir como item kind:\\\"richContent\\\" em sections[].rows[].columns[].items[].\"},{\"validatorId\":\"visual-block-id-unique\",\"level\":\"error\",\"code\":\"DF021\",\"description\":\"IDs de blocos visuais devem ser unicos entre os itens de layout do formulario.\"},{\"validatorId\":\"rich-content-document-valid\",\"level\":\"error\",\"code\":\"DF022\",\"description\":\"O document do bloco visual deve seguir o contrato RichContentDocument canonico.\"}]}",
|
|
9694
9934
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9698,7 +9938,7 @@
|
|
|
9698
9938
|
"corpusVersion": "1.0.0"
|
|
9699
9939
|
},
|
|
9700
9940
|
{
|
|
9701
|
-
"chunkIndex":
|
|
9941
|
+
"chunkIndex": 51,
|
|
9702
9942
|
"chunkKind": "authoring_manifest",
|
|
9703
9943
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"strip-undefined\",\"normalize-json-logic\",\"stable-field-order\",\"preserve-column-layout-items\",\"preserve-local-field-source\",\"preserve-section-row-column-ids\"]}",
|
|
9704
9944
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9708,7 +9948,7 @@
|
|
|
9708
9948
|
"corpusVersion": "1.0.0"
|
|
9709
9949
|
},
|
|
9710
9950
|
{
|
|
9711
|
-
"chunkIndex":
|
|
9951
|
+
"chunkIndex": 52,
|
|
9712
9952
|
"chunkKind": "authoring_manifest",
|
|
9713
9953
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.4\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"add-local-transient-field\",\"request\":\"Adicionar campo auxiliar local \\\"notasInternas\\\" que não deve aparecer no payload de envio\",\"operationId\":\"field.local.add\",\"params\":{\"name\":\"notasInternas\",\"label\":\"Notas Internas\",\"controlType\":\"textarea\",\"source\":\"local\",\"transient\":true,\"submitPolicy\":\"omit\"},\"isPositive\":true},{\"id\":\"relabel-schema-backed-field\",\"request\":\"Mudar o label do campo email para \\\"E-mail Corporativo\\\"\",\"operationId\":\"field.label.set\",\"target\":\"email\",\"params\":{\"label\":\"E-mail Corporativo\"},\"isPositive\":true},{\"id\":\"move-field-to-column\",\"request\":\"Mover campo telefone para a primeira coluna da seção de contato\",\"operationId\":\"layout.field.move\",\"target\":\"telefone\",\"params\":{\"targetSectionId\":\"secao-contato\",\"targetRowId\":\"row-1\",\"targetColumnId\":\"col-1\"},\"isPositive\":true},{\"id\":\"add-visual-block\",\"request\":\"Adicionar um aviso visual antes dos campos de contato\",\"operationId\":\"layout.visualBlock.add\",\"target\":\"col-contato\",\"params\":{\"id\":\"aviso-contato\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"text\":\"Confira os dados antes de salvar.\"}]},\"layout\":\"block\"},\"isPositive\":true},{\"id\":\"move-visual-block\",\"request\":\"Mover o aviso visual para a segunda coluna da secao de contato\",\"operationId\":\"layout.visualBlock.move\",\"target\":\"aviso-contato\",\"params\":{\"targetSectionId\":\"secao-contato\",\"targetRowId\":\"row-1\",\"targetColumnId\":\"col-2\"},\"isPositive\":true},{\"id\":\"add-visibility-rule\",\"request\":\"Ocultar o campo cpf quando o tipo de pessoa for jurídica\",\"operationId\":\"rule.visibility.add\",\"params\":{\"id\":\"ocultar-cpf-pj\",\"name\":\"Ocultar CPF para PJ\",\"targetType\":\"field\",\"targets\":[\"cpf\"],\"condition\":{\"==\":[{\"var\":\"tipoPessoa\"},\"juridica\"]}},\"isPositive\":true},{\"id\":\"add-computed-value-rule\",\"request\":\"Calcular idade a partir da data de nascimento e limpar quando a data estiver vazia\",\"operationId\":\"rule.computedValue.add\",\"params\":{\"id\":\"birth-date-computes-age\",\"name\":\"Calcular idade\",\"type\":\"computedValue\",\"targetType\":\"field\",\"targets\":[\"age\"],\"condition\":{\"!\":[{\"isBlank\":[{\"var\":\"birthDate\"}]}]},\"value\":{\"expression\":{\"yearsSince\":[{\"var\":\"birthDate\"}]}},\"valueWhenFalse\":{},\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"}},\"isPositive\":true},{\"id\":\"add-visual-block-guidance-rule\",\"request\":\"Materializar no aviso visual a decisao governada que exige aprovacao de compliance para fornecedor com risco critico\",\"operationId\":\"rule.visualBlockGuidance.add\",\"params\":{\"id\":\"supplier-risk-guidance\",\"name\":\"Supplier risk guidance\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"targets\":[\"supplier-risk-notice\"],\"condition\":{\"===\":[{\"var\":\"riscoFornecedor\"},\"critico\"]},\"properties\":{\"message\":\"Fornecedor critico exige aprovacao de compliance antes de emitir o pedido.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--critical\"},\"propertiesWhenFalse\":{\"message\":\"Fornecedor sem bloqueios criticos para este pedido.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--neutral\"},\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"}},\"isPositive\":true},{\"id\":\"reject-unknown-field\",\"request\":\"Alterar o label do campo \\\"campoInexistente\\\"\",\"operationId\":\"field.label.set\",\"target\":\"campoInexistente\",\"params\":{\"label\":\"Novo Label\"},\"isPositive\":false},{\"id\":\"require-confirmation-remove-field\",\"request\":\"Remover o campo auxiliar \\\"notasInternas\\\"\",\"operationId\":\"field.local.remove\",\"target\":\"notasInternas\",\"isPositive\":true},{\"id\":\"require-confirmation-remove-section\",\"request\":\"Remover a seção \\\"Dados Adicionais\\\"\",\"operationId\":\"layout.section.remove\",\"target\":\"secao-dados-adicionais\",\"isPositive\":true},{\"id\":\"round-trip-no-drift\",\"request\":\"Salvar e reabrir o formulário editado sem drift de configuração\",\"operationId\":\"field.label.set\",\"target\":\"nome\",\"params\":{\"label\":\"Nome Completo\"},\"isPositive\":true}]}",
|
|
9714
9954
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
|
|
@@ -9718,7 +9958,7 @@
|
|
|
9718
9958
|
"corpusVersion": "1.0.0"
|
|
9719
9959
|
},
|
|
9720
9960
|
{
|
|
9721
|
-
"chunkIndex":
|
|
9961
|
+
"chunkIndex": 53,
|
|
9722
9962
|
"chunkKind": "context_pack",
|
|
9723
9963
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{\"fieldMetadata[].controlType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"input\",\"label\":\"Input\"},{\"value\":\"textarea\",\"label\":\"Textarea\"},{\"value\":\"email\",\"label\":\"Email\"},{\"value\":\"password\",\"label\":\"Password\"},{\"value\":\"search\",\"label\":\"Search\"},{\"value\":\"url\",\"label\":\"URL\"},{\"value\":\"phone\",\"label\":\"Phone\"},{\"value\":\"cpfCnpjInput\",\"label\":\"CPF/CNPJ\"},{\"value\":\"numericTextBox\",\"label\":\"Number\"},{\"value\":\"currency\",\"label\":\"Currency\"},{\"value\":\"priceRange\",\"label\":\"Price range\"},{\"value\":\"date\",\"label\":\"Date picker\"},{\"value\":\"dateRange\",\"label\":\"Date range\"},{\"value\":\"dateInput\",\"label\":\"Date input\"},{\"value\":\"dateTime\",\"label\":\"Datetime\"},{\"value\":\"dateTimeRange\",\"label\":\"Datetime range\"},{\"value\":\"dateTimeLocal\",\"label\":\"Datetime local\"},{\"value\":\"time\",\"label\":\"Time input\"},{\"value\":\"timePicker\",\"label\":\"Time picker\"},{\"value\":\"timeRange\",\"label\":\"Time range\"},{\"value\":\"week\",\"label\":\"Week input\"},{\"value\":\"month\",\"label\":\"Month input\"},{\"value\":\"year\",\"label\":\"Year input\"},{\"value\":\"select\",\"label\":\"Select\"},{\"value\":\"multiSelect\",\"label\":\"Multi select\"},{\"value\":\"multiSelectTree\",\"label\":\"Multi select tree\"},{\"value\":\"treeSelect\",\"label\":\"Tree select\"},{\"value\":\"transferList\",\"label\":\"Transfer list\"},{\"value\":\"autoComplete\",\"label\":\"Autocomplete\"},{\"value\":\"searchable-select\",\"label\":\"Searchable select\"},{\"value\":\"async-select\",\"label\":\"Async select\"},{\"value\":\"radio\",\"label\":\"Radio group\"},{\"value\":\"checkbox\",\"label\":\"Checkbox group\"},{\"value\":\"selectionList\",\"label\":\"Selection list\"},{\"value\":\"toggle\",\"label\":\"Toggle\"},{\"value\":\"buttonToggle\",\"label\":\"Button toggle\"},{\"value\":\"slider\",\"label\":\"Slider\"},{\"value\":\"rangeSlider\",\"label\":\"Range slider\"},{\"value\":\"rating\",\"label\":\"Rating\"},{\"value\":\"chipInput\",\"label\":\"Chips\"},{\"value\":\"chipList\",\"label\":\"Chip list\"},{\"value\":\"upload\",\"label\":\"File upload\"},{\"value\":\"color\",\"label\":\"Color input\"},{\"value\":\"colorPicker\",\"label\":\"Color picker\"},{\"value\":\"cronBuilder\",\"label\":\"Cron builder\"}]},\"fieldMetadata[].source\":{\"mode\":\"enum\",\"options\":[{\"value\":\"schema\",\"label\":\"Schema field\"},{\"value\":\"local\",\"label\":\"Local field\"}]},\"fieldMetadata[].submitPolicy\":{\"mode\":\"enum\",\"options\":[{\"value\":\"omit\",\"label\":\"Omit from submit payload\"},{\"value\":\"include\",\"label\":\"Include in submit payload\"},{\"value\":\"includeWhenDirty\",\"label\":\"Include only when dirty\"}]},\"fieldMetadata[].materialDesign.appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"fill\",\"label\":\"Fill\"},{\"value\":\"outline\",\"label\":\"Outline\"}]},\"fieldMetadata[].materialDesign.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"}]},\"fieldMetadata[].materialDesign.floatLabel\":{\"mode\":\"enum\",\"options\":[{\"value\":\"auto\",\"label\":\"Auto\"},{\"value\":\"always\",\"label\":\"Always\"}]},\"fieldMetadata[].materialDesign.density\":{\"mode\":\"enum\",\"options\":[{\"value\":\"comfortable\",\"label\":\"Comfortable\"},{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"dense\",\"label\":\"Dense\"}]},\"actions.position\":{\"mode\":\"enum\",\"options\":[{\"value\":\"left\",\"label\":\"Left\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"right\",\"label\":\"Right\"},{\"value\":\"justified\",\"label\":\"Justified\"},{\"value\":\"split\",\"label\":\"Split\"}]},\"actions.orientation\":{\"mode\":\"enum\",\"options\":[{\"value\":\"horizontal\",\"label\":\"Horizontal\"},{\"value\":\"vertical\",\"label\":\"Vertical\"}]},\"actions.spacing\":{\"mode\":\"enum\",\"options\":[{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"normal\",\"label\":\"Normal\"},{\"value\":\"spacious\",\"label\":\"Spacious\"}]},\"actions.placement\":{\"mode\":\"enum\",\"options\":[{\"value\":\"insideLastSection\",\"label\":\"Inside last section\"},{\"value\":\"afterSections\",\"label\":\"After sections\"},{\"value\":\"top\",\"label\":\"Top\"}]},\"actions.submit.type\":{\"mode\":\"enum\",\"options\":[{\"value\":\"button\",\"label\":\"Button\"},{\"value\":\"submit\",\"label\":\"Submit\"},{\"value\":\"reset\",\"label\":\"Reset\"}]},\"actions.submit.variant\":{\"mode\":\"enum\",\"options\":[{\"value\":\"raised\",\"label\":\"Raised\"},{\"value\":\"stroked\",\"label\":\"Stroked\"},{\"value\":\"flat\",\"label\":\"Flat\"},{\"value\":\"fab\",\"label\":\"Fab\"}]},\"actions.submit.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"small\",\"label\":\"Small\"},{\"value\":\"medium\",\"label\":\"Medium\"},{\"value\":\"large\",\"label\":\"Large\"}]},\"actions.submit.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"},{\"value\":\"basic\",\"label\":\"Basic\"}]},\"sections[].headerAlign\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"}]},\"sections[].appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"card\",\"label\":\"Card\"},{\"value\":\"plain\",\"label\":\"Plain\"},{\"value\":\"step\",\"label\":\"Step\"}]},\"sections[].sectionHeader.mode\":{\"mode\":\"enum\",\"options\":[{\"value\":\"icon\",\"label\":\"Icon\"},{\"value\":\"avatar-image\",\"label\":\"Avatar image\"},{\"value\":\"avatar-initials\",\"label\":\"Avatar initials\"},{\"value\":\"auto\",\"label\":\"Auto\"}]},\"sections[].sectionHeader.emptyState\":{\"mode\":\"enum\",\"options\":[{\"value\":\"placeholder-avatar\",\"label\":\"Neutral placeholder\"},{\"value\":\"fallback-icon\",\"label\":\"Fallback icon\"},{\"value\":\"none\",\"label\":\"None\"}]},\"sections[].sectionHeader.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"sm\",\"label\":\"Small\"},{\"value\":\"md\",\"label\":\"Medium\"},{\"value\":\"lg\",\"label\":\"Large\"}]},\"sections[].stepLabel\":{\"mode\":\"suggested\",\"options\":[{\"value\":\"Dados básicos\",\"label\":\"Dados básicos\"},{\"value\":\"Detalhes\",\"label\":\"Detalhes\"},{\"value\":\"Confirmação\",\"label\":\"Confirmação\"}]},\"sections[].titleStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"titleLarge\",\"label\":\"Title large\"},{\"value\":\"titleMedium\",\"label\":\"Title medium\"},{\"value\":\"titleSmall\",\"label\":\"Title small\"},{\"value\":\"headlineSmall\",\"label\":\"Headline small\"}]},\"sections[].descriptionStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"bodyLarge\",\"label\":\"Body large\"},{\"value\":\"bodyMedium\",\"label\":\"Body medium\"},{\"value\":\"bodySmall\",\"label\":\"Body small\"}]},\"sections[].rows[].columns[].align\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"end\",\"label\":\"End\"},{\"value\":\"stretch\",\"label\":\"Stretch\"}]},\"sections[].rows[].columns[].items[].kind\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"richContent\",\"label\":\"Rich content\"}]},\"sections[].rows[].columns[].items[].layout\":{\"mode\":\"enum\",\"options\":[{\"value\":\"block\",\"label\":\"Block\"},{\"value\":\"inline\",\"label\":\"Inline\"}]},\"formRules[].targetType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"section\",\"label\":\"Section\"},{\"value\":\"row\",\"label\":\"Row\"},{\"value\":\"column\",\"label\":\"Column\"},{\"value\":\"action\",\"label\":\"Action\"},{\"value\":\"visualBlock\",\"label\":\"Visual block\"}]},\"formRules[].context\":{\"mode\":\"enum\",\"options\":[{\"value\":\"visibility\",\"label\":\"Visibility\"},{\"value\":\"readOnly\",\"label\":\"Read only\"},{\"value\":\"style\",\"label\":\"Style\"},{\"value\":\"validation\",\"label\":\"Validation\"},{\"value\":\"notification\",\"label\":\"Notification\"}]}}}}",
|
|
9724
9964
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
@@ -9728,7 +9968,7 @@
|
|
|
9728
9968
|
"corpusVersion": "1.0.0"
|
|
9729
9969
|
},
|
|
9730
9970
|
{
|
|
9731
|
-
"chunkIndex":
|
|
9971
|
+
"chunkIndex": 54,
|
|
9732
9972
|
"chunkKind": "context_pack",
|
|
9733
9973
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"field.visibility.hide\",\"intentExamples\":[\"hide field\",\"ocultar campo\",\"esconder campo\",\"invisible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":true}]}},{\"id\":\"field.visibility.show\",\"intentExamples\":[\"show field\",\"mostrar campo\",\"exibir campo\",\"visible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":false}]}},{\"id\":\"field.label.set\",\"intentExamples\":[\"label\",\"rename field\",\"renomear campo\",\"titulo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"label\":\"{{value}}\"}]}},{\"id\":\"field.placeholder.set\",\"intentExamples\":[\"placeholder\",\"hint text\",\"texto de ajuda\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"placeholder\":\"{{value}}\"}]}},{\"id\":\"field.required.enable\",\"intentExamples\":[\"required\",\"obrigatorio\",\"mandatory\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":true}]}},{\"id\":\"field.required.disable\",\"intentExamples\":[\"optional\",\"nao obrigatorio\",\"opcional\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":false}]}},{\"id\":\"field.readonly.enable\",\"intentExamples\":[\"readonly\",\"somente leitura\",\"read only\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":true}]}},{\"id\":\"field.readonly.disable\",\"intentExamples\":[\"editable\",\"editavel\",\"read write\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":false}]}},{\"id\":\"field.disabled.enable\",\"intentExamples\":[\"disable field\",\"desabilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":true}]}},{\"id\":\"field.disabled.disable\",\"intentExamples\":[\"enable field\",\"habilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":false}]}},{\"id\":\"field.controlType.set\",\"intentExamples\":[\"control type\",\"tipo de campo\",\"controlType\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"controlType\":\"{{value}}\"}]}},{\"id\":\"field.icon.prefix.set\",\"intentExamples\":[\"prefix icon\",\"icone prefixo\",\"icon before\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"prefixIcon\":\"{{value}}\"}]}},{\"id\":\"field.icon.suffix.set\",\"intentExamples\":[\"suffix icon\",\"icone sufixo\",\"icon after\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"suffixIcon\":\"{{value}}\"}]}},{\"id\":\"section.title.set\",\"intentExamples\":[\"section title\",\"titulo da secao\",\"section name\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"title\":\"{{value}}\"}]}},{\"id\":\"section.description.set\",\"intentExamples\":[\"section description\",\"descricao da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"description\":\"{{value}}\"}]}},{\"id\":\"section.add\",\"intentExamples\":[\"add section\",\"adicionar secao\",\"nova secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{value}}\",\"title\":\"{{value}}\",\"rows\":[]}]},\"safetyNotes\":\"Certifique-se de que o ID da seção é único e relevante.\"},{\"id\":\"section.remove\",\"intentExamples\":[\"remove section\",\"remover secao\",\"excluir secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"section.order.set\",\"intentExamples\":[\"order section\",\"reordenar secao\",\"mover secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_order\":\"{{value}}\"}]},\"safetyNotes\":\"A reordenação de seções é uma operação que deve ser revisada.\"},{\"id\":\"row.add\",\"intentExamples\":[\"add row\",\"adicionar linha\",\"nova linha na secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"columns\":[]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da linha é único e relevante na seção.\"},{\"id\":\"row.remove\",\"intentExamples\":[\"remove row\",\"remover linha\",\"excluir linha da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]},\"safetyNotes\":\"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.add\",\"intentExamples\":[\"add column\",\"adicionar coluna\",\"nova coluna na linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"items\":[]}]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da coluna é único e relevante na linha.\"},{\"id\":\"column.remove\",\"intentExamples\":[\"remove column\",\"remover coluna\",\"excluir coluna da linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]}]},\"safetyNotes\":\"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.field.add\",\"intentExamples\":[\"add field to column\",\"adicionar campo a coluna\",\"colocar campo na coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"id\":\"field-{{value}}\",\"fieldName\":\"{{value}}\"}]}]}]}]},\"safetyNotes\":\"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"},{\"id\":\"column.field.remove\",\"intentExamples\":[\"remove field from column\",\"remover campo da coluna\",\"tirar campo da coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"fieldName\":\"{{value}}\",\"_remove\":true}]}]}]}]},\"safetyNotes\":\"Remover um campo de uma coluna pode alterar o layout do formulário.\"},{\"id\":\"actions.submit.label.set\",\"intentExamples\":[\"submit label\",\"rotulo salvar\",\"texto botao enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.submit.visible.set\",\"intentExamples\":[\"show submit\",\"esconder salvar\",\"visibilidade enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.label.set\",\"intentExamples\":[\"cancel label\",\"rotulo cancelar\",\"texto botao cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.visible.set\",\"intentExamples\":[\"show cancel\",\"esconder cancelar\",\"visibilidade cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.reset.label.set\",\"intentExamples\":[\"reset label\",\"rotulo resetar\",\"texto botao limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.reset.visible.set\",\"intentExamples\":[\"show reset\",\"esconder reset\",\"visibilidade limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"rule.add.visibility\",\"intentExamples\":[\"add visibility rule\",\"regra de visibilidade\",\"campo condicional\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{value.id}}\",\"name\":\"{{value.name}}\",\"targetType\":\"field\",\"targets\":[\"{{target}}\"],\"effect\":{\"condition\":\"{{value.condition}}\",\"properties\":{\"hidden\":false},\"propertiesWhenFalse\":{\"hidden\":true}}}]},\"safetyNotes\":\"Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao.\"},{\"id\":\"rule.remove\",\"intentExamples\":[\"remove rule\",\"excluir regra\",\"apagar regra\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"}]}}",
|
|
9734
9974
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
@@ -9738,7 +9978,7 @@
|
|
|
9738
9978
|
"corpusVersion": "1.0.0"
|
|
9739
9979
|
},
|
|
9740
9980
|
{
|
|
9741
|
-
"chunkIndex":
|
|
9981
|
+
"chunkIndex": 55,
|
|
9742
9982
|
"chunkKind": "context_pack",
|
|
9743
9983
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"rule.add.dependency\",\"intentExamples\":[\"adicionar dependencia\",\"campo depende de\",\"mostrar se\",\"obrigatorio se\",\"desabilitar se\",\"campo condicional\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"triggerField\",\"type\":\"STRING\",\"description\":\"Campo que controla a regra (ex: tipoPessoa)\"},{\"name\":\"conditionValue\",\"type\":\"STRING\",\"description\":\"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado pela regra (ex: cnpj)\"},{\"name\":\"effectType\",\"type\":\"ENUM\",\"options\":[\"visibility\",\"required\",\"disabled\"],\"description\":\"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"rule_{{params.triggerField}}_{{params.targetField}}\",\"name\":\"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"{{params.triggerField}}\"},\"{{params.conditionValue}}\"]},\"properties\":{\"hidden\":\"{{params.effectType === 'visibility' ? false : undefined}}\",\"required\":\"{{params.effectType === 'required' ? true : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? true : undefined}}\"},\"propertiesWhenFalse\":{\"hidden\":\"{{params.effectType === 'visibility' ? true : undefined}}\",\"required\":\"{{params.effectType === 'required' ? false : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? false : undefined}}\"}}}]},\"safetyNotes\":\"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"},{\"id\":\"rule.add.custom\",\"intentExamples\":[\"adicionar regra customizada\",\"regra complexa\",\"logica de formulario\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"id\",\"type\":\"STRING\",\"description\":\"ID único da regra\"},{\"name\":\"condition\",\"type\":\"STRING\",\"description\":\"Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \\\"and\\\": [{ \\\">\\\": [{ \\\"var\\\": \\\"idade\\\" }, 18] }, { \\\"==\\\": [{ \\\"var\\\": \\\"possuiHabilitacao\\\" }, true] }] })\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado\"},{\"name\":\"propertyName\",\"type\":\"STRING\",\"description\":\"Propriedade afetada (hidden, required, disabled, readOnly)\"},{\"name\":\"valueIfTrue\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for verdadeira\"},{\"name\":\"valueIfFalse\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for falsa\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{params.id}}\",\"name\":\"Regra Customizada: {{params.id}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":\"{{params.condition}}\",\"properties\":{\"{{params.propertyName}}\":\"{{params.valueIfTrue}}\"},\"propertiesWhenFalse\":{\"{{params.propertyName}}\":\"{{params.valueIfFalse}}\"}}}]}}]}}",
|
|
9744
9984
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
@@ -9748,7 +9988,7 @@
|
|
|
9748
9988
|
"corpusVersion": "1.0.0"
|
|
9749
9989
|
},
|
|
9750
9990
|
{
|
|
9751
|
-
"chunkIndex":
|
|
9991
|
+
"chunkIndex": 56,
|
|
9752
9992
|
"chunkKind": "context_pack",
|
|
9753
9993
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"fieldResolvers\":{\"fieldMetadata[]\":[\"name\",\"label\"],\"sections[]\":[\"id\",\"title\"],\"sections[].rows[].columns[].items[]\":[\"id\",\"fieldName\"],\"sections[].rows[].columns[].fields[]\":[]},\"hints\":[\"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\"Local fields are real form controls. Create them in fieldMetadata[] with source:\\\"local\\\", usually transient:true and submitPolicy:\\\"omit\\\", then place them as kind:\\\"field\\\" layout items.\",\"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\"Use sections[].rows[].columns[].items[] as the canonical mixed layout order. kind:\\\"field\\\" items reference fieldMetadata; kind:\\\"richContent\\\" items are visual blocks outside submit payload.\",\"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\"For field formRules that must calculate a FormControl value, use effect.properties.value with the closed envelope { expression: <JSON Logic> }, such as { expression: { yearsSince: [{ var: \\\"birthDate\\\" }] } }. Use the closed envelope { literal: <value> } for structured literal objects; do not add extra keys and do not generate TypeScript functions.\",\"For conditional side effects, use formCommandRules with effects[].kind:\\\"global-action\\\" and a structured globalAction ref. The visual editor authors the primary effect and preserves secondary effects from advanced JSON. Do not put alert/modal/navigation commands inside formRules[].effect.properties.\",\"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"]}}",
|
|
9754
9994
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
@@ -9758,7 +9998,7 @@
|
|
|
9758
9998
|
"corpusVersion": "1.0.0"
|
|
9759
9999
|
},
|
|
9760
10000
|
{
|
|
9761
|
-
"chunkIndex":
|
|
10001
|
+
"chunkIndex": 57,
|
|
9762
10002
|
"chunkKind": "recipe",
|
|
9763
10003
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment\",\"_comment\":\"Official Praxis Dynamic Form recipe for governed conditional command rules.\"}",
|
|
9764
10004
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
|
|
@@ -9768,7 +10008,7 @@
|
|
|
9768
10008
|
"corpusVersion": "1.0.0"
|
|
9769
10009
|
},
|
|
9770
10010
|
{
|
|
9771
|
-
"chunkIndex":
|
|
10011
|
+
"chunkIndex": 58,
|
|
9772
10012
|
"chunkKind": "recipe",
|
|
9773
10013
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment2\",\"_comment2\":\"Use when a form must execute host-mediated alerts or confirmations from declarative rules after computed values stabilize.\"}",
|
|
9774
10014
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
|
|
@@ -9778,7 +10018,7 @@
|
|
|
9778
10018
|
"corpusVersion": "1.0.0"
|
|
9779
10019
|
},
|
|
9780
10020
|
{
|
|
9781
|
-
"chunkIndex":
|
|
10021
|
+
"chunkIndex": 59,
|
|
9782
10022
|
"chunkKind": "recipe",
|
|
9783
10023
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"variantId\":\"command-rules\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"status\":\"public-example\",\"tags\":[\"formCommandRules\",\"global-action\",\"computed-values\",\"business-rules\",\"llm-authoring\"],\"useWhen\":\"Create a metadata-driven form with computed values, conditional required fields and governed alert or confirmation dialogs without TypeScript host logic.\",\"examplePrompts\":[\"create a dynamic form rule that calculates age from birth date and alerts when a female applicant is under 18\",\"ask for confirmation when a vacation range starts on Friday\",\"show conditional command rules using dialog.alert and dialog.confirm\"]}}",
|
|
9784
10024
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
|
|
@@ -9788,7 +10028,7 @@
|
|
|
9788
10028
|
"corpusVersion": "1.0.0"
|
|
9789
10029
|
},
|
|
9790
10030
|
{
|
|
9791
|
-
"chunkIndex":
|
|
10031
|
+
"chunkIndex": 60,
|
|
9792
10032
|
"chunkKind": "recipe",
|
|
9793
10033
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"platformValue\",\"platformValue\":{\"canonicalRuntime\":\"@praxisui/dynamic-form evaluates formRules first, stabilizes computed values, then evaluates formCommandRules.\",\"commandContract\":\"formCommandRules uses PraxisRuntimeConditionalEffectRule<PraxisRuntimeGlobalActionEffect> with effects[].kind = global-action and a structured GlobalActionRef.\",\"propertyBoundary\":\"Use formRules for local field/property/value changes. Use formCommandRules for side effects such as alert, confirm, navigation or host-mediated commands.\",\"policyBoundary\":\"Use policy for trigger, distinct, distinctBy and runOnInitialEvaluation. Do not encode operational throttling inside Json Logic condition.\",\"authoringBoundary\":\"The visual config editor exposes command rules and structured payload fields for the primary effect. JSON remains an advanced escape hatch, not the primary authoring path. payloadExpr is preserved from advanced JSON when no structured payload is authored, but it is not a visual field in this cut. Secondary effects remain advanced JSON-authored and are preserved when the primary effect is edited visually.\"}}",
|
|
9794
10034
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
|
|
@@ -9798,7 +10038,7 @@
|
|
|
9798
10038
|
"corpusVersion": "1.0.0"
|
|
9799
10039
|
},
|
|
9800
10040
|
{
|
|
9801
|
-
"chunkIndex":
|
|
10041
|
+
"chunkIndex": 61,
|
|
9802
10042
|
"chunkKind": "recipe",
|
|
9803
10043
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"authoringGuidance\",\"authoringGuidance\":[\"Keep condition as canonical Json Logic, not a string DSL.\",\"Use effect.properties.value with { \\\"expression\\\": ... } for computed values and { \\\"literal\\\": ... } for structured literal values.\",\"Do not put dialog.alert, dialog.confirm, showAlert, navigate or modal commands inside formRules[].effect.properties.\",\"Use formCommandRules[].effects[].globalAction.actionId for the host-mediated command.\",\"Use structured payload fields for the primary effect in the visual editor. Keep payloadExpr and secondary effects in advanced JSON for this cut.\",\"Use trigger on-condition-enter for side effects by default.\",\"Set runOnInitialEvaluation to false unless a command must intentionally run during initial hydration.\",\"Set distinct and distinctBy for value-change commands that should not repeat while the same condition/value remains active.\",\"For date-range commands, use the committed date range value, such as vacationPeriod.startDate, not transient picker preview state.\"]}",
|
|
9804
10044
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
|
|
@@ -9808,7 +10048,7 @@
|
|
|
9808
10048
|
"corpusVersion": "1.0.0"
|
|
9809
10049
|
},
|
|
9810
10050
|
{
|
|
9811
|
-
"chunkIndex":
|
|
10051
|
+
"chunkIndex": 62,
|
|
9812
10052
|
"chunkKind": "recipe",
|
|
9813
10053
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"teaches\",\"teaches\":[\"dynamic-form.formRules.computed-value\",\"dynamic-form.formCommandRules\",\"dynamic-form.formCommandRules.global-action\",\"dynamic-form.formCommandRules.policy\",\"global-action.dialog.alert\",\"global-action.dialog.confirm\",\"date-range.committed-value\"]}",
|
|
9814
10054
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
|
|
@@ -9818,7 +10058,7 @@
|
|
|
9818
10058
|
"corpusVersion": "1.0.0"
|
|
9819
10059
|
},
|
|
9820
10060
|
{
|
|
9821
|
-
"chunkIndex":
|
|
10061
|
+
"chunkIndex": 63,
|
|
9822
10062
|
"chunkKind": "recipe",
|
|
9823
10063
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"testScenarios\",\"testScenarios\":[{\"id\":\"birthDate-age-alert-chain\",\"source\":\"business-rules-form-demo\",\"input\":{\"gender\":\"female\",\"birthDate\":\"2012-05-05\"},\"expects\":[\"formRules computes age before formCommandRules evaluate\",\"registration:female-underage-alert resolves dialog.alert from stabilized age\",\"guardianName remains a local property rule, not a command side effect\"]},{\"id\":\"distinct-age-alert\",\"source\":\"business-rules-form-demo\",\"input\":{\"gender\":\"female\",\"birthDate\":\"2012-05-05\"},\"expects\":[\"dialog.alert runs on condition enter\",\"the same age does not reopen the modal while the condition remains true\",\"distinct memory resets after the condition evaluates false\"]},{\"id\":\"friday-range-confirm\",\"source\":\"business-rules-form-demo\",\"input\":{\"vacationPeriod\":{\"startDate\":\"2026-05-01\",\"endDate\":\"2026-05-08\"}},\"expects\":[\"dialog.confirm evaluates only after startDate and endDate are committed\",\"distinctBy uses vacationPeriod.startDate\",\"picker preview state is not used as command input\"]},{\"id\":\"editor-preview-is-not-execution\",\"source\":\"config-editor\",\"input\":{\"mode\":\"preview\",\"actionId\":\"dialog.alert\"},\"expects\":[\"visual preview reports the command intent\",\"preview does not call GlobalActionService.executeRef\",\"apply/save must still validate actionId and required payload\"]}]}",
|
|
9824
10064
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
|
|
@@ -9828,7 +10068,7 @@
|
|
|
9828
10068
|
"corpusVersion": "1.0.0"
|
|
9829
10069
|
},
|
|
9830
10070
|
{
|
|
9831
|
-
"chunkIndex":
|
|
10071
|
+
"chunkIndex": 64,
|
|
9832
10072
|
"chunkKind": "recipe",
|
|
9833
10073
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"config\",\"config\":{\"fieldMetadata\":[{\"name\":\"name\",\"label\":\"Name\",\"controlType\":\"input\",\"required\":true},{\"name\":\"gender\",\"label\":\"Gender\",\"controlType\":\"select\",\"required\":true,\"options\":[{\"label\":\"Female\",\"value\":\"female\"},{\"label\":\"Male\",\"value\":\"male\"},{\"label\":\"Other\",\"value\":\"other\"}]},{\"name\":\"birthDate\",\"label\":\"Birth date\",\"controlType\":\"datePicker\",\"manualInput\":false,\"hint\":\"Select from the calendar to avoid ambiguous date formats.\"},{\"name\":\"age\",\"label\":\"Age\",\"controlType\":\"numericTextBox\",\"required\":true,\"readOnly\":true,\"min\":0,\"max\":120},{\"name\":\"guardianName\",\"label\":\"Legal guardian\",\"controlType\":\"input\",\"placeholder\":\"Required for underage applicants\"},{\"name\":\"vacationPeriod\",\"label\":\"Vacation period\",\"controlType\":\"dateRange\",\"required\":true,\"minDate\":\"2026-01-01\",\"maxDate\":\"2026-12-31\"},{\"name\":\"reason\",\"label\":\"Notes\",\"controlType\":\"textarea\",\"rows\":3}],\"sections\":[{\"id\":\"registration\",\"title\":\"Registration\",\"appearance\":\"plain\",\"rows\":[{\"id\":\"registration-row\",\"columns\":[{\"id\":\"registration-left\",\"span\":{\"xs\":12,\"md\":6},\"fields\":[\"name\",\"gender\",\"birthDate\"]},{\"id\":\"registration-right\",\"span\":{\"xs\":12,\"md\":6},\"fields\":[\"age\",\"guardianName\"]}]}]},{\"id\":\"vacation\",\"title\":\"Vacation\",\"appearance\":\"plain\",\"rows\":[{\"id\":\"vacation-row\",\"columns\":[{\"id\":\"vacation-column\",\"span\":{\"xs\":12},\"fields\":[\"vacationPeriod\",\"reason\"]}]}]}],\"formRules\":[{\"id\":\"birth-date-computes-age\",\"name\":\"Birth date computes age\",\"targetType\":\"field\",\"targets\":[\"age\"],\"effect\":{\"condition\":{\"!\":[{\"isBlank\":[{\"var\":\"birthDate\"}]}]},\"properties\":{\"value\":{\"expression\":{\"yearsSince\":[{\"var\":\"birthDate\"}]}},\"hint\":\"Calculated from birth date.\"},\"propertiesWhenFalse\":{\"value\":{\"literal\":null},\"hint\":\"\"}}},{\"id\":\"female-underage-requires-guardian\",\"name\":\"Female underage applicant requires guardian\",\"targetType\":\"field\",\"targets\":[\"guardianName\"],\"effect\":{\"condition\":{\"and\":[{\"===\":[{\"var\":\"gender\"},\"female\"]},{\"<\":[{\"var\":\"age\"},18]}]},\"properties\":{\"required\":true,\"color\":\"warn\",\"hint\":\"Required for female applicants under 18.\"},\"propertiesWhenFalse\":{\"required\":false,\"color\":\"primary\",\"hint\":\"\"}}}],\"formCommandRules\":[{\"id\":\"registration:female-underage-alert\",\"description\":\"Alert when a female applicant is under 18 after age is computed.\",\"condition\":{\"and\":[{\"===\":[{\"var\":\"gender\"},\"female\"]},{\"!\":[{\"isBlank\":[{\"var\":\"age\"}]}]},{\"<\":[{\"var\":\"age\"},18]}]},\"effects\":[{\"id\":\"minimum-age-alert\",\"kind\":\"global-action\",\"globalAction\":{\"actionId\":\"dialog.alert\",\"payload\":{\"title\":\"Minimum age\",\"message\":\"For female registration, the expected minimum age is 18.\",\"okLabel\":\"Understood\",\"variant\":\"warning\"}}}],\"policy\":{\"trigger\":\"on-condition-enter\",\"distinct\":true,\"distinctBy\":\"age\",\"runOnInitialEvaluation\":false}},{\"id\":\"vacation:friday-start-confirm\",\"description\":\"Confirm when the committed vacation range starts on Friday.\",\"condition\":{\"and\":[{\"!\":[{\"isBlank\":[{\"var\":\"vacationPeriod.startDate\"}]}]},{\"!\":[{\"isBlank\":[{\"var\":\"vacationPeriod.endDate\"}]}]},{\"weekdayIn\":[{\"var\":\"vacationPeriod.startDate\"},[5]]}]},\"effects\":[{\"id\":\"friday-start-confirm\",\"kind\":\"global-action\",\"globalAction\":{\"actionId\":\"dialog.confirm\",\"payload\":{\"title\":\"Friday start\",\"message\":\"The vacation start date falls on a Friday. Do you want to keep this choice?\",\"confirmLabel\":\"Keep\",\"cancelLabel\":\"Review\",\"variant\":\"question\"}}}],\"policy\":{\"trigger\":\"on-condition-enter\",\"distinct\":true,\"distinctBy\":\"vacationPeriod.startDate\",\"runOnInitialEvaluation\":false}}],\"actions\":{\"submit\":{\"visible\":true,\"label\":\"Submit\",\"icon\":\"send\",\"color\":\"primary\",\"variant\":\"raised\"},\"cancel\":{\"visible\":false},\"reset\":{\"visible\":false}}}}",
|
|
9834
10074
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
|
|
@@ -9838,7 +10078,7 @@
|
|
|
9838
10078
|
"corpusVersion": "1.0.0"
|
|
9839
10079
|
},
|
|
9840
10080
|
{
|
|
9841
|
-
"chunkIndex":
|
|
10081
|
+
"chunkIndex": 65,
|
|
9842
10082
|
"chunkKind": "recipe",
|
|
9843
10083
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"diagnosticExpectations\",\"diagnosticExpectations\":{\"computedBeforeCommands\":true,\"commandEffectsAreGlobalActions\":true,\"commandsAreNotFormRuleProperties\":true,\"runOnInitialEvaluationDefault\":false,\"committedDateRangeOnly\":true,\"previewDoesNotExecuteGlobalAction\":true,\"payloadExprAdvancedJsonOnly\":true,\"scenarioSource\":\"business-rules-form-demo\"}}",
|
|
9844
10084
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
|
|
@@ -9848,7 +10088,7 @@
|
|
|
9848
10088
|
"corpusVersion": "1.0.0"
|
|
9849
10089
|
},
|
|
9850
10090
|
{
|
|
9851
|
-
"chunkIndex":
|
|
10091
|
+
"chunkIndex": 66,
|
|
9852
10092
|
"chunkKind": "recipe",
|
|
9853
10093
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment\",\"_comment\":\"Official recipe for the procurement Entity Lookup cascade published by praxis-api-quickstart.\"}",
|
|
9854
10094
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9858,7 +10098,7 @@
|
|
|
9858
10098
|
"corpusVersion": "1.0.0"
|
|
9859
10099
|
},
|
|
9860
10100
|
{
|
|
9861
|
-
"chunkIndex":
|
|
10101
|
+
"chunkIndex": 67,
|
|
9862
10102
|
"chunkKind": "recipe",
|
|
9863
10103
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment2\",\"_comment2\":\"Use this when agents need a metadata-driven form that selects governed business entities instead of simple option lists.\"}",
|
|
9864
10104
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9868,7 +10108,7 @@
|
|
|
9868
10108
|
"corpusVersion": "1.0.0"
|
|
9869
10109
|
},
|
|
9870
10110
|
{
|
|
9871
|
-
"chunkIndex":
|
|
10111
|
+
"chunkIndex": 68,
|
|
9872
10112
|
"chunkKind": "recipe",
|
|
9873
10113
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"variantId\":\"entity-lookup-procurement\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"status\":\"public-example\",\"tags\":[\"entity-lookup\",\"resource-entity\",\"option-source\",\"cascading\",\"rehydration\",\"procurement\",\"quickstart\"],\"useWhen\":\"Create a purchase order form with real company, supplier, contract and product entity selections.\",\"examplePrompts\":[\"create a purchase order form with company supplier contract and product lookups\",\"generate a form with dependent entityLookup fields backed by optionSource metadata\",\"add a governed lookup cascade with status policy and by-ids rehydration\"]}}",
|
|
9874
10114
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9878,7 +10118,7 @@
|
|
|
9878
10118
|
"corpusVersion": "1.0.0"
|
|
9879
10119
|
},
|
|
9880
10120
|
{
|
|
9881
|
-
"chunkIndex":
|
|
10121
|
+
"chunkIndex": 69,
|
|
9882
10122
|
"chunkKind": "recipe",
|
|
9883
10123
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"platformValue\",\"platformValue\":{\"canonicalOwner\":\"praxis-metadata-starter publishes x-ui.optionSource with RESOURCE_ENTITY semantics.\",\"referenceHost\":\"praxis-api-quickstart exposes the procurement resource and its option-source endpoints.\",\"sharedTypes\":\"@praxisui/core owns OptionSourceMetadata and FieldControlType.ENTITY_LOOKUP.\",\"runtime\":\"@praxisui/dynamic-fields renders entityLookup and inlineEntityLookup.\",\"formIntegration\":\"@praxisui/dynamic-form keeps the submitted payload canonical while the UI rehydrates labels, status and disabled reasons.\",\"authoring\":\"@praxisui/metadata-editor exposes the optionSource.* fields used below.\"}}",
|
|
9884
10124
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9888,7 +10128,7 @@
|
|
|
9888
10128
|
"corpusVersion": "1.0.0"
|
|
9889
10129
|
},
|
|
9890
10130
|
{
|
|
9891
|
-
"chunkIndex":
|
|
10131
|
+
"chunkIndex": 70,
|
|
9892
10132
|
"chunkKind": "recipe",
|
|
9893
10133
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"backendSurfaces\",\"backendSurfaces\":[\"GET /schemas/filtered?path=/api/procurement/purchase-orders&operation=post&schemaType=request\",\"POST /api/procurement/purchase-orders/filter\",\"GET /api/procurement/purchase-orders/capabilities\",\"POST /api/procurement/companies/option-sources/company/options/filter\",\"POST /api/procurement/suppliers/option-sources/supplier/options/filter\",\"POST /api/procurement/contracts/option-sources/contract/options/filter\",\"POST /api/procurement/products/option-sources/product/options/filter\"]}",
|
|
9894
10134
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9898,7 +10138,7 @@
|
|
|
9898
10138
|
"corpusVersion": "1.0.0"
|
|
9899
10139
|
},
|
|
9900
10140
|
{
|
|
9901
|
-
"chunkIndex":
|
|
10141
|
+
"chunkIndex": 71,
|
|
9902
10142
|
"chunkKind": "recipe",
|
|
9903
10143
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"contractNotes\",\"contractNotes\":[\"Persist only stable IDs: companyId, supplierId, contractId and productId.\",\"Use x-ui.optionSource.dependsOn for cascades and add dependencyFilterMap only when the UI field differs from the backend filter key.\",\"Use selectionPolicy.allowRetainInvalidExistingValue to display historical invalid values while blocking new selections.\",\"Use capabilities.byIds=true when edit mode must rehydrate IDs already saved in the resource.\",\"Use dependencyLoadOnChange=immediate and resetOnDependentChange when child lookups must refresh and clear stale values as soon as a parent changes.\",\"Use detail.hrefTemplate or routeTemplate only as navigation metadata; it must not change the submitted value.\"]}",
|
|
9904
10144
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9908,7 +10148,7 @@
|
|
|
9908
10148
|
"corpusVersion": "1.0.0"
|
|
9909
10149
|
},
|
|
9910
10150
|
{
|
|
9911
|
-
"chunkIndex":
|
|
10151
|
+
"chunkIndex": 72,
|
|
9912
10152
|
"chunkKind": "recipe",
|
|
9913
10153
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"renderingExpectations\",\"renderingExpectations\":{\"inline\":\"Default rendering uses an input-like trigger, search dropdown and rich rows with code, label, description, status and blocked reasons.\",\"selectedCard\":\"After selection, show the canonical entity identity with code, label, description, status badges and actions such as detail, change, copy code and clear.\",\"readonly\":\"Readonly mode rehydrates the saved ID and renders label, status and disabled reason without allowing changes.\",\"compact\":\"Compact mode is intended for table filters and dense forms: preserve label, code and status while reducing secondary text.\",\"dialog\":\"Dialog/value-help mode reuses the same optionSource contract and can add table search, column filters, preview panel and selection confirmation.\"}}",
|
|
9914
10154
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9918,7 +10158,7 @@
|
|
|
9918
10158
|
"corpusVersion": "1.0.0"
|
|
9919
10159
|
},
|
|
9920
10160
|
{
|
|
9921
|
-
"chunkIndex":
|
|
10161
|
+
"chunkIndex": 73,
|
|
9922
10162
|
"chunkKind": "recipe",
|
|
9923
10163
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"metadata\",\"metadata\":{\"version\":\"2.0\",\"resourcePath\":\"procurement/purchase-orders\",\"resourceKey\":\"procurement.purchase-orders\",\"operation\":\"create\"}}",
|
|
9924
10164
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9928,7 +10168,7 @@
|
|
|
9928
10168
|
"corpusVersion": "1.0.0"
|
|
9929
10169
|
},
|
|
9930
10170
|
{
|
|
9931
|
-
"chunkIndex":
|
|
10171
|
+
"chunkIndex": 74,
|
|
9932
10172
|
"chunkKind": "recipe",
|
|
9933
10173
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"fieldMetadata\",\"fieldMetadata\":[{\"name\":\"companyId\",\"label\":\"Empresa\",\"placeholder\":\"Buscar empresa...\",\"controlType\":\"entityLookup\",\"required\":true,\"endpoint\":\"/api/procurement/companies/option-sources/company/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"optionSource\":{\"key\":\"company\",\"type\":\"RESOURCE_ENTITY\",\"entityKey\":\"company\",\"resourcePath\":\"/api/procurement/companies\",\"filterField\":\"companyId\",\"propertyPath\":\"id\",\"valuePropertyPath\":\"id\",\"labelPropertyPath\":\"legalName\",\"codePropertyPath\":\"code\",\"descriptionPropertyPaths\":[\"documentNumber\",\"city\",\"state\"],\"statusPropertyPath\":\"status\",\"disabledReasonPropertyPath\":\"disabledReason\",\"searchPropertyPaths\":[\"code\",\"legalName\",\"documentNumber\"],\"searchMode\":\"contains\",\"pageSize\":25,\"includeIds\":true,\"selectionPolicy\":{\"statusPropertyPath\":\"status\",\"allowedStatuses\":[\"ACTIVE\"],\"blockedStatuses\":[\"INACTIVE\",\"BLOCKED\"],\"allowRetainInvalidExistingValue\":true},\"capabilities\":{\"filter\":true,\"byIds\":true,\"detail\":true,\"navigateToDetail\":true,\"auditSnapshot\":true},\"detail\":{\"hrefTemplate\":\"/api/procurement/companies/{id}\",\"routeTemplate\":\"/procurement/companies/{id}\",\"openDetailMode\":\"route\"}}},{\"name\":\"supplierId\",\"label\":\"Fornecedor\",\"placeholder\":\"Buscar fornecedor homologado...\",\"controlType\":\"entityLookup\",\"required\":true,\"endpoint\":\"/api/procurement/suppliers/option-sources/supplier/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"dependentField\":\"companyId\",\"dependencyLoadOnChange\":\"immediate\",\"resetOnDependentChange\":true,\"optionSource\":{\"key\":\"supplier\",\"type\":\"RESOURCE_ENTITY\",\"entityKey\":\"supplier\",\"resourcePath\":\"/api/procurement/suppliers\",\"filterField\":\"supplierId\",\"dependsOn\":[\"companyId\"],\"propertyPath\":\"id\",\"valuePropertyPath\":\"id\",\"labelPropertyPath\":\"legalName\",\"codePropertyPath\":\"code\",\"descriptionPropertyPaths\":[\"documentNumber\",\"homologationStatus\",\"riskLevel\"],\"statusPropertyPath\":\"status\",\"disabledReasonPropertyPath\":\"disabledReason\",\"searchPropertyPaths\":[\"code\",\"legalName\",\"documentNumber\"],\"searchMode\":\"contains\",\"pageSize\":25,\"includeIds\":true,\"selectionPolicy\":{\"statusPropertyPath\":\"status\",\"allowedStatuses\":[\"ACTIVE\",\"APPROVED\"],\"blockedStatuses\":[\"INACTIVE\",\"BLOCKED\"],\"allowRetainInvalidExistingValue\":true},\"capabilities\":{\"filter\":true,\"byIds\":true,\"detail\":true,\"navigateToDetail\":true,\"auditSnapshot\":true},\"detail\":{\"hrefTemplate\":\"/api/procurement/suppliers/{id}\",\"routeTemplate\":\"/procurement/suppliers/{id}\",\"openDetailMode\":\"route\"}}},{\"name\":\"contractId\",\"label\":\"Contrato\",\"placeholder\":\"Buscar contrato vigente...\",\"controlType\":\"entityLookup\",\"endpoint\":\"/api/procurement/contracts/option-sources/contract/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"dependentField\":\"supplierId\",\"dependencyLoadOnChange\":\"immediate\",\"resetOnDependentChange\":true,\"optionSource\":{\"key\":\"contract\",\"type\":\"RESOURCE_ENTITY\",\"entityKey\":\"contract\",\"resourcePath\":\"/api/procurement/contracts\",\"filterField\":\"contractId\",\"dependsOn\":[\"companyId\",\"supplierId\"],\"propertyPath\":\"id\",\"valuePropertyPath\":\"id\",\"labelPropertyPath\":\"number\",\"descriptionPropertyPaths\":[\"supplierName\",\"validUntil\",\"currency\"],\"statusPropertyPath\":\"status\",\"disabledReasonPropertyPath\":\"disabledReason\",\"searchPropertyPaths\":[\"number\",\"supplierName\",\"currency\"],\"searchMode\":\"contains\",\"pageSize\":25,\"includeIds\":true,\"selectionPolicy\":{\"statusPropertyPath\":\"status\",\"allowedStatuses\":[\"ACTIVE\",\"SIGNED\"],\"blockedStatuses\":[\"EXPIRED\",\"CANCELLED\"],\"allowRetainInvalidExistingValue\":true},\"capabilities\":{\"filter\":true,\"byIds\":true,\"detail\":true,\"navigateToDetail\":true,\"auditSnapshot\":true},\"detail\":{\"hrefTemplate\":\"/api/procurement/contracts/{id}\",\"routeTemplate\":\"/procurement/contracts/{id}\",\"openDetailMode\":\"route\"}}},{\"name\":\"productId\",\"label\":\"Produto\",\"placeholder\":\"Buscar produto disponivel...\",\"controlType\":\"entityLookup\",\"required\":true,\"endpoint\":\"/api/procurement/products/option-sources/product/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"dependentField\":\"contractId\",\"dependencyLoadOnChange\":\"immediate\",\"resetOnDependentChange\":true,\"optionSource\":{\"key\":\"product\",\"type\":\"RESOURCE_ENTITY\",\"entityKey\":\"product\",\"resourcePath\":\"/api/procurement/products\",\"filterField\":\"productId\",\"dependsOn\":[\"companyId\",\"contractId\"],\"propertyPath\":\"id\",\"valuePropertyPath\":\"id\",\"labelPropertyPath\":\"name\",\"codePropertyPath\":\"sku\",\"descriptionPropertyPaths\":[\"categoryName\",\"stockAvailable\",\"unitOfMeasure\"],\"statusPropertyPath\":\"status\",\"disabledReasonPropertyPath\":\"disabledReason\",\"searchPropertyPaths\":[\"sku\",\"name\",\"categoryName\"],\"searchMode\":\"contains\",\"pageSize\":25,\"includeIds\":true,\"selectionPolicy\":{\"statusPropertyPath\":\"status\",\"allowedStatuses\":[\"ACTIVE\",\"AVAILABLE\"],\"blockedStatuses\":[\"INACTIVE\",\"BLOCKED\"],\"allowRetainInvalidExistingValue\":true},\"capabilities\":{\"filter\":true,\"byIds\":true,\"detail\":true,\"navigateToDetail\":true,\"auditSnapshot\":true},\"detail\":{\"hrefTemplate\":\"/api/procurement/products/{id}\",\"routeTemplate\":\"/procurement/products/{id}\",\"openDetailMode\":\"route\"}}},{\"name\":\"orderDate\",\"label\":\"Data do pedido\",\"controlType\":\"date\"},{\"name\":\"currency\",\"label\":\"Moeda\",\"controlType\":\"select\",\"options\":[{\"label\":\"BRL\",\"value\":\"BRL\"},{\"label\":\"USD\",\"value\":\"USD\"}]},{\"name\":\"quantity\",\"label\":\"Quantidade\",\"controlType\":\"numericTextBox\",\"validators\":{\"min\":1}}]}",
|
|
9934
10174
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9938,7 +10178,7 @@
|
|
|
9938
10178
|
"corpusVersion": "1.0.0"
|
|
9939
10179
|
},
|
|
9940
10180
|
{
|
|
9941
|
-
"chunkIndex":
|
|
10181
|
+
"chunkIndex": 75,
|
|
9942
10182
|
"chunkKind": "recipe",
|
|
9943
10183
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"sections\",\"sections\":[{\"id\":\"commercial-context\",\"title\":\"Commercial context\",\"rows\":[{\"id\":\"commercial-context-row\",\"columns\":[{\"id\":\"company-column\",\"fields\":[\"companyId\",\"orderDate\"]},{\"id\":\"currency-column\",\"fields\":[\"currency\",\"quantity\"]}]}]},{\"id\":\"purchase-entities\",\"title\":\"Purchase entities\",\"rows\":[{\"id\":\"purchase-entities-row-1\",\"columns\":[{\"id\":\"supplier-column\",\"fields\":[\"supplierId\"]},{\"id\":\"contract-column\",\"fields\":[\"contractId\"]}]},{\"id\":\"purchase-entities-row-2\",\"columns\":[{\"id\":\"product-column\",\"fields\":[\"productId\"]}]}]}]}",
|
|
9944
10184
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9948,7 +10188,7 @@
|
|
|
9948
10188
|
"corpusVersion": "1.0.0"
|
|
9949
10189
|
},
|
|
9950
10190
|
{
|
|
9951
|
-
"chunkIndex":
|
|
10191
|
+
"chunkIndex": 76,
|
|
9952
10192
|
"chunkKind": "recipe",
|
|
9953
10193
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"initialData\",\"initialData\":{\"companyId\":1,\"supplierId\":10,\"contractId\":20,\"productId\":30,\"orderDate\":\"2026-04-15\",\"currency\":\"BRL\",\"quantity\":2}}",
|
|
9954
10194
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9958,7 +10198,7 @@
|
|
|
9958
10198
|
"corpusVersion": "1.0.0"
|
|
9959
10199
|
},
|
|
9960
10200
|
{
|
|
9961
|
-
"chunkIndex":
|
|
10201
|
+
"chunkIndex": 77,
|
|
9962
10202
|
"chunkKind": "recipe",
|
|
9963
10203
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"expectedLookupRequests\",\"expectedLookupRequests\":{\"filterSupplier\":{\"method\":\"POST\",\"url\":\"/api/procurement/suppliers/option-sources/supplier/options/filter\",\"body\":{\"query\":\"acme\",\"filters\":{\"companyId\":1},\"page\":0,\"size\":25}},\"filterContract\":{\"method\":\"POST\",\"url\":\"/api/procurement/contracts/option-sources/contract/options/filter\",\"body\":{\"query\":\"2026\",\"filters\":{\"companyId\":1,\"supplierId\":10},\"page\":0,\"size\":25}},\"filterProduct\":{\"method\":\"POST\",\"url\":\"/api/procurement/products/option-sources/product/options/filter\",\"body\":{\"filters\":{\"companyId\":1,\"contractId\":20},\"page\":0,\"size\":25}},\"rehydrateSavedValues\":{\"method\":\"GET\",\"urls\":[\"/api/procurement/companies/option-sources/company/options/by-ids?ids=1\",\"/api/procurement/suppliers/option-sources/supplier/options/by-ids?ids=10\",\"/api/procurement/contracts/option-sources/contract/options/by-ids?ids=20\",\"/api/procurement/products/option-sources/product/options/by-ids?ids=30\"]}}}",
|
|
9964
10204
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9968,7 +10208,7 @@
|
|
|
9968
10208
|
"corpusVersion": "1.0.0"
|
|
9969
10209
|
},
|
|
9970
10210
|
{
|
|
9971
|
-
"chunkIndex":
|
|
10211
|
+
"chunkIndex": 78,
|
|
9972
10212
|
"chunkKind": "recipe",
|
|
9973
10213
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"expectedOptionShape\",\"expectedOptionShape\":{\"id\":10,\"label\":\"ACME Suprimentos Ltda\",\"extra\":{\"code\":\"FOR-8742\",\"description\":\"12.345.678/0001-90 - APPROVED - LOW\",\"status\":\"ACTIVE\",\"selectable\":true,\"disabledReason\":null,\"detailHref\":\"/api/procurement/suppliers/10\",\"detailRoute\":\"/procurement/suppliers/10\",\"resourcePath\":\"/api/procurement/suppliers\",\"entityKey\":\"supplier\"}}}",
|
|
9974
10214
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9978,7 +10218,7 @@
|
|
|
9978
10218
|
"corpusVersion": "1.0.0"
|
|
9979
10219
|
},
|
|
9980
10220
|
{
|
|
9981
|
-
"chunkIndex":
|
|
10221
|
+
"chunkIndex": 79,
|
|
9982
10222
|
"chunkKind": "recipe",
|
|
9983
10223
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"expectedSubmitPayload\",\"expectedSubmitPayload\":{\"companyId\":1,\"supplierId\":10,\"contractId\":20,\"productId\":30,\"orderDate\":\"2026-04-15\",\"currency\":\"BRL\",\"quantity\":2}}",
|
|
9984
10224
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
|
|
@@ -9988,7 +10228,7 @@
|
|
|
9988
10228
|
"corpusVersion": "1.0.0"
|
|
9989
10229
|
},
|
|
9990
10230
|
{
|
|
9991
|
-
"chunkIndex":
|
|
10231
|
+
"chunkIndex": 80,
|
|
9992
10232
|
"chunkKind": "recipe",
|
|
9993
10233
|
"content": "{\"_comment\":\"Showcase de campos variados com props específicas (validação, máscaras, sliders, cores).\",\"templateMeta\":{\"variantId\":\"fields\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"fields\",\"metadata\"],\"useWhen\":\"mostrar apenas fieldMetadata e exemplos de campos\",\"examplePrompts\":[\"gere somente a lista de campos\",\"adicione novos campos ao formulario\"]},\"metadata\":{\"version\":\"2.0\"},\"fieldMetadata\":[{\"name\":\"fullName\",\"label\":\"Nome completo\",\"controlType\":\"input\",\"validators\":{\"maxLength\":120}},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"password\",\"label\":\"Senha\",\"controlType\":\"password\",\"validators\":{\"minLength\":8}},{\"name\":\"profileColor\",\"label\":\"Cor do perfil\",\"controlType\":\"colorPicker\",\"format\":\"hex\"},{\"name\":\"salary\",\"label\":\"Salário\",\"controlType\":\"currency\",\"currencyCode\":\"BRL\",\"validators\":{\"min\":0}},{\"name\":\"birthDate\",\"label\":\"Nascimento\",\"controlType\":\"date\",\"validators\":{\"min\":\"1900-01-01\",\"max\":\"2025-12-31\"}},{\"name\":\"availability\",\"label\":\"Disponibilidade\",\"controlType\":\"dateRange\"},{\"name\":\"workload\",\"label\":\"Carga horária\",\"controlType\":\"slider\",\"validators\":{\"min\":0,\"max\":40}},{\"name\":\"skills\",\"label\":\"Habilidades\",\"controlType\":\"multiSelect\",\"options\":[{\"text\":\"Angular\",\"value\":\"ANG\"},{\"text\":\"React\",\"value\":\"RE\"}]},{\"name\":\"manager\",\"label\":\"Gestor\",\"controlType\":\"autoComplete\",\"endpoint\":\"/api/managers\"},{\"name\":\"document\",\"label\":\"CPF/CNPJ\",\"controlType\":\"cpfCnpjInput\",\"unmaskOnSubmit\":true},{\"name\":\"avatar\",\"label\":\"Avatar\",\"controlType\":\"avatar\",\"imageSrc\":\"https://picsum.photos/80\",\"materialDesign\":{\"shape\":\"circle\"}},{\"name\":\"attachments\",\"label\":\"Anexos\",\"controlType\":\"upload\",\"multiple\":true,\"accept\":\".pdf,.png,.jpg\"}],\"sections\":[{\"id\":\"sec1\",\"title\":\"Perfil\",\"rows\":[{\"id\":\"r1\",\"columns\":[{\"id\":\"c1\",\"fields\":[\"fullName\",\"email\",\"password\"]}]}]},{\"id\":\"sec2\",\"title\":\"Detalhes\",\"rows\":[{\"id\":\"r2\",\"columns\":[{\"id\":\"c2\",\"fields\":[\"profileColor\",\"salary\",\"birthDate\",\"availability\",\"workload\"]}]}]},{\"id\":\"sec3\",\"title\":\"Outros\",\"rows\":[{\"id\":\"r3\",\"columns\":[{\"id\":\"c3\",\"fields\":[\"skills\",\"manager\",\"document\",\"avatar\",\"attachments\"]}]}]}]}",
|
|
9994
10234
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.fields.json",
|
|
@@ -9998,7 +10238,7 @@
|
|
|
9998
10238
|
"corpusVersion": "1.0.0"
|
|
9999
10239
|
},
|
|
10000
10240
|
{
|
|
10001
|
-
"chunkIndex":
|
|
10241
|
+
"chunkIndex": 81,
|
|
10002
10242
|
"chunkKind": "recipe",
|
|
10003
10243
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment\",\"_comment\":\"Generic recipe for PraxisDynamicForm (FormConfig). Values are placeholders for AI examples.\"}",
|
|
10004
10244
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10008,7 +10248,7 @@
|
|
|
10008
10248
|
"corpusVersion": "1.0.0"
|
|
10009
10249
|
},
|
|
10010
10250
|
{
|
|
10011
|
-
"chunkIndex":
|
|
10251
|
+
"chunkIndex": 82,
|
|
10012
10252
|
"chunkKind": "recipe",
|
|
10013
10253
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"variantId\":\"form-config\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"full\",\"config\"],\"useWhen\":\"gerar form completo com layout, campos e regras\",\"examplePrompts\":[\"gere um formulario completo com campos e layout\",\"crie um form completo baseado no schema\"]}}",
|
|
10014
10254
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10018,7 +10258,7 @@
|
|
|
10018
10258
|
"corpusVersion": "1.0.0"
|
|
10019
10259
|
},
|
|
10020
10260
|
{
|
|
10021
|
-
"chunkIndex":
|
|
10261
|
+
"chunkIndex": 83,
|
|
10022
10262
|
"chunkKind": "recipe",
|
|
10023
10263
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"metadata\",\"metadata\":{\"version\":\"2.0.0\",\"lastUpdated\":\"2024-02-01T12:00:00Z\",\"source\":\"local\",\"serverHash\":\"hash-abc-123\",\"schemaId\":\"path:/api/employees#request\",\"schemaContext\":{\"path\":\"/api/employees\",\"operation\":\"POST\",\"schemaType\":\"request\",\"internal\":false,\"tenant\":\"default\",\"locale\":\"pt-BR\"},\"customizations\":[{\"fieldName\":\"salary\",\"property\":\"label\",\"oldValue\":\"Salary\",\"newValue\":\"Salario\",\"timestamp\":\"2024-01-20T10:00:00Z\",\"source\":\"user\"}]}}",
|
|
10024
10264
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10028,7 +10268,7 @@
|
|
|
10028
10268
|
"corpusVersion": "1.0.0"
|
|
10029
10269
|
},
|
|
10030
10270
|
{
|
|
10031
|
-
"chunkIndex":
|
|
10271
|
+
"chunkIndex": 84,
|
|
10032
10272
|
"chunkKind": "recipe",
|
|
10033
10273
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"api\",\"api\":{\"saveEndpoint\":\"/api/employees\",\"loadEndpoint\":\"/api/employees/${id}\",\"saveMethod\":\"POST\",\"timeout\":15000,\"headers\":{\"X-Module\":\"HR\",\"X-Request-Source\":\"dynamic-form\"},\"idField\":\"id\",\"beforeSave\":\"sanitizeEmployee\",\"afterLoad\":\"mapEmployee\"}}",
|
|
10034
10274
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10038,7 +10278,7 @@
|
|
|
10038
10278
|
"corpusVersion": "1.0.0"
|
|
10039
10279
|
},
|
|
10040
10280
|
{
|
|
10041
|
-
"chunkIndex":
|
|
10281
|
+
"chunkIndex": 85,
|
|
10042
10282
|
"chunkKind": "recipe",
|
|
10043
10283
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"behavior\",\"behavior\":{\"confirmOnUnsavedChanges\":true,\"trackHistory\":true,\"focusFirstError\":true,\"scrollToErrors\":true,\"clearAfterSave\":false,\"redirectAfterSave\":\"/employees\",\"reactiveValidation\":true,\"reactiveValidationDebounceMs\":200}}",
|
|
10044
10284
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10048,7 +10288,7 @@
|
|
|
10048
10288
|
"corpusVersion": "1.0.0"
|
|
10049
10289
|
},
|
|
10050
10290
|
{
|
|
10051
|
-
"chunkIndex":
|
|
10291
|
+
"chunkIndex": 86,
|
|
10052
10292
|
"chunkKind": "recipe",
|
|
10053
10293
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"messages\",\"messages\":{\"createRegistrySuccess\":\"Registro criado com sucesso.\",\"updateRegistrySuccess\":\"Registro atualizado com sucesso.\",\"createRegistryError\":\"Falha ao criar registro.\",\"updateRegistryError\":\"Falha ao atualizar registro.\",\"confirmations\":{\"submit\":\"Salvar alteracoes?\",\"cancel\":\"Descartar alteracoes?\",\"reset\":\"Limpar o formulario?\",\"archive\":\"Arquivar este registro?\"},\"customActions\":{\"archive\":{\"success\":\"Registro arquivado.\",\"error\":\"Falha ao arquivar.\",\"confirmation\":\"Arquivar registro agora?\"},\"preview\":{\"confirmation\":\"Gerar pre-visualizacao?\"}},\"loading\":{\"submit\":\"Salvando...\",\"cancel\":\"Cancelando...\",\"reset\":\"Limpando...\",\"archive\":\"Arquivando...\"}}}",
|
|
10054
10294
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10058,7 +10298,7 @@
|
|
|
10058
10298
|
"corpusVersion": "1.0.0"
|
|
10059
10299
|
},
|
|
10060
10300
|
{
|
|
10061
|
-
"chunkIndex":
|
|
10301
|
+
"chunkIndex": 87,
|
|
10062
10302
|
"chunkKind": "recipe",
|
|
10063
10303
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"hints\",\"hints\":{\"dataModes\":{\"create\":\"Preencha os dados para criar um novo registro.\",\"edit\":\"Atualize os dados e salve as alteracoes.\",\"view\":\"Visualize os dados do registro.\"},\"uiModes\":{\"presentation\":\"Modo apresentacao exibe apenas leitura.\",\"readonly\":\"Modo leitura bloqueia edicao.\",\"disabled\":\"Campos desabilitados nao permitem interacao.\",\"visible\":\"Controle de visibilidade sem destruir controles.\"}}}",
|
|
10064
10304
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10068,7 +10308,7 @@
|
|
|
10068
10308
|
"corpusVersion": "1.0.0"
|
|
10069
10309
|
},
|
|
10070
10310
|
{
|
|
10071
|
-
"chunkIndex":
|
|
10311
|
+
"chunkIndex": 88,
|
|
10072
10312
|
"chunkKind": "recipe",
|
|
10073
10313
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"hooks\",\"hooks\":{\"beforeInit\":[{\"priority\":100,\"timeoutMs\":1500,\"args\":{\"source\":\"cache\"},\"id\":\"load-static-options\"}],\"afterInit\":[{\"priority\":50,\"timeoutMs\":1200,\"args\":{\"enable\":true},\"id\":\"attach-shortcuts\"}],\"beforeValidate\":[{\"priority\":80,\"timeoutMs\":1200,\"args\":{\"country\":\"BR\"},\"id\":\"normalize-phones\"}],\"afterValidate\":[{\"priority\":10,\"timeoutMs\":1000,\"args\":{\"report\":\"warnings\"},\"id\":\"collect-warnings\"}],\"beforeSubmit\":[{\"priority\":100,\"timeoutMs\":2000,\"args\":{\"trimStrings\":true},\"id\":\"sanitize-employee\"}],\"afterSubmit\":[{\"priority\":20,\"timeoutMs\":1500,\"args\":{\"messageKey\":\"employeeSaved\"},\"id\":\"notify-success\"}],\"onError\":[{\"priority\":0,\"timeoutMs\":1500,\"args\":{\"messageKey\":\"employeeSaveError\"},\"id\":\"notify-error\"}]}}",
|
|
10074
10314
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10078,7 +10318,7 @@
|
|
|
10078
10318
|
"corpusVersion": "1.0.0"
|
|
10079
10319
|
},
|
|
10080
10320
|
{
|
|
10081
|
-
"chunkIndex":
|
|
10321
|
+
"chunkIndex": 89,
|
|
10082
10322
|
"chunkKind": "recipe",
|
|
10083
10323
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"fieldMetadata\",\"fieldMetadata\":[{\"name\":\"id\",\"label\":\"ID\",\"controlType\":\"numericTextBox\",\"dataType\":\"number\",\"hidden\":true,\"readOnly\":true,\"description\":\"Backend generated identifier.\"},{\"name\":\"fullName\",\"label\":\"Full name\",\"controlType\":\"input\",\"dataType\":\"text\",\"placeholder\":\"Example: Ana Souza\",\"prefixIcon\":\"person\",\"iconPosition\":\"start\",\"iconSize\":\"small\",\"validators\":{\"required\":true,\"minLength\":3,\"maxLength\":120,\"requiredMessage\":\"Name is required\",\"minLengthMessage\":\"Min 3 chars\",\"minWords\":2},\"validationMode\":\"blur\",\"debounceTime\":200,\"materialDesign\":{\"appearance\":\"outline\",\"color\":\"primary\",\"floatLabel\":\"auto\",\"density\":\"comfortable\",\"subscriptSizing\":\"dynamic\",\"hideRequiredMarker\":false,\"disableRipple\":true,\"customPalette\":{\"primary\":\"#005f73\",\"accent\":\"#0a9396\",\"warn\":\"#bb3e03\"},\"animations\":{\"disabled\":false,\"duration\":\"150ms\",\"easing\":\"ease-out\"}},\"group\":\"identity\",\"order\":1,\"width\":\"50%\",\"isFlex\":true,\"id\":\"field-full-name\",\"version\":\"1.0.0\",\"context\":\"form\",\"createdAt\":\"2024-01-01T00:00:00Z\",\"updatedAt\":\"2024-02-01T00:00:00Z\",\"tags\":[\"identity\",\"employee\"],\"cssClass\":\"field-full-name\",\"style\":{\"maxWidth\":\"480px\"},\"dataAttributes\":{\"data-qa\":\"full-name\"},\"required\":true},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"dataType\":\"email\",\"placeholder\":\"name@company.com\",\"validators\":{\"required\":true,\"email\":true,\"emailMessage\":\"Use a valid email.\"},\"unique\":true,\"ariaLabel\":\"Email address\",\"ariaDescribedBy\":\"email-help\",\"tabIndex\":2,\"accessKey\":\"e\"},{\"name\":\"phone\",\"label\":\"Phone\",\"controlType\":\"maskedTextBox\",\"dataType\":\"text\",\"mask\":\"(99) 99999-9999\",\"validators\":{\"pattern\":\"^\\\\(\\\\d{2}\\\\) \\\\d{4,5}-\\\\d{4}$\",\"patternMessage\":\"Use (11) 99999-9999\"},\"hint\":\"Include area code.\"},{\"name\":\"status\",\"label\":\"Status\",\"controlType\":\"select\",\"options\":[{\"text\":\"Active\",\"value\":\"ACTIVE\",\"icon\":\"check_circle\"},{\"text\":\"Inactive\",\"value\":\"INACTIVE\",\"icon\":\"block\"},{\"text\":\"On leave\",\"value\":\"ON_LEAVE\",\"icon\":\"schedule\"}],\"defaultValue\":\"ACTIVE\",\"validators\":{\"required\":true},\"materialDesign\":{\"appearance\":\"outline\",\"color\":\"accent\"}},{\"name\":\"departmentId\",\"label\":\"Department\",\"controlType\":\"select\",\"endpoint\":\"/api/departments\",\"valueField\":\"id\",\"displayField\":\"name\",\"queryParams\":{\"active\":true},\"cacheDuration\":300000,\"validators\":{\"required\":true},\"resourcePath\":\"/api/departments\",\"filterCriteria\":{\"active\":true},\"optionLabelKey\":\"name\",\"optionValueKey\":\"id\",\"searchable\":true},{\"name\":\"teamId\",\"label\":\"Team\",\"controlType\":\"select\",\"endpoint\":\"/api/teams\",\"valueField\":\"id\",\"displayField\":\"name\",\"dependencyFields\":[\"departmentId\"],\"dependencyFilterMap\":{\"departmentId\":\"departmentId\"},\"dependencyValuePath\":\"id\",\"dependencyLoadOnChange\":\"immediate\",\"dependencyMergeStrategy\":\"replace\",\"dependencyDebounceMs\":200,\"resetOnDependentChange\":true,\"enableDependencyCascade\":true,\"suppressInlineErrorsOnCascade\":true},{\"name\":\"managerId\",\"label\":\"Manager\",\"controlType\":\"autoComplete\",\"endpoint\":\"/api/employees\",\"queryParams\":{\"role\":\"manager\"},\"valueField\":\"id\",\"displayField\":\"name\",\"filterField\":\"name\",\"dependencyFields\":[\"departmentId\"],\"dependencyFilterMap\":{\"departmentId\":\"departmentId\"},\"dependencyLoadOnChange\":\"respectLoadOn\",\"disabled\":false},{\"name\":\"hireDate\",\"label\":\"Hire date\",\"controlType\":\"date\",\"dataType\":\"date\",\"validators\":{\"required\":true},\"minDate\":\"2020-01-01\",\"maxDate\":\"2030-12-31\",\"startView\":\"multi-year\",\"datepickerTogglePosition\":\"suffix\",\"touchUi\":true},{\"name\":\"terminationDate\",\"label\":\"Termination date\",\"controlType\":\"date\",\"conditionalDisplay\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"conditionalRequired\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]}},{\"name\":\"salary\",\"label\":\"Salary\",\"controlType\":\"currency\",\"dataType\":\"number\",\"format\":\"BRL|symbol|2\",\"validators\":{\"min\":0,\"max\":999999,\"minMessage\":\"Salary must be >= 0\"},\"min\":0,\"max\":999999,\"step\":100,\"precision\":\"fixed\",\"currencyCode\":\"BRL\",\"currencyDisplay\":\"symbol\",\"prefix\":\"R$\",\"suffix\":\"bruto\",\"inlineEditing\":true,\"transformDisplayValue\":\"formatCurrency\",\"transformSaveValue\":\"parseCurrency\"},{\"name\":\"bonusPercent\",\"label\":\"Bonus %\",\"controlType\":\"slider\",\"dataType\":\"number\",\"defaultValue\":10,\"validators\":{\"min\":0,\"max\":50},\"suffixIcon\":\"percent\",\"min\":0,\"max\":50,\"step\":5,\"thumbLabel\":true,\"showTicks\":true,\"vertical\":false,\"invert\":false},{\"name\":\"workMode\",\"label\":\"Work mode\",\"controlType\":\"radio\",\"options\":[{\"text\":\"CLT\",\"value\":\"CLT\"},{\"text\":\"PJ\",\"value\":\"PJ\"},{\"text\":\"Intern\",\"value\":\"INTERN\"}],\"defaultValue\":\"CLT\"},{\"name\":\"skills\",\"label\":\"Skills\",\"controlType\":\"multiSelect\",\"options\":[{\"text\":\"Angular\",\"value\":\"ANG\"},{\"text\":\"React\",\"value\":\"RE\"},{\"text\":\"Node\",\"value\":\"NODE\"}],\"visibleIn\":[\"form\",\"filter\"],\"multiple\":true,\"searchable\":true,\"clearable\":true,\"selectAll\":true,\"maxSelections\":5,\"virtualScroll\":true,\"emptyOptionText\":\"None\"},{\"name\":\"availability\",\"label\":\"Availability\",\"controlType\":\"dateRange\",\"rangeSeparator\":\" to \"},{\"name\":\"notes\",\"label\":\"Notes\",\"controlType\":\"textarea\",\"validators\":{\"maxLength\":500},\"hint\":\"Add relevant notes.\",\"textTransformApply\":\"displayOnly\",\"rows\":4,\"minRows\":3,\"maxRows\":8,\"resize\":\"vertical\",\"spellcheck\":true,\"inputMode\":\"text\",\"textTransform\":\"uppercase\",\"readonly\":false,\"formHidden\":false,\"tableHidden\":true,\"filterHidden\":false},{\"name\":\"isActive\",\"label\":\"Active\",\"controlType\":\"toggle\",\"dataType\":\"boolean\",\"defaultValue\":true},{\"name\":\"avatar\",\"label\":\"Photo\",\"controlType\":\"upload\",\"accept\":\".png,.jpg,.jpeg\",\"multiple\":false,\"materialDesign\":{\"appearance\":\"outline\"},\"uploadUrl\":\"/api/uploads/avatars\",\"autoUpload\":true,\"maxFileSize\":5242880,\"maxFiles\":2,\"fileRestrictions\":{\"minResolution\":\"128x128\",\"maxResolution\":\"2048x2048\"},\"chunkSize\":1048576,\"withCredentials\":false,\"headers\":{\"X-Upload-Source\":\"dynamic-form\"},\"method\":\"POST\",\"saveField\":\"file\"},{\"name\":\"terms\",\"label\":\"Accept terms\",\"controlType\":\"checkbox\",\"validators\":{\"requiredChecked\":true},\"tooltip\":\"Required to submit.\"},{\"name\":\"username\",\"label\":\"Username\",\"controlType\":\"input\",\"dataType\":\"text\",\"type\":\"text\",\"minLength\":3,\"maxLength\":20,\"pattern\":\"^[a-zA-Z0-9_]+$\",\"validators\":{\"required\":true,\"patternMessage\":\"Use letters, numbers, underscore\"},\"inputMode\":\"text\",\"autoComplete\":\"username\",\"readonly\":false,\"spellcheck\":false,\"textTransform\":\"lowercase\",\"placeholder\":\"user_name\"},{\"name\":\"password\",\"label\":\"Password\",\"controlType\":\"password\",\"dataType\":\"text\",\"type\":\"password\",\"showPasswordToggle\":true,\"autoComplete\":\"current-password\",\"validators\":{\"required\":true,\"minLength\":8}},{\"name\":\"country\",\"label\":\"Country\",\"controlType\":\"select\",\"dataType\":\"text\",\"options\":[{\"text\":\"Brazil\",\"value\":\"BR\"},{\"text\":\"United States\",\"value\":\"US\"},{\"text\":\"Canada\",\"value\":\"CA\"}],\"optionLabelKey\":\"text\",\"optionValueKey\":\"value\",\"emptyOptionText\":\"Select a country\",\"searchable\":true,\"clearable\":true,\"resourcePath\":\"/api/countries\",\"filterCriteria\":{\"active\":true},\"multiple\":false},{\"name\":\"orgTree\",\"label\":\"Organization\",\"controlType\":\"treeSelect\",\"treeConfig\":{\"expandByDefault\":true,\"selectionMode\":\"single\"},\"nodes\":[{\"label\":\"HQ\",\"value\":\"hq\",\"children\":[{\"label\":\"Finance\",\"value\":\"finance\"}]},{\"label\":\"Branch\",\"value\":\"branch\"}],\"multiple\":false},{\"name\":\"ratingScore\",\"label\":\"Satisfaction\",\"controlType\":\"rating\",\"value\":3,\"max\":5,\"ratingMax\":5,\"ratingPrecision\":0.5,\"ratingIcon\":\"star\",\"ratingEmptyIcon\":\"star_border\",\"ratingAllowHalf\":true},{\"name\":\"progress\",\"label\":\"Progress\",\"controlType\":\"slider\",\"min\":0,\"max\":100,\"step\":5,\"defaultValue\":65,\"thumbLabel\":true,\"showTicks\":true},{\"name\":\"avatarDisplay\",\"label\":\"Avatar display\",\"controlType\":\"avatar\",\"imageSrc\":\"https://cdn.example.com/avatars/ana.png\",\"imageAlt\":\"User avatar\",\"initials\":\"AS\",\"avatarShape\":\"circle\",\"avatarSize\":\"medium\"},{\"name\":\"ctaButton\",\"label\":\"Request access\",\"controlType\":\"button\",\"icon\":\"send\",\"color\":\"primary\",\"variant\":\"raised\",\"size\":\"medium\",\"disabled\":false,\"loading\":false,\"action\":\"requestAccess\",\"actionPayload\":{\"role\":\"manager\"}}]}",
|
|
10084
10324
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10088,7 +10328,7 @@
|
|
|
10088
10328
|
"corpusVersion": "1.0.0"
|
|
10089
10329
|
},
|
|
10090
10330
|
{
|
|
10091
|
-
"chunkIndex":
|
|
10331
|
+
"chunkIndex": 90,
|
|
10092
10332
|
"chunkKind": "recipe",
|
|
10093
10333
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"fieldMetadata\",\"fieldMetadata\":[{\"name\":\"aiAssist\",\"label\":\"AI assist\",\"controlType\":\"button\",\"icon\":\"smart_toy\",\"color\":\"accent\",\"variant\":\"stroked\",\"size\":\"medium\",\"action\":\"aiAssist\",\"actionPayload\":{\"prompt\":\"Summarize the candidate profile\",\"history\":[{\"role\":\"user\",\"content\":\"Summarize this CV.\"},{\"role\":\"assistant\",\"content\":\"Summary goes here.\"}]},\"tooltip\":\"Ask AI to summarize the candidate profile\"},{\"name\":\"themeColor\",\"label\":\"Theme color\",\"controlType\":\"colorPicker\",\"format\":\"hex\",\"views\":[\"palette\",\"gradient\"],\"activeView\":\"palette\",\"preview\":true,\"clearButton\":true,\"actionsLayout\":\"end\",\"adaptiveMode\":true,\"adaptiveTitle\":\"Pick a color\",\"adaptiveSubtitle\":\"Brand palette\",\"popupSettings\":{\"width\":320},\"gradientSettings\":{\"opacity\":true},\"paletteSettings\":{\"columns\":8},\"fillMode\":\"solid\",\"rounded\":\"medium\",\"size\":\"medium\",\"icon\":\"palette\",\"iconClass\":\"color-icon\",\"svgIcon\":\"custom-palette\",\"tabindex\":0},{\"name\":\"cpf\",\"label\":\"CPF/CNPJ\",\"controlType\":\"cpfCnpjInput\",\"maskType\":\"cpf-cnpj\",\"unmaskOnSubmit\":true,\"validators\":{\"cpf\":true,\"cnpj\":true}},{\"name\":\"meetingTime\",\"label\":\"Meeting time\",\"controlType\":\"timePicker\",\"enableSeconds\":true,\"stepMinute\":15,\"stepSecond\":30}]}",
|
|
10094
10334
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10098,7 +10338,7 @@
|
|
|
10098
10338
|
"corpusVersion": "1.0.0"
|
|
10099
10339
|
},
|
|
10100
10340
|
{
|
|
10101
|
-
"chunkIndex":
|
|
10341
|
+
"chunkIndex": 91,
|
|
10102
10342
|
"chunkKind": "recipe",
|
|
10103
10343
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"sections\",\"sections\":[{\"id\":\"basic\",\"title\":\"Basic data\",\"description\":\"Primary profile and status fields.\",\"icon\":\"person\",\"collapsible\":true,\"collapsed\":false,\"gapBottom\":16,\"titleGapBottom\":6,\"descriptionGapBottom\":8,\"titleStyle\":\"titleMedium\",\"descriptionStyle\":\"bodyMedium\",\"titleColor\":\"#1a1a1a\",\"descriptionColor\":\"#666666\",\"headerAlign\":\"start\",\"headerTooltip\":\"Main data\",\"rows\":[{\"id\":\"row-basic-1\",\"gap\":16,\"rowGap\":12,\"columns\":[{\"id\":\"col-basic-1\",\"fields\":[\"fullName\",\"email\"],\"span\":{\"xs\":12,\"sm\":12,\"md\":6,\"lg\":6,\"xl\":6},\"padding\":8,\"className\":\"col-basic-main\",\"testId\":\"col-basic-main\",\"title\":\"Identity\"},{\"id\":\"col-basic-2\",\"fields\":[\"status\",\"hireDate\"],\"span\":{\"md\":6,\"lg\":6},\"hidden\":{\"xs\":true,\"sm\":false,\"md\":false,\"lg\":false,\"xl\":false},\"order\":{\"xs\":2,\"sm\":1,\"md\":2,\"lg\":2,\"xl\":1}}],\"title\":\"Core fields\"},{\"id\":\"row-basic-2\",\"gap\":16,\"columns\":[{\"id\":\"col-basic-3\",\"fields\":[\"phone\",\"isActive\"],\"span\":{\"md\":6,\"lg\":6},\"offset\":{\"xs\":0,\"sm\":0,\"md\":1,\"lg\":0,\"xl\":0}},{\"id\":\"col-basic-4\",\"fields\":[\"departmentId\",\"teamId\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-basic-3\",\"columns\":[{\"id\":\"col-basic-5\",\"fields\":[\"managerId\"],\"span\":{\"md\":6,\"lg\":6}}]}]},{\"id\":\"employment\",\"title\":\"Employment\",\"description\":\"Contract and compensation.\",\"icon\":\"badge\",\"collapsible\":true,\"collapsed\":false,\"rows\":[{\"id\":\"row-employment-1\",\"gap\":16,\"columns\":[{\"id\":\"col-employment-1\",\"fields\":[\"salary\",\"bonusPercent\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-employment-2\",\"fields\":[\"workMode\",\"terminationDate\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-employment-2\",\"rowGap\":16,\"columns\":[{\"id\":\"col-employment-3\",\"fields\":[\"skills\",\"availability\"],\"span\":{\"md\":12,\"lg\":12}}]}]},{\"id\":\"extras\",\"title\":\"Extras\",\"description\":\"Additional notes and context.\",\"collapsible\":true,\"collapsed\":false,\"rows\":[{\"id\":\"row-extras-1\",\"columns\":[{\"id\":\"col-extras-1\",\"fields\":[\"notes\"],\"span\":{\"md\":12,\"lg\":12},\"align\":\"stretch\",\"padding\":8}]}]},{\"id\":\"attachments\",\"title\":\"Attachments\",\"description\":\"Files and confirmations.\",\"collapsible\":true,\"collapsed\":true,\"rows\":[{\"id\":\"row-attachments-1\",\"columns\":[{\"id\":\"col-attachments-1\",\"fields\":[\"avatar\",\"terms\"],\"span\":{\"md\":12,\"lg\":12},\"align\":\"center\"}]}]},{\"id\":\"advanced\",\"title\":\"Advanced\",\"description\":\"Extra controls and integrations.\",\"collapsible\":true,\"collapsed\":true,\"rows\":[{\"id\":\"row-advanced-1\",\"gap\":16,\"columns\":[{\"id\":\"col-advanced-1\",\"fields\":[\"username\",\"password\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-advanced-2\",\"fields\":[\"country\",\"orgTree\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-advanced-2\",\"gap\":16,\"columns\":[{\"id\":\"col-advanced-3\",\"fields\":[\"themeColor\",\"cpf\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-advanced-4\",\"fields\":[\"meetingTime\",\"ratingScore\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-advanced-3\",\"gap\":16,\"columns\":[{\"id\":\"col-advanced-5\",\"fields\":[\"progress\",\"avatarDisplay\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-advanced-6\",\"fields\":[\"ctaButton\",\"aiAssist\"],\"span\":{\"md\":6,\"lg\":6}}]}]}]}",
|
|
10104
10344
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10108,7 +10348,7 @@
|
|
|
10108
10348
|
"corpusVersion": "1.0.0"
|
|
10109
10349
|
},
|
|
10110
10350
|
{
|
|
10111
|
-
"chunkIndex":
|
|
10351
|
+
"chunkIndex": 92,
|
|
10112
10352
|
"chunkKind": "recipe",
|
|
10113
10353
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"actions\",\"actions\":{\"submit\":{\"visible\":true,\"label\":\"Save\",\"icon\":\"save\",\"color\":\"primary\",\"variant\":\"raised\",\"size\":\"medium\",\"type\":\"submit\",\"shortcut\":\"Ctrl+S\",\"tooltip\":\"Save changes\",\"className\":\"action-submit\",\"style\":{\"letterSpacing\":\"0.5px\"},\"disabled\":false,\"loading\":false},\"cancel\":{\"visible\":true,\"label\":\"Cancel\",\"icon\":\"close\",\"type\":\"button\",\"color\":\"basic\"},\"reset\":{\"visible\":true,\"label\":\"Reset\",\"type\":\"reset\",\"color\":\"basic\"},\"custom\":[{\"id\":\"archive\",\"visible\":true,\"label\":\"Archive\",\"icon\":\"archive\",\"color\":\"warn\",\"variant\":\"stroked\",\"action\":\"archive\",\"tooltip\":\"Archive record\"},{\"id\":\"preview\",\"visible\":true,\"label\":\"Preview\",\"icon\":\"visibility\",\"color\":\"accent\",\"variant\":\"flat\",\"action\":\"preview\"}],\"position\":\"right\",\"orientation\":\"horizontal\",\"spacing\":\"normal\",\"sticky\":true,\"divider\":true,\"placement\":\"afterSections\",\"containerClassName\":\"form-actions-container\",\"containerStyles\":{\"background\":\"var(--md-sys-color-surface-container)\",\"border\":\"1px solid var(--md-sys-color-outline-variant)\",\"borderRadius\":\"12px\",\"padding\":\"12px 16px\"},\"mobile\":{\"position\":\"center\",\"orientation\":\"vertical\",\"collapseToMenu\":true}}}",
|
|
10114
10354
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10118,7 +10358,7 @@
|
|
|
10118
10358
|
"corpusVersion": "1.0.0"
|
|
10119
10359
|
},
|
|
10120
10360
|
{
|
|
10121
|
-
"chunkIndex":
|
|
10361
|
+
"chunkIndex": 93,
|
|
10122
10362
|
"chunkKind": "recipe",
|
|
10123
10363
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"formRules\",\"formRules\":[{\"id\":\"hide-comp-for-intern\",\"name\":\"Hide compensation for interns\",\"targetType\":\"field\",\"targets\":[\"salary\",\"bonusPercent\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"workMode\"},\"INTERN\"]},\"properties\":{\"visible\":false,\"required\":false},\"propertiesWhenFalse\":{\"visible\":true}},\"description\":\"Rule for coverage of description field.\",\"targetFields\":[\"salary\",\"bonusPercent\"],\"context\":\"visibility\"},{\"id\":\"require-termination-date\",\"name\":\"Require termination date when inactive\",\"targetType\":\"field\",\"targets\":[\"terminationDate\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"properties\":{\"visible\":true,\"required\":true}}},{\"id\":\"collapse-employment-section\",\"name\":\"Collapse employment when active\",\"targetType\":\"section\",\"targets\":[\"employment\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"ACTIVE\"]},\"properties\":{\"collapsed\":false},\"propertiesWhenFalse\":{\"collapsed\":true}}},{\"id\":\"disable-archive-when-inactive\",\"name\":\"Disable archive when not active\",\"targetType\":\"action\",\"targets\":[\"archive\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"isActive\"},true]},\"properties\":{\"disabled\":false},\"propertiesWhenFalse\":{\"disabled\":true}}},{\"id\":\"hide-extras-row\",\"name\":\"Hide extras when intern\",\"targetType\":\"row\",\"targets\":[\"row-extras-1\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"workMode\"},\"INTERN\"]},\"properties\":{\"visible\":false},\"propertiesWhenFalse\":{\"visible\":true,\"rowGap\":16}}},{\"id\":\"expand-notes-column\",\"name\":\"Expand notes column when inactive\",\"targetType\":\"column\",\"targets\":[\"col-extras-1\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"properties\":{\"span\":{\"md\":12,\"lg\":12}}}},{\"id\":\"rule-field-all\",\"name\":\"Field properties coverage\",\"targetType\":\"field\",\"targets\":[\"fullName\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"required\":true,\"readonly\":false,\"disabled\":false,\"className\":\"rule-field\",\"style\":{\"color\":\"#333333\"},\"label\":\"Rule label\",\"description\":\"Rule description\",\"placeholder\":\"Rule placeholder\",\"hint\":\"Rule hint\",\"tooltip\":\"Rule tooltip\",\"prefixIcon\":\"info\",\"suffixIcon\":\"check\",\"prefixText\":\"R$\",\"suffixText\":\"USD\",\"defaultValue\":{\"value\":\"default\"},\"options\":[{\"text\":\"A\",\"value\":\"A\"}],\"appearance\":\"outline\",\"color\":\"primary\",\"floatLabel\":\"always\",\"hintPosition\":\"end\",\"validators\":{\"required\":true}},\"propertiesWhenFalse\":{\"visible\":false,\"required\":false,\"readonly\":true,\"disabled\":true,\"className\":\"rule-field-off\",\"style\":{\"color\":\"#999999\"},\"label\":\"Rule label off\",\"description\":\"Rule description off\",\"placeholder\":\"Rule placeholder off\",\"hint\":\"Rule hint off\",\"tooltip\":\"Rule tooltip off\",\"prefixIcon\":\"block\",\"suffixIcon\":\"close\",\"prefixText\":\"OFF\",\"suffixText\":\"OFF\",\"defaultValue\":{\"value\":null},\"options\":[{\"text\":\"B\",\"value\":\"B\"}],\"appearance\":\"fill\",\"color\":\"accent\",\"floatLabel\":\"never\",\"hintPosition\":\"start\",\"validators\":{\"required\":false}}}},{\"id\":\"rule-section-all\",\"name\":\"Section properties coverage\",\"targetType\":\"section\",\"targets\":[\"basic\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"title\":\"Rule section title\",\"description\":\"Rule section description\",\"icon\":\"settings\",\"className\":\"rule-section\",\"style\":{\"borderRadius\":\"8px\"},\"borderColor\":\"#cccccc\",\"borderStyle\":\"solid\",\"borderWidth\":1,\"collapsible\":true,\"collapsed\":false,\"headerTooltip\":\"Section tooltip\",\"headerAlign\":\"start\",\"gapBottom\":12,\"titleGapBottom\":4,\"descriptionGapBottom\":6,\"titleColor\":\"#222222\",\"descriptionColor\":\"#555555\",\"titleStyle\":\"titleSmall\",\"descriptionStyle\":\"bodySmall\",\"appearance\":\"outlined\"},\"propertiesWhenFalse\":{\"visible\":false,\"title\":\"Rule section title off\",\"description\":\"Rule section description off\",\"icon\":\"block\",\"className\":\"rule-section-off\",\"style\":{\"borderRadius\":\"0px\"},\"borderColor\":\"#eeeeee\",\"borderStyle\":\"dashed\",\"borderWidth\":0,\"collapsible\":false,\"collapsed\":true,\"headerTooltip\":\"Section tooltip off\",\"headerAlign\":\"center\",\"gapBottom\":0,\"titleGapBottom\":0,\"descriptionGapBottom\":0,\"titleColor\":\"#999999\",\"descriptionColor\":\"#999999\",\"titleStyle\":\"titleMedium\",\"descriptionStyle\":\"bodyMedium\",\"appearance\":\"flat\"}}},{\"id\":\"rule-action-all\",\"name\":\"Action properties coverage\",\"targetType\":\"action\",\"targets\":[\"archive\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"disabled\":false,\"loading\":false,\"label\":\"Rule action\",\"icon\":\"archive\",\"tooltip\":\"Rule tooltip\",\"color\":\"warn\",\"variant\":\"stroked\",\"size\":\"medium\",\"className\":\"rule-action\",\"style\":{\"minWidth\":\"120px\"}},\"propertiesWhenFalse\":{\"visible\":false,\"disabled\":true,\"loading\":true,\"label\":\"Rule action off\",\"icon\":\"block\",\"tooltip\":\"Rule tooltip off\",\"color\":\"basic\",\"variant\":\"flat\",\"size\":\"small\",\"className\":\"rule-action-off\",\"style\":{\"minWidth\":\"80px\"}}}},{\"id\":\"rule-row-all\",\"name\":\"Row properties coverage\",\"targetType\":\"row\",\"targets\":[\"row-basic-1\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"gap\":12,\"rowGap\":8,\"className\":\"rule-row\",\"style\":{\"marginBottom\":\"12px\"}},\"propertiesWhenFalse\":{\"visible\":false,\"gap\":0,\"rowGap\":0,\"className\":\"rule-row-off\",\"style\":{\"marginBottom\":\"0px\"}}}},{\"id\":\"rule-column-all\",\"name\":\"Column properties coverage\",\"targetType\":\"column\",\"targets\":[\"col-basic-1\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"span\":{\"xs\":12,\"sm\":12,\"md\":6,\"lg\":6,\"xl\":6},\"offset\":{\"xs\":0,\"sm\":0,\"md\":0,\"lg\":0,\"xl\":0},\"order\":{\"xs\":1,\"sm\":1,\"md\":1,\"lg\":1,\"xl\":1},\"hidden\":{\"xs\":false,\"sm\":false,\"md\":false,\"lg\":false,\"xl\":false},\"align\":\"stretch\",\"padding\":8,\"className\":\"rule-column\",\"style\":{\"backgroundColor\":\"#f6f6f6\"}},\"propertiesWhenFalse\":{\"visible\":false,\"span\":{\"xs\":12,\"sm\":12,\"md\":12,\"lg\":12,\"xl\":12},\"offset\":{\"xs\":0,\"sm\":0,\"md\":0,\"lg\":0,\"xl\":0},\"order\":{\"xs\":2,\"sm\":2,\"md\":2,\"lg\":2,\"xl\":2},\"hidden\":{\"xs\":true,\"sm\":true,\"md\":true,\"lg\":true,\"xl\":true},\"align\":\"center\",\"padding\":0,\"className\":\"rule-column-off\",\"style\":{\"backgroundColor\":\"#ffffff\"}}}}]}",
|
|
10124
10364
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10128,7 +10368,7 @@
|
|
|
10128
10368
|
"corpusVersion": "1.0.0"
|
|
10129
10369
|
},
|
|
10130
10370
|
{
|
|
10131
|
-
"chunkIndex":
|
|
10371
|
+
"chunkIndex": 94,
|
|
10132
10372
|
"chunkKind": "recipe",
|
|
10133
10373
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"formRulesState\",\"formRulesState\":{\"nodes\":{},\"rootNodes\":[],\"selectedNodeId\":null,\"currentDSL\":\"\",\"currentJSON\":[],\"validationErrors\":[],\"mode\":\"visual\",\"isDirty\":false,\"history\":[],\"historyPosition\":0}}",
|
|
10134
10374
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10138,7 +10378,7 @@
|
|
|
10138
10378
|
"corpusVersion": "1.0.0"
|
|
10139
10379
|
},
|
|
10140
10380
|
{
|
|
10141
|
-
"chunkIndex":
|
|
10381
|
+
"chunkIndex": 95,
|
|
10142
10382
|
"chunkKind": "recipe",
|
|
10143
10383
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_variants\",\"_variants\":[{\"id\":\"actions-legacy-flags\",\"description\":\"Legacy actions flags.\",\"patch\":{\"actions\":{\"showSaveButton\":true,\"submitButtonLabel\":\"Save\",\"showCancelButton\":true,\"cancelButtonLabel\":\"Back\",\"showResetButton\":false}}},{\"id\":\"layout-minimal\",\"description\":\"Minimal layout with one section and two fields.\",\"patch\":{\"sections\":[{\"id\":\"simple\",\"title\":\"Simple\",\"rows\":[{\"id\":\"row-simple-1\",\"columns\":[{\"id\":\"col-simple-1\",\"fields\":[\"fullName\",\"email\"]}]}]}]}},{\"id\":\"rules-clear-override\",\"description\":\"Clear rule overrides with null.\",\"patch\":{\"formRules\":[{\"id\":\"hide-comp-for-intern\",\"name\":\"Hide compensation for interns\",\"targetType\":\"field\",\"targets\":[\"salary\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"workMode\"},\"INTERN\"]},\"properties\":{\"visible\":null}}}]}}]}",
|
|
10144
10384
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10148,7 +10388,7 @@
|
|
|
10148
10388
|
"corpusVersion": "1.0.0"
|
|
10149
10389
|
},
|
|
10150
10390
|
{
|
|
10151
|
-
"chunkIndex":
|
|
10391
|
+
"chunkIndex": 96,
|
|
10152
10392
|
"chunkKind": "recipe",
|
|
10153
10393
|
"content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"presentation\",\"presentation\":{\"labelFontSize\":12,\"valueFontSize\":14,\"labelPosition\":\"left\",\"compact\":false,\"density\":\"cozy\",\"labelWidth\":140,\"labelAlign\":\"start\",\"valueAlign\":\"end\"}}",
|
|
10154
10394
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
@@ -10158,7 +10398,7 @@
|
|
|
10158
10398
|
"corpusVersion": "1.0.0"
|
|
10159
10399
|
},
|
|
10160
10400
|
{
|
|
10161
|
-
"chunkIndex":
|
|
10401
|
+
"chunkIndex": 97,
|
|
10162
10402
|
"chunkKind": "recipe",
|
|
10163
10403
|
"content": "{\"_comment\":\"Component-level recipe for PraxisDynamicForm. Values are placeholders for AI examples.\",\"templateMeta\":{\"defaultVariantId\":\"form-config\",\"variants\":[{\"id\":\"form-config\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"form-config\",\"aiDescription\":\"FormConfig completo com layout, validacoes e hooks.\",\"tags\":[\"full\",\"config\"],\"useWhen\":\"usuario pede formulario completo ou gerado a partir do schema\",\"examplePrompts\":[\"gere um formulario completo para cadastro de funcionario\",\"crie um form completo com layout e validacoes\"]},{\"id\":\"fields\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"fields\",\"aiDescription\":\"Lista completa de FieldMetadata e sections.\",\"tags\":[\"fields\",\"metadata\"],\"useWhen\":\"usuario pede apenas campos ou metadados\",\"examplePrompts\":[\"adicione campos para endereco e contato\",\"gere somente a lista de campos\"]},{\"id\":\"layout\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"layout\",\"aiDescription\":\"Layout de secoes/linhas/colunas com exemplos de acoes.\",\"tags\":[\"layout\",\"sections\"],\"useWhen\":\"usuario pede reorganizacao visual do formulario\",\"examplePrompts\":[\"organize o layout em duas colunas\",\"crie secoes e linhas para o formulario\"]},{\"id\":\"validation\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"validation\",\"aiDescription\":\"Validacoes complexas e regras condicionais.\",\"tags\":[\"validation\",\"rules\"],\"useWhen\":\"usuario pede validacoes avancadas ou regras condicionais\",\"examplePrompts\":[\"adicione validacao cruzada de email\",\"crie validacoes condicionais para empresa\"]},{\"id\":\"local-transient\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"local-transient\",\"aiDescription\":\"Campos locais/transient que participam da UI mas ficam fora do payload backend por padrao.\",\"tags\":[\"fields\",\"local\",\"transient\",\"submit\"],\"useWhen\":\"usuario precisa de campos auxiliares no formulario que nao devem participar do payload persistido\",\"examplePrompts\":[\"adicione um campo local que nao seja enviado ao backend\",\"crie campos auxiliares transient para ajudar no preenchimento\"]},{\"id\":\"entity-lookup-procurement\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"entity-lookup-procurement\",\"aiDescription\":\"Formulario de pedido de compra com Entity Lookup corporativo, RESOURCE_ENTITY, cascata, reidratacao e politica de selecao.\",\"tags\":[\"entity-lookup\",\"resource-entity\",\"option-source\",\"cascading\",\"rehydration\",\"procurement\"],\"useWhen\":\"usuario precisa selecionar entidades reais do dominio com status, permissao, navegacao, dependsOn e by-ids\",\"examplePrompts\":[\"crie um pedido de compra com lookup de fornecedor contrato e produto\",\"gere entityLookup com dependsOn e dependencyFilterMap\",\"mostre um formulario com RESOURCE_ENTITY e reidratacao por by-ids\"]},{\"id\":\"visual-block-domain-rules\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"visual-block-domain-rules\",\"aiDescription\":\"Regras de dominio que alteram visualBlock text/title/message/style sem criar campos nem payload.\",\"tags\":[\"visual-block\",\"form-rules\",\"domain-rules\",\"rich-content\",\"llm-authoring\"],\"useWhen\":\"usuario precisa de avisos, orientacoes e copy operacional condicionais sem alterar submit payload\",\"examplePrompts\":[\"crie regras de dominio para alterar avisos visuais do formulario\",\"adicione visualBlock rules para LGPD compliance ou risco de fornecedor\",\"mostre regras de texto para blocos visuais sem criar campos\"]},{\"id\":\"command-rules\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"command-rules\",\"aiDescription\":\"Regras condicionais governadas que executam GlobalActionRef depois que valores calculados estabilizam.\",\"tags\":[\"formCommandRules\",\"global-action\",\"computed-values\",\"business-rules\"],\"useWhen\":\"usuario precisa disparar alertas, confirmacoes ou comandos host-mediated por regra declarativa do formulario\",\"examplePrompts\":[\"crie uma regra que alerta quando idade calculada for menor que 18\",\"confirme quando o periodo de ferias iniciar em uma sexta-feira\",\"mostre formCommandRules com dialog.alert e dialog.confirm\"]}]},\"component\":\"praxis-dynamic-form\",\"inputs\":{\"resourcePath\":\"/api/employees\",\"resourceId\":\"123\",\"mode\":\"edit\",\"config\":{\"_comment\":\"Use praxis-dynamic-form.form-config.json for a full FormConfig example.\",\"sections\":[{\"id\":\"minimal\",\"rows\":[]}],\"presentation\":{\"labelFontSize\":12,\"valueFontSize\":14,\"labelPosition\":\"left\",\"compact\":false,\"density\":\"cozy\",\"labelWidth\":140,\"labelAlign\":\"start\",\"valueAlign\":\"end\"}},\"schemaSource\":\"resource\",\"enableCustomization\":true,\"formId\":\"employee-form\",\"layout\":{\"formTitle\":\"Legacy layout example\",\"formDescription\":\"Fieldsets-based layout (legacy)\",\"fieldsets\":[{\"id\":\"legacy-basic\",\"title\":\"Legacy\",\"orientation\":\"vertical\",\"rows\":[{\"id\":\"legacy-row-1\",\"orientation\":\"horizontal\",\"fields\":[{\"name\":\"legacyField\",\"label\":\"Legacy field\",\"controlType\":\"input\"}]}]}]},\"backConfig\":{\"strategy\":\"navigate\",\"returnTo\":\"/employees\",\"confirmOnDirty\":true},\"hooks\":{\"beforeInit\":[{\"id\":\"load-static-options\",\"priority\":100,\"timeoutMs\":2000,\"args\":{\"source\":\"cache\"}}],\"afterInit\":[],\"beforeValidate\":[],\"afterValidate\":[],\"beforeSubmit\":[],\"afterSubmit\":[{\"id\":\"notify-success\",\"priority\":10}],\"onError\":[]},\"removeEmptyContainersOnSave\":true,\"reactiveValidation\":true,\"reactiveValidationDebounceMs\":250,\"notifyIfOutdated\":\"snackbar\",\"snoozeMs\":86400000,\"autoOpenSettingsOnOutdated\":false,\"readonlyModeGlobal\":false,\"disabledModeGlobal\":false,\"presentationModeGlobal\":false,\"visibleGlobal\":true,\"customEndpoints\":{\"getAll\":\"/api/employees\",\"getById\":\"/api/employees/{id}\",\"create\":\"/api/employees\",\"update\":\"/api/employees/{id}\",\"delete\":\"/api/employees/{id}\",\"filter\":\"/api/employees/filter\",\"schema\":\"/api/employees/schemas\"}},\"outputs\":{\"formSubmit\":{\"payload\":{\"stage\":\"after\",\"formData\":{\"id\":123,\"fullName\":\"Ana Souza\"},\"rawFormData\":{\"id\":123,\"fullName\":\"Ana Souza\",\"approvalComment\":\"Conferido com o solicitante\"},\"isValid\":true,\"validationErrors\":[],\"entityId\":123,\"operation\":\"update\",\"result\":{\"status\":\"ok\"}}},\"formCancel\":{\"payload\":null},\"formReset\":{\"payload\":null},\"configChange\":{\"payload\":{\"sections\":[{\"id\":\"minimal\",\"rows\":[]}]}},\"formReady\":{\"payload\":{\"formGroup\":\"[FormGroup]\",\"fieldsMetadata\":[{\"name\":\"fullName\",\"label\":\"Full name\",\"controlType\":\"input\"}],\"layout\":{\"formTitle\":\"Employee\"},\"hasEntity\":true,\"entityId\":123}},\"valueChange\":{\"payload\":{\"formData\":{\"email\":\"ana@example.com\"},\"changedField\":\"email\",\"previousValue\":\"old@example.com\",\"currentValue\":\"ana@example.com\",\"changedFields\":[\"email\"],\"isValid\":true,\"entityId\":123}},\"syncCompleted\":{\"payload\":{\"hasChanges\":true,\"addedFields\":[{\"name\":\"nickname\",\"label\":\"Nickname\",\"controlType\":\"input\"}],\"removedFields\":[\"legacyField\"],\"modifiedFields\":[{\"fieldName\":\"email\",\"property\":\"label\",\"localValue\":\"Email\",\"serverValue\":\"E-mail\"}],\"conflicts\":[{\"fieldName\":\"salary\",\"reason\":\"user-customized\",\"resolution\":\"keep-local\"}]}},\"initializationError\":{\"payload\":{\"stage\":\"schema-fetch\",\"error\":{\"message\":\"Schema failed to load\"},\"context\":{\"formId\":\"employee-form\",\"resourcePath\":\"/api/employees\",\"hasLocalConfig\":true},\"recoverable\":true,\"userMessage\":\"Unable to load form schema.\"}},\"enableCustomizationChange\":{\"payload\":true},\"customAction\":{\"payload\":{\"actionId\":\"archive\",\"formData\":{\"id\":123},\"isValid\":true,\"source\":\"button\"}},\"actionConfirmation\":{\"payload\":{\"actionId\":\"archive\",\"message\":\"Confirm archive?\",\"confirmed\":true}},\"schemaStatusChange\":{\"payload\":{\"outdated\":false,\"serverHash\":\"hash-abc-123\",\"lastVerifiedAt\":\"2024-02-02T10:00:00Z\",\"formId\":\"employee-form\"}}}}",
|
|
10164
10404
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.json",
|
|
@@ -10168,7 +10408,7 @@
|
|
|
10168
10408
|
"corpusVersion": "1.0.0"
|
|
10169
10409
|
},
|
|
10170
10410
|
{
|
|
10171
|
-
"chunkIndex":
|
|
10411
|
+
"chunkIndex": 98,
|
|
10172
10412
|
"chunkKind": "recipe",
|
|
10173
10413
|
"content": "{\"_comment\":\"Receita de layout complexo com múltiplas seções, colunas assimétricas (2/3 + 1/3) e ações posicionadas explicitamente.\",\"templateMeta\":{\"variantId\":\"layout\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"layout\",\"sections\"],\"useWhen\":\"ajustar layout, secoes, linhas e colunas\",\"examplePrompts\":[\"organize o layout em colunas\",\"divida o formulario em secoes\"]},\"metadata\":{\"name\":\"Complex Layout Example\",\"version\":\"v1\"},\"sections\":[{\"id\":\"summary\",\"title\":\"Resumo\",\"description\":\"Informações principais em colunas assimétricas.\",\"rows\":[{\"id\":\"summary-row-1\",\"columns\":[{\"id\":\"summary-main\",\"span\":{\"md\":8,\"lg\":8},\"fields\":[\"title\",\"description\"],\"_comment\":\"Coluna principal ocupando 2/3 da largura.\"},{\"id\":\"summary-side\",\"span\":{\"md\":4,\"lg\":4},\"fields\":[\"status\",\"priority\",\"owner\"],\"_comment\":\"Coluna lateral ocupando 1/3 da largura.\"}]}]},{\"id\":\"dates\",\"title\":\"Datas\",\"rows\":[{\"id\":\"dates-row-1\",\"columns\":[{\"id\":\"dates-start\",\"span\":{\"md\":4,\"lg\":4},\"fields\":[\"startDate\"]},{\"id\":\"dates-due\",\"span\":{\"md\":4,\"lg\":4},\"fields\":[\"dueDate\"]},{\"id\":\"dates-sla\",\"span\":{\"md\":4,\"lg\":4},\"fields\":[\"slaDays\"]}],\"_comment\":\"Linha com 3 colunas de largura igual (automatico).\"}]},{\"id\":\"attachments\",\"title\":\"Anexos e Comentários\",\"rows\":[{\"id\":\"attachments-row-1\",\"columns\":[{\"id\":\"attachments-col\",\"fields\":[\"attachments\"]}]},{\"id\":\"attachments-row-2\",\"columns\":[{\"id\":\"notes-col\",\"fields\":[\"notes\"]}]}]}],\"fieldMetadata\":[{\"name\":\"title\",\"label\":\"Título\",\"controlType\":\"input\",\"validators\":{\"required\":true}},{\"name\":\"description\",\"label\":\"Descrição\",\"controlType\":\"textarea\",\"rows\":3},{\"name\":\"status\",\"label\":\"Status\",\"controlType\":\"select\",\"options\":[{\"label\":\"Aberto\",\"value\":\"OPEN\"},{\"label\":\"Fechado\",\"value\":\"CLOSED\"}]},{\"name\":\"priority\",\"label\":\"Prioridade\",\"controlType\":\"select\",\"options\":[{\"label\":\"Alta\",\"value\":\"HIGH\"},{\"label\":\"Média\",\"value\":\"MEDIUM\"},{\"label\":\"Baixa\",\"value\":\"LOW\"}]},{\"name\":\"owner\",\"label\":\"Responsável\",\"controlType\":\"autoComplete\",\"searchable\":true},{\"name\":\"startDate\",\"label\":\"Início\",\"controlType\":\"date\"},{\"name\":\"dueDate\",\"label\":\"Entrega\",\"controlType\":\"date\"},{\"name\":\"slaDays\",\"label\":\"SLA (dias)\",\"controlType\":\"numericTextBox\"},{\"name\":\"attachments\",\"label\":\"Anexos\",\"controlType\":\"upload\"},{\"name\":\"notes\",\"label\":\"Notas\",\"controlType\":\"textarea\",\"rows\":4}],\"actions\":{\"submit\":{\"id\":\"save\",\"label\":\"Salvar\",\"color\":\"primary\",\"visible\":true,\"type\":\"submit\"},\"cancel\":{\"id\":\"cancel\",\"label\":\"Cancelar\",\"color\":\"basic\",\"visible\":true,\"type\":\"button\"},\"reset\":{\"id\":\"reset\",\"label\":\"Limpar\",\"color\":\"basic\",\"visible\":false,\"type\":\"reset\"},\"position\":\"right\",\"placement\":\"afterSections\"}}",
|
|
10174
10414
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.layout.json",
|
|
@@ -10178,7 +10418,7 @@
|
|
|
10178
10418
|
"corpusVersion": "1.0.0"
|
|
10179
10419
|
},
|
|
10180
10420
|
{
|
|
10181
|
-
"chunkIndex":
|
|
10421
|
+
"chunkIndex": 99,
|
|
10182
10422
|
"chunkKind": "recipe",
|
|
10183
10423
|
"content": "{\"_comment\":\"Recipe for host local/transient fields in PraxisDynamicForm. These fields participate in UI state but are omitted from backend payloads by default.\",\"templateMeta\":{\"variantId\":\"local-transient\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"fields\",\"local\",\"transient\",\"submit\"],\"useWhen\":\"campos auxiliares do host devem ajudar no preenchimento sem entrar no payload enviado ao backend\",\"examplePrompts\":[\"adicione campos locais que nao sejam enviados ao backend\",\"crie campos transient para calculo ou confirmacao visual\",\"mostre formData filtrado e rawFormData completo no submit\"]},\"metadata\":{\"version\":\"2.0.0\",\"source\":\"local\",\"schemaId\":\"path:/api/employees#request\"},\"fieldMetadata\":[{\"name\":\"fullName\",\"label\":\"Nome completo\",\"controlType\":\"input\",\"validators\":{\"required\":true,\"minLength\":3}},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"approvalComment\",\"label\":\"Comentario interno de aprovacao\",\"controlType\":\"textarea\",\"source\":\"local\",\"submitPolicy\":\"omit\",\"description\":\"Campo auxiliar do host. Participa da UI e de regras locais, mas nao entra em formSubmit.formData.\"},{\"name\":\"calculatedRiskScore\",\"label\":\"Score calculado\",\"controlType\":\"numericTextBox\",\"transient\":true,\"readOnly\":true,\"description\":\"Valor calculado no cliente para orientar o preenchimento. Omitido do payload por padrao.\"},{\"name\":\"manualOverrideReason\",\"label\":\"Justificativa de ajuste manual\",\"controlType\":\"textarea\",\"source\":\"local\",\"submitPolicy\":\"includeWhenDirty\",\"description\":\"Exemplo de excecao: campo local enviado somente se o usuario alterar o controle.\"}],\"sections\":[{\"id\":\"employee-data\",\"title\":\"Dados do funcionario\",\"rows\":[{\"id\":\"identity-row\",\"columns\":[{\"id\":\"identity-column\",\"fields\":[\"fullName\",\"email\"]}]}]},{\"id\":\"host-assistance\",\"title\":\"Apoio ao preenchimento\",\"rows\":[{\"id\":\"local-row\",\"columns\":[{\"id\":\"local-column\",\"fields\":[\"approvalComment\",\"calculatedRiskScore\",\"manualOverrideReason\"]}]}]}],\"submitExample\":{\"rawFormData\":{\"fullName\":\"Ana Souza\",\"email\":\"ana@example.com\",\"approvalComment\":\"Validado com RH\",\"calculatedRiskScore\":82,\"manualOverrideReason\":\"Ajuste autorizado\"},\"formData\":{\"fullName\":\"Ana Souza\",\"email\":\"ana@example.com\",\"manualOverrideReason\":\"Ajuste autorizado\"},\"notes\":[\"approvalComment usa submitPolicy omit e fica somente em rawFormData.\",\"calculatedRiskScore usa transient true e fica somente em rawFormData.\",\"manualOverrideReason usa includeWhenDirty e entra em formData apenas quando o controle estiver dirty.\"]}}",
|
|
10184
10424
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.local-transient.json",
|
|
@@ -10188,7 +10428,7 @@
|
|
|
10188
10428
|
"corpusVersion": "1.0.0"
|
|
10189
10429
|
},
|
|
10190
10430
|
{
|
|
10191
|
-
"chunkIndex":
|
|
10431
|
+
"chunkIndex": 100,
|
|
10192
10432
|
"chunkKind": "recipe",
|
|
10193
10433
|
"content": "{\"_comment\":\"Receita focada em validações complexas: campos dependentes, validação cruzada (matchField), assíncrona (unique) e regras condicionais.\",\"templateMeta\":{\"variantId\":\"validation\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"validation\",\"rules\"],\"useWhen\":\"criar validacoes avancadas e regras condicionais\",\"examplePrompts\":[\"adicione validacao cruzada de email\",\"crie regras condicionais por tipo de conta\"]},\"metadata\":{\"name\":\"Advanced Validation Form\",\"version\":\"v1\"},\"fieldMetadata\":[{\"name\":\"username\",\"label\":\"Usuário\",\"controlType\":\"input\",\"unique\":true,\"validators\":{\"required\":true,\"minLength\":4,\"pattern\":\"^[a-z0-9_]+$\",\"patternMessage\":\"Apenas letras minúsculas, números e underline.\",\"uniqueValidator\":\"checkUsernameUnique\",\"uniqueMessage\":\"Este usuário já está em uso.\"},\"_comment\":\"Validação de pattern regex e unicidade simulada.\"},{\"name\":\"email\",\"label\":\"E-mail\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"confirmEmail\",\"label\":\"Confirmar E-mail\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"matchField\":\"email\",\"matchFieldMessage\":\"Os e-mails não conferem.\"},\"_comment\":\"Validação cruzada: deve ser igual ao campo 'email'.\"},{\"name\":\"password\",\"label\":\"Senha\",\"controlType\":\"password\",\"validators\":{\"required\":true,\"minLength\":8,\"customValidator\":\"passwordStrength\"}},{\"name\":\"age\",\"label\":\"Idade\",\"controlType\":\"numericTextBox\",\"validators\":{\"required\":true,\"min\":18,\"max\":120,\"minMessage\":\"É necessário ser maior de 18 anos.\"}},{\"name\":\"accountType\",\"label\":\"Tipo de Conta\",\"controlType\":\"select\",\"options\":[{\"label\":\"Pessoal\",\"value\":\"PERSONAL\"},{\"label\":\"Empresarial\",\"value\":\"BUSINESS\"}],\"defaultValue\":\"PERSONAL\"},{\"name\":\"cnpj\",\"label\":\"CNPJ\",\"controlType\":\"cpfCnpjInput\",\"maskType\":\"cnpj\",\"conditionalRequired\":{\"==\":[{\"var\":\"accountType\"},\"BUSINESS\"]},\"conditionalDisplay\":{\"==\":[{\"var\":\"accountType\"},\"BUSINESS\"]},\"_comment\":\"Campo condicional: só aparece e é obrigatório se accountType for 'BUSINESS'.\"},{\"name\":\"bio\",\"label\":\"Biografia\",\"controlType\":\"textarea\",\"validators\":{\"minWords\":10,\"maxLength\":500},\"hint\":\"Conte-nos um pouco sobre você (mínimo 10 palavras).\"},{\"name\":\"terms\",\"label\":\"Aceito os termos de uso\",\"controlType\":\"checkbox\",\"validators\":{\"requiredChecked\":true}}],\"sections\":[{\"id\":\"credentials\",\"title\":\"Credenciais\",\"rows\":[{\"id\":\"credentials-row-1\",\"columns\":[{\"id\":\"username-col\",\"fields\":[\"username\"]}]},{\"id\":\"credentials-row-2\",\"columns\":[{\"id\":\"email-col\",\"fields\":[\"email\",\"confirmEmail\"]}]},{\"id\":\"credentials-row-3\",\"columns\":[{\"id\":\"password-col\",\"fields\":[\"password\"]}]}]},{\"id\":\"profile\",\"title\":\"Perfil\",\"rows\":[{\"id\":\"profile-row-1\",\"columns\":[{\"id\":\"age-col\",\"fields\":[\"age\",\"accountType\"]}]},{\"id\":\"profile-row-2\",\"columns\":[{\"id\":\"cnpj-col\",\"fields\":[\"cnpj\"]}]},{\"id\":\"profile-row-3\",\"columns\":[{\"id\":\"bio-col\",\"fields\":[\"bio\"]}]}]},{\"id\":\"terms\",\"rows\":[{\"id\":\"terms-row-1\",\"columns\":[{\"id\":\"terms-col\",\"fields\":[\"terms\"]}]}]}],\"actions\":{\"submit\":{\"id\":\"submit\",\"label\":\"Cadastrar\",\"color\":\"primary\",\"visible\":true,\"type\":\"submit\"},\"cancel\":{\"id\":\"cancel\",\"label\":\"Cancelar\",\"color\":\"basic\",\"visible\":false,\"type\":\"button\"},\"reset\":{\"id\":\"reset\",\"label\":\"Limpar\",\"color\":\"basic\",\"visible\":false,\"type\":\"reset\"}}}",
|
|
10194
10434
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.validation.json",
|
|
@@ -10198,7 +10438,7 @@
|
|
|
10198
10438
|
"corpusVersion": "1.0.0"
|
|
10199
10439
|
},
|
|
10200
10440
|
{
|
|
10201
|
-
"chunkIndex":
|
|
10441
|
+
"chunkIndex": 101,
|
|
10202
10442
|
"chunkKind": "recipe",
|
|
10203
10443
|
"content": "{\"_comment\":\"Official Praxis Dynamic Form recipe for derived visualBlock materializations.\",\"_comment2\":\"Use this when governed semantic decisions already need conditional UI guidance, compliance copy or operational warnings without creating fields or changing submit payload.\",\"templateMeta\":{\"variantId\":\"visual-block-domain-rules\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"status\":\"public-example\",\"tags\":[\"visual-block\",\"form-rules\",\"domain-rules\",\"rich-content\",\"llm-authoring\"],\"useWhen\":\"Materialize governed semantic decisions as Dynamic Form visual guidance while keeping visual blocks outside fieldMetadata, FormControl and payload.\",\"examplePrompts\":[\"materialize governed employee status supplier risk and support priority decisions as visual block guidance\",\"project conditional compliance guidance without changing submit payload\",\"show how LLMs should materialize visualBlock text title message projections with node ids\"]},\"platformValue\":{\"canonicalOwner\":\"praxis-config-starter owns governed semantic decisions; @praxisui/dynamic-form owns derived formRules and FormColumn.items.\",\"visualBlockRuntime\":\"@praxisui/rich-content owns RichContentDocument rendering.\",\"safeRuleContract\":\"visualBlock rules may update visible, hidden, text, title, message, className, rootClassName, layout and style through RULE_PROPERTY_SCHEMA.\",\"payloadBoundary\":\"visualBlock is visual-only: never put visual blocks in fieldMetadata and never read them from formData.\",\"llmContract\":\"LLMs should author business rules through governed domain-rules/shared_rule_authoring. Use operationId rule.visualBlockGuidance.add or equivalent formRules only as a derived UI materialization; formRulesState is generated by Praxis internals after review.\"},\"authoringGuidance\":[\"Do not use visualBlockGuidance as the canonical business-rule authoring path.\",\"Prefer domain-rules/shared_rule_authoring for business-rule, policy, eligibility, validation, compliance or shared decisions.\",\"Use operationId rule.visualBlockGuidance.add only when a governed decision needs a derived Dynamic Form visual projection.\",\"Use targetType visualBlock and target the richContent item id from sections[].rows[].columns[].items[].id.\",\"Set type visualBlockGuidance, context notification and metadata.origin llm with metadata.reviewStatus pending.\",\"Use textNodeId, titleNodeId or messageNodeId when the target document has more than one editable textual node.\",\"Keep condition in canonical Json Logic.\",\"Do not write document, HTML, event handlers, arbitrary URLs or field-like metadata from a rule.\",\"Use the editor diagnostics and Corrigir action when a property is rejected or partially sanitized.\",\"Ask an LLM for semantic correction only when the desired replacement needs business meaning.\"],\"teaches\":[\"formRules.visualBlock\",\"visualBlock.text\",\"visualBlock.title\",\"visualBlock.message\",\"visualBlock.textNodeId\",\"visualBlock.titleNodeId\",\"visualBlock.messageNodeId\",\"visualBlock.visual-only\",\"llm-generated-pending-review\"],\"config\":{\"fieldMetadata\":[{\"name\":\"ativo\",\"label\":\"Ativo\",\"controlType\":\"checkbox\",\"source\":\"schema\"},{\"name\":\"cargoId\",\"label\":\"Cargo\",\"controlType\":\"select\",\"source\":\"schema\",\"options\":[{\"label\":\"Analista\",\"value\":\"analista\"},{\"label\":\"Gestor\",\"value\":\"gestor\"}]},{\"name\":\"riscoFornecedor\",\"label\":\"Risco do fornecedor\",\"controlType\":\"select\",\"source\":\"schema\",\"options\":[{\"label\":\"Baixo\",\"value\":\"baixo\"},{\"label\":\"Alto\",\"value\":\"alto\"},{\"label\":\"Critico\",\"value\":\"critico\"}]},{\"name\":\"prioridade\",\"label\":\"Prioridade\",\"controlType\":\"select\",\"source\":\"schema\",\"options\":[{\"label\":\"Normal\",\"value\":\"normal\"},{\"label\":\"Alta\",\"value\":\"alta\"}]}],\"sections\":[{\"id\":\"domain-guidance\",\"title\":\"Domain guidance examples\",\"rows\":[{\"id\":\"domain-guidance-row\",\"columns\":[{\"id\":\"domain-guidance-column\",\"items\":[{\"kind\":\"richContent\",\"id\":\"profile-status-card\",\"layout\":\"block\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"card\",\"id\":\"profile-status-title\",\"title\":\"Employee active\",\"content\":[{\"type\":\"text\",\"id\":\"profile-status-message\",\"text\":\"Keep assignment, department and contact details current.\"}]}]}},{\"kind\":\"field\",\"id\":\"field-ativo\",\"fieldName\":\"ativo\"},{\"kind\":\"field\",\"id\":\"field-cargoId\",\"fieldName\":\"cargoId\"},{\"kind\":\"richContent\",\"id\":\"supplier-risk-notice\",\"layout\":\"block\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"id\":\"message\",\"text\":\"Supplier has no critical blocks for this order.\"}]}},{\"kind\":\"field\",\"id\":\"field-riscoFornecedor\",\"fieldName\":\"riscoFornecedor\"},{\"kind\":\"richContent\",\"id\":\"ticket-sla-guidance\",\"layout\":\"block\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"id\":\"text\",\"text\":\"Register enough context for triage and follow-up.\"}]}},{\"kind\":\"field\",\"id\":\"field-prioridade\",\"fieldName\":\"prioridade\"}],\"fields\":[\"ativo\",\"cargoId\",\"riscoFornecedor\",\"prioridade\"]}]}]}],\"formRules\":[{\"id\":\"employee-inactive-guidance\",\"name\":\"Employee inactive guidance\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"context\":\"notification\",\"targets\":[\"profile-status-card\"],\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"},\"effect\":{\"condition\":{\"===\":[{\"var\":\"ativo\"},false]},\"properties\":{\"title\":\"Employee inactive\",\"titleNodeId\":\"profile-status-title\",\"message\":\"Review offboarding, access revocation and justification before saving.\",\"messageNodeId\":\"profile-status-message\",\"className\":\"employee-status-card employee-status-card--warning\"},\"propertiesWhenFalse\":{\"title\":\"Employee active\",\"titleNodeId\":\"profile-status-title\",\"message\":\"Keep assignment, department and contact details current.\",\"messageNodeId\":\"profile-status-message\",\"className\":\"employee-status-card employee-status-card--ok\"}}},{\"id\":\"supplier-risk-guidance\",\"name\":\"Supplier risk guidance\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"context\":\"notification\",\"targets\":[\"supplier-risk-notice\"],\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"},\"effect\":{\"condition\":{\"in\":[{\"var\":\"riscoFornecedor\"},[\"alto\",\"critico\"]]},\"properties\":{\"message\":\"Supplier requires compliance approval before issuing the order.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--critical\"},\"propertiesWhenFalse\":{\"message\":\"Supplier has no critical blocks for this order.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--neutral\"}}},{\"id\":\"ticket-priority-copy\",\"name\":\"Ticket priority copy\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"context\":\"notification\",\"targets\":[\"ticket-sla-guidance\"],\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"},\"effect\":{\"condition\":{\"===\":[{\"var\":\"prioridade\"},\"alta\"]},\"properties\":{\"text\":\"High priority: confirm impact, SLA deadline and escalation owner.\",\"textNodeId\":\"text\",\"rootClassName\":\"ticket-sla-guidance ticket-sla-guidance--high\"},\"propertiesWhenFalse\":{\"text\":\"Register enough context for triage and follow-up.\",\"textNodeId\":\"text\",\"rootClassName\":\"ticket-sla-guidance ticket-sla-guidance--standard\"}}}]},\"diagnosticExpectations\":{\"validTargets\":[\"profile-status-card\",\"supplier-risk-notice\",\"ticket-sla-guidance\"],\"visualOnly\":true,\"formRulesStateAuthoredByRecipe\":false,\"reviewRequired\":[\"employee-inactive-guidance\",\"supplier-risk-guidance\",\"ticket-priority-copy\"]}}",
|
|
10204
10444
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-form.visual-block-domain-rules.json",
|
|
@@ -10232,9 +10472,23 @@
|
|
|
10232
10472
|
"name": "resourcePath",
|
|
10233
10473
|
"type": "string",
|
|
10234
10474
|
"required": false,
|
|
10235
|
-
"description": "Resource path used
|
|
10475
|
+
"description": "Resource path or catalog resourceKey used to resolve the filter schema.",
|
|
10236
10476
|
"label": "Resource"
|
|
10237
10477
|
},
|
|
10478
|
+
{
|
|
10479
|
+
"name": "endpointKey",
|
|
10480
|
+
"type": "ApiEndpoint",
|
|
10481
|
+
"required": false,
|
|
10482
|
+
"description": "Canonical endpoint key used to resolve the filter schema in multi-endpoint hosts.",
|
|
10483
|
+
"label": "Endpoint Key"
|
|
10484
|
+
},
|
|
10485
|
+
{
|
|
10486
|
+
"name": "apiUrlEntry",
|
|
10487
|
+
"type": "ApiUrlEntry | null",
|
|
10488
|
+
"required": false,
|
|
10489
|
+
"description": "Explicit API URL entry for detached hosts that render the filter form outside the route injector.",
|
|
10490
|
+
"label": "API URL Entry"
|
|
10491
|
+
},
|
|
10238
10492
|
{
|
|
10239
10493
|
"name": "mode",
|
|
10240
10494
|
"type": "string",
|
|
@@ -10354,7 +10608,6 @@
|
|
|
10354
10608
|
}
|
|
10355
10609
|
],
|
|
10356
10610
|
"configEditor": {
|
|
10357
|
-
"component": "[ref:PraxisFilterFormWidgetConfigEditor]",
|
|
10358
10611
|
"title": "Configurar filtro"
|
|
10359
10612
|
},
|
|
10360
10613
|
"authoringManifestRef": {
|
|
@@ -13100,6 +13353,185 @@
|
|
|
13100
13353
|
"responsive em card"
|
|
13101
13354
|
]
|
|
13102
13355
|
},
|
|
13356
|
+
{
|
|
13357
|
+
"path": "fieldMetadata[].presentation.visualization.scaleScope",
|
|
13358
|
+
"category": "layout",
|
|
13359
|
+
"valueKind": "enum",
|
|
13360
|
+
"allowedValues": [
|
|
13361
|
+
"row",
|
|
13362
|
+
"page"
|
|
13363
|
+
],
|
|
13364
|
+
"description": "Escopo de normalizacao de escala para series e valores em colecoes: row (local por linha) ou page (sincronizado na pagina visivel).",
|
|
13365
|
+
"intentExamples": [
|
|
13366
|
+
"sincronizar escala de sparklines na pagina",
|
|
13367
|
+
"comparar amplitude entre linhas"
|
|
13368
|
+
]
|
|
13369
|
+
},
|
|
13370
|
+
{
|
|
13371
|
+
"path": "fieldMetadata[].presentation.visualization.tone",
|
|
13372
|
+
"category": "appearance",
|
|
13373
|
+
"valueKind": "enum",
|
|
13374
|
+
"allowedValues": [
|
|
13375
|
+
"neutral",
|
|
13376
|
+
"info",
|
|
13377
|
+
"success",
|
|
13378
|
+
"warning",
|
|
13379
|
+
"danger",
|
|
13380
|
+
"critical"
|
|
13381
|
+
],
|
|
13382
|
+
"description": "Tom semantico estatico da micro visualizacao.",
|
|
13383
|
+
"intentExamples": [
|
|
13384
|
+
"neutral",
|
|
13385
|
+
"success",
|
|
13386
|
+
"warning",
|
|
13387
|
+
"danger",
|
|
13388
|
+
"critical"
|
|
13389
|
+
]
|
|
13390
|
+
},
|
|
13391
|
+
{
|
|
13392
|
+
"path": "fieldMetadata[].presentation.visualization.toneExpr",
|
|
13393
|
+
"category": "appearance",
|
|
13394
|
+
"valueKind": "object",
|
|
13395
|
+
"description": "Expressao Json Logic ou caminho row.<campo> para resolver dinamicamente o tom semantico da micro visualizacao.",
|
|
13396
|
+
"safetyNotes": "Deve retornar apenas um dos tons permitidos em presentationVisualizationTone."
|
|
13397
|
+
},
|
|
13398
|
+
{
|
|
13399
|
+
"path": "fieldMetadata[].presentation.visualization.valueExpr",
|
|
13400
|
+
"category": "behavior",
|
|
13401
|
+
"valueKind": "object",
|
|
13402
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para obter o valor principal da micro visualizacao.",
|
|
13403
|
+
"intentExamples": [
|
|
13404
|
+
"row.slaValue",
|
|
13405
|
+
"row.progresso"
|
|
13406
|
+
]
|
|
13407
|
+
},
|
|
13408
|
+
{
|
|
13409
|
+
"path": "fieldMetadata[].presentation.visualization.valueSuffix",
|
|
13410
|
+
"category": "appearance",
|
|
13411
|
+
"valueKind": "string",
|
|
13412
|
+
"description": "Sufixo de unidade anexado ao valor numerico formatado (ex: \"%\", \" pts\", \" ms\", \" d\").",
|
|
13413
|
+
"intentExamples": [
|
|
13414
|
+
"mostrar % no bullet",
|
|
13415
|
+
"adicionar sufixo pts no radial"
|
|
13416
|
+
]
|
|
13417
|
+
},
|
|
13418
|
+
{
|
|
13419
|
+
"path": "fieldMetadata[].presentation.visualization.compactValue",
|
|
13420
|
+
"category": "appearance",
|
|
13421
|
+
"valueKind": "boolean",
|
|
13422
|
+
"description": "Formata valores numericos em notacao compacta (ex: 1.2M, 45.3K) para celulas densas.",
|
|
13423
|
+
"intentExamples": [
|
|
13424
|
+
"compactar valores financeiros grandes",
|
|
13425
|
+
"mostrar 1.2M em comparison"
|
|
13426
|
+
]
|
|
13427
|
+
},
|
|
13428
|
+
{
|
|
13429
|
+
"path": "fieldMetadata[].presentation.visualization.min",
|
|
13430
|
+
"category": "behavior",
|
|
13431
|
+
"valueKind": "number",
|
|
13432
|
+
"description": "Limite minimo explicito da escala numerica."
|
|
13433
|
+
},
|
|
13434
|
+
{
|
|
13435
|
+
"path": "fieldMetadata[].presentation.visualization.max",
|
|
13436
|
+
"category": "behavior",
|
|
13437
|
+
"valueKind": "number",
|
|
13438
|
+
"description": "Limite maximo explicito da escala numerica."
|
|
13439
|
+
},
|
|
13440
|
+
{
|
|
13441
|
+
"path": "fieldMetadata[].presentation.visualization.total",
|
|
13442
|
+
"category": "behavior",
|
|
13443
|
+
"valueKind": "number",
|
|
13444
|
+
"description": "Total explicito para proporcionalidade em stackedBar ou radial."
|
|
13445
|
+
},
|
|
13446
|
+
{
|
|
13447
|
+
"path": "fieldMetadata[].presentation.visualization.target",
|
|
13448
|
+
"category": "behavior",
|
|
13449
|
+
"valueKind": "number",
|
|
13450
|
+
"description": "Meta fixa para comparacao em bullet."
|
|
13451
|
+
},
|
|
13452
|
+
{
|
|
13453
|
+
"path": "fieldMetadata[].presentation.visualization.targetExpr",
|
|
13454
|
+
"category": "behavior",
|
|
13455
|
+
"valueKind": "object",
|
|
13456
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para obter a meta por linha em bullet.",
|
|
13457
|
+
"intentExamples": [
|
|
13458
|
+
"row.metaSla",
|
|
13459
|
+
"row.target"
|
|
13460
|
+
]
|
|
13461
|
+
},
|
|
13462
|
+
{
|
|
13463
|
+
"path": "fieldMetadata[].presentation.visualization.baseline",
|
|
13464
|
+
"category": "behavior",
|
|
13465
|
+
"valueKind": "number",
|
|
13466
|
+
"description": "Valor de referencia fixo para comparison ou delta."
|
|
13467
|
+
},
|
|
13468
|
+
{
|
|
13469
|
+
"path": "fieldMetadata[].presentation.visualization.baselineExpr",
|
|
13470
|
+
"category": "behavior",
|
|
13471
|
+
"valueKind": "object",
|
|
13472
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para obter o valor de referencia (baseline) por linha em comparison ou delta.",
|
|
13473
|
+
"intentExamples": [
|
|
13474
|
+
"row.orcamentoPrevisto",
|
|
13475
|
+
"row.indenizacoesTotal"
|
|
13476
|
+
]
|
|
13477
|
+
},
|
|
13478
|
+
{
|
|
13479
|
+
"path": "fieldMetadata[].presentation.visualization.pointsExpr",
|
|
13480
|
+
"category": "behavior",
|
|
13481
|
+
"valueKind": "object",
|
|
13482
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para serie de pontos em line, area ou column.",
|
|
13483
|
+
"intentExamples": [
|
|
13484
|
+
"row.trend",
|
|
13485
|
+
"row.historicoMensal"
|
|
13486
|
+
]
|
|
13487
|
+
},
|
|
13488
|
+
{
|
|
13489
|
+
"path": "fieldMetadata[].presentation.visualization.segmentsExpr",
|
|
13490
|
+
"category": "behavior",
|
|
13491
|
+
"valueKind": "object",
|
|
13492
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para lista de segmentos em stackedBar.",
|
|
13493
|
+
"intentExamples": [
|
|
13494
|
+
"row.capacitySegments",
|
|
13495
|
+
"row.distribuicao"
|
|
13496
|
+
]
|
|
13497
|
+
},
|
|
13498
|
+
{
|
|
13499
|
+
"path": "fieldMetadata[].presentation.visualization.itemsExpr",
|
|
13500
|
+
"category": "behavior",
|
|
13501
|
+
"valueKind": "object",
|
|
13502
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para lista de etapas em processFlow.",
|
|
13503
|
+
"intentExamples": [
|
|
13504
|
+
"row.flowSteps",
|
|
13505
|
+
"row.etapasAprovacao"
|
|
13506
|
+
]
|
|
13507
|
+
},
|
|
13508
|
+
{
|
|
13509
|
+
"path": "fieldMetadata[].presentation.visualization.thresholds",
|
|
13510
|
+
"category": "appearance",
|
|
13511
|
+
"valueKind": "array",
|
|
13512
|
+
"description": "Faixas e limiares semanticos declarativos ({ value, min, max, tone, label }) para coloracao automatica e faixas qualitativas de bullet.",
|
|
13513
|
+
"intentExamples": [
|
|
13514
|
+
"[{ \"value\": 0, \"tone\": \"danger\" }, { \"value\": 60, \"tone\": \"warning\" }, { \"value\": 85, \"tone\": \"success\" }]"
|
|
13515
|
+
]
|
|
13516
|
+
},
|
|
13517
|
+
{
|
|
13518
|
+
"path": "fieldMetadata[].presentation.visualization.stepLabelLineClamp",
|
|
13519
|
+
"category": "layout",
|
|
13520
|
+
"valueKind": "number",
|
|
13521
|
+
"description": "Numero maximo de linhas (1 ou 2) para rotulos de etapas em processFlow."
|
|
13522
|
+
},
|
|
13523
|
+
{
|
|
13524
|
+
"path": "fieldMetadata[].presentation.visualization.ariaLabel",
|
|
13525
|
+
"category": "accessibility",
|
|
13526
|
+
"valueKind": "string",
|
|
13527
|
+
"description": "Rotulo acessivel explicito da micro visualizacao."
|
|
13528
|
+
},
|
|
13529
|
+
{
|
|
13530
|
+
"path": "fieldMetadata[].presentation.visualization.ariaLabelExpr",
|
|
13531
|
+
"category": "accessibility",
|
|
13532
|
+
"valueKind": "object",
|
|
13533
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para compor o rotulo acessivel por linha."
|
|
13534
|
+
},
|
|
13103
13535
|
{
|
|
13104
13536
|
"path": "fieldMetadata[].presentation.visualization.fallbackText",
|
|
13105
13537
|
"category": "accessibility",
|
|
@@ -13107,6 +13539,12 @@
|
|
|
13107
13539
|
"description": "Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.",
|
|
13108
13540
|
"safetyNotes": "Deve explicar valor, unidade, meta, tendencia ou estado quando aplicavel."
|
|
13109
13541
|
},
|
|
13542
|
+
{
|
|
13543
|
+
"path": "fieldMetadata[].presentation.visualization.fallbackTextExpr",
|
|
13544
|
+
"category": "accessibility",
|
|
13545
|
+
"valueKind": "object",
|
|
13546
|
+
"description": "Caminho row.<campo> ou expressao Json Logic para gerar o fallback textual dinamico por linha."
|
|
13547
|
+
},
|
|
13110
13548
|
{
|
|
13111
13549
|
"path": "fieldMetadata[].presentationRules",
|
|
13112
13550
|
"category": "appearance",
|
|
@@ -13155,6 +13593,30 @@
|
|
|
13155
13593
|
"exibir como porcentagem"
|
|
13156
13594
|
]
|
|
13157
13595
|
},
|
|
13596
|
+
{
|
|
13597
|
+
"path": "fieldMetadata[].inlineVisualStyle",
|
|
13598
|
+
"category": "appearance",
|
|
13599
|
+
"valueKind": "enum",
|
|
13600
|
+
"allowedValues": [
|
|
13601
|
+
"compact",
|
|
13602
|
+
"graphic"
|
|
13603
|
+
],
|
|
13604
|
+
"description": "Estilo visual para controles numericos percentuais inline (compact: pilula liquida com micro-anel e popover; graphic: card expandido com donut, trilho graduado e presets).",
|
|
13605
|
+
"intentExamples": [
|
|
13606
|
+
"usar percentual compacto na barra",
|
|
13607
|
+
"exibir card grafico de percentual"
|
|
13608
|
+
]
|
|
13609
|
+
},
|
|
13610
|
+
{
|
|
13611
|
+
"path": "fieldMetadata[].percentPresets",
|
|
13612
|
+
"category": "data",
|
|
13613
|
+
"valueKind": "array",
|
|
13614
|
+
"description": "Lista de percentuais rapidos exibidos nos botoes de preset do Percent Studio (ex.: [0, 25, 50, 75, 100]).",
|
|
13615
|
+
"intentExamples": [
|
|
13616
|
+
"atalhos de percentual 10, 25, 50 e 100%",
|
|
13617
|
+
"definir presets de porcentagem"
|
|
13618
|
+
]
|
|
13619
|
+
},
|
|
13158
13620
|
{
|
|
13159
13621
|
"path": "fieldMetadata[].validators",
|
|
13160
13622
|
"category": "validation",
|
|
@@ -16090,9 +16552,11 @@
|
|
|
16090
16552
|
"allowedValues": [
|
|
16091
16553
|
"create",
|
|
16092
16554
|
"edit",
|
|
16093
|
-
"view"
|
|
16555
|
+
"view",
|
|
16556
|
+
"presentation",
|
|
16557
|
+
"dossier"
|
|
16094
16558
|
],
|
|
16095
|
-
"description": "
|
|
16559
|
+
"description": "Modos nativos preservados em documentos. Em novos fluxos, prefira view com presentationModeGlobal para separar operação dos dados e apresentação."
|
|
16096
16560
|
}
|
|
16097
16561
|
],
|
|
16098
16562
|
"editableTargets": [
|
|
@@ -17160,9 +17624,9 @@
|
|
|
17160
17624
|
{
|
|
17161
17625
|
"chunkIndex": 0,
|
|
17162
17626
|
"chunkKind": "summary",
|
|
17163
|
-
"content": "Component ID: praxis-filter-form\nSelector: praxis-filter-form\nFriendly Name: Praxis Filter Form\nDescription: Filter form driven by FormConfig and fieldMetadata.\nCategory: form\nLib/Package: @praxisui/dynamic-form\nTags: widget, form, filter, configurable\nInputs:\n - config (FormConfig)\n - formId (string)\n - resourcePath (string)\n - mode (string)\nOutputs:\n - formReady ({ formGroup: FormGroup<Record<string, unknown>> })\n - valueChange ({ formData: Record<string, unknown> })\n - submit ({ formData: Record<string, unknown> })\n - validityChange (boolean)\n",
|
|
17627
|
+
"content": "Component ID: praxis-filter-form\nSelector: praxis-filter-form\nFriendly Name: Praxis Filter Form\nDescription: Filter form driven by FormConfig and fieldMetadata.\nCategory: form\nLib/Package: @praxisui/dynamic-form\nTags: widget, form, filter, configurable\nInputs:\n - config (FormConfig)\n - formId (string)\n - resourcePath (string)\n - endpointKey (ApiEndpoint)\n - apiUrlEntry (ApiUrlEntry | null)\n - mode (string)\nOutputs:\n - formReady ({ formGroup: FormGroup<Record<string, unknown>> })\n - valueChange ({ formData: Record<string, unknown> })\n - submit ({ formData: Record<string, unknown> })\n - validityChange (boolean)\n",
|
|
17164
17628
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/filter-form/praxis-filter-form.metadata.ts",
|
|
17165
|
-
"contentHash": "
|
|
17629
|
+
"contentHash": "da46a472f73093abeae12137ce3a6af4306e9e9b7e9bf3e6065ba772e46289a6",
|
|
17166
17630
|
"sourceKind": "component_definition",
|
|
17167
17631
|
"sourceId": "praxis-filter-form",
|
|
17168
17632
|
"corpusVersion": "1.0.0"
|
|
@@ -17240,9 +17704,9 @@
|
|
|
17240
17704
|
{
|
|
17241
17705
|
"chunkIndex": 8,
|
|
17242
17706
|
"chunkKind": "capabilities",
|
|
17243
|
-
"content": "Schema Capability:\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.prefix\n Category: appearance\n Kind: string\n Description: Prefixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.suffix\n Category: appearance\n Kind: string\n Description: Sufixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.
|
|
17707
|
+
"content": "Schema Capability:\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.prefix\n Category: appearance\n Kind: string\n Description: Prefixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.suffix\n Category: appearance\n Kind: string\n Description: Sufixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.scaleScope\n Category: layout\n Kind: enum\n Description: Escopo de normalizacao de escala para series e valores em colecoes: row (local por linha) ou page (sincronizado na pagina visivel).\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico estatico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.toneExpr\n Category: appearance\n Kind: object\n Description: Expressao Json Logic ou caminho row.<campo> para resolver dinamicamente o tom semantico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.valueExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para obter o valor principal da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.valueSuffix\n Category: appearance\n Kind: string\n Description: Sufixo de unidade anexado ao valor numerico formatado (ex: \"%\", \" pts\", \" ms\", \" d\").\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.compactValue\n Category: appearance\n Kind: boolean\n Description: Formata valores numericos em notacao compacta (ex: 1.2M, 45.3K) para celulas densas.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.min\n Category: behavior\n Kind: number\n Description: Limite minimo explicito da escala numerica.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.max\n Category: behavior\n Kind: number\n Description: Limite maximo explicito da escala numerica.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.total\n Category: behavior\n Kind: number\n Description: Total explicito para proporcionalidade em stackedBar ou radial.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.target\n Category: behavior\n Kind: number\n Description: Meta fixa para comparacao em bullet.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.targetExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para obter a meta por linha em bullet.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.baseline\n Category: behavior\n Kind: number\n Description: Valor de referencia fixo para comparison ou delta.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.baselineExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para obter o valor de referencia (baseline) por linha em comparison ou delta.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.pointsExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para serie de pontos em line, area ou column.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.segmentsExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para lista de segmentos em stackedBar.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.itemsExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para lista de etapas em processFlow.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.thresholds\n Category: appearance\n Kind: array\n Description: Faixas e limiares semanticos declarativos ({ value, min, max, tone, label }) para coloracao automatica e faixas qualitativas de bullet.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.stepLabelLineClamp\n Category: layout\n Kind: number\n Description: Numero maximo de linhas (1 ou 2) para rotulos de etapas em processFlow.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.ariaLabel\n Category: accessibility\n Kind: string\n Description: Rotulo acessivel explicito da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.ariaLabelExpr\n Category: accessibility\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para compor o rotulo acessivel por linha.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.fallbackText\n Category: accessibility\n Kind: string\n Description: Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.",
|
|
17244
17708
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
|
|
17245
|
-
"contentHash": "
|
|
17709
|
+
"contentHash": "dc6be0dc67a901095196573bc7a8f81c4cae31110aa85265ef4ff6e1646b940b",
|
|
17246
17710
|
"sourceKind": "component_definition",
|
|
17247
17711
|
"sourceId": "praxis-filter-form",
|
|
17248
17712
|
"corpusVersion": "1.0.0"
|
|
@@ -17250,9 +17714,9 @@
|
|
|
17250
17714
|
{
|
|
17251
17715
|
"chunkIndex": 9,
|
|
17252
17716
|
"chunkKind": "capabilities",
|
|
17253
|
-
"content": "Schema Capability:\n - Path: fieldMetadata[].
|
|
17717
|
+
"content": "Schema Capability:\n - Path: fieldMetadata[].presentation.visualization.fallbackTextExpr\n Category: accessibility\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para gerar o fallback textual dinamico por linha.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules\n Category: appearance\n Kind: array\n Description: Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].when\n Category: behavior\n Kind: object\n Description: Guarda Json Logic avaliada contra o contexto de apresentacao do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n\nSchema Capability:\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n\nSchema Capability:\n - Path: fieldMetadata[].inlineVisualStyle\n Category: appearance\n Kind: enum\n Description: Estilo visual para controles numericos percentuais inline (compact: pilula liquida com micro-anel e popover; graphic: card expandido com donut, trilho graduado e presets).\n\nSchema Capability:\n - Path: fieldMetadata[].percentPresets\n Category: data\n Kind: array\n Description: Lista de percentuais rapidos exibidos nos botoes de preset do Percent Studio (ex.: [0, 25, 50, 75, 100]).\n\nSchema Capability:\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n\nSchema Capability:\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).",
|
|
17254
17718
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
|
|
17255
|
-
"contentHash": "
|
|
17719
|
+
"contentHash": "1e418f6ed02cbfa86ec339516bc55adf540acfabcf2fa04fda54ccf2e15c1843",
|
|
17256
17720
|
"sourceKind": "component_definition",
|
|
17257
17721
|
"sourceId": "praxis-filter-form",
|
|
17258
17722
|
"corpusVersion": "1.0.0"
|
|
@@ -17260,9 +17724,9 @@
|
|
|
17260
17724
|
{
|
|
17261
17725
|
"chunkIndex": 10,
|
|
17262
17726
|
"chunkKind": "capabilities",
|
|
17263
|
-
"content": "Schema Capability:\n - Path: fieldMetadata[].
|
|
17727
|
+
"content": "Schema Capability:\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n\nSchema Capability:\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n\nSchema Capability:\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n\nSchema Capability:\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n\nSchema Capability:\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n\nSchema Capability:\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n\nSchema Capability:\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n\nSchema Capability:\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n\nSchema Capability:\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess\n Category: behavior\n Kind: object\n Description: Politica canonica de UX para visibilidade/edicao por authorities publicadas pelo backend.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.visibleForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem ver o campo no runtime quando a UX tiver claims explicitas.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.editableForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem editar o campo no runtime quando a UX tiver claims explicitas.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.reason\n Category: misc\n Kind: string\n Description: Justificativa explicativa/auditavel da politica de acesso do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n\nSchema Capability:\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n\nSchema Capability:\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n\nSchema Capability:\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n\nSchema Capability:\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n\nSchema Capability:\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n\nSchema Capability:\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n\nSchema Capability:\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n\nSchema Capability:\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n\nSchema Capability:\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n\nSchema Capability:\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n\nComponent Capability:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n\nComponent Capability:\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n\nComponent Capability:\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n\nComponent Capability:\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n\nComponent Capability:\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n\nComponent Capability:\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).",
|
|
17264
17728
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
|
|
17265
|
-
"contentHash": "
|
|
17729
|
+
"contentHash": "f5e8c17c1a6e0f3ab98cc132d55ffcf4067ebed9ff5d23daf3d63dbc9072f4ca",
|
|
17266
17730
|
"sourceKind": "component_definition",
|
|
17267
17731
|
"sourceId": "praxis-filter-form",
|
|
17268
17732
|
"corpusVersion": "1.0.0"
|
|
@@ -17270,9 +17734,9 @@
|
|
|
17270
17734
|
{
|
|
17271
17735
|
"chunkIndex": 11,
|
|
17272
17736
|
"chunkKind": "capabilities",
|
|
17273
|
-
"content": "Component Capability:\n - Path: inputs.
|
|
17737
|
+
"content": "Component Capability:\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n\nComponent Capability:\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n\nComponent Capability:\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n\nComponent Capability:\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n\nComponent Capability:\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n\nComponent Capability:\n - Path: inputs.submitIdempotencyKey\n Category: inputs\n Kind: string\n Description: Identidade estavel da tentativa de comando, materializada a partir da politica execution da action.\n\nComponent Capability:\n - Path: inputs.submitCorrelationId\n Category: inputs\n Kind: string\n Description: Identificador de correlacao governado para rastreabilidade ponta a ponta do comando.\n\nComponent Capability:\n - Path: inputs.submitResourceVersion\n Category: inputs\n Kind: string\n Description: Versao persistida esperada, transportada como If-Match quando exigida pela action.\n\nComponent Capability:\n - Path: inputs.submitResourceVersionTargetResourceKey\n Category: inputs\n Kind: string\n Description: Resource key canônico materializado pela action para resolver o ETag de outro agregado no momento do submit.\n\nComponent Capability:\n - Path: inputs.submitResourceVersionTargetIdField\n Category: inputs\n Kind: string\n Description: Campo exato do request que identifica o agregado cujo ETag governa a action.\n\nComponent Capability:\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n\nComponent Capability:\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n\nComponent Capability:\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n\nComponent Capability:\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n\nComponent Capability:\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n\nComponent Capability:\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n\nComponent Capability:\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n\nComponent Capability:\n - Path: inputs.configPersistenceStrategy\n Category: inputs\n Kind: enum\n Description: Define se preferências locais persistidas ou o contrato explícito do host governam a materialização corrente.\n\nComponent Capability:\n - Path: inputs.layoutPolicy\n Category: inputs\n Kind: object\n Description: Politica opt-in para materializar layout diretamente do schema atual sem depender de FormConfig.sections authoradas.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.preset\n Category: inputs\n Kind: enum\n Description: Preset de layout schema-driven. compactPresentation cobre detalhe read-only; groupedCommand cobre create/edit.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.persistence\n Category: inputs\n Kind: enum\n Description: Define se sections geradas sao transient ou podem virar layout authorado apos detach explicito.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.orphanFieldExpansion\n Category: inputs\n Kind: enum\n Description: Define como uma linha groupedCommand com um unico campo usa o espaco restante. O default medium-and-wide expande spans 6 ou 8 e preserva campos compactos.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.contextFields\n Category: inputs\n Kind: array\n Description: Campos canônicos do request cujo valor vem do contexto da surface. Eles permanecem no FormGroup e no payload, sem renderizar controles redundantes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.partialRowStrategy\n Category: inputs\n Kind: enum\n Description: Define se cada linha visual parcial, depois de resolver visibilidade responsiva, CSS order e wrap, preserva os spans canônicos ou redistribui apenas campos compatíveis para completar 12 colunas no breakpoint atual.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.",
|
|
17274
17738
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
|
|
17275
|
-
"contentHash": "
|
|
17739
|
+
"contentHash": "fb0074203e0a6e14fec64b7a21f0d85f815714122bb49a18404c5e5c64904c4c",
|
|
17276
17740
|
"sourceKind": "component_definition",
|
|
17277
17741
|
"sourceId": "praxis-filter-form",
|
|
17278
17742
|
"corpusVersion": "1.0.0"
|
|
@@ -17280,15 +17744,25 @@
|
|
|
17280
17744
|
{
|
|
17281
17745
|
"chunkIndex": 12,
|
|
17282
17746
|
"chunkKind": "capabilities",
|
|
17283
|
-
"content": "Component Capability:\n - Path: inputs.
|
|
17747
|
+
"content": "Component Capability:\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n\nComponent Capability:\n - Path: inputs.fieldIconPolicy\n Category: inputs\n Kind: enum\n Description: Controla se icones prefix/suffix dos metadados aparecem em todos os modos, apenas apresentacao, ou nunca.\n\nComponent Capability:\n - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n\nComponent Capability:\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n\nComponent Capability:\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n\nComponent Capability:\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n\nComponent Capability:\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n\nComponent Capability:\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n\nComponent Capability:\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n\nComponent Capability:\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n\nComponent Capability:\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n\nComponent Capability:\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n\nComponent Capability:\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n\nComponent Capability:\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n\nComponent Capability:\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n\nComponent Capability:\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n\nComponent Capability:\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n\nComponent Capability:\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n\nComponent Capability:\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n\nComponent Capability:\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n\nComponent Capability:\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n\nComponent Capability:\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n\nComponent Capability:\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n\nComponent Capability:\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n\nComponent Capability:\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n\nComponent Capability:\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n\nComponent Capability:\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n\nComponent Capability:\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n\nComponent Capability:\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n\nComponent Capability:\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n\nComponent Capability:\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n\nComponent Capability:\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n\nComponent Capability:\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.",
|
|
17284
17748
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
|
|
17285
|
-
"contentHash": "
|
|
17749
|
+
"contentHash": "581cd896c206465873181d72b074d69d2bacefd3bae0bca8cc3db46a378af5d3",
|
|
17286
17750
|
"sourceKind": "component_definition",
|
|
17287
17751
|
"sourceId": "praxis-filter-form",
|
|
17288
17752
|
"corpusVersion": "1.0.0"
|
|
17289
17753
|
},
|
|
17290
17754
|
{
|
|
17291
17755
|
"chunkIndex": 13,
|
|
17756
|
+
"chunkKind": "capabilities",
|
|
17757
|
+
"content": "Component Capability:\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n\nComponent Capability:\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n\nComponent Capability:\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n\nComponent Capability:\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n\nComponent Capability:\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n\nComponent Capability:\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n\nComponent Capability:\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\n\nCapability Note:\n - Este catalogo descreve inputs e outputs do componente.\n\nCapability Note:\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n\nCapability Note:\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n\nCapability Note:\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n\nCapability Note:\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n\nCapability Note:\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.",
|
|
17758
|
+
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
|
|
17759
|
+
"contentHash": "2ce7f5421defeaee7239892584b36760cd38d627750678d49068eaee9ecfd09c",
|
|
17760
|
+
"sourceKind": "component_definition",
|
|
17761
|
+
"sourceId": "praxis-filter-form",
|
|
17762
|
+
"corpusVersion": "1.0.0"
|
|
17763
|
+
},
|
|
17764
|
+
{
|
|
17765
|
+
"chunkIndex": 14,
|
|
17292
17766
|
"chunkKind": "authoring_manifest",
|
|
17293
17767
|
"content": "{\"operationId\":\"field.label.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Alterar rótulo do campo Effects: merge-by-key. Mudar o label do campo email para \\\"E-mail Corporativo\\\" Alterar o label do campo \\\"campoInexistente\\\" Salvar e reabrir o formulário editado sem drift de configuração\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"label\"],\"properties\":[\"label\"],\"semanticTerms\":[\"label\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].label\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"relabel-schema-backed-field\",\"request\":\"Mudar o label do campo email para \\\"E-mail Corporativo\\\"\",\"operationId\":\"field.label.set\",\"target\":\"email\",\"params\":{\"label\":\"E-mail Corporativo\"},\"isPositive\":true},{\"id\":\"round-trip-no-drift\",\"request\":\"Salvar e reabrir o formulário editado sem drift de configuração\",\"operationId\":\"field.label.set\",\"target\":\"nome\",\"params\":{\"label\":\"Nome Completo\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-unknown-field\",\"request\":\"Alterar o label do campo \\\"campoInexistente\\\"\",\"operationId\":\"field.label.set\",\"target\":\"campoInexistente\",\"params\":{\"label\":\"Novo Label\"},\"isPositive\":false}]}",
|
|
17294
17768
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17298,7 +17772,7 @@
|
|
|
17298
17772
|
"corpusVersion": "1.0.0"
|
|
17299
17773
|
},
|
|
17300
17774
|
{
|
|
17301
|
-
"chunkIndex":
|
|
17775
|
+
"chunkIndex": 15,
|
|
17302
17776
|
"chunkKind": "authoring_manifest",
|
|
17303
17777
|
"content": "{\"operationId\":\"field.placeholder.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Alterar placeholder do campo Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"placeholder\"],\"properties\":[\"placeholder\"],\"semanticTerms\":[\"placeholder\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].placeholder\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
17304
17778
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17308,7 +17782,7 @@
|
|
|
17308
17782
|
"corpusVersion": "1.0.0"
|
|
17309
17783
|
},
|
|
17310
17784
|
{
|
|
17311
|
-
"chunkIndex":
|
|
17785
|
+
"chunkIndex": 16,
|
|
17312
17786
|
"chunkKind": "authoring_manifest",
|
|
17313
17787
|
"content": "{\"operationId\":\"field.required.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir obrigatoriedade Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"required\"],\"properties\":[\"required\"],\"semanticTerms\":[\"required\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].required\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
17314
17788
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17318,7 +17792,7 @@
|
|
|
17318
17792
|
"corpusVersion": "1.0.0"
|
|
17319
17793
|
},
|
|
17320
17794
|
{
|
|
17321
|
-
"chunkIndex":
|
|
17795
|
+
"chunkIndex": 17,
|
|
17322
17796
|
"chunkKind": "authoring_manifest",
|
|
17323
17797
|
"content": "{\"operationId\":\"field.readOnly.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir campo como somente leitura Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"readOnly\"],\"properties\":[\"readOnly\"],\"semanticTerms\":[\"readOnly\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].readOnly\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
17324
17798
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17328,7 +17802,7 @@
|
|
|
17328
17802
|
"corpusVersion": "1.0.0"
|
|
17329
17803
|
},
|
|
17330
17804
|
{
|
|
17331
|
-
"chunkIndex":
|
|
17805
|
+
"chunkIndex": 18,
|
|
17332
17806
|
"chunkKind": "authoring_manifest",
|
|
17333
17807
|
"content": "{\"operationId\":\"field.disabled.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir campo como desabilitado Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"disabled\"],\"properties\":[\"disabled\"],\"semanticTerms\":[\"disabled\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].disabled\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
17334
17808
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17338,7 +17812,7 @@
|
|
|
17338
17812
|
"corpusVersion": "1.0.0"
|
|
17339
17813
|
},
|
|
17340
17814
|
{
|
|
17341
|
-
"chunkIndex":
|
|
17815
|
+
"chunkIndex": 19,
|
|
17342
17816
|
"chunkKind": "authoring_manifest",
|
|
17343
17817
|
"content": "{\"operationId\":\"field.hidden.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir visibilidade inicial Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"hidden\"],\"properties\":[\"hidden\"],\"semanticTerms\":[\"hidden\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].hidden\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
17344
17818
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17348,7 +17822,7 @@
|
|
|
17348
17822
|
"corpusVersion": "1.0.0"
|
|
17349
17823
|
},
|
|
17350
17824
|
{
|
|
17351
|
-
"chunkIndex":
|
|
17825
|
+
"chunkIndex": 20,
|
|
17352
17826
|
"chunkKind": "authoring_manifest",
|
|
17353
17827
|
"content": "{\"operationId\":\"field.controlType.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Alterar tipo de controle Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"controlType\"],\"properties\":[\"controlType\"],\"semanticTerms\":[\"controlType\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].controlType\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"control-type-compatible\",\"level\":\"error\",\"code\":\"DF017\",\"description\":\"O tipo de controle deve ser compatível com o tipo de dado do campo.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
17354
17828
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17358,7 +17832,7 @@
|
|
|
17358
17832
|
"corpusVersion": "1.0.0"
|
|
17359
17833
|
},
|
|
17360
17834
|
{
|
|
17361
|
-
"chunkIndex":
|
|
17835
|
+
"chunkIndex": 21,
|
|
17362
17836
|
"chunkKind": "authoring_manifest",
|
|
17363
17837
|
"content": "{\"operationId\":\"field.optionSource.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir fonte de opções do campo Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"optionSource\"],\"properties\":[\"optionSource\"],\"semanticTerms\":[\"optionSource\",\"optionSource.key\",\"optionSource.type\",\"optionSource.resourcePath\",\"optionSource.valuePropertyPath\",\"optionSource.labelPropertyPath\",\"optionSource.dependsOn\",\"optionSource.dependencyFilterMap\",\"optionSource.includeIds\",\"optionSource.capabilities\",\"optionSource.display\",\"optionSource.selectionPolicy\",\"RESOURCE_ENTITY\",\"DISTINCT_DIMENSION\",\"CATEGORICAL_BUCKET\",\"LIGHT_LOOKUP\",\"STATIC_CANONICAL\",\"optionSource.capabilities.filter\",\"optionSource.capabilities.byIds\",\"optionSource.capabilities.detail\",\"optionSource.capabilities.create\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].optionSource\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"option-source-valid\",\"level\":\"error\",\"code\":\"DF018\",\"description\":\"A fonte de opções deve ser válida para o tipo de controle especificado.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-remote-binding\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
17364
17838
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17368,7 +17842,7 @@
|
|
|
17368
17842
|
"corpusVersion": "1.0.0"
|
|
17369
17843
|
},
|
|
17370
17844
|
{
|
|
17371
|
-
"chunkIndex":
|
|
17845
|
+
"chunkIndex": 22,
|
|
17372
17846
|
"chunkKind": "authoring_manifest",
|
|
17373
17847
|
"content": "{\"operationId\":\"field.local.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar campo local Effects: append-unique. Adicionar campo auxiliar local \\\"notasInternas\\\" que não deve aparecer no payload de envio\",\"scope\":\"global\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"required\":false},\"inputContract\":{\"required\":[\"name\",\"label\",\"controlType\",\"source\"],\"properties\":[\"name\",\"label\",\"controlType\",\"source\",\"transient\",\"submitPolicy\"],\"semanticTerms\":[\"name\",\"label\",\"controlType\",\"source\",\"transient\",\"submitPolicy\",\"local\",\"omit\",\"include\",\"includeWhenDirty\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"fieldMetadata[]\"],\"validators\":[{\"validatorId\":\"field-name-unique\",\"level\":\"error\",\"code\":\"DF002\",\"description\":\"Nomes de campos devem ser únicos em fieldMetadata.\"},{\"validatorId\":\"local-schema-name-no-collision\",\"level\":\"error\",\"code\":\"DF006\",\"description\":\"Nome de campo local não pode colidir com campo schema-backed existente.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-local-transient-field\",\"request\":\"Adicionar campo auxiliar local \\\"notasInternas\\\" que não deve aparecer no payload de envio\",\"operationId\":\"field.local.add\",\"params\":{\"name\":\"notasInternas\",\"label\":\"Notas Internas\",\"controlType\":\"textarea\",\"source\":\"local\",\"transient\":true,\"submitPolicy\":\"omit\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
17374
17848
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17378,7 +17852,7 @@
|
|
|
17378
17852
|
"corpusVersion": "1.0.0"
|
|
17379
17853
|
},
|
|
17380
17854
|
{
|
|
17381
|
-
"chunkIndex":
|
|
17855
|
+
"chunkIndex": 23,
|
|
17382
17856
|
"chunkKind": "authoring_manifest",
|
|
17383
17857
|
"content": "{\"operationId\":\"field.local.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remover campo local Effects: remove-by-key, compile-domain-patch. Remover o campo auxiliar \\\"notasInternas\\\"\",\"scope\":\"field\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[],\"semanticTerms\":[]},\"effects\":[\"remove-by-key\",\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"field-is-local\",\"level\":\"error\",\"code\":\"DF007\",\"description\":\"Operação restrita a campos locais (source:\\\"local\\\"). Campo schema-backed não pode ser removido ou ter submitPolicy alterada.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"require-confirmation-remove-field\",\"request\":\"Remover o campo auxiliar \\\"notasInternas\\\"\",\"operationId\":\"field.local.remove\",\"target\":\"notasInternas\",\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
17384
17858
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17388,7 +17862,7 @@
|
|
|
17388
17862
|
"corpusVersion": "1.0.0"
|
|
17389
17863
|
},
|
|
17390
17864
|
{
|
|
17391
|
-
"chunkIndex":
|
|
17865
|
+
"chunkIndex": 24,
|
|
17392
17866
|
"chunkKind": "authoring_manifest",
|
|
17393
17867
|
"content": "{\"operationId\":\"layout.section.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar nova seção Effects: append-unique.\",\"scope\":\"global\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"required\":false},\"inputContract\":{\"required\":[\"id\",\"title\"],\"properties\":[\"id\",\"title\",\"icon\",\"collapsible\"],\"semanticTerms\":[\"id\",\"title\",\"icon\",\"collapsible\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"sections[]\"],\"validators\":[{\"validatorId\":\"section-id-unique\",\"level\":\"error\",\"code\":\"DF003\",\"description\":\"IDs de seções devem ser únicos em sections[].\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
17394
17868
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17398,7 +17872,7 @@
|
|
|
17398
17872
|
"corpusVersion": "1.0.0"
|
|
17399
17873
|
},
|
|
17400
17874
|
{
|
|
17401
|
-
"chunkIndex":
|
|
17875
|
+
"chunkIndex": 25,
|
|
17402
17876
|
"chunkKind": "authoring_manifest",
|
|
17403
17877
|
"content": "{\"operationId\":\"layout.section.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remover seção Effects: remove-by-key, compile-domain-patch. Remover a seção \\\"Dados Adicionais\\\"\",\"scope\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[],\"semanticTerms\":[]},\"effects\":[\"remove-by-key\",\"compile-domain-patch\"],\"affectedPaths\":[\"sections[]\",\"sections[].rows[]\",\"sections[].rows[].columns[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"validators\":[{\"validatorId\":\"section-exists\",\"level\":\"error\",\"code\":\"DF004\",\"description\":\"A seção alvo deve existir em sections[].\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"require-confirmation-remove-section\",\"request\":\"Remover a seção \\\"Dados Adicionais\\\"\",\"operationId\":\"layout.section.remove\",\"target\":\"secao-dados-adicionais\",\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
17404
17878
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17408,7 +17882,7 @@
|
|
|
17408
17882
|
"corpusVersion": "1.0.0"
|
|
17409
17883
|
},
|
|
17410
17884
|
{
|
|
17411
|
-
"chunkIndex":
|
|
17885
|
+
"chunkIndex": 26,
|
|
17412
17886
|
"chunkKind": "authoring_manifest",
|
|
17413
17887
|
"content": "{\"operationId\":\"layout.row.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar linha numa seção Effects: append-unique.\",\"scope\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"required\":true},\"inputContract\":{\"required\":[\"id\"],\"properties\":[\"id\",\"columns\"],\"semanticTerms\":[\"id\",\"columns\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"sections[].rows[]\"],\"validators\":[{\"validatorId\":\"section-exists\",\"level\":\"error\",\"code\":\"DF004\",\"description\":\"A seção alvo deve existir em sections[].\"},{\"validatorId\":\"row-id-unique-in-section\",\"level\":\"error\",\"code\":\"DF015\",\"description\":\"O id da nova linha deve ser único dentro da seção alvo.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
17414
17888
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17418,7 +17892,7 @@
|
|
|
17418
17892
|
"corpusVersion": "1.0.0"
|
|
17419
17893
|
},
|
|
17420
17894
|
{
|
|
17421
|
-
"chunkIndex":
|
|
17895
|
+
"chunkIndex": 27,
|
|
17422
17896
|
"chunkKind": "authoring_manifest",
|
|
17423
17897
|
"content": "{\"operationId\":\"layout.column.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar coluna numa linha Effects: append-unique.\",\"scope\":\"row\",\"target\":{\"kind\":\"row\",\"resolver\":\"row-by-id-in-section\",\"required\":true},\"inputContract\":{\"required\":[\"id\"],\"properties\":[\"id\",\"span\"],\"semanticTerms\":[\"id\",\"span\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"sections[].rows[].columns[]\"],\"validators\":[{\"validatorId\":\"row-exists\",\"level\":\"error\",\"code\":\"DF014\",\"description\":\"A linha alvo deve existir na seção especificada.\"},{\"validatorId\":\"column-id-unique-in-row\",\"level\":\"error\",\"code\":\"DF016\",\"description\":\"O id da nova coluna deve ser único dentro da linha alvo.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
|
|
17424
17898
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17428,7 +17902,7 @@
|
|
|
17428
17902
|
"corpusVersion": "1.0.0"
|
|
17429
17903
|
},
|
|
17430
17904
|
{
|
|
17431
|
-
"chunkIndex":
|
|
17905
|
+
"chunkIndex": 28,
|
|
17432
17906
|
"chunkKind": "authoring_manifest",
|
|
17433
17907
|
"content": "{\"operationId\":\"layout.field.move\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Mover campo no layout Effects: compile-domain-patch. Mover campo telefone para a primeira coluna da seção de contato\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\",\"index\"],\"semanticTerms\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\",\"index\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"layout-target-exists\",\"level\":\"error\",\"code\":\"DF012\",\"description\":\"A seção/linha/coluna de destino devem existir antes de mover o campo.\"},{\"validatorId\":\"no-index-as-identity\",\"level\":\"error\",\"code\":\"DF013\",\"description\":\"Operações de layout não devem usar índice de array como identidade canônica; use IDs estáveis.\"},{\"validatorId\":\"field-exists-in-layout\",\"level\":\"warning\",\"code\":\"DF005\",\"description\":\"Campo definido em fieldMetadata mas ausente no layout.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"move-field-to-column\",\"request\":\"Mover campo telefone para a primeira coluna da seção de contato\",\"operationId\":\"layout.field.move\",\"target\":\"telefone\",\"params\":{\"targetSectionId\":\"secao-contato\",\"targetRowId\":\"row-1\",\"targetColumnId\":\"col-1\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
17434
17908
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17438,7 +17912,7 @@
|
|
|
17438
17912
|
"corpusVersion": "1.0.0"
|
|
17439
17913
|
},
|
|
17440
17914
|
{
|
|
17441
|
-
"chunkIndex":
|
|
17915
|
+
"chunkIndex": 29,
|
|
17442
17916
|
"chunkKind": "authoring_manifest",
|
|
17443
17917
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"identity\"}",
|
|
17444
17918
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17448,17 +17922,17 @@
|
|
|
17448
17922
|
"corpusVersion": "1.0.0"
|
|
17449
17923
|
},
|
|
17450
17924
|
{
|
|
17451
|
-
"chunkIndex":
|
|
17925
|
+
"chunkIndex": 30,
|
|
17452
17926
|
"chunkKind": "authoring_manifest",
|
|
17453
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"config\",\"type\":\"FormConfig\",\"description\":\"Configuração do formulário; sections é opcional em forms schema-driven e não deve ser criado como array vazio apenas para satisfazer TypeScript.\"},{\"name\":\"formId\",\"type\":\"string\",\"description\":\"Identidade estável usada pelo runtime para persistência local da configuração.\"},{\"name\":\"resourcePath\",\"type\":\"string\",\"description\":\"Caminho do recurso (API)\"},{\"name\":\"mode\",\"type\":\"string\",\"allowedValues\":[\"create\",\"edit\",\"view\"],\"description\":\"
|
|
17927
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"config\",\"type\":\"FormConfig\",\"description\":\"Configuração do formulário; sections é opcional em forms schema-driven e não deve ser criado como array vazio apenas para satisfazer TypeScript.\"},{\"name\":\"formId\",\"type\":\"string\",\"description\":\"Identidade estável usada pelo runtime para persistência local da configuração.\"},{\"name\":\"resourcePath\",\"type\":\"string\",\"description\":\"Caminho do recurso (API)\"},{\"name\":\"mode\",\"type\":\"string\",\"allowedValues\":[\"create\",\"edit\",\"view\",\"presentation\",\"dossier\"],\"description\":\"Modos nativos preservados em documentos. Em novos fluxos, prefira view com presentationModeGlobal para separar operação dos dados e apresentação.\"}]}",
|
|
17454
17928
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
17455
|
-
"contentHash": "
|
|
17929
|
+
"contentHash": "87565432bc9d9f832bcd7f5d85001fe6d2eca9009c4f211468588e358ef89239",
|
|
17456
17930
|
"sourceKind": "component_definition",
|
|
17457
17931
|
"sourceId": "praxis-filter-form",
|
|
17458
17932
|
"corpusVersion": "1.0.0"
|
|
17459
17933
|
},
|
|
17460
17934
|
{
|
|
17461
|
-
"chunkIndex":
|
|
17935
|
+
"chunkIndex": 31,
|
|
17462
17936
|
"chunkKind": "authoring_manifest",
|
|
17463
17937
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"description\":\"Campos do formulário (metadados schema-backed ou local; use para ops de propriedade)\"},{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"description\":\"Campos locais com source:\\\"local\\\"; adicionados/removidos via authoring\"},{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"description\":\"Seções de layout identificadas por id estável\"},{\"kind\":\"row\",\"resolver\":\"row-by-id-in-section\",\"description\":\"Linhas dentro de seções, identificadas por id estável\"}]}",
|
|
17464
17938
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17468,7 +17942,7 @@
|
|
|
17468
17942
|
"corpusVersion": "1.0.0"
|
|
17469
17943
|
},
|
|
17470
17944
|
{
|
|
17471
|
-
"chunkIndex":
|
|
17945
|
+
"chunkIndex": 32,
|
|
17472
17946
|
"chunkKind": "authoring_manifest",
|
|
17473
17947
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"field.label.set\",\"title\":\"Alterar rótulo do campo\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"label\"],\"properties\":{\"label\":{\"type\":\"string\",\"minLength\":1}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].label\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.placeholder.set\",\"title\":\"Alterar placeholder do campo\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"placeholder\"],\"properties\":{\"placeholder\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].placeholder\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.required.set\",\"title\":\"Definir obrigatoriedade\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"required\"],\"properties\":{\"required\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].required\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.readOnly.set\",\"title\":\"Definir campo como somente leitura\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"readOnly\"],\"properties\":{\"readOnly\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].readOnly\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.disabled.set\",\"title\":\"Definir campo como desabilitado\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"disabled\"],\"properties\":{\"disabled\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].disabled\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.hidden.set\",\"title\":\"Definir visibilidade inicial\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"hidden\"],\"properties\":{\"hidden\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].hidden\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.controlType.set\",\"title\":\"Alterar tipo de controle\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"controlType\"],\"properties\":{\"controlType\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"field-exists\",\"control-type-compatible\"],\"affectedPaths\":[\"fieldMetadata[].controlType\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.optionSource.set\",\"title\":\"Definir fonte de opções do campo\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"optionSource\"],\"properties\":{\"optionSource\":{\"type\":\"object\",\"required\":[\"key\",\"type\",\"resourcePath\"],\"properties\":{\"key\":{\"type\":\"string\"},\"type\":{\"enum\":[\"RESOURCE_ENTITY\",\"DISTINCT_DIMENSION\",\"CATEGORICAL_BUCKET\",\"LIGHT_LOOKUP\",\"STATIC_CANONICAL\"]},\"resourcePath\":{\"type\":\"string\"},\"valuePropertyPath\":{\"type\":\"string\"},\"labelPropertyPath\":{\"type\":\"string\"},\"dependsOn\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"dependencyFilterMap\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}},\"includeIds\":{\"type\":\"boolean\"},\"capabilities\":{\"type\":\"object\",\"properties\":{\"filter\":{\"type\":\"boolean\"},\"byIds\":{\"type\":\"boolean\"},\"detail\":{\"type\":\"boolean\"},\"create\":{\"type\":\"boolean\"}}},\"display\":{\"type\":\"object\"},\"selectionPolicy\":{\"type\":\"object\"}}}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\",\"option-source-valid\"],\"affectedPaths\":[\"fieldMetadata[].optionSource\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.local.add\",\"title\":\"Adicionar campo local\",\"scope\":\"global\",\"targetKind\":\"localField\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"name\",\"label\",\"controlType\",\"source\"],\"properties\":{\"name\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"controlType\":{\"type\":\"string\"},\"source\":{\"const\":\"local\",\"description\":\"Obrigatório. Discriminador que distingue campos locais de schema-backed.\"},\"transient\":{\"type\":\"boolean\",\"default\":false,\"description\":\"Se true, o valor não persiste entre navegações.\"},\"submitPolicy\":{\"enum\":[\"omit\",\"include\",\"includeWhenDirty\"],\"default\":\"omit\"}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-name-unique\",\"local-schema-name-no-collision\"],\"affectedPaths\":[\"fieldMetadata[]\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"field.local.remove\",\"title\":\"Remover campo local\",\"scope\":\"field\",\"targetKind\":\"localField\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"},{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-field-cleanup\",\"handlerContract\":{\"reads\":[\"fieldMetadata[].name\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"writes\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"identityKeys\":[\"fieldMetadata[].name\",\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.name\"],\"properties\":{\"target.name\":{\"type\":\"string\"}}},\"failureModes\":[\"target-field-not-found\",\"target-field-not-local\",\"layout-reference-conflict\"],\"description\":\"Remove every layout placement that references the removed local field by fieldMetadata[].name.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"field-exists\",\"field-is-local\"],\"affectedPaths\":[\"fieldMetadata[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\",\"target-exists\"]}]}",
|
|
17474
17948
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17478,7 +17952,7 @@
|
|
|
17478
17952
|
"corpusVersion": "1.0.0"
|
|
17479
17953
|
},
|
|
17480
17954
|
{
|
|
17481
|
-
"chunkIndex":
|
|
17955
|
+
"chunkIndex": 33,
|
|
17482
17956
|
"chunkKind": "authoring_manifest",
|
|
17483
17957
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"layout.section.add\",\"title\":\"Adicionar nova seção\",\"scope\":\"global\",\"targetKind\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"title\"],\"properties\":{\"id\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"collapsible\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"sections[]\",\"key\":\"id\"}],\"validators\":[\"section-id-unique\"],\"affectedPaths\":[\"sections[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"layout.section.remove\",\"title\":\"Remover seção\",\"scope\":\"section\",\"targetKind\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"sections[]\",\"key\":\"id\"},{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-section-cleanup\",\"handlerContract\":{\"reads\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"writes\":[\"sections[]\"],\"identityKeys\":[\"sections[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.id\"],\"properties\":{\"target.id\":{\"type\":\"string\"}}},\"failureModes\":[\"target-section-not-found\",\"ambiguous-section-target\"],\"description\":\"Removes the target section and its nested rows, columns, and field placements without deleting fieldMetadata records.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"section-exists\"],\"affectedPaths\":[\"sections[]\",\"sections[].rows[]\",\"sections[].rows[].columns[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.row.add\",\"title\":\"Adicionar linha numa seção\",\"scope\":\"section\",\"targetKind\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\"},\"columns\":{\"type\":\"number\",\"minimum\":1,\"maximum\":12,\"default\":1}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"sections[].rows[]\",\"key\":\"id\"}],\"validators\":[\"section-exists\",\"row-id-unique-in-section\"],\"affectedPaths\":[\"sections[].rows[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.column.add\",\"title\":\"Adicionar coluna numa linha\",\"scope\":\"row\",\"targetKind\":\"row\",\"target\":{\"kind\":\"row\",\"resolver\":\"row-by-id-in-section\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\"},\"span\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":12,\"default\":6}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"sections[].rows[].columns[]\",\"key\":\"id\"}],\"validators\":[\"row-exists\",\"column-id-unique-in-row\"],\"affectedPaths\":[\"sections[].rows[].columns[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.field.move\",\"title\":\"Mover campo no layout\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-reconciler\",\"handlerContract\":{\"reads\":[\"fieldMetadata[].name\",\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"writes\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"identityKeys\":[\"fieldMetadata[].name\",\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.name\",\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"target.name\":{\"type\":\"string\"},\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"failureModes\":[\"target-field-not-found\",\"target-layout-location-not-found\",\"ambiguous-field-target\",\"duplicate-field-placement\"],\"description\":\"Moves a field placement by stable section, row, column, and field ids; index is insertion position only.\"}}],\"validators\":[\"field-exists\",\"layout-target-exists\",\"no-index-as-identity\",\"field-exists-in-layout\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]}]}",
|
|
17484
17958
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17488,7 +17962,7 @@
|
|
|
17488
17962
|
"corpusVersion": "1.0.0"
|
|
17489
17963
|
},
|
|
17490
17964
|
{
|
|
17491
|
-
"chunkIndex":
|
|
17965
|
+
"chunkIndex": 34,
|
|
17492
17966
|
"chunkKind": "authoring_manifest",
|
|
17493
17967
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"control-type-compatible\",\"level\":\"error\",\"code\":\"DF017\",\"description\":\"O tipo de controle deve ser compatível com o tipo de dado do campo.\"},{\"validatorId\":\"option-source-valid\",\"level\":\"error\",\"code\":\"DF018\",\"description\":\"A fonte de opções deve ser válida para o tipo de controle especificado.\"},{\"validatorId\":\"field-name-unique\",\"level\":\"error\",\"code\":\"DF002\",\"description\":\"Nomes de campos devem ser únicos em fieldMetadata.\"},{\"validatorId\":\"local-schema-name-no-collision\",\"level\":\"error\",\"code\":\"DF006\",\"description\":\"Nome de campo local não pode colidir com campo schema-backed existente.\"},{\"validatorId\":\"field-is-local\",\"level\":\"error\",\"code\":\"DF007\",\"description\":\"Operação restrita a campos locais (source:\\\"local\\\"). Campo schema-backed não pode ser removido ou ter submitPolicy alterada.\"},{\"validatorId\":\"section-id-unique\",\"level\":\"error\",\"code\":\"DF003\",\"description\":\"IDs de seções devem ser únicos em sections[].\"},{\"validatorId\":\"section-exists\",\"level\":\"error\",\"code\":\"DF004\",\"description\":\"A seção alvo deve existir em sections[].\"},{\"validatorId\":\"row-id-unique-in-section\",\"level\":\"error\",\"code\":\"DF015\",\"description\":\"O id da nova linha deve ser único dentro da seção alvo.\"},{\"validatorId\":\"row-exists\",\"level\":\"error\",\"code\":\"DF014\",\"description\":\"A linha alvo deve existir na seção especificada.\"},{\"validatorId\":\"column-id-unique-in-row\",\"level\":\"error\",\"code\":\"DF016\",\"description\":\"O id da nova coluna deve ser único dentro da linha alvo.\"},{\"validatorId\":\"layout-target-exists\",\"level\":\"error\",\"code\":\"DF012\",\"description\":\"A seção/linha/coluna de destino devem existir antes de mover o campo.\"},{\"validatorId\":\"no-index-as-identity\",\"level\":\"error\",\"code\":\"DF013\",\"description\":\"Operações de layout não devem usar índice de array como identidade canônica; use IDs estáveis.\"},{\"validatorId\":\"field-exists-in-layout\",\"level\":\"warning\",\"code\":\"DF005\",\"description\":\"Campo definido em fieldMetadata mas ausente no layout.\"}]}",
|
|
17494
17968
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17498,7 +17972,7 @@
|
|
|
17498
17972
|
"corpusVersion": "1.0.0"
|
|
17499
17973
|
},
|
|
17500
17974
|
{
|
|
17501
|
-
"chunkIndex":
|
|
17975
|
+
"chunkIndex": 35,
|
|
17502
17976
|
"chunkKind": "authoring_manifest",
|
|
17503
17977
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"strip-undefined\",\"stable-field-order\",\"preserve-local-field-source\",\"preserve-section-row-column-ids\"]}",
|
|
17504
17978
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17508,7 +17982,7 @@
|
|
|
17508
17982
|
"corpusVersion": "1.0.0"
|
|
17509
17983
|
},
|
|
17510
17984
|
{
|
|
17511
|
-
"chunkIndex":
|
|
17985
|
+
"chunkIndex": 36,
|
|
17512
17986
|
"chunkKind": "authoring_manifest",
|
|
17513
17987
|
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-filter-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"add-local-transient-field\",\"request\":\"Adicionar campo auxiliar local \\\"notasInternas\\\" que não deve aparecer no payload de envio\",\"operationId\":\"field.local.add\",\"params\":{\"name\":\"notasInternas\",\"label\":\"Notas Internas\",\"controlType\":\"textarea\",\"source\":\"local\",\"transient\":true,\"submitPolicy\":\"omit\"},\"isPositive\":true},{\"id\":\"relabel-schema-backed-field\",\"request\":\"Mudar o label do campo email para \\\"E-mail Corporativo\\\"\",\"operationId\":\"field.label.set\",\"target\":\"email\",\"params\":{\"label\":\"E-mail Corporativo\"},\"isPositive\":true},{\"id\":\"move-field-to-column\",\"request\":\"Mover campo telefone para a primeira coluna da seção de contato\",\"operationId\":\"layout.field.move\",\"target\":\"telefone\",\"params\":{\"targetSectionId\":\"secao-contato\",\"targetRowId\":\"row-1\",\"targetColumnId\":\"col-1\"},\"isPositive\":true},{\"id\":\"reject-unknown-field\",\"request\":\"Alterar o label do campo \\\"campoInexistente\\\"\",\"operationId\":\"field.label.set\",\"target\":\"campoInexistente\",\"params\":{\"label\":\"Novo Label\"},\"isPositive\":false},{\"id\":\"require-confirmation-remove-field\",\"request\":\"Remover o campo auxiliar \\\"notasInternas\\\"\",\"operationId\":\"field.local.remove\",\"target\":\"notasInternas\",\"isPositive\":true},{\"id\":\"require-confirmation-remove-section\",\"request\":\"Remover a seção \\\"Dados Adicionais\\\"\",\"operationId\":\"layout.section.remove\",\"target\":\"secao-dados-adicionais\",\"isPositive\":true},{\"id\":\"round-trip-no-drift\",\"request\":\"Salvar e reabrir o formulário editado sem drift de configuração\",\"operationId\":\"field.label.set\",\"target\":\"nome\",\"params\":{\"label\":\"Nome Completo\"},\"isPositive\":true}]}",
|
|
17514
17988
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-filter-form-authoring-manifest.ts",
|
|
@@ -17518,7 +17992,7 @@
|
|
|
17518
17992
|
"corpusVersion": "1.0.0"
|
|
17519
17993
|
},
|
|
17520
17994
|
{
|
|
17521
|
-
"chunkIndex":
|
|
17995
|
+
"chunkIndex": 37,
|
|
17522
17996
|
"chunkKind": "context_pack",
|
|
17523
17997
|
"content": "{\"componentId\":\"praxis-filter-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{\"fieldMetadata[].controlType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"input\",\"label\":\"Input\"},{\"value\":\"textarea\",\"label\":\"Textarea\"},{\"value\":\"email\",\"label\":\"Email\"},{\"value\":\"password\",\"label\":\"Password\"},{\"value\":\"search\",\"label\":\"Search\"},{\"value\":\"url\",\"label\":\"URL\"},{\"value\":\"phone\",\"label\":\"Phone\"},{\"value\":\"cpfCnpjInput\",\"label\":\"CPF/CNPJ\"},{\"value\":\"numericTextBox\",\"label\":\"Number\"},{\"value\":\"currency\",\"label\":\"Currency\"},{\"value\":\"priceRange\",\"label\":\"Price range\"},{\"value\":\"date\",\"label\":\"Date picker\"},{\"value\":\"dateRange\",\"label\":\"Date range\"},{\"value\":\"dateInput\",\"label\":\"Date input\"},{\"value\":\"dateTime\",\"label\":\"Datetime\"},{\"value\":\"dateTimeRange\",\"label\":\"Datetime range\"},{\"value\":\"dateTimeLocal\",\"label\":\"Datetime local\"},{\"value\":\"time\",\"label\":\"Time input\"},{\"value\":\"timePicker\",\"label\":\"Time picker\"},{\"value\":\"timeRange\",\"label\":\"Time range\"},{\"value\":\"week\",\"label\":\"Week input\"},{\"value\":\"month\",\"label\":\"Month input\"},{\"value\":\"year\",\"label\":\"Year input\"},{\"value\":\"select\",\"label\":\"Select\"},{\"value\":\"multiSelect\",\"label\":\"Multi select\"},{\"value\":\"multiSelectTree\",\"label\":\"Multi select tree\"},{\"value\":\"treeSelect\",\"label\":\"Tree select\"},{\"value\":\"transferList\",\"label\":\"Transfer list\"},{\"value\":\"autoComplete\",\"label\":\"Autocomplete\"},{\"value\":\"searchable-select\",\"label\":\"Searchable select\"},{\"value\":\"async-select\",\"label\":\"Async select\"},{\"value\":\"radio\",\"label\":\"Radio group\"},{\"value\":\"checkbox\",\"label\":\"Checkbox group\"},{\"value\":\"selectionList\",\"label\":\"Selection list\"},{\"value\":\"toggle\",\"label\":\"Toggle\"},{\"value\":\"buttonToggle\",\"label\":\"Button toggle\"},{\"value\":\"slider\",\"label\":\"Slider\"},{\"value\":\"rangeSlider\",\"label\":\"Range slider\"},{\"value\":\"rating\",\"label\":\"Rating\"},{\"value\":\"chipInput\",\"label\":\"Chips\"},{\"value\":\"chipList\",\"label\":\"Chip list\"},{\"value\":\"upload\",\"label\":\"File upload\"},{\"value\":\"color\",\"label\":\"Color input\"},{\"value\":\"colorPicker\",\"label\":\"Color picker\"},{\"value\":\"cronBuilder\",\"label\":\"Cron builder\"}]},\"fieldMetadata[].source\":{\"mode\":\"enum\",\"options\":[{\"value\":\"schema\",\"label\":\"Schema field\"},{\"value\":\"local\",\"label\":\"Local field\"}]},\"fieldMetadata[].submitPolicy\":{\"mode\":\"enum\",\"options\":[{\"value\":\"omit\",\"label\":\"Omit from submit payload\"},{\"value\":\"include\",\"label\":\"Include in submit payload\"},{\"value\":\"includeWhenDirty\",\"label\":\"Include only when dirty\"}]},\"fieldMetadata[].materialDesign.appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"fill\",\"label\":\"Fill\"},{\"value\":\"outline\",\"label\":\"Outline\"}]},\"fieldMetadata[].materialDesign.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"}]},\"fieldMetadata[].materialDesign.floatLabel\":{\"mode\":\"enum\",\"options\":[{\"value\":\"auto\",\"label\":\"Auto\"},{\"value\":\"always\",\"label\":\"Always\"}]},\"fieldMetadata[].materialDesign.density\":{\"mode\":\"enum\",\"options\":[{\"value\":\"comfortable\",\"label\":\"Comfortable\"},{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"dense\",\"label\":\"Dense\"}]},\"actions.position\":{\"mode\":\"enum\",\"options\":[{\"value\":\"left\",\"label\":\"Left\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"right\",\"label\":\"Right\"},{\"value\":\"justified\",\"label\":\"Justified\"},{\"value\":\"split\",\"label\":\"Split\"}]},\"actions.orientation\":{\"mode\":\"enum\",\"options\":[{\"value\":\"horizontal\",\"label\":\"Horizontal\"},{\"value\":\"vertical\",\"label\":\"Vertical\"}]},\"actions.spacing\":{\"mode\":\"enum\",\"options\":[{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"normal\",\"label\":\"Normal\"},{\"value\":\"spacious\",\"label\":\"Spacious\"}]},\"actions.placement\":{\"mode\":\"enum\",\"options\":[{\"value\":\"insideLastSection\",\"label\":\"Inside last section\"},{\"value\":\"afterSections\",\"label\":\"After sections\"},{\"value\":\"top\",\"label\":\"Top\"}]},\"actions.submit.type\":{\"mode\":\"enum\",\"options\":[{\"value\":\"button\",\"label\":\"Button\"},{\"value\":\"submit\",\"label\":\"Submit\"},{\"value\":\"reset\",\"label\":\"Reset\"}]},\"actions.submit.variant\":{\"mode\":\"enum\",\"options\":[{\"value\":\"raised\",\"label\":\"Raised\"},{\"value\":\"stroked\",\"label\":\"Stroked\"},{\"value\":\"flat\",\"label\":\"Flat\"},{\"value\":\"fab\",\"label\":\"Fab\"}]},\"actions.submit.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"small\",\"label\":\"Small\"},{\"value\":\"medium\",\"label\":\"Medium\"},{\"value\":\"large\",\"label\":\"Large\"}]},\"actions.submit.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"},{\"value\":\"basic\",\"label\":\"Basic\"}]},\"sections[].headerAlign\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"}]},\"sections[].appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"card\",\"label\":\"Card\"},{\"value\":\"plain\",\"label\":\"Plain\"},{\"value\":\"step\",\"label\":\"Step\"}]},\"sections[].sectionHeader.mode\":{\"mode\":\"enum\",\"options\":[{\"value\":\"icon\",\"label\":\"Icon\"},{\"value\":\"avatar-image\",\"label\":\"Avatar image\"},{\"value\":\"avatar-initials\",\"label\":\"Avatar initials\"},{\"value\":\"auto\",\"label\":\"Auto\"}]},\"sections[].sectionHeader.emptyState\":{\"mode\":\"enum\",\"options\":[{\"value\":\"placeholder-avatar\",\"label\":\"Neutral placeholder\"},{\"value\":\"fallback-icon\",\"label\":\"Fallback icon\"},{\"value\":\"none\",\"label\":\"None\"}]},\"sections[].sectionHeader.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"sm\",\"label\":\"Small\"},{\"value\":\"md\",\"label\":\"Medium\"},{\"value\":\"lg\",\"label\":\"Large\"}]},\"sections[].stepLabel\":{\"mode\":\"suggested\",\"options\":[{\"value\":\"Dados básicos\",\"label\":\"Dados básicos\"},{\"value\":\"Detalhes\",\"label\":\"Detalhes\"},{\"value\":\"Confirmação\",\"label\":\"Confirmação\"}]},\"sections[].titleStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"titleLarge\",\"label\":\"Title large\"},{\"value\":\"titleMedium\",\"label\":\"Title medium\"},{\"value\":\"titleSmall\",\"label\":\"Title small\"},{\"value\":\"headlineSmall\",\"label\":\"Headline small\"}]},\"sections[].descriptionStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"bodyLarge\",\"label\":\"Body large\"},{\"value\":\"bodyMedium\",\"label\":\"Body medium\"},{\"value\":\"bodySmall\",\"label\":\"Body small\"}]},\"sections[].rows[].columns[].align\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"end\",\"label\":\"End\"},{\"value\":\"stretch\",\"label\":\"Stretch\"}]},\"sections[].rows[].columns[].items[].kind\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"richContent\",\"label\":\"Rich content\"}]},\"sections[].rows[].columns[].items[].layout\":{\"mode\":\"enum\",\"options\":[{\"value\":\"block\",\"label\":\"Block\"},{\"value\":\"inline\",\"label\":\"Inline\"}]},\"formRules[].targetType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"section\",\"label\":\"Section\"},{\"value\":\"row\",\"label\":\"Row\"},{\"value\":\"column\",\"label\":\"Column\"},{\"value\":\"action\",\"label\":\"Action\"},{\"value\":\"visualBlock\",\"label\":\"Visual block\"}]},\"formRules[].context\":{\"mode\":\"enum\",\"options\":[{\"value\":\"visibility\",\"label\":\"Visibility\"},{\"value\":\"readOnly\",\"label\":\"Read only\"},{\"value\":\"style\",\"label\":\"Style\"},{\"value\":\"validation\",\"label\":\"Validation\"},{\"value\":\"notification\",\"label\":\"Notification\"}]}}}}",
|
|
17524
17998
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/filter-form-context-pack.ts",
|
|
@@ -17528,7 +18002,7 @@
|
|
|
17528
18002
|
"corpusVersion": "1.0.0"
|
|
17529
18003
|
},
|
|
17530
18004
|
{
|
|
17531
|
-
"chunkIndex":
|
|
18005
|
+
"chunkIndex": 38,
|
|
17532
18006
|
"chunkKind": "context_pack",
|
|
17533
18007
|
"content": "{\"componentId\":\"praxis-filter-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"field.visibility.hide\",\"intentExamples\":[\"hide field\",\"ocultar campo\",\"esconder campo\",\"invisible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":true}]}},{\"id\":\"field.visibility.show\",\"intentExamples\":[\"show field\",\"mostrar campo\",\"exibir campo\",\"visible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":false}]}},{\"id\":\"field.label.set\",\"intentExamples\":[\"label\",\"rename field\",\"renomear campo\",\"titulo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"label\":\"{{value}}\"}]}},{\"id\":\"field.placeholder.set\",\"intentExamples\":[\"placeholder\",\"hint text\",\"texto de ajuda\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"placeholder\":\"{{value}}\"}]}},{\"id\":\"field.required.enable\",\"intentExamples\":[\"required\",\"obrigatorio\",\"mandatory\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":true}]}},{\"id\":\"field.required.disable\",\"intentExamples\":[\"optional\",\"nao obrigatorio\",\"opcional\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":false}]}},{\"id\":\"field.readonly.enable\",\"intentExamples\":[\"readonly\",\"somente leitura\",\"read only\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":true}]}},{\"id\":\"field.readonly.disable\",\"intentExamples\":[\"editable\",\"editavel\",\"read write\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":false}]}},{\"id\":\"field.disabled.enable\",\"intentExamples\":[\"disable field\",\"desabilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":true}]}},{\"id\":\"field.disabled.disable\",\"intentExamples\":[\"enable field\",\"habilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":false}]}},{\"id\":\"field.controlType.set\",\"intentExamples\":[\"control type\",\"tipo de campo\",\"controlType\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"controlType\":\"{{value}}\"}]}},{\"id\":\"field.icon.prefix.set\",\"intentExamples\":[\"prefix icon\",\"icone prefixo\",\"icon before\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"prefixIcon\":\"{{value}}\"}]}},{\"id\":\"field.icon.suffix.set\",\"intentExamples\":[\"suffix icon\",\"icone sufixo\",\"icon after\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"suffixIcon\":\"{{value}}\"}]}},{\"id\":\"section.title.set\",\"intentExamples\":[\"section title\",\"titulo da secao\",\"section name\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"title\":\"{{value}}\"}]}},{\"id\":\"section.description.set\",\"intentExamples\":[\"section description\",\"descricao da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"description\":\"{{value}}\"}]}},{\"id\":\"section.add\",\"intentExamples\":[\"add section\",\"adicionar secao\",\"nova secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{value}}\",\"title\":\"{{value}}\",\"rows\":[]}]},\"safetyNotes\":\"Certifique-se de que o ID da seção é único e relevante.\"},{\"id\":\"section.remove\",\"intentExamples\":[\"remove section\",\"remover secao\",\"excluir secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"section.order.set\",\"intentExamples\":[\"order section\",\"reordenar secao\",\"mover secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_order\":\"{{value}}\"}]},\"safetyNotes\":\"A reordenação de seções é uma operação que deve ser revisada.\"},{\"id\":\"row.add\",\"intentExamples\":[\"add row\",\"adicionar linha\",\"nova linha na secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"columns\":[]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da linha é único e relevante na seção.\"},{\"id\":\"row.remove\",\"intentExamples\":[\"remove row\",\"remover linha\",\"excluir linha da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]},\"safetyNotes\":\"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.add\",\"intentExamples\":[\"add column\",\"adicionar coluna\",\"nova coluna na linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"items\":[]}]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da coluna é único e relevante na linha.\"},{\"id\":\"column.remove\",\"intentExamples\":[\"remove column\",\"remover coluna\",\"excluir coluna da linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]}]},\"safetyNotes\":\"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.field.add\",\"intentExamples\":[\"add field to column\",\"adicionar campo a coluna\",\"colocar campo na coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"id\":\"field-{{value}}\",\"fieldName\":\"{{value}}\"}]}]}]}]},\"safetyNotes\":\"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"},{\"id\":\"column.field.remove\",\"intentExamples\":[\"remove field from column\",\"remover campo da coluna\",\"tirar campo da coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"fieldName\":\"{{value}}\",\"_remove\":true}]}]}]}]},\"safetyNotes\":\"Remover um campo de uma coluna pode alterar o layout do formulário.\"},{\"id\":\"actions.submit.label.set\",\"intentExamples\":[\"submit label\",\"rotulo salvar\",\"texto botao enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.submit.visible.set\",\"intentExamples\":[\"show submit\",\"esconder salvar\",\"visibilidade enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.label.set\",\"intentExamples\":[\"cancel label\",\"rotulo cancelar\",\"texto botao cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.visible.set\",\"intentExamples\":[\"show cancel\",\"esconder cancelar\",\"visibilidade cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.reset.label.set\",\"intentExamples\":[\"reset label\",\"rotulo resetar\",\"texto botao limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.reset.visible.set\",\"intentExamples\":[\"show reset\",\"esconder reset\",\"visibilidade limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"rule.add.visibility\",\"intentExamples\":[\"add visibility rule\",\"regra de visibilidade\",\"campo condicional\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{value.id}}\",\"name\":\"{{value.name}}\",\"targetType\":\"field\",\"targets\":[\"{{target}}\"],\"effect\":{\"condition\":\"{{value.condition}}\",\"properties\":{\"hidden\":false},\"propertiesWhenFalse\":{\"hidden\":true}}}]},\"safetyNotes\":\"Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao.\"},{\"id\":\"rule.remove\",\"intentExamples\":[\"remove rule\",\"excluir regra\",\"apagar regra\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"}]}}",
|
|
17534
18008
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/filter-form-context-pack.ts",
|
|
@@ -17538,7 +18012,7 @@
|
|
|
17538
18012
|
"corpusVersion": "1.0.0"
|
|
17539
18013
|
},
|
|
17540
18014
|
{
|
|
17541
|
-
"chunkIndex":
|
|
18015
|
+
"chunkIndex": 39,
|
|
17542
18016
|
"chunkKind": "context_pack",
|
|
17543
18017
|
"content": "{\"componentId\":\"praxis-filter-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"rule.add.dependency\",\"intentExamples\":[\"adicionar dependencia\",\"campo depende de\",\"mostrar se\",\"obrigatorio se\",\"desabilitar se\",\"campo condicional\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"triggerField\",\"type\":\"STRING\",\"description\":\"Campo que controla a regra (ex: tipoPessoa)\"},{\"name\":\"conditionValue\",\"type\":\"STRING\",\"description\":\"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado pela regra (ex: cnpj)\"},{\"name\":\"effectType\",\"type\":\"ENUM\",\"options\":[\"visibility\",\"required\",\"disabled\"],\"description\":\"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"rule_{{params.triggerField}}_{{params.targetField}}\",\"name\":\"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"{{params.triggerField}}\"},\"{{params.conditionValue}}\"]},\"properties\":{\"hidden\":\"{{params.effectType === 'visibility' ? false : undefined}}\",\"required\":\"{{params.effectType === 'required' ? true : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? true : undefined}}\"},\"propertiesWhenFalse\":{\"hidden\":\"{{params.effectType === 'visibility' ? true : undefined}}\",\"required\":\"{{params.effectType === 'required' ? false : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? false : undefined}}\"}}}]},\"safetyNotes\":\"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"},{\"id\":\"rule.add.custom\",\"intentExamples\":[\"adicionar regra customizada\",\"regra complexa\",\"logica de formulario\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"id\",\"type\":\"STRING\",\"description\":\"ID único da regra\"},{\"name\":\"condition\",\"type\":\"STRING\",\"description\":\"Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \\\"and\\\": [{ \\\">\\\": [{ \\\"var\\\": \\\"idade\\\" }, 18] }, { \\\"==\\\": [{ \\\"var\\\": \\\"possuiHabilitacao\\\" }, true] }] })\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado\"},{\"name\":\"propertyName\",\"type\":\"STRING\",\"description\":\"Propriedade afetada (hidden, required, disabled, readOnly)\"},{\"name\":\"valueIfTrue\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for verdadeira\"},{\"name\":\"valueIfFalse\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for falsa\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{params.id}}\",\"name\":\"Regra Customizada: {{params.id}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":\"{{params.condition}}\",\"properties\":{\"{{params.propertyName}}\":\"{{params.valueIfTrue}}\"},\"propertiesWhenFalse\":{\"{{params.propertyName}}\":\"{{params.valueIfFalse}}\"}}}]}}]}}",
|
|
17544
18018
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/filter-form-context-pack.ts",
|
|
@@ -17548,7 +18022,7 @@
|
|
|
17548
18022
|
"corpusVersion": "1.0.0"
|
|
17549
18023
|
},
|
|
17550
18024
|
{
|
|
17551
|
-
"chunkIndex":
|
|
18025
|
+
"chunkIndex": 40,
|
|
17552
18026
|
"chunkKind": "context_pack",
|
|
17553
18027
|
"content": "{\"componentId\":\"praxis-filter-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"fieldResolvers\":{\"fieldMetadata[]\":[\"name\",\"label\"],\"sections[]\":[\"id\",\"title\"],\"sections[].rows[].columns[].items[]\":[\"id\",\"fieldName\"],\"sections[].rows[].columns[].fields[]\":[]},\"hints\":[\"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\"Local fields are real form controls. Create them in fieldMetadata[] with source:\\\"local\\\", usually transient:true and submitPolicy:\\\"omit\\\", then place them as kind:\\\"field\\\" layout items.\",\"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\"Use sections[].rows[].columns[].items[] as the canonical mixed layout order. kind:\\\"field\\\" items reference fieldMetadata; kind:\\\"richContent\\\" items are visual blocks outside submit payload.\",\"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\"For field formRules that must calculate a FormControl value, use effect.properties.value with the closed envelope { expression: <JSON Logic> }, such as { expression: { yearsSince: [{ var: \\\"birthDate\\\" }] } }. Use the closed envelope { literal: <value> } for structured literal objects; do not add extra keys and do not generate TypeScript functions.\",\"For conditional side effects, use formCommandRules with effects[].kind:\\\"global-action\\\" and a structured globalAction ref. The visual editor authors the primary effect and preserves secondary effects from advanced JSON. Do not put alert/modal/navigation commands inside formRules[].effect.properties.\",\"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"]}}",
|
|
17554
18028
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/filter-form-context-pack.ts",
|