@praxisui/dynamic-form 9.0.0-beta.25 → 9.0.0-beta.26
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.
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-
|
|
3
|
+
"generatedAt": "2026-07-01T18:24:10.710Z",
|
|
4
4
|
"packageName": "@praxisui/dynamic-form",
|
|
5
|
-
"packageVersion": "9.0.0-beta.
|
|
5
|
+
"packageVersion": "9.0.0-beta.26",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 2,
|
|
@@ -5564,7 +5564,7 @@
|
|
|
5564
5564
|
}
|
|
5565
5565
|
]
|
|
5566
5566
|
},
|
|
5567
|
-
"safetyNotes": "
|
|
5567
|
+
"safetyNotes": "Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao."
|
|
5568
5568
|
},
|
|
5569
5569
|
{
|
|
5570
5570
|
"id": "rule.remove",
|
|
@@ -5633,7 +5633,14 @@
|
|
|
5633
5633
|
"{{params.targetField}}"
|
|
5634
5634
|
],
|
|
5635
5635
|
"effect": {
|
|
5636
|
-
"condition":
|
|
5636
|
+
"condition": {
|
|
5637
|
+
"==": [
|
|
5638
|
+
{
|
|
5639
|
+
"var": "{{params.triggerField}}"
|
|
5640
|
+
},
|
|
5641
|
+
"{{params.conditionValue}}"
|
|
5642
|
+
]
|
|
5643
|
+
},
|
|
5637
5644
|
"properties": {
|
|
5638
5645
|
"hidden": "{{params.effectType === 'visibility' ? false : undefined}}",
|
|
5639
5646
|
"required": "{{params.effectType === 'required' ? true : undefined}}",
|
|
@@ -5669,7 +5676,7 @@
|
|
|
5669
5676
|
{
|
|
5670
5677
|
"name": "condition",
|
|
5671
5678
|
"type": "STRING",
|
|
5672
|
-
"description": "
|
|
5679
|
+
"description": "Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \"and\": [{ \">\": [{ \"var\": \"idade\" }, 18] }, { \"==\": [{ \"var\": \"possuiHabilitacao\" }, true] }] })"
|
|
5673
5680
|
},
|
|
5674
5681
|
{
|
|
5675
5682
|
"name": "targetField",
|
|
@@ -8347,9 +8354,9 @@
|
|
|
8347
8354
|
{
|
|
8348
8355
|
"chunkIndex": 3,
|
|
8349
8356
|
"chunkKind": "context_pack",
|
|
8350
|
-
"content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"fieldMetadata[].controlType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"input\",\n \"label\": \"Input\"\n },\n {\n \"value\": \"textarea\",\n \"label\": \"Textarea\"\n },\n {\n \"value\": \"email\",\n \"label\": \"Email\"\n },\n {\n \"value\": \"password\",\n \"label\": \"Password\"\n },\n {\n \"value\": \"search\",\n \"label\": \"Search\"\n },\n {\n \"value\": \"url\",\n \"label\": \"URL\"\n },\n {\n \"value\": \"phone\",\n \"label\": \"Phone\"\n },\n {\n \"value\": \"cpfCnpjInput\",\n \"label\": \"CPF/CNPJ\"\n },\n {\n \"value\": \"numericTextBox\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"priceRange\",\n \"label\": \"Price range\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date picker\"\n },\n {\n \"value\": \"dateRange\",\n \"label\": \"Date range\"\n },\n {\n \"value\": \"dateInput\",\n \"label\": \"Date input\"\n },\n {\n \"value\": \"dateTime\",\n \"label\": \"Datetime\"\n },\n {\n \"value\": \"dateTimeRange\",\n \"label\": \"Datetime range\"\n },\n {\n \"value\": \"dateTimeLocal\",\n \"label\": \"Datetime local\"\n },\n {\n \"value\": \"time\",\n \"label\": \"Time input\"\n },\n {\n \"value\": \"timePicker\",\n \"label\": \"Time picker\"\n },\n {\n \"value\": \"timeRange\",\n \"label\": \"Time range\"\n },\n {\n \"value\": \"week\",\n \"label\": \"Week input\"\n },\n {\n \"value\": \"month\",\n \"label\": \"Month input\"\n },\n {\n \"value\": \"year\",\n \"label\": \"Year input\"\n },\n {\n \"value\": \"select\",\n \"label\": \"Select\"\n },\n {\n \"value\": \"multiSelect\",\n \"label\": \"Multi select\"\n },\n {\n \"value\": \"multiSelectTree\",\n \"label\": \"Multi select tree\"\n },\n {\n \"value\": \"treeSelect\",\n \"label\": \"Tree select\"\n },\n {\n \"value\": \"transferList\",\n \"label\": \"Transfer list\"\n },\n {\n \"value\": \"autoComplete\",\n \"label\": \"Autocomplete\"\n },\n {\n \"value\": \"searchable-select\",\n \"label\": \"Searchable select\"\n },\n {\n \"value\": \"async-select\",\n \"label\": \"Async select\"\n },\n {\n \"value\": \"radio\",\n \"label\": \"Radio group\"\n },\n {\n \"value\": \"checkbox\",\n \"label\": \"Checkbox group\"\n },\n {\n \"value\": \"selectionList\",\n \"label\": \"Selection list\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"buttonToggle\",\n \"label\": \"Button toggle\"\n },\n {\n \"value\": \"slider\",\n \"label\": \"Slider\"\n },\n {\n \"value\": \"rangeSlider\",\n \"label\": \"Range slider\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"chipInput\",\n \"label\": \"Chips\"\n },\n {\n \"value\": \"chipList\",\n \"label\": \"Chip list\"\n },\n {\n \"value\": \"upload\",\n \"label\": \"File upload\"\n },\n {\n \"value\": \"color\",\n \"label\": \"Color input\"\n },\n {\n \"value\": \"colorPicker\",\n \"label\": \"Color picker\"\n },\n {\n \"value\": \"cronBuilder\",\n \"label\": \"Cron builder\"\n }\n ]\n },\n \"fieldMetadata[].source\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"schema\",\n \"label\": \"Schema field\"\n },\n {\n \"value\": \"local\",\n \"label\": \"Local field\"\n }\n ]\n },\n \"fieldMetadata[].submitPolicy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"omit\",\n \"label\": \"Omit from submit payload\"\n },\n {\n \"value\": \"include\",\n \"label\": \"Include in submit payload\"\n },\n {\n \"value\": \"includeWhenDirty\",\n \"label\": \"Include only when dirty\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fill\",\n \"label\": \"Fill\"\n },\n {\n \"value\": \"outline\",\n \"label\": \"Outline\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.floatLabel\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"value\": \"always\",\n \"label\": \"Always\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"dense\",\n \"label\": \"Dense\"\n }\n ]\n },\n \"actions.position\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"left\",\n \"label\": \"Left\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"right\",\n \"label\": \"Right\"\n },\n {\n \"value\": \"justified\",\n \"label\": \"Justified\"\n },\n {\n \"value\": \"split\",\n \"label\": \"Split\"\n }\n ]\n },\n \"actions.orientation\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"horizontal\",\n \"label\": \"Horizontal\"\n },\n {\n \"value\": \"vertical\",\n \"label\": \"Vertical\"\n }\n ]\n },\n \"actions.spacing\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"normal\",\n \"label\": \"Normal\"\n },\n {\n \"value\": \"spacious\",\n \"label\": \"Spacious\"\n }\n ]\n },\n \"actions.placement\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"insideLastSection\",\n \"label\": \"Inside last section\"\n },\n {\n \"value\": \"afterSections\",\n \"label\": \"After sections\"\n },\n {\n \"value\": \"top\",\n \"label\": \"Top\"\n }\n ]\n },\n \"actions.submit.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"submit\",\n \"label\": \"Submit\"\n },\n {\n \"value\": \"reset\",\n \"label\": \"Reset\"\n }\n ]\n },\n \"actions.submit.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"raised\",\n \"label\": \"Raised\"\n },\n {\n \"value\": \"stroked\",\n \"label\": \"Stroked\"\n },\n {\n \"value\": \"flat\",\n \"label\": \"Flat\"\n },\n {\n \"value\": \"fab\",\n \"label\": \"Fab\"\n }\n ]\n },\n \"actions.submit.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"actions.submit.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n },\n {\n \"value\": \"basic\",\n \"label\": \"Basic\"\n }\n ]\n },\n \"sections[].headerAlign\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n }\n ]\n },\n \"sections[].appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"card\",\n \"label\": \"Card\"\n },\n {\n \"value\": \"plain\",\n \"label\": \"Plain\"\n },\n {\n \"value\": \"step\",\n \"label\": \"Step\"\n }\n ]\n },\n \"sections[].sectionHeader.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"avatar-image\",\n \"label\": \"Avatar image\"\n },\n {\n \"value\": \"avatar-initials\",\n \"label\": \"Avatar initials\"\n },\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n }\n ]\n },\n \"sections[].sectionHeader.emptyState\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"placeholder-avatar\",\n \"label\": \"Neutral placeholder\"\n },\n {\n \"value\": \"fallback-icon\",\n \"label\": \"Fallback icon\"\n },\n {\n \"value\": \"none\",\n \"label\": \"None\"\n }\n ]\n },\n \"sections[].sectionHeader.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"sections[].stepLabel\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"Dados básicos\",\n \"label\": \"Dados básicos\"\n },\n {\n \"value\": \"Detalhes\",\n \"label\": \"Detalhes\"\n },\n {\n \"value\": \"Confirmação\",\n \"label\": \"Confirmação\"\n }\n ]\n },\n \"sections[].titleStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"titleLarge\",\n \"label\": \"Title large\"\n },\n {\n \"value\": \"titleMedium\",\n \"label\": \"Title medium\"\n },\n {\n \"value\": \"titleSmall\",\n \"label\": \"Title small\"\n },\n {\n \"value\": \"headlineSmall\",\n \"label\": \"Headline small\"\n }\n ]\n },\n \"sections[].descriptionStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"bodyLarge\",\n \"label\": \"Body large\"\n },\n {\n \"value\": \"bodyMedium\",\n \"label\": \"Body medium\"\n },\n {\n \"value\": \"bodySmall\",\n \"label\": \"Body small\"\n }\n ]\n },\n \"sections[].rows[].columns[].align\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"end\",\n \"label\": \"End\"\n },\n {\n \"value\": \"stretch\",\n \"label\": \"Stretch\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].kind\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"richContent\",\n \"label\": \"Rich content\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].layout\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"block\",\n \"label\": \"Block\"\n },\n {\n \"value\": \"inline\",\n \"label\": \"Inline\"\n }\n ]\n },\n \"formRules[].targetType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"section\",\n \"label\": \"Section\"\n },\n {\n \"value\": \"row\",\n \"label\": \"Row\"\n },\n {\n \"value\": \"column\",\n \"label\": \"Column\"\n },\n {\n \"value\": \"action\",\n \"label\": \"Action\"\n },\n {\n \"value\": \"visualBlock\",\n \"label\": \"Visual block\"\n }\n ]\n },\n \"formRules[].context\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"visibility\",\n \"label\": \"Visibility\"\n },\n {\n \"value\": \"readOnly\",\n \"label\": \"Read only\"\n },\n {\n \"value\": \"style\",\n \"label\": \"Style\"\n },\n {\n \"value\": \"validation\",\n \"label\": \"Validation\"\n },\n {\n \"value\": \"notification\",\n \"label\": \"Notification\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"field.visibility.hide\",\n \"intentExamples\": [\n \"hide field\",\n \"ocultar campo\",\n \"esconder campo\",\n \"invisible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.visibility.show\",\n \"intentExamples\": [\n \"show field\",\n \"mostrar campo\",\n \"exibir campo\",\n \"visible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.label.set\",\n \"intentExamples\": [\n \"label\",\n \"rename field\",\n \"renomear campo\",\n \"titulo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"label\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.placeholder.set\",\n \"intentExamples\": [\n \"placeholder\",\n \"hint text\",\n \"texto de ajuda\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"placeholder\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.required.enable\",\n \"intentExamples\": [\n \"required\",\n \"obrigatorio\",\n \"mandatory\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.required.disable\",\n \"intentExamples\": [\n \"optional\",\n \"nao obrigatorio\",\n \"opcional\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.enable\",\n \"intentExamples\": [\n \"readonly\",\n \"somente leitura\",\n \"read only\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.disable\",\n \"intentExamples\": [\n \"editable\",\n \"editavel\",\n \"read write\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.enable\",\n \"intentExamples\": [\n \"disable field\",\n \"desabilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.disable\",\n \"intentExamples\": [\n \"enable field\",\n \"habilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.controlType.set\",\n \"intentExamples\": [\n \"control type\",\n \"tipo de campo\",\n \"controlType\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"controlType\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.prefix.set\",\n \"intentExamples\": [\n \"prefix icon\",\n \"icone prefixo\",\n \"icon before\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"prefixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.suffix.set\",\n \"intentExamples\": [\n \"suffix icon\",\n \"icone sufixo\",\n \"icon after\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"suffixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.title.set\",\n \"intentExamples\": [\n \"section title\",\n \"titulo da secao\",\n \"section name\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"title\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.description.set\",\n \"intentExamples\": [\n \"section description\",\n \"descricao da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"description\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.add\",\n \"intentExamples\": [\n \"add section\",\n \"adicionar secao\",\n \"nova secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{value}}\",\n \"title\": \"{{value}}\",\n \"rows\": []\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da seção é único e relevante.\"\n },\n {\n \"id\": \"section.remove\",\n \"intentExamples\": [\n \"remove section\",\n \"remover secao\",\n \"excluir secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"section.order.set\",\n \"intentExamples\": [\n \"order section\",\n \"reordenar secao\",\n \"mover secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_order\": \"{{value}}\"\n }\n ]\n },\n \"safetyNotes\": \"A reordenação de seções é uma operação que deve ser revisada.\"\n },\n {\n \"id\": \"row.add\",\n \"intentExamples\": [\n \"add row\",\n \"adicionar linha\",\n \"nova linha na secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"columns\": []\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da linha é único e relevante na seção.\"\n },\n {\n \"id\": \"row.remove\",\n \"intentExamples\": [\n \"remove row\",\n \"remover linha\",\n \"excluir linha da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.add\",\n \"intentExamples\": [\n \"add column\",\n \"adicionar coluna\",\n \"nova coluna na linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"items\": []\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da coluna é único e relevante na linha.\"\n },\n {\n \"id\": \"column.remove\",\n \"intentExamples\": [\n \"remove column\",\n \"remover coluna\",\n \"excluir coluna da linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.field.add\",\n \"intentExamples\": [\n \"add field to column\",\n \"adicionar campo a coluna\",\n \"colocar campo na coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"id\": \"field-{{value}}\",\n \"fieldName\": \"{{value}}\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"\n },\n {\n \"id\": \"column.field.remove\",\n \"intentExamples\": [\n \"remove field from column\",\n \"remover campo da coluna\",\n \"tirar campo da coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"fieldName\": \"{{value}}\",\n \"_remove\": true\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover um campo de uma coluna pode alterar o layout do formulário.\"\n },\n {\n \"id\": \"actions.submit.label.set\",\n \"intentExamples\": [\n \"submit label\",\n \"rotulo salvar\",\n \"texto botao enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.submit.visible.set\",\n \"intentExamples\": [\n \"show submit\",\n \"esconder salvar\",\n \"visibilidade enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.label.set\",\n \"intentExamples\": [\n \"cancel label\",\n \"rotulo cancelar\",\n \"texto botao cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.visible.set\",\n \"intentExamples\": [\n \"show cancel\",\n \"esconder cancelar\",\n \"visibilidade cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.label.set\",\n \"intentExamples\": [\n \"reset label\",\n \"rotulo resetar\",\n \"texto botao limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.visible.set\",\n \"intentExamples\": [\n \"show reset\",\n \"esconder reset\",\n \"visibilidade limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"rule.add.visibility\",\n \"intentExamples\": [\n \"add visibility rule\",\n \"regra de visibilidade\",\n \"campo condicional\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{value.id}}\",\n \"name\": \"{{value.name}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{target}}\"\n ],\n \"effect\": {\n \"condition\": \"{{value.condition}}\",\n \"properties\": {\n \"hidden\": false\n },\n \"propertiesWhenFalse\": {\n \"hidden\": true\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Criação de regras requer atenção à lógica e IDs de campos. Teste a regra após a criação.\"\n },\n {\n \"id\": \"rule.remove\",\n \"intentExamples\": [\n \"remove rule\",\n \"excluir regra\",\n \"apagar regra\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"\n },\n {\n \"id\": \"rule.add.dependency\",\n \"intentExamples\": [\n \"adicionar dependencia\",\n \"campo depende de\",\n \"mostrar se\",\n \"obrigatorio se\",\n \"desabilitar se\",\n \"campo condicional\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"triggerField\",\n \"type\": \"STRING\",\n \"description\": \"Campo que controla a regra (ex: tipoPessoa)\"\n },\n {\n \"name\": \"conditionValue\",\n \"type\": \"STRING\",\n \"description\": \"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado pela regra (ex: cnpj)\"\n },\n {\n \"name\": \"effectType\",\n \"type\": \"ENUM\",\n \"options\": [\n \"visibility\",\n \"required\",\n \"disabled\"\n ],\n \"description\": \"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"rule_{{params.triggerField}}_{{params.targetField}}\",\n \"name\": \"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.triggerField}} == \\\"{{params.conditionValue}}\\\"\",\n \"properties\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? false : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? true : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? true : undefined}}\"\n },\n \"propertiesWhenFalse\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? true : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? false : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? false : undefined}}\"\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"\n },\n {\n \"id\": \"rule.add.custom\",\n \"intentExamples\": [\n \"adicionar regra customizada\",\n \"regra complexa\",\n \"logica de formulario\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"id\",\n \"type\": \"STRING\",\n \"description\": \"ID único da regra\"\n },\n {\n \"name\": \"condition\",\n \"type\": \"STRING\",\n \"description\": \"Expressão condicional (ex: idade > 18 && possuiHabilitacao)\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado\"\n },\n {\n \"name\": \"propertyName\",\n \"type\": \"STRING\",\n \"description\": \"Propriedade afetada (hidden, required, disabled, readOnly)\"\n },\n {\n \"name\": \"valueIfTrue\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for verdadeira\"\n },\n {\n \"name\": \"valueIfFalse\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for falsa\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{params.id}}\",\n \"name\": \"Regra Customizada: {{params.id}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.condition}}\",\n \"properties\": {\n \"{{params.propertyName}}\": \"{{params.valueIfTrue}}\"\n },\n \"propertiesWhenFalse\": {\n \"{{params.propertyName}}\": \"{{params.valueIfFalse}}\"\n }\n }\n }\n ]\n }\n }\n ],\n \"fieldResolvers\": {\n \"fieldMetadata[]\": [\n \"name\",\n \"label\"\n ],\n \"sections[]\": [\n \"id\",\n \"title\"\n ],\n \"sections[].rows[].columns[].items[]\": [\n \"id\",\n \"fieldName\"\n ],\n \"sections[].rows[].columns[].fields[]\": []\n },\n \"hints\": [\n \"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\n \"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.\",\n \"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\n \"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\n \"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.\",\n \"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\n \"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\n \"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.\",\n \"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.\",\n \"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\n \"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\n \"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\n \"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\n \"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\n \"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\n \"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\n \"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\n \"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\n \"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\n \"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"\n ]\n }\n}",
|
|
8357
|
+
"content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"fieldMetadata[].controlType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"input\",\n \"label\": \"Input\"\n },\n {\n \"value\": \"textarea\",\n \"label\": \"Textarea\"\n },\n {\n \"value\": \"email\",\n \"label\": \"Email\"\n },\n {\n \"value\": \"password\",\n \"label\": \"Password\"\n },\n {\n \"value\": \"search\",\n \"label\": \"Search\"\n },\n {\n \"value\": \"url\",\n \"label\": \"URL\"\n },\n {\n \"value\": \"phone\",\n \"label\": \"Phone\"\n },\n {\n \"value\": \"cpfCnpjInput\",\n \"label\": \"CPF/CNPJ\"\n },\n {\n \"value\": \"numericTextBox\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"priceRange\",\n \"label\": \"Price range\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date picker\"\n },\n {\n \"value\": \"dateRange\",\n \"label\": \"Date range\"\n },\n {\n \"value\": \"dateInput\",\n \"label\": \"Date input\"\n },\n {\n \"value\": \"dateTime\",\n \"label\": \"Datetime\"\n },\n {\n \"value\": \"dateTimeRange\",\n \"label\": \"Datetime range\"\n },\n {\n \"value\": \"dateTimeLocal\",\n \"label\": \"Datetime local\"\n },\n {\n \"value\": \"time\",\n \"label\": \"Time input\"\n },\n {\n \"value\": \"timePicker\",\n \"label\": \"Time picker\"\n },\n {\n \"value\": \"timeRange\",\n \"label\": \"Time range\"\n },\n {\n \"value\": \"week\",\n \"label\": \"Week input\"\n },\n {\n \"value\": \"month\",\n \"label\": \"Month input\"\n },\n {\n \"value\": \"year\",\n \"label\": \"Year input\"\n },\n {\n \"value\": \"select\",\n \"label\": \"Select\"\n },\n {\n \"value\": \"multiSelect\",\n \"label\": \"Multi select\"\n },\n {\n \"value\": \"multiSelectTree\",\n \"label\": \"Multi select tree\"\n },\n {\n \"value\": \"treeSelect\",\n \"label\": \"Tree select\"\n },\n {\n \"value\": \"transferList\",\n \"label\": \"Transfer list\"\n },\n {\n \"value\": \"autoComplete\",\n \"label\": \"Autocomplete\"\n },\n {\n \"value\": \"searchable-select\",\n \"label\": \"Searchable select\"\n },\n {\n \"value\": \"async-select\",\n \"label\": \"Async select\"\n },\n {\n \"value\": \"radio\",\n \"label\": \"Radio group\"\n },\n {\n \"value\": \"checkbox\",\n \"label\": \"Checkbox group\"\n },\n {\n \"value\": \"selectionList\",\n \"label\": \"Selection list\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"buttonToggle\",\n \"label\": \"Button toggle\"\n },\n {\n \"value\": \"slider\",\n \"label\": \"Slider\"\n },\n {\n \"value\": \"rangeSlider\",\n \"label\": \"Range slider\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"chipInput\",\n \"label\": \"Chips\"\n },\n {\n \"value\": \"chipList\",\n \"label\": \"Chip list\"\n },\n {\n \"value\": \"upload\",\n \"label\": \"File upload\"\n },\n {\n \"value\": \"color\",\n \"label\": \"Color input\"\n },\n {\n \"value\": \"colorPicker\",\n \"label\": \"Color picker\"\n },\n {\n \"value\": \"cronBuilder\",\n \"label\": \"Cron builder\"\n }\n ]\n },\n \"fieldMetadata[].source\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"schema\",\n \"label\": \"Schema field\"\n },\n {\n \"value\": \"local\",\n \"label\": \"Local field\"\n }\n ]\n },\n \"fieldMetadata[].submitPolicy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"omit\",\n \"label\": \"Omit from submit payload\"\n },\n {\n \"value\": \"include\",\n \"label\": \"Include in submit payload\"\n },\n {\n \"value\": \"includeWhenDirty\",\n \"label\": \"Include only when dirty\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fill\",\n \"label\": \"Fill\"\n },\n {\n \"value\": \"outline\",\n \"label\": \"Outline\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.floatLabel\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"value\": \"always\",\n \"label\": \"Always\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"dense\",\n \"label\": \"Dense\"\n }\n ]\n },\n \"actions.position\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"left\",\n \"label\": \"Left\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"right\",\n \"label\": \"Right\"\n },\n {\n \"value\": \"justified\",\n \"label\": \"Justified\"\n },\n {\n \"value\": \"split\",\n \"label\": \"Split\"\n }\n ]\n },\n \"actions.orientation\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"horizontal\",\n \"label\": \"Horizontal\"\n },\n {\n \"value\": \"vertical\",\n \"label\": \"Vertical\"\n }\n ]\n },\n \"actions.spacing\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"normal\",\n \"label\": \"Normal\"\n },\n {\n \"value\": \"spacious\",\n \"label\": \"Spacious\"\n }\n ]\n },\n \"actions.placement\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"insideLastSection\",\n \"label\": \"Inside last section\"\n },\n {\n \"value\": \"afterSections\",\n \"label\": \"After sections\"\n },\n {\n \"value\": \"top\",\n \"label\": \"Top\"\n }\n ]\n },\n \"actions.submit.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"submit\",\n \"label\": \"Submit\"\n },\n {\n \"value\": \"reset\",\n \"label\": \"Reset\"\n }\n ]\n },\n \"actions.submit.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"raised\",\n \"label\": \"Raised\"\n },\n {\n \"value\": \"stroked\",\n \"label\": \"Stroked\"\n },\n {\n \"value\": \"flat\",\n \"label\": \"Flat\"\n },\n {\n \"value\": \"fab\",\n \"label\": \"Fab\"\n }\n ]\n },\n \"actions.submit.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"actions.submit.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n },\n {\n \"value\": \"basic\",\n \"label\": \"Basic\"\n }\n ]\n },\n \"sections[].headerAlign\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n }\n ]\n },\n \"sections[].appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"card\",\n \"label\": \"Card\"\n },\n {\n \"value\": \"plain\",\n \"label\": \"Plain\"\n },\n {\n \"value\": \"step\",\n \"label\": \"Step\"\n }\n ]\n },\n \"sections[].sectionHeader.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"avatar-image\",\n \"label\": \"Avatar image\"\n },\n {\n \"value\": \"avatar-initials\",\n \"label\": \"Avatar initials\"\n },\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n }\n ]\n },\n \"sections[].sectionHeader.emptyState\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"placeholder-avatar\",\n \"label\": \"Neutral placeholder\"\n },\n {\n \"value\": \"fallback-icon\",\n \"label\": \"Fallback icon\"\n },\n {\n \"value\": \"none\",\n \"label\": \"None\"\n }\n ]\n },\n \"sections[].sectionHeader.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"sections[].stepLabel\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"Dados básicos\",\n \"label\": \"Dados básicos\"\n },\n {\n \"value\": \"Detalhes\",\n \"label\": \"Detalhes\"\n },\n {\n \"value\": \"Confirmação\",\n \"label\": \"Confirmação\"\n }\n ]\n },\n \"sections[].titleStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"titleLarge\",\n \"label\": \"Title large\"\n },\n {\n \"value\": \"titleMedium\",\n \"label\": \"Title medium\"\n },\n {\n \"value\": \"titleSmall\",\n \"label\": \"Title small\"\n },\n {\n \"value\": \"headlineSmall\",\n \"label\": \"Headline small\"\n }\n ]\n },\n \"sections[].descriptionStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"bodyLarge\",\n \"label\": \"Body large\"\n },\n {\n \"value\": \"bodyMedium\",\n \"label\": \"Body medium\"\n },\n {\n \"value\": \"bodySmall\",\n \"label\": \"Body small\"\n }\n ]\n },\n \"sections[].rows[].columns[].align\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"end\",\n \"label\": \"End\"\n },\n {\n \"value\": \"stretch\",\n \"label\": \"Stretch\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].kind\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"richContent\",\n \"label\": \"Rich content\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].layout\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"block\",\n \"label\": \"Block\"\n },\n {\n \"value\": \"inline\",\n \"label\": \"Inline\"\n }\n ]\n },\n \"formRules[].targetType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"section\",\n \"label\": \"Section\"\n },\n {\n \"value\": \"row\",\n \"label\": \"Row\"\n },\n {\n \"value\": \"column\",\n \"label\": \"Column\"\n },\n {\n \"value\": \"action\",\n \"label\": \"Action\"\n },\n {\n \"value\": \"visualBlock\",\n \"label\": \"Visual block\"\n }\n ]\n },\n \"formRules[].context\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"visibility\",\n \"label\": \"Visibility\"\n },\n {\n \"value\": \"readOnly\",\n \"label\": \"Read only\"\n },\n {\n \"value\": \"style\",\n \"label\": \"Style\"\n },\n {\n \"value\": \"validation\",\n \"label\": \"Validation\"\n },\n {\n \"value\": \"notification\",\n \"label\": \"Notification\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"field.visibility.hide\",\n \"intentExamples\": [\n \"hide field\",\n \"ocultar campo\",\n \"esconder campo\",\n \"invisible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.visibility.show\",\n \"intentExamples\": [\n \"show field\",\n \"mostrar campo\",\n \"exibir campo\",\n \"visible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.label.set\",\n \"intentExamples\": [\n \"label\",\n \"rename field\",\n \"renomear campo\",\n \"titulo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"label\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.placeholder.set\",\n \"intentExamples\": [\n \"placeholder\",\n \"hint text\",\n \"texto de ajuda\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"placeholder\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.required.enable\",\n \"intentExamples\": [\n \"required\",\n \"obrigatorio\",\n \"mandatory\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.required.disable\",\n \"intentExamples\": [\n \"optional\",\n \"nao obrigatorio\",\n \"opcional\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.enable\",\n \"intentExamples\": [\n \"readonly\",\n \"somente leitura\",\n \"read only\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.disable\",\n \"intentExamples\": [\n \"editable\",\n \"editavel\",\n \"read write\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.enable\",\n \"intentExamples\": [\n \"disable field\",\n \"desabilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.disable\",\n \"intentExamples\": [\n \"enable field\",\n \"habilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.controlType.set\",\n \"intentExamples\": [\n \"control type\",\n \"tipo de campo\",\n \"controlType\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"controlType\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.prefix.set\",\n \"intentExamples\": [\n \"prefix icon\",\n \"icone prefixo\",\n \"icon before\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"prefixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.suffix.set\",\n \"intentExamples\": [\n \"suffix icon\",\n \"icone sufixo\",\n \"icon after\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"suffixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.title.set\",\n \"intentExamples\": [\n \"section title\",\n \"titulo da secao\",\n \"section name\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"title\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.description.set\",\n \"intentExamples\": [\n \"section description\",\n \"descricao da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"description\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.add\",\n \"intentExamples\": [\n \"add section\",\n \"adicionar secao\",\n \"nova secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{value}}\",\n \"title\": \"{{value}}\",\n \"rows\": []\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da seção é único e relevante.\"\n },\n {\n \"id\": \"section.remove\",\n \"intentExamples\": [\n \"remove section\",\n \"remover secao\",\n \"excluir secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"section.order.set\",\n \"intentExamples\": [\n \"order section\",\n \"reordenar secao\",\n \"mover secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_order\": \"{{value}}\"\n }\n ]\n },\n \"safetyNotes\": \"A reordenação de seções é uma operação que deve ser revisada.\"\n },\n {\n \"id\": \"row.add\",\n \"intentExamples\": [\n \"add row\",\n \"adicionar linha\",\n \"nova linha na secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"columns\": []\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da linha é único e relevante na seção.\"\n },\n {\n \"id\": \"row.remove\",\n \"intentExamples\": [\n \"remove row\",\n \"remover linha\",\n \"excluir linha da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.add\",\n \"intentExamples\": [\n \"add column\",\n \"adicionar coluna\",\n \"nova coluna na linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"items\": []\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da coluna é único e relevante na linha.\"\n },\n {\n \"id\": \"column.remove\",\n \"intentExamples\": [\n \"remove column\",\n \"remover coluna\",\n \"excluir coluna da linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.field.add\",\n \"intentExamples\": [\n \"add field to column\",\n \"adicionar campo a coluna\",\n \"colocar campo na coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"id\": \"field-{{value}}\",\n \"fieldName\": \"{{value}}\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"\n },\n {\n \"id\": \"column.field.remove\",\n \"intentExamples\": [\n \"remove field from column\",\n \"remover campo da coluna\",\n \"tirar campo da coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"fieldName\": \"{{value}}\",\n \"_remove\": true\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover um campo de uma coluna pode alterar o layout do formulário.\"\n },\n {\n \"id\": \"actions.submit.label.set\",\n \"intentExamples\": [\n \"submit label\",\n \"rotulo salvar\",\n \"texto botao enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.submit.visible.set\",\n \"intentExamples\": [\n \"show submit\",\n \"esconder salvar\",\n \"visibilidade enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.label.set\",\n \"intentExamples\": [\n \"cancel label\",\n \"rotulo cancelar\",\n \"texto botao cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.visible.set\",\n \"intentExamples\": [\n \"show cancel\",\n \"esconder cancelar\",\n \"visibilidade cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.label.set\",\n \"intentExamples\": [\n \"reset label\",\n \"rotulo resetar\",\n \"texto botao limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.visible.set\",\n \"intentExamples\": [\n \"show reset\",\n \"esconder reset\",\n \"visibilidade limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"rule.add.visibility\",\n \"intentExamples\": [\n \"add visibility rule\",\n \"regra de visibilidade\",\n \"campo condicional\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{value.id}}\",\n \"name\": \"{{value.name}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{target}}\"\n ],\n \"effect\": {\n \"condition\": \"{{value.condition}}\",\n \"properties\": {\n \"hidden\": false\n },\n \"propertiesWhenFalse\": {\n \"hidden\": true\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao.\"\n },\n {\n \"id\": \"rule.remove\",\n \"intentExamples\": [\n \"remove rule\",\n \"excluir regra\",\n \"apagar regra\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"\n },\n {\n \"id\": \"rule.add.dependency\",\n \"intentExamples\": [\n \"adicionar dependencia\",\n \"campo depende de\",\n \"mostrar se\",\n \"obrigatorio se\",\n \"desabilitar se\",\n \"campo condicional\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"triggerField\",\n \"type\": \"STRING\",\n \"description\": \"Campo que controla a regra (ex: tipoPessoa)\"\n },\n {\n \"name\": \"conditionValue\",\n \"type\": \"STRING\",\n \"description\": \"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado pela regra (ex: cnpj)\"\n },\n {\n \"name\": \"effectType\",\n \"type\": \"ENUM\",\n \"options\": [\n \"visibility\",\n \"required\",\n \"disabled\"\n ],\n \"description\": \"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"rule_{{params.triggerField}}_{{params.targetField}}\",\n \"name\": \"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"{{params.triggerField}}\"\n },\n \"{{params.conditionValue}}\"\n ]\n },\n \"properties\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? false : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? true : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? true : undefined}}\"\n },\n \"propertiesWhenFalse\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? true : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? false : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? false : undefined}}\"\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"\n },\n {\n \"id\": \"rule.add.custom\",\n \"intentExamples\": [\n \"adicionar regra customizada\",\n \"regra complexa\",\n \"logica de formulario\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"id\",\n \"type\": \"STRING\",\n \"description\": \"ID único da regra\"\n },\n {\n \"name\": \"condition\",\n \"type\": \"STRING\",\n \"description\": \"Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \\\"and\\\": [{ \\\">\\\": [{ \\\"var\\\": \\\"idade\\\" }, 18] }, { \\\"==\\\": [{ \\\"var\\\": \\\"possuiHabilitacao\\\" }, true] }] })\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado\"\n },\n {\n \"name\": \"propertyName\",\n \"type\": \"STRING\",\n \"description\": \"Propriedade afetada (hidden, required, disabled, readOnly)\"\n },\n {\n \"name\": \"valueIfTrue\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for verdadeira\"\n },\n {\n \"name\": \"valueIfFalse\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for falsa\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{params.id}}\",\n \"name\": \"Regra Customizada: {{params.id}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.condition}}\",\n \"properties\": {\n \"{{params.propertyName}}\": \"{{params.valueIfTrue}}\"\n },\n \"propertiesWhenFalse\": {\n \"{{params.propertyName}}\": \"{{params.valueIfFalse}}\"\n }\n }\n }\n ]\n }\n }\n ],\n \"fieldResolvers\": {\n \"fieldMetadata[]\": [\n \"name\",\n \"label\"\n ],\n \"sections[]\": [\n \"id\",\n \"title\"\n ],\n \"sections[].rows[].columns[].items[]\": [\n \"id\",\n \"fieldName\"\n ],\n \"sections[].rows[].columns[].fields[]\": []\n },\n \"hints\": [\n \"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\n \"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.\",\n \"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\n \"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\n \"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.\",\n \"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\n \"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\n \"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.\",\n \"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.\",\n \"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\n \"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\n \"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\n \"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\n \"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\n \"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\n \"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\n \"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\n \"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\n \"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\n \"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"\n ]\n }\n}",
|
|
8351
8358
|
"sourcePointer": "praxis-ui-angular/projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
8352
|
-
"contentHash": "
|
|
8359
|
+
"contentHash": "fce0638895fb6284d9f1f6c896a2eeb5945f4877b418f942a1872f60b1541c15",
|
|
8353
8360
|
"sourceKind": "component_definition",
|
|
8354
8361
|
"sourceId": "praxis-dynamic-form",
|
|
8355
8362
|
"corpusVersion": "1.0.0"
|
|
@@ -8387,9 +8394,9 @@
|
|
|
8387
8394
|
{
|
|
8388
8395
|
"chunkIndex": 7,
|
|
8389
8396
|
"chunkKind": "recipe",
|
|
8390
|
-
"content": "{\n \"_comment\": \"Generic recipe for PraxisDynamicForm (FormConfig). Values are placeholders for AI examples.\",\n \"templateMeta\": {\n \"variantId\": \"form-config\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"tags\": [\n \"full\",\n \"config\"\n ],\n \"useWhen\": \"gerar form completo com layout, campos e regras\",\n \"examplePrompts\": [\n \"gere um formulario completo com campos e layout\",\n \"crie um form completo baseado no schema\"\n ]\n },\n \"metadata\": {\n \"version\": \"2.0.0\",\n \"lastUpdated\": \"2024-02-01T12:00:00Z\",\n \"source\": \"local\",\n \"serverHash\": \"hash-abc-123\",\n \"schemaId\": \"path:/api/employees#request\",\n \"schemaContext\": {\n \"path\": \"/api/employees\",\n \"operation\": \"POST\",\n \"schemaType\": \"request\",\n \"internal\": false,\n \"tenant\": \"default\",\n \"locale\": \"pt-BR\"\n },\n \"customizations\": [\n {\n \"fieldName\": \"salary\",\n \"property\": \"label\",\n \"oldValue\": \"Salary\",\n \"newValue\": \"Salario\",\n \"timestamp\": \"2024-01-20T10:00:00Z\",\n \"source\": \"user\"\n }\n ]\n },\n \"api\": {\n \"saveEndpoint\": \"/api/employees\",\n \"loadEndpoint\": \"/api/employees/${id}\",\n \"saveMethod\": \"POST\",\n \"timeout\": 15000,\n \"headers\": {\n \"X-Module\": \"HR\",\n \"X-Request-Source\": \"dynamic-form\"\n },\n \"idField\": \"id\",\n \"beforeSave\": \"sanitizeEmployee\",\n \"afterLoad\": \"mapEmployee\"\n },\n \"behavior\": {\n \"confirmOnUnsavedChanges\": true,\n \"trackHistory\": true,\n \"focusFirstError\": true,\n \"scrollToErrors\": true,\n \"clearAfterSave\": false,\n \"redirectAfterSave\": \"/employees\",\n \"reactiveValidation\": true,\n \"reactiveValidationDebounceMs\": 200\n },\n \"messages\": {\n \"createRegistrySuccess\": \"Registro criado com sucesso.\",\n \"updateRegistrySuccess\": \"Registro atualizado com sucesso.\",\n \"createRegistryError\": \"Falha ao criar registro.\",\n \"updateRegistryError\": \"Falha ao atualizar registro.\",\n \"confirmations\": {\n \"submit\": \"Salvar alteracoes?\",\n \"cancel\": \"Descartar alteracoes?\",\n \"reset\": \"Limpar o formulario?\",\n \"archive\": \"Arquivar este registro?\"\n },\n \"customActions\": {\n \"archive\": {\n \"success\": \"Registro arquivado.\",\n \"error\": \"Falha ao arquivar.\",\n \"confirmation\": \"Arquivar registro agora?\"\n },\n \"preview\": {\n \"confirmation\": \"Gerar pre-visualizacao?\"\n }\n },\n \"loading\": {\n \"submit\": \"Salvando...\",\n \"cancel\": \"Cancelando...\",\n \"reset\": \"Limpando...\",\n \"archive\": \"Arquivando...\"\n }\n },\n \"hints\": {\n \"dataModes\": {\n \"create\": \"Preencha os dados para criar um novo registro.\",\n \"edit\": \"Atualize os dados e salve as alteracoes.\",\n \"view\": \"Visualize os dados do registro.\"\n },\n \"uiModes\": {\n \"presentation\": \"Modo apresentacao exibe apenas leitura.\",\n \"readonly\": \"Modo leitura bloqueia edicao.\",\n \"disabled\": \"Campos desabilitados nao permitem interacao.\",\n \"visible\": \"Controle de visibilidade sem destruir controles.\"\n }\n },\n \"hooks\": {\n \"beforeInit\": [\n {\n \"priority\": 100,\n \"timeoutMs\": 1500,\n \"args\": {\n \"source\": \"cache\"\n },\n \"id\": \"load-static-options\"\n }\n ],\n \"afterInit\": [\n {\n \"priority\": 50,\n \"timeoutMs\": 1200,\n \"args\": {\n \"enable\": true\n },\n \"id\": \"attach-shortcuts\"\n }\n ],\n \"beforeValidate\": [\n {\n \"priority\": 80,\n \"timeoutMs\": 1200,\n \"args\": {\n \"country\": \"BR\"\n },\n \"id\": \"normalize-phones\"\n }\n ],\n \"afterValidate\": [\n {\n \"priority\": 10,\n \"timeoutMs\": 1000,\n \"args\": {\n \"report\": \"warnings\"\n },\n \"id\": \"collect-warnings\"\n }\n ],\n \"beforeSubmit\": [\n {\n \"priority\": 100,\n \"timeoutMs\": 2000,\n \"args\": {\n \"trimStrings\": true\n },\n \"id\": \"sanitize-employee\"\n }\n ],\n \"afterSubmit\": [\n {\n \"priority\": 20,\n \"timeoutMs\": 1500,\n \"args\": {\n \"messageKey\": \"employeeSaved\"\n },\n \"id\": \"notify-success\"\n }\n ],\n \"onError\": [\n {\n \"priority\": 0,\n \"timeoutMs\": 1500,\n \"args\": {\n \"messageKey\": \"employeeSaveError\"\n },\n \"id\": \"notify-error\"\n }\n ]\n },\n \"fieldMetadata\": [\n {\n \"name\": \"id\",\n \"label\": \"ID\",\n \"controlType\": \"numericTextBox\",\n \"dataType\": \"number\",\n \"hidden\": true,\n \"readOnly\": true,\n \"description\": \"Backend generated identifier.\"\n },\n {\n \"name\": \"fullName\",\n \"label\": \"Full name\",\n \"controlType\": \"input\",\n \"dataType\": \"text\",\n \"placeholder\": \"Example: Ana Souza\",\n \"prefixIcon\": \"person\",\n \"iconPosition\": \"start\",\n \"iconSize\": \"small\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 3,\n \"maxLength\": 120,\n \"requiredMessage\": \"Name is required\",\n \"minLengthMessage\": \"Min 3 chars\",\n \"minWords\": 2\n },\n \"validationMode\": \"blur\",\n \"debounceTime\": 200,\n \"materialDesign\": {\n \"appearance\": \"outline\",\n \"color\": \"primary\",\n \"floatLabel\": \"auto\",\n \"density\": \"comfortable\",\n \"subscriptSizing\": \"dynamic\",\n \"hideRequiredMarker\": false,\n \"disableRipple\": true,\n \"customPalette\": {\n \"primary\": \"#005f73\",\n \"accent\": \"#0a9396\",\n \"warn\": \"#bb3e03\"\n },\n \"animations\": {\n \"disabled\": false,\n \"duration\": \"150ms\",\n \"easing\": \"ease-out\"\n }\n },\n \"group\": \"identity\",\n \"order\": 1,\n \"width\": \"50%\",\n \"isFlex\": true,\n \"id\": \"field-full-name\",\n \"version\": \"1.0.0\",\n \"context\": \"form\",\n \"createdAt\": \"2024-01-01T00:00:00Z\",\n \"updatedAt\": \"2024-02-01T00:00:00Z\",\n \"tags\": [\n \"identity\",\n \"employee\"\n ],\n \"cssClass\": \"field-full-name\",\n \"style\": {\n \"maxWidth\": \"480px\"\n },\n \"dataAttributes\": {\n \"data-qa\": \"full-name\"\n },\n \"required\": true\n },\n {\n \"name\": \"email\",\n \"label\": \"Email\",\n \"controlType\": \"email\",\n \"dataType\": \"email\",\n \"placeholder\": \"name@company.com\",\n \"validators\": {\n \"required\": true,\n \"email\": true,\n \"emailMessage\": \"Use a valid email.\"\n },\n \"unique\": true,\n \"ariaLabel\": \"Email address\",\n \"ariaDescribedBy\": \"email-help\",\n \"tabIndex\": 2,\n \"accessKey\": \"e\"\n },\n {\n \"name\": \"phone\",\n \"label\": \"Phone\",\n \"controlType\": \"maskedTextBox\",\n \"dataType\": \"text\",\n \"mask\": \"(99) 99999-9999\",\n \"validators\": {\n \"pattern\": \"^\\\\(\\\\d{2}\\\\) \\\\d{4,5}-\\\\d{4}$\",\n \"patternMessage\": \"Use (11) 99999-9999\"\n },\n \"hint\": \"Include area code.\"\n },\n {\n \"name\": \"status\",\n \"label\": \"Status\",\n \"controlType\": \"select\",\n \"options\": [\n {\n \"text\": \"Active\",\n \"value\": \"ACTIVE\",\n \"icon\": \"check_circle\"\n },\n {\n \"text\": \"Inactive\",\n \"value\": \"INACTIVE\",\n \"icon\": \"block\"\n },\n {\n \"text\": \"On leave\",\n \"value\": \"ON_LEAVE\",\n \"icon\": \"schedule\"\n }\n ],\n \"defaultValue\": \"ACTIVE\",\n \"validators\": {\n \"required\": true\n },\n \"materialDesign\": {\n \"appearance\": \"outline\",\n \"color\": \"accent\"\n }\n },\n {\n \"name\": \"departmentId\",\n \"label\": \"Department\",\n \"controlType\": \"select\",\n \"endpoint\": \"/api/departments\",\n \"valueField\": \"id\",\n \"displayField\": \"name\",\n \"queryParams\": {\n \"active\": true\n },\n \"cacheDuration\": 300000,\n \"validators\": {\n \"required\": true\n },\n \"resourcePath\": \"/api/departments\",\n \"filterCriteria\": {\n \"active\": true\n },\n \"optionLabelKey\": \"name\",\n \"optionValueKey\": \"id\",\n \"searchable\": true\n },\n {\n \"name\": \"teamId\",\n \"label\": \"Team\",\n \"controlType\": \"select\",\n \"endpoint\": \"/api/teams\",\n \"valueField\": \"id\",\n \"displayField\": \"name\",\n \"dependencyFields\": [\n \"departmentId\"\n ],\n \"dependencyFilterMap\": {\n \"departmentId\": \"departmentId\"\n },\n \"dependencyValuePath\": \"id\",\n \"dependencyLoadOnChange\": \"immediate\",\n \"dependencyMergeStrategy\": \"replace\",\n \"dependencyDebounceMs\": 200,\n \"resetOnDependentChange\": true,\n \"enableDependencyCascade\": true,\n \"suppressInlineErrorsOnCascade\": true\n },\n {\n \"name\": \"managerId\",\n \"label\": \"Manager\",\n \"controlType\": \"autoComplete\",\n \"endpoint\": \"/api/employees\",\n \"queryParams\": {\n \"role\": \"manager\"\n },\n \"valueField\": \"id\",\n \"displayField\": \"name\",\n \"filterField\": \"name\",\n \"dependencyFields\": [\n \"departmentId\"\n ],\n \"dependencyFilterMap\": {\n \"departmentId\": \"departmentId\"\n },\n \"dependencyLoadOnChange\": \"respectLoadOn\",\n \"disabled\": false\n },\n {\n \"name\": \"hireDate\",\n \"label\": \"Hire date\",\n \"controlType\": \"date\",\n \"dataType\": \"date\",\n \"validators\": {\n \"required\": true\n },\n \"minDate\": \"2020-01-01\",\n \"maxDate\": \"2030-12-31\",\n \"startView\": \"multi-year\",\n \"datepickerTogglePosition\": \"suffix\",\n \"touchUi\": true\n },\n {\n \"name\": \"terminationDate\",\n \"label\": \"Termination date\",\n \"controlType\": \"date\",\n \"conditionalDisplay\": \"status == 'INACTIVE'\",\n \"conditionalRequired\": \"status == 'INACTIVE'\"\n },\n {\n \"name\": \"salary\",\n \"label\": \"Salary\",\n \"controlType\": \"currency\",\n \"dataType\": \"number\",\n \"format\": \"BRL|symbol|2\",\n \"validators\": {\n \"min\": 0,\n \"max\": 999999,\n \"minMessage\": \"Salary must be >= 0\"\n },\n \"min\": 0,\n \"max\": 999999,\n \"step\": 100,\n \"precision\": \"fixed\",\n \"currencyCode\": \"BRL\",\n \"currencyDisplay\": \"symbol\",\n \"prefix\": \"R$\",\n \"suffix\": \"bruto\",\n \"inlineEditing\": true,\n \"transformDisplayValue\": \"formatCurrency\",\n \"transformSaveValue\": \"parseCurrency\"\n },\n {\n \"name\": \"bonusPercent\",\n \"label\": \"Bonus %\",\n \"controlType\": \"slider\",\n \"dataType\": \"number\",\n \"defaultValue\": 10,\n \"validators\": {\n \"min\": 0,\n \"max\": 50\n },\n \"suffixIcon\": \"percent\",\n \"min\": 0,\n \"max\": 50,\n \"step\": 5,\n \"thumbLabel\": true,\n \"showTicks\": true,\n \"vertical\": false,\n \"invert\": false\n },\n {\n \"name\": \"workMode\",\n \"label\": \"Work mode\",\n \"controlType\": \"radio\",\n \"options\": [\n {\n \"text\": \"CLT\",\n \"value\": \"CLT\"\n },\n {\n \"text\": \"PJ\",\n \"value\": \"PJ\"\n },\n {\n \"text\": \"Intern\",\n \"value\": \"INTERN\"\n }\n ],\n \"defaultValue\": \"CLT\"\n },\n {\n \"name\": \"skills\",\n \"label\": \"Skills\",\n \"controlType\": \"multiSelect\",\n \"options\": [\n {\n \"text\": \"Angular\",\n \"value\": \"ANG\"\n },\n {\n \"text\": \"React\",\n \"value\": \"RE\"\n },\n {\n \"text\": \"Node\",\n \"value\": \"NODE\"\n }\n ],\n \"visibleIn\": [\n \"form\",\n \"filter\"\n ],\n \"multiple\": true,\n \"searchable\": true,\n \"clearable\": true,\n \"selectAll\": true,\n \"maxSelections\": 5,\n \"virtualScroll\": true,\n \"emptyOptionText\": \"None\"\n },\n {\n \"name\": \"availability\",\n \"label\": \"Availability\",\n \"controlType\": \"dateRange\",\n \"rangeSeparator\": \" to \"\n },\n {\n \"name\": \"notes\",\n \"label\": \"Notes\",\n \"controlType\": \"textarea\",\n \"validators\": {\n \"maxLength\": 500\n },\n \"hint\": \"Add relevant notes.\",\n \"textTransformApply\": \"displayOnly\",\n \"rows\": 4,\n \"minRows\": 3,\n \"maxRows\": 8,\n \"resize\": \"vertical\",\n \"spellcheck\": true,\n \"inputMode\": \"text\",\n \"textTransform\": \"uppercase\",\n \"readonly\": false,\n \"formHidden\": false,\n \"tableHidden\": true,\n \"filterHidden\": false\n },\n {\n \"name\": \"isActive\",\n \"label\": \"Active\",\n \"controlType\": \"toggle\",\n \"dataType\": \"boolean\",\n \"defaultValue\": true\n },\n {\n \"name\": \"avatar\",\n \"label\": \"Photo\",\n \"controlType\": \"upload\",\n \"accept\": \".png,.jpg,.jpeg\",\n \"multiple\": false,\n \"materialDesign\": {\n \"appearance\": \"outline\"\n },\n \"uploadUrl\": \"/api/uploads/avatars\",\n \"autoUpload\": true,\n \"maxFileSize\": 5242880,\n \"maxFiles\": 2,\n \"fileRestrictions\": {\n \"minResolution\": \"128x128\",\n \"maxResolution\": \"2048x2048\"\n },\n \"chunkSize\": 1048576,\n \"withCredentials\": false,\n \"headers\": {\n \"X-Upload-Source\": \"dynamic-form\"\n },\n \"method\": \"POST\",\n \"saveField\": \"file\"\n },\n {\n \"name\": \"terms\",\n \"label\": \"Accept terms\",\n \"controlType\": \"checkbox\",\n \"validators\": {\n \"requiredChecked\": true\n },\n \"tooltip\": \"Required to submit.\"\n },\n {\n \"name\": \"username\",\n \"label\": \"Username\",\n \"controlType\": \"input\",\n \"dataType\": \"text\",\n \"type\": \"text\",\n \"minLength\": 3,\n \"maxLength\": 20,\n \"pattern\": \"^[a-zA-Z0-9_]+$\",\n \"validators\": {\n \"required\": true,\n \"patternMessage\": \"Use letters, numbers, underscore\"\n },\n \"inputMode\": \"text\",\n \"autoComplete\": \"username\",\n \"readonly\": false,\n \"spellcheck\": false,\n \"textTransform\": \"lowercase\",\n \"placeholder\": \"user_name\"\n },\n {\n \"name\": \"password\",\n \"label\": \"Password\",\n \"controlType\": \"password\",\n \"dataType\": \"text\",\n \"type\": \"password\",\n \"showPasswordToggle\": true,\n \"autoComplete\": \"current-password\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 8\n }\n },\n {\n \"name\": \"country\",\n \"label\": \"Country\",\n \"controlType\": \"select\",\n \"dataType\": \"text\",\n \"options\": [\n {\n \"text\": \"Brazil\",\n \"value\": \"BR\"\n },\n {\n \"text\": \"United States\",\n \"value\": \"US\"\n },\n {\n \"text\": \"Canada\",\n \"value\": \"CA\"\n }\n ],\n \"optionLabelKey\": \"text\",\n \"optionValueKey\": \"value\",\n \"emptyOptionText\": \"Select a country\",\n \"searchable\": true,\n \"clearable\": true,\n \"resourcePath\": \"/api/countries\",\n \"filterCriteria\": {\n \"active\": true\n },\n \"multiple\": false\n },\n {\n \"name\": \"orgTree\",\n \"label\": \"Organization\",\n \"controlType\": \"treeSelect\",\n \"treeConfig\": {\n \"expandByDefault\": true,\n \"selectionMode\": \"single\"\n },\n \"nodes\": [\n {\n \"label\": \"HQ\",\n \"value\": \"hq\",\n \"children\": [\n {\n \"label\": \"Finance\",\n \"value\": \"finance\"\n }\n ]\n },\n {\n \"label\": \"Branch\",\n \"value\": \"branch\"\n }\n ],\n \"multiple\": false\n },\n {\n \"name\": \"ratingScore\",\n \"label\": \"Satisfaction\",\n \"controlType\": \"rating\",\n \"value\": 3,\n \"max\": 5,\n \"ratingMax\": 5,\n \"ratingPrecision\": 0.5,\n \"ratingIcon\": \"star\",\n \"ratingEmptyIcon\": \"star_border\",\n \"ratingAllowHalf\": true\n },\n {\n \"name\": \"progress\",\n \"label\": \"Progress\",\n \"controlType\": \"slider\",\n \"min\": 0,\n \"max\": 100,\n \"step\": 5,\n \"defaultValue\": 65,\n \"thumbLabel\": true,\n \"showTicks\": true\n },\n {\n \"name\": \"avatarDisplay\",\n \"label\": \"Avatar display\",\n \"controlType\": \"avatar\",\n \"imageSrc\": \"https://cdn.example.com/avatars/ana.png\",\n \"imageAlt\": \"User avatar\",\n \"initials\": \"AS\",\n \"avatarShape\": \"circle\",\n \"avatarSize\": \"medium\"\n },\n {\n \"name\": \"ctaButton\",\n \"label\": \"Request access\",\n \"controlType\": \"button\",\n \"icon\": \"send\",\n \"color\": \"primary\",\n \"variant\": \"raised\",\n \"size\": \"medium\",\n \"disabled\": false,\n \"loading\": false,\n \"action\": \"requestAccess\",\n \"actionPayload\": {\n \"role\": \"manager\"\n }\n },\n {\n \"name\": \"aiAssist\",\n \"label\": \"AI assist\",\n \"controlType\": \"button\",\n \"icon\": \"smart_toy\",\n \"color\": \"accent\",\n \"variant\": \"stroked\",\n \"size\": \"medium\",\n \"action\": \"aiAssist\",\n \"actionPayload\": {\n \"prompt\": \"Summarize the candidate profile\",\n \"history\": [\n {\n \"role\": \"user\",\n \"content\": \"Summarize this CV.\"\n },\n {\n \"role\": \"assistant\",\n \"content\": \"Summary goes here.\"\n }\n ]\n },\n \"tooltip\": \"Ask AI to summarize the candidate profile\"\n },\n {\n \"name\": \"themeColor\",\n \"label\": \"Theme color\",\n \"controlType\": \"colorPicker\",\n \"format\": \"hex\",\n \"views\": [\n \"palette\",\n \"gradient\"\n ],\n \"activeView\": \"palette\",\n \"preview\": true,\n \"clearButton\": true,\n \"actionsLayout\": \"end\",\n \"adaptiveMode\": true,\n \"adaptiveTitle\": \"Pick a color\",\n \"adaptiveSubtitle\": \"Brand palette\",\n \"popupSettings\": {\n \"width\": 320\n },\n \"gradientSettings\": {\n \"opacity\": true\n },\n \"paletteSettings\": {\n \"columns\": 8\n },\n \"fillMode\": \"solid\",\n \"rounded\": \"medium\",\n \"size\": \"medium\",\n \"icon\": \"palette\",\n \"iconClass\": \"color-icon\",\n \"svgIcon\": \"custom-palette\",\n \"tabindex\": 0\n },\n {\n \"name\": \"cpf\",\n \"label\": \"CPF/CNPJ\",\n \"controlType\": \"cpfCnpjInput\",\n \"maskType\": \"cpf-cnpj\",\n \"unmaskOnSubmit\": true,\n \"validators\": {\n \"cpf\": true,\n \"cnpj\": true\n }\n },\n {\n \"name\": \"meetingTime\",\n \"label\": \"Meeting time\",\n \"controlType\": \"timePicker\",\n \"enableSeconds\": true,\n \"stepMinute\": 15,\n \"stepSecond\": 30\n }\n ],\n \"sections\": [\n {\n \"id\": \"basic\",\n \"title\": \"Basic data\",\n \"description\": \"Primary profile and status fields.\",\n \"icon\": \"person\",\n \"collapsible\": true,\n \"collapsed\": false,\n \"gapBottom\": 16,\n \"titleGapBottom\": 6,\n \"descriptionGapBottom\": 8,\n \"titleStyle\": \"titleMedium\",\n \"descriptionStyle\": \"bodyMedium\",\n \"titleColor\": \"#1a1a1a\",\n \"descriptionColor\": \"#666666\",\n \"headerAlign\": \"start\",\n \"headerTooltip\": \"Main data\",\n \"rows\": [\n {\n \"id\": \"row-basic-1\",\n \"gap\": 16,\n \"rowGap\": 12,\n \"columns\": [\n {\n \"id\": \"col-basic-1\",\n \"fields\": [\n \"fullName\",\n \"email\"\n ],\n \"span\": {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 6,\n \"lg\": 6,\n \"xl\": 6\n },\n \"padding\": 8,\n \"className\": \"col-basic-main\",\n \"testId\": \"col-basic-main\",\n \"title\": \"Identity\"\n },\n {\n \"id\": \"col-basic-2\",\n \"fields\": [\n \"status\",\n \"hireDate\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n },\n \"hidden\": {\n \"xs\": true,\n \"sm\": false,\n \"md\": false,\n \"lg\": false,\n \"xl\": false\n },\n \"order\": {\n \"xs\": 2,\n \"sm\": 1,\n \"md\": 2,\n \"lg\": 2,\n \"xl\": 1\n }\n }\n ],\n \"title\": \"Core fields\"\n },\n {\n \"id\": \"row-basic-2\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-basic-3\",\n \"fields\": [\n \"phone\",\n \"isActive\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n },\n \"offset\": {\n \"xs\": 0,\n \"sm\": 0,\n \"md\": 1,\n \"lg\": 0,\n \"xl\": 0\n }\n },\n {\n \"id\": \"col-basic-4\",\n \"fields\": [\n \"departmentId\",\n \"teamId\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-basic-3\",\n \"columns\": [\n {\n \"id\": \"col-basic-5\",\n \"fields\": [\n \"managerId\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n }\n ]\n },\n {\n \"id\": \"employment\",\n \"title\": \"Employment\",\n \"description\": \"Contract and compensation.\",\n \"icon\": \"badge\",\n \"collapsible\": true,\n \"collapsed\": false,\n \"rows\": [\n {\n \"id\": \"row-employment-1\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-employment-1\",\n \"fields\": [\n \"salary\",\n \"bonusPercent\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-employment-2\",\n \"fields\": [\n \"workMode\",\n \"terminationDate\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-employment-2\",\n \"rowGap\": 16,\n \"columns\": [\n {\n \"id\": \"col-employment-3\",\n \"fields\": [\n \"skills\",\n \"availability\"\n ],\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n }\n }\n ]\n }\n ]\n },\n {\n \"id\": \"extras\",\n \"title\": \"Extras\",\n \"description\": \"Additional notes and context.\",\n \"collapsible\": true,\n \"collapsed\": false,\n \"rows\": [\n {\n \"id\": \"row-extras-1\",\n \"columns\": [\n {\n \"id\": \"col-extras-1\",\n \"fields\": [\n \"notes\"\n ],\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n },\n \"align\": \"stretch\",\n \"padding\": 8\n }\n ]\n }\n ]\n },\n {\n \"id\": \"attachments\",\n \"title\": \"Attachments\",\n \"description\": \"Files and confirmations.\",\n \"collapsible\": true,\n \"collapsed\": true,\n \"rows\": [\n {\n \"id\": \"row-attachments-1\",\n \"columns\": [\n {\n \"id\": \"col-attachments-1\",\n \"fields\": [\n \"avatar\",\n \"terms\"\n ],\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n },\n \"align\": \"center\"\n }\n ]\n }\n ]\n },\n {\n \"id\": \"advanced\",\n \"title\": \"Advanced\",\n \"description\": \"Extra controls and integrations.\",\n \"collapsible\": true,\n \"collapsed\": true,\n \"rows\": [\n {\n \"id\": \"row-advanced-1\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-advanced-1\",\n \"fields\": [\n \"username\",\n \"password\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-advanced-2\",\n \"fields\": [\n \"country\",\n \"orgTree\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-advanced-2\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-advanced-3\",\n \"fields\": [\n \"themeColor\",\n \"cpf\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-advanced-4\",\n \"fields\": [\n \"meetingTime\",\n \"ratingScore\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-advanced-3\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-advanced-5\",\n \"fields\": [\n \"progress\",\n \"avatarDisplay\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-advanced-6\",\n \"fields\": [\n \"ctaButton\",\n \"aiAssist\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n }\n ]\n }\n ],\n \"actions\": {\n \"submit\": {\n \"visible\": true,\n \"label\": \"Save\",\n \"icon\": \"save\",\n \"color\": \"primary\",\n \"variant\": \"raised\",\n \"size\": \"medium\",\n \"type\": \"submit\",\n \"shortcut\": \"Ctrl+S\",\n \"tooltip\": \"Save changes\",\n \"className\": \"action-submit\",\n \"style\": {\n \"letterSpacing\": \"0.5px\"\n },\n \"disabled\": false,\n \"loading\": false\n },\n \"cancel\": {\n \"visible\": true,\n \"label\": \"Cancel\",\n \"icon\": \"close\",\n \"type\": \"button\",\n \"color\": \"basic\"\n },\n \"reset\": {\n \"visible\": true,\n \"label\": \"Reset\",\n \"type\": \"reset\",\n \"color\": \"basic\"\n },\n \"custom\": [\n {\n \"id\": \"archive\",\n \"visible\": true,\n \"label\": \"Archive\",\n \"icon\": \"archive\",\n \"color\": \"warn\",\n \"variant\": \"stroked\",\n \"action\": \"archive\",\n \"tooltip\": \"Archive record\"\n },\n {\n \"id\": \"preview\",\n \"visible\": true,\n \"label\": \"Preview\",\n \"icon\": \"visibility\",\n \"color\": \"accent\",\n \"variant\": \"flat\",\n \"action\": \"preview\"\n }\n ],\n \"position\": \"right\",\n \"orientation\": \"horizontal\",\n \"spacing\": \"normal\",\n \"sticky\": true,\n \"divider\": true,\n \"placement\": \"afterSections\",\n \"containerClassName\": \"form-actions-container\",\n \"containerStyles\": {\n \"background\": \"var(--md-sys-color-surface-container)\",\n \"border\": \"1px solid var(--md-sys-color-outline-variant)\",\n \"borderRadius\": \"12px\",\n \"padding\": \"12px 16px\"\n },\n \"mobile\": {\n \"position\": \"center\",\n \"orientation\": \"vertical\",\n \"collapseToMenu\": true\n }\n },\n \"formRules\": [\n {\n \"id\": \"hide-comp-for-intern\",\n \"name\": \"Hide compensation for interns\",\n \"targetType\": \"field\",\n \"targets\": [\n \"salary\",\n \"bonusPercent\"\n ],\n \"effect\": {\n \"condition\": \"workMode == 'INTERN'\",\n \"properties\": {\n \"visible\": false,\n \"required\": false\n },\n \"propertiesWhenFalse\": {\n \"visible\": true\n }\n },\n \"description\": \"Rule for coverage of description field.\",\n \"targetFields\": [\n \"salary\",\n \"bonusPercent\"\n ],\n \"context\": \"visibility\"\n },\n {\n \"id\": \"require-termination-date\",\n \"name\": \"Require termination date when inactive\",\n \"targetType\": \"field\",\n \"targets\": [\n \"terminationDate\"\n ],\n \"effect\": {\n \"condition\": \"status == 'INACTIVE'\",\n \"properties\": {\n \"visible\": true,\n \"required\": true\n }\n }\n },\n {\n \"id\": \"collapse-employment-section\",\n \"name\": \"Collapse employment when active\",\n \"targetType\": \"section\",\n \"targets\": [\n \"employment\"\n ],\n \"effect\": {\n \"condition\": \"status == 'ACTIVE'\",\n \"properties\": {\n \"collapsed\": false\n },\n \"propertiesWhenFalse\": {\n \"collapsed\": true\n }\n }\n },\n {\n \"id\": \"disable-archive-when-inactive\",\n \"name\": \"Disable archive when not active\",\n \"targetType\": \"action\",\n \"targets\": [\n \"archive\"\n ],\n \"effect\": {\n \"condition\": \"isActive == true\",\n \"properties\": {\n \"disabled\": false\n },\n \"propertiesWhenFalse\": {\n \"disabled\": true\n }\n }\n },\n {\n \"id\": \"hide-extras-row\",\n \"name\": \"Hide extras when intern\",\n \"targetType\": \"row\",\n \"targets\": [\n \"row-extras-1\"\n ],\n \"effect\": {\n \"condition\": \"workMode == 'INTERN'\",\n \"properties\": {\n \"visible\": false\n },\n \"propertiesWhenFalse\": {\n \"visible\": true,\n \"rowGap\": 16\n }\n }\n },\n {\n \"id\": \"expand-notes-column\",\n \"name\": \"Expand notes column when inactive\",\n \"targetType\": \"column\",\n \"targets\": [\n \"col-extras-1\"\n ],\n \"effect\": {\n \"condition\": \"status == 'INACTIVE'\",\n \"properties\": {\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n }\n }\n }\n },\n {\n \"id\": \"rule-field-all\",\n \"name\": \"Field properties coverage\",\n \"targetType\": \"field\",\n \"targets\": [\n \"fullName\"\n ],\n \"effect\": {\n \"condition\": \"true\",\n \"properties\": {\n \"visible\": true,\n \"required\": true,\n \"readonly\": false,\n \"disabled\": false,\n \"className\": \"rule-field\",\n \"style\": {\n \"color\": \"#333333\"\n },\n \"label\": \"Rule label\",\n \"description\": \"Rule description\",\n \"placeholder\": \"Rule placeholder\",\n \"hint\": \"Rule hint\",\n \"tooltip\": \"Rule tooltip\",\n \"prefixIcon\": \"info\",\n \"suffixIcon\": \"check\",\n \"prefixText\": \"R$\",\n \"suffixText\": \"USD\",\n \"defaultValue\": {\n \"value\": \"default\"\n },\n \"options\": [\n {\n \"text\": \"A\",\n \"value\": \"A\"\n }\n ],\n \"appearance\": \"outline\",\n \"color\": \"primary\",\n \"floatLabel\": \"always\",\n \"hintPosition\": \"end\",\n \"validators\": {\n \"required\": true\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"required\": false,\n \"readonly\": true,\n \"disabled\": true,\n \"className\": \"rule-field-off\",\n \"style\": {\n \"color\": \"#999999\"\n },\n \"label\": \"Rule label off\",\n \"description\": \"Rule description off\",\n \"placeholder\": \"Rule placeholder off\",\n \"hint\": \"Rule hint off\",\n \"tooltip\": \"Rule tooltip off\",\n \"prefixIcon\": \"block\",\n \"suffixIcon\": \"close\",\n \"prefixText\": \"OFF\",\n \"suffixText\": \"OFF\",\n \"defaultValue\": {\n \"value\": null\n },\n \"options\": [\n {\n \"text\": \"B\",\n \"value\": \"B\"\n }\n ],\n \"appearance\": \"fill\",\n \"color\": \"accent\",\n \"floatLabel\": \"never\",\n \"hintPosition\": \"start\",\n \"validators\": {\n \"required\": false\n }\n }\n }\n },\n {\n \"id\": \"rule-section-all\",\n \"name\": \"Section properties coverage\",\n \"targetType\": \"section\",\n \"targets\": [\n \"basic\"\n ],\n \"effect\": {\n \"condition\": \"true\",\n \"properties\": {\n \"visible\": true,\n \"title\": \"Rule section title\",\n \"description\": \"Rule section description\",\n \"icon\": \"settings\",\n \"className\": \"rule-section\",\n \"style\": {\n \"borderRadius\": \"8px\"\n },\n \"borderColor\": \"#cccccc\",\n \"borderStyle\": \"solid\",\n \"borderWidth\": 1,\n \"collapsible\": true,\n \"collapsed\": false,\n \"headerTooltip\": \"Section tooltip\",\n \"headerAlign\": \"start\",\n \"gapBottom\": 12,\n \"titleGapBottom\": 4,\n \"descriptionGapBottom\": 6,\n \"titleColor\": \"#222222\",\n \"descriptionColor\": \"#555555\",\n \"titleStyle\": \"titleSmall\",\n \"descriptionStyle\": \"bodySmall\",\n \"appearance\": \"outlined\"\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"title\": \"Rule section title off\",\n \"description\": \"Rule section description off\",\n \"icon\": \"block\",\n \"className\": \"rule-section-off\",\n \"style\": {\n \"borderRadius\": \"0px\"\n },\n \"borderColor\": \"#eeeeee\",\n \"borderStyle\": \"dashed\",\n \"borderWidth\": 0,\n \"collapsible\": false,\n \"collapsed\": true,\n \"headerTooltip\": \"Section tooltip off\",\n \"headerAlign\": \"center\",\n \"gapBottom\": 0,\n \"titleGapBottom\": 0,\n \"descriptionGapBottom\": 0,\n \"titleColor\": \"#999999\",\n \"descriptionColor\": \"#999999\",\n \"titleStyle\": \"titleMedium\",\n \"descriptionStyle\": \"bodyMedium\",\n \"appearance\": \"flat\"\n }\n }\n },\n {\n \"id\": \"rule-action-all\",\n \"name\": \"Action properties coverage\",\n \"targetType\": \"action\",\n \"targets\": [\n \"archive\"\n ],\n \"effect\": {\n \"condition\": \"true\",\n \"properties\": {\n \"visible\": true,\n \"disabled\": false,\n \"loading\": false,\n \"label\": \"Rule action\",\n \"icon\": \"archive\",\n \"tooltip\": \"Rule tooltip\",\n \"color\": \"warn\",\n \"variant\": \"stroked\",\n \"size\": \"medium\",\n \"className\": \"rule-action\",\n \"style\": {\n \"minWidth\": \"120px\"\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"disabled\": true,\n \"loading\": true,\n \"label\": \"Rule action off\",\n \"icon\": \"block\",\n \"tooltip\": \"Rule tooltip off\",\n \"color\": \"basic\",\n \"variant\": \"flat\",\n \"size\": \"small\",\n \"className\": \"rule-action-off\",\n \"style\": {\n \"minWidth\": \"80px\"\n }\n }\n }\n },\n {\n \"id\": \"rule-row-all\",\n \"name\": \"Row properties coverage\",\n \"targetType\": \"row\",\n \"targets\": [\n \"row-basic-1\"\n ],\n \"effect\": {\n \"condition\": \"true\",\n \"properties\": {\n \"visible\": true,\n \"gap\": 12,\n \"rowGap\": 8,\n \"className\": \"rule-row\",\n \"style\": {\n \"marginBottom\": \"12px\"\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"gap\": 0,\n \"rowGap\": 0,\n \"className\": \"rule-row-off\",\n \"style\": {\n \"marginBottom\": \"0px\"\n }\n }\n }\n },\n {\n \"id\": \"rule-column-all\",\n \"name\": \"Column properties coverage\",\n \"targetType\": \"column\",\n \"targets\": [\n \"col-basic-1\"\n ],\n \"effect\": {\n \"condition\": \"true\",\n \"properties\": {\n \"visible\": true,\n \"span\": {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 6,\n \"lg\": 6,\n \"xl\": 6\n },\n \"offset\": {\n \"xs\": 0,\n \"sm\": 0,\n \"md\": 0,\n \"lg\": 0,\n \"xl\": 0\n },\n \"order\": {\n \"xs\": 1,\n \"sm\": 1,\n \"md\": 1,\n \"lg\": 1,\n \"xl\": 1\n },\n \"hidden\": {\n \"xs\": false,\n \"sm\": false,\n \"md\": false,\n \"lg\": false,\n \"xl\": false\n },\n \"align\": \"stretch\",\n \"padding\": 8,\n \"className\": \"rule-column\",\n \"style\": {\n \"backgroundColor\": \"#f6f6f6\"\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"span\": {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12,\n \"xl\": 12\n },\n \"offset\": {\n \"xs\": 0,\n \"sm\": 0,\n \"md\": 0,\n \"lg\": 0,\n \"xl\": 0\n },\n \"order\": {\n \"xs\": 2,\n \"sm\": 2,\n \"md\": 2,\n \"lg\": 2,\n \"xl\": 2\n },\n \"hidden\": {\n \"xs\": true,\n \"sm\": true,\n \"md\": true,\n \"lg\": true,\n \"xl\": true\n },\n \"align\": \"center\",\n \"padding\": 0,\n \"className\": \"rule-column-off\",\n \"style\": {\n \"backgroundColor\": \"#ffffff\"\n }\n }\n }\n }\n ],\n \"formRulesState\": {\n \"nodes\": {},\n \"rootNodes\": [],\n \"selectedNodeId\": null,\n \"currentDSL\": \"\",\n \"currentJSON\": [],\n \"validationErrors\": [],\n \"mode\": \"visual\",\n \"isDirty\": false,\n \"history\": [],\n \"historyPosition\": 0\n },\n \"_variants\": [\n {\n \"id\": \"actions-legacy-flags\",\n \"description\": \"Legacy actions flags.\",\n \"patch\": {\n \"actions\": {\n \"showSaveButton\": true,\n \"submitButtonLabel\": \"Save\",\n \"showCancelButton\": true,\n \"cancelButtonLabel\": \"Back\",\n \"showResetButton\": false\n }\n }\n },\n {\n \"id\": \"layout-minimal\",\n \"description\": \"Minimal layout with one section and two fields.\",\n \"patch\": {\n \"sections\": [\n {\n \"id\": \"simple\",\n \"title\": \"Simple\",\n \"rows\": [\n {\n \"id\": \"row-simple-1\",\n \"columns\": [\n {\n \"id\": \"col-simple-1\",\n \"fields\": [\n \"fullName\",\n \"email\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n \"id\": \"rules-clear-override\",\n \"description\": \"Clear rule overrides with null.\",\n \"patch\": {\n \"formRules\": [\n {\n \"id\": \"hide-comp-for-intern\",\n \"name\": \"Hide compensation for interns\",\n \"targetType\": \"field\",\n \"targets\": [\n \"salary\"\n ],\n \"effect\": {\n \"condition\": \"workMode == 'INTERN'\",\n \"properties\": {\n \"visible\": null\n }\n }\n }\n ]\n }\n }\n ],\n \"presentation\": {\n \"labelFontSize\": 12,\n \"valueFontSize\": 14,\n \"labelPosition\": \"left\",\n \"compact\": false,\n \"density\": \"cozy\",\n \"labelWidth\": 140,\n \"labelAlign\": \"start\",\n \"valueAlign\": \"end\"\n }\n}\n",
|
|
8397
|
+
"content": "{\n \"_comment\": \"Generic recipe for PraxisDynamicForm (FormConfig). Values are placeholders for AI examples.\",\n \"templateMeta\": {\n \"variantId\": \"form-config\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"tags\": [\n \"full\",\n \"config\"\n ],\n \"useWhen\": \"gerar form completo com layout, campos e regras\",\n \"examplePrompts\": [\n \"gere um formulario completo com campos e layout\",\n \"crie um form completo baseado no schema\"\n ]\n },\n \"metadata\": {\n \"version\": \"2.0.0\",\n \"lastUpdated\": \"2024-02-01T12:00:00Z\",\n \"source\": \"local\",\n \"serverHash\": \"hash-abc-123\",\n \"schemaId\": \"path:/api/employees#request\",\n \"schemaContext\": {\n \"path\": \"/api/employees\",\n \"operation\": \"POST\",\n \"schemaType\": \"request\",\n \"internal\": false,\n \"tenant\": \"default\",\n \"locale\": \"pt-BR\"\n },\n \"customizations\": [\n {\n \"fieldName\": \"salary\",\n \"property\": \"label\",\n \"oldValue\": \"Salary\",\n \"newValue\": \"Salario\",\n \"timestamp\": \"2024-01-20T10:00:00Z\",\n \"source\": \"user\"\n }\n ]\n },\n \"api\": {\n \"saveEndpoint\": \"/api/employees\",\n \"loadEndpoint\": \"/api/employees/${id}\",\n \"saveMethod\": \"POST\",\n \"timeout\": 15000,\n \"headers\": {\n \"X-Module\": \"HR\",\n \"X-Request-Source\": \"dynamic-form\"\n },\n \"idField\": \"id\",\n \"beforeSave\": \"sanitizeEmployee\",\n \"afterLoad\": \"mapEmployee\"\n },\n \"behavior\": {\n \"confirmOnUnsavedChanges\": true,\n \"trackHistory\": true,\n \"focusFirstError\": true,\n \"scrollToErrors\": true,\n \"clearAfterSave\": false,\n \"redirectAfterSave\": \"/employees\",\n \"reactiveValidation\": true,\n \"reactiveValidationDebounceMs\": 200\n },\n \"messages\": {\n \"createRegistrySuccess\": \"Registro criado com sucesso.\",\n \"updateRegistrySuccess\": \"Registro atualizado com sucesso.\",\n \"createRegistryError\": \"Falha ao criar registro.\",\n \"updateRegistryError\": \"Falha ao atualizar registro.\",\n \"confirmations\": {\n \"submit\": \"Salvar alteracoes?\",\n \"cancel\": \"Descartar alteracoes?\",\n \"reset\": \"Limpar o formulario?\",\n \"archive\": \"Arquivar este registro?\"\n },\n \"customActions\": {\n \"archive\": {\n \"success\": \"Registro arquivado.\",\n \"error\": \"Falha ao arquivar.\",\n \"confirmation\": \"Arquivar registro agora?\"\n },\n \"preview\": {\n \"confirmation\": \"Gerar pre-visualizacao?\"\n }\n },\n \"loading\": {\n \"submit\": \"Salvando...\",\n \"cancel\": \"Cancelando...\",\n \"reset\": \"Limpando...\",\n \"archive\": \"Arquivando...\"\n }\n },\n \"hints\": {\n \"dataModes\": {\n \"create\": \"Preencha os dados para criar um novo registro.\",\n \"edit\": \"Atualize os dados e salve as alteracoes.\",\n \"view\": \"Visualize os dados do registro.\"\n },\n \"uiModes\": {\n \"presentation\": \"Modo apresentacao exibe apenas leitura.\",\n \"readonly\": \"Modo leitura bloqueia edicao.\",\n \"disabled\": \"Campos desabilitados nao permitem interacao.\",\n \"visible\": \"Controle de visibilidade sem destruir controles.\"\n }\n },\n \"hooks\": {\n \"beforeInit\": [\n {\n \"priority\": 100,\n \"timeoutMs\": 1500,\n \"args\": {\n \"source\": \"cache\"\n },\n \"id\": \"load-static-options\"\n }\n ],\n \"afterInit\": [\n {\n \"priority\": 50,\n \"timeoutMs\": 1200,\n \"args\": {\n \"enable\": true\n },\n \"id\": \"attach-shortcuts\"\n }\n ],\n \"beforeValidate\": [\n {\n \"priority\": 80,\n \"timeoutMs\": 1200,\n \"args\": {\n \"country\": \"BR\"\n },\n \"id\": \"normalize-phones\"\n }\n ],\n \"afterValidate\": [\n {\n \"priority\": 10,\n \"timeoutMs\": 1000,\n \"args\": {\n \"report\": \"warnings\"\n },\n \"id\": \"collect-warnings\"\n }\n ],\n \"beforeSubmit\": [\n {\n \"priority\": 100,\n \"timeoutMs\": 2000,\n \"args\": {\n \"trimStrings\": true\n },\n \"id\": \"sanitize-employee\"\n }\n ],\n \"afterSubmit\": [\n {\n \"priority\": 20,\n \"timeoutMs\": 1500,\n \"args\": {\n \"messageKey\": \"employeeSaved\"\n },\n \"id\": \"notify-success\"\n }\n ],\n \"onError\": [\n {\n \"priority\": 0,\n \"timeoutMs\": 1500,\n \"args\": {\n \"messageKey\": \"employeeSaveError\"\n },\n \"id\": \"notify-error\"\n }\n ]\n },\n \"fieldMetadata\": [\n {\n \"name\": \"id\",\n \"label\": \"ID\",\n \"controlType\": \"numericTextBox\",\n \"dataType\": \"number\",\n \"hidden\": true,\n \"readOnly\": true,\n \"description\": \"Backend generated identifier.\"\n },\n {\n \"name\": \"fullName\",\n \"label\": \"Full name\",\n \"controlType\": \"input\",\n \"dataType\": \"text\",\n \"placeholder\": \"Example: Ana Souza\",\n \"prefixIcon\": \"person\",\n \"iconPosition\": \"start\",\n \"iconSize\": \"small\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 3,\n \"maxLength\": 120,\n \"requiredMessage\": \"Name is required\",\n \"minLengthMessage\": \"Min 3 chars\",\n \"minWords\": 2\n },\n \"validationMode\": \"blur\",\n \"debounceTime\": 200,\n \"materialDesign\": {\n \"appearance\": \"outline\",\n \"color\": \"primary\",\n \"floatLabel\": \"auto\",\n \"density\": \"comfortable\",\n \"subscriptSizing\": \"dynamic\",\n \"hideRequiredMarker\": false,\n \"disableRipple\": true,\n \"customPalette\": {\n \"primary\": \"#005f73\",\n \"accent\": \"#0a9396\",\n \"warn\": \"#bb3e03\"\n },\n \"animations\": {\n \"disabled\": false,\n \"duration\": \"150ms\",\n \"easing\": \"ease-out\"\n }\n },\n \"group\": \"identity\",\n \"order\": 1,\n \"width\": \"50%\",\n \"isFlex\": true,\n \"id\": \"field-full-name\",\n \"version\": \"1.0.0\",\n \"context\": \"form\",\n \"createdAt\": \"2024-01-01T00:00:00Z\",\n \"updatedAt\": \"2024-02-01T00:00:00Z\",\n \"tags\": [\n \"identity\",\n \"employee\"\n ],\n \"cssClass\": \"field-full-name\",\n \"style\": {\n \"maxWidth\": \"480px\"\n },\n \"dataAttributes\": {\n \"data-qa\": \"full-name\"\n },\n \"required\": true\n },\n {\n \"name\": \"email\",\n \"label\": \"Email\",\n \"controlType\": \"email\",\n \"dataType\": \"email\",\n \"placeholder\": \"name@company.com\",\n \"validators\": {\n \"required\": true,\n \"email\": true,\n \"emailMessage\": \"Use a valid email.\"\n },\n \"unique\": true,\n \"ariaLabel\": \"Email address\",\n \"ariaDescribedBy\": \"email-help\",\n \"tabIndex\": 2,\n \"accessKey\": \"e\"\n },\n {\n \"name\": \"phone\",\n \"label\": \"Phone\",\n \"controlType\": \"maskedTextBox\",\n \"dataType\": \"text\",\n \"mask\": \"(99) 99999-9999\",\n \"validators\": {\n \"pattern\": \"^\\\\(\\\\d{2}\\\\) \\\\d{4,5}-\\\\d{4}$\",\n \"patternMessage\": \"Use (11) 99999-9999\"\n },\n \"hint\": \"Include area code.\"\n },\n {\n \"name\": \"status\",\n \"label\": \"Status\",\n \"controlType\": \"select\",\n \"options\": [\n {\n \"text\": \"Active\",\n \"value\": \"ACTIVE\",\n \"icon\": \"check_circle\"\n },\n {\n \"text\": \"Inactive\",\n \"value\": \"INACTIVE\",\n \"icon\": \"block\"\n },\n {\n \"text\": \"On leave\",\n \"value\": \"ON_LEAVE\",\n \"icon\": \"schedule\"\n }\n ],\n \"defaultValue\": \"ACTIVE\",\n \"validators\": {\n \"required\": true\n },\n \"materialDesign\": {\n \"appearance\": \"outline\",\n \"color\": \"accent\"\n }\n },\n {\n \"name\": \"departmentId\",\n \"label\": \"Department\",\n \"controlType\": \"select\",\n \"endpoint\": \"/api/departments\",\n \"valueField\": \"id\",\n \"displayField\": \"name\",\n \"queryParams\": {\n \"active\": true\n },\n \"cacheDuration\": 300000,\n \"validators\": {\n \"required\": true\n },\n \"resourcePath\": \"/api/departments\",\n \"filterCriteria\": {\n \"active\": true\n },\n \"optionLabelKey\": \"name\",\n \"optionValueKey\": \"id\",\n \"searchable\": true\n },\n {\n \"name\": \"teamId\",\n \"label\": \"Team\",\n \"controlType\": \"select\",\n \"endpoint\": \"/api/teams\",\n \"valueField\": \"id\",\n \"displayField\": \"name\",\n \"dependencyFields\": [\n \"departmentId\"\n ],\n \"dependencyFilterMap\": {\n \"departmentId\": \"departmentId\"\n },\n \"dependencyValuePath\": \"id\",\n \"dependencyLoadOnChange\": \"immediate\",\n \"dependencyMergeStrategy\": \"replace\",\n \"dependencyDebounceMs\": 200,\n \"resetOnDependentChange\": true,\n \"enableDependencyCascade\": true,\n \"suppressInlineErrorsOnCascade\": true\n },\n {\n \"name\": \"managerId\",\n \"label\": \"Manager\",\n \"controlType\": \"autoComplete\",\n \"endpoint\": \"/api/employees\",\n \"queryParams\": {\n \"role\": \"manager\"\n },\n \"valueField\": \"id\",\n \"displayField\": \"name\",\n \"filterField\": \"name\",\n \"dependencyFields\": [\n \"departmentId\"\n ],\n \"dependencyFilterMap\": {\n \"departmentId\": \"departmentId\"\n },\n \"dependencyLoadOnChange\": \"respectLoadOn\",\n \"disabled\": false\n },\n {\n \"name\": \"hireDate\",\n \"label\": \"Hire date\",\n \"controlType\": \"date\",\n \"dataType\": \"date\",\n \"validators\": {\n \"required\": true\n },\n \"minDate\": \"2020-01-01\",\n \"maxDate\": \"2030-12-31\",\n \"startView\": \"multi-year\",\n \"datepickerTogglePosition\": \"suffix\",\n \"touchUi\": true\n },\n {\n \"name\": \"terminationDate\",\n \"label\": \"Termination date\",\n \"controlType\": \"date\",\n \"conditionalDisplay\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"INACTIVE\"\n ]\n },\n \"conditionalRequired\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"INACTIVE\"\n ]\n }\n },\n {\n \"name\": \"salary\",\n \"label\": \"Salary\",\n \"controlType\": \"currency\",\n \"dataType\": \"number\",\n \"format\": \"BRL|symbol|2\",\n \"validators\": {\n \"min\": 0,\n \"max\": 999999,\n \"minMessage\": \"Salary must be >= 0\"\n },\n \"min\": 0,\n \"max\": 999999,\n \"step\": 100,\n \"precision\": \"fixed\",\n \"currencyCode\": \"BRL\",\n \"currencyDisplay\": \"symbol\",\n \"prefix\": \"R$\",\n \"suffix\": \"bruto\",\n \"inlineEditing\": true,\n \"transformDisplayValue\": \"formatCurrency\",\n \"transformSaveValue\": \"parseCurrency\"\n },\n {\n \"name\": \"bonusPercent\",\n \"label\": \"Bonus %\",\n \"controlType\": \"slider\",\n \"dataType\": \"number\",\n \"defaultValue\": 10,\n \"validators\": {\n \"min\": 0,\n \"max\": 50\n },\n \"suffixIcon\": \"percent\",\n \"min\": 0,\n \"max\": 50,\n \"step\": 5,\n \"thumbLabel\": true,\n \"showTicks\": true,\n \"vertical\": false,\n \"invert\": false\n },\n {\n \"name\": \"workMode\",\n \"label\": \"Work mode\",\n \"controlType\": \"radio\",\n \"options\": [\n {\n \"text\": \"CLT\",\n \"value\": \"CLT\"\n },\n {\n \"text\": \"PJ\",\n \"value\": \"PJ\"\n },\n {\n \"text\": \"Intern\",\n \"value\": \"INTERN\"\n }\n ],\n \"defaultValue\": \"CLT\"\n },\n {\n \"name\": \"skills\",\n \"label\": \"Skills\",\n \"controlType\": \"multiSelect\",\n \"options\": [\n {\n \"text\": \"Angular\",\n \"value\": \"ANG\"\n },\n {\n \"text\": \"React\",\n \"value\": \"RE\"\n },\n {\n \"text\": \"Node\",\n \"value\": \"NODE\"\n }\n ],\n \"visibleIn\": [\n \"form\",\n \"filter\"\n ],\n \"multiple\": true,\n \"searchable\": true,\n \"clearable\": true,\n \"selectAll\": true,\n \"maxSelections\": 5,\n \"virtualScroll\": true,\n \"emptyOptionText\": \"None\"\n },\n {\n \"name\": \"availability\",\n \"label\": \"Availability\",\n \"controlType\": \"dateRange\",\n \"rangeSeparator\": \" to \"\n },\n {\n \"name\": \"notes\",\n \"label\": \"Notes\",\n \"controlType\": \"textarea\",\n \"validators\": {\n \"maxLength\": 500\n },\n \"hint\": \"Add relevant notes.\",\n \"textTransformApply\": \"displayOnly\",\n \"rows\": 4,\n \"minRows\": 3,\n \"maxRows\": 8,\n \"resize\": \"vertical\",\n \"spellcheck\": true,\n \"inputMode\": \"text\",\n \"textTransform\": \"uppercase\",\n \"readonly\": false,\n \"formHidden\": false,\n \"tableHidden\": true,\n \"filterHidden\": false\n },\n {\n \"name\": \"isActive\",\n \"label\": \"Active\",\n \"controlType\": \"toggle\",\n \"dataType\": \"boolean\",\n \"defaultValue\": true\n },\n {\n \"name\": \"avatar\",\n \"label\": \"Photo\",\n \"controlType\": \"upload\",\n \"accept\": \".png,.jpg,.jpeg\",\n \"multiple\": false,\n \"materialDesign\": {\n \"appearance\": \"outline\"\n },\n \"uploadUrl\": \"/api/uploads/avatars\",\n \"autoUpload\": true,\n \"maxFileSize\": 5242880,\n \"maxFiles\": 2,\n \"fileRestrictions\": {\n \"minResolution\": \"128x128\",\n \"maxResolution\": \"2048x2048\"\n },\n \"chunkSize\": 1048576,\n \"withCredentials\": false,\n \"headers\": {\n \"X-Upload-Source\": \"dynamic-form\"\n },\n \"method\": \"POST\",\n \"saveField\": \"file\"\n },\n {\n \"name\": \"terms\",\n \"label\": \"Accept terms\",\n \"controlType\": \"checkbox\",\n \"validators\": {\n \"requiredChecked\": true\n },\n \"tooltip\": \"Required to submit.\"\n },\n {\n \"name\": \"username\",\n \"label\": \"Username\",\n \"controlType\": \"input\",\n \"dataType\": \"text\",\n \"type\": \"text\",\n \"minLength\": 3,\n \"maxLength\": 20,\n \"pattern\": \"^[a-zA-Z0-9_]+$\",\n \"validators\": {\n \"required\": true,\n \"patternMessage\": \"Use letters, numbers, underscore\"\n },\n \"inputMode\": \"text\",\n \"autoComplete\": \"username\",\n \"readonly\": false,\n \"spellcheck\": false,\n \"textTransform\": \"lowercase\",\n \"placeholder\": \"user_name\"\n },\n {\n \"name\": \"password\",\n \"label\": \"Password\",\n \"controlType\": \"password\",\n \"dataType\": \"text\",\n \"type\": \"password\",\n \"showPasswordToggle\": true,\n \"autoComplete\": \"current-password\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 8\n }\n },\n {\n \"name\": \"country\",\n \"label\": \"Country\",\n \"controlType\": \"select\",\n \"dataType\": \"text\",\n \"options\": [\n {\n \"text\": \"Brazil\",\n \"value\": \"BR\"\n },\n {\n \"text\": \"United States\",\n \"value\": \"US\"\n },\n {\n \"text\": \"Canada\",\n \"value\": \"CA\"\n }\n ],\n \"optionLabelKey\": \"text\",\n \"optionValueKey\": \"value\",\n \"emptyOptionText\": \"Select a country\",\n \"searchable\": true,\n \"clearable\": true,\n \"resourcePath\": \"/api/countries\",\n \"filterCriteria\": {\n \"active\": true\n },\n \"multiple\": false\n },\n {\n \"name\": \"orgTree\",\n \"label\": \"Organization\",\n \"controlType\": \"treeSelect\",\n \"treeConfig\": {\n \"expandByDefault\": true,\n \"selectionMode\": \"single\"\n },\n \"nodes\": [\n {\n \"label\": \"HQ\",\n \"value\": \"hq\",\n \"children\": [\n {\n \"label\": \"Finance\",\n \"value\": \"finance\"\n }\n ]\n },\n {\n \"label\": \"Branch\",\n \"value\": \"branch\"\n }\n ],\n \"multiple\": false\n },\n {\n \"name\": \"ratingScore\",\n \"label\": \"Satisfaction\",\n \"controlType\": \"rating\",\n \"value\": 3,\n \"max\": 5,\n \"ratingMax\": 5,\n \"ratingPrecision\": 0.5,\n \"ratingIcon\": \"star\",\n \"ratingEmptyIcon\": \"star_border\",\n \"ratingAllowHalf\": true\n },\n {\n \"name\": \"progress\",\n \"label\": \"Progress\",\n \"controlType\": \"slider\",\n \"min\": 0,\n \"max\": 100,\n \"step\": 5,\n \"defaultValue\": 65,\n \"thumbLabel\": true,\n \"showTicks\": true\n },\n {\n \"name\": \"avatarDisplay\",\n \"label\": \"Avatar display\",\n \"controlType\": \"avatar\",\n \"imageSrc\": \"https://cdn.example.com/avatars/ana.png\",\n \"imageAlt\": \"User avatar\",\n \"initials\": \"AS\",\n \"avatarShape\": \"circle\",\n \"avatarSize\": \"medium\"\n },\n {\n \"name\": \"ctaButton\",\n \"label\": \"Request access\",\n \"controlType\": \"button\",\n \"icon\": \"send\",\n \"color\": \"primary\",\n \"variant\": \"raised\",\n \"size\": \"medium\",\n \"disabled\": false,\n \"loading\": false,\n \"action\": \"requestAccess\",\n \"actionPayload\": {\n \"role\": \"manager\"\n }\n },\n {\n \"name\": \"aiAssist\",\n \"label\": \"AI assist\",\n \"controlType\": \"button\",\n \"icon\": \"smart_toy\",\n \"color\": \"accent\",\n \"variant\": \"stroked\",\n \"size\": \"medium\",\n \"action\": \"aiAssist\",\n \"actionPayload\": {\n \"prompt\": \"Summarize the candidate profile\",\n \"history\": [\n {\n \"role\": \"user\",\n \"content\": \"Summarize this CV.\"\n },\n {\n \"role\": \"assistant\",\n \"content\": \"Summary goes here.\"\n }\n ]\n },\n \"tooltip\": \"Ask AI to summarize the candidate profile\"\n },\n {\n \"name\": \"themeColor\",\n \"label\": \"Theme color\",\n \"controlType\": \"colorPicker\",\n \"format\": \"hex\",\n \"views\": [\n \"palette\",\n \"gradient\"\n ],\n \"activeView\": \"palette\",\n \"preview\": true,\n \"clearButton\": true,\n \"actionsLayout\": \"end\",\n \"adaptiveMode\": true,\n \"adaptiveTitle\": \"Pick a color\",\n \"adaptiveSubtitle\": \"Brand palette\",\n \"popupSettings\": {\n \"width\": 320\n },\n \"gradientSettings\": {\n \"opacity\": true\n },\n \"paletteSettings\": {\n \"columns\": 8\n },\n \"fillMode\": \"solid\",\n \"rounded\": \"medium\",\n \"size\": \"medium\",\n \"icon\": \"palette\",\n \"iconClass\": \"color-icon\",\n \"svgIcon\": \"custom-palette\",\n \"tabindex\": 0\n },\n {\n \"name\": \"cpf\",\n \"label\": \"CPF/CNPJ\",\n \"controlType\": \"cpfCnpjInput\",\n \"maskType\": \"cpf-cnpj\",\n \"unmaskOnSubmit\": true,\n \"validators\": {\n \"cpf\": true,\n \"cnpj\": true\n }\n },\n {\n \"name\": \"meetingTime\",\n \"label\": \"Meeting time\",\n \"controlType\": \"timePicker\",\n \"enableSeconds\": true,\n \"stepMinute\": 15,\n \"stepSecond\": 30\n }\n ],\n \"sections\": [\n {\n \"id\": \"basic\",\n \"title\": \"Basic data\",\n \"description\": \"Primary profile and status fields.\",\n \"icon\": \"person\",\n \"collapsible\": true,\n \"collapsed\": false,\n \"gapBottom\": 16,\n \"titleGapBottom\": 6,\n \"descriptionGapBottom\": 8,\n \"titleStyle\": \"titleMedium\",\n \"descriptionStyle\": \"bodyMedium\",\n \"titleColor\": \"#1a1a1a\",\n \"descriptionColor\": \"#666666\",\n \"headerAlign\": \"start\",\n \"headerTooltip\": \"Main data\",\n \"rows\": [\n {\n \"id\": \"row-basic-1\",\n \"gap\": 16,\n \"rowGap\": 12,\n \"columns\": [\n {\n \"id\": \"col-basic-1\",\n \"fields\": [\n \"fullName\",\n \"email\"\n ],\n \"span\": {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 6,\n \"lg\": 6,\n \"xl\": 6\n },\n \"padding\": 8,\n \"className\": \"col-basic-main\",\n \"testId\": \"col-basic-main\",\n \"title\": \"Identity\"\n },\n {\n \"id\": \"col-basic-2\",\n \"fields\": [\n \"status\",\n \"hireDate\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n },\n \"hidden\": {\n \"xs\": true,\n \"sm\": false,\n \"md\": false,\n \"lg\": false,\n \"xl\": false\n },\n \"order\": {\n \"xs\": 2,\n \"sm\": 1,\n \"md\": 2,\n \"lg\": 2,\n \"xl\": 1\n }\n }\n ],\n \"title\": \"Core fields\"\n },\n {\n \"id\": \"row-basic-2\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-basic-3\",\n \"fields\": [\n \"phone\",\n \"isActive\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n },\n \"offset\": {\n \"xs\": 0,\n \"sm\": 0,\n \"md\": 1,\n \"lg\": 0,\n \"xl\": 0\n }\n },\n {\n \"id\": \"col-basic-4\",\n \"fields\": [\n \"departmentId\",\n \"teamId\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-basic-3\",\n \"columns\": [\n {\n \"id\": \"col-basic-5\",\n \"fields\": [\n \"managerId\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n }\n ]\n },\n {\n \"id\": \"employment\",\n \"title\": \"Employment\",\n \"description\": \"Contract and compensation.\",\n \"icon\": \"badge\",\n \"collapsible\": true,\n \"collapsed\": false,\n \"rows\": [\n {\n \"id\": \"row-employment-1\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-employment-1\",\n \"fields\": [\n \"salary\",\n \"bonusPercent\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-employment-2\",\n \"fields\": [\n \"workMode\",\n \"terminationDate\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-employment-2\",\n \"rowGap\": 16,\n \"columns\": [\n {\n \"id\": \"col-employment-3\",\n \"fields\": [\n \"skills\",\n \"availability\"\n ],\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n }\n }\n ]\n }\n ]\n },\n {\n \"id\": \"extras\",\n \"title\": \"Extras\",\n \"description\": \"Additional notes and context.\",\n \"collapsible\": true,\n \"collapsed\": false,\n \"rows\": [\n {\n \"id\": \"row-extras-1\",\n \"columns\": [\n {\n \"id\": \"col-extras-1\",\n \"fields\": [\n \"notes\"\n ],\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n },\n \"align\": \"stretch\",\n \"padding\": 8\n }\n ]\n }\n ]\n },\n {\n \"id\": \"attachments\",\n \"title\": \"Attachments\",\n \"description\": \"Files and confirmations.\",\n \"collapsible\": true,\n \"collapsed\": true,\n \"rows\": [\n {\n \"id\": \"row-attachments-1\",\n \"columns\": [\n {\n \"id\": \"col-attachments-1\",\n \"fields\": [\n \"avatar\",\n \"terms\"\n ],\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n },\n \"align\": \"center\"\n }\n ]\n }\n ]\n },\n {\n \"id\": \"advanced\",\n \"title\": \"Advanced\",\n \"description\": \"Extra controls and integrations.\",\n \"collapsible\": true,\n \"collapsed\": true,\n \"rows\": [\n {\n \"id\": \"row-advanced-1\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-advanced-1\",\n \"fields\": [\n \"username\",\n \"password\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-advanced-2\",\n \"fields\": [\n \"country\",\n \"orgTree\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-advanced-2\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-advanced-3\",\n \"fields\": [\n \"themeColor\",\n \"cpf\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-advanced-4\",\n \"fields\": [\n \"meetingTime\",\n \"ratingScore\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-advanced-3\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-advanced-5\",\n \"fields\": [\n \"progress\",\n \"avatarDisplay\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-advanced-6\",\n \"fields\": [\n \"ctaButton\",\n \"aiAssist\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n }\n ]\n }\n ],\n \"actions\": {\n \"submit\": {\n \"visible\": true,\n \"label\": \"Save\",\n \"icon\": \"save\",\n \"color\": \"primary\",\n \"variant\": \"raised\",\n \"size\": \"medium\",\n \"type\": \"submit\",\n \"shortcut\": \"Ctrl+S\",\n \"tooltip\": \"Save changes\",\n \"className\": \"action-submit\",\n \"style\": {\n \"letterSpacing\": \"0.5px\"\n },\n \"disabled\": false,\n \"loading\": false\n },\n \"cancel\": {\n \"visible\": true,\n \"label\": \"Cancel\",\n \"icon\": \"close\",\n \"type\": \"button\",\n \"color\": \"basic\"\n },\n \"reset\": {\n \"visible\": true,\n \"label\": \"Reset\",\n \"type\": \"reset\",\n \"color\": \"basic\"\n },\n \"custom\": [\n {\n \"id\": \"archive\",\n \"visible\": true,\n \"label\": \"Archive\",\n \"icon\": \"archive\",\n \"color\": \"warn\",\n \"variant\": \"stroked\",\n \"action\": \"archive\",\n \"tooltip\": \"Archive record\"\n },\n {\n \"id\": \"preview\",\n \"visible\": true,\n \"label\": \"Preview\",\n \"icon\": \"visibility\",\n \"color\": \"accent\",\n \"variant\": \"flat\",\n \"action\": \"preview\"\n }\n ],\n \"position\": \"right\",\n \"orientation\": \"horizontal\",\n \"spacing\": \"normal\",\n \"sticky\": true,\n \"divider\": true,\n \"placement\": \"afterSections\",\n \"containerClassName\": \"form-actions-container\",\n \"containerStyles\": {\n \"background\": \"var(--md-sys-color-surface-container)\",\n \"border\": \"1px solid var(--md-sys-color-outline-variant)\",\n \"borderRadius\": \"12px\",\n \"padding\": \"12px 16px\"\n },\n \"mobile\": {\n \"position\": \"center\",\n \"orientation\": \"vertical\",\n \"collapseToMenu\": true\n }\n },\n \"formRules\": [\n {\n \"id\": \"hide-comp-for-intern\",\n \"name\": \"Hide compensation for interns\",\n \"targetType\": \"field\",\n \"targets\": [\n \"salary\",\n \"bonusPercent\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"workMode\"\n },\n \"INTERN\"\n ]\n },\n \"properties\": {\n \"visible\": false,\n \"required\": false\n },\n \"propertiesWhenFalse\": {\n \"visible\": true\n }\n },\n \"description\": \"Rule for coverage of description field.\",\n \"targetFields\": [\n \"salary\",\n \"bonusPercent\"\n ],\n \"context\": \"visibility\"\n },\n {\n \"id\": \"require-termination-date\",\n \"name\": \"Require termination date when inactive\",\n \"targetType\": \"field\",\n \"targets\": [\n \"terminationDate\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"INACTIVE\"\n ]\n },\n \"properties\": {\n \"visible\": true,\n \"required\": true\n }\n }\n },\n {\n \"id\": \"collapse-employment-section\",\n \"name\": \"Collapse employment when active\",\n \"targetType\": \"section\",\n \"targets\": [\n \"employment\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"ACTIVE\"\n ]\n },\n \"properties\": {\n \"collapsed\": false\n },\n \"propertiesWhenFalse\": {\n \"collapsed\": true\n }\n }\n },\n {\n \"id\": \"disable-archive-when-inactive\",\n \"name\": \"Disable archive when not active\",\n \"targetType\": \"action\",\n \"targets\": [\n \"archive\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"isActive\"\n },\n true\n ]\n },\n \"properties\": {\n \"disabled\": false\n },\n \"propertiesWhenFalse\": {\n \"disabled\": true\n }\n }\n },\n {\n \"id\": \"hide-extras-row\",\n \"name\": \"Hide extras when intern\",\n \"targetType\": \"row\",\n \"targets\": [\n \"row-extras-1\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"workMode\"\n },\n \"INTERN\"\n ]\n },\n \"properties\": {\n \"visible\": false\n },\n \"propertiesWhenFalse\": {\n \"visible\": true,\n \"rowGap\": 16\n }\n }\n },\n {\n \"id\": \"expand-notes-column\",\n \"name\": \"Expand notes column when inactive\",\n \"targetType\": \"column\",\n \"targets\": [\n \"col-extras-1\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"INACTIVE\"\n ]\n },\n \"properties\": {\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n }\n }\n }\n },\n {\n \"id\": \"rule-field-all\",\n \"name\": \"Field properties coverage\",\n \"targetType\": \"field\",\n \"targets\": [\n \"fullName\"\n ],\n \"effect\": {\n \"condition\": true,\n \"properties\": {\n \"visible\": true,\n \"required\": true,\n \"readonly\": false,\n \"disabled\": false,\n \"className\": \"rule-field\",\n \"style\": {\n \"color\": \"#333333\"\n },\n \"label\": \"Rule label\",\n \"description\": \"Rule description\",\n \"placeholder\": \"Rule placeholder\",\n \"hint\": \"Rule hint\",\n \"tooltip\": \"Rule tooltip\",\n \"prefixIcon\": \"info\",\n \"suffixIcon\": \"check\",\n \"prefixText\": \"R$\",\n \"suffixText\": \"USD\",\n \"defaultValue\": {\n \"value\": \"default\"\n },\n \"options\": [\n {\n \"text\": \"A\",\n \"value\": \"A\"\n }\n ],\n \"appearance\": \"outline\",\n \"color\": \"primary\",\n \"floatLabel\": \"always\",\n \"hintPosition\": \"end\",\n \"validators\": {\n \"required\": true\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"required\": false,\n \"readonly\": true,\n \"disabled\": true,\n \"className\": \"rule-field-off\",\n \"style\": {\n \"color\": \"#999999\"\n },\n \"label\": \"Rule label off\",\n \"description\": \"Rule description off\",\n \"placeholder\": \"Rule placeholder off\",\n \"hint\": \"Rule hint off\",\n \"tooltip\": \"Rule tooltip off\",\n \"prefixIcon\": \"block\",\n \"suffixIcon\": \"close\",\n \"prefixText\": \"OFF\",\n \"suffixText\": \"OFF\",\n \"defaultValue\": {\n \"value\": null\n },\n \"options\": [\n {\n \"text\": \"B\",\n \"value\": \"B\"\n }\n ],\n \"appearance\": \"fill\",\n \"color\": \"accent\",\n \"floatLabel\": \"never\",\n \"hintPosition\": \"start\",\n \"validators\": {\n \"required\": false\n }\n }\n }\n },\n {\n \"id\": \"rule-section-all\",\n \"name\": \"Section properties coverage\",\n \"targetType\": \"section\",\n \"targets\": [\n \"basic\"\n ],\n \"effect\": {\n \"condition\": true,\n \"properties\": {\n \"visible\": true,\n \"title\": \"Rule section title\",\n \"description\": \"Rule section description\",\n \"icon\": \"settings\",\n \"className\": \"rule-section\",\n \"style\": {\n \"borderRadius\": \"8px\"\n },\n \"borderColor\": \"#cccccc\",\n \"borderStyle\": \"solid\",\n \"borderWidth\": 1,\n \"collapsible\": true,\n \"collapsed\": false,\n \"headerTooltip\": \"Section tooltip\",\n \"headerAlign\": \"start\",\n \"gapBottom\": 12,\n \"titleGapBottom\": 4,\n \"descriptionGapBottom\": 6,\n \"titleColor\": \"#222222\",\n \"descriptionColor\": \"#555555\",\n \"titleStyle\": \"titleSmall\",\n \"descriptionStyle\": \"bodySmall\",\n \"appearance\": \"outlined\"\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"title\": \"Rule section title off\",\n \"description\": \"Rule section description off\",\n \"icon\": \"block\",\n \"className\": \"rule-section-off\",\n \"style\": {\n \"borderRadius\": \"0px\"\n },\n \"borderColor\": \"#eeeeee\",\n \"borderStyle\": \"dashed\",\n \"borderWidth\": 0,\n \"collapsible\": false,\n \"collapsed\": true,\n \"headerTooltip\": \"Section tooltip off\",\n \"headerAlign\": \"center\",\n \"gapBottom\": 0,\n \"titleGapBottom\": 0,\n \"descriptionGapBottom\": 0,\n \"titleColor\": \"#999999\",\n \"descriptionColor\": \"#999999\",\n \"titleStyle\": \"titleMedium\",\n \"descriptionStyle\": \"bodyMedium\",\n \"appearance\": \"flat\"\n }\n }\n },\n {\n \"id\": \"rule-action-all\",\n \"name\": \"Action properties coverage\",\n \"targetType\": \"action\",\n \"targets\": [\n \"archive\"\n ],\n \"effect\": {\n \"condition\": true,\n \"properties\": {\n \"visible\": true,\n \"disabled\": false,\n \"loading\": false,\n \"label\": \"Rule action\",\n \"icon\": \"archive\",\n \"tooltip\": \"Rule tooltip\",\n \"color\": \"warn\",\n \"variant\": \"stroked\",\n \"size\": \"medium\",\n \"className\": \"rule-action\",\n \"style\": {\n \"minWidth\": \"120px\"\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"disabled\": true,\n \"loading\": true,\n \"label\": \"Rule action off\",\n \"icon\": \"block\",\n \"tooltip\": \"Rule tooltip off\",\n \"color\": \"basic\",\n \"variant\": \"flat\",\n \"size\": \"small\",\n \"className\": \"rule-action-off\",\n \"style\": {\n \"minWidth\": \"80px\"\n }\n }\n }\n },\n {\n \"id\": \"rule-row-all\",\n \"name\": \"Row properties coverage\",\n \"targetType\": \"row\",\n \"targets\": [\n \"row-basic-1\"\n ],\n \"effect\": {\n \"condition\": true,\n \"properties\": {\n \"visible\": true,\n \"gap\": 12,\n \"rowGap\": 8,\n \"className\": \"rule-row\",\n \"style\": {\n \"marginBottom\": \"12px\"\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"gap\": 0,\n \"rowGap\": 0,\n \"className\": \"rule-row-off\",\n \"style\": {\n \"marginBottom\": \"0px\"\n }\n }\n }\n },\n {\n \"id\": \"rule-column-all\",\n \"name\": \"Column properties coverage\",\n \"targetType\": \"column\",\n \"targets\": [\n \"col-basic-1\"\n ],\n \"effect\": {\n \"condition\": true,\n \"properties\": {\n \"visible\": true,\n \"span\": {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 6,\n \"lg\": 6,\n \"xl\": 6\n },\n \"offset\": {\n \"xs\": 0,\n \"sm\": 0,\n \"md\": 0,\n \"lg\": 0,\n \"xl\": 0\n },\n \"order\": {\n \"xs\": 1,\n \"sm\": 1,\n \"md\": 1,\n \"lg\": 1,\n \"xl\": 1\n },\n \"hidden\": {\n \"xs\": false,\n \"sm\": false,\n \"md\": false,\n \"lg\": false,\n \"xl\": false\n },\n \"align\": \"stretch\",\n \"padding\": 8,\n \"className\": \"rule-column\",\n \"style\": {\n \"backgroundColor\": \"#f6f6f6\"\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"span\": {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12,\n \"xl\": 12\n },\n \"offset\": {\n \"xs\": 0,\n \"sm\": 0,\n \"md\": 0,\n \"lg\": 0,\n \"xl\": 0\n },\n \"order\": {\n \"xs\": 2,\n \"sm\": 2,\n \"md\": 2,\n \"lg\": 2,\n \"xl\": 2\n },\n \"hidden\": {\n \"xs\": true,\n \"sm\": true,\n \"md\": true,\n \"lg\": true,\n \"xl\": true\n },\n \"align\": \"center\",\n \"padding\": 0,\n \"className\": \"rule-column-off\",\n \"style\": {\n \"backgroundColor\": \"#ffffff\"\n }\n }\n }\n }\n ],\n \"formRulesState\": {\n \"nodes\": {},\n \"rootNodes\": [],\n \"selectedNodeId\": null,\n \"currentDSL\": \"\",\n \"currentJSON\": [],\n \"validationErrors\": [],\n \"mode\": \"visual\",\n \"isDirty\": false,\n \"history\": [],\n \"historyPosition\": 0\n },\n \"_variants\": [\n {\n \"id\": \"actions-legacy-flags\",\n \"description\": \"Legacy actions flags.\",\n \"patch\": {\n \"actions\": {\n \"showSaveButton\": true,\n \"submitButtonLabel\": \"Save\",\n \"showCancelButton\": true,\n \"cancelButtonLabel\": \"Back\",\n \"showResetButton\": false\n }\n }\n },\n {\n \"id\": \"layout-minimal\",\n \"description\": \"Minimal layout with one section and two fields.\",\n \"patch\": {\n \"sections\": [\n {\n \"id\": \"simple\",\n \"title\": \"Simple\",\n \"rows\": [\n {\n \"id\": \"row-simple-1\",\n \"columns\": [\n {\n \"id\": \"col-simple-1\",\n \"fields\": [\n \"fullName\",\n \"email\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n \"id\": \"rules-clear-override\",\n \"description\": \"Clear rule overrides with null.\",\n \"patch\": {\n \"formRules\": [\n {\n \"id\": \"hide-comp-for-intern\",\n \"name\": \"Hide compensation for interns\",\n \"targetType\": \"field\",\n \"targets\": [\n \"salary\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"workMode\"\n },\n \"INTERN\"\n ]\n },\n \"properties\": {\n \"visible\": null\n }\n }\n }\n ]\n }\n }\n ],\n \"presentation\": {\n \"labelFontSize\": 12,\n \"valueFontSize\": 14,\n \"labelPosition\": \"left\",\n \"compact\": false,\n \"density\": \"cozy\",\n \"labelWidth\": 140,\n \"labelAlign\": \"start\",\n \"valueAlign\": \"end\"\n }\n}\n",
|
|
8391
8398
|
"sourcePointer": "praxis-ui-angular/examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
8392
|
-
"contentHash": "
|
|
8399
|
+
"contentHash": "eb8680d3bf134f3a9db09ba3ecc324db4d163a86c5ec5fcd7ffe972e381c9b1e",
|
|
8393
8400
|
"sourceKind": "component_definition",
|
|
8394
8401
|
"sourceId": "praxis-dynamic-form",
|
|
8395
8402
|
"corpusVersion": "1.0.0"
|
|
@@ -8427,9 +8434,9 @@
|
|
|
8427
8434
|
{
|
|
8428
8435
|
"chunkIndex": 11,
|
|
8429
8436
|
"chunkKind": "recipe",
|
|
8430
|
-
"content": "{\n \"_comment\": \"Receita focada em validações complexas: campos dependentes, validação cruzada (matchField), assíncrona (unique) e regras condicionais.\",\n \"templateMeta\": {\n \"variantId\": \"validation\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"tags\": [\n \"validation\",\n \"rules\"\n ],\n \"useWhen\": \"criar validacoes avancadas e regras condicionais\",\n \"examplePrompts\": [\n \"adicione validacao cruzada de email\",\n \"crie regras condicionais por tipo de conta\"\n ]\n },\n \"metadata\": {\n \"name\": \"Advanced Validation Form\",\n \"version\": \"v1\"\n },\n \"fieldMetadata\": [\n {\n \"name\": \"username\",\n \"label\": \"Usuário\",\n \"controlType\": \"input\",\n \"unique\": true,\n \"validators\": {\n \"required\": true,\n \"minLength\": 4,\n \"pattern\": \"^[a-z0-9_]+$\",\n \"patternMessage\": \"Apenas letras minúsculas, números e underline.\",\n \"uniqueValidator\": \"checkUsernameUnique\",\n \"uniqueMessage\": \"Este usuário já está em uso.\"\n },\n \"_comment\": \"Validação de pattern regex e unicidade simulada.\"\n },\n {\n \"name\": \"email\",\n \"label\": \"E-mail\",\n \"controlType\": \"email\",\n \"validators\": {\n \"required\": true,\n \"email\": true\n }\n },\n {\n \"name\": \"confirmEmail\",\n \"label\": \"Confirmar E-mail\",\n \"controlType\": \"email\",\n \"validators\": {\n \"required\": true,\n \"matchField\": \"email\",\n \"matchFieldMessage\": \"Os e-mails não conferem.\"\n },\n \"_comment\": \"Validação cruzada: deve ser igual ao campo 'email'.\"\n },\n {\n \"name\": \"password\",\n \"label\": \"Senha\",\n \"controlType\": \"password\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 8,\n \"customValidator\": \"passwordStrength\"\n }\n },\n {\n \"name\": \"age\",\n \"label\": \"Idade\",\n \"controlType\": \"numericTextBox\",\n \"validators\": {\n \"required\": true,\n \"min\": 18,\n \"max\": 120,\n \"minMessage\": \"É necessário ser maior de 18 anos.\"\n }\n },\n {\n \"name\": \"accountType\",\n \"label\": \"Tipo de Conta\",\n \"controlType\": \"select\",\n \"options\": [\n {\n \"label\": \"Pessoal\",\n \"value\": \"PERSONAL\"\n },\n {\n \"label\": \"Empresarial\",\n \"value\": \"BUSINESS\"\n }\n ],\n \"defaultValue\": \"PERSONAL\"\n },\n {\n \"name\": \"cnpj\",\n \"label\": \"CNPJ\",\n \"controlType\": \"cpfCnpjInput\",\n \"maskType\": \"cnpj\",\n \"conditionalRequired\": \"
|
|
8437
|
+
"content": "{\n \"_comment\": \"Receita focada em validações complexas: campos dependentes, validação cruzada (matchField), assíncrona (unique) e regras condicionais.\",\n \"templateMeta\": {\n \"variantId\": \"validation\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"tags\": [\n \"validation\",\n \"rules\"\n ],\n \"useWhen\": \"criar validacoes avancadas e regras condicionais\",\n \"examplePrompts\": [\n \"adicione validacao cruzada de email\",\n \"crie regras condicionais por tipo de conta\"\n ]\n },\n \"metadata\": {\n \"name\": \"Advanced Validation Form\",\n \"version\": \"v1\"\n },\n \"fieldMetadata\": [\n {\n \"name\": \"username\",\n \"label\": \"Usuário\",\n \"controlType\": \"input\",\n \"unique\": true,\n \"validators\": {\n \"required\": true,\n \"minLength\": 4,\n \"pattern\": \"^[a-z0-9_]+$\",\n \"patternMessage\": \"Apenas letras minúsculas, números e underline.\",\n \"uniqueValidator\": \"checkUsernameUnique\",\n \"uniqueMessage\": \"Este usuário já está em uso.\"\n },\n \"_comment\": \"Validação de pattern regex e unicidade simulada.\"\n },\n {\n \"name\": \"email\",\n \"label\": \"E-mail\",\n \"controlType\": \"email\",\n \"validators\": {\n \"required\": true,\n \"email\": true\n }\n },\n {\n \"name\": \"confirmEmail\",\n \"label\": \"Confirmar E-mail\",\n \"controlType\": \"email\",\n \"validators\": {\n \"required\": true,\n \"matchField\": \"email\",\n \"matchFieldMessage\": \"Os e-mails não conferem.\"\n },\n \"_comment\": \"Validação cruzada: deve ser igual ao campo 'email'.\"\n },\n {\n \"name\": \"password\",\n \"label\": \"Senha\",\n \"controlType\": \"password\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 8,\n \"customValidator\": \"passwordStrength\"\n }\n },\n {\n \"name\": \"age\",\n \"label\": \"Idade\",\n \"controlType\": \"numericTextBox\",\n \"validators\": {\n \"required\": true,\n \"min\": 18,\n \"max\": 120,\n \"minMessage\": \"É necessário ser maior de 18 anos.\"\n }\n },\n {\n \"name\": \"accountType\",\n \"label\": \"Tipo de Conta\",\n \"controlType\": \"select\",\n \"options\": [\n {\n \"label\": \"Pessoal\",\n \"value\": \"PERSONAL\"\n },\n {\n \"label\": \"Empresarial\",\n \"value\": \"BUSINESS\"\n }\n ],\n \"defaultValue\": \"PERSONAL\"\n },\n {\n \"name\": \"cnpj\",\n \"label\": \"CNPJ\",\n \"controlType\": \"cpfCnpjInput\",\n \"maskType\": \"cnpj\",\n \"conditionalRequired\": {\n \"==\": [\n {\n \"var\": \"accountType\"\n },\n \"BUSINESS\"\n ]\n },\n \"conditionalDisplay\": {\n \"==\": [\n {\n \"var\": \"accountType\"\n },\n \"BUSINESS\"\n ]\n },\n \"_comment\": \"Campo condicional: só aparece e é obrigatório se accountType for 'BUSINESS'.\"\n },\n {\n \"name\": \"bio\",\n \"label\": \"Biografia\",\n \"controlType\": \"textarea\",\n \"validators\": {\n \"minWords\": 10,\n \"maxLength\": 500\n },\n \"hint\": \"Conte-nos um pouco sobre você (mínimo 10 palavras).\"\n },\n {\n \"name\": \"terms\",\n \"label\": \"Aceito os termos de uso\",\n \"controlType\": \"checkbox\",\n \"validators\": {\n \"requiredChecked\": true\n }\n }\n ],\n \"sections\": [\n {\n \"id\": \"credentials\",\n \"title\": \"Credenciais\",\n \"rows\": [\n {\n \"id\": \"credentials-row-1\",\n \"columns\": [\n {\n \"id\": \"username-col\",\n \"fields\": [\n \"username\"\n ]\n }\n ]\n },\n {\n \"id\": \"credentials-row-2\",\n \"columns\": [\n {\n \"id\": \"email-col\",\n \"fields\": [\n \"email\",\n \"confirmEmail\"\n ]\n }\n ]\n },\n {\n \"id\": \"credentials-row-3\",\n \"columns\": [\n {\n \"id\": \"password-col\",\n \"fields\": [\n \"password\"\n ]\n }\n ]\n }\n ]\n },\n {\n \"id\": \"profile\",\n \"title\": \"Perfil\",\n \"rows\": [\n {\n \"id\": \"profile-row-1\",\n \"columns\": [\n {\n \"id\": \"age-col\",\n \"fields\": [\n \"age\",\n \"accountType\"\n ]\n }\n ]\n },\n {\n \"id\": \"profile-row-2\",\n \"columns\": [\n {\n \"id\": \"cnpj-col\",\n \"fields\": [\n \"cnpj\"\n ]\n }\n ]\n },\n {\n \"id\": \"profile-row-3\",\n \"columns\": [\n {\n \"id\": \"bio-col\",\n \"fields\": [\n \"bio\"\n ]\n }\n ]\n }\n ]\n },\n {\n \"id\": \"terms\",\n \"rows\": [\n {\n \"id\": \"terms-row-1\",\n \"columns\": [\n {\n \"id\": \"terms-col\",\n \"fields\": [\n \"terms\"\n ]\n }\n ]\n }\n ]\n }\n ],\n \"actions\": {\n \"submit\": {\n \"id\": \"submit\",\n \"label\": \"Cadastrar\",\n \"color\": \"primary\",\n \"visible\": true,\n \"type\": \"submit\"\n },\n \"cancel\": {\n \"id\": \"cancel\",\n \"label\": \"Cancelar\",\n \"color\": \"basic\",\n \"visible\": false,\n \"type\": \"button\"\n },\n \"reset\": {\n \"id\": \"reset\",\n \"label\": \"Limpar\",\n \"color\": \"basic\",\n \"visible\": false,\n \"type\": \"reset\"\n }\n }\n}\n",
|
|
8431
8438
|
"sourcePointer": "praxis-ui-angular/examples/ai-recipes/praxis-dynamic-form.validation.json",
|
|
8432
|
-
"contentHash": "
|
|
8439
|
+
"contentHash": "4ee17414b7a5f61bfc18e56edd24462c227db8bea7508d33de1aefd2fc09d78e",
|
|
8433
8440
|
"sourceKind": "component_definition",
|
|
8434
8441
|
"sourceId": "praxis-dynamic-form",
|
|
8435
8442
|
"corpusVersion": "1.0.0"
|
|
@@ -13797,7 +13804,7 @@
|
|
|
13797
13804
|
}
|
|
13798
13805
|
]
|
|
13799
13806
|
},
|
|
13800
|
-
"safetyNotes": "
|
|
13807
|
+
"safetyNotes": "Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao."
|
|
13801
13808
|
},
|
|
13802
13809
|
{
|
|
13803
13810
|
"id": "rule.remove",
|
|
@@ -13866,7 +13873,14 @@
|
|
|
13866
13873
|
"{{params.targetField}}"
|
|
13867
13874
|
],
|
|
13868
13875
|
"effect": {
|
|
13869
|
-
"condition":
|
|
13876
|
+
"condition": {
|
|
13877
|
+
"==": [
|
|
13878
|
+
{
|
|
13879
|
+
"var": "{{params.triggerField}}"
|
|
13880
|
+
},
|
|
13881
|
+
"{{params.conditionValue}}"
|
|
13882
|
+
]
|
|
13883
|
+
},
|
|
13870
13884
|
"properties": {
|
|
13871
13885
|
"hidden": "{{params.effectType === 'visibility' ? false : undefined}}",
|
|
13872
13886
|
"required": "{{params.effectType === 'required' ? true : undefined}}",
|
|
@@ -13902,7 +13916,7 @@
|
|
|
13902
13916
|
{
|
|
13903
13917
|
"name": "condition",
|
|
13904
13918
|
"type": "STRING",
|
|
13905
|
-
"description": "
|
|
13919
|
+
"description": "Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \"and\": [{ \">\": [{ \"var\": \"idade\" }, 18] }, { \"==\": [{ \"var\": \"possuiHabilitacao\" }, true] }] })"
|
|
13906
13920
|
},
|
|
13907
13921
|
{
|
|
13908
13922
|
"name": "targetField",
|
|
@@ -14010,9 +14024,9 @@
|
|
|
14010
14024
|
{
|
|
14011
14025
|
"chunkIndex": 2,
|
|
14012
14026
|
"chunkKind": "context_pack",
|
|
14013
|
-
"content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"fieldMetadata[].controlType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"input\",\n \"label\": \"Input\"\n },\n {\n \"value\": \"textarea\",\n \"label\": \"Textarea\"\n },\n {\n \"value\": \"email\",\n \"label\": \"Email\"\n },\n {\n \"value\": \"password\",\n \"label\": \"Password\"\n },\n {\n \"value\": \"search\",\n \"label\": \"Search\"\n },\n {\n \"value\": \"url\",\n \"label\": \"URL\"\n },\n {\n \"value\": \"phone\",\n \"label\": \"Phone\"\n },\n {\n \"value\": \"cpfCnpjInput\",\n \"label\": \"CPF/CNPJ\"\n },\n {\n \"value\": \"numericTextBox\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"priceRange\",\n \"label\": \"Price range\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date picker\"\n },\n {\n \"value\": \"dateRange\",\n \"label\": \"Date range\"\n },\n {\n \"value\": \"dateInput\",\n \"label\": \"Date input\"\n },\n {\n \"value\": \"dateTime\",\n \"label\": \"Datetime\"\n },\n {\n \"value\": \"dateTimeRange\",\n \"label\": \"Datetime range\"\n },\n {\n \"value\": \"dateTimeLocal\",\n \"label\": \"Datetime local\"\n },\n {\n \"value\": \"time\",\n \"label\": \"Time input\"\n },\n {\n \"value\": \"timePicker\",\n \"label\": \"Time picker\"\n },\n {\n \"value\": \"timeRange\",\n \"label\": \"Time range\"\n },\n {\n \"value\": \"week\",\n \"label\": \"Week input\"\n },\n {\n \"value\": \"month\",\n \"label\": \"Month input\"\n },\n {\n \"value\": \"year\",\n \"label\": \"Year input\"\n },\n {\n \"value\": \"select\",\n \"label\": \"Select\"\n },\n {\n \"value\": \"multiSelect\",\n \"label\": \"Multi select\"\n },\n {\n \"value\": \"multiSelectTree\",\n \"label\": \"Multi select tree\"\n },\n {\n \"value\": \"treeSelect\",\n \"label\": \"Tree select\"\n },\n {\n \"value\": \"transferList\",\n \"label\": \"Transfer list\"\n },\n {\n \"value\": \"autoComplete\",\n \"label\": \"Autocomplete\"\n },\n {\n \"value\": \"searchable-select\",\n \"label\": \"Searchable select\"\n },\n {\n \"value\": \"async-select\",\n \"label\": \"Async select\"\n },\n {\n \"value\": \"radio\",\n \"label\": \"Radio group\"\n },\n {\n \"value\": \"checkbox\",\n \"label\": \"Checkbox group\"\n },\n {\n \"value\": \"selectionList\",\n \"label\": \"Selection list\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"buttonToggle\",\n \"label\": \"Button toggle\"\n },\n {\n \"value\": \"slider\",\n \"label\": \"Slider\"\n },\n {\n \"value\": \"rangeSlider\",\n \"label\": \"Range slider\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"chipInput\",\n \"label\": \"Chips\"\n },\n {\n \"value\": \"chipList\",\n \"label\": \"Chip list\"\n },\n {\n \"value\": \"upload\",\n \"label\": \"File upload\"\n },\n {\n \"value\": \"color\",\n \"label\": \"Color input\"\n },\n {\n \"value\": \"colorPicker\",\n \"label\": \"Color picker\"\n },\n {\n \"value\": \"cronBuilder\",\n \"label\": \"Cron builder\"\n }\n ]\n },\n \"fieldMetadata[].source\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"schema\",\n \"label\": \"Schema field\"\n },\n {\n \"value\": \"local\",\n \"label\": \"Local field\"\n }\n ]\n },\n \"fieldMetadata[].submitPolicy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"omit\",\n \"label\": \"Omit from submit payload\"\n },\n {\n \"value\": \"include\",\n \"label\": \"Include in submit payload\"\n },\n {\n \"value\": \"includeWhenDirty\",\n \"label\": \"Include only when dirty\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fill\",\n \"label\": \"Fill\"\n },\n {\n \"value\": \"outline\",\n \"label\": \"Outline\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.floatLabel\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"value\": \"always\",\n \"label\": \"Always\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"dense\",\n \"label\": \"Dense\"\n }\n ]\n },\n \"actions.position\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"left\",\n \"label\": \"Left\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"right\",\n \"label\": \"Right\"\n },\n {\n \"value\": \"justified\",\n \"label\": \"Justified\"\n },\n {\n \"value\": \"split\",\n \"label\": \"Split\"\n }\n ]\n },\n \"actions.orientation\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"horizontal\",\n \"label\": \"Horizontal\"\n },\n {\n \"value\": \"vertical\",\n \"label\": \"Vertical\"\n }\n ]\n },\n \"actions.spacing\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"normal\",\n \"label\": \"Normal\"\n },\n {\n \"value\": \"spacious\",\n \"label\": \"Spacious\"\n }\n ]\n },\n \"actions.placement\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"insideLastSection\",\n \"label\": \"Inside last section\"\n },\n {\n \"value\": \"afterSections\",\n \"label\": \"After sections\"\n },\n {\n \"value\": \"top\",\n \"label\": \"Top\"\n }\n ]\n },\n \"actions.submit.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"submit\",\n \"label\": \"Submit\"\n },\n {\n \"value\": \"reset\",\n \"label\": \"Reset\"\n }\n ]\n },\n \"actions.submit.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"raised\",\n \"label\": \"Raised\"\n },\n {\n \"value\": \"stroked\",\n \"label\": \"Stroked\"\n },\n {\n \"value\": \"flat\",\n \"label\": \"Flat\"\n },\n {\n \"value\": \"fab\",\n \"label\": \"Fab\"\n }\n ]\n },\n \"actions.submit.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"actions.submit.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n },\n {\n \"value\": \"basic\",\n \"label\": \"Basic\"\n }\n ]\n },\n \"sections[].headerAlign\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n }\n ]\n },\n \"sections[].appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"card\",\n \"label\": \"Card\"\n },\n {\n \"value\": \"plain\",\n \"label\": \"Plain\"\n },\n {\n \"value\": \"step\",\n \"label\": \"Step\"\n }\n ]\n },\n \"sections[].sectionHeader.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"avatar-image\",\n \"label\": \"Avatar image\"\n },\n {\n \"value\": \"avatar-initials\",\n \"label\": \"Avatar initials\"\n },\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n }\n ]\n },\n \"sections[].sectionHeader.emptyState\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"placeholder-avatar\",\n \"label\": \"Neutral placeholder\"\n },\n {\n \"value\": \"fallback-icon\",\n \"label\": \"Fallback icon\"\n },\n {\n \"value\": \"none\",\n \"label\": \"None\"\n }\n ]\n },\n \"sections[].sectionHeader.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"sections[].stepLabel\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"Dados básicos\",\n \"label\": \"Dados básicos\"\n },\n {\n \"value\": \"Detalhes\",\n \"label\": \"Detalhes\"\n },\n {\n \"value\": \"Confirmação\",\n \"label\": \"Confirmação\"\n }\n ]\n },\n \"sections[].titleStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"titleLarge\",\n \"label\": \"Title large\"\n },\n {\n \"value\": \"titleMedium\",\n \"label\": \"Title medium\"\n },\n {\n \"value\": \"titleSmall\",\n \"label\": \"Title small\"\n },\n {\n \"value\": \"headlineSmall\",\n \"label\": \"Headline small\"\n }\n ]\n },\n \"sections[].descriptionStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"bodyLarge\",\n \"label\": \"Body large\"\n },\n {\n \"value\": \"bodyMedium\",\n \"label\": \"Body medium\"\n },\n {\n \"value\": \"bodySmall\",\n \"label\": \"Body small\"\n }\n ]\n },\n \"sections[].rows[].columns[].align\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"end\",\n \"label\": \"End\"\n },\n {\n \"value\": \"stretch\",\n \"label\": \"Stretch\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].kind\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"richContent\",\n \"label\": \"Rich content\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].layout\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"block\",\n \"label\": \"Block\"\n },\n {\n \"value\": \"inline\",\n \"label\": \"Inline\"\n }\n ]\n },\n \"formRules[].targetType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"section\",\n \"label\": \"Section\"\n },\n {\n \"value\": \"row\",\n \"label\": \"Row\"\n },\n {\n \"value\": \"column\",\n \"label\": \"Column\"\n },\n {\n \"value\": \"action\",\n \"label\": \"Action\"\n },\n {\n \"value\": \"visualBlock\",\n \"label\": \"Visual block\"\n }\n ]\n },\n \"formRules[].context\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"visibility\",\n \"label\": \"Visibility\"\n },\n {\n \"value\": \"readOnly\",\n \"label\": \"Read only\"\n },\n {\n \"value\": \"style\",\n \"label\": \"Style\"\n },\n {\n \"value\": \"validation\",\n \"label\": \"Validation\"\n },\n {\n \"value\": \"notification\",\n \"label\": \"Notification\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"field.visibility.hide\",\n \"intentExamples\": [\n \"hide field\",\n \"ocultar campo\",\n \"esconder campo\",\n \"invisible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.visibility.show\",\n \"intentExamples\": [\n \"show field\",\n \"mostrar campo\",\n \"exibir campo\",\n \"visible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.label.set\",\n \"intentExamples\": [\n \"label\",\n \"rename field\",\n \"renomear campo\",\n \"titulo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"label\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.placeholder.set\",\n \"intentExamples\": [\n \"placeholder\",\n \"hint text\",\n \"texto de ajuda\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"placeholder\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.required.enable\",\n \"intentExamples\": [\n \"required\",\n \"obrigatorio\",\n \"mandatory\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.required.disable\",\n \"intentExamples\": [\n \"optional\",\n \"nao obrigatorio\",\n \"opcional\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.enable\",\n \"intentExamples\": [\n \"readonly\",\n \"somente leitura\",\n \"read only\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.disable\",\n \"intentExamples\": [\n \"editable\",\n \"editavel\",\n \"read write\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.enable\",\n \"intentExamples\": [\n \"disable field\",\n \"desabilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.disable\",\n \"intentExamples\": [\n \"enable field\",\n \"habilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.controlType.set\",\n \"intentExamples\": [\n \"control type\",\n \"tipo de campo\",\n \"controlType\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"controlType\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.prefix.set\",\n \"intentExamples\": [\n \"prefix icon\",\n \"icone prefixo\",\n \"icon before\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"prefixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.suffix.set\",\n \"intentExamples\": [\n \"suffix icon\",\n \"icone sufixo\",\n \"icon after\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"suffixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.title.set\",\n \"intentExamples\": [\n \"section title\",\n \"titulo da secao\",\n \"section name\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"title\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.description.set\",\n \"intentExamples\": [\n \"section description\",\n \"descricao da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"description\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.add\",\n \"intentExamples\": [\n \"add section\",\n \"adicionar secao\",\n \"nova secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{value}}\",\n \"title\": \"{{value}}\",\n \"rows\": []\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da seção é único e relevante.\"\n },\n {\n \"id\": \"section.remove\",\n \"intentExamples\": [\n \"remove section\",\n \"remover secao\",\n \"excluir secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"section.order.set\",\n \"intentExamples\": [\n \"order section\",\n \"reordenar secao\",\n \"mover secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_order\": \"{{value}}\"\n }\n ]\n },\n \"safetyNotes\": \"A reordenação de seções é uma operação que deve ser revisada.\"\n },\n {\n \"id\": \"row.add\",\n \"intentExamples\": [\n \"add row\",\n \"adicionar linha\",\n \"nova linha na secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"columns\": []\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da linha é único e relevante na seção.\"\n },\n {\n \"id\": \"row.remove\",\n \"intentExamples\": [\n \"remove row\",\n \"remover linha\",\n \"excluir linha da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.add\",\n \"intentExamples\": [\n \"add column\",\n \"adicionar coluna\",\n \"nova coluna na linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"items\": []\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da coluna é único e relevante na linha.\"\n },\n {\n \"id\": \"column.remove\",\n \"intentExamples\": [\n \"remove column\",\n \"remover coluna\",\n \"excluir coluna da linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.field.add\",\n \"intentExamples\": [\n \"add field to column\",\n \"adicionar campo a coluna\",\n \"colocar campo na coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"id\": \"field-{{value}}\",\n \"fieldName\": \"{{value}}\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"\n },\n {\n \"id\": \"column.field.remove\",\n \"intentExamples\": [\n \"remove field from column\",\n \"remover campo da coluna\",\n \"tirar campo da coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"fieldName\": \"{{value}}\",\n \"_remove\": true\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover um campo de uma coluna pode alterar o layout do formulário.\"\n },\n {\n \"id\": \"actions.submit.label.set\",\n \"intentExamples\": [\n \"submit label\",\n \"rotulo salvar\",\n \"texto botao enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.submit.visible.set\",\n \"intentExamples\": [\n \"show submit\",\n \"esconder salvar\",\n \"visibilidade enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.label.set\",\n \"intentExamples\": [\n \"cancel label\",\n \"rotulo cancelar\",\n \"texto botao cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.visible.set\",\n \"intentExamples\": [\n \"show cancel\",\n \"esconder cancelar\",\n \"visibilidade cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.label.set\",\n \"intentExamples\": [\n \"reset label\",\n \"rotulo resetar\",\n \"texto botao limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.visible.set\",\n \"intentExamples\": [\n \"show reset\",\n \"esconder reset\",\n \"visibilidade limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"rule.add.visibility\",\n \"intentExamples\": [\n \"add visibility rule\",\n \"regra de visibilidade\",\n \"campo condicional\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{value.id}}\",\n \"name\": \"{{value.name}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{target}}\"\n ],\n \"effect\": {\n \"condition\": \"{{value.condition}}\",\n \"properties\": {\n \"hidden\": false\n },\n \"propertiesWhenFalse\": {\n \"hidden\": true\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Criação de regras requer atenção à lógica e IDs de campos. Teste a regra após a criação.\"\n },\n {\n \"id\": \"rule.remove\",\n \"intentExamples\": [\n \"remove rule\",\n \"excluir regra\",\n \"apagar regra\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"\n },\n {\n \"id\": \"rule.add.dependency\",\n \"intentExamples\": [\n \"adicionar dependencia\",\n \"campo depende de\",\n \"mostrar se\",\n \"obrigatorio se\",\n \"desabilitar se\",\n \"campo condicional\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"triggerField\",\n \"type\": \"STRING\",\n \"description\": \"Campo que controla a regra (ex: tipoPessoa)\"\n },\n {\n \"name\": \"conditionValue\",\n \"type\": \"STRING\",\n \"description\": \"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado pela regra (ex: cnpj)\"\n },\n {\n \"name\": \"effectType\",\n \"type\": \"ENUM\",\n \"options\": [\n \"visibility\",\n \"required\",\n \"disabled\"\n ],\n \"description\": \"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"rule_{{params.triggerField}}_{{params.targetField}}\",\n \"name\": \"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.triggerField}} == \\\"{{params.conditionValue}}\\\"\",\n \"properties\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? false : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? true : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? true : undefined}}\"\n },\n \"propertiesWhenFalse\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? true : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? false : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? false : undefined}}\"\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"\n },\n {\n \"id\": \"rule.add.custom\",\n \"intentExamples\": [\n \"adicionar regra customizada\",\n \"regra complexa\",\n \"logica de formulario\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"id\",\n \"type\": \"STRING\",\n \"description\": \"ID único da regra\"\n },\n {\n \"name\": \"condition\",\n \"type\": \"STRING\",\n \"description\": \"Expressão condicional (ex: idade > 18 && possuiHabilitacao)\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado\"\n },\n {\n \"name\": \"propertyName\",\n \"type\": \"STRING\",\n \"description\": \"Propriedade afetada (hidden, required, disabled, readOnly)\"\n },\n {\n \"name\": \"valueIfTrue\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for verdadeira\"\n },\n {\n \"name\": \"valueIfFalse\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for falsa\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{params.id}}\",\n \"name\": \"Regra Customizada: {{params.id}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.condition}}\",\n \"properties\": {\n \"{{params.propertyName}}\": \"{{params.valueIfTrue}}\"\n },\n \"propertiesWhenFalse\": {\n \"{{params.propertyName}}\": \"{{params.valueIfFalse}}\"\n }\n }\n }\n ]\n }\n }\n ],\n \"fieldResolvers\": {\n \"fieldMetadata[]\": [\n \"name\",\n \"label\"\n ],\n \"sections[]\": [\n \"id\",\n \"title\"\n ],\n \"sections[].rows[].columns[].items[]\": [\n \"id\",\n \"fieldName\"\n ],\n \"sections[].rows[].columns[].fields[]\": []\n },\n \"hints\": [\n \"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\n \"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.\",\n \"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\n \"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\n \"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.\",\n \"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\n \"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\n \"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.\",\n \"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.\",\n \"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\n \"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\n \"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\n \"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\n \"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\n \"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\n \"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\n \"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\n \"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\n \"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\n \"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"\n ]\n }\n}",
|
|
14027
|
+
"content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"fieldMetadata[].controlType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"input\",\n \"label\": \"Input\"\n },\n {\n \"value\": \"textarea\",\n \"label\": \"Textarea\"\n },\n {\n \"value\": \"email\",\n \"label\": \"Email\"\n },\n {\n \"value\": \"password\",\n \"label\": \"Password\"\n },\n {\n \"value\": \"search\",\n \"label\": \"Search\"\n },\n {\n \"value\": \"url\",\n \"label\": \"URL\"\n },\n {\n \"value\": \"phone\",\n \"label\": \"Phone\"\n },\n {\n \"value\": \"cpfCnpjInput\",\n \"label\": \"CPF/CNPJ\"\n },\n {\n \"value\": \"numericTextBox\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"priceRange\",\n \"label\": \"Price range\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date picker\"\n },\n {\n \"value\": \"dateRange\",\n \"label\": \"Date range\"\n },\n {\n \"value\": \"dateInput\",\n \"label\": \"Date input\"\n },\n {\n \"value\": \"dateTime\",\n \"label\": \"Datetime\"\n },\n {\n \"value\": \"dateTimeRange\",\n \"label\": \"Datetime range\"\n },\n {\n \"value\": \"dateTimeLocal\",\n \"label\": \"Datetime local\"\n },\n {\n \"value\": \"time\",\n \"label\": \"Time input\"\n },\n {\n \"value\": \"timePicker\",\n \"label\": \"Time picker\"\n },\n {\n \"value\": \"timeRange\",\n \"label\": \"Time range\"\n },\n {\n \"value\": \"week\",\n \"label\": \"Week input\"\n },\n {\n \"value\": \"month\",\n \"label\": \"Month input\"\n },\n {\n \"value\": \"year\",\n \"label\": \"Year input\"\n },\n {\n \"value\": \"select\",\n \"label\": \"Select\"\n },\n {\n \"value\": \"multiSelect\",\n \"label\": \"Multi select\"\n },\n {\n \"value\": \"multiSelectTree\",\n \"label\": \"Multi select tree\"\n },\n {\n \"value\": \"treeSelect\",\n \"label\": \"Tree select\"\n },\n {\n \"value\": \"transferList\",\n \"label\": \"Transfer list\"\n },\n {\n \"value\": \"autoComplete\",\n \"label\": \"Autocomplete\"\n },\n {\n \"value\": \"searchable-select\",\n \"label\": \"Searchable select\"\n },\n {\n \"value\": \"async-select\",\n \"label\": \"Async select\"\n },\n {\n \"value\": \"radio\",\n \"label\": \"Radio group\"\n },\n {\n \"value\": \"checkbox\",\n \"label\": \"Checkbox group\"\n },\n {\n \"value\": \"selectionList\",\n \"label\": \"Selection list\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"buttonToggle\",\n \"label\": \"Button toggle\"\n },\n {\n \"value\": \"slider\",\n \"label\": \"Slider\"\n },\n {\n \"value\": \"rangeSlider\",\n \"label\": \"Range slider\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"chipInput\",\n \"label\": \"Chips\"\n },\n {\n \"value\": \"chipList\",\n \"label\": \"Chip list\"\n },\n {\n \"value\": \"upload\",\n \"label\": \"File upload\"\n },\n {\n \"value\": \"color\",\n \"label\": \"Color input\"\n },\n {\n \"value\": \"colorPicker\",\n \"label\": \"Color picker\"\n },\n {\n \"value\": \"cronBuilder\",\n \"label\": \"Cron builder\"\n }\n ]\n },\n \"fieldMetadata[].source\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"schema\",\n \"label\": \"Schema field\"\n },\n {\n \"value\": \"local\",\n \"label\": \"Local field\"\n }\n ]\n },\n \"fieldMetadata[].submitPolicy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"omit\",\n \"label\": \"Omit from submit payload\"\n },\n {\n \"value\": \"include\",\n \"label\": \"Include in submit payload\"\n },\n {\n \"value\": \"includeWhenDirty\",\n \"label\": \"Include only when dirty\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fill\",\n \"label\": \"Fill\"\n },\n {\n \"value\": \"outline\",\n \"label\": \"Outline\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.floatLabel\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"value\": \"always\",\n \"label\": \"Always\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"dense\",\n \"label\": \"Dense\"\n }\n ]\n },\n \"actions.position\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"left\",\n \"label\": \"Left\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"right\",\n \"label\": \"Right\"\n },\n {\n \"value\": \"justified\",\n \"label\": \"Justified\"\n },\n {\n \"value\": \"split\",\n \"label\": \"Split\"\n }\n ]\n },\n \"actions.orientation\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"horizontal\",\n \"label\": \"Horizontal\"\n },\n {\n \"value\": \"vertical\",\n \"label\": \"Vertical\"\n }\n ]\n },\n \"actions.spacing\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"normal\",\n \"label\": \"Normal\"\n },\n {\n \"value\": \"spacious\",\n \"label\": \"Spacious\"\n }\n ]\n },\n \"actions.placement\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"insideLastSection\",\n \"label\": \"Inside last section\"\n },\n {\n \"value\": \"afterSections\",\n \"label\": \"After sections\"\n },\n {\n \"value\": \"top\",\n \"label\": \"Top\"\n }\n ]\n },\n \"actions.submit.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"submit\",\n \"label\": \"Submit\"\n },\n {\n \"value\": \"reset\",\n \"label\": \"Reset\"\n }\n ]\n },\n \"actions.submit.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"raised\",\n \"label\": \"Raised\"\n },\n {\n \"value\": \"stroked\",\n \"label\": \"Stroked\"\n },\n {\n \"value\": \"flat\",\n \"label\": \"Flat\"\n },\n {\n \"value\": \"fab\",\n \"label\": \"Fab\"\n }\n ]\n },\n \"actions.submit.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"actions.submit.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n },\n {\n \"value\": \"basic\",\n \"label\": \"Basic\"\n }\n ]\n },\n \"sections[].headerAlign\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n }\n ]\n },\n \"sections[].appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"card\",\n \"label\": \"Card\"\n },\n {\n \"value\": \"plain\",\n \"label\": \"Plain\"\n },\n {\n \"value\": \"step\",\n \"label\": \"Step\"\n }\n ]\n },\n \"sections[].sectionHeader.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"avatar-image\",\n \"label\": \"Avatar image\"\n },\n {\n \"value\": \"avatar-initials\",\n \"label\": \"Avatar initials\"\n },\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n }\n ]\n },\n \"sections[].sectionHeader.emptyState\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"placeholder-avatar\",\n \"label\": \"Neutral placeholder\"\n },\n {\n \"value\": \"fallback-icon\",\n \"label\": \"Fallback icon\"\n },\n {\n \"value\": \"none\",\n \"label\": \"None\"\n }\n ]\n },\n \"sections[].sectionHeader.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"sections[].stepLabel\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"Dados básicos\",\n \"label\": \"Dados básicos\"\n },\n {\n \"value\": \"Detalhes\",\n \"label\": \"Detalhes\"\n },\n {\n \"value\": \"Confirmação\",\n \"label\": \"Confirmação\"\n }\n ]\n },\n \"sections[].titleStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"titleLarge\",\n \"label\": \"Title large\"\n },\n {\n \"value\": \"titleMedium\",\n \"label\": \"Title medium\"\n },\n {\n \"value\": \"titleSmall\",\n \"label\": \"Title small\"\n },\n {\n \"value\": \"headlineSmall\",\n \"label\": \"Headline small\"\n }\n ]\n },\n \"sections[].descriptionStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"bodyLarge\",\n \"label\": \"Body large\"\n },\n {\n \"value\": \"bodyMedium\",\n \"label\": \"Body medium\"\n },\n {\n \"value\": \"bodySmall\",\n \"label\": \"Body small\"\n }\n ]\n },\n \"sections[].rows[].columns[].align\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"end\",\n \"label\": \"End\"\n },\n {\n \"value\": \"stretch\",\n \"label\": \"Stretch\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].kind\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"richContent\",\n \"label\": \"Rich content\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].layout\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"block\",\n \"label\": \"Block\"\n },\n {\n \"value\": \"inline\",\n \"label\": \"Inline\"\n }\n ]\n },\n \"formRules[].targetType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"section\",\n \"label\": \"Section\"\n },\n {\n \"value\": \"row\",\n \"label\": \"Row\"\n },\n {\n \"value\": \"column\",\n \"label\": \"Column\"\n },\n {\n \"value\": \"action\",\n \"label\": \"Action\"\n },\n {\n \"value\": \"visualBlock\",\n \"label\": \"Visual block\"\n }\n ]\n },\n \"formRules[].context\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"visibility\",\n \"label\": \"Visibility\"\n },\n {\n \"value\": \"readOnly\",\n \"label\": \"Read only\"\n },\n {\n \"value\": \"style\",\n \"label\": \"Style\"\n },\n {\n \"value\": \"validation\",\n \"label\": \"Validation\"\n },\n {\n \"value\": \"notification\",\n \"label\": \"Notification\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"field.visibility.hide\",\n \"intentExamples\": [\n \"hide field\",\n \"ocultar campo\",\n \"esconder campo\",\n \"invisible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.visibility.show\",\n \"intentExamples\": [\n \"show field\",\n \"mostrar campo\",\n \"exibir campo\",\n \"visible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.label.set\",\n \"intentExamples\": [\n \"label\",\n \"rename field\",\n \"renomear campo\",\n \"titulo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"label\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.placeholder.set\",\n \"intentExamples\": [\n \"placeholder\",\n \"hint text\",\n \"texto de ajuda\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"placeholder\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.required.enable\",\n \"intentExamples\": [\n \"required\",\n \"obrigatorio\",\n \"mandatory\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.required.disable\",\n \"intentExamples\": [\n \"optional\",\n \"nao obrigatorio\",\n \"opcional\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.enable\",\n \"intentExamples\": [\n \"readonly\",\n \"somente leitura\",\n \"read only\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.disable\",\n \"intentExamples\": [\n \"editable\",\n \"editavel\",\n \"read write\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.enable\",\n \"intentExamples\": [\n \"disable field\",\n \"desabilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.disable\",\n \"intentExamples\": [\n \"enable field\",\n \"habilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.controlType.set\",\n \"intentExamples\": [\n \"control type\",\n \"tipo de campo\",\n \"controlType\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"controlType\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.prefix.set\",\n \"intentExamples\": [\n \"prefix icon\",\n \"icone prefixo\",\n \"icon before\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"prefixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.suffix.set\",\n \"intentExamples\": [\n \"suffix icon\",\n \"icone sufixo\",\n \"icon after\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"suffixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.title.set\",\n \"intentExamples\": [\n \"section title\",\n \"titulo da secao\",\n \"section name\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"title\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.description.set\",\n \"intentExamples\": [\n \"section description\",\n \"descricao da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"description\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.add\",\n \"intentExamples\": [\n \"add section\",\n \"adicionar secao\",\n \"nova secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{value}}\",\n \"title\": \"{{value}}\",\n \"rows\": []\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da seção é único e relevante.\"\n },\n {\n \"id\": \"section.remove\",\n \"intentExamples\": [\n \"remove section\",\n \"remover secao\",\n \"excluir secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"section.order.set\",\n \"intentExamples\": [\n \"order section\",\n \"reordenar secao\",\n \"mover secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_order\": \"{{value}}\"\n }\n ]\n },\n \"safetyNotes\": \"A reordenação de seções é uma operação que deve ser revisada.\"\n },\n {\n \"id\": \"row.add\",\n \"intentExamples\": [\n \"add row\",\n \"adicionar linha\",\n \"nova linha na secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"columns\": []\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da linha é único e relevante na seção.\"\n },\n {\n \"id\": \"row.remove\",\n \"intentExamples\": [\n \"remove row\",\n \"remover linha\",\n \"excluir linha da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.add\",\n \"intentExamples\": [\n \"add column\",\n \"adicionar coluna\",\n \"nova coluna na linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"items\": []\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da coluna é único e relevante na linha.\"\n },\n {\n \"id\": \"column.remove\",\n \"intentExamples\": [\n \"remove column\",\n \"remover coluna\",\n \"excluir coluna da linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.field.add\",\n \"intentExamples\": [\n \"add field to column\",\n \"adicionar campo a coluna\",\n \"colocar campo na coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"id\": \"field-{{value}}\",\n \"fieldName\": \"{{value}}\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"\n },\n {\n \"id\": \"column.field.remove\",\n \"intentExamples\": [\n \"remove field from column\",\n \"remover campo da coluna\",\n \"tirar campo da coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"fieldName\": \"{{value}}\",\n \"_remove\": true\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover um campo de uma coluna pode alterar o layout do formulário.\"\n },\n {\n \"id\": \"actions.submit.label.set\",\n \"intentExamples\": [\n \"submit label\",\n \"rotulo salvar\",\n \"texto botao enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.submit.visible.set\",\n \"intentExamples\": [\n \"show submit\",\n \"esconder salvar\",\n \"visibilidade enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.label.set\",\n \"intentExamples\": [\n \"cancel label\",\n \"rotulo cancelar\",\n \"texto botao cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.visible.set\",\n \"intentExamples\": [\n \"show cancel\",\n \"esconder cancelar\",\n \"visibilidade cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.label.set\",\n \"intentExamples\": [\n \"reset label\",\n \"rotulo resetar\",\n \"texto botao limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.visible.set\",\n \"intentExamples\": [\n \"show reset\",\n \"esconder reset\",\n \"visibilidade limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"rule.add.visibility\",\n \"intentExamples\": [\n \"add visibility rule\",\n \"regra de visibilidade\",\n \"campo condicional\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{value.id}}\",\n \"name\": \"{{value.name}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{target}}\"\n ],\n \"effect\": {\n \"condition\": \"{{value.condition}}\",\n \"properties\": {\n \"hidden\": false\n },\n \"propertiesWhenFalse\": {\n \"hidden\": true\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao.\"\n },\n {\n \"id\": \"rule.remove\",\n \"intentExamples\": [\n \"remove rule\",\n \"excluir regra\",\n \"apagar regra\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"\n },\n {\n \"id\": \"rule.add.dependency\",\n \"intentExamples\": [\n \"adicionar dependencia\",\n \"campo depende de\",\n \"mostrar se\",\n \"obrigatorio se\",\n \"desabilitar se\",\n \"campo condicional\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"triggerField\",\n \"type\": \"STRING\",\n \"description\": \"Campo que controla a regra (ex: tipoPessoa)\"\n },\n {\n \"name\": \"conditionValue\",\n \"type\": \"STRING\",\n \"description\": \"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado pela regra (ex: cnpj)\"\n },\n {\n \"name\": \"effectType\",\n \"type\": \"ENUM\",\n \"options\": [\n \"visibility\",\n \"required\",\n \"disabled\"\n ],\n \"description\": \"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"rule_{{params.triggerField}}_{{params.targetField}}\",\n \"name\": \"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"{{params.triggerField}}\"\n },\n \"{{params.conditionValue}}\"\n ]\n },\n \"properties\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? false : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? true : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? true : undefined}}\"\n },\n \"propertiesWhenFalse\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? true : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? false : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? false : undefined}}\"\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"\n },\n {\n \"id\": \"rule.add.custom\",\n \"intentExamples\": [\n \"adicionar regra customizada\",\n \"regra complexa\",\n \"logica de formulario\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"id\",\n \"type\": \"STRING\",\n \"description\": \"ID único da regra\"\n },\n {\n \"name\": \"condition\",\n \"type\": \"STRING\",\n \"description\": \"Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \\\"and\\\": [{ \\\">\\\": [{ \\\"var\\\": \\\"idade\\\" }, 18] }, { \\\"==\\\": [{ \\\"var\\\": \\\"possuiHabilitacao\\\" }, true] }] })\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado\"\n },\n {\n \"name\": \"propertyName\",\n \"type\": \"STRING\",\n \"description\": \"Propriedade afetada (hidden, required, disabled, readOnly)\"\n },\n {\n \"name\": \"valueIfTrue\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for verdadeira\"\n },\n {\n \"name\": \"valueIfFalse\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for falsa\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{params.id}}\",\n \"name\": \"Regra Customizada: {{params.id}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.condition}}\",\n \"properties\": {\n \"{{params.propertyName}}\": \"{{params.valueIfTrue}}\"\n },\n \"propertiesWhenFalse\": {\n \"{{params.propertyName}}\": \"{{params.valueIfFalse}}\"\n }\n }\n }\n ]\n }\n }\n ],\n \"fieldResolvers\": {\n \"fieldMetadata[]\": [\n \"name\",\n \"label\"\n ],\n \"sections[]\": [\n \"id\",\n \"title\"\n ],\n \"sections[].rows[].columns[].items[]\": [\n \"id\",\n \"fieldName\"\n ],\n \"sections[].rows[].columns[].fields[]\": []\n },\n \"hints\": [\n \"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\n \"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.\",\n \"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\n \"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\n \"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.\",\n \"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\n \"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\n \"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.\",\n \"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.\",\n \"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\n \"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\n \"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\n \"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\n \"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\n \"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\n \"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\n \"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\n \"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\n \"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\n \"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"\n ]\n }\n}",
|
|
14014
14028
|
"sourcePointer": "praxis-ui-angular/projects/praxis-dynamic-form/src/lib/ai/filter-form-context-pack.ts",
|
|
14015
|
-
"contentHash": "
|
|
14029
|
+
"contentHash": "fce0638895fb6284d9f1f6c896a2eeb5945f4877b418f942a1872f60b1541c15",
|
|
14016
14030
|
"sourceKind": "component_definition",
|
|
14017
14031
|
"sourceId": "praxis-filter-form",
|
|
14018
14032
|
"corpusVersion": "1.0.0"
|