@praxisui/crud 10.0.0-rc.32 → 10.0.0-rc.34

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-10-17T14:44:09.509Z",
3
+ "generatedAt": "2026-10-19T09:48:25.455Z",
4
4
  "packageName": "@praxisui/crud",
5
- "packageVersion": "10.0.0-rc.32",
5
+ "packageVersion": "10.0.0-rc.34",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 2,
@@ -3514,6 +3514,185 @@
3514
3514
  "responsive em card"
3515
3515
  ]
3516
3516
  },
3517
+ {
3518
+ "path": "fieldMetadata[].presentation.visualization.scaleScope",
3519
+ "category": "layout",
3520
+ "valueKind": "enum",
3521
+ "allowedValues": [
3522
+ "row",
3523
+ "page"
3524
+ ],
3525
+ "description": "Escopo de normalizacao de escala para series e valores em colecoes: row (local por linha) ou page (sincronizado na pagina visivel).",
3526
+ "intentExamples": [
3527
+ "sincronizar escala de sparklines na pagina",
3528
+ "comparar amplitude entre linhas"
3529
+ ]
3530
+ },
3531
+ {
3532
+ "path": "fieldMetadata[].presentation.visualization.tone",
3533
+ "category": "appearance",
3534
+ "valueKind": "enum",
3535
+ "allowedValues": [
3536
+ "neutral",
3537
+ "info",
3538
+ "success",
3539
+ "warning",
3540
+ "danger",
3541
+ "critical"
3542
+ ],
3543
+ "description": "Tom semantico estatico da micro visualizacao.",
3544
+ "intentExamples": [
3545
+ "neutral",
3546
+ "success",
3547
+ "warning",
3548
+ "danger",
3549
+ "critical"
3550
+ ]
3551
+ },
3552
+ {
3553
+ "path": "fieldMetadata[].presentation.visualization.toneExpr",
3554
+ "category": "appearance",
3555
+ "valueKind": "object",
3556
+ "description": "Expressao Json Logic ou caminho row.<campo> para resolver dinamicamente o tom semantico da micro visualizacao.",
3557
+ "safetyNotes": "Deve retornar apenas um dos tons permitidos em presentationVisualizationTone."
3558
+ },
3559
+ {
3560
+ "path": "fieldMetadata[].presentation.visualization.valueExpr",
3561
+ "category": "behavior",
3562
+ "valueKind": "object",
3563
+ "description": "Caminho row.<campo> ou expressao Json Logic para obter o valor principal da micro visualizacao.",
3564
+ "intentExamples": [
3565
+ "row.slaValue",
3566
+ "row.progresso"
3567
+ ]
3568
+ },
3569
+ {
3570
+ "path": "fieldMetadata[].presentation.visualization.valueSuffix",
3571
+ "category": "appearance",
3572
+ "valueKind": "string",
3573
+ "description": "Sufixo de unidade anexado ao valor numerico formatado (ex: \"%\", \" pts\", \" ms\", \" d\").",
3574
+ "intentExamples": [
3575
+ "mostrar % no bullet",
3576
+ "adicionar sufixo pts no radial"
3577
+ ]
3578
+ },
3579
+ {
3580
+ "path": "fieldMetadata[].presentation.visualization.compactValue",
3581
+ "category": "appearance",
3582
+ "valueKind": "boolean",
3583
+ "description": "Formata valores numericos em notacao compacta (ex: 1.2M, 45.3K) para celulas densas.",
3584
+ "intentExamples": [
3585
+ "compactar valores financeiros grandes",
3586
+ "mostrar 1.2M em comparison"
3587
+ ]
3588
+ },
3589
+ {
3590
+ "path": "fieldMetadata[].presentation.visualization.min",
3591
+ "category": "behavior",
3592
+ "valueKind": "number",
3593
+ "description": "Limite minimo explicito da escala numerica."
3594
+ },
3595
+ {
3596
+ "path": "fieldMetadata[].presentation.visualization.max",
3597
+ "category": "behavior",
3598
+ "valueKind": "number",
3599
+ "description": "Limite maximo explicito da escala numerica."
3600
+ },
3601
+ {
3602
+ "path": "fieldMetadata[].presentation.visualization.total",
3603
+ "category": "behavior",
3604
+ "valueKind": "number",
3605
+ "description": "Total explicito para proporcionalidade em stackedBar ou radial."
3606
+ },
3607
+ {
3608
+ "path": "fieldMetadata[].presentation.visualization.target",
3609
+ "category": "behavior",
3610
+ "valueKind": "number",
3611
+ "description": "Meta fixa para comparacao em bullet."
3612
+ },
3613
+ {
3614
+ "path": "fieldMetadata[].presentation.visualization.targetExpr",
3615
+ "category": "behavior",
3616
+ "valueKind": "object",
3617
+ "description": "Caminho row.<campo> ou expressao Json Logic para obter a meta por linha em bullet.",
3618
+ "intentExamples": [
3619
+ "row.metaSla",
3620
+ "row.target"
3621
+ ]
3622
+ },
3623
+ {
3624
+ "path": "fieldMetadata[].presentation.visualization.baseline",
3625
+ "category": "behavior",
3626
+ "valueKind": "number",
3627
+ "description": "Valor de referencia fixo para comparison ou delta."
3628
+ },
3629
+ {
3630
+ "path": "fieldMetadata[].presentation.visualization.baselineExpr",
3631
+ "category": "behavior",
3632
+ "valueKind": "object",
3633
+ "description": "Caminho row.<campo> ou expressao Json Logic para obter o valor de referencia (baseline) por linha em comparison ou delta.",
3634
+ "intentExamples": [
3635
+ "row.orcamentoPrevisto",
3636
+ "row.indenizacoesTotal"
3637
+ ]
3638
+ },
3639
+ {
3640
+ "path": "fieldMetadata[].presentation.visualization.pointsExpr",
3641
+ "category": "behavior",
3642
+ "valueKind": "object",
3643
+ "description": "Caminho row.<campo> ou expressao Json Logic para serie de pontos em line, area ou column.",
3644
+ "intentExamples": [
3645
+ "row.trend",
3646
+ "row.historicoMensal"
3647
+ ]
3648
+ },
3649
+ {
3650
+ "path": "fieldMetadata[].presentation.visualization.segmentsExpr",
3651
+ "category": "behavior",
3652
+ "valueKind": "object",
3653
+ "description": "Caminho row.<campo> ou expressao Json Logic para lista de segmentos em stackedBar.",
3654
+ "intentExamples": [
3655
+ "row.capacitySegments",
3656
+ "row.distribuicao"
3657
+ ]
3658
+ },
3659
+ {
3660
+ "path": "fieldMetadata[].presentation.visualization.itemsExpr",
3661
+ "category": "behavior",
3662
+ "valueKind": "object",
3663
+ "description": "Caminho row.<campo> ou expressao Json Logic para lista de etapas em processFlow.",
3664
+ "intentExamples": [
3665
+ "row.flowSteps",
3666
+ "row.etapasAprovacao"
3667
+ ]
3668
+ },
3669
+ {
3670
+ "path": "fieldMetadata[].presentation.visualization.thresholds",
3671
+ "category": "appearance",
3672
+ "valueKind": "array",
3673
+ "description": "Faixas e limiares semanticos declarativos ({ value, min, max, tone, label }) para coloracao automatica e faixas qualitativas de bullet.",
3674
+ "intentExamples": [
3675
+ "[{ \"value\": 0, \"tone\": \"danger\" }, { \"value\": 60, \"tone\": \"warning\" }, { \"value\": 85, \"tone\": \"success\" }]"
3676
+ ]
3677
+ },
3678
+ {
3679
+ "path": "fieldMetadata[].presentation.visualization.stepLabelLineClamp",
3680
+ "category": "layout",
3681
+ "valueKind": "number",
3682
+ "description": "Numero maximo de linhas (1 ou 2) para rotulos de etapas em processFlow."
3683
+ },
3684
+ {
3685
+ "path": "fieldMetadata[].presentation.visualization.ariaLabel",
3686
+ "category": "accessibility",
3687
+ "valueKind": "string",
3688
+ "description": "Rotulo acessivel explicito da micro visualizacao."
3689
+ },
3690
+ {
3691
+ "path": "fieldMetadata[].presentation.visualization.ariaLabelExpr",
3692
+ "category": "accessibility",
3693
+ "valueKind": "object",
3694
+ "description": "Caminho row.<campo> ou expressao Json Logic para compor o rotulo acessivel por linha."
3695
+ },
3517
3696
  {
3518
3697
  "path": "fieldMetadata[].presentation.visualization.fallbackText",
3519
3698
  "category": "accessibility",
@@ -3521,6 +3700,12 @@
3521
3700
  "description": "Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.",
3522
3701
  "safetyNotes": "Deve explicar valor, unidade, meta, tendencia ou estado quando aplicavel."
3523
3702
  },
3703
+ {
3704
+ "path": "fieldMetadata[].presentation.visualization.fallbackTextExpr",
3705
+ "category": "accessibility",
3706
+ "valueKind": "object",
3707
+ "description": "Caminho row.<campo> ou expressao Json Logic para gerar o fallback textual dinamico por linha."
3708
+ },
3524
3709
  {
3525
3710
  "path": "fieldMetadata[].presentationRules",
3526
3711
  "category": "appearance",
@@ -3569,6 +3754,30 @@
3569
3754
  "exibir como porcentagem"
3570
3755
  ]
3571
3756
  },
3757
+ {
3758
+ "path": "fieldMetadata[].inlineVisualStyle",
3759
+ "category": "appearance",
3760
+ "valueKind": "enum",
3761
+ "allowedValues": [
3762
+ "compact",
3763
+ "graphic"
3764
+ ],
3765
+ "description": "Estilo visual para controles numericos percentuais inline (compact: pilula liquida com micro-anel e popover; graphic: card expandido com donut, trilho graduado e presets).",
3766
+ "intentExamples": [
3767
+ "usar percentual compacto na barra",
3768
+ "exibir card grafico de percentual"
3769
+ ]
3770
+ },
3771
+ {
3772
+ "path": "fieldMetadata[].percentPresets",
3773
+ "category": "data",
3774
+ "valueKind": "array",
3775
+ "description": "Lista de percentuais rapidos exibidos nos botoes de preset do Percent Studio (ex.: [0, 25, 50, 75, 100]).",
3776
+ "intentExamples": [
3777
+ "atalhos de percentual 10, 25, 50 e 100%",
3778
+ "definir presets de porcentagem"
3779
+ ]
3780
+ },
3572
3781
  {
3573
3782
  "path": "fieldMetadata[].validators",
3574
3783
  "category": "validation",
@@ -4415,6 +4624,76 @@
4415
4624
  "valueKind": "object",
4416
4625
  "description": "FormConfig completo (usar catalogo de formulario)."
4417
4626
  },
4627
+ {
4628
+ "path": "kpiBand",
4629
+ "category": "table",
4630
+ "valueKind": "object",
4631
+ "description": "Faixa executiva declarativa de KPIs acima da listagem principal."
4632
+ },
4633
+ {
4634
+ "path": "kpiBand.source",
4635
+ "category": "table",
4636
+ "valueKind": "string",
4637
+ "description": "Path relativo do endpoint de KPIs/stats (ex: /stats, /stats/group-by)."
4638
+ },
4639
+ {
4640
+ "path": "kpiBand.method",
4641
+ "category": "table",
4642
+ "valueKind": "enum",
4643
+ "allowedValues": [
4644
+ "GET",
4645
+ "POST"
4646
+ ],
4647
+ "description": "Metodo HTTP da consulta de KPIs (GET ou POST)."
4648
+ },
4649
+ {
4650
+ "path": "kpiBand.payload",
4651
+ "category": "table",
4652
+ "valueKind": "object",
4653
+ "description": "Payload JSON enviado quando kpiBand.method = POST."
4654
+ },
4655
+ {
4656
+ "path": "kpiBand.cards",
4657
+ "category": "table",
4658
+ "valueKind": "array",
4659
+ "description": "Lista declarativa de cards executivos da faixa de KPIs."
4660
+ },
4661
+ {
4662
+ "path": "kpiBand.cards[].id",
4663
+ "category": "table",
4664
+ "valueKind": "string",
4665
+ "description": "Identificador estavel do card de KPI."
4666
+ },
4667
+ {
4668
+ "path": "kpiBand.cards[].label",
4669
+ "category": "table",
4670
+ "valueKind": "string",
4671
+ "description": "Rotulo executivo do card de KPI."
4672
+ },
4673
+ {
4674
+ "path": "kpiBand.cards[].icon",
4675
+ "category": "table",
4676
+ "valueKind": "string",
4677
+ "description": "Icone Material opcional do card de KPI."
4678
+ },
4679
+ {
4680
+ "path": "kpiBand.cards[].valueExpr",
4681
+ "category": "table",
4682
+ "valueKind": "string",
4683
+ "description": "Dot-path no payload de stats com suporte a pipes declarativos CSP-safe (ex: totalCount | default:0 | number)."
4684
+ },
4685
+ {
4686
+ "path": "kpiBand.cards[].captionExpr",
4687
+ "category": "table",
4688
+ "valueKind": "string",
4689
+ "description": "Subtitulo ou expressao declarativa complementar com suporte a pipes CSP-safe."
4690
+ },
4691
+ {
4692
+ "path": "kpiBand.cards[].clickFilter",
4693
+ "category": "table",
4694
+ "valueKind": "object",
4695
+ "description": "Mapa declarativo de filtro rapido aplicado na tabela ao clicar no card de KPI."
4696
+ },
4418
4697
  {
4419
4698
  "path": "defaults",
4420
4699
  "category": "defaults",
@@ -4759,7 +5038,8 @@
4759
5038
  ],
4760
5039
  "componentCapabilityNotes": [
4761
5040
  "CrudMetadata agrega TableConfig e FormConfig; use os catalogos de tabela e formulario para detalhes.",
4762
- "actions[] herda campos de RowAction e ToolbarAction; combine com openMode/route/formId quando aplicavel."
5041
+ "actions[] herda campos de RowAction e ToolbarAction; combine com openMode/route/formId quando aplicavel.",
5042
+ "kpiBand renderiza cards executivos orientados a endpoint ou projecao declarativa; valueExpr e captionExpr suportam dot-paths e pipes declarativos CSP-safe (default:<fallback>, number, round[:decimals], percent[:decimals], currency[:code], uppercase, lowercase)."
4763
5043
  ],
4764
5044
  "componentContext": {
4765
5045
  "version": "v1",
@@ -5835,13 +6115,32 @@
5835
6115
  "enabled": {
5836
6116
  "type": "boolean"
5837
6117
  },
6118
+ "columns": {
6119
+ "enum": [
6120
+ 2,
6121
+ 3,
6122
+ 4
6123
+ ]
6124
+ },
6125
+ "source": {
6126
+ "type": "string",
6127
+ "description": "Endpoint de telemetria agregada (/stats/group-by ou /filter?page=0&size=1)."
6128
+ },
6129
+ "method": {
6130
+ "enum": [
6131
+ "GET",
6132
+ "POST"
6133
+ ]
6134
+ },
6135
+ "payload": {
6136
+ "type": "object"
6137
+ },
5838
6138
  "cards": {
5839
6139
  "type": "array",
5840
6140
  "items": {
5841
6141
  "type": "object",
5842
6142
  "required": [
5843
- "label",
5844
- "value"
6143
+ "label"
5845
6144
  ],
5846
6145
  "properties": {
5847
6146
  "id": {
@@ -5856,9 +6155,17 @@
5856
6155
  "number"
5857
6156
  ]
5858
6157
  },
6158
+ "valueExpr": {
6159
+ "type": "string",
6160
+ "description": "Expressão ou template CSP-safe com pipes declarativos (ex.: '${totalCount | number | default:0} Registros')."
6161
+ },
5859
6162
  "caption": {
5860
6163
  "type": "string"
5861
6164
  },
6165
+ "captionExpr": {
6166
+ "type": "string",
6167
+ "description": "Expressão ou template CSP-safe para legenda com pipes declarativos (ex.: '(${((byKey.true / totalCount) * 100) | round:1 | default:0}%)')."
6168
+ },
5862
6169
  "icon": {
5863
6170
  "type": "string"
5864
6171
  },
@@ -5871,6 +6178,16 @@
5871
6178
  "danger"
5872
6179
  ]
5873
6180
  },
6181
+ "tone": {
6182
+ "enum": [
6183
+ "neutral",
6184
+ "primary",
6185
+ "info",
6186
+ "success",
6187
+ "warning",
6188
+ "danger"
6189
+ ]
6190
+ },
5874
6191
  "filter": {
5875
6192
  "type": "object"
5876
6193
  }
@@ -5971,13 +6288,32 @@
5971
6288
  "enabled": {
5972
6289
  "type": "boolean"
5973
6290
  },
6291
+ "columns": {
6292
+ "enum": [
6293
+ 2,
6294
+ 3,
6295
+ 4
6296
+ ]
6297
+ },
6298
+ "source": {
6299
+ "type": "string",
6300
+ "description": "Endpoint de telemetria agregada (/stats/group-by ou /filter?page=0&size=1)."
6301
+ },
6302
+ "method": {
6303
+ "enum": [
6304
+ "GET",
6305
+ "POST"
6306
+ ]
6307
+ },
6308
+ "payload": {
6309
+ "type": "object"
6310
+ },
5974
6311
  "cards": {
5975
6312
  "type": "array",
5976
6313
  "items": {
5977
6314
  "type": "object",
5978
6315
  "required": [
5979
- "label",
5980
- "value"
6316
+ "label"
5981
6317
  ],
5982
6318
  "properties": {
5983
6319
  "id": {
@@ -5992,9 +6328,17 @@
5992
6328
  "number"
5993
6329
  ]
5994
6330
  },
6331
+ "valueExpr": {
6332
+ "type": "string",
6333
+ "description": "Expressão ou template CSP-safe com pipes declarativos (ex.: '${totalCount | number | default:0} Registros')."
6334
+ },
5995
6335
  "caption": {
5996
6336
  "type": "string"
5997
6337
  },
6338
+ "captionExpr": {
6339
+ "type": "string",
6340
+ "description": "Expressão ou template CSP-safe para legenda com pipes declarativos (ex.: '(${((byKey.true / totalCount) * 100) | round:1 | default:0}%)')."
6341
+ },
5998
6342
  "icon": {
5999
6343
  "type": "string"
6000
6344
  },
@@ -6007,6 +6351,16 @@
6007
6351
  "danger"
6008
6352
  ]
6009
6353
  },
6354
+ "tone": {
6355
+ "enum": [
6356
+ "neutral",
6357
+ "primary",
6358
+ "info",
6359
+ "success",
6360
+ "warning",
6361
+ "danger"
6362
+ ]
6363
+ },
6010
6364
  "filter": {
6011
6365
  "type": "object"
6012
6366
  }
@@ -6111,13 +6465,32 @@
6111
6465
  "enabled": {
6112
6466
  "type": "boolean"
6113
6467
  },
6468
+ "columns": {
6469
+ "enum": [
6470
+ 2,
6471
+ 3,
6472
+ 4
6473
+ ]
6474
+ },
6475
+ "source": {
6476
+ "type": "string",
6477
+ "description": "Endpoint de telemetria agregada (/stats/group-by ou /filter?page=0&size=1)."
6478
+ },
6479
+ "method": {
6480
+ "enum": [
6481
+ "GET",
6482
+ "POST"
6483
+ ]
6484
+ },
6485
+ "payload": {
6486
+ "type": "object"
6487
+ },
6114
6488
  "cards": {
6115
6489
  "type": "array",
6116
6490
  "items": {
6117
6491
  "type": "object",
6118
6492
  "required": [
6119
- "label",
6120
- "value"
6493
+ "label"
6121
6494
  ],
6122
6495
  "properties": {
6123
6496
  "id": {
@@ -6132,9 +6505,17 @@
6132
6505
  "number"
6133
6506
  ]
6134
6507
  },
6508
+ "valueExpr": {
6509
+ "type": "string",
6510
+ "description": "Expressão ou template CSP-safe com pipes declarativos (ex.: '${totalCount | number | default:0} Registros')."
6511
+ },
6135
6512
  "caption": {
6136
6513
  "type": "string"
6137
6514
  },
6515
+ "captionExpr": {
6516
+ "type": "string",
6517
+ "description": "Expressão ou template CSP-safe para legenda com pipes declarativos (ex.: '(${((byKey.true / totalCount) * 100) | round:1 | default:0}%)')."
6518
+ },
6138
6519
  "icon": {
6139
6520
  "type": "string"
6140
6521
  },
@@ -6147,6 +6528,16 @@
6147
6528
  "danger"
6148
6529
  ]
6149
6530
  },
6531
+ "tone": {
6532
+ "enum": [
6533
+ "neutral",
6534
+ "primary",
6535
+ "info",
6536
+ "success",
6537
+ "warning",
6538
+ "danger"
6539
+ ]
6540
+ },
6150
6541
  "filter": {
6151
6542
  "type": "object"
6152
6543
  }
@@ -6176,13 +6567,32 @@
6176
6567
  "enabled": {
6177
6568
  "type": "boolean"
6178
6569
  },
6570
+ "columns": {
6571
+ "enum": [
6572
+ 2,
6573
+ 3,
6574
+ 4
6575
+ ]
6576
+ },
6577
+ "source": {
6578
+ "type": "string",
6579
+ "description": "Endpoint de telemetria agregada (/stats/group-by ou /filter?page=0&size=1)."
6580
+ },
6581
+ "method": {
6582
+ "enum": [
6583
+ "GET",
6584
+ "POST"
6585
+ ]
6586
+ },
6587
+ "payload": {
6588
+ "type": "object"
6589
+ },
6179
6590
  "cards": {
6180
6591
  "type": "array",
6181
6592
  "items": {
6182
6593
  "type": "object",
6183
6594
  "required": [
6184
- "label",
6185
- "value"
6595
+ "label"
6186
6596
  ],
6187
6597
  "properties": {
6188
6598
  "id": {
@@ -6197,9 +6607,17 @@
6197
6607
  "number"
6198
6608
  ]
6199
6609
  },
6610
+ "valueExpr": {
6611
+ "type": "string",
6612
+ "description": "Expressão ou template CSP-safe com pipes declarativos (ex.: '${totalCount | number | default:0} Registros')."
6613
+ },
6200
6614
  "caption": {
6201
6615
  "type": "string"
6202
6616
  },
6617
+ "captionExpr": {
6618
+ "type": "string",
6619
+ "description": "Expressão ou template CSP-safe para legenda com pipes declarativos (ex.: '(${((byKey.true / totalCount) * 100) | round:1 | default:0}%)')."
6620
+ },
6203
6621
  "icon": {
6204
6622
  "type": "string"
6205
6623
  },
@@ -6212,6 +6630,16 @@
6212
6630
  "danger"
6213
6631
  ]
6214
6632
  },
6633
+ "tone": {
6634
+ "enum": [
6635
+ "neutral",
6636
+ "primary",
6637
+ "info",
6638
+ "success",
6639
+ "warning",
6640
+ "danger"
6641
+ ]
6642
+ },
6215
6643
  "filter": {
6216
6644
  "type": "object"
6217
6645
  }
@@ -8254,9 +8682,9 @@
8254
8682
  {
8255
8683
  "chunkIndex": 8,
8256
8684
  "chunkKind": "capabilities",
8257
- "content": "Schema Capability:\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.prefix\n Category: appearance\n Kind: string\n Description: Prefixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.suffix\n Category: appearance\n Kind: string\n Description: Sufixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.fallbackText\n Category: accessibility\n Kind: string\n Description: Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules\n Category: appearance\n Kind: array\n Description: Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].when\n Category: behavior\n Kind: object\n Description: Guarda Json Logic avaliada contra o contexto de apresentacao do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n\nSchema Capability:\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n\nSchema Capability:\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n\nSchema Capability:\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.",
8685
+ "content": "Schema Capability:\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.prefix\n Category: appearance\n Kind: string\n Description: Prefixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.suffix\n Category: appearance\n Kind: string\n Description: Sufixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.scaleScope\n Category: layout\n Kind: enum\n Description: Escopo de normalizacao de escala para series e valores em colecoes: row (local por linha) ou page (sincronizado na pagina visivel).\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico estatico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.toneExpr\n Category: appearance\n Kind: object\n Description: Expressao Json Logic ou caminho row.<campo> para resolver dinamicamente o tom semantico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.valueExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para obter o valor principal da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.valueSuffix\n Category: appearance\n Kind: string\n Description: Sufixo de unidade anexado ao valor numerico formatado (ex: \"%\", \" pts\", \" ms\", \" d\").\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.compactValue\n Category: appearance\n Kind: boolean\n Description: Formata valores numericos em notacao compacta (ex: 1.2M, 45.3K) para celulas densas.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.min\n Category: behavior\n Kind: number\n Description: Limite minimo explicito da escala numerica.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.max\n Category: behavior\n Kind: number\n Description: Limite maximo explicito da escala numerica.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.total\n Category: behavior\n Kind: number\n Description: Total explicito para proporcionalidade em stackedBar ou radial.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.target\n Category: behavior\n Kind: number\n Description: Meta fixa para comparacao em bullet.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.targetExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para obter a meta por linha em bullet.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.baseline\n Category: behavior\n Kind: number\n Description: Valor de referencia fixo para comparison ou delta.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.baselineExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para obter o valor de referencia (baseline) por linha em comparison ou delta.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.pointsExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para serie de pontos em line, area ou column.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.segmentsExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para lista de segmentos em stackedBar.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.itemsExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para lista de etapas em processFlow.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.thresholds\n Category: appearance\n Kind: array\n Description: Faixas e limiares semanticos declarativos ({ value, min, max, tone, label }) para coloracao automatica e faixas qualitativas de bullet.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.stepLabelLineClamp\n Category: layout\n Kind: number\n Description: Numero maximo de linhas (1 ou 2) para rotulos de etapas em processFlow.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.ariaLabel\n Category: accessibility\n Kind: string\n Description: Rotulo acessivel explicito da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.ariaLabelExpr\n Category: accessibility\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para compor o rotulo acessivel por linha.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.fallbackText\n Category: accessibility\n Kind: string\n Description: Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.",
8258
8686
  "sourcePointer": "projects/praxis-crud/src/lib/ai/crud-ai-capabilities.ts",
8259
- "contentHash": "680baee6a38106f22c4710309b6d65ef7e59d1ee08bb65cca97f004070a99d0c",
8687
+ "contentHash": "dc6be0dc67a901095196573bc7a8f81c4cae31110aa85265ef4ff6e1646b940b",
8260
8688
  "sourceKind": "component_definition",
8261
8689
  "sourceId": "praxis-crud",
8262
8690
  "corpusVersion": "1.0.0"
@@ -8264,9 +8692,9 @@
8264
8692
  {
8265
8693
  "chunkIndex": 9,
8266
8694
  "chunkKind": "capabilities",
8267
- "content": "Schema Capability:\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n\nSchema Capability:\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n\nSchema Capability:\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n\nSchema Capability:\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n\nSchema Capability:\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n\nSchema Capability:\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n\nSchema Capability:\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n\nSchema Capability:\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n\nSchema Capability:\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess\n Category: behavior\n Kind: object\n Description: Politica canonica de UX para visibilidade/edicao por authorities publicadas pelo backend.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.visibleForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem ver o campo no runtime quando a UX tiver claims explicitas.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.editableForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem editar o campo no runtime quando a UX tiver claims explicitas.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.reason\n Category: misc\n Kind: string\n Description: Justificativa explicativa/auditavel da politica de acesso do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n\nSchema Capability:\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.",
8695
+ "content": "Schema Capability:\n - Path: fieldMetadata[].presentation.visualization.fallbackTextExpr\n Category: accessibility\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para gerar o fallback textual dinamico por linha.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules\n Category: appearance\n Kind: array\n Description: Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].when\n Category: behavior\n Kind: object\n Description: Guarda Json Logic avaliada contra o contexto de apresentacao do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n\nSchema Capability:\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n\nSchema Capability:\n - Path: fieldMetadata[].inlineVisualStyle\n Category: appearance\n Kind: enum\n Description: Estilo visual para controles numericos percentuais inline (compact: pilula liquida com micro-anel e popover; graphic: card expandido com donut, trilho graduado e presets).\n\nSchema Capability:\n - Path: fieldMetadata[].percentPresets\n Category: data\n Kind: array\n Description: Lista de percentuais rapidos exibidos nos botoes de preset do Percent Studio (ex.: [0, 25, 50, 75, 100]).\n\nSchema Capability:\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n\nSchema Capability:\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).",
8268
8696
  "sourcePointer": "projects/praxis-crud/src/lib/ai/crud-ai-capabilities.ts",
8269
- "contentHash": "02f3921c10fb0dd88775888b7143c2cad0a14ccd228d35ea95cdb587a28b3c3f",
8697
+ "contentHash": "1e418f6ed02cbfa86ec339516bc55adf540acfabcf2fa04fda54ccf2e15c1843",
8270
8698
  "sourceKind": "component_definition",
8271
8699
  "sourceId": "praxis-crud",
8272
8700
  "corpusVersion": "1.0.0"
@@ -8274,9 +8702,9 @@
8274
8702
  {
8275
8703
  "chunkIndex": 10,
8276
8704
  "chunkKind": "capabilities",
8277
- "content": "Schema Capability:\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n\nSchema Capability:\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n\nSchema Capability:\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n\nSchema Capability:\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n\nSchema Capability:\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n\nSchema Capability:\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n\nSchema Capability:\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n\nSchema Capability:\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n\nSchema Capability:\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n\nComponent Capability:\n - Path: component\n Category: meta\n Kind: enum\n Description: Identificador fixo do componente.\n\nComponent Capability:\n - Path: resource\n Category: resource\n Kind: object\n Description: Recurso principal do CRUD.\n\nComponent Capability:\n - Path: resource.path\n Category: resource\n Kind: string\n Description: Endpoint base do recurso.\n\nComponent Capability:\n - Path: resource.idField\n Category: resource\n Kind: string\n Description: Campo identificador do recurso.\n\nComponent Capability:\n - Path: resource.endpointKey\n Category: resource\n Kind: string\n Description: Chave de endpoint (ApiEndpoint).\n\nComponent Capability:\n - Path: queryContext.meta.domainCatalog\n Category: resource\n Kind: object\n Description: Referencia leve para contexto semantico/governanca resolvido via Domain Catalog; nao materializa regras em FormConfig.\n\nComponent Capability:\n - Path: queryContext.meta.domainCatalog.schemaVersion\n Category: resource\n Kind: string\n Description: Versao do contrato DomainCatalogContextHint usado em runtime e prompts.\n\nComponent Capability:\n - Path: queryContext.meta.domainCatalog.resourceKey\n Category: resource\n Kind: string\n Description: ResourceKey semantico estavel usado para resolver vocabulario/governanca de dominio.\n\nComponent Capability:\n - Path: queryContext.meta.domainCatalog.releaseId\n Category: resource\n Kind: string\n Description: Release opcional do Domain Catalog usada como fonte do contexto.\n\nComponent Capability:\n - Path: queryContext.meta.domainCatalog.query\n Category: resource\n Kind: string\n Description: Probe de campo/conceito usado para buscar itens relevantes, como cpf, salario ou status.\n\nComponent Capability:\n - Path: queryContext.meta.domainCatalog.intent\n Category: resource\n Kind: enum\n Description: Intencao de uso do contexto para orientar LLMs e validadores sem expor dados alem do necessario.\n\nComponent Capability:\n - Path: table\n Category: table\n Kind: object\n Description: TableConfig completo (usar catalogo de tabela).\n\nComponent Capability:\n - Path: form\n Category: form\n Kind: object\n Description: FormConfig completo (usar catalogo de formulario).\n\nComponent Capability:\n - Path: defaults\n Category: defaults\n Kind: object\n Description: Defaults aplicados a acoes e UI.\n\nComponent Capability:\n - Path: defaults.openMode\n Category: defaults\n Kind: enum\n Description: Modo padrao de abertura (route/modal/drawer).\n\nComponent Capability:\n - Path: defaults.modal\n Category: defaults\n Kind: object\n Description: Config de dialog (DialogConfig).\n\nComponent Capability:\n - Path: defaults.back\n Category: navigation\n Kind: object\n Description: Config de retorno (BackConfig).\n\nComponent Capability:\n - Path: defaults.back.strategy\n Category: navigation\n Kind: enum\n Description: Estrategia de retorno.\n\nComponent Capability:\n - Path: defaults.back.returnTo\n Category: navigation\n Kind: string\n Description: Rota de retorno quando strategy=navigate.\n\nComponent Capability:\n - Path: defaults.back.confirmOnDirty\n Category: navigation\n Kind: boolean\n Description: Confirmar ao sair com alteracoes.\n\nComponent Capability:\n - Path: defaults.header\n Category: defaults\n Kind: object\n Description: Config do header do CRUD.\n\nComponent Capability:\n - Path: defaults.header.showBack\n Category: defaults\n Kind: boolean\n Description: Exibir botao voltar.\n\nComponent Capability:\n - Path: defaults.header.backLabel\n Category: defaults\n Kind: string\n Description: Label do botao voltar.\n\nComponent Capability:\n - Path: defaults.header.variant\n Category: defaults\n Kind: enum\n Description: Variante visual do header.\n\nComponent Capability:\n - Path: defaults.header.sticky\n Category: defaults\n Kind: boolean\n Description: Header fixo.\n\nComponent Capability:\n - Path: defaults.header.breadcrumbs\n Category: defaults\n Kind: boolean\n Description: Exibir breadcrumbs.\n\nComponent Capability:\n - Path: defaults.header.divider\n Category: defaults\n Kind: boolean\n Description: Exibir divisor no header.\n\nComponent Capability:\n - Path: actions\n Category: actions\n Kind: array\n Description: Acoes disponiveis no CRUD.\n\nComponent Capability:\n - Path: actions[].id\n Category: actions\n Kind: string\n Description: ID da acao (RowAction/ToolbarAction).\n\nComponent Capability:\n - Path: actions[].label\n Category: actions\n Kind: string\n Description: Label da acao.\n\nComponent Capability:\n - Path: actions[].icon\n Category: actions\n Kind: string\n Description: Icone da acao.\n\nComponent Capability:\n - Path: actions[].color\n Category: actions\n Kind: string\n Description: Cor da acao.\n\nComponent Capability:\n - Path: actions[].disabled\n Category: actions\n Kind: boolean\n Description: Acao desabilitada.\n\nComponent Capability:\n - Path: actions[].action\n Category: actions\n Kind: string\n Description: Nome da acao emitida.\n\nComponent Capability:\n - Path: actions[].tooltip\n Category: actions\n Kind: string\n Description: Tooltip da acao.\n\nComponent Capability:\n - Path: actions[].requiresConfirmation\n Category: actions\n Kind: boolean\n Description: Exige confirmacao.\n\nComponent Capability:\n - Path: actions[].visibleWhen\n Category: actions\n Kind: expression\n Description: Condicao de visibilidade (RowAction/ToolbarAction).\n\nComponent Capability:\n - Path: actions[].separator\n Category: actions\n Kind: boolean\n Description: Separador apos a acao (RowAction).\n\nComponent Capability:\n - Path: actions[].autoDelete\n Category: actions\n Kind: boolean\n Description: Habilita auto delete (RowAction).\n\nComponent Capability:\n - Path: actions[].deleteEndpoint\n Category: actions\n Kind: string\n Description: Endpoint custom para delete (RowAction).\n\nComponent Capability:\n - Path: actions[].type\n Category: actions\n Kind: enum\n Description: Tipo de acao (ToolbarAction).",
8705
+ "content": "Schema Capability:\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n\nSchema Capability:\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n\nSchema Capability:\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n\nSchema Capability:\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n\nSchema Capability:\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n\nSchema Capability:\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n\nSchema Capability:\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n\nSchema Capability:\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n\nSchema Capability:\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess\n Category: behavior\n Kind: object\n Description: Politica canonica de UX para visibilidade/edicao por authorities publicadas pelo backend.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.visibleForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem ver o campo no runtime quando a UX tiver claims explicitas.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.editableForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem editar o campo no runtime quando a UX tiver claims explicitas.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.reason\n Category: misc\n Kind: string\n Description: Justificativa explicativa/auditavel da politica de acesso do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n\nSchema Capability:\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n\nSchema Capability:\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n\nSchema Capability:\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n\nSchema Capability:\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n\nSchema Capability:\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n\nSchema Capability:\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n\nSchema Capability:\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n\nSchema Capability:\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n\nSchema Capability:\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n\nSchema Capability:\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n\nComponent Capability:\n - Path: component\n Category: meta\n Kind: enum\n Description: Identificador fixo do componente.\n\nComponent Capability:\n - Path: resource\n Category: resource\n Kind: object\n Description: Recurso principal do CRUD.\n\nComponent Capability:\n - Path: resource.path\n Category: resource\n Kind: string\n Description: Endpoint base do recurso.\n\nComponent Capability:\n - Path: resource.idField\n Category: resource\n Kind: string\n Description: Campo identificador do recurso.\n\nComponent Capability:\n - Path: resource.endpointKey\n Category: resource\n Kind: string\n Description: Chave de endpoint (ApiEndpoint).\n\nComponent Capability:\n - Path: queryContext.meta.domainCatalog\n Category: resource\n Kind: object\n Description: Referencia leve para contexto semantico/governanca resolvido via Domain Catalog; nao materializa regras em FormConfig.",
8278
8706
  "sourcePointer": "projects/praxis-crud/src/lib/ai/crud-ai-capabilities.ts",
8279
- "contentHash": "0e7eb503bdd20832cac2f21e32b2d1eae991aa90c2c2b58f9ec2bcc19de06a71",
8707
+ "contentHash": "e9b02ea35a3f80656f768de5b11d3b860eafc3db3b4df8d2addcc51973ece54e",
8280
8708
  "sourceKind": "component_definition",
8281
8709
  "sourceId": "praxis-crud",
8282
8710
  "corpusVersion": "1.0.0"
@@ -8284,15 +8712,25 @@
8284
8712
  {
8285
8713
  "chunkIndex": 11,
8286
8714
  "chunkKind": "capabilities",
8287
- "content": "Component Capability:\n - Path: actions[].appearance\n Category: actions\n Kind: enum\n Description: Aparencia do botao (ToolbarAction).\n\nComponent Capability:\n - Path: actions[].position\n Category: actions\n Kind: enum\n Description: Posicao da acao (ToolbarAction).\n\nComponent Capability:\n - Path: actions[].order\n Category: actions\n Kind: number\n Description: Ordem de exibicao (ToolbarAction).\n\nComponent Capability:\n - Path: actions[].shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ToolbarAction).\n\nComponent Capability:\n - Path: actions[].children\n Category: actions\n Kind: array\n Description: Sub-acoes (menu).\n\nComponent Capability:\n - Path: actions[].openMode\n Category: actions\n Kind: enum\n Description: Modo de abertura da acao.\n\nComponent Capability:\n - Path: actions[].route\n Category: actions\n Kind: string\n Description: Rota para openMode=route.\n\nComponent Capability:\n - Path: actions[].formId\n Category: actions\n Kind: string\n Description: FormId canonico para modal/drawer; se ausente, o host precisa resolve-lo por override por acao antes da abertura.\n\nComponent Capability:\n - Path: actions[].form.submitLabel\n Category: actions\n Kind: string\n Description: Rótulo de apresentação do submit; não altera schema, método nem endpoint descobertos.\n\nComponent Capability:\n - Path: actions[].params\n Category: actions\n Kind: array\n Description: Mapeamento de parametros.\n\nComponent Capability:\n - Path: actions[].params[].from\n Category: actions\n Kind: string\n Description: Origem do parametro.\n\nComponent Capability:\n - Path: actions[].params[].to\n Category: actions\n Kind: enum\n Description: Destino do parametro.\n\nComponent Capability:\n - Path: actions[].params[].name\n Category: actions\n Kind: string\n Description: Nome do parametro no destino.\n\nComponent Capability:\n - Path: actions[].form.initialValue\n Category: actions\n Kind: object\n Description: Seed fixo do formulario injetado em inputs.initialValue antes da abertura.\n\nComponent Capability:\n - Path: actions[].form.layoutPolicy\n Category: actions\n Kind: object\n Description: Politica schema-driven opt-in encaminhada ao Dynamic Form para materializar detalhe ou command form sem FormConfig.sections local; deve acompanhar schemaUrl compativel, especialmente schemaType=request para comandos.\n\nComponent Capability:\n - Path: actions[].back\n Category: navigation\n Kind: object\n Description: BackConfig por acao.\n\nComponent Capability:\n - Path: actions[].back.strategy\n Category: navigation\n Kind: enum\n Description: Estrategia de retorno da acao (auto, close, navigate).\n\nComponent Capability:\n - Path: actions[].back.returnTo\n Category: navigation\n Kind: string\n Description: Rota ou destino usado quando a estrategia de retorno for navigate.\n\nComponent Capability:\n - Path: actions[].back.confirmOnDirty\n Category: navigation\n Kind: boolean\n Description: Solicita confirmacao antes de sair com alteracoes nao salvas.\n\nComponent Capability:\n - Path: i18n\n Category: i18n\n Kind: object\n Description: Mensagens i18n do CRUD.\n\nComponent Capability:\n - Path: i18n.crudDialog\n Category: i18n\n Kind: object\n Description: Mapa de textos do dialog.\n\nCapability Note:\n - CrudMetadata agrega TableConfig e FormConfig; use os catalogos de tabela e formulario para detalhes.\n\nCapability Note:\n - actions[] herda campos de RowAction e ToolbarAction; combine com openMode/route/formId quando aplicavel.",
8715
+ "content": "Component Capability:\n - Path: queryContext.meta.domainCatalog.schemaVersion\n Category: resource\n Kind: string\n Description: Versao do contrato DomainCatalogContextHint usado em runtime e prompts.\n\nComponent Capability:\n - Path: queryContext.meta.domainCatalog.resourceKey\n Category: resource\n Kind: string\n Description: ResourceKey semantico estavel usado para resolver vocabulario/governanca de dominio.\n\nComponent Capability:\n - Path: queryContext.meta.domainCatalog.releaseId\n Category: resource\n Kind: string\n Description: Release opcional do Domain Catalog usada como fonte do contexto.\n\nComponent Capability:\n - Path: queryContext.meta.domainCatalog.query\n Category: resource\n Kind: string\n Description: Probe de campo/conceito usado para buscar itens relevantes, como cpf, salario ou status.\n\nComponent Capability:\n - Path: queryContext.meta.domainCatalog.intent\n Category: resource\n Kind: enum\n Description: Intencao de uso do contexto para orientar LLMs e validadores sem expor dados alem do necessario.\n\nComponent Capability:\n - Path: table\n Category: table\n Kind: object\n Description: TableConfig completo (usar catalogo de tabela).\n\nComponent Capability:\n - Path: form\n Category: form\n Kind: object\n Description: FormConfig completo (usar catalogo de formulario).\n\nComponent Capability:\n - Path: kpiBand\n Category: table\n Kind: object\n Description: Faixa executiva declarativa de KPIs acima da listagem principal.\n\nComponent Capability:\n - Path: kpiBand.source\n Category: table\n Kind: string\n Description: Path relativo do endpoint de KPIs/stats (ex: /stats, /stats/group-by).\n\nComponent Capability:\n - Path: kpiBand.method\n Category: table\n Kind: enum\n Description: Metodo HTTP da consulta de KPIs (GET ou POST).\n\nComponent Capability:\n - Path: kpiBand.payload\n Category: table\n Kind: object\n Description: Payload JSON enviado quando kpiBand.method = POST.\n\nComponent Capability:\n - Path: kpiBand.cards\n Category: table\n Kind: array\n Description: Lista declarativa de cards executivos da faixa de KPIs.\n\nComponent Capability:\n - Path: kpiBand.cards[].id\n Category: table\n Kind: string\n Description: Identificador estavel do card de KPI.\n\nComponent Capability:\n - Path: kpiBand.cards[].label\n Category: table\n Kind: string\n Description: Rotulo executivo do card de KPI.\n\nComponent Capability:\n - Path: kpiBand.cards[].icon\n Category: table\n Kind: string\n Description: Icone Material opcional do card de KPI.\n\nComponent Capability:\n - Path: kpiBand.cards[].valueExpr\n Category: table\n Kind: string\n Description: Dot-path no payload de stats com suporte a pipes declarativos CSP-safe (ex: totalCount | default:0 | number).\n\nComponent Capability:\n - Path: kpiBand.cards[].captionExpr\n Category: table\n Kind: string\n Description: Subtitulo ou expressao declarativa complementar com suporte a pipes CSP-safe.\n\nComponent Capability:\n - Path: kpiBand.cards[].clickFilter\n Category: table\n Kind: object\n Description: Mapa declarativo de filtro rapido aplicado na tabela ao clicar no card de KPI.\n\nComponent Capability:\n - Path: defaults\n Category: defaults\n Kind: object\n Description: Defaults aplicados a acoes e UI.\n\nComponent Capability:\n - Path: defaults.openMode\n Category: defaults\n Kind: enum\n Description: Modo padrao de abertura (route/modal/drawer).\n\nComponent Capability:\n - Path: defaults.modal\n Category: defaults\n Kind: object\n Description: Config de dialog (DialogConfig).\n\nComponent Capability:\n - Path: defaults.back\n Category: navigation\n Kind: object\n Description: Config de retorno (BackConfig).\n\nComponent Capability:\n - Path: defaults.back.strategy\n Category: navigation\n Kind: enum\n Description: Estrategia de retorno.\n\nComponent Capability:\n - Path: defaults.back.returnTo\n Category: navigation\n Kind: string\n Description: Rota de retorno quando strategy=navigate.\n\nComponent Capability:\n - Path: defaults.back.confirmOnDirty\n Category: navigation\n Kind: boolean\n Description: Confirmar ao sair com alteracoes.\n\nComponent Capability:\n - Path: defaults.header\n Category: defaults\n Kind: object\n Description: Config do header do CRUD.\n\nComponent Capability:\n - Path: defaults.header.showBack\n Category: defaults\n Kind: boolean\n Description: Exibir botao voltar.\n\nComponent Capability:\n - Path: defaults.header.backLabel\n Category: defaults\n Kind: string\n Description: Label do botao voltar.\n\nComponent Capability:\n - Path: defaults.header.variant\n Category: defaults\n Kind: enum\n Description: Variante visual do header.\n\nComponent Capability:\n - Path: defaults.header.sticky\n Category: defaults\n Kind: boolean\n Description: Header fixo.\n\nComponent Capability:\n - Path: defaults.header.breadcrumbs\n Category: defaults\n Kind: boolean\n Description: Exibir breadcrumbs.\n\nComponent Capability:\n - Path: defaults.header.divider\n Category: defaults\n Kind: boolean\n Description: Exibir divisor no header.\n\nComponent Capability:\n - Path: actions\n Category: actions\n Kind: array\n Description: Acoes disponiveis no CRUD.\n\nComponent Capability:\n - Path: actions[].id\n Category: actions\n Kind: string\n Description: ID da acao (RowAction/ToolbarAction).\n\nComponent Capability:\n - Path: actions[].label\n Category: actions\n Kind: string\n Description: Label da acao.\n\nComponent Capability:\n - Path: actions[].icon\n Category: actions\n Kind: string\n Description: Icone da acao.\n\nComponent Capability:\n - Path: actions[].color\n Category: actions\n Kind: string\n Description: Cor da acao.\n\nComponent Capability:\n - Path: actions[].disabled\n Category: actions\n Kind: boolean\n Description: Acao desabilitada.\n\nComponent Capability:\n - Path: actions[].action\n Category: actions\n Kind: string\n Description: Nome da acao emitida.\n\nComponent Capability:\n - Path: actions[].tooltip\n Category: actions\n Kind: string\n Description: Tooltip da acao.\n\nComponent Capability:\n - Path: actions[].requiresConfirmation\n Category: actions\n Kind: boolean\n Description: Exige confirmacao.\n\nComponent Capability:\n - Path: actions[].visibleWhen\n Category: actions\n Kind: expression\n Description: Condicao de visibilidade (RowAction/ToolbarAction).\n\nComponent Capability:\n - Path: actions[].separator\n Category: actions\n Kind: boolean\n Description: Separador apos a acao (RowAction).\n\nComponent Capability:\n - Path: actions[].autoDelete\n Category: actions\n Kind: boolean\n Description: Habilita auto delete (RowAction).\n\nComponent Capability:\n - Path: actions[].deleteEndpoint\n Category: actions\n Kind: string\n Description: Endpoint custom para delete (RowAction).\n\nComponent Capability:\n - Path: actions[].type\n Category: actions\n Kind: enum\n Description: Tipo de acao (ToolbarAction).\n\nComponent Capability:\n - Path: actions[].appearance\n Category: actions\n Kind: enum\n Description: Aparencia do botao (ToolbarAction).\n\nComponent Capability:\n - Path: actions[].position\n Category: actions\n Kind: enum\n Description: Posicao da acao (ToolbarAction).\n\nComponent Capability:\n - Path: actions[].order\n Category: actions\n Kind: number\n Description: Ordem de exibicao (ToolbarAction).\n\nComponent Capability:\n - Path: actions[].shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ToolbarAction).\n\nComponent Capability:\n - Path: actions[].children\n Category: actions\n Kind: array\n Description: Sub-acoes (menu).\n\nComponent Capability:\n - Path: actions[].openMode\n Category: actions\n Kind: enum\n Description: Modo de abertura da acao.\n\nComponent Capability:\n - Path: actions[].route\n Category: actions\n Kind: string\n Description: Rota para openMode=route.",
8288
8716
  "sourcePointer": "projects/praxis-crud/src/lib/ai/crud-ai-capabilities.ts",
8289
- "contentHash": "226468e02e18f80cc1aa469687dc2fd42746d7d0cb8fce960e4763aeaca41f73",
8717
+ "contentHash": "4aaac0ea6e968953104a543e5502d81abbabca6d543fd0c6c36a33a008cda907",
8290
8718
  "sourceKind": "component_definition",
8291
8719
  "sourceId": "praxis-crud",
8292
8720
  "corpusVersion": "1.0.0"
8293
8721
  },
8294
8722
  {
8295
8723
  "chunkIndex": 12,
8724
+ "chunkKind": "capabilities",
8725
+ "content": "Component Capability:\n - Path: actions[].formId\n Category: actions\n Kind: string\n Description: FormId canonico para modal/drawer; se ausente, o host precisa resolve-lo por override por acao antes da abertura.\n\nComponent Capability:\n - Path: actions[].form.submitLabel\n Category: actions\n Kind: string\n Description: Rótulo de apresentação do submit; não altera schema, método nem endpoint descobertos.\n\nComponent Capability:\n - Path: actions[].params\n Category: actions\n Kind: array\n Description: Mapeamento de parametros.\n\nComponent Capability:\n - Path: actions[].params[].from\n Category: actions\n Kind: string\n Description: Origem do parametro.\n\nComponent Capability:\n - Path: actions[].params[].to\n Category: actions\n Kind: enum\n Description: Destino do parametro.\n\nComponent Capability:\n - Path: actions[].params[].name\n Category: actions\n Kind: string\n Description: Nome do parametro no destino.\n\nComponent Capability:\n - Path: actions[].form.initialValue\n Category: actions\n Kind: object\n Description: Seed fixo do formulario injetado em inputs.initialValue antes da abertura.\n\nComponent Capability:\n - Path: actions[].form.layoutPolicy\n Category: actions\n Kind: object\n Description: Politica schema-driven opt-in encaminhada ao Dynamic Form para materializar detalhe ou command form sem FormConfig.sections local; deve acompanhar schemaUrl compativel, especialmente schemaType=request para comandos.\n\nComponent Capability:\n - Path: actions[].back\n Category: navigation\n Kind: object\n Description: BackConfig por acao.\n\nComponent Capability:\n - Path: actions[].back.strategy\n Category: navigation\n Kind: enum\n Description: Estrategia de retorno da acao (auto, close, navigate).\n\nComponent Capability:\n - Path: actions[].back.returnTo\n Category: navigation\n Kind: string\n Description: Rota ou destino usado quando a estrategia de retorno for navigate.\n\nComponent Capability:\n - Path: actions[].back.confirmOnDirty\n Category: navigation\n Kind: boolean\n Description: Solicita confirmacao antes de sair com alteracoes nao salvas.\n\nComponent Capability:\n - Path: i18n\n Category: i18n\n Kind: object\n Description: Mensagens i18n do CRUD.\n\nComponent Capability:\n - Path: i18n.crudDialog\n Category: i18n\n Kind: object\n Description: Mapa de textos do dialog.\n\nCapability Note:\n - CrudMetadata agrega TableConfig e FormConfig; use os catalogos de tabela e formulario para detalhes.\n\nCapability Note:\n - actions[] herda campos de RowAction e ToolbarAction; combine com openMode/route/formId quando aplicavel.\n\nCapability Note:\n - kpiBand renderiza cards executivos orientados a endpoint ou projecao declarativa; valueExpr e captionExpr suportam dot-paths e pipes declarativos CSP-safe (default:<fallback>, number, round[:decimals], percent[:decimals], currency[:code], uppercase, lowercase).",
8726
+ "sourcePointer": "projects/praxis-crud/src/lib/ai/crud-ai-capabilities.ts",
8727
+ "contentHash": "066d7fd593f6a0bb7dfe722a70b3dd72f1744ffaddad7ab2d5dd718c791a374a",
8728
+ "sourceKind": "component_definition",
8729
+ "sourceId": "praxis-crud",
8730
+ "corpusVersion": "1.0.0"
8731
+ },
8732
+ {
8733
+ "chunkIndex": 13,
8296
8734
  "chunkKind": "authoring_manifest",
8297
8735
  "content": "{\"operationId\":\"resource.bind\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Bind CRUD resource Effects: compile-domain-patch. Bind this CRUD to funcionarios using id as the identifier.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"resourceBinding\",\"resolver\":\"crud-resource-by-path-or-key\",\"required\":true},\"inputContract\":{\"required\":[\"resourcePath\"],\"properties\":[\"resourcePath\",\"resourceKey\",\"idField\",\"endpointKey\",\"queryContext\"],\"semanticTerms\":[\"resourcePath\",\"resourceKey\",\"idField\",\"endpointKey\",\"queryContext\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"resource.path\",\"resource.schemaPath\",\"resource.idField\",\"resource.endpointKey\",\"resource.apiUrlEntry\",\"queryContext\",\"filterCriteria\"],\"validators\":[{\"validatorId\":\"resource-exists-in-api-metadata\",\"level\":\"error\",\"code\":\"CRUD_RESOURCE_EXISTS\",\"description\":\"Resource must exist in api_metadata or resource discovery.\"},{\"validatorId\":\"resource-path-canonical\",\"level\":\"error\",\"code\":\"CRUD_RESOURCE_PATH_CANONICAL\",\"description\":\"Resource path must be canonical and not a local alias.\"},{\"validatorId\":\"resource-key-stable\",\"level\":\"error\",\"code\":\"CRUD_RESOURCE_KEY_STABLE\",\"description\":\"Resource key must remain stable for surfaces/actions/capabilities.\"},{\"validatorId\":\"id-field-known\",\"level\":\"error\",\"code\":\"CRUD_ID_FIELD_KNOWN\",\"description\":\"CRUD id field must exist for edit/view/delete flows.\"},{\"validatorId\":\"resource-capabilities-resolvable\",\"level\":\"error\",\"code\":\"CRUD_CAPABILITIES_RESOLVABLE\",\"description\":\"Resource capabilities must be resolvable before action enablement is authored.\"}],\"preconditions\":[\"crud-metadata-loaded\",\"api-metadata-available\"],\"submissionImpact\":\"affects-remote-binding\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"crud-bind-funcionarios-resource\",\"request\":\"Bind this CRUD to funcionarios using id as the identifier.\",\"operationId\":\"resource.bind\",\"target\":\"resource:funcionarios\",\"params\":{\"resourcePath\":\"/funcionarios\",\"resourceKey\":\"funcionarios\",\"idField\":\"id\"},\"isPositive\":true}],\"negativeExamples\":[]}",
8298
8736
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8302,7 +8740,7 @@
8302
8740
  "corpusVersion": "1.0.0"
8303
8741
  },
8304
8742
  {
8305
- "chunkIndex": 13,
8743
+ "chunkIndex": 14,
8306
8744
  "chunkKind": "authoring_manifest",
8307
8745
  "content": "{\"operationId\":\"domain.governanceContext.attach\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Attach Domain Catalog governance context Effects: compile-domain-patch. Use the Domain Catalog LGPD context for cpf before changing the employee CRUD. Copy the LGPD rule from Domain Catalog directly into the create form JSON.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"domainGovernanceContext\",\"resolver\":\"domain-catalog-context-by-resource-key\",\"required\":true},\"inputContract\":{\"required\":[\"resourceKey\",\"query\"],\"properties\":[\"resourceKey\",\"releaseId\",\"query\",\"itemTypes\",\"intent\"],\"semanticTerms\":[\"resourceKey\",\"releaseId\",\"query\",\"itemTypes\",\"intent\",\"authoring\",\"explain\",\"validate\",\"ai-access-control\",\"governance\",\"vocabulary\",\"relationship\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"queryContext.meta.domainCatalog\"],\"validators\":[{\"validatorId\":\"resource-key-stable\",\"level\":\"error\",\"code\":\"CRUD_RESOURCE_KEY_STABLE\",\"description\":\"Resource key must remain stable for surfaces/actions/capabilities.\"},{\"validatorId\":\"domain-catalog-context-resolvable\",\"level\":\"error\",\"code\":\"CRUD_DOMAIN_CATALOG_CONTEXT_RESOLVABLE\",\"description\":\"Domain Catalog governance context must resolve for the resource key and requested probe before authoring uses it.\"},{\"validatorId\":\"domain-catalog-read-only\",\"level\":\"error\",\"code\":\"CRUD_DOMAIN_CATALOG_READ_ONLY\",\"description\":\"Domain Catalog is read-only semantic context; CRUD may reference a probe but must not persist copied catalog rules.\"},{\"validatorId\":\"ai-usage-visibility-respected\",\"level\":\"error\",\"code\":\"CRUD_AI_USAGE_VISIBILITY_RESPECTED\",\"description\":\"Authoring must respect Domain Catalog aiUsage.visibility before exposing field data, prompts or generated patches.\"},{\"validatorId\":\"no-form-config-rule-materialization\",\"level\":\"error\",\"code\":\"CRUD_NO_FORM_RULE_MATERIALIZATION\",\"description\":\"Shared domain governance must not be materialized into FormConfig rules unless a backend policy explicitly authorizes it.\"}],\"preconditions\":[\"crud-metadata-loaded\",\"api-metadata-available\",\"domain-catalog-service-available\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"crud-attach-lgpd-cpf-context\",\"request\":\"Use the Domain Catalog LGPD context for cpf before changing the employee CRUD.\",\"operationId\":\"domain.governanceContext.attach\",\"target\":\"domainCatalog:human-resources.funcionarios:cpf\",\"params\":{\"resourceKey\":\"human-resources.funcionarios\",\"query\":\"cpf\",\"itemTypes\":[\"governance\"],\"intent\":\"authoring\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"crud-reject-copy-domain-rule-to-formconfig\",\"request\":\"Copy the LGPD rule from Domain Catalog directly into the create form JSON.\",\"operationId\":\"domain.governanceContext.attach\",\"target\":\"domainCatalog:human-resources.funcionarios:cpf\",\"params\":{\"resourceKey\":\"human-resources.funcionarios\",\"query\":\"cpf\",\"itemTypes\":[\"governance\"],\"intent\":\"authoring\"},\"isPositive\":false}]}",
8308
8746
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8312,27 +8750,27 @@
8312
8750
  "corpusVersion": "1.0.0"
8313
8751
  },
8314
8752
  {
8315
- "chunkIndex": 14,
8753
+ "chunkIndex": 15,
8316
8754
  "chunkKind": "authoring_manifest",
8317
- "content": "{\"operationId\":\"list.surface.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure CRUD list surface Effects: compile-domain-patch. Filter the list by active employees using the canonical query context.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"listSurface\",\"resolver\":\"crud-list-surface\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"tablePatch\",\"queryContext\",\"filterCriteria\",\"kpiBand\",\"filterBar\"],\"semanticTerms\":[\"tablePatch\",\"queryContext\",\"filterCriteria\",\"kpiBand\",\"filterBar\",\"kpiBand.enabled\",\"kpiBand.cards\",\"filterBar.inlineFields\",\"filterBar.quickFilters\",\"filterBar.showAdvanced\",\"kpiBand.cards.id\",\"kpiBand.cards.label\",\"kpiBand.cards.value\",\"kpiBand.cards.caption\",\"kpiBand.cards.icon\",\"kpiBand.cards.variant\",\"kpiBand.cards.filter\",\"default\",\"primary\",\"success\",\"warning\",\"danger\",\"false\",\"filterBar.quickFilters.id\",\"filterBar.quickFilters.label\",\"filterBar.quickFilters.icon\",\"filterBar.quickFilters.filter\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"table\",\"queryContext\",\"filterCriteria\",\"kpiBand\",\"filterBar\"],\"validators\":[{\"validatorId\":\"table-child-operation-delegated\",\"level\":\"error\",\"code\":\"CRUD_TABLE_CHILD_DELEGATED\",\"description\":\"Table semantics must be delegated to praxis-table.\"},{\"validatorId\":\"query-context-valid\",\"level\":\"error\",\"code\":\"CRUD_QUERY_CONTEXT_VALID\",\"description\":\"Query context must be valid for the bound resource.\"},{\"validatorId\":\"filter-criteria-bridge-valid\",\"level\":\"warning\",\"code\":\"CRUD_FILTER_CRITERIA_BRIDGE_VALID\",\"description\":\"filterCriteria is a bridge; prefer queryContext for new remote authoring.\"},{\"validatorId\":\"crud-context-stable\",\"level\":\"error\",\"code\":\"CRUD_CONTEXT_STABLE\",\"description\":\"Authoring must not break stable crudContext references.\"}],\"preconditions\":[\"crud-metadata-loaded\",\"praxis-table-manifest-available\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"crud-list-query-context\",\"request\":\"Filter the list by active employees using the canonical query context.\",\"operationId\":\"list.surface.configure\",\"target\":\"listSurface\",\"params\":{\"queryContext\":{\"filters\":[{\"field\":\"active\",\"operator\":\"eq\",\"value\":true}]}},\"isPositive\":true}],\"negativeExamples\":[]}",
8755
+ "content": "{\"operationId\":\"list.surface.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure CRUD list surface Effects: compile-domain-patch. Filter the list by active employees using the canonical query context.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"listSurface\",\"resolver\":\"crud-list-surface\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"tablePatch\",\"queryContext\",\"filterCriteria\",\"kpiBand\",\"filterBar\"],\"semanticTerms\":[\"tablePatch\",\"queryContext\",\"filterCriteria\",\"kpiBand\",\"filterBar\",\"kpiBand.enabled\",\"kpiBand.columns\",\"kpiBand.source\",\"kpiBand.method\",\"kpiBand.payload\",\"kpiBand.cards\",\"filterBar.inlineFields\",\"filterBar.quickFilters\",\"filterBar.showAdvanced\",\"2\",\"3\",\"4\",\"GET\",\"POST\",\"kpiBand.cards.id\",\"kpiBand.cards.label\",\"kpiBand.cards.value\",\"kpiBand.cards.valueExpr\",\"kpiBand.cards.caption\",\"kpiBand.cards.captionExpr\",\"kpiBand.cards.icon\",\"kpiBand.cards.variant\",\"kpiBand.cards.tone\",\"kpiBand.cards.filter\",\"default\",\"primary\",\"success\",\"warning\",\"danger\",\"neutral\",\"info\",\"false\",\"filterBar.quickFilters.id\",\"filterBar.quickFilters.label\",\"filterBar.quickFilters.icon\",\"filterBar.quickFilters.filter\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"table\",\"queryContext\",\"filterCriteria\",\"kpiBand\",\"filterBar\"],\"validators\":[{\"validatorId\":\"table-child-operation-delegated\",\"level\":\"error\",\"code\":\"CRUD_TABLE_CHILD_DELEGATED\",\"description\":\"Table semantics must be delegated to praxis-table.\"},{\"validatorId\":\"query-context-valid\",\"level\":\"error\",\"code\":\"CRUD_QUERY_CONTEXT_VALID\",\"description\":\"Query context must be valid for the bound resource.\"},{\"validatorId\":\"filter-criteria-bridge-valid\",\"level\":\"warning\",\"code\":\"CRUD_FILTER_CRITERIA_BRIDGE_VALID\",\"description\":\"filterCriteria is a bridge; prefer queryContext for new remote authoring.\"},{\"validatorId\":\"crud-context-stable\",\"level\":\"error\",\"code\":\"CRUD_CONTEXT_STABLE\",\"description\":\"Authoring must not break stable crudContext references.\"}],\"preconditions\":[\"crud-metadata-loaded\",\"praxis-table-manifest-available\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"crud-list-query-context\",\"request\":\"Filter the list by active employees using the canonical query context.\",\"operationId\":\"list.surface.configure\",\"target\":\"listSurface\",\"params\":{\"queryContext\":{\"filters\":[{\"field\":\"active\",\"operator\":\"eq\",\"value\":true}]}},\"isPositive\":true}],\"negativeExamples\":[]}",
8318
8756
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
8319
- "contentHash": "5267bfb8d86a62fe84517727ab4f8ad433d34edbfb27da118d3f9776aac17538",
8757
+ "contentHash": "a424d11899442be4d1a156fce06c6413265c8493303bb83bd555e2a2a1c6c3a0",
8320
8758
  "sourceKind": "component_definition",
8321
8759
  "sourceId": "praxis-crud",
8322
8760
  "corpusVersion": "1.0.0"
8323
8761
  },
8324
8762
  {
8325
- "chunkIndex": 15,
8763
+ "chunkIndex": 16,
8326
8764
  "chunkKind": "authoring_manifest",
8327
- "content": "{\"operationId\":\"list.kpiBand.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure CRUD KPI band Effects: compile-domain-patch.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"listSurface\",\"resolver\":\"crud-list-surface\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"enabled\",\"cards\"],\"semanticTerms\":[\"enabled\",\"cards\",\"cards.id\",\"cards.label\",\"cards.value\",\"cards.caption\",\"cards.icon\",\"cards.variant\",\"cards.filter\",\"default\",\"primary\",\"success\",\"warning\",\"danger\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"kpiBand\"],\"validators\":[{\"validatorId\":\"crud-context-stable\",\"level\":\"error\",\"code\":\"CRUD_CONTEXT_STABLE\",\"description\":\"Authoring must not break stable crudContext references.\"}],\"preconditions\":[\"crud-metadata-loaded\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8765
+ "content": "{\"operationId\":\"list.kpiBand.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure CRUD KPI band Effects: compile-domain-patch.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"listSurface\",\"resolver\":\"crud-list-surface\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"enabled\",\"columns\",\"source\",\"method\",\"payload\",\"cards\"],\"semanticTerms\":[\"enabled\",\"columns\",\"source\",\"method\",\"payload\",\"cards\",\"2\",\"3\",\"4\",\"GET\",\"POST\",\"cards.id\",\"cards.label\",\"cards.value\",\"cards.valueExpr\",\"cards.caption\",\"cards.captionExpr\",\"cards.icon\",\"cards.variant\",\"cards.tone\",\"cards.filter\",\"default\",\"primary\",\"success\",\"warning\",\"danger\",\"neutral\",\"info\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"kpiBand\"],\"validators\":[{\"validatorId\":\"crud-context-stable\",\"level\":\"error\",\"code\":\"CRUD_CONTEXT_STABLE\",\"description\":\"Authoring must not break stable crudContext references.\"}],\"preconditions\":[\"crud-metadata-loaded\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8328
8766
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
8329
- "contentHash": "0a57da458f4e2e23953315404d23bd8a8a868d81b59fa642663be20b4d2186b2",
8767
+ "contentHash": "26a7f50164974c02366e258cf919383876d7da23d8cb71763062435b337ba519",
8330
8768
  "sourceKind": "component_definition",
8331
8769
  "sourceId": "praxis-crud",
8332
8770
  "corpusVersion": "1.0.0"
8333
8771
  },
8334
8772
  {
8335
- "chunkIndex": 16,
8773
+ "chunkIndex": 17,
8336
8774
  "chunkKind": "authoring_manifest",
8337
8775
  "content": "{\"operationId\":\"list.filterBar.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure CRUD filter bar Effects: compile-domain-patch.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"listSurface\",\"resolver\":\"crud-list-surface\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"inlineFields\",\"quickFilters\",\"showAdvanced\"],\"semanticTerms\":[\"inlineFields\",\"quickFilters\",\"showAdvanced\",\"false\",\"quickFilters.id\",\"quickFilters.label\",\"quickFilters.icon\",\"quickFilters.filter\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"filterBar\"],\"validators\":[{\"validatorId\":\"crud-context-stable\",\"level\":\"error\",\"code\":\"CRUD_CONTEXT_STABLE\",\"description\":\"Authoring must not break stable crudContext references.\"}],\"preconditions\":[\"crud-metadata-loaded\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8338
8776
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8342,7 +8780,7 @@
8342
8780
  "corpusVersion": "1.0.0"
8343
8781
  },
8344
8782
  {
8345
- "chunkIndex": 17,
8783
+ "chunkIndex": 18,
8346
8784
  "chunkKind": "authoring_manifest",
8347
8785
  "content": "{\"operationId\":\"surface.create.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure create surface Effects: compile-domain-patch. Open create in a modal with the employee form.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"createSurface\",\"resolver\":\"crud-action-by-id:create\",\"required\":true},\"inputContract\":{\"required\":[\"actionId\",\"openMode\"],\"properties\":[\"actionId\",\"openMode\",\"route\",\"formId\",\"form\",\"params\",\"back\"],\"semanticTerms\":[\"actionId\",\"openMode\",\"route\",\"formId\",\"form\",\"params\",\"back\",\"create\",\"edit\",\"view\",\"modal\",\"drawer\",\"form.submitLabel\",\"form.schemaUrl\",\"form.submitUrl\",\"form.submitMethod\",\"form.apiEndpointKey\",\"form.initialValue\",\"form.layoutPolicy\",\"post\",\"put\",\"patch\",\"delete\",\"params.from\",\"params.to\",\"params.name\",\"routeParam\",\"query\",\"input\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"actions[].openMode\",\"actions[].route\",\"actions[].formId\",\"actions[].form\",\"actions[].params\",\"actions[].back\"],\"validators\":[{\"validatorId\":\"action-exists\",\"level\":\"error\",\"code\":\"CRUD_ACTION_EXISTS\",\"description\":\"Target action must exist or be created through CRUD action orchestration.\"},{\"validatorId\":\"open-mode-binding-complete\",\"level\":\"error\",\"code\":\"CRUD_OPEN_MODE_BINDING_COMPLETE\",\"description\":\"route requires route; modal/drawer require formId unless resolved by governed overrides.\"},{\"validatorId\":\"schema-url-canonical\",\"level\":\"error\",\"code\":\"CRUD_SCHEMA_URL_CANONICAL\",\"description\":\"Schema URLs must be canonical for the bound resource/action.\"},{\"validatorId\":\"submit-url-canonical\",\"level\":\"error\",\"code\":\"CRUD_SUBMIT_URL_CANONICAL\",\"description\":\"Submit URL and method must be canonical and declared together.\"},{\"validatorId\":\"resource-create-supported\",\"level\":\"error\",\"code\":\"CRUD_CREATE_SUPPORTED\",\"description\":\"Create surface requires resource create capability.\"},{\"validatorId\":\"form-child-operation-delegated\",\"level\":\"error\",\"code\":\"CRUD_FORM_CHILD_DELEGATED\",\"description\":\"FormConfig and FieldMetadata edits must delegate to dynamic-form/metadata-editor manifests.\"}],\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"crud-create-modal\",\"request\":\"Open create in a modal with the employee form.\",\"operationId\":\"surface.create.configure\",\"target\":\"action:create\",\"params\":{\"actionId\":\"create\",\"openMode\":\"modal\",\"formId\":\"employee-create\"},\"isPositive\":true}],\"negativeExamples\":[]}",
8348
8786
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8352,7 +8790,7 @@
8352
8790
  "corpusVersion": "1.0.0"
8353
8791
  },
8354
8792
  {
8355
- "chunkIndex": 18,
8793
+ "chunkIndex": 19,
8356
8794
  "chunkKind": "authoring_manifest",
8357
8795
  "content": "{\"operationId\":\"surface.edit.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure edit surface Effects: compile-domain-patch. Edit should navigate to /employees/:id and map the row id.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"editSurface\",\"resolver\":\"crud-action-by-id:edit\",\"required\":true},\"inputContract\":{\"required\":[\"actionId\",\"openMode\"],\"properties\":[\"actionId\",\"openMode\",\"route\",\"formId\",\"form\",\"params\",\"back\"],\"semanticTerms\":[\"actionId\",\"openMode\",\"route\",\"formId\",\"form\",\"params\",\"back\",\"create\",\"edit\",\"view\",\"modal\",\"drawer\",\"form.submitLabel\",\"form.schemaUrl\",\"form.submitUrl\",\"form.submitMethod\",\"form.apiEndpointKey\",\"form.initialValue\",\"form.layoutPolicy\",\"post\",\"put\",\"patch\",\"delete\",\"params.from\",\"params.to\",\"params.name\",\"routeParam\",\"query\",\"input\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"actions[].openMode\",\"actions[].route\",\"actions[].formId\",\"actions[].form\",\"actions[].params\",\"actions[].back\"],\"validators\":[{\"validatorId\":\"action-exists\",\"level\":\"error\",\"code\":\"CRUD_ACTION_EXISTS\",\"description\":\"Target action must exist or be created through CRUD action orchestration.\"},{\"validatorId\":\"id-field-known\",\"level\":\"error\",\"code\":\"CRUD_ID_FIELD_KNOWN\",\"description\":\"CRUD id field must exist for edit/view/delete flows.\"},{\"validatorId\":\"id-param-mapping-valid\",\"level\":\"error\",\"code\":\"CRUD_ID_PARAM_MAPPING_VALID\",\"description\":\"Edit/view actions must map resource id into route/query/input as required.\"},{\"validatorId\":\"open-mode-binding-complete\",\"level\":\"error\",\"code\":\"CRUD_OPEN_MODE_BINDING_COMPLETE\",\"description\":\"route requires route; modal/drawer require formId unless resolved by governed overrides.\"},{\"validatorId\":\"schema-url-canonical\",\"level\":\"error\",\"code\":\"CRUD_SCHEMA_URL_CANONICAL\",\"description\":\"Schema URLs must be canonical for the bound resource/action.\"},{\"validatorId\":\"submit-url-canonical\",\"level\":\"error\",\"code\":\"CRUD_SUBMIT_URL_CANONICAL\",\"description\":\"Submit URL and method must be canonical and declared together.\"},{\"validatorId\":\"resource-edit-supported\",\"level\":\"error\",\"code\":\"CRUD_EDIT_SUPPORTED\",\"description\":\"Edit surface requires resource edit capability.\"},{\"validatorId\":\"form-child-operation-delegated\",\"level\":\"error\",\"code\":\"CRUD_FORM_CHILD_DELEGATED\",\"description\":\"FormConfig and FieldMetadata edits must delegate to dynamic-form/metadata-editor manifests.\"}],\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"crud-edit-route-with-id\",\"request\":\"Edit should navigate to /employees/:id and map the row id.\",\"operationId\":\"surface.edit.configure\",\"target\":\"action:edit\",\"params\":{\"actionId\":\"edit\",\"openMode\":\"route\",\"route\":\"/employees/:id/edit\",\"params\":[{\"from\":\"id\",\"to\":\"routeParam\",\"name\":\"id\"}]},\"isPositive\":true}],\"negativeExamples\":[]}",
8358
8796
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8362,7 +8800,7 @@
8362
8800
  "corpusVersion": "1.0.0"
8363
8801
  },
8364
8802
  {
8365
- "chunkIndex": 19,
8803
+ "chunkIndex": 20,
8366
8804
  "chunkKind": "authoring_manifest",
8367
8805
  "content": "{\"operationId\":\"surface.view.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure view surface Effects: compile-domain-patch. Open view in a drawer and keep the form readonly.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"viewSurface\",\"resolver\":\"crud-action-by-id:view\",\"required\":true},\"inputContract\":{\"required\":[\"actionId\",\"openMode\"],\"properties\":[\"actionId\",\"openMode\",\"route\",\"formId\",\"form\",\"params\",\"back\"],\"semanticTerms\":[\"actionId\",\"openMode\",\"route\",\"formId\",\"form\",\"params\",\"back\",\"create\",\"edit\",\"view\",\"modal\",\"drawer\",\"form.submitLabel\",\"form.schemaUrl\",\"form.submitUrl\",\"form.submitMethod\",\"form.apiEndpointKey\",\"form.initialValue\",\"form.layoutPolicy\",\"post\",\"put\",\"patch\",\"delete\",\"params.from\",\"params.to\",\"params.name\",\"routeParam\",\"query\",\"input\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"actions[].openMode\",\"actions[].route\",\"actions[].formId\",\"actions[].form\",\"actions[].params\",\"actions[].back\"],\"validators\":[{\"validatorId\":\"action-exists\",\"level\":\"error\",\"code\":\"CRUD_ACTION_EXISTS\",\"description\":\"Target action must exist or be created through CRUD action orchestration.\"},{\"validatorId\":\"open-mode-binding-complete\",\"level\":\"error\",\"code\":\"CRUD_OPEN_MODE_BINDING_COMPLETE\",\"description\":\"route requires route; modal/drawer require formId unless resolved by governed overrides.\"},{\"validatorId\":\"schema-url-canonical\",\"level\":\"error\",\"code\":\"CRUD_SCHEMA_URL_CANONICAL\",\"description\":\"Schema URLs must be canonical for the bound resource/action.\"},{\"validatorId\":\"resource-view-supported\",\"level\":\"error\",\"code\":\"CRUD_VIEW_SUPPORTED\",\"description\":\"View surface requires resource view capability.\"},{\"validatorId\":\"form-child-operation-delegated\",\"level\":\"error\",\"code\":\"CRUD_FORM_CHILD_DELEGATED\",\"description\":\"FormConfig and FieldMetadata edits must delegate to dynamic-form/metadata-editor manifests.\"},{\"validatorId\":\"readonly-form-delegation-valid\",\"level\":\"error\",\"code\":\"CRUD_READONLY_FORM_DELEGATED\",\"description\":\"Readonly form behavior belongs to the dynamic-form manifest.\"}],\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"crud-view-drawer-readonly\",\"request\":\"Open view in a drawer and keep the form readonly.\",\"operationId\":\"surface.view.configure\",\"target\":\"action:view\",\"params\":{\"actionId\":\"view\",\"openMode\":\"drawer\",\"formId\":\"employee-view\"},\"isPositive\":true}],\"negativeExamples\":[]}",
8368
8806
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8372,7 +8810,7 @@
8372
8810
  "corpusVersion": "1.0.0"
8373
8811
  },
8374
8812
  {
8375
- "chunkIndex": 20,
8813
+ "chunkIndex": 21,
8376
8814
  "chunkKind": "authoring_manifest",
8377
8815
  "content": "{\"operationId\":\"delete.enabled.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure delete behavior Effects: compile-domain-patch. Enable delete but require confirmation. Force delete even though the backend does not expose delete capability.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"deleteBehavior\",\"resolver\":\"crud-action-by-id:delete\",\"required\":true},\"inputContract\":{\"required\":[\"enabled\"],\"properties\":[\"enabled\",\"actionId\",\"requiresConfirmation\",\"autoDelete\",\"form\"],\"semanticTerms\":[\"enabled\",\"actionId\",\"requiresConfirmation\",\"autoDelete\",\"form\",\"form.submitUrl\",\"form.submitMethod\",\"form.apiEndpointKey\",\"delete\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"actions[].disabled\",\"actions[].requiresConfirmation\",\"actions[].autoDelete\",\"actions[].form\",\"actions[].form.submitUrl\",\"actions[].form.submitMethod\",\"actions[].form.apiEndpointKey\"],\"validators\":[{\"validatorId\":\"delete-action-exists\",\"level\":\"error\",\"code\":\"CRUD_DELETE_ACTION_EXISTS\",\"description\":\"Delete behavior requires a delete action target.\"},{\"validatorId\":\"resource-delete-supported\",\"level\":\"error\",\"code\":\"CRUD_DELETE_SUPPORTED\",\"description\":\"Delete behavior requires resource delete capability.\"},{\"validatorId\":\"destructive-delete-confirmed\",\"level\":\"error\",\"code\":\"CRUD_DELETE_CONFIRMED\",\"description\":\"Destructive delete behavior requires explicit confirmation.\"},{\"validatorId\":\"submit-url-canonical\",\"level\":\"error\",\"code\":\"CRUD_SUBMIT_URL_CANONICAL\",\"description\":\"Submit URL and method must be canonical and declared together.\"},{\"validatorId\":\"permissions-delete-valid\",\"level\":\"error\",\"code\":\"CRUD_DELETE_PERMISSION_VALID\",\"description\":\"Delete permission cannot bypass resource capabilities or confirmation policy.\"}],\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\",\"explicit-confirmation-provided\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"crud-delete-enable-confirmed\",\"request\":\"Enable delete but require confirmation.\",\"operationId\":\"delete.enabled.set\",\"target\":\"action:delete\",\"params\":{\"enabled\":true,\"actionId\":\"delete\",\"requiresConfirmation\":true,\"autoDelete\":true},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"crud-reject-delete-without-capability\",\"request\":\"Force delete even though the backend does not expose delete capability.\",\"operationId\":\"delete.enabled.set\",\"target\":\"action:delete\",\"params\":{\"enabled\":true,\"actionId\":\"delete\",\"requiresConfirmation\":false},\"isPositive\":false}]}",
8378
8816
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8382,7 +8820,7 @@
8382
8820
  "corpusVersion": "1.0.0"
8383
8821
  },
8384
8822
  {
8385
- "chunkIndex": 21,
8823
+ "chunkIndex": 22,
8386
8824
  "chunkKind": "authoring_manifest",
8387
8825
  "content": "{\"operationId\":\"dialog.size.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure CRUD dialog host defaults Effects: compile-domain-patch. Make CRUD modals 900px wide and remember their last state. Open CRUD forms in a left drawer with an 8px maximized inset.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"dialogHost\",\"resolver\":\"crud-dialog-host-defaults\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"defaultOpenMode\",\"modal\",\"back\"],\"semanticTerms\":[\"defaultOpenMode\",\"modal\",\"back\",\"route\",\"drawer\",\"modal.width\",\"modal.height\",\"modal.minWidth\",\"modal.minHeight\",\"modal.maxWidth\",\"modal.maxHeight\",\"modal.density\",\"modal.backdropStyle\",\"modal.canMaximize\",\"modal.rememberLastState\",\"modal.closeOnSave\",\"modal.startMaximized\",\"modal.disableCloseOnEsc\",\"modal.disableCloseOnBackdrop\",\"modal.fullscreenBreakpoint\",\"modal.position\",\"modal.edgeGap\",\"blur\",\"dim\",\"transparent\",\"modal.position.top\",\"modal.position.bottom\",\"modal.position.left\",\"modal.position.right\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"defaults.openMode\",\"defaults.modal\",\"defaults.back\"],\"validators\":[{\"validatorId\":\"open-mode-supported\",\"level\":\"error\",\"code\":\"CRUD_OPEN_MODE_SUPPORTED\",\"description\":\"Open mode must be route, modal or drawer.\"},{\"validatorId\":\"modal-size-valid\",\"level\":\"error\",\"code\":\"CRUD_MODAL_SIZE_VALID\",\"description\":\"Modal sizing defaults must be valid DialogConfig values.\"},{\"validatorId\":\"drawer-runtime-available\",\"level\":\"error\",\"code\":\"CRUD_DRAWER_RUNTIME_AVAILABLE\",\"description\":\"Drawer open mode uses the default dialog-backed drawer runtime with CRUD-owned chrome, responsive right-panel sizing, Escape/backdrop handling and semantic close/save results; a host drawer adapter is optional only for shell-specific presentation.\"},{\"validatorId\":\"drawer-position-lifecycle-stable\",\"level\":\"error\",\"code\":\"CRUD_DRAWER_POSITION_LIFECYCLE_STABLE\",\"description\":\"A drawer must preserve its configured viewport edge through open, remembered-size restoration, maximize and restore.\"},{\"validatorId\":\"back-policy-valid\",\"level\":\"error\",\"code\":\"CRUD_BACK_POLICY_VALID\",\"description\":\"Back policy must be valid for route/modal/drawer behavior.\"},{\"validatorId\":\"settings-panel-shell-compatible\",\"level\":\"warning\",\"code\":\"CRUD_SETTINGS_PANEL_COMPATIBLE\",\"description\":\"Authoring shell must preserve apply/save/reset semantics.\"}],\"preconditions\":[\"crud-metadata-loaded\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"crud-dialog-size-medium\",\"request\":\"Make CRUD modals 900px wide and remember their last state.\",\"operationId\":\"dialog.size.set\",\"target\":\"dialogHost\",\"params\":{\"defaultOpenMode\":\"modal\",\"modal\":{\"width\":\"900px\",\"rememberLastState\":true}},\"isPositive\":true},{\"id\":\"crud-drawer-left-edge\",\"request\":\"Open CRUD forms in a left drawer with an 8px maximized inset.\",\"operationId\":\"dialog.size.set\",\"target\":\"dialogHost\",\"params\":{\"defaultOpenMode\":\"drawer\",\"modal\":{\"position\":{\"left\":\"0\",\"top\":\"0\"},\"edgeGap\":8}},\"isPositive\":true}],\"negativeExamples\":[]}",
8388
8826
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8392,7 +8830,7 @@
8392
8830
  "corpusVersion": "1.0.0"
8393
8831
  },
8394
8832
  {
8395
- "chunkIndex": 22,
8833
+ "chunkIndex": 23,
8396
8834
  "chunkKind": "authoring_manifest",
8397
8835
  "content": "{\"operationId\":\"permissions.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure CRUD permissions Effects: compile-domain-patch. Hide delete when the resource capabilities do not allow it.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"permissions\",\"resolver\":\"crud-resource-capabilities\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"requiredCapabilities\",\"actionPermissions\",\"denyWhenMissingCapability\"],\"semanticTerms\":[\"requiredCapabilities\",\"actionPermissions\",\"denyWhenMissingCapability\",\"create\",\"view\",\"edit\",\"delete\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"actions[].disabled\",\"actions[].visibleWhen\",\"actions[].requiresConfirmation\"],\"validators\":[{\"validatorId\":\"resource-capabilities-resolvable\",\"level\":\"error\",\"code\":\"CRUD_CAPABILITIES_RESOLVABLE\",\"description\":\"Resource capabilities must be resolvable before action enablement is authored.\"},{\"validatorId\":\"action-permission-supported\",\"level\":\"error\",\"code\":\"CRUD_ACTION_PERMISSION_SUPPORTED\",\"description\":\"Action permissions must map to supported resource capabilities.\"},{\"validatorId\":\"delete-permission-requires-confirmation\",\"level\":\"error\",\"code\":\"CRUD_DELETE_PERMISSION_CONFIRMATION\",\"description\":\"Delete permission enablement requires confirmation policy.\"},{\"validatorId\":\"permissions-do-not-shadow-backend\",\"level\":\"error\",\"code\":\"CRUD_PERMISSIONS_NO_BACKEND_SHADOW\",\"description\":\"UI permissions must not shadow backend capability denial.\"}],\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"crud-permissions-no-delete\",\"request\":\"Hide delete when the resource capabilities do not allow it.\",\"operationId\":\"permissions.set\",\"target\":\"permissions:delete\",\"params\":{\"requiredCapabilities\":[\"delete\"],\"denyWhenMissingCapability\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
8398
8836
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8402,7 +8840,7 @@
8402
8840
  "corpusVersion": "1.0.0"
8403
8841
  },
8404
8842
  {
8405
- "chunkIndex": 23,
8843
+ "chunkIndex": 24,
8406
8844
  "chunkKind": "authoring_manifest",
8407
8845
  "content": "{\"operationId\":\"form.childOperation.delegate\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Delegate child form/table/dialog authoring operation Effects: compile-domain-patch. Add a new field to the create form. Add a salary column to the list table. Put this dynamic-form validation rule directly inside CRUD.\",\"scope\":\"global\",\"target\":{\"kind\":\"childOperation\",\"resolver\":\"child-authoring-manifest-operation\",\"required\":false},\"inputContract\":{\"required\":[\"childComponentId\",\"childOperationId\",\"reason\"],\"properties\":[\"childComponentId\",\"childOperationId\",\"reason\",\"childTarget\",\"childParams\"],\"semanticTerms\":[\"childComponentId\",\"childOperationId\",\"reason\",\"childTarget\",\"childParams\",\"praxis-dynamic-form\",\"praxis-table\",\"praxis-dialog\",\"praxis-settings-panel\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"delegatedAuthoringOperations\"],\"validators\":[{\"validatorId\":\"child-manifest-available\",\"level\":\"error\",\"code\":\"CRUD_CHILD_MANIFEST_AVAILABLE\",\"description\":\"Delegated child manifest must be available.\"},{\"validatorId\":\"child-operation-known\",\"level\":\"error\",\"code\":\"CRUD_CHILD_OPERATION_KNOWN\",\"description\":\"Delegated operation must exist in the child manifest.\"},{\"validatorId\":\"no-local-form-config-write\",\"level\":\"error\",\"code\":\"CRUD_NO_LOCAL_FORM_CONFIG_WRITE\",\"description\":\"CRUD must not locally redefine FormConfig semantics.\"},{\"validatorId\":\"no-local-table-config-write\",\"level\":\"error\",\"code\":\"CRUD_NO_LOCAL_TABLE_CONFIG_WRITE\",\"description\":\"CRUD must not locally redefine TableConfig semantics.\"},{\"validatorId\":\"delegation-target-valid\",\"level\":\"error\",\"code\":\"CRUD_DELEGATION_TARGET_VALID\",\"description\":\"Delegation target must be resolvable by the child manifest.\"}],\"preconditions\":[\"child-manifest-available\"],\"submissionImpact\":\"none\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"crud-delegate-form-layout\",\"request\":\"Add a new field to the create form.\",\"operationId\":\"form.childOperation.delegate\",\"target\":\"praxis-dynamic-form:field.add\",\"params\":{\"childComponentId\":\"praxis-dynamic-form\",\"childOperationId\":\"field.add\",\"reason\":\"Form field semantics belong to dynamic-form\"},\"isPositive\":true},{\"id\":\"crud-delegate-table-column\",\"request\":\"Add a salary column to the list table.\",\"operationId\":\"form.childOperation.delegate\",\"target\":\"praxis-table:column.add\",\"params\":{\"childComponentId\":\"praxis-table\",\"childOperationId\":\"column.add\",\"reason\":\"Table column semantics belong to praxis-table\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"crud-reject-local-form-rules\",\"request\":\"Put this dynamic-form validation rule directly inside CRUD.\",\"operationId\":\"form.childOperation.delegate\",\"target\":\"praxis-dynamic-form:rules.add\",\"params\":{\"childComponentId\":\"praxis-dynamic-form\",\"childOperationId\":\"rules.add\",\"reason\":\"CRUD must not redefine FormConfig rules\"},\"isPositive\":false}]}",
8408
8846
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8412,7 +8850,7 @@
8412
8850
  "corpusVersion": "1.0.0"
8413
8851
  },
8414
8852
  {
8415
- "chunkIndex": 24,
8853
+ "chunkIndex": 25,
8416
8854
  "chunkKind": "authoring_manifest",
8417
8855
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"identity\"}",
8418
8856
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8422,7 +8860,7 @@
8422
8860
  "corpusVersion": "1.0.0"
8423
8861
  },
8424
8862
  {
8425
- "chunkIndex": 25,
8863
+ "chunkIndex": 26,
8426
8864
  "chunkKind": "authoring_manifest",
8427
8865
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"metadata\",\"type\":\"CrudMetadata | string\",\"description\":\"Canonical CRUD metadata or serialized metadata document.\"},{\"name\":\"crudId\",\"type\":\"string\",\"description\":\"Stable CRUD instance id used for table/form identity and persistence.\"},{\"name\":\"componentInstanceId\",\"type\":\"string\",\"description\":\"Optional stable host instance id for multiple CRUD widgets on the same route.\"},{\"name\":\"tableConfigPersistenceStrategy\",\"type\":\"'local-first' | 'input-first' | 'volatile'\",\"description\":\"Persistence precedence forwarded to the internal Praxis Table. Governed previews should use input-first or volatile explicitly.\"},{\"name\":\"context\",\"type\":\"Record<string, unknown>\",\"description\":\"Opaque host context used for authoring seeds and launcher inputs.\"},{\"name\":\"enableCustomization\",\"type\":\"boolean\",\"description\":\"Explicit host opt-in for CRUD authoring surfaces.\"},{\"name\":\"showResourceIdentityKey\",\"type\":\"boolean\",\"description\":\"Presentation-only control for the canonical key in existing-record modal and drawer headers. Defaults to true; false preserves the readable title while hiding an opaque or technical key.\"},{\"name\":\"authoringCapability\",\"type\":\"string | null\",\"description\":\"Public runtime capability required before CRUD and delegated table authoring can open.\"},{\"name\":\"afterOpen\",\"type\":\"{ mode: FormOpenMode; action: string }\",\"description\":\"Emitted after a CRUD action opens.\"},{\"name\":\"afterSave\",\"type\":\"{ id: string | number; data: unknown }\",\"description\":\"Emitted after save; CRUD refetches the list.\"},{\"name\":\"afterDelete\",\"type\":\"{ id: string | number }\",\"description\":\"Emitted after delete; CRUD refetches the list.\"},{\"name\":\"resourceEvent\",\"type\":\"PraxisResourceEvent<unknown>\",\"description\":\"Canonical resource interaction envelope forwarded from the internal table for governed host composition.\"}]}",
8428
8866
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8432,7 +8870,7 @@
8432
8870
  "corpusVersion": "1.0.0"
8433
8871
  },
8434
8872
  {
8435
- "chunkIndex": 26,
8873
+ "chunkIndex": 27,
8436
8874
  "chunkKind": "authoring_manifest",
8437
8875
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"resourceBinding\",\"resolver\":\"crud-resource-by-path-or-key\",\"description\":\"Resource path/key, optional schema path template, id field, endpoint key and query context owned by CRUD orchestration.\"},{\"kind\":\"listSurface\",\"resolver\":\"crud-list-surface\",\"description\":\"CRUD-hosted list surface and table delegation boundary.\"},{\"kind\":\"createSurface\",\"resolver\":\"crud-action-by-id:create\",\"description\":\"Create action open mode, route/form binding and launcher inputs.\"},{\"kind\":\"editSurface\",\"resolver\":\"crud-action-by-id:edit\",\"description\":\"Edit action open mode, route/form binding and launcher inputs.\"},{\"kind\":\"viewSurface\",\"resolver\":\"crud-action-by-id:view\",\"description\":\"View action open mode, route/form binding and launcher inputs.\"},{\"kind\":\"deleteBehavior\",\"resolver\":\"crud-action-by-id:delete\",\"description\":\"Delete action enablement, confirmation, endpoint and capability policy.\"},{\"kind\":\"dialogHost\",\"resolver\":\"crud-dialog-host-defaults\",\"description\":\"Route/modal/drawer defaults consumed by CrudLauncherService and DynamicFormDialogHostComponent, including contextual shell titles derived from action label, form title or resource metadata.\"},{\"kind\":\"formBinding\",\"resolver\":\"crud-action-form-contract-by-action-id\",\"description\":\"CRUD-owned form binding fields: formId, presentation-only submitLabel, schemaUrl, submitUrl, submitMethod, params and initialValue. Shared FormConfig remains owned by Dynamic Form and is forwarded through CrudMetadata.form when present.\"},{\"kind\":\"permissions\",\"resolver\":\"crud-resource-capabilities\",\"description\":\"CRUD action availability derived from resource capabilities and action permissions.\"},{\"kind\":\"domainGovernanceContext\",\"resolver\":\"domain-catalog-context-by-resource-key\",\"description\":\"Read-only semantic/governance context resolved from Domain Catalog and referenced from CRUD queryContext.meta.\"},{\"kind\":\"childOperation\",\"resolver\":\"child-authoring-manifest-operation\",\"description\":\"Delegated form/table/dialog/settings-panel operation owned by the child component manifest.\"}]}",
8438
8876
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8442,47 +8880,57 @@
8442
8880
  "corpusVersion": "1.0.0"
8443
8881
  },
8444
8882
  {
8445
- "chunkIndex": 27,
8883
+ "chunkIndex": 28,
8446
8884
  "chunkKind": "authoring_manifest",
8447
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"resource.bind\",\"title\":\"Bind CRUD resource\",\"scope\":\"dataBinding\",\"targetKind\":\"resourceBinding\",\"target\":{\"kind\":\"resourceBinding\",\"resolver\":\"crud-resource-by-path-or-key\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"resourcePath\"],\"properties\":{\"resourcePath\":{\"type\":\"string\"},\"resourceKey\":{\"type\":\"string\"},\"idField\":{\"type\":[\"string\",\"number\"]},\"endpointKey\":{\"type\":\"string\"},\"queryContext\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-resource-bind\",\"handlerContract\":{\"reads\":[\"CrudMetadata.resource\",\"api_metadata\",\"ResourceDiscoveryService\",\"GET /{resource}/capabilities\"],\"writes\":[\"CrudMetadata.resource\",\"CrudMetadata.queryContext\",\"PraxisCrudComponent.tableCrudContext\"],\"identityKeys\":[\"resourcePath\",\"resourceKey\",\"schemaPath\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"resourcePath\"],\"properties\":{\"resourcePath\":{\"type\":\"string\"},\"resourceKey\":{\"type\":\"string\"},\"idField\":{\"type\":[\"string\",\"number\"]},\"endpointKey\":{\"type\":\"string\"},\"queryContext\":{\"type\":\"object\"}}},\"failureModes\":[\"resource-not-found\",\"schema-url-not-canonical\",\"capabilities-unavailable\",\"id-field-missing\"],\"description\":\"Binds CRUD to a canonical resource and validates it against api_metadata/resource capabilities before runtime use. Use CrudMetadata.resource.schemaPath when schema discovery must use a templated path while resource.path targets a concrete nested collection.\"}}],\"validators\":[\"resource-exists-in-api-metadata\",\"resource-path-canonical\",\"resource-key-stable\",\"id-field-known\",\"resource-capabilities-resolvable\"],\"affectedPaths\":[\"resource.path\",\"resource.schemaPath\",\"resource.idField\",\"resource.endpointKey\",\"resource.apiUrlEntry\",\"queryContext\",\"filterCriteria\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"crud-metadata-loaded\",\"api-metadata-available\"]},{\"operationId\":\"domain.governanceContext.attach\",\"title\":\"Attach Domain Catalog governance context\",\"scope\":\"dataBinding\",\"targetKind\":\"domainGovernanceContext\",\"target\":{\"kind\":\"domainGovernanceContext\",\"resolver\":\"domain-catalog-context-by-resource-key\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"resourceKey\",\"query\"],\"properties\":{\"resourceKey\":{\"type\":\"string\"},\"releaseId\":{\"type\":\"string\"},\"query\":{\"type\":\"string\"},\"itemTypes\":{\"type\":\"array\",\"items\":{\"enum\":[\"governance\",\"vocabulary\",\"relationship\"]}},\"intent\":{\"enum\":[\"authoring\",\"explain\",\"validate\",\"ai-access-control\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-domain-governance-context-attach\",\"handlerContract\":{\"reads\":[\"CrudMetadata.resource\",\"CrudMetadata.queryContext\",\"DomainCatalogService.getGovernanceContext\",\"DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK\",\"api_metadata\"],\"writes\":[\"CrudMetadata.queryContext.meta.domainCatalog\"],\"identityKeys\":[\"resourceKey\",\"releaseId\",\"query\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"resourceKey\",\"query\"],\"properties\":{\"resourceKey\":{\"type\":\"string\"},\"releaseId\":{\"type\":\"string\"},\"query\":{\"type\":\"string\"},\"itemTypes\":{\"type\":\"array\",\"items\":{\"enum\":[\"governance\",\"vocabulary\",\"relationship\"]}},\"intent\":{\"enum\":[\"authoring\",\"explain\",\"validate\",\"ai-access-control\"]}}},\"failureModes\":[\"resource-key-missing\",\"domain-catalog-release-not-found\",\"governance-context-empty\",\"ai-usage-forbidden\"],\"description\":\"Resolves read-only domain vocabulary/governance context and stores only a lightweight reference/probe under queryContext.meta.domainCatalog.\"}}],\"validators\":[\"resource-key-stable\",\"domain-catalog-context-resolvable\",\"domain-catalog-read-only\",\"ai-usage-visibility-respected\",\"no-form-config-rule-materialization\"],\"affectedPaths\":[\"queryContext.meta.domainCatalog\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\",\"api-metadata-available\",\"domain-catalog-service-available\"]},{\"operationId\":\"list.surface.configure\",\"title\":\"Configure CRUD list surface\",\"scope\":\"interaction\",\"targetKind\":\"listSurface\",\"target\":{\"kind\":\"listSurface\",\"resolver\":\"crud-list-surface\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"tablePatch\":{\"type\":\"object\"},\"queryContext\":{\"type\":\"object\"},\"filterCriteria\":{\"type\":\"object\"},\"kpiBand\":{\"type\":\"object\",\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"cards\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"label\",\"value\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"value\":{\"type\":[\"string\",\"number\"]},\"caption\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"variant\":{\"enum\":[\"default\",\"primary\",\"success\",\"warning\",\"danger\"]},\"filter\":{\"type\":\"object\"}}}}}},\"filterBar\":{\"type\":\"object\",\"properties\":{\"inlineFields\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"quickFilters\":{\"oneOf\":[{\"const\":false},{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"label\",\"filter\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"filter\":{\"type\":[\"string\",\"object\"]}}}}]},\"showAdvanced\":{\"type\":\"boolean\"}}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-list-surface-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.table\",\"CrudMetadata.queryContext\",\"CrudMetadata.kpiBand\",\"CrudMetadata.filterBar\",\"PRAXIS_TABLE_AUTHORING_MANIFEST\",\"CRUD_AI_CAPABILITIES\"],\"writes\":[\"CrudMetadata.table\",\"CrudMetadata.queryContext\",\"CrudMetadata.filterCriteria\",\"CrudMetadata.kpiBand\",\"CrudMetadata.filterBar\"],\"identityKeys\":[\"crudId\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"tablePatch\":{\"type\":\"object\"},\"queryContext\":{\"type\":\"object\"},\"filterCriteria\":{\"type\":\"object\"},\"kpiBand\":{\"type\":\"object\",\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"cards\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"label\",\"value\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"value\":{\"type\":[\"string\",\"number\"]},\"caption\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"variant\":{\"enum\":[\"default\",\"primary\",\"success\",\"warning\",\"danger\"]},\"filter\":{\"type\":\"object\"}}}}}},\"filterBar\":{\"type\":\"object\",\"properties\":{\"inlineFields\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"quickFilters\":{\"oneOf\":[{\"const\":false},{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"label\",\"filter\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"filter\":{\"type\":[\"string\",\"object\"]}}}}]},\"showAdvanced\":{\"type\":\"boolean\"}}}}},\"failureModes\":[\"table-operation-not-delegated\",\"table-patch-not-supported\",\"query-context-invalid\"],\"description\":\"Configures CRUD-owned list orchestration (including KPI band and filter bar shortcuts) while routing table semantics to the praxis-table manifest.\"}}],\"validators\":[\"table-child-operation-delegated\",\"query-context-valid\",\"filter-criteria-bridge-valid\",\"crud-context-stable\"],\"affectedPaths\":[\"table\",\"queryContext\",\"filterCriteria\",\"kpiBand\",\"filterBar\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\",\"praxis-table-manifest-available\"]}]}",
8885
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"resource.bind\",\"title\":\"Bind CRUD resource\",\"scope\":\"dataBinding\",\"targetKind\":\"resourceBinding\",\"target\":{\"kind\":\"resourceBinding\",\"resolver\":\"crud-resource-by-path-or-key\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"resourcePath\"],\"properties\":{\"resourcePath\":{\"type\":\"string\"},\"resourceKey\":{\"type\":\"string\"},\"idField\":{\"type\":[\"string\",\"number\"]},\"endpointKey\":{\"type\":\"string\"},\"queryContext\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-resource-bind\",\"handlerContract\":{\"reads\":[\"CrudMetadata.resource\",\"api_metadata\",\"ResourceDiscoveryService\",\"GET /{resource}/capabilities\"],\"writes\":[\"CrudMetadata.resource\",\"CrudMetadata.queryContext\",\"PraxisCrudComponent.tableCrudContext\"],\"identityKeys\":[\"resourcePath\",\"resourceKey\",\"schemaPath\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"resourcePath\"],\"properties\":{\"resourcePath\":{\"type\":\"string\"},\"resourceKey\":{\"type\":\"string\"},\"idField\":{\"type\":[\"string\",\"number\"]},\"endpointKey\":{\"type\":\"string\"},\"queryContext\":{\"type\":\"object\"}}},\"failureModes\":[\"resource-not-found\",\"schema-url-not-canonical\",\"capabilities-unavailable\",\"id-field-missing\"],\"description\":\"Binds CRUD to a canonical resource and validates it against api_metadata/resource capabilities before runtime use. Use CrudMetadata.resource.schemaPath when schema discovery must use a templated path while resource.path targets a concrete nested collection.\"}}],\"validators\":[\"resource-exists-in-api-metadata\",\"resource-path-canonical\",\"resource-key-stable\",\"id-field-known\",\"resource-capabilities-resolvable\"],\"affectedPaths\":[\"resource.path\",\"resource.schemaPath\",\"resource.idField\",\"resource.endpointKey\",\"resource.apiUrlEntry\",\"queryContext\",\"filterCriteria\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"crud-metadata-loaded\",\"api-metadata-available\"]},{\"operationId\":\"domain.governanceContext.attach\",\"title\":\"Attach Domain Catalog governance context\",\"scope\":\"dataBinding\",\"targetKind\":\"domainGovernanceContext\",\"target\":{\"kind\":\"domainGovernanceContext\",\"resolver\":\"domain-catalog-context-by-resource-key\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"resourceKey\",\"query\"],\"properties\":{\"resourceKey\":{\"type\":\"string\"},\"releaseId\":{\"type\":\"string\"},\"query\":{\"type\":\"string\"},\"itemTypes\":{\"type\":\"array\",\"items\":{\"enum\":[\"governance\",\"vocabulary\",\"relationship\"]}},\"intent\":{\"enum\":[\"authoring\",\"explain\",\"validate\",\"ai-access-control\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-domain-governance-context-attach\",\"handlerContract\":{\"reads\":[\"CrudMetadata.resource\",\"CrudMetadata.queryContext\",\"DomainCatalogService.getGovernanceContext\",\"DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK\",\"api_metadata\"],\"writes\":[\"CrudMetadata.queryContext.meta.domainCatalog\"],\"identityKeys\":[\"resourceKey\",\"releaseId\",\"query\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"resourceKey\",\"query\"],\"properties\":{\"resourceKey\":{\"type\":\"string\"},\"releaseId\":{\"type\":\"string\"},\"query\":{\"type\":\"string\"},\"itemTypes\":{\"type\":\"array\",\"items\":{\"enum\":[\"governance\",\"vocabulary\",\"relationship\"]}},\"intent\":{\"enum\":[\"authoring\",\"explain\",\"validate\",\"ai-access-control\"]}}},\"failureModes\":[\"resource-key-missing\",\"domain-catalog-release-not-found\",\"governance-context-empty\",\"ai-usage-forbidden\"],\"description\":\"Resolves read-only domain vocabulary/governance context and stores only a lightweight reference/probe under queryContext.meta.domainCatalog.\"}}],\"validators\":[\"resource-key-stable\",\"domain-catalog-context-resolvable\",\"domain-catalog-read-only\",\"ai-usage-visibility-respected\",\"no-form-config-rule-materialization\"],\"affectedPaths\":[\"queryContext.meta.domainCatalog\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\",\"api-metadata-available\",\"domain-catalog-service-available\"]}]}",
8448
8886
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
8449
- "contentHash": "6b37865c88d877c9d97c7b97cb5c5cb69351423b909060f1ffef5341db31dd09",
8887
+ "contentHash": "80826016435e533acfc59d8f97ae536939201a3a14b9c4818c4fce294369daa4",
8450
8888
  "sourceKind": "component_definition",
8451
8889
  "sourceId": "praxis-crud",
8452
8890
  "corpusVersion": "1.0.0"
8453
8891
  },
8454
8892
  {
8455
- "chunkIndex": 28,
8893
+ "chunkIndex": 29,
8456
8894
  "chunkKind": "authoring_manifest",
8457
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"list.kpiBand.configure\",\"title\":\"Configure CRUD KPI band\",\"scope\":\"interaction\",\"targetKind\":\"listSurface\",\"target\":{\"kind\":\"listSurface\",\"resolver\":\"crud-list-surface\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"cards\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"label\",\"value\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"value\":{\"type\":[\"string\",\"number\"]},\"caption\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"variant\":{\"enum\":[\"default\",\"primary\",\"success\",\"warning\",\"danger\"]},\"filter\":{\"type\":\"object\"}}}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-kpi-band-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.kpiBand\",\"CrudMetadata.resource\"],\"writes\":[\"CrudMetadata.kpiBand\"],\"identityKeys\":[\"crudId\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"cards\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"label\",\"value\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"value\":{\"type\":[\"string\",\"number\"]},\"caption\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"variant\":{\"enum\":[\"default\",\"primary\",\"success\",\"warning\",\"danger\"]},\"filter\":{\"type\":\"object\"}}}}}},\"failureModes\":[\"kpi-card-label-missing\",\"kpi-card-value-missing\",\"kpi-card-filter-invalid\"],\"description\":\"Configures the CRUD KPI summary band and optional click-to-filter card criteria.\"}}],\"validators\":[\"crud-context-stable\"],\"affectedPaths\":[\"kpiBand\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\"]},{\"operationId\":\"list.filterBar.configure\",\"title\":\"Configure CRUD filter bar\",\"scope\":\"interaction\",\"targetKind\":\"listSurface\",\"target\":{\"kind\":\"listSurface\",\"resolver\":\"crud-list-surface\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"inlineFields\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"quickFilters\":{\"oneOf\":[{\"const\":false},{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"label\",\"filter\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"filter\":{\"type\":[\"string\",\"object\"]}}}}]},\"showAdvanced\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-filter-bar-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.filterBar\",\"CrudMetadata.resource\"],\"writes\":[\"CrudMetadata.filterBar\"],\"identityKeys\":[\"crudId\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"inlineFields\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"quickFilters\":{\"oneOf\":[{\"const\":false},{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"label\",\"filter\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"filter\":{\"type\":[\"string\",\"object\"]}}}}]},\"showAdvanced\":{\"type\":\"boolean\"}}},\"failureModes\":[\"quick-filter-id-missing\",\"quick-filter-label-missing\",\"quick-filter-condition-invalid\"],\"description\":\"Configures CRUD filterBar shorthand (inlineFields, quickFilters, showAdvanced) expanded into the internal table runtime.\"}}],\"validators\":[\"crud-context-stable\"],\"affectedPaths\":[\"filterBar\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\"]},{\"operationId\":\"surface.create.configure\",\"title\":\"Configure create surface\",\"scope\":\"interaction\",\"targetKind\":\"createSurface\",\"target\":{\"kind\":\"createSurface\",\"resolver\":\"crud-action-by-id:create\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"actionId\",\"openMode\"],\"properties\":{\"actionId\":{\"enum\":[\"create\",\"edit\",\"view\"]},\"openMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"route\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitLabel\":{\"type\":\"string\"},\"schemaUrl\":{\"type\":\"string\"},\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"post\",\"put\",\"patch\",\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"},\"initialValue\":{\"type\":\"object\"},\"layoutPolicy\":{\"type\":\"object\"}}},\"params\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"from\",\"to\",\"name\"],\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"enum\":[\"routeParam\",\"query\",\"input\"]},\"name\":{\"type\":\"string\"}}}},\"back\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-create-surface-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.actions\",\"CrudLauncherService.resolveOpenMode\",\"DynamicFormDialogHostComponent\",\"api_metadata\"],\"writes\":[\"CrudMetadata.actions[]\",\"CrudMetadata.actions[].form\",\"CrudMetadata.actions[].params\",\"CrudMetadata.actions[].back\"],\"identityKeys\":[\"actionId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"actionId\",\"openMode\"],\"properties\":{\"actionId\":{\"enum\":[\"create\",\"edit\",\"view\"]},\"openMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"route\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitLabel\":{\"type\":\"string\"},\"schemaUrl\":{\"type\":\"string\"},\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"post\",\"put\",\"patch\",\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"},\"initialValue\":{\"type\":\"object\"},\"layoutPolicy\":{\"type\":\"object\"}}},\"params\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"from\",\"to\",\"name\"],\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"enum\":[\"routeParam\",\"query\",\"input\"]},\"name\":{\"type\":\"string\"}}}},\"back\":{\"type\":\"object\"}}},\"failureModes\":[\"action-not-found\",\"open-mode-binding-incomplete\",\"schema-url-not-canonical\",\"submit-url-not-canonical\",\"resource-create-not-supported\"],\"description\":\"Configures create action binding and launcher inputs without editing the child FormConfig.\"}}],\"validators\":[\"action-exists\",\"open-mode-binding-complete\",\"schema-url-canonical\",\"submit-url-canonical\",\"resource-create-supported\",\"form-child-operation-delegated\"],\"affectedPaths\":[\"actions[].openMode\",\"actions[].route\",\"actions[].formId\",\"actions[].form\",\"actions[].params\",\"actions[].back\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\"]}]}",
8895
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"list.surface.configure\",\"title\":\"Configure CRUD list surface\",\"scope\":\"interaction\",\"targetKind\":\"listSurface\",\"target\":{\"kind\":\"listSurface\",\"resolver\":\"crud-list-surface\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"tablePatch\":{\"type\":\"object\"},\"queryContext\":{\"type\":\"object\"},\"filterCriteria\":{\"type\":\"object\"},\"kpiBand\":{\"type\":\"object\",\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"columns\":{\"enum\":[2,3,4]},\"source\":{\"type\":\"string\",\"description\":\"Endpoint de telemetria agregada (/stats/group-by ou /filter?page=0&size=1).\"},\"method\":{\"enum\":[\"GET\",\"POST\"]},\"payload\":{\"type\":\"object\"},\"cards\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"label\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"value\":{\"type\":[\"string\",\"number\"]},\"valueExpr\":{\"type\":\"string\",\"description\":\"Expressão ou template CSP-safe com pipes declarativos (ex.: '${totalCount | number | default:0} Registros').\"},\"caption\":{\"type\":\"string\"},\"captionExpr\":{\"type\":\"string\",\"description\":\"Expressão ou template CSP-safe para legenda com pipes declarativos (ex.: '(${((byKey.true / totalCount) * 100) | round:1 | default:0}%)').\"},\"icon\":{\"type\":\"string\"},\"variant\":{\"enum\":[\"default\",\"primary\",\"success\",\"warning\",\"danger\"]},\"tone\":{\"enum\":[\"neutral\",\"primary\",\"info\",\"success\",\"warning\",\"danger\"]},\"filter\":{\"type\":\"object\"}}}}}},\"filterBar\":{\"type\":\"object\",\"properties\":{\"inlineFields\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"quickFilters\":{\"oneOf\":[{\"const\":false},{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"label\",\"filter\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"filter\":{\"type\":[\"string\",\"object\"]}}}}]},\"showAdvanced\":{\"type\":\"boolean\"}}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-list-surface-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.table\",\"CrudMetadata.queryContext\",\"CrudMetadata.kpiBand\",\"CrudMetadata.filterBar\",\"PRAXIS_TABLE_AUTHORING_MANIFEST\",\"CRUD_AI_CAPABILITIES\"],\"writes\":[\"CrudMetadata.table\",\"CrudMetadata.queryContext\",\"CrudMetadata.filterCriteria\",\"CrudMetadata.kpiBand\",\"CrudMetadata.filterBar\"],\"identityKeys\":[\"crudId\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"tablePatch\":{\"type\":\"object\"},\"queryContext\":{\"type\":\"object\"},\"filterCriteria\":{\"type\":\"object\"},\"kpiBand\":{\"type\":\"object\",\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"columns\":{\"enum\":[2,3,4]},\"source\":{\"type\":\"string\",\"description\":\"Endpoint de telemetria agregada (/stats/group-by ou /filter?page=0&size=1).\"},\"method\":{\"enum\":[\"GET\",\"POST\"]},\"payload\":{\"type\":\"object\"},\"cards\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"label\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"value\":{\"type\":[\"string\",\"number\"]},\"valueExpr\":{\"type\":\"string\",\"description\":\"Expressão ou template CSP-safe com pipes declarativos (ex.: '${totalCount | number | default:0} Registros').\"},\"caption\":{\"type\":\"string\"},\"captionExpr\":{\"type\":\"string\",\"description\":\"Expressão ou template CSP-safe para legenda com pipes declarativos (ex.: '(${((byKey.true / totalCount) * 100) | round:1 | default:0}%)').\"},\"icon\":{\"type\":\"string\"},\"variant\":{\"enum\":[\"default\",\"primary\",\"success\",\"warning\",\"danger\"]},\"tone\":{\"enum\":[\"neutral\",\"primary\",\"info\",\"success\",\"warning\",\"danger\"]},\"filter\":{\"type\":\"object\"}}}}}},\"filterBar\":{\"type\":\"object\",\"properties\":{\"inlineFields\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"quickFilters\":{\"oneOf\":[{\"const\":false},{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"label\",\"filter\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"filter\":{\"type\":[\"string\",\"object\"]}}}}]},\"showAdvanced\":{\"type\":\"boolean\"}}}}},\"failureModes\":[\"table-operation-not-delegated\",\"table-patch-not-supported\",\"query-context-invalid\"],\"description\":\"Configures CRUD-owned list orchestration (including KPI band and filter bar shortcuts) while routing table semantics to the praxis-table manifest.\"}}],\"validators\":[\"table-child-operation-delegated\",\"query-context-valid\",\"filter-criteria-bridge-valid\",\"crud-context-stable\"],\"affectedPaths\":[\"table\",\"queryContext\",\"filterCriteria\",\"kpiBand\",\"filterBar\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\",\"praxis-table-manifest-available\"]},{\"operationId\":\"list.kpiBand.configure\",\"title\":\"Configure CRUD KPI band\",\"scope\":\"interaction\",\"targetKind\":\"listSurface\",\"target\":{\"kind\":\"listSurface\",\"resolver\":\"crud-list-surface\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"columns\":{\"enum\":[2,3,4]},\"source\":{\"type\":\"string\",\"description\":\"Endpoint de telemetria agregada (/stats/group-by ou /filter?page=0&size=1).\"},\"method\":{\"enum\":[\"GET\",\"POST\"]},\"payload\":{\"type\":\"object\"},\"cards\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"label\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"value\":{\"type\":[\"string\",\"number\"]},\"valueExpr\":{\"type\":\"string\",\"description\":\"Expressão ou template CSP-safe com pipes declarativos (ex.: '${totalCount | number | default:0} Registros').\"},\"caption\":{\"type\":\"string\"},\"captionExpr\":{\"type\":\"string\",\"description\":\"Expressão ou template CSP-safe para legenda com pipes declarativos (ex.: '(${((byKey.true / totalCount) * 100) | round:1 | default:0}%)').\"},\"icon\":{\"type\":\"string\"},\"variant\":{\"enum\":[\"default\",\"primary\",\"success\",\"warning\",\"danger\"]},\"tone\":{\"enum\":[\"neutral\",\"primary\",\"info\",\"success\",\"warning\",\"danger\"]},\"filter\":{\"type\":\"object\"}}}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-kpi-band-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.kpiBand\",\"CrudMetadata.resource\"],\"writes\":[\"CrudMetadata.kpiBand\"],\"identityKeys\":[\"crudId\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"columns\":{\"enum\":[2,3,4]},\"source\":{\"type\":\"string\",\"description\":\"Endpoint de telemetria agregada (/stats/group-by ou /filter?page=0&size=1).\"},\"method\":{\"enum\":[\"GET\",\"POST\"]},\"payload\":{\"type\":\"object\"},\"cards\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"label\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"value\":{\"type\":[\"string\",\"number\"]},\"valueExpr\":{\"type\":\"string\",\"description\":\"Expressão ou template CSP-safe com pipes declarativos (ex.: '${totalCount | number | default:0} Registros').\"},\"caption\":{\"type\":\"string\"},\"captionExpr\":{\"type\":\"string\",\"description\":\"Expressão ou template CSP-safe para legenda com pipes declarativos (ex.: '(${((byKey.true / totalCount) * 100) | round:1 | default:0}%)').\"},\"icon\":{\"type\":\"string\"},\"variant\":{\"enum\":[\"default\",\"primary\",\"success\",\"warning\",\"danger\"]},\"tone\":{\"enum\":[\"neutral\",\"primary\",\"info\",\"success\",\"warning\",\"danger\"]},\"filter\":{\"type\":\"object\"}}}}}},\"failureModes\":[\"kpi-card-label-missing\",\"kpi-card-value-missing\",\"kpi-card-filter-invalid\"],\"description\":\"Configures the CRUD KPI summary band and optional click-to-filter card criteria.\"}}],\"validators\":[\"crud-context-stable\"],\"affectedPaths\":[\"kpiBand\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\"]}]}",
8458
8896
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
8459
- "contentHash": "d9769c236573d125c1f78429f3f1260b3a8ff2b7327b79e0e9178363247022f4",
8897
+ "contentHash": "cd114c55a92bd8264cb88b46e5b526a96547cd7d8aef9c8694cc0b2521e2fbd3",
8460
8898
  "sourceKind": "component_definition",
8461
8899
  "sourceId": "praxis-crud",
8462
8900
  "corpusVersion": "1.0.0"
8463
8901
  },
8464
8902
  {
8465
- "chunkIndex": 29,
8903
+ "chunkIndex": 30,
8466
8904
  "chunkKind": "authoring_manifest",
8467
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"surface.edit.configure\",\"title\":\"Configure edit surface\",\"scope\":\"interaction\",\"targetKind\":\"editSurface\",\"target\":{\"kind\":\"editSurface\",\"resolver\":\"crud-action-by-id:edit\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"actionId\",\"openMode\"],\"properties\":{\"actionId\":{\"enum\":[\"create\",\"edit\",\"view\"]},\"openMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"route\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitLabel\":{\"type\":\"string\"},\"schemaUrl\":{\"type\":\"string\"},\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"post\",\"put\",\"patch\",\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"},\"initialValue\":{\"type\":\"object\"},\"layoutPolicy\":{\"type\":\"object\"}}},\"params\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"from\",\"to\",\"name\"],\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"enum\":[\"routeParam\",\"query\",\"input\"]},\"name\":{\"type\":\"string\"}}}},\"back\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-edit-surface-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.actions\",\"CrudMetadata.resource.idField\",\"CrudLauncherService.resolveOpenMode\",\"api_metadata\"],\"writes\":[\"CrudMetadata.actions[]\",\"CrudMetadata.actions[].form\",\"CrudMetadata.actions[].params\",\"CrudMetadata.actions[].back\"],\"identityKeys\":[\"actionId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"actionId\",\"openMode\"],\"properties\":{\"actionId\":{\"enum\":[\"create\",\"edit\",\"view\"]},\"openMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"route\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitLabel\":{\"type\":\"string\"},\"schemaUrl\":{\"type\":\"string\"},\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"post\",\"put\",\"patch\",\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"},\"initialValue\":{\"type\":\"object\"},\"layoutPolicy\":{\"type\":\"object\"}}},\"params\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"from\",\"to\",\"name\"],\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"enum\":[\"routeParam\",\"query\",\"input\"]},\"name\":{\"type\":\"string\"}}}},\"back\":{\"type\":\"object\"}}},\"failureModes\":[\"action-not-found\",\"id-param-missing\",\"open-mode-binding-incomplete\",\"resource-edit-not-supported\",\"submit-url-not-canonical\"],\"description\":\"Configures edit action routing/form binding and ensures id parameter mapping is available to the launcher.\"}}],\"validators\":[\"action-exists\",\"id-field-known\",\"id-param-mapping-valid\",\"open-mode-binding-complete\",\"schema-url-canonical\",\"submit-url-canonical\",\"resource-edit-supported\",\"form-child-operation-delegated\"],\"affectedPaths\":[\"actions[].openMode\",\"actions[].route\",\"actions[].formId\",\"actions[].form\",\"actions[].params\",\"actions[].back\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\"]},{\"operationId\":\"surface.view.configure\",\"title\":\"Configure view surface\",\"scope\":\"interaction\",\"targetKind\":\"viewSurface\",\"target\":{\"kind\":\"viewSurface\",\"resolver\":\"crud-action-by-id:view\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"actionId\",\"openMode\"],\"properties\":{\"actionId\":{\"enum\":[\"create\",\"edit\",\"view\"]},\"openMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"route\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitLabel\":{\"type\":\"string\"},\"schemaUrl\":{\"type\":\"string\"},\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"post\",\"put\",\"patch\",\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"},\"initialValue\":{\"type\":\"object\"},\"layoutPolicy\":{\"type\":\"object\"}}},\"params\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"from\",\"to\",\"name\"],\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"enum\":[\"routeParam\",\"query\",\"input\"]},\"name\":{\"type\":\"string\"}}}},\"back\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-view-surface-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.actions\",\"CrudLauncherService.resolveOpenMode\",\"DynamicFormDialogHostComponent\",\"api_metadata\"],\"writes\":[\"CrudMetadata.actions[]\",\"CrudMetadata.actions[].form\",\"CrudMetadata.actions[].params\",\"CrudMetadata.actions[].back\"],\"identityKeys\":[\"actionId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"actionId\",\"openMode\"],\"properties\":{\"actionId\":{\"enum\":[\"create\",\"edit\",\"view\"]},\"openMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"route\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitLabel\":{\"type\":\"string\"},\"schemaUrl\":{\"type\":\"string\"},\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"post\",\"put\",\"patch\",\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"},\"initialValue\":{\"type\":\"object\"},\"layoutPolicy\":{\"type\":\"object\"}}},\"params\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"from\",\"to\",\"name\"],\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"enum\":[\"routeParam\",\"query\",\"input\"]},\"name\":{\"type\":\"string\"}}}},\"back\":{\"type\":\"object\"}}},\"failureModes\":[\"action-not-found\",\"open-mode-binding-incomplete\",\"resource-view-not-supported\",\"readonly-form-delegation-missing\"],\"description\":\"Configures view action binding and delegates readonly form behavior to the dynamic-form manifest.\"}}],\"validators\":[\"action-exists\",\"open-mode-binding-complete\",\"schema-url-canonical\",\"resource-view-supported\",\"form-child-operation-delegated\",\"readonly-form-delegation-valid\"],\"affectedPaths\":[\"actions[].openMode\",\"actions[].route\",\"actions[].formId\",\"actions[].form\",\"actions[].params\",\"actions[].back\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\"]},{\"operationId\":\"delete.enabled.set\",\"title\":\"Configure delete behavior\",\"scope\":\"interaction\",\"targetKind\":\"deleteBehavior\",\"target\":{\"kind\":\"deleteBehavior\",\"resolver\":\"crud-action-by-id:delete\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"enabled\"],\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"actionId\":{\"type\":\"string\"},\"requiresConfirmation\":{\"type\":\"boolean\"},\"autoDelete\":{\"type\":\"boolean\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"}}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-delete-behavior-set\",\"handlerContract\":{\"reads\":[\"CrudMetadata.actions\",\"CrudMetadata.resource\",\"GET /{resource}/{id}/capabilities\"],\"writes\":[\"CrudMetadata.actions[]\",\"CrudMetadata.actions[].requiresConfirmation\",\"CrudMetadata.actions[].autoDelete\",\"CrudMetadata.actions[].form\"],\"identityKeys\":[\"actionId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"enabled\"],\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"actionId\":{\"type\":\"string\"},\"requiresConfirmation\":{\"type\":\"boolean\"},\"autoDelete\":{\"type\":\"boolean\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"}}}}},\"failureModes\":[\"delete-action-not-found\",\"resource-delete-not-supported\",\"destructive-delete-not-confirmed\",\"delete-submit-url-not-canonical\"],\"description\":\"Enables or disables delete behavior with capability checks and explicit confirmation for destructive changes.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"delete-action-exists\",\"resource-delete-supported\",\"destructive-delete-confirmed\",\"submit-url-canonical\",\"permissions-delete-valid\"],\"affectedPaths\":[\"actions[].disabled\",\"actions[].requiresConfirmation\",\"actions[].autoDelete\",\"actions[].form\",\"actions[].form.submitUrl\",\"actions[].form.submitMethod\",\"actions[].form.apiEndpointKey\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\",\"explicit-confirmation-provided\"]}]}",
8905
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"list.filterBar.configure\",\"title\":\"Configure CRUD filter bar\",\"scope\":\"interaction\",\"targetKind\":\"listSurface\",\"target\":{\"kind\":\"listSurface\",\"resolver\":\"crud-list-surface\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"inlineFields\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"quickFilters\":{\"oneOf\":[{\"const\":false},{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"label\",\"filter\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"filter\":{\"type\":[\"string\",\"object\"]}}}}]},\"showAdvanced\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-filter-bar-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.filterBar\",\"CrudMetadata.resource\"],\"writes\":[\"CrudMetadata.filterBar\"],\"identityKeys\":[\"crudId\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"inlineFields\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"quickFilters\":{\"oneOf\":[{\"const\":false},{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"id\",\"label\",\"filter\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"filter\":{\"type\":[\"string\",\"object\"]}}}}]},\"showAdvanced\":{\"type\":\"boolean\"}}},\"failureModes\":[\"quick-filter-id-missing\",\"quick-filter-label-missing\",\"quick-filter-condition-invalid\"],\"description\":\"Configures CRUD filterBar shorthand (inlineFields, quickFilters, showAdvanced) expanded into the internal table runtime.\"}}],\"validators\":[\"crud-context-stable\"],\"affectedPaths\":[\"filterBar\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\"]},{\"operationId\":\"surface.create.configure\",\"title\":\"Configure create surface\",\"scope\":\"interaction\",\"targetKind\":\"createSurface\",\"target\":{\"kind\":\"createSurface\",\"resolver\":\"crud-action-by-id:create\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"actionId\",\"openMode\"],\"properties\":{\"actionId\":{\"enum\":[\"create\",\"edit\",\"view\"]},\"openMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"route\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitLabel\":{\"type\":\"string\"},\"schemaUrl\":{\"type\":\"string\"},\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"post\",\"put\",\"patch\",\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"},\"initialValue\":{\"type\":\"object\"},\"layoutPolicy\":{\"type\":\"object\"}}},\"params\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"from\",\"to\",\"name\"],\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"enum\":[\"routeParam\",\"query\",\"input\"]},\"name\":{\"type\":\"string\"}}}},\"back\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-create-surface-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.actions\",\"CrudLauncherService.resolveOpenMode\",\"DynamicFormDialogHostComponent\",\"api_metadata\"],\"writes\":[\"CrudMetadata.actions[]\",\"CrudMetadata.actions[].form\",\"CrudMetadata.actions[].params\",\"CrudMetadata.actions[].back\"],\"identityKeys\":[\"actionId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"actionId\",\"openMode\"],\"properties\":{\"actionId\":{\"enum\":[\"create\",\"edit\",\"view\"]},\"openMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"route\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitLabel\":{\"type\":\"string\"},\"schemaUrl\":{\"type\":\"string\"},\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"post\",\"put\",\"patch\",\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"},\"initialValue\":{\"type\":\"object\"},\"layoutPolicy\":{\"type\":\"object\"}}},\"params\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"from\",\"to\",\"name\"],\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"enum\":[\"routeParam\",\"query\",\"input\"]},\"name\":{\"type\":\"string\"}}}},\"back\":{\"type\":\"object\"}}},\"failureModes\":[\"action-not-found\",\"open-mode-binding-incomplete\",\"schema-url-not-canonical\",\"submit-url-not-canonical\",\"resource-create-not-supported\"],\"description\":\"Configures create action binding and launcher inputs without editing the child FormConfig.\"}}],\"validators\":[\"action-exists\",\"open-mode-binding-complete\",\"schema-url-canonical\",\"submit-url-canonical\",\"resource-create-supported\",\"form-child-operation-delegated\"],\"affectedPaths\":[\"actions[].openMode\",\"actions[].route\",\"actions[].formId\",\"actions[].form\",\"actions[].params\",\"actions[].back\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\"]},{\"operationId\":\"surface.edit.configure\",\"title\":\"Configure edit surface\",\"scope\":\"interaction\",\"targetKind\":\"editSurface\",\"target\":{\"kind\":\"editSurface\",\"resolver\":\"crud-action-by-id:edit\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"actionId\",\"openMode\"],\"properties\":{\"actionId\":{\"enum\":[\"create\",\"edit\",\"view\"]},\"openMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"route\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitLabel\":{\"type\":\"string\"},\"schemaUrl\":{\"type\":\"string\"},\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"post\",\"put\",\"patch\",\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"},\"initialValue\":{\"type\":\"object\"},\"layoutPolicy\":{\"type\":\"object\"}}},\"params\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"from\",\"to\",\"name\"],\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"enum\":[\"routeParam\",\"query\",\"input\"]},\"name\":{\"type\":\"string\"}}}},\"back\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-edit-surface-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.actions\",\"CrudMetadata.resource.idField\",\"CrudLauncherService.resolveOpenMode\",\"api_metadata\"],\"writes\":[\"CrudMetadata.actions[]\",\"CrudMetadata.actions[].form\",\"CrudMetadata.actions[].params\",\"CrudMetadata.actions[].back\"],\"identityKeys\":[\"actionId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"actionId\",\"openMode\"],\"properties\":{\"actionId\":{\"enum\":[\"create\",\"edit\",\"view\"]},\"openMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"route\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitLabel\":{\"type\":\"string\"},\"schemaUrl\":{\"type\":\"string\"},\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"post\",\"put\",\"patch\",\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"},\"initialValue\":{\"type\":\"object\"},\"layoutPolicy\":{\"type\":\"object\"}}},\"params\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"from\",\"to\",\"name\"],\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"enum\":[\"routeParam\",\"query\",\"input\"]},\"name\":{\"type\":\"string\"}}}},\"back\":{\"type\":\"object\"}}},\"failureModes\":[\"action-not-found\",\"id-param-missing\",\"open-mode-binding-incomplete\",\"resource-edit-not-supported\",\"submit-url-not-canonical\"],\"description\":\"Configures edit action routing/form binding and ensures id parameter mapping is available to the launcher.\"}}],\"validators\":[\"action-exists\",\"id-field-known\",\"id-param-mapping-valid\",\"open-mode-binding-complete\",\"schema-url-canonical\",\"submit-url-canonical\",\"resource-edit-supported\",\"form-child-operation-delegated\"],\"affectedPaths\":[\"actions[].openMode\",\"actions[].route\",\"actions[].formId\",\"actions[].form\",\"actions[].params\",\"actions[].back\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\"]}]}",
8468
8906
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
8469
- "contentHash": "ba9cb09dd833ed9c00537e77d59c1ecf4d4eb4bfc221b424a720210f65e1b95b",
8907
+ "contentHash": "413465d7b618cc668b873910167d0944e7f5d69e350e3a5c6bf8ef976b94c596",
8470
8908
  "sourceKind": "component_definition",
8471
8909
  "sourceId": "praxis-crud",
8472
8910
  "corpusVersion": "1.0.0"
8473
8911
  },
8474
8912
  {
8475
- "chunkIndex": 30,
8913
+ "chunkIndex": 31,
8476
8914
  "chunkKind": "authoring_manifest",
8477
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"dialog.size.set\",\"title\":\"Configure CRUD dialog host defaults\",\"scope\":\"interaction\",\"targetKind\":\"dialogHost\",\"target\":{\"kind\":\"dialogHost\",\"resolver\":\"crud-dialog-host-defaults\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"defaultOpenMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"modal\":{\"type\":\"object\",\"properties\":{\"width\":{\"type\":\"string\"},\"height\":{\"type\":\"string\"},\"minWidth\":{\"type\":\"string\"},\"minHeight\":{\"type\":\"string\"},\"maxWidth\":{\"type\":\"string\"},\"maxHeight\":{\"type\":\"string\"},\"density\":{\"type\":\"string\"},\"backdropStyle\":{\"enum\":[\"blur\",\"dim\",\"transparent\"]},\"canMaximize\":{\"type\":\"boolean\"},\"rememberLastState\":{\"type\":\"boolean\"},\"closeOnSave\":{\"type\":\"boolean\"},\"startMaximized\":{\"type\":\"boolean\"},\"disableCloseOnEsc\":{\"type\":\"boolean\"},\"disableCloseOnBackdrop\":{\"type\":\"boolean\"},\"fullscreenBreakpoint\":{\"type\":\"number\"},\"position\":{\"type\":\"object\",\"properties\":{\"top\":{\"type\":\"string\"},\"bottom\":{\"type\":\"string\"},\"left\":{\"type\":\"string\"},\"right\":{\"type\":\"string\"}}},\"edgeGap\":{\"type\":\"number\"}}},\"back\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-dialog-host-set\",\"handlerContract\":{\"reads\":[\"CrudMetadata.defaults\",\"CrudLauncherService.resolveOpenMode\",\"DialogService\",\"DynamicFormDialogHostComponent\",\"CRUD_DRAWER_ADAPTER\"],\"writes\":[\"CrudMetadata.defaults.openMode\",\"CrudMetadata.defaults.modal\",\"CrudMetadata.defaults.back\"],\"identityKeys\":[\"crudId\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"defaultOpenMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"modal\":{\"type\":\"object\",\"properties\":{\"width\":{\"type\":\"string\"},\"height\":{\"type\":\"string\"},\"minWidth\":{\"type\":\"string\"},\"minHeight\":{\"type\":\"string\"},\"maxWidth\":{\"type\":\"string\"},\"maxHeight\":{\"type\":\"string\"},\"density\":{\"type\":\"string\"},\"backdropStyle\":{\"enum\":[\"blur\",\"dim\",\"transparent\"]},\"canMaximize\":{\"type\":\"boolean\"},\"rememberLastState\":{\"type\":\"boolean\"},\"closeOnSave\":{\"type\":\"boolean\"},\"startMaximized\":{\"type\":\"boolean\"},\"disableCloseOnEsc\":{\"type\":\"boolean\"},\"disableCloseOnBackdrop\":{\"type\":\"boolean\"},\"fullscreenBreakpoint\":{\"type\":\"number\"},\"position\":{\"type\":\"object\",\"properties\":{\"top\":{\"type\":\"string\"},\"bottom\":{\"type\":\"string\"},\"left\":{\"type\":\"string\"},\"right\":{\"type\":\"string\"}}},\"edgeGap\":{\"type\":\"number\"}}},\"back\":{\"type\":\"object\"}}},\"failureModes\":[\"open-mode-unsupported\",\"drawer-runtime-unavailable\",\"modal-size-invalid\",\"drawer-position-lifecycle-unstable\",\"back-policy-invalid\"],\"description\":\"Configures CRUD-owned route/modal/drawer defaults consumed by the launcher, default dialog-backed drawer runtime and optional host drawer adapter.\"}}],\"validators\":[\"open-mode-supported\",\"modal-size-valid\",\"drawer-runtime-available\",\"drawer-position-lifecycle-stable\",\"back-policy-valid\",\"settings-panel-shell-compatible\"],\"affectedPaths\":[\"defaults.openMode\",\"defaults.modal\",\"defaults.back\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\"]},{\"operationId\":\"permissions.set\",\"title\":\"Configure CRUD permissions\",\"scope\":\"interaction\",\"targetKind\":\"permissions\",\"target\":{\"kind\":\"permissions\",\"resolver\":\"crud-resource-capabilities\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"requiredCapabilities\":{\"type\":\"array\",\"items\":{\"enum\":[\"create\",\"view\",\"edit\",\"delete\"]}},\"actionPermissions\":{\"type\":\"object\"},\"denyWhenMissingCapability\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-permissions-set\",\"handlerContract\":{\"reads\":[\"GET /{resource}/capabilities\",\"GET /{resource}/{id}/capabilities\",\"CrudMetadata.actions\"],\"writes\":[\"CrudMetadata.actions[].disabled\",\"CrudMetadata.actions[].visibleWhen\",\"CrudMetadata.actions[].requiresConfirmation\"],\"identityKeys\":[\"resourcePath\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"requiredCapabilities\":{\"type\":\"array\",\"items\":{\"enum\":[\"create\",\"view\",\"edit\",\"delete\"]}},\"actionPermissions\":{\"type\":\"object\"},\"denyWhenMissingCapability\":{\"type\":\"boolean\"}}},\"failureModes\":[\"capability-not-found\",\"action-permission-conflict\",\"delete-permission-without-confirmation\"],\"description\":\"Aligns CRUD action visibility/disablement with resource capabilities without inventing a second permission source.\"}}],\"validators\":[\"resource-capabilities-resolvable\",\"action-permission-supported\",\"delete-permission-requires-confirmation\",\"permissions-do-not-shadow-backend\"],\"affectedPaths\":[\"actions[].disabled\",\"actions[].visibleWhen\",\"actions[].requiresConfirmation\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\"]},{\"operationId\":\"form.childOperation.delegate\",\"title\":\"Delegate child form/table/dialog authoring operation\",\"scope\":\"global\",\"targetKind\":\"childOperation\",\"target\":{\"kind\":\"childOperation\",\"resolver\":\"child-authoring-manifest-operation\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"childComponentId\",\"childOperationId\",\"reason\"],\"properties\":{\"childComponentId\":{\"enum\":[\"praxis-dynamic-form\",\"praxis-table\",\"praxis-dialog\",\"praxis-settings-panel\"]},\"childOperationId\":{\"type\":\"string\"},\"reason\":{\"type\":\"string\"},\"childTarget\":{\"type\":\"object\"},\"childParams\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-child-operation-delegate\",\"handlerContract\":{\"reads\":[\"PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST\",\"PRAXIS_TABLE_AUTHORING_MANIFEST\",\"PRAXIS_DIALOG_AUTHORING_MANIFEST\",\"PRAXIS_SETTINGS_PANEL_AUTHORING_MANIFEST\"],\"writes\":[\"delegatedAuthoringOperations[]\"],\"identityKeys\":[\"childComponentId\",\"childOperationId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"childComponentId\",\"childOperationId\",\"reason\"],\"properties\":{\"childComponentId\":{\"enum\":[\"praxis-dynamic-form\",\"praxis-table\",\"praxis-dialog\",\"praxis-settings-panel\"]},\"childOperationId\":{\"type\":\"string\"},\"reason\":{\"type\":\"string\"},\"childTarget\":{\"type\":\"object\"},\"childParams\":{\"type\":\"object\"}}},\"failureModes\":[\"child-manifest-missing\",\"child-operation-not-found\",\"attempted-local-child-config-write\"],\"description\":\"Records explicit delegation when requested edits belong to child manifests instead of CRUD orchestration.\"}}],\"validators\":[\"child-manifest-available\",\"child-operation-known\",\"no-local-form-config-write\",\"no-local-table-config-write\",\"delegation-target-valid\"],\"affectedPaths\":[\"delegatedAuthoringOperations\"],\"submissionImpact\":\"none\",\"preconditions\":[\"child-manifest-available\"]}]}",
8915
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"surface.view.configure\",\"title\":\"Configure view surface\",\"scope\":\"interaction\",\"targetKind\":\"viewSurface\",\"target\":{\"kind\":\"viewSurface\",\"resolver\":\"crud-action-by-id:view\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"actionId\",\"openMode\"],\"properties\":{\"actionId\":{\"enum\":[\"create\",\"edit\",\"view\"]},\"openMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"route\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitLabel\":{\"type\":\"string\"},\"schemaUrl\":{\"type\":\"string\"},\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"post\",\"put\",\"patch\",\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"},\"initialValue\":{\"type\":\"object\"},\"layoutPolicy\":{\"type\":\"object\"}}},\"params\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"from\",\"to\",\"name\"],\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"enum\":[\"routeParam\",\"query\",\"input\"]},\"name\":{\"type\":\"string\"}}}},\"back\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-view-surface-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.actions\",\"CrudLauncherService.resolveOpenMode\",\"DynamicFormDialogHostComponent\",\"api_metadata\"],\"writes\":[\"CrudMetadata.actions[]\",\"CrudMetadata.actions[].form\",\"CrudMetadata.actions[].params\",\"CrudMetadata.actions[].back\"],\"identityKeys\":[\"actionId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"actionId\",\"openMode\"],\"properties\":{\"actionId\":{\"enum\":[\"create\",\"edit\",\"view\"]},\"openMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"route\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitLabel\":{\"type\":\"string\"},\"schemaUrl\":{\"type\":\"string\"},\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"post\",\"put\",\"patch\",\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"},\"initialValue\":{\"type\":\"object\"},\"layoutPolicy\":{\"type\":\"object\"}}},\"params\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"required\":[\"from\",\"to\",\"name\"],\"properties\":{\"from\":{\"type\":\"string\"},\"to\":{\"enum\":[\"routeParam\",\"query\",\"input\"]},\"name\":{\"type\":\"string\"}}}},\"back\":{\"type\":\"object\"}}},\"failureModes\":[\"action-not-found\",\"open-mode-binding-incomplete\",\"resource-view-not-supported\",\"readonly-form-delegation-missing\"],\"description\":\"Configures view action binding and delegates readonly form behavior to the dynamic-form manifest.\"}}],\"validators\":[\"action-exists\",\"open-mode-binding-complete\",\"schema-url-canonical\",\"resource-view-supported\",\"form-child-operation-delegated\",\"readonly-form-delegation-valid\"],\"affectedPaths\":[\"actions[].openMode\",\"actions[].route\",\"actions[].formId\",\"actions[].form\",\"actions[].params\",\"actions[].back\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\"]},{\"operationId\":\"delete.enabled.set\",\"title\":\"Configure delete behavior\",\"scope\":\"interaction\",\"targetKind\":\"deleteBehavior\",\"target\":{\"kind\":\"deleteBehavior\",\"resolver\":\"crud-action-by-id:delete\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"enabled\"],\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"actionId\":{\"type\":\"string\"},\"requiresConfirmation\":{\"type\":\"boolean\"},\"autoDelete\":{\"type\":\"boolean\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"}}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-delete-behavior-set\",\"handlerContract\":{\"reads\":[\"CrudMetadata.actions\",\"CrudMetadata.resource\",\"GET /{resource}/{id}/capabilities\"],\"writes\":[\"CrudMetadata.actions[]\",\"CrudMetadata.actions[].requiresConfirmation\",\"CrudMetadata.actions[].autoDelete\",\"CrudMetadata.actions[].form\"],\"identityKeys\":[\"actionId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"enabled\"],\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"actionId\":{\"type\":\"string\"},\"requiresConfirmation\":{\"type\":\"boolean\"},\"autoDelete\":{\"type\":\"boolean\"},\"form\":{\"type\":\"object\",\"properties\":{\"submitUrl\":{\"type\":\"string\"},\"submitMethod\":{\"enum\":[\"delete\"]},\"apiEndpointKey\":{\"type\":\"string\"}}}}},\"failureModes\":[\"delete-action-not-found\",\"resource-delete-not-supported\",\"destructive-delete-not-confirmed\",\"delete-submit-url-not-canonical\"],\"description\":\"Enables or disables delete behavior with capability checks and explicit confirmation for destructive changes.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"delete-action-exists\",\"resource-delete-supported\",\"destructive-delete-confirmed\",\"submit-url-canonical\",\"permissions-delete-valid\"],\"affectedPaths\":[\"actions[].disabled\",\"actions[].requiresConfirmation\",\"actions[].autoDelete\",\"actions[].form\",\"actions[].form.submitUrl\",\"actions[].form.submitMethod\",\"actions[].form.apiEndpointKey\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\",\"explicit-confirmation-provided\"]},{\"operationId\":\"dialog.size.set\",\"title\":\"Configure CRUD dialog host defaults\",\"scope\":\"interaction\",\"targetKind\":\"dialogHost\",\"target\":{\"kind\":\"dialogHost\",\"resolver\":\"crud-dialog-host-defaults\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"defaultOpenMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"modal\":{\"type\":\"object\",\"properties\":{\"width\":{\"type\":\"string\"},\"height\":{\"type\":\"string\"},\"minWidth\":{\"type\":\"string\"},\"minHeight\":{\"type\":\"string\"},\"maxWidth\":{\"type\":\"string\"},\"maxHeight\":{\"type\":\"string\"},\"density\":{\"type\":\"string\"},\"backdropStyle\":{\"enum\":[\"blur\",\"dim\",\"transparent\"]},\"canMaximize\":{\"type\":\"boolean\"},\"rememberLastState\":{\"type\":\"boolean\"},\"closeOnSave\":{\"type\":\"boolean\"},\"startMaximized\":{\"type\":\"boolean\"},\"disableCloseOnEsc\":{\"type\":\"boolean\"},\"disableCloseOnBackdrop\":{\"type\":\"boolean\"},\"fullscreenBreakpoint\":{\"type\":\"number\"},\"position\":{\"type\":\"object\",\"properties\":{\"top\":{\"type\":\"string\"},\"bottom\":{\"type\":\"string\"},\"left\":{\"type\":\"string\"},\"right\":{\"type\":\"string\"}}},\"edgeGap\":{\"type\":\"number\"}}},\"back\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-dialog-host-set\",\"handlerContract\":{\"reads\":[\"CrudMetadata.defaults\",\"CrudLauncherService.resolveOpenMode\",\"DialogService\",\"DynamicFormDialogHostComponent\",\"CRUD_DRAWER_ADAPTER\"],\"writes\":[\"CrudMetadata.defaults.openMode\",\"CrudMetadata.defaults.modal\",\"CrudMetadata.defaults.back\"],\"identityKeys\":[\"crudId\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"defaultOpenMode\":{\"enum\":[\"route\",\"modal\",\"drawer\"]},\"modal\":{\"type\":\"object\",\"properties\":{\"width\":{\"type\":\"string\"},\"height\":{\"type\":\"string\"},\"minWidth\":{\"type\":\"string\"},\"minHeight\":{\"type\":\"string\"},\"maxWidth\":{\"type\":\"string\"},\"maxHeight\":{\"type\":\"string\"},\"density\":{\"type\":\"string\"},\"backdropStyle\":{\"enum\":[\"blur\",\"dim\",\"transparent\"]},\"canMaximize\":{\"type\":\"boolean\"},\"rememberLastState\":{\"type\":\"boolean\"},\"closeOnSave\":{\"type\":\"boolean\"},\"startMaximized\":{\"type\":\"boolean\"},\"disableCloseOnEsc\":{\"type\":\"boolean\"},\"disableCloseOnBackdrop\":{\"type\":\"boolean\"},\"fullscreenBreakpoint\":{\"type\":\"number\"},\"position\":{\"type\":\"object\",\"properties\":{\"top\":{\"type\":\"string\"},\"bottom\":{\"type\":\"string\"},\"left\":{\"type\":\"string\"},\"right\":{\"type\":\"string\"}}},\"edgeGap\":{\"type\":\"number\"}}},\"back\":{\"type\":\"object\"}}},\"failureModes\":[\"open-mode-unsupported\",\"drawer-runtime-unavailable\",\"modal-size-invalid\",\"drawer-position-lifecycle-unstable\",\"back-policy-invalid\"],\"description\":\"Configures CRUD-owned route/modal/drawer defaults consumed by the launcher, default dialog-backed drawer runtime and optional host drawer adapter.\"}}],\"validators\":[\"open-mode-supported\",\"modal-size-valid\",\"drawer-runtime-available\",\"drawer-position-lifecycle-stable\",\"back-policy-valid\",\"settings-panel-shell-compatible\"],\"affectedPaths\":[\"defaults.openMode\",\"defaults.modal\",\"defaults.back\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\"]}]}",
8478
8916
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
8479
- "contentHash": "fd018052aa671ae87830b486ff98a51e8f19e752c940b1ea8648af5e73fcc61b",
8917
+ "contentHash": "aeac1aa4a0974965ee0dd0a53fe3e1c24cea2bdef83e2d36fb545e03204d112e",
8480
8918
  "sourceKind": "component_definition",
8481
8919
  "sourceId": "praxis-crud",
8482
8920
  "corpusVersion": "1.0.0"
8483
8921
  },
8484
8922
  {
8485
- "chunkIndex": 31,
8923
+ "chunkIndex": 32,
8924
+ "chunkKind": "authoring_manifest",
8925
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"permissions.set\",\"title\":\"Configure CRUD permissions\",\"scope\":\"interaction\",\"targetKind\":\"permissions\",\"target\":{\"kind\":\"permissions\",\"resolver\":\"crud-resource-capabilities\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"requiredCapabilities\":{\"type\":\"array\",\"items\":{\"enum\":[\"create\",\"view\",\"edit\",\"delete\"]}},\"actionPermissions\":{\"type\":\"object\"},\"denyWhenMissingCapability\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-permissions-set\",\"handlerContract\":{\"reads\":[\"GET /{resource}/capabilities\",\"GET /{resource}/{id}/capabilities\",\"CrudMetadata.actions\"],\"writes\":[\"CrudMetadata.actions[].disabled\",\"CrudMetadata.actions[].visibleWhen\",\"CrudMetadata.actions[].requiresConfirmation\"],\"identityKeys\":[\"resourcePath\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"requiredCapabilities\":{\"type\":\"array\",\"items\":{\"enum\":[\"create\",\"view\",\"edit\",\"delete\"]}},\"actionPermissions\":{\"type\":\"object\"},\"denyWhenMissingCapability\":{\"type\":\"boolean\"}}},\"failureModes\":[\"capability-not-found\",\"action-permission-conflict\",\"delete-permission-without-confirmation\"],\"description\":\"Aligns CRUD action visibility/disablement with resource capabilities without inventing a second permission source.\"}}],\"validators\":[\"resource-capabilities-resolvable\",\"action-permission-supported\",\"delete-permission-requires-confirmation\",\"permissions-do-not-shadow-backend\"],\"affectedPaths\":[\"actions[].disabled\",\"actions[].visibleWhen\",\"actions[].requiresConfirmation\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\",\"resource-capabilities-resolved\"]},{\"operationId\":\"form.childOperation.delegate\",\"title\":\"Delegate child form/table/dialog authoring operation\",\"scope\":\"global\",\"targetKind\":\"childOperation\",\"target\":{\"kind\":\"childOperation\",\"resolver\":\"child-authoring-manifest-operation\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"childComponentId\",\"childOperationId\",\"reason\"],\"properties\":{\"childComponentId\":{\"enum\":[\"praxis-dynamic-form\",\"praxis-table\",\"praxis-dialog\",\"praxis-settings-panel\"]},\"childOperationId\":{\"type\":\"string\"},\"reason\":{\"type\":\"string\"},\"childTarget\":{\"type\":\"object\"},\"childParams\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-child-operation-delegate\",\"handlerContract\":{\"reads\":[\"PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST\",\"PRAXIS_TABLE_AUTHORING_MANIFEST\",\"PRAXIS_DIALOG_AUTHORING_MANIFEST\",\"PRAXIS_SETTINGS_PANEL_AUTHORING_MANIFEST\"],\"writes\":[\"delegatedAuthoringOperations[]\"],\"identityKeys\":[\"childComponentId\",\"childOperationId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"childComponentId\",\"childOperationId\",\"reason\"],\"properties\":{\"childComponentId\":{\"enum\":[\"praxis-dynamic-form\",\"praxis-table\",\"praxis-dialog\",\"praxis-settings-panel\"]},\"childOperationId\":{\"type\":\"string\"},\"reason\":{\"type\":\"string\"},\"childTarget\":{\"type\":\"object\"},\"childParams\":{\"type\":\"object\"}}},\"failureModes\":[\"child-manifest-missing\",\"child-operation-not-found\",\"attempted-local-child-config-write\"],\"description\":\"Records explicit delegation when requested edits belong to child manifests instead of CRUD orchestration.\"}}],\"validators\":[\"child-manifest-available\",\"child-operation-known\",\"no-local-form-config-write\",\"no-local-table-config-write\",\"delegation-target-valid\"],\"affectedPaths\":[\"delegatedAuthoringOperations\"],\"submissionImpact\":\"none\",\"preconditions\":[\"child-manifest-available\"]}]}",
8926
+ "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
8927
+ "contentHash": "7c3eedc499e0d963c9c909d7f98d6f3feb2b8a0fe5e62638c82682df535c6b0d",
8928
+ "sourceKind": "component_definition",
8929
+ "sourceId": "praxis-crud",
8930
+ "corpusVersion": "1.0.0"
8931
+ },
8932
+ {
8933
+ "chunkIndex": 33,
8486
8934
  "chunkKind": "authoring_manifest",
8487
8935
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"resource-exists-in-api-metadata\",\"level\":\"error\",\"code\":\"CRUD_RESOURCE_EXISTS\",\"description\":\"Resource must exist in api_metadata or resource discovery.\"},{\"validatorId\":\"resource-path-canonical\",\"level\":\"error\",\"code\":\"CRUD_RESOURCE_PATH_CANONICAL\",\"description\":\"Resource path must be canonical and not a local alias.\"},{\"validatorId\":\"resource-key-stable\",\"level\":\"error\",\"code\":\"CRUD_RESOURCE_KEY_STABLE\",\"description\":\"Resource key must remain stable for surfaces/actions/capabilities.\"},{\"validatorId\":\"id-field-known\",\"level\":\"error\",\"code\":\"CRUD_ID_FIELD_KNOWN\",\"description\":\"CRUD id field must exist for edit/view/delete flows.\"},{\"validatorId\":\"resource-capabilities-resolvable\",\"level\":\"error\",\"code\":\"CRUD_CAPABILITIES_RESOLVABLE\",\"description\":\"Resource capabilities must be resolvable before action enablement is authored.\"},{\"validatorId\":\"domain-catalog-context-resolvable\",\"level\":\"error\",\"code\":\"CRUD_DOMAIN_CATALOG_CONTEXT_RESOLVABLE\",\"description\":\"Domain Catalog governance context must resolve for the resource key and requested probe before authoring uses it.\"},{\"validatorId\":\"domain-catalog-read-only\",\"level\":\"error\",\"code\":\"CRUD_DOMAIN_CATALOG_READ_ONLY\",\"description\":\"Domain Catalog is read-only semantic context; CRUD may reference a probe but must not persist copied catalog rules.\"},{\"validatorId\":\"ai-usage-visibility-respected\",\"level\":\"error\",\"code\":\"CRUD_AI_USAGE_VISIBILITY_RESPECTED\",\"description\":\"Authoring must respect Domain Catalog aiUsage.visibility before exposing field data, prompts or generated patches.\"},{\"validatorId\":\"no-form-config-rule-materialization\",\"level\":\"error\",\"code\":\"CRUD_NO_FORM_RULE_MATERIALIZATION\",\"description\":\"Shared domain governance must not be materialized into FormConfig rules unless a backend policy explicitly authorizes it.\"},{\"validatorId\":\"table-child-operation-delegated\",\"level\":\"error\",\"code\":\"CRUD_TABLE_CHILD_DELEGATED\",\"description\":\"Table semantics must be delegated to praxis-table.\"},{\"validatorId\":\"query-context-valid\",\"level\":\"error\",\"code\":\"CRUD_QUERY_CONTEXT_VALID\",\"description\":\"Query context must be valid for the bound resource.\"},{\"validatorId\":\"filter-criteria-bridge-valid\",\"level\":\"warning\",\"code\":\"CRUD_FILTER_CRITERIA_BRIDGE_VALID\",\"description\":\"filterCriteria is a bridge; prefer queryContext for new remote authoring.\"},{\"validatorId\":\"crud-context-stable\",\"level\":\"error\",\"code\":\"CRUD_CONTEXT_STABLE\",\"description\":\"Authoring must not break stable crudContext references.\"},{\"validatorId\":\"action-exists\",\"level\":\"error\",\"code\":\"CRUD_ACTION_EXISTS\",\"description\":\"Target action must exist or be created through CRUD action orchestration.\"},{\"validatorId\":\"open-mode-binding-complete\",\"level\":\"error\",\"code\":\"CRUD_OPEN_MODE_BINDING_COMPLETE\",\"description\":\"route requires route; modal/drawer require formId unless resolved by governed overrides.\"},{\"validatorId\":\"schema-url-canonical\",\"level\":\"error\",\"code\":\"CRUD_SCHEMA_URL_CANONICAL\",\"description\":\"Schema URLs must be canonical for the bound resource/action.\"},{\"validatorId\":\"submit-url-canonical\",\"level\":\"error\",\"code\":\"CRUD_SUBMIT_URL_CANONICAL\",\"description\":\"Submit URL and method must be canonical and declared together.\"},{\"validatorId\":\"resource-create-supported\",\"level\":\"error\",\"code\":\"CRUD_CREATE_SUPPORTED\",\"description\":\"Create surface requires resource create capability.\"},{\"validatorId\":\"resource-edit-supported\",\"level\":\"error\",\"code\":\"CRUD_EDIT_SUPPORTED\",\"description\":\"Edit surface requires resource edit capability.\"},{\"validatorId\":\"resource-view-supported\",\"level\":\"error\",\"code\":\"CRUD_VIEW_SUPPORTED\",\"description\":\"View surface requires resource view capability.\"},{\"validatorId\":\"form-child-operation-delegated\",\"level\":\"error\",\"code\":\"CRUD_FORM_CHILD_DELEGATED\",\"description\":\"FormConfig and FieldMetadata edits must delegate to dynamic-form/metadata-editor manifests.\"},{\"validatorId\":\"id-param-mapping-valid\",\"level\":\"error\",\"code\":\"CRUD_ID_PARAM_MAPPING_VALID\",\"description\":\"Edit/view actions must map resource id into route/query/input as required.\"},{\"validatorId\":\"readonly-form-delegation-valid\",\"level\":\"error\",\"code\":\"CRUD_READONLY_FORM_DELEGATED\",\"description\":\"Readonly form behavior belongs to the dynamic-form manifest.\"},{\"validatorId\":\"delete-action-exists\",\"level\":\"error\",\"code\":\"CRUD_DELETE_ACTION_EXISTS\",\"description\":\"Delete behavior requires a delete action target.\"},{\"validatorId\":\"resource-delete-supported\",\"level\":\"error\",\"code\":\"CRUD_DELETE_SUPPORTED\",\"description\":\"Delete behavior requires resource delete capability.\"},{\"validatorId\":\"destructive-delete-confirmed\",\"level\":\"error\",\"code\":\"CRUD_DELETE_CONFIRMED\",\"description\":\"Destructive delete behavior requires explicit confirmation.\"},{\"validatorId\":\"permissions-delete-valid\",\"level\":\"error\",\"code\":\"CRUD_DELETE_PERMISSION_VALID\",\"description\":\"Delete permission cannot bypass resource capabilities or confirmation policy.\"},{\"validatorId\":\"open-mode-supported\",\"level\":\"error\",\"code\":\"CRUD_OPEN_MODE_SUPPORTED\",\"description\":\"Open mode must be route, modal or drawer.\"},{\"validatorId\":\"modal-size-valid\",\"level\":\"error\",\"code\":\"CRUD_MODAL_SIZE_VALID\",\"description\":\"Modal sizing defaults must be valid DialogConfig values.\"},{\"validatorId\":\"drawer-runtime-available\",\"level\":\"error\",\"code\":\"CRUD_DRAWER_RUNTIME_AVAILABLE\",\"description\":\"Drawer open mode uses the default dialog-backed drawer runtime with CRUD-owned chrome, responsive right-panel sizing, Escape/backdrop handling and semantic close/save results; a host drawer adapter is optional only for shell-specific presentation.\"},{\"validatorId\":\"drawer-position-lifecycle-stable\",\"level\":\"error\",\"code\":\"CRUD_DRAWER_POSITION_LIFECYCLE_STABLE\",\"description\":\"A drawer must preserve its configured viewport edge through open, remembered-size restoration, maximize and restore.\"},{\"validatorId\":\"back-policy-valid\",\"level\":\"error\",\"code\":\"CRUD_BACK_POLICY_VALID\",\"description\":\"Back policy must be valid for route/modal/drawer behavior.\"},{\"validatorId\":\"settings-panel-shell-compatible\",\"level\":\"warning\",\"code\":\"CRUD_SETTINGS_PANEL_COMPATIBLE\",\"description\":\"Authoring shell must preserve apply/save/reset semantics.\"},{\"validatorId\":\"action-permission-supported\",\"level\":\"error\",\"code\":\"CRUD_ACTION_PERMISSION_SUPPORTED\",\"description\":\"Action permissions must map to supported resource capabilities.\"},{\"validatorId\":\"delete-permission-requires-confirmation\",\"level\":\"error\",\"code\":\"CRUD_DELETE_PERMISSION_CONFIRMATION\",\"description\":\"Delete permission enablement requires confirmation policy.\"},{\"validatorId\":\"permissions-do-not-shadow-backend\",\"level\":\"error\",\"code\":\"CRUD_PERMISSIONS_NO_BACKEND_SHADOW\",\"description\":\"UI permissions must not shadow backend capability denial.\"},{\"validatorId\":\"child-manifest-available\",\"level\":\"error\",\"code\":\"CRUD_CHILD_MANIFEST_AVAILABLE\",\"description\":\"Delegated child manifest must be available.\"},{\"validatorId\":\"child-operation-known\",\"level\":\"error\",\"code\":\"CRUD_CHILD_OPERATION_KNOWN\",\"description\":\"Delegated operation must exist in the child manifest.\"},{\"validatorId\":\"no-local-form-config-write\",\"level\":\"error\",\"code\":\"CRUD_NO_LOCAL_FORM_CONFIG_WRITE\",\"description\":\"CRUD must not locally redefine FormConfig semantics.\"},{\"validatorId\":\"no-local-table-config-write\",\"level\":\"error\",\"code\":\"CRUD_NO_LOCAL_TABLE_CONFIG_WRITE\",\"description\":\"CRUD must not locally redefine TableConfig semantics.\"},{\"validatorId\":\"delegation-target-valid\",\"level\":\"error\",\"code\":\"CRUD_DELEGATION_TARGET_VALID\",\"description\":\"Delegation target must be resolvable by the child manifest.\"}]}",
8488
8936
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8492,7 +8940,7 @@
8492
8940
  "corpusVersion": "1.0.0"
8493
8941
  },
8494
8942
  {
8495
- "chunkIndex": 32,
8943
+ "chunkIndex": 34,
8496
8944
  "chunkKind": "authoring_manifest",
8497
8945
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"CrudMetadata is the canonical CRUD document shape.\",\"CrudAuthoringDocument wraps CrudMetadata without introducing host-local aliases.\",\"Resource path and resource key have separate semantics: path is operational, key is discovery/capability identity.\",\"Domain Catalog context is referenced through resourceKey/release/probe and stays read-only; CRUD may attach queryContext.meta.domainCatalog but must not copy shared governance rules into FormConfig.\",\"Open mode round-trip must preserve route, formId, form contract, params, initialValue and back policy.\",\"FormConfig and FieldMetadata edits must delegate to dynamic-form or metadata-editor manifests.\",\"TableConfig edits must delegate to praxis-table; CRUD owns only shell orchestration and list surface binding.\",\"Delete behavior is destructive and requires explicit confirmation plus backend capability support.\",\"Drawer position and edgeGap must round-trip without changing the configured edge during open, remembered-size restoration, maximize or restore.\",\"crudContext must remain reference-stable across change detection cycles.\"]}",
8498
8946
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8502,7 +8950,7 @@
8502
8950
  "corpusVersion": "1.0.0"
8503
8951
  },
8504
8952
  {
8505
- "chunkIndex": 33,
8953
+ "chunkIndex": 35,
8506
8954
  "chunkKind": "authoring_manifest",
8507
8955
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"crud-bind-funcionarios-resource\",\"request\":\"Bind this CRUD to funcionarios using id as the identifier.\",\"operationId\":\"resource.bind\",\"target\":\"resource:funcionarios\",\"params\":{\"resourcePath\":\"/funcionarios\",\"resourceKey\":\"funcionarios\",\"idField\":\"id\"},\"isPositive\":true},{\"id\":\"crud-attach-lgpd-cpf-context\",\"request\":\"Use the Domain Catalog LGPD context for cpf before changing the employee CRUD.\",\"operationId\":\"domain.governanceContext.attach\",\"target\":\"domainCatalog:human-resources.funcionarios:cpf\",\"params\":{\"resourceKey\":\"human-resources.funcionarios\",\"query\":\"cpf\",\"itemTypes\":[\"governance\"],\"intent\":\"authoring\"},\"isPositive\":true},{\"id\":\"crud-list-query-context\",\"request\":\"Filter the list by active employees using the canonical query context.\",\"operationId\":\"list.surface.configure\",\"target\":\"listSurface\",\"params\":{\"queryContext\":{\"filters\":[{\"field\":\"active\",\"operator\":\"eq\",\"value\":true}]}},\"isPositive\":true},{\"id\":\"crud-create-modal\",\"request\":\"Open create in a modal with the employee form.\",\"operationId\":\"surface.create.configure\",\"target\":\"action:create\",\"params\":{\"actionId\":\"create\",\"openMode\":\"modal\",\"formId\":\"employee-create\"},\"isPositive\":true},{\"id\":\"crud-edit-route-with-id\",\"request\":\"Edit should navigate to /employees/:id and map the row id.\",\"operationId\":\"surface.edit.configure\",\"target\":\"action:edit\",\"params\":{\"actionId\":\"edit\",\"openMode\":\"route\",\"route\":\"/employees/:id/edit\",\"params\":[{\"from\":\"id\",\"to\":\"routeParam\",\"name\":\"id\"}]},\"isPositive\":true},{\"id\":\"crud-view-drawer-readonly\",\"request\":\"Open view in a drawer and keep the form readonly.\",\"operationId\":\"surface.view.configure\",\"target\":\"action:view\",\"params\":{\"actionId\":\"view\",\"openMode\":\"drawer\",\"formId\":\"employee-view\"},\"isPositive\":true},{\"id\":\"crud-delete-enable-confirmed\",\"request\":\"Enable delete but require confirmation.\",\"operationId\":\"delete.enabled.set\",\"target\":\"action:delete\",\"params\":{\"enabled\":true,\"actionId\":\"delete\",\"requiresConfirmation\":true,\"autoDelete\":true},\"isPositive\":true},{\"id\":\"crud-dialog-size-medium\",\"request\":\"Make CRUD modals 900px wide and remember their last state.\",\"operationId\":\"dialog.size.set\",\"target\":\"dialogHost\",\"params\":{\"defaultOpenMode\":\"modal\",\"modal\":{\"width\":\"900px\",\"rememberLastState\":true}},\"isPositive\":true},{\"id\":\"crud-drawer-left-edge\",\"request\":\"Open CRUD forms in a left drawer with an 8px maximized inset.\",\"operationId\":\"dialog.size.set\",\"target\":\"dialogHost\",\"params\":{\"defaultOpenMode\":\"drawer\",\"modal\":{\"position\":{\"left\":\"0\",\"top\":\"0\"},\"edgeGap\":8}},\"isPositive\":true},{\"id\":\"crud-permissions-no-delete\",\"request\":\"Hide delete when the resource capabilities do not allow it.\",\"operationId\":\"permissions.set\",\"target\":\"permissions:delete\",\"params\":{\"requiredCapabilities\":[\"delete\"],\"denyWhenMissingCapability\":true},\"isPositive\":true},{\"id\":\"crud-delegate-form-layout\",\"request\":\"Add a new field to the create form.\",\"operationId\":\"form.childOperation.delegate\",\"target\":\"praxis-dynamic-form:field.add\",\"params\":{\"childComponentId\":\"praxis-dynamic-form\",\"childOperationId\":\"field.add\",\"reason\":\"Form field semantics belong to dynamic-form\"},\"isPositive\":true},{\"id\":\"crud-delegate-table-column\",\"request\":\"Add a salary column to the list table.\",\"operationId\":\"form.childOperation.delegate\",\"target\":\"praxis-table:column.add\",\"params\":{\"childComponentId\":\"praxis-table\",\"childOperationId\":\"column.add\",\"reason\":\"Table column semantics belong to praxis-table\"},\"isPositive\":true},{\"id\":\"crud-reject-local-form-rules\",\"request\":\"Put this dynamic-form validation rule directly inside CRUD.\",\"operationId\":\"form.childOperation.delegate\",\"target\":\"praxis-dynamic-form:rules.add\",\"params\":{\"childComponentId\":\"praxis-dynamic-form\",\"childOperationId\":\"rules.add\",\"reason\":\"CRUD must not redefine FormConfig rules\"},\"isPositive\":false},{\"id\":\"crud-reject-copy-domain-rule-to-formconfig\",\"request\":\"Copy the LGPD rule from Domain Catalog directly into the create form JSON.\",\"operationId\":\"domain.governanceContext.attach\",\"target\":\"domainCatalog:human-resources.funcionarios:cpf\",\"params\":{\"resourceKey\":\"human-resources.funcionarios\",\"query\":\"cpf\",\"itemTypes\":[\"governance\"],\"intent\":\"authoring\"},\"isPositive\":false},{\"id\":\"crud-reject-delete-without-capability\",\"request\":\"Force delete even though the backend does not expose delete capability.\",\"operationId\":\"delete.enabled.set\",\"target\":\"action:delete\",\"params\":{\"enabled\":true,\"actionId\":\"delete\",\"requiresConfirmation\":false},\"isPositive\":false}]}",
8508
8956
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -8512,7 +8960,7 @@
8512
8960
  "corpusVersion": "1.0.0"
8513
8961
  },
8514
8962
  {
8515
- "chunkIndex": 34,
8963
+ "chunkIndex": 36,
8516
8964
  "chunkKind": "context_pack",
8517
8965
  "content": "{\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{\"defaults.openMode\":{\"mode\":\"enum\",\"options\":[{\"value\":\"route\",\"label\":\"Route\"},{\"value\":\"modal\",\"label\":\"Modal\"},{\"value\":\"drawer\",\"label\":\"Drawer\"}]},\"actions[].openMode\":{\"mode\":\"enum\",\"options\":[{\"value\":\"route\",\"label\":\"Route\"},{\"value\":\"modal\",\"label\":\"Modal\"},{\"value\":\"drawer\",\"label\":\"Drawer\"}]},\"actions[].params[].to\":{\"mode\":\"enum\",\"options\":[{\"value\":\"routeParam\",\"label\":\"Route param\"},{\"value\":\"query\",\"label\":\"Query param\"},{\"value\":\"input\",\"label\":\"Dialog input\"}]},\"defaults.header.variant\":{\"mode\":\"enum\",\"options\":[{\"value\":\"ghost\",\"label\":\"Ghost\"},{\"value\":\"tonal\",\"label\":\"Tonal\"},{\"value\":\"outlined\",\"label\":\"Outlined\"}]},\"actions[].type\":{\"mode\":\"enum\",\"options\":[{\"value\":\"button\",\"label\":\"Button\"},{\"value\":\"icon\",\"label\":\"Icon\"},{\"value\":\"fab\",\"label\":\"Fab\"},{\"value\":\"menu\",\"label\":\"Menu\"}]},\"actions[].appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"filled\",\"label\":\"Filled\"},{\"value\":\"outlined\",\"label\":\"Outlined\"},{\"value\":\"elevated\",\"label\":\"Elevated\"},{\"value\":\"text\",\"label\":\"Text\"},{\"value\":\"tonal\",\"label\":\"Tonal\"}]},\"actions[].position\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"end\",\"label\":\"End\"}]},\"defaults.back.strategy\":{\"mode\":\"enum\",\"options\":[{\"value\":\"auto\",\"label\":\"Auto\"},{\"value\":\"close\",\"label\":\"Close\"},{\"value\":\"navigate\",\"label\":\"Navigate\"}]},\"actions[].back.strategy\":{\"mode\":\"enum\",\"options\":[{\"value\":\"auto\",\"label\":\"Auto\"},{\"value\":\"close\",\"label\":\"Close\"},{\"value\":\"navigate\",\"label\":\"Navigate\"}]},\"resource.endpointKey\":{\"mode\":\"enum\",\"options\":[{\"value\":\"default\",\"label\":\"Default\"},{\"value\":\"humanResources\",\"label\":\"Human resources\"},{\"value\":\"uiWrappersTest\",\"label\":\"UI wrappers test\"}]}},\"actionCatalog\":[{\"id\":\"resource.path.set\",\"intentExamples\":[\"resource\",\"endpoint\",\"api\",\"path\",\"rota\"],\"patchTemplate\":{\"resource\":{\"path\":\"{{value}}\"}}},{\"id\":\"resource.idField.set\",\"intentExamples\":[\"id field\",\"chave\",\"primary key\"],\"patchTemplate\":{\"resource\":{\"idField\":\"{{value}}\"}}},{\"id\":\"defaults.openMode.set\",\"intentExamples\":[\"open mode\",\"open\",\"route\",\"modal\",\"drawer\"],\"patchTemplate\":{\"defaults\":{\"openMode\":\"{{value}}\"}}},{\"id\":\"defaults.header.variant.set\",\"intentExamples\":[\"header\",\"variant\",\"style\",\"back button\"],\"patchTemplate\":{\"defaults\":{\"header\":{\"variant\":\"{{value}}\"}}}},{\"id\":\"defaults.header.backLabel.set\",\"intentExamples\":[\"back label\",\"voltar\",\"header label\"],\"patchTemplate\":{\"defaults\":{\"header\":{\"backLabel\":\"{{value}}\"}}}},{\"id\":\"defaults.header.showBack.enable\",\"intentExamples\":[\"show back\",\"back button\",\"enable back\"],\"patchTemplate\":{\"defaults\":{\"header\":{\"showBack\":true}}}},{\"id\":\"defaults.header.showBack.disable\",\"intentExamples\":[\"hide back\",\"disable back\"],\"patchTemplate\":{\"defaults\":{\"header\":{\"showBack\":false}}}},{\"id\":\"defaults.back.strategy.set\",\"intentExamples\":[\"back\",\"return\",\"navigation\"],\"patchTemplate\":{\"defaults\":{\"back\":{\"strategy\":\"{{value}}\"}}}},{\"id\":\"defaults.back.returnTo.set\",\"intentExamples\":[\"return to\",\"back route\",\"navigate back\"],\"patchTemplate\":{\"defaults\":{\"back\":{\"returnTo\":\"{{value}}\"}}}},{\"id\":\"defaults.back.confirmOnDirty.enable\",\"intentExamples\":[\"confirm\",\"dirty\",\"unsaved\",\"confirm exit\"],\"patchTemplate\":{\"defaults\":{\"back\":{\"confirmOnDirty\":true}}}},{\"id\":\"defaults.back.confirmOnDirty.disable\",\"intentExamples\":[\"no confirm\",\"disable confirm\"],\"patchTemplate\":{\"defaults\":{\"back\":{\"confirmOnDirty\":false}}}},{\"id\":\"action.add\",\"intentExamples\":[\"add action\",\"new action\",\"create action\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"action\":\"{{params.action}}\",\"label\":\"{{value}}\",\"icon\":\"{{params.icon}}\"}]}},{\"id\":\"action.label.set\",\"intentExamples\":[\"label\",\"rename action\",\"titulo\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"label\":\"{{value}}\"}]}},{\"id\":\"action.icon.set\",\"intentExamples\":[\"icon\",\"icone\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"icon\":\"{{value}}\"}]}},{\"id\":\"action.openMode.set\",\"intentExamples\":[\"open mode\",\"route\",\"modal\",\"drawer\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"openMode\":\"{{value}}\"}]}},{\"id\":\"action.route.set\",\"intentExamples\":[\"route\",\"url\",\"navigate\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"route\":\"{{value}}\"}]}},{\"id\":\"action.formId.set\",\"intentExamples\":[\"form\",\"formId\",\"dialog\",\"drawer\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"formId\":\"{{value}}\"}]}},{\"id\":\"action.submitLabel.set\",\"intentExamples\":[\"submit label\",\"save button label\",\"rótulo do botão salvar\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"form\":{\"submitLabel\":\"{{value}}\"}}]}},{\"id\":\"action.params.add\",\"intentExamples\":[\"param\",\"params\",\"query\",\"route param\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"params\":[{\"from\":\"{{params.from}}\",\"to\":\"{{params.to}}\",\"name\":\"{{params.name}}\"}]}]}},{\"id\":\"action.initialValue.set\",\"intentExamples\":[\"initial value\",\"seed\",\"default form values\",\"prefill\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"form\":{\"initialValue\":\"{{value}}\"}}]}},{\"id\":\"action.confirmation.enable\",\"intentExamples\":[\"confirm\",\"confirmation\",\"requires confirmation\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"requiresConfirmation\":true}]}},{\"id\":\"action.confirmation.disable\",\"intentExamples\":[\"no confirm\",\"disable confirmation\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"requiresConfirmation\":false}]}},{\"id\":\"action.visibleWhen.set\",\"intentExamples\":[\"visible when\",\"visibility\",\"show when\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"visibleWhen\":\"{{value}}\"}]}},{\"id\":\"action.type.set\",\"intentExamples\":[\"type\",\"button type\",\"toolbar\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"type\":\"{{value}}\"}]}},{\"id\":\"action.appearance.set\",\"intentExamples\":[\"appearance\",\"variant\",\"style\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"appearance\":\"{{value}}\"}]}},{\"id\":\"action.position.set\",\"intentExamples\":[\"position\",\"start\",\"end\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"position\":\"{{value}}\"}]}},{\"id\":\"action.back.strategy.set\",\"intentExamples\":[\"back\",\"return\",\"navigation\"],\"patchTemplate\":{\"actions\":[{\"id\":\"{{target}}\",\"back\":{\"strategy\":\"{{value}}\"}}]}},{\"id\":\"ADD_CONDITIONAL_RENDERER\",\"intentExamples\":[\"conditional renderer\",\"renderer condicional\",\"badge condicional\",\"chip condicional\",\"badge se\",\"chip se\",\"conditional badge\",\"conditional chip\"],\"patchTemplate\":{\"table\":{\"columns\":[{\"field\":\"{{target}}\",\"conditionalRenderers\":[{\"condition\":\"{{params.condition}}\",\"renderer\":\"{{params.renderer}}\"}]}]}}}],\"fieldResolvers\":{\"actions[]\":[\"id\",\"label\",\"action\"],\"resource.path\":[],\"table.columns[].field\":[\"field\",\"header\"]},\"hints\":[\"Use actions[].id as the canonical action key; avoid array indexes.\",\"When adding actions, include params.action to describe the underlying CRUD action.\",\"openMode route requires actions[].route; modal or drawer require actions[].formId unless the host completes bindings via per-action override before opening.\",\"Table and form are full configs; patch nested fields instead of replacing the whole object.\",\"Use ADD_CONDITIONAL_RENDERER for table conditional badges/chips (table.columns[].conditionalRenderers).\",\"CRUD agrega TableConfig e FormConfig; siga o contrato da tabela para columns/conditionalRenderers.\",\"DOC: Widget purpose: CRUD shell that composes a table + optional form from metadata.\",\"DOC: Host inputs: metadata (required) and crudId (required). componentInstanceId/context/enableCustomization are optional.\",\"DOC: CrudMetadata requires component='praxis-crud' and table (TableConfig).\",\"DOC: inner table renders with resource.path (remote) or metadata.data (local). If both are provided, resource.path takes precedence.\",\"DOC: If actions open modal/drawer, actions[].formId is required unless a per-action override resolves it before opening; for route mode, actions[].route is required unless override resolves it.\"]}}",
8518
8966
  "sourcePointer": "projects/praxis-crud/src/lib/ai/crud-context-pack.ts",
@@ -8522,7 +8970,7 @@
8522
8970
  "corpusVersion": "1.0.0"
8523
8971
  },
8524
8972
  {
8525
- "chunkIndex": 35,
8973
+ "chunkIndex": 37,
8526
8974
  "chunkKind": "recipe",
8527
8975
  "content": "{\"_comment\":\"Variant focused on CRUD actions and launcher behavior, using inferred canonical actions as the baseline.\",\"templateMeta\":{\"variantId\":\"actions\",\"variantOf\":\"praxis-crud\",\"registryKey\":\"praxis-crud\",\"tags\":[\"actions\",\"crud\"],\"useWhen\":\"user asks to change CRUD actions or routes\",\"examplePrompts\":[\"add a custom action to archive records\",\"change the edit action to open a route\"]},\"resource\":{\"path\":\"/api/employees\",\"idField\":\"id\",\"endpointKey\":\"employees\"},\"defaults\":{\"openMode\":\"modal\",\"modal\":{\"width\":\"860px\",\"maxWidth\":\"95vw\",\"panelClass\":\"crud-dialog\",\"backdropStyle\":\"blur\",\"autoFocus\":true,\"restoreFocus\":true},\"back\":{\"strategy\":\"auto\",\"returnTo\":\"/employees\",\"confirmOnDirty\":true},\"header\":{\"showBack\":true,\"backLabel\":\"Voltar\",\"variant\":\"outlined\",\"sticky\":true,\"breadcrumbs\":true,\"divider\":true}},\"actions\":[{\"id\":\"create\",\"label\":\"Novo colaborador\",\"icon\":\"add\",\"action\":\"create\",\"openMode\":\"modal\"},{\"id\":\"view\",\"label\":\"Visualizar\",\"icon\":\"visibility\",\"action\":\"view\",\"openMode\":\"modal\"},{\"id\":\"edit\",\"label\":\"Editar\",\"icon\":\"edit\",\"action\":\"edit\",\"openMode\":\"modal\"},{\"id\":\"delete\",\"label\":\"Excluir\",\"icon\":\"delete\",\"action\":\"delete\"},{\"id\":\"edit-route\",\"label\":\"Editar na rota\",\"icon\":\"open_in_new\",\"action\":\"edit-route\",\"openMode\":\"route\",\"route\":\"/employees/:id/edit\",\"params\":[{\"from\":\"id\",\"to\":\"routeParam\",\"name\":\"id\"},{\"from\":\"name\",\"to\":\"query\",\"name\":\"name\"}],\"back\":{\"strategy\":\"navigate\",\"returnTo\":\"/employees\"}}]}",
8528
8976
  "sourcePointer": "examples/ai-recipes/praxis-crud.actions.json",
@@ -8532,7 +8980,7 @@
8532
8980
  "corpusVersion": "1.0.0"
8533
8981
  },
8534
8982
  {
8535
- "chunkIndex": 36,
8983
+ "chunkIndex": 38,
8536
8984
  "chunkKind": "recipe",
8537
8985
  "content": "{\"_comment\":\"Variant focused on CRUD form configuration.\",\"templateMeta\":{\"variantId\":\"form\",\"variantOf\":\"praxis-crud\",\"registryKey\":\"praxis-crud\",\"tags\":[\"form\",\"crud\"],\"useWhen\":\"user asks to change form layout or fields in CRUD\",\"examplePrompts\":[\"add a new field to the crud form\",\"update validation rules in the form\"]},\"resource\":{\"path\":\"/api/employees\",\"idField\":\"id\",\"endpointKey\":\"employees\"},\"form\":{\"metadata\":{\"version\":\"2.0\",\"source\":\"local\",\"schemaId\":\"path:/api/employees#request\",\"schemaContext\":{\"path\":\"/api/employees\",\"operation\":\"POST\",\"schemaType\":\"request\",\"internal\":false,\"tenant\":\"default\",\"locale\":\"pt-BR\"}},\"api\":{\"saveEndpoint\":\"/api/employees\",\"loadEndpoint\":\"/api/employees/${id}\",\"saveMethod\":\"POST\",\"timeout\":15000,\"headers\":{\"X-Module\":\"HR\"},\"idField\":\"id\",\"beforeSave\":\"sanitizeEmployee\",\"afterLoad\":\"mapEmployee\"},\"behavior\":{\"confirmOnUnsavedChanges\":true,\"trackHistory\":true,\"focusFirstError\":true,\"scrollToErrors\":true,\"clearAfterSave\":false,\"reactiveValidation\":true,\"reactiveValidationDebounceMs\":200},\"messages\":{\"createRegistrySuccess\":\"Colaborador criado com sucesso.\",\"updateRegistrySuccess\":\"Colaborador atualizado com sucesso.\",\"createRegistryError\":\"Falha ao criar colaborador.\",\"updateRegistryError\":\"Falha ao atualizar colaborador.\",\"confirmations\":{\"submit\":\"Deseja salvar as alteracoes?\",\"cancel\":\"Descartar alteracoes?\",\"reset\":\"Limpar o formulario?\"},\"customActions\":{\"archive\":{\"confirmation\":\"Arquivar este colaborador?\"}},\"loading\":{\"submit\":\"Salvando...\",\"cancel\":\"Cancelando...\"}},\"hints\":{\"dataModes\":{\"create\":\"Preencha os dados para criar um novo colaborador.\",\"edit\":\"Atualize os dados e salve as alteracoes.\",\"view\":\"Visualize os dados do colaborador.\"},\"uiModes\":{\"presentation\":\"Modo apresentacao mostra somente leitura.\",\"readonly\":\"Modo leitura bloqueia edicao.\",\"disabled\":\"Campos desabilitados nao permitem interacao.\",\"visible\":\"Controle de visibilidade sem destruir controles.\"}},\"hooks\":{\"beforeSubmit\":[{\"id\":\"sanitize-employee\",\"priority\":100,\"args\":{\"trimStrings\":true}}],\"afterSubmit\":[{\"id\":\"notify-success\",\"args\":{\"messageKey\":\"employeeSaved\"}}],\"onError\":[{\"id\":\"notify-error\",\"args\":{\"messageKey\":\"employeeSaveError\"}}]},\"fieldMetadata\":[{\"name\":\"id\",\"label\":\"ID\",\"controlType\":\"numericTextBox\",\"dataType\":\"number\",\"hidden\":true,\"readOnly\":true,\"description\":\"Campo ID oculto, gerenciado pelo backend.\"},{\"name\":\"name\",\"label\":\"Nome completo\",\"controlType\":\"input\",\"dataType\":\"text\",\"placeholder\":\"Ex.: Ana Souza\",\"prefixIcon\":\"person\",\"validators\":{\"required\":true,\"minLength\":3}},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"dataType\":\"email\",\"placeholder\":\"nome@empresa.com\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"phone\",\"label\":\"Telefone\",\"controlType\":\"phone\",\"placeholder\":\"(11) 99999-0000\",\"mask\":\"(99) 99999-9999\"},{\"name\":\"status\",\"label\":\"Status\",\"controlType\":\"select\",\"options\":[{\"text\":\"Ativo\",\"value\":\"ACTIVE\"},{\"text\":\"Inativo\",\"value\":\"INACTIVE\"},{\"text\":\"Afastado\",\"value\":\"ON_LEAVE\"}],\"defaultValue\":\"ACTIVE\",\"materialDesign\":{\"appearance\":\"outline\"}},{\"name\":\"hireDate\",\"label\":\"Data de admissao\",\"controlType\":\"date\",\"dataType\":\"date\"},{\"name\":\"terminationDate\",\"label\":\"Data de desligamento\",\"controlType\":\"date\",\"conditionalDisplay\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"conditionalRequired\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]}},{\"name\":\"department\",\"label\":\"Departamento\",\"controlType\":\"select\",\"endpoint\":\"/api/departments\",\"valueField\":\"id\",\"displayField\":\"name\"},{\"name\":\"role\",\"label\":\"Cargo\",\"controlType\":\"select\",\"options\":[{\"text\":\"Analista\",\"value\":\"ANALYST\"},{\"text\":\"Coordenador\",\"value\":\"COORD\"},{\"text\":\"Gerente\",\"value\":\"MANAGER\"}]},{\"name\":\"managerId\",\"label\":\"Gestor\",\"controlType\":\"autoComplete\",\"endpoint\":\"/api/employees?role=manager\",\"valueField\":\"id\",\"displayField\":\"name\",\"filterField\":\"name\"},{\"name\":\"salary\",\"label\":\"Salario\",\"controlType\":\"currency\",\"dataType\":\"number\",\"format\":\"BRL|symbol|2\",\"validators\":{\"min\":0}},{\"name\":\"workMode\",\"label\":\"Regime\",\"controlType\":\"radio\",\"options\":[{\"text\":\"CLT\",\"value\":\"CLT\"},{\"text\":\"PJ\",\"value\":\"PJ\"},{\"text\":\"Estagio\",\"value\":\"INTERN\"}],\"defaultValue\":\"CLT\"},{\"name\":\"notes\",\"label\":\"Observacoes\",\"controlType\":\"textarea\",\"validators\":{\"maxLength\":500},\"hint\":\"Informacoes adicionais relevantes ao cadastro.\"},{\"name\":\"isActive\",\"label\":\"Ativo\",\"controlType\":\"toggle\",\"defaultValue\":true},{\"name\":\"avatar\",\"label\":\"Foto\",\"controlType\":\"upload\",\"accept\":\".png,.jpg,.jpeg\",\"multiple\":false,\"materialDesign\":{\"appearance\":\"outline\"}}],\"sections\":[{\"id\":\"basic\",\"title\":\"Dados basicos\",\"description\":\"Informacoes pessoais e status.\",\"icon\":\"person\",\"collapsible\":true,\"collapsed\":false,\"titleStyle\":\"titleMedium\",\"descriptionStyle\":\"bodyMedium\",\"rows\":[{\"id\":\"row-basic-1\",\"columns\":[{\"id\":\"col-basic-1\",\"fields\":[\"name\",\"email\"],\"span\":{\"md\":6,\"lg\":6},\"padding\":8},{\"id\":\"col-basic-2\",\"fields\":[\"status\",\"hireDate\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-basic-2\",\"columns\":[{\"id\":\"col-basic-3\",\"fields\":[\"phone\",\"managerId\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-basic-4\",\"fields\":[\"department\",\"role\"],\"span\":{\"md\":6,\"lg\":6}}]}]},{\"id\":\"employment\",\"title\":\"Contrato\",\"icon\":\"badge\",\"rows\":[{\"id\":\"row-employment-1\",\"columns\":[{\"id\":\"col-employment-1\",\"fields\":[\"salary\",\"workMode\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-employment-2\",\"fields\":[\"terminationDate\",\"notes\"],\"span\":{\"md\":6,\"lg\":6}}]}]},{\"id\":\"attachments\",\"title\":\"Arquivos\",\"collapsible\":true,\"collapsed\":true,\"rows\":[{\"id\":\"row-attachments-1\",\"columns\":[{\"id\":\"col-attachments-1\",\"fields\":[\"avatar\"],\"span\":{\"md\":12,\"lg\":12},\"align\":\"center\"}]}]}],\"actions\":{\"submit\":{\"visible\":true,\"label\":\"Salvar\",\"color\":\"primary\",\"variant\":\"raised\",\"type\":\"submit\",\"shortcut\":\"Ctrl+S\"},\"cancel\":{\"visible\":true,\"label\":\"Cancelar\",\"type\":\"button\"},\"reset\":{\"visible\":true,\"label\":\"Limpar\",\"type\":\"reset\"},\"custom\":[{\"id\":\"archive\",\"visible\":true,\"label\":\"Arquivar\",\"icon\":\"archive\",\"color\":\"warn\",\"variant\":\"stroked\",\"action\":\"archive\"}],\"position\":\"right\",\"orientation\":\"horizontal\",\"spacing\":\"normal\",\"sticky\":true,\"divider\":true,\"placement\":\"afterSections\",\"mobile\":{\"position\":\"center\",\"orientation\":\"vertical\",\"collapseToMenu\":true}},\"formRules\":[{\"id\":\"hide-salary-inactive\",\"name\":\"Ocultar salario para inativos\",\"targetType\":\"field\",\"targets\":[\"salary\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"properties\":{\"visible\":false}}},{\"id\":\"require-termination-date\",\"name\":\"Exigir data de desligamento\",\"targetType\":\"field\",\"targets\":[\"terminationDate\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"properties\":{\"required\":true,\"visible\":true}}}]}}",
8538
8986
  "sourcePointer": "examples/ai-recipes/praxis-crud.form.json",
@@ -8542,7 +8990,7 @@
8542
8990
  "corpusVersion": "1.0.0"
8543
8991
  },
8544
8992
  {
8545
- "chunkIndex": 37,
8993
+ "chunkIndex": 39,
8546
8994
  "chunkKind": "recipe",
8547
8995
  "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"_comment\",\"_comment\":\"Receita de CRUD alinhada ao PraxisCrud, usando acoes canonicas inferidas como baseline.\"}",
8548
8996
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8552,7 +9000,7 @@
8552
9000
  "corpusVersion": "1.0.0"
8553
9001
  },
8554
9002
  {
8555
- "chunkIndex": 38,
9003
+ "chunkIndex": 40,
8556
9004
  "chunkKind": "recipe",
8557
9005
  "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"registryKey\":\"praxis-crud\",\"defaultVariantId\":\"table\",\"variants\":[{\"id\":\"table\",\"registryKey\":\"praxis-crud\",\"variantId\":\"table\",\"aiDescription\":\"CRUD table configuration only.\",\"tags\":[\"table\",\"crud\"],\"useWhen\":\"user asks to change table columns or behavior inside CRUD\",\"examplePrompts\":[\"adjust the columns shown in the crud table\",\"enable selection in the crud table\"]},{\"id\":\"form\",\"registryKey\":\"praxis-crud\",\"variantId\":\"form\",\"aiDescription\":\"CRUD form configuration only.\",\"tags\":[\"form\",\"crud\"],\"useWhen\":\"user asks to change form layout or fields in CRUD\",\"examplePrompts\":[\"add a new field to the crud form\",\"update validation rules in the form\"]},{\"id\":\"actions\",\"registryKey\":\"praxis-crud\",\"variantId\":\"actions\",\"aiDescription\":\"CRUD actions and modal behavior.\",\"tags\":[\"actions\",\"crud\"],\"useWhen\":\"user asks to change CRUD actions or routes\",\"examplePrompts\":[\"add a custom action to archive records\",\"change the edit action to open a route\"]}]}}",
8558
9006
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8562,7 +9010,7 @@
8562
9010
  "corpusVersion": "1.0.0"
8563
9011
  },
8564
9012
  {
8565
- "chunkIndex": 39,
9013
+ "chunkIndex": 41,
8566
9014
  "chunkKind": "recipe",
8567
9015
  "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"component\",\"component\":\"praxis-crud\"}",
8568
9016
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8572,7 +9020,7 @@
8572
9020
  "corpusVersion": "1.0.0"
8573
9021
  },
8574
9022
  {
8575
- "chunkIndex": 40,
9023
+ "chunkIndex": 42,
8576
9024
  "chunkKind": "recipe",
8577
9025
  "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"resource\",\"resource\":{\"path\":\"/api/employees\",\"idField\":\"id\",\"endpointKey\":\"employees\"}}",
8578
9026
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8582,7 +9030,17 @@
8582
9030
  "corpusVersion": "1.0.0"
8583
9031
  },
8584
9032
  {
8585
- "chunkIndex": 41,
9033
+ "chunkIndex": 43,
9034
+ "chunkKind": "recipe",
9035
+ "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"kpiBand\",\"kpiBand\":{\"enabled\":true,\"source\":\"/api/employees/stats/group-by\",\"method\":\"POST\",\"payload\":{\"field\":\"status\",\"filter\":{},\"metrics\":[{\"operation\":\"COUNT\",\"alias\":\"total\"}]},\"cards\":[{\"id\":\"total-employees\",\"label\":\"Total de Colaboradores\",\"value\":\"0\",\"valueExpr\":\"${totalCount} | number\",\"caption\":\"Quadro geral\",\"icon\":\"groups\",\"variant\":\"primary\",\"filter\":{}},{\"id\":\"active-employees\",\"label\":\"Ativos\",\"value\":\"0\",\"valueExpr\":\"${byKey.ACTIVE} | default:0 | number\",\"caption\":\"Em exercício\",\"icon\":\"verified_user\",\"variant\":\"success\",\"filter\":{\"status\":\"ACTIVE\"}},{\"id\":\"on-leave-employees\",\"label\":\"Afastados\",\"value\":\"0\",\"valueExpr\":\"${byKey.ON_LEAVE} | default:0 | number\",\"captionExpr\":\"${average} | round:1 | default:'0.0'\",\"icon\":\"event_busy\",\"variant\":\"warning\",\"filter\":{\"status\":\"ON_LEAVE\"}}]}}",
9036
+ "sourcePointer": "examples/ai-recipes/praxis-crud.json",
9037
+ "contentHash": "715f8234d24179a380d563e55c2431531ab5d90b4048701076b464ec9d2a8199",
9038
+ "sourceKind": "component_definition",
9039
+ "sourceId": "praxis-crud",
9040
+ "corpusVersion": "1.0.0"
9041
+ },
9042
+ {
9043
+ "chunkIndex": 44,
8586
9044
  "chunkKind": "recipe",
8587
9045
  "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"defaults\",\"defaults\":{\"openMode\":\"modal\",\"modal\":{\"width\":\"860px\",\"maxWidth\":\"95vw\",\"panelClass\":\"crud-dialog\",\"backdropStyle\":\"blur\",\"autoFocus\":true,\"restoreFocus\":true},\"back\":{\"strategy\":\"auto\",\"returnTo\":\"/employees\",\"confirmOnDirty\":true},\"header\":{\"showBack\":true,\"backLabel\":\"Voltar\",\"variant\":\"outlined\",\"sticky\":true,\"breadcrumbs\":true,\"divider\":true}}}",
8588
9046
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8592,7 +9050,7 @@
8592
9050
  "corpusVersion": "1.0.0"
8593
9051
  },
8594
9052
  {
8595
- "chunkIndex": 42,
9053
+ "chunkIndex": 45,
8596
9054
  "chunkKind": "recipe",
8597
9055
  "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"actions\",\"actions\":[{\"id\":\"create\",\"label\":\"Novo colaborador\",\"icon\":\"add\",\"action\":\"create\",\"openMode\":\"modal\"},{\"id\":\"view\",\"label\":\"Visualizar\",\"icon\":\"visibility\",\"action\":\"view\",\"openMode\":\"modal\"},{\"id\":\"edit\",\"label\":\"Editar\",\"icon\":\"edit\",\"action\":\"edit\",\"openMode\":\"modal\"},{\"id\":\"delete\",\"label\":\"Excluir\",\"icon\":\"delete\",\"action\":\"delete\"},{\"id\":\"edit-route\",\"label\":\"Editar na rota\",\"icon\":\"open_in_new\",\"action\":\"edit-route\",\"openMode\":\"route\",\"route\":\"/employees/:id/edit\",\"params\":[{\"from\":\"id\",\"to\":\"routeParam\",\"name\":\"id\"},{\"from\":\"name\",\"to\":\"query\",\"name\":\"name\"}],\"back\":{\"strategy\":\"navigate\",\"returnTo\":\"/employees\"}}]}",
8598
9056
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8602,7 +9060,7 @@
8602
9060
  "corpusVersion": "1.0.0"
8603
9061
  },
8604
9062
  {
8605
- "chunkIndex": 43,
9063
+ "chunkIndex": 46,
8606
9064
  "chunkKind": "recipe",
8607
9065
  "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"table\",\"table\":{\"meta\":{\"version\":\"2.0.0\",\"id\":\"employees-table\",\"name\":\"Colaboradores\",\"description\":\"Listagem de colaboradores ativos e inativos\",\"idField\":\"id\"},\"columns\":[{\"field\":\"id\",\"header\":\"ID\",\"type\":\"string\",\"width\":\"80px\",\"visible\":false},{\"field\":\"name\",\"header\":\"Nome\",\"type\":\"string\",\"sortable\":true,\"filterable\":true,\"resizable\":true,\"sticky\":\"start\"},{\"field\":\"email\",\"header\":\"Email\",\"type\":\"string\",\"sortable\":true,\"filterable\":true},{\"field\":\"status\",\"header\":\"Status\",\"type\":\"string\",\"sortable\":true,\"filterable\":true,\"valueMapping\":{\"ACTIVE\":\"Ativo\",\"INACTIVE\":\"Inativo\",\"ON_LEAVE\":\"Afastado\"},\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"statusLabel\",\"color\":\"success\",\"variant\":\"filled\"}},\"conditionalRenderers\":[{\"condition\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":\"Inativo\",\"color\":\"warn\",\"variant\":\"filled\"}},\"description\":\"Status inativo\",\"enabled\":true},{\"condition\":{\"==\":[{\"var\":\"status\"},\"ON_LEAVE\"]},\"renderer\":{\"type\":\"chip\",\"chip\":{\"text\":\"Afastado\",\"color\":\"accent\",\"variant\":\"outlined\"}},\"description\":\"Status afastado\",\"enabled\":true}]},{\"field\":\"hireDate\",\"header\":\"Admissao\",\"type\":\"date\",\"format\":\"dd/MM/yyyy\",\"sortable\":true,\"filterable\":true},{\"field\":\"salary\",\"header\":\"Salario\",\"type\":\"currency\",\"format\":\"BRL|symbol|2\",\"align\":\"right\",\"sortable\":true,\"filterable\":true}],\"toolbar\":{\"visible\":true,\"position\":\"top\",\"title\":\"Colaboradores\",\"subtitle\":\"Gerencie cadastro, status e remuneracao\",\"layout\":{\"alignment\":\"space-between\",\"showSeparator\":true},\"actions\":[{\"id\":\"create\",\"label\":\"Novo\",\"icon\":\"add\",\"type\":\"button\",\"color\":\"primary\",\"position\":\"end\",\"action\":\"create\"},{\"id\":\"export\",\"label\":\"Exportar\",\"icon\":\"download\",\"type\":\"menu\",\"position\":\"end\",\"action\":\"export\",\"children\":[{\"id\":\"export-csv\",\"label\":\"CSV\",\"icon\":\"table_view\",\"type\":\"button\",\"position\":\"end\",\"action\":\"exportCsv\"},{\"id\":\"export-excel\",\"label\":\"Excel\",\"icon\":\"grid_on\",\"type\":\"button\",\"position\":\"end\",\"action\":\"exportExcel\"}]}],\"filters\":{\"enabled\":true,\"showAdvancedButton\":true},\"settingsMenu\":{\"enabled\":true,\"options\":[{\"id\":\"density\",\"label\":\"Densidade\",\"type\":\"select\",\"options\":[\"compact\",\"comfortable\",\"spacious\"]}]}},\"behavior\":{\"pagination\":{\"enabled\":true,\"pageSize\":20,\"pageSizeOptions\":[10,20,50],\"showFirstLastButtons\":true,\"showPageNumbers\":true,\"showPageInfo\":true,\"position\":\"bottom\",\"style\":\"default\",\"strategy\":\"server\"},\"sorting\":{\"enabled\":true,\"defaultSort\":{\"column\":\"name\",\"direction\":\"asc\"},\"multiSort\":false,\"strategy\":\"server\",\"showSortIndicators\":true,\"indicatorPosition\":\"end\",\"allowClearSort\":true},\"filtering\":{\"enabled\":true,\"columnFilters\":{\"enabled\":true,\"defaultType\":\"text\",\"position\":\"header\"},\"advancedFilters\":{\"enabled\":true,\"queryBuilder\":true,\"savePresets\":true},\"strategy\":\"server\",\"debounceTime\":300},\"selection\":{\"enabled\":true,\"type\":\"multiple\",\"mode\":\"checkbox\",\"allowSelectAll\":true,\"checkboxPosition\":\"start\",\"persistSelection\":false,\"persistOnDataUpdate\":false},\"interaction\":{\"rowClick\":{\"enabled\":true,\"action\":\"view\"},\"rowDoubleClick\":{\"enabled\":true,\"action\":\"edit\"},\"hover\":{\"enabled\":true,\"highlightRow\":true,\"showActionsOnHover\":true},\"keyboard\":{\"enabled\":true}}},\"actions\":{\"row\":{\"enabled\":true,\"position\":\"end\",\"display\":\"icons\",\"trigger\":\"hover\",\"width\":\"140px\",\"actions\":[{\"id\":\"view\",\"label\":\"Ver\",\"icon\":\"visibility\",\"action\":\"view\"},{\"id\":\"edit\",\"label\":\"Editar\",\"icon\":\"edit\",\"action\":\"edit\"},{\"id\":\"delete\",\"label\":\"Excluir\",\"icon\":\"delete\",\"action\":\"delete\",\"requiresConfirmation\":true}],\"header\":{\"label\":\"Acoes\",\"align\":\"center\"}},\"bulk\":{\"enabled\":true,\"position\":\"toolbar\",\"actions\":[{\"id\":\"bulk-delete\",\"label\":\"Excluir selecionados\",\"icon\":\"delete\",\"action\":\"deleteSelected\",\"requiresConfirmation\":true,\"minSelections\":1}],\"floating\":{\"position\":\"bottom-right\",\"hideWhenEmpty\":true}},\"confirmations\":{\"default\":{\"title\":\"Confirmar acao\",\"message\":\"Deseja continuar?\",\"confirmText\":\"Confirmar\",\"cancelText\":\"Cancelar\"},\"specific\":{\"delete\":{\"title\":\"Excluir colaborador\",\"message\":\"Esta acao nao pode ser desfeita.\",\"confirmText\":\"Excluir\",\"cancelText\":\"Cancelar\"}}}},\"export\":{\"enabled\":true,\"formats\":[\"csv\",\"excel\"],\"general\":{\"includeHeaders\":true,\"respectFilters\":true,\"applyFormatting\":true,\"defaultFileName\":\"colaboradores\",\"includeColumns\":[\"id\",\"name\",\"email\",\"status\",\"hireDate\",\"salary\"]},\"excel\":{\"sheetName\":\"Colaboradores\",\"includeFormulas\":false,\"freezeHeaders\":true,\"autoFitColumns\":true},\"csv\":{\"delimiter\":\";\",\"escapeChar\":\"\\\"\",\"encoding\":\"utf-8\",\"includeBOM\":true}},\"messages\":{\"states\":{\"loading\":\"Carregando colaboradores...\",\"empty\":\"Nenhum colaborador encontrado.\",\"error\":\"Erro ao carregar dados.\",\"noResults\":\"Sem resultados para o filtro atual.\",\"loadingMore\":\"Carregando mais registros...\"},\"actions\":{\"confirmations\":{\"delete\":\"Excluir este colaborador?\",\"deleteMultiple\":\"Excluir os colaboradores selecionados?\",\"save\":\"Salvar alteracoes?\",\"cancel\":\"Cancelar edicao?\",\"export\":\"Exportar dados agora?\"},\"success\":{\"save\":\"Colaborador salvo com sucesso.\",\"delete\":\"Colaborador excluido.\",\"export\":\"Exportacao concluida.\"},\"errors\":{\"save\":\"Falha ao salvar.\",\"delete\":\"Falha ao excluir.\",\"export\":\"Falha ao exportar.\"}}},\"localization\":{\"locale\":\"pt-BR\",\"direction\":\"ltr\",\"dateTime\":{\"dateFormat\":\"dd/MM/yyyy\",\"timeFormat\":\"HH:mm\",\"dateTimeFormat\":\"dd/MM/yyyy HH:mm\",\"firstDayOfWeek\":1}},\"appearance\":{\"density\":\"comfortable\",\"borders\":{\"showRowBorders\":true,\"showColumnBorders\":false,\"showOuterBorder\":true,\"style\":\"solid\",\"width\":1,\"color\":\"#e0e0e0\"}}}}",
8608
9066
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8612,7 +9070,7 @@
8612
9070
  "corpusVersion": "1.0.0"
8613
9071
  },
8614
9072
  {
8615
- "chunkIndex": 44,
9073
+ "chunkIndex": 47,
8616
9074
  "chunkKind": "recipe",
8617
9075
  "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"form\",\"form\":{\"metadata\":{\"version\":\"2.0\",\"source\":\"local\",\"schemaId\":\"path:/api/employees#request\",\"schemaContext\":{\"path\":\"/api/employees\",\"operation\":\"POST\",\"schemaType\":\"request\",\"internal\":false,\"tenant\":\"default\",\"locale\":\"pt-BR\"}},\"api\":{\"saveEndpoint\":\"/api/employees\",\"loadEndpoint\":\"/api/employees/${id}\",\"saveMethod\":\"POST\",\"timeout\":15000,\"headers\":{\"X-Module\":\"HR\"},\"idField\":\"id\",\"beforeSave\":\"sanitizeEmployee\",\"afterLoad\":\"mapEmployee\"},\"behavior\":{\"confirmOnUnsavedChanges\":true,\"trackHistory\":true,\"focusFirstError\":true,\"scrollToErrors\":true,\"clearAfterSave\":false,\"reactiveValidation\":true,\"reactiveValidationDebounceMs\":200},\"messages\":{\"createRegistrySuccess\":\"Colaborador criado com sucesso.\",\"updateRegistrySuccess\":\"Colaborador atualizado com sucesso.\",\"createRegistryError\":\"Falha ao criar colaborador.\",\"updateRegistryError\":\"Falha ao atualizar colaborador.\",\"confirmations\":{\"submit\":\"Deseja salvar as alteracoes?\",\"cancel\":\"Descartar alteracoes?\",\"reset\":\"Limpar o formulario?\"},\"customActions\":{\"archive\":{\"confirmation\":\"Arquivar este colaborador?\"}},\"loading\":{\"submit\":\"Salvando...\",\"cancel\":\"Cancelando...\"}},\"hints\":{\"dataModes\":{\"create\":\"Preencha os dados para criar um novo colaborador.\",\"edit\":\"Atualize os dados e salve as alteracoes.\",\"view\":\"Visualize os dados do colaborador.\"},\"uiModes\":{\"presentation\":\"Modo apresentacao mostra somente leitura.\",\"readonly\":\"Modo leitura bloqueia edicao.\",\"disabled\":\"Campos desabilitados nao permitem interacao.\",\"visible\":\"Controle de visibilidade sem destruir controles.\"}},\"hooks\":{\"beforeSubmit\":[{\"id\":\"sanitize-employee\",\"priority\":100,\"args\":{\"trimStrings\":true}}],\"afterSubmit\":[{\"id\":\"notify-success\",\"args\":{\"messageKey\":\"employeeSaved\"}}],\"onError\":[{\"id\":\"notify-error\",\"args\":{\"messageKey\":\"employeeSaveError\"}}]},\"fieldMetadata\":[{\"name\":\"id\",\"label\":\"ID\",\"controlType\":\"numericTextBox\",\"dataType\":\"number\",\"hidden\":true,\"readOnly\":true,\"description\":\"Campo ID oculto, gerenciado pelo backend.\"},{\"name\":\"name\",\"label\":\"Nome completo\",\"controlType\":\"input\",\"dataType\":\"text\",\"placeholder\":\"Ex.: Ana Souza\",\"prefixIcon\":\"person\",\"validators\":{\"required\":true,\"minLength\":3}},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"dataType\":\"email\",\"placeholder\":\"nome@empresa.com\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"phone\",\"label\":\"Telefone\",\"controlType\":\"phone\",\"placeholder\":\"(11) 99999-0000\",\"mask\":\"(99) 99999-9999\"},{\"name\":\"status\",\"label\":\"Status\",\"controlType\":\"select\",\"options\":[{\"text\":\"Ativo\",\"value\":\"ACTIVE\"},{\"text\":\"Inativo\",\"value\":\"INACTIVE\"},{\"text\":\"Afastado\",\"value\":\"ON_LEAVE\"}],\"defaultValue\":\"ACTIVE\",\"materialDesign\":{\"appearance\":\"outline\"}},{\"name\":\"hireDate\",\"label\":\"Data de admissao\",\"controlType\":\"date\",\"dataType\":\"date\"},{\"name\":\"terminationDate\",\"label\":\"Data de desligamento\",\"controlType\":\"date\",\"conditionalDisplay\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"conditionalRequired\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]}},{\"name\":\"department\",\"label\":\"Departamento\",\"controlType\":\"select\",\"endpoint\":\"/api/departments\",\"valueField\":\"id\",\"displayField\":\"name\"},{\"name\":\"role\",\"label\":\"Cargo\",\"controlType\":\"select\",\"options\":[{\"text\":\"Analista\",\"value\":\"ANALYST\"},{\"text\":\"Coordenador\",\"value\":\"COORD\"},{\"text\":\"Gerente\",\"value\":\"MANAGER\"}]},{\"name\":\"managerId\",\"label\":\"Gestor\",\"controlType\":\"autoComplete\",\"endpoint\":\"/api/employees?role=manager\",\"valueField\":\"id\",\"displayField\":\"name\",\"filterField\":\"name\"},{\"name\":\"salary\",\"label\":\"Salario\",\"controlType\":\"currency\",\"dataType\":\"number\",\"format\":\"BRL|symbol|2\",\"validators\":{\"min\":0}},{\"name\":\"workMode\",\"label\":\"Regime\",\"controlType\":\"radio\",\"options\":[{\"text\":\"CLT\",\"value\":\"CLT\"},{\"text\":\"PJ\",\"value\":\"PJ\"},{\"text\":\"Estagio\",\"value\":\"INTERN\"}],\"defaultValue\":\"CLT\"},{\"name\":\"notes\",\"label\":\"Observacoes\",\"controlType\":\"textarea\",\"validators\":{\"maxLength\":500},\"hint\":\"Informacoes adicionais relevantes ao cadastro.\"},{\"name\":\"isActive\",\"label\":\"Ativo\",\"controlType\":\"toggle\",\"defaultValue\":true},{\"name\":\"avatar\",\"label\":\"Foto\",\"controlType\":\"upload\",\"accept\":\".png,.jpg,.jpeg\",\"multiple\":false,\"materialDesign\":{\"appearance\":\"outline\"}}],\"sections\":[{\"id\":\"basic\",\"title\":\"Dados basicos\",\"description\":\"Informacoes pessoais e status.\",\"icon\":\"person\",\"collapsible\":true,\"collapsed\":false,\"titleStyle\":\"titleMedium\",\"descriptionStyle\":\"bodyMedium\",\"rows\":[{\"id\":\"row-basic-1\",\"columns\":[{\"id\":\"col-basic-1\",\"fields\":[\"name\",\"email\"],\"span\":{\"md\":6,\"lg\":6},\"padding\":8},{\"id\":\"col-basic-2\",\"fields\":[\"status\",\"hireDate\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-basic-2\",\"columns\":[{\"id\":\"col-basic-3\",\"fields\":[\"phone\",\"managerId\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-basic-4\",\"fields\":[\"department\",\"role\"],\"span\":{\"md\":6,\"lg\":6}}]}]},{\"id\":\"employment\",\"title\":\"Contrato\",\"icon\":\"badge\",\"rows\":[{\"id\":\"row-employment-1\",\"columns\":[{\"id\":\"col-employment-1\",\"fields\":[\"salary\",\"workMode\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-employment-2\",\"fields\":[\"terminationDate\",\"notes\"],\"span\":{\"md\":6,\"lg\":6}}]}]},{\"id\":\"attachments\",\"title\":\"Arquivos\",\"collapsible\":true,\"collapsed\":true,\"rows\":[{\"id\":\"row-attachments-1\",\"columns\":[{\"id\":\"col-attachments-1\",\"fields\":[\"avatar\"],\"span\":{\"md\":12,\"lg\":12},\"align\":\"center\"}]}]}],\"actions\":{\"submit\":{\"visible\":true,\"label\":\"Salvar\",\"color\":\"primary\",\"variant\":\"raised\",\"type\":\"submit\",\"shortcut\":\"Ctrl+S\"},\"cancel\":{\"visible\":true,\"label\":\"Cancelar\",\"type\":\"button\"},\"reset\":{\"visible\":true,\"label\":\"Limpar\",\"type\":\"reset\"},\"custom\":[{\"id\":\"archive\",\"visible\":true,\"label\":\"Arquivar\",\"icon\":\"archive\",\"color\":\"warn\",\"variant\":\"stroked\",\"action\":\"archive\"}],\"position\":\"right\",\"orientation\":\"horizontal\",\"spacing\":\"normal\",\"sticky\":true,\"divider\":true,\"placement\":\"afterSections\",\"mobile\":{\"position\":\"center\",\"orientation\":\"vertical\",\"collapseToMenu\":true}},\"formRules\":[{\"id\":\"hide-salary-inactive\",\"name\":\"Ocultar salario para inativos\",\"targetType\":\"field\",\"targets\":[\"salary\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"properties\":{\"visible\":false}}},{\"id\":\"require-termination-date\",\"name\":\"Exigir data de desligamento\",\"targetType\":\"field\",\"targets\":[\"terminationDate\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"properties\":{\"required\":true,\"visible\":true}}}]}}",
8618
9076
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8622,7 +9080,7 @@
8622
9080
  "corpusVersion": "1.0.0"
8623
9081
  },
8624
9082
  {
8625
- "chunkIndex": 45,
9083
+ "chunkIndex": 48,
8626
9084
  "chunkKind": "recipe",
8627
9085
  "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"i18n\",\"i18n\":{\"crudDialog\":{\"createTitle\":\"Novo colaborador\",\"editTitle\":\"Editar colaborador\",\"viewTitle\":\"Detalhes do colaborador\",\"deleteTitle\":\"Confirmar exclusao\",\"deleteConfirm\":\"Tem certeza que deseja excluir este colaborador?\"}}}",
8628
9086
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8632,7 +9090,7 @@
8632
9090
  "corpusVersion": "1.0.0"
8633
9091
  },
8634
9092
  {
8635
- "chunkIndex": 46,
9093
+ "chunkIndex": 49,
8636
9094
  "chunkKind": "recipe",
8637
9095
  "content": "{\"_comment\":\"Variant focused on CRUD table configuration.\",\"templateMeta\":{\"variantId\":\"table\",\"variantOf\":\"praxis-crud\",\"registryKey\":\"praxis-crud\",\"tags\":[\"table\",\"crud\"],\"useWhen\":\"user asks to change table columns or behavior inside CRUD\",\"examplePrompts\":[\"adjust the columns shown in the crud table\",\"enable selection in the crud table\"]},\"resource\":{\"path\":\"/api/employees\",\"idField\":\"id\",\"endpointKey\":\"employees\"},\"table\":{\"meta\":{\"version\":\"2.0.0\",\"id\":\"employees-table\",\"name\":\"Colaboradores\",\"description\":\"Listagem de colaboradores ativos e inativos\",\"idField\":\"id\"},\"columns\":[{\"field\":\"id\",\"header\":\"ID\",\"type\":\"string\",\"width\":\"80px\",\"visible\":false},{\"field\":\"name\",\"header\":\"Nome\",\"type\":\"string\",\"sortable\":true,\"filterable\":true,\"resizable\":true,\"sticky\":\"start\"},{\"field\":\"email\",\"header\":\"Email\",\"type\":\"string\",\"sortable\":true,\"filterable\":true},{\"field\":\"status\",\"header\":\"Status\",\"type\":\"string\",\"sortable\":true,\"filterable\":true,\"valueMapping\":{\"ACTIVE\":\"Ativo\",\"INACTIVE\":\"Inativo\",\"ON_LEAVE\":\"Afastado\"},\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"statusLabel\",\"color\":\"success\",\"variant\":\"filled\"}},\"conditionalRenderers\":[{\"condition\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":\"Inativo\",\"color\":\"warn\",\"variant\":\"filled\"}},\"description\":\"Status inativo\",\"enabled\":true},{\"condition\":{\"==\":[{\"var\":\"status\"},\"ON_LEAVE\"]},\"renderer\":{\"type\":\"chip\",\"chip\":{\"text\":\"Afastado\",\"color\":\"accent\",\"variant\":\"outlined\"}},\"description\":\"Status afastado\",\"enabled\":true}]},{\"field\":\"hireDate\",\"header\":\"Admissao\",\"type\":\"date\",\"format\":\"dd/MM/yyyy\",\"sortable\":true,\"filterable\":true},{\"field\":\"salary\",\"header\":\"Salario\",\"type\":\"currency\",\"format\":\"BRL|symbol|2\",\"align\":\"right\",\"sortable\":true,\"filterable\":true}],\"toolbar\":{\"visible\":true,\"position\":\"top\",\"title\":\"Colaboradores\",\"subtitle\":\"Gerencie cadastro, status e remuneracao\",\"layout\":{\"alignment\":\"space-between\",\"showSeparator\":true},\"actions\":[{\"id\":\"create\",\"label\":\"Novo\",\"icon\":\"add\",\"type\":\"button\",\"color\":\"primary\",\"position\":\"end\",\"action\":\"create\"},{\"id\":\"export\",\"label\":\"Exportar\",\"icon\":\"download\",\"type\":\"menu\",\"position\":\"end\",\"action\":\"export\",\"children\":[{\"id\":\"export-csv\",\"label\":\"CSV\",\"icon\":\"table_view\",\"type\":\"button\",\"position\":\"end\",\"action\":\"exportCsv\"},{\"id\":\"export-excel\",\"label\":\"Excel\",\"icon\":\"grid_on\",\"type\":\"button\",\"position\":\"end\",\"action\":\"exportExcel\"}]}],\"filters\":{\"enabled\":true,\"showAdvancedButton\":true},\"settingsMenu\":{\"enabled\":true,\"options\":[{\"id\":\"density\",\"label\":\"Densidade\",\"type\":\"select\",\"options\":[\"compact\",\"comfortable\",\"spacious\"]}]}},\"behavior\":{\"pagination\":{\"enabled\":true,\"pageSize\":20,\"pageSizeOptions\":[10,20,50],\"showFirstLastButtons\":true,\"showPageNumbers\":true,\"showPageInfo\":true,\"position\":\"bottom\",\"style\":\"default\",\"strategy\":\"server\"},\"sorting\":{\"enabled\":true,\"defaultSort\":{\"column\":\"name\",\"direction\":\"asc\"},\"multiSort\":false,\"strategy\":\"server\",\"showSortIndicators\":true,\"indicatorPosition\":\"end\",\"allowClearSort\":true},\"filtering\":{\"enabled\":true,\"columnFilters\":{\"enabled\":true,\"defaultType\":\"text\",\"position\":\"header\"},\"advancedFilters\":{\"enabled\":true,\"queryBuilder\":true,\"savePresets\":true},\"strategy\":\"server\",\"debounceTime\":300},\"selection\":{\"enabled\":true,\"type\":\"multiple\",\"mode\":\"checkbox\",\"allowSelectAll\":true,\"checkboxPosition\":\"start\",\"persistSelection\":false,\"persistOnDataUpdate\":false},\"interaction\":{\"rowClick\":{\"enabled\":true,\"action\":\"view\"},\"rowDoubleClick\":{\"enabled\":true,\"action\":\"edit\"},\"hover\":{\"enabled\":true,\"highlightRow\":true,\"showActionsOnHover\":true},\"keyboard\":{\"enabled\":true}}},\"actions\":{\"row\":{\"enabled\":true,\"position\":\"end\",\"display\":\"icons\",\"trigger\":\"hover\",\"width\":\"140px\",\"actions\":[{\"id\":\"view\",\"label\":\"Ver\",\"icon\":\"visibility\",\"action\":\"view\"},{\"id\":\"edit\",\"label\":\"Editar\",\"icon\":\"edit\",\"action\":\"edit\"},{\"id\":\"delete\",\"label\":\"Excluir\",\"icon\":\"delete\",\"action\":\"delete\",\"requiresConfirmation\":true}],\"header\":{\"label\":\"Acoes\",\"align\":\"center\"}},\"bulk\":{\"enabled\":true,\"position\":\"toolbar\",\"actions\":[{\"id\":\"bulk-delete\",\"label\":\"Excluir selecionados\",\"icon\":\"delete\",\"action\":\"deleteSelected\",\"requiresConfirmation\":true,\"minSelections\":1}],\"floating\":{\"position\":\"bottom-right\",\"hideWhenEmpty\":true}},\"confirmations\":{\"default\":{\"title\":\"Confirmar acao\",\"message\":\"Deseja continuar?\",\"confirmText\":\"Confirmar\",\"cancelText\":\"Cancelar\"},\"specific\":{\"delete\":{\"title\":\"Excluir colaborador\",\"message\":\"Esta acao nao pode ser desfeita.\",\"confirmText\":\"Excluir\",\"cancelText\":\"Cancelar\"}}}},\"export\":{\"enabled\":true,\"formats\":[\"csv\",\"excel\"],\"general\":{\"includeHeaders\":true,\"respectFilters\":true,\"applyFormatting\":true,\"defaultFileName\":\"colaboradores\",\"includeColumns\":[\"id\",\"name\",\"email\",\"status\",\"hireDate\",\"salary\"]},\"excel\":{\"sheetName\":\"Colaboradores\",\"includeFormulas\":false,\"freezeHeaders\":true,\"autoFitColumns\":true},\"csv\":{\"delimiter\":\";\",\"escapeChar\":\"\\\"\",\"encoding\":\"utf-8\",\"includeBOM\":true}},\"messages\":{\"states\":{\"loading\":\"Carregando colaboradores...\",\"empty\":\"Nenhum colaborador encontrado.\",\"error\":\"Erro ao carregar dados.\",\"noResults\":\"Sem resultados para o filtro atual.\",\"loadingMore\":\"Carregando mais registros...\"},\"actions\":{\"confirmations\":{\"delete\":\"Excluir este colaborador?\",\"deleteMultiple\":\"Excluir os colaboradores selecionados?\",\"save\":\"Salvar alteracoes?\",\"cancel\":\"Cancelar edicao?\",\"export\":\"Exportar dados agora?\"},\"success\":{\"save\":\"Colaborador salvo com sucesso.\",\"delete\":\"Colaborador excluido.\",\"export\":\"Exportacao concluida.\"},\"errors\":{\"save\":\"Falha ao salvar.\",\"delete\":\"Falha ao excluir.\",\"export\":\"Falha ao exportar.\"}}},\"localization\":{\"locale\":\"pt-BR\",\"direction\":\"ltr\",\"dateTime\":{\"dateFormat\":\"dd/MM/yyyy\",\"timeFormat\":\"HH:mm\",\"dateTimeFormat\":\"dd/MM/yyyy HH:mm\",\"firstDayOfWeek\":1}},\"appearance\":{\"density\":\"comfortable\",\"borders\":{\"showRowBorders\":true,\"showColumnBorders\":false,\"showOuterBorder\":true,\"style\":\"solid\",\"width\":1,\"color\":\"#e0e0e0\"}}}}",
8638
9096
  "sourcePointer": "examples/ai-recipes/praxis-crud.table.json",
@@ -11490,6 +11948,185 @@
11490
11948
  "responsive em card"
11491
11949
  ]
11492
11950
  },
11951
+ {
11952
+ "path": "fieldMetadata[].presentation.visualization.scaleScope",
11953
+ "category": "layout",
11954
+ "valueKind": "enum",
11955
+ "allowedValues": [
11956
+ "row",
11957
+ "page"
11958
+ ],
11959
+ "description": "Escopo de normalizacao de escala para series e valores em colecoes: row (local por linha) ou page (sincronizado na pagina visivel).",
11960
+ "intentExamples": [
11961
+ "sincronizar escala de sparklines na pagina",
11962
+ "comparar amplitude entre linhas"
11963
+ ]
11964
+ },
11965
+ {
11966
+ "path": "fieldMetadata[].presentation.visualization.tone",
11967
+ "category": "appearance",
11968
+ "valueKind": "enum",
11969
+ "allowedValues": [
11970
+ "neutral",
11971
+ "info",
11972
+ "success",
11973
+ "warning",
11974
+ "danger",
11975
+ "critical"
11976
+ ],
11977
+ "description": "Tom semantico estatico da micro visualizacao.",
11978
+ "intentExamples": [
11979
+ "neutral",
11980
+ "success",
11981
+ "warning",
11982
+ "danger",
11983
+ "critical"
11984
+ ]
11985
+ },
11986
+ {
11987
+ "path": "fieldMetadata[].presentation.visualization.toneExpr",
11988
+ "category": "appearance",
11989
+ "valueKind": "object",
11990
+ "description": "Expressao Json Logic ou caminho row.<campo> para resolver dinamicamente o tom semantico da micro visualizacao.",
11991
+ "safetyNotes": "Deve retornar apenas um dos tons permitidos em presentationVisualizationTone."
11992
+ },
11993
+ {
11994
+ "path": "fieldMetadata[].presentation.visualization.valueExpr",
11995
+ "category": "behavior",
11996
+ "valueKind": "object",
11997
+ "description": "Caminho row.<campo> ou expressao Json Logic para obter o valor principal da micro visualizacao.",
11998
+ "intentExamples": [
11999
+ "row.slaValue",
12000
+ "row.progresso"
12001
+ ]
12002
+ },
12003
+ {
12004
+ "path": "fieldMetadata[].presentation.visualization.valueSuffix",
12005
+ "category": "appearance",
12006
+ "valueKind": "string",
12007
+ "description": "Sufixo de unidade anexado ao valor numerico formatado (ex: \"%\", \" pts\", \" ms\", \" d\").",
12008
+ "intentExamples": [
12009
+ "mostrar % no bullet",
12010
+ "adicionar sufixo pts no radial"
12011
+ ]
12012
+ },
12013
+ {
12014
+ "path": "fieldMetadata[].presentation.visualization.compactValue",
12015
+ "category": "appearance",
12016
+ "valueKind": "boolean",
12017
+ "description": "Formata valores numericos em notacao compacta (ex: 1.2M, 45.3K) para celulas densas.",
12018
+ "intentExamples": [
12019
+ "compactar valores financeiros grandes",
12020
+ "mostrar 1.2M em comparison"
12021
+ ]
12022
+ },
12023
+ {
12024
+ "path": "fieldMetadata[].presentation.visualization.min",
12025
+ "category": "behavior",
12026
+ "valueKind": "number",
12027
+ "description": "Limite minimo explicito da escala numerica."
12028
+ },
12029
+ {
12030
+ "path": "fieldMetadata[].presentation.visualization.max",
12031
+ "category": "behavior",
12032
+ "valueKind": "number",
12033
+ "description": "Limite maximo explicito da escala numerica."
12034
+ },
12035
+ {
12036
+ "path": "fieldMetadata[].presentation.visualization.total",
12037
+ "category": "behavior",
12038
+ "valueKind": "number",
12039
+ "description": "Total explicito para proporcionalidade em stackedBar ou radial."
12040
+ },
12041
+ {
12042
+ "path": "fieldMetadata[].presentation.visualization.target",
12043
+ "category": "behavior",
12044
+ "valueKind": "number",
12045
+ "description": "Meta fixa para comparacao em bullet."
12046
+ },
12047
+ {
12048
+ "path": "fieldMetadata[].presentation.visualization.targetExpr",
12049
+ "category": "behavior",
12050
+ "valueKind": "object",
12051
+ "description": "Caminho row.<campo> ou expressao Json Logic para obter a meta por linha em bullet.",
12052
+ "intentExamples": [
12053
+ "row.metaSla",
12054
+ "row.target"
12055
+ ]
12056
+ },
12057
+ {
12058
+ "path": "fieldMetadata[].presentation.visualization.baseline",
12059
+ "category": "behavior",
12060
+ "valueKind": "number",
12061
+ "description": "Valor de referencia fixo para comparison ou delta."
12062
+ },
12063
+ {
12064
+ "path": "fieldMetadata[].presentation.visualization.baselineExpr",
12065
+ "category": "behavior",
12066
+ "valueKind": "object",
12067
+ "description": "Caminho row.<campo> ou expressao Json Logic para obter o valor de referencia (baseline) por linha em comparison ou delta.",
12068
+ "intentExamples": [
12069
+ "row.orcamentoPrevisto",
12070
+ "row.indenizacoesTotal"
12071
+ ]
12072
+ },
12073
+ {
12074
+ "path": "fieldMetadata[].presentation.visualization.pointsExpr",
12075
+ "category": "behavior",
12076
+ "valueKind": "object",
12077
+ "description": "Caminho row.<campo> ou expressao Json Logic para serie de pontos em line, area ou column.",
12078
+ "intentExamples": [
12079
+ "row.trend",
12080
+ "row.historicoMensal"
12081
+ ]
12082
+ },
12083
+ {
12084
+ "path": "fieldMetadata[].presentation.visualization.segmentsExpr",
12085
+ "category": "behavior",
12086
+ "valueKind": "object",
12087
+ "description": "Caminho row.<campo> ou expressao Json Logic para lista de segmentos em stackedBar.",
12088
+ "intentExamples": [
12089
+ "row.capacitySegments",
12090
+ "row.distribuicao"
12091
+ ]
12092
+ },
12093
+ {
12094
+ "path": "fieldMetadata[].presentation.visualization.itemsExpr",
12095
+ "category": "behavior",
12096
+ "valueKind": "object",
12097
+ "description": "Caminho row.<campo> ou expressao Json Logic para lista de etapas em processFlow.",
12098
+ "intentExamples": [
12099
+ "row.flowSteps",
12100
+ "row.etapasAprovacao"
12101
+ ]
12102
+ },
12103
+ {
12104
+ "path": "fieldMetadata[].presentation.visualization.thresholds",
12105
+ "category": "appearance",
12106
+ "valueKind": "array",
12107
+ "description": "Faixas e limiares semanticos declarativos ({ value, min, max, tone, label }) para coloracao automatica e faixas qualitativas de bullet.",
12108
+ "intentExamples": [
12109
+ "[{ \"value\": 0, \"tone\": \"danger\" }, { \"value\": 60, \"tone\": \"warning\" }, { \"value\": 85, \"tone\": \"success\" }]"
12110
+ ]
12111
+ },
12112
+ {
12113
+ "path": "fieldMetadata[].presentation.visualization.stepLabelLineClamp",
12114
+ "category": "layout",
12115
+ "valueKind": "number",
12116
+ "description": "Numero maximo de linhas (1 ou 2) para rotulos de etapas em processFlow."
12117
+ },
12118
+ {
12119
+ "path": "fieldMetadata[].presentation.visualization.ariaLabel",
12120
+ "category": "accessibility",
12121
+ "valueKind": "string",
12122
+ "description": "Rotulo acessivel explicito da micro visualizacao."
12123
+ },
12124
+ {
12125
+ "path": "fieldMetadata[].presentation.visualization.ariaLabelExpr",
12126
+ "category": "accessibility",
12127
+ "valueKind": "object",
12128
+ "description": "Caminho row.<campo> ou expressao Json Logic para compor o rotulo acessivel por linha."
12129
+ },
11493
12130
  {
11494
12131
  "path": "fieldMetadata[].presentation.visualization.fallbackText",
11495
12132
  "category": "accessibility",
@@ -11497,6 +12134,12 @@
11497
12134
  "description": "Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.",
11498
12135
  "safetyNotes": "Deve explicar valor, unidade, meta, tendencia ou estado quando aplicavel."
11499
12136
  },
12137
+ {
12138
+ "path": "fieldMetadata[].presentation.visualization.fallbackTextExpr",
12139
+ "category": "accessibility",
12140
+ "valueKind": "object",
12141
+ "description": "Caminho row.<campo> ou expressao Json Logic para gerar o fallback textual dinamico por linha."
12142
+ },
11500
12143
  {
11501
12144
  "path": "fieldMetadata[].presentationRules",
11502
12145
  "category": "appearance",
@@ -11545,6 +12188,30 @@
11545
12188
  "exibir como porcentagem"
11546
12189
  ]
11547
12190
  },
12191
+ {
12192
+ "path": "fieldMetadata[].inlineVisualStyle",
12193
+ "category": "appearance",
12194
+ "valueKind": "enum",
12195
+ "allowedValues": [
12196
+ "compact",
12197
+ "graphic"
12198
+ ],
12199
+ "description": "Estilo visual para controles numericos percentuais inline (compact: pilula liquida com micro-anel e popover; graphic: card expandido com donut, trilho graduado e presets).",
12200
+ "intentExamples": [
12201
+ "usar percentual compacto na barra",
12202
+ "exibir card grafico de percentual"
12203
+ ]
12204
+ },
12205
+ {
12206
+ "path": "fieldMetadata[].percentPresets",
12207
+ "category": "data",
12208
+ "valueKind": "array",
12209
+ "description": "Lista de percentuais rapidos exibidos nos botoes de preset do Percent Studio (ex.: [0, 25, 50, 75, 100]).",
12210
+ "intentExamples": [
12211
+ "atalhos de percentual 10, 25, 50 e 100%",
12212
+ "definir presets de porcentagem"
12213
+ ]
12214
+ },
11548
12215
  {
11549
12216
  "path": "fieldMetadata[].validators",
11550
12217
  "category": "validation",
@@ -13210,9 +13877,9 @@
13210
13877
  {
13211
13878
  "chunkIndex": 8,
13212
13879
  "chunkKind": "capabilities",
13213
- "content": "Schema Capability:\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.prefix\n Category: appearance\n Kind: string\n Description: Prefixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.suffix\n Category: appearance\n Kind: string\n Description: Sufixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.fallbackText\n Category: accessibility\n Kind: string\n Description: Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules\n Category: appearance\n Kind: array\n Description: Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].when\n Category: behavior\n Kind: object\n Description: Guarda Json Logic avaliada contra o contexto de apresentacao do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n\nSchema Capability:\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n\nSchema Capability:\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n\nSchema Capability:\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.",
13880
+ "content": "Schema Capability:\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.prefix\n Category: appearance\n Kind: string\n Description: Prefixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.suffix\n Category: appearance\n Kind: string\n Description: Sufixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.scaleScope\n Category: layout\n Kind: enum\n Description: Escopo de normalizacao de escala para series e valores em colecoes: row (local por linha) ou page (sincronizado na pagina visivel).\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico estatico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.toneExpr\n Category: appearance\n Kind: object\n Description: Expressao Json Logic ou caminho row.<campo> para resolver dinamicamente o tom semantico da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.valueExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para obter o valor principal da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.valueSuffix\n Category: appearance\n Kind: string\n Description: Sufixo de unidade anexado ao valor numerico formatado (ex: \"%\", \" pts\", \" ms\", \" d\").\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.compactValue\n Category: appearance\n Kind: boolean\n Description: Formata valores numericos em notacao compacta (ex: 1.2M, 45.3K) para celulas densas.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.min\n Category: behavior\n Kind: number\n Description: Limite minimo explicito da escala numerica.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.max\n Category: behavior\n Kind: number\n Description: Limite maximo explicito da escala numerica.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.total\n Category: behavior\n Kind: number\n Description: Total explicito para proporcionalidade em stackedBar ou radial.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.target\n Category: behavior\n Kind: number\n Description: Meta fixa para comparacao em bullet.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.targetExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para obter a meta por linha em bullet.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.baseline\n Category: behavior\n Kind: number\n Description: Valor de referencia fixo para comparison ou delta.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.baselineExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para obter o valor de referencia (baseline) por linha em comparison ou delta.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.pointsExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para serie de pontos em line, area ou column.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.segmentsExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para lista de segmentos em stackedBar.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.itemsExpr\n Category: behavior\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para lista de etapas em processFlow.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.thresholds\n Category: appearance\n Kind: array\n Description: Faixas e limiares semanticos declarativos ({ value, min, max, tone, label }) para coloracao automatica e faixas qualitativas de bullet.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.stepLabelLineClamp\n Category: layout\n Kind: number\n Description: Numero maximo de linhas (1 ou 2) para rotulos de etapas em processFlow.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.ariaLabel\n Category: accessibility\n Kind: string\n Description: Rotulo acessivel explicito da micro visualizacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.ariaLabelExpr\n Category: accessibility\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para compor o rotulo acessivel por linha.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.fallbackText\n Category: accessibility\n Kind: string\n Description: Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.",
13214
13881
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
13215
- "contentHash": "680baee6a38106f22c4710309b6d65ef7e59d1ee08bb65cca97f004070a99d0c",
13882
+ "contentHash": "dc6be0dc67a901095196573bc7a8f81c4cae31110aa85265ef4ff6e1646b940b",
13216
13883
  "sourceKind": "component_definition",
13217
13884
  "sourceId": "praxis-dynamic-form-dialog-host",
13218
13885
  "corpusVersion": "1.0.0"
@@ -13220,9 +13887,9 @@
13220
13887
  {
13221
13888
  "chunkIndex": 9,
13222
13889
  "chunkKind": "capabilities",
13223
- "content": "Schema Capability:\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n\nSchema Capability:\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n\nSchema Capability:\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n\nSchema Capability:\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n\nSchema Capability:\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n\nSchema Capability:\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n\nSchema Capability:\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n\nSchema Capability:\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n\nSchema Capability:\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess\n Category: behavior\n Kind: object\n Description: Politica canonica de UX para visibilidade/edicao por authorities publicadas pelo backend.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.visibleForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem ver o campo no runtime quando a UX tiver claims explicitas.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.editableForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem editar o campo no runtime quando a UX tiver claims explicitas.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.reason\n Category: misc\n Kind: string\n Description: Justificativa explicativa/auditavel da politica de acesso do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n\nSchema Capability:\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.",
13890
+ "content": "Schema Capability:\n - Path: fieldMetadata[].presentation.visualization.fallbackTextExpr\n Category: accessibility\n Kind: object\n Description: Caminho row.<campo> ou expressao Json Logic para gerar o fallback textual dinamico por linha.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules\n Category: appearance\n Kind: array\n Description: Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].when\n Category: behavior\n Kind: object\n Description: Guarda Json Logic avaliada contra o contexto de apresentacao do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n\nSchema Capability:\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n\nSchema Capability:\n - Path: fieldMetadata[].inlineVisualStyle\n Category: appearance\n Kind: enum\n Description: Estilo visual para controles numericos percentuais inline (compact: pilula liquida com micro-anel e popover; graphic: card expandido com donut, trilho graduado e presets).\n\nSchema Capability:\n - Path: fieldMetadata[].percentPresets\n Category: data\n Kind: array\n Description: Lista de percentuais rapidos exibidos nos botoes de preset do Percent Studio (ex.: [0, 25, 50, 75, 100]).\n\nSchema Capability:\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n\nSchema Capability:\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).",
13224
13891
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
13225
- "contentHash": "02f3921c10fb0dd88775888b7143c2cad0a14ccd228d35ea95cdb587a28b3c3f",
13892
+ "contentHash": "1e418f6ed02cbfa86ec339516bc55adf540acfabcf2fa04fda54ccf2e15c1843",
13226
13893
  "sourceKind": "component_definition",
13227
13894
  "sourceId": "praxis-dynamic-form-dialog-host",
13228
13895
  "corpusVersion": "1.0.0"
@@ -13230,9 +13897,9 @@
13230
13897
  {
13231
13898
  "chunkIndex": 10,
13232
13899
  "chunkKind": "capabilities",
13233
- "content": "Schema Capability:\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n\nSchema Capability:\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n\nSchema Capability:\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n\nSchema Capability:\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n\nSchema Capability:\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n\nSchema Capability:\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n\nSchema Capability:\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n\nSchema Capability:\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n\nSchema Capability:\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n\nComponent Capability:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n\nComponent Capability:\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n\nComponent Capability:\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n\nComponent Capability:\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n\nComponent Capability:\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n\nComponent Capability:\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\n\nComponent Capability:\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n\nComponent Capability:\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n\nComponent Capability:\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n\nComponent Capability:\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n\nComponent Capability:\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n\nComponent Capability:\n - Path: inputs.submitIdempotencyKey\n Category: inputs\n Kind: string\n Description: Identidade estavel da tentativa de comando, materializada a partir da politica execution da action.\n\nComponent Capability:\n - Path: inputs.submitCorrelationId\n Category: inputs\n Kind: string\n Description: Identificador de correlacao governado para rastreabilidade ponta a ponta do comando.\n\nComponent Capability:\n - Path: inputs.submitResourceVersion\n Category: inputs\n Kind: string\n Description: Versao persistida esperada, transportada como If-Match quando exigida pela action.\n\nComponent Capability:\n - Path: inputs.submitResourceVersionTargetResourceKey\n Category: inputs\n Kind: string\n Description: Resource key canônico materializado pela action para resolver o ETag de outro agregado no momento do submit.\n\nComponent Capability:\n - Path: inputs.submitResourceVersionTargetIdField\n Category: inputs\n Kind: string\n Description: Campo exato do request que identifica o agregado cujo ETag governa a action.\n\nComponent Capability:\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n\nComponent Capability:\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n\nComponent Capability:\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n\nComponent Capability:\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n\nComponent Capability:\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n\nComponent Capability:\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n\nComponent Capability:\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n\nComponent Capability:\n - Path: inputs.configPersistenceStrategy\n Category: inputs\n Kind: enum\n Description: Define se preferências locais persistidas ou o contrato explícito do host governam a materialização corrente.\n\nComponent Capability:\n - Path: inputs.layoutPolicy\n Category: inputs\n Kind: object\n Description: Politica opt-in para materializar layout diretamente do schema atual sem depender de FormConfig.sections authoradas.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.preset\n Category: inputs\n Kind: enum\n Description: Preset de layout schema-driven. compactPresentation cobre detalhe read-only; groupedCommand cobre create/edit.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.persistence\n Category: inputs\n Kind: enum\n Description: Define se sections geradas sao transient ou podem virar layout authorado apos detach explicito.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.orphanFieldExpansion\n Category: inputs\n Kind: enum\n Description: Define como uma linha groupedCommand com um unico campo usa o espaco restante. O default medium-and-wide expande spans 6 ou 8 e preserva campos compactos.",
13900
+ "content": "Schema Capability:\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n\nSchema Capability:\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n\nSchema Capability:\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n\nSchema Capability:\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n\nSchema Capability:\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n\nSchema Capability:\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n\nSchema Capability:\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n\nSchema Capability:\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n\nSchema Capability:\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess\n Category: behavior\n Kind: object\n Description: Politica canonica de UX para visibilidade/edicao por authorities publicadas pelo backend.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.visibleForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem ver o campo no runtime quando a UX tiver claims explicitas.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.editableForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem editar o campo no runtime quando a UX tiver claims explicitas.\n\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.reason\n Category: misc\n Kind: string\n Description: Justificativa explicativa/auditavel da politica de acesso do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n\nSchema Capability:\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n\nSchema Capability:\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n\nSchema Capability:\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n\nSchema Capability:\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n\nSchema Capability:\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n\nSchema Capability:\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n\nSchema Capability:\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n\nSchema Capability:\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n\nSchema Capability:\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n\nSchema Capability:\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n\nComponent Capability:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n\nComponent Capability:\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n\nComponent Capability:\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n\nComponent Capability:\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n\nComponent Capability:\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n\nComponent Capability:\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).",
13234
13901
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
13235
- "contentHash": "26b2dfdc858e1b0af8adbd4557dec1561120af335ab33688421d1dda98a4281e",
13902
+ "contentHash": "f5e8c17c1a6e0f3ab98cc132d55ffcf4067ebed9ff5d23daf3d63dbc9072f4ca",
13236
13903
  "sourceKind": "component_definition",
13237
13904
  "sourceId": "praxis-dynamic-form-dialog-host",
13238
13905
  "corpusVersion": "1.0.0"
@@ -13240,9 +13907,9 @@
13240
13907
  {
13241
13908
  "chunkIndex": 11,
13242
13909
  "chunkKind": "capabilities",
13243
- "content": "Component Capability:\n - Path: inputs.layoutPolicy.groupedCommand.contextFields\n Category: inputs\n Kind: array\n Description: Campos canônicos do request cujo valor vem do contexto da surface. Eles permanecem no FormGroup e no payload, sem renderizar controles redundantes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.partialRowStrategy\n Category: inputs\n Kind: enum\n Description: Define se cada linha visual parcial, depois de resolver visibilidade responsiva, CSS order e wrap, preserva os spans canônicos ou redistribui apenas campos compatíveis para completar 12 colunas no breakpoint atual.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n\nComponent Capability:\n - Path: inputs.fieldIconPolicy\n Category: inputs\n Kind: enum\n Description: Controla se icones prefix/suffix dos metadados aparecem em todos os modos, apenas apresentacao, ou nunca.\n\nComponent Capability:\n - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n\nComponent Capability:\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n\nComponent Capability:\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n\nComponent Capability:\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n\nComponent Capability:\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n\nComponent Capability:\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n\nComponent Capability:\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n\nComponent Capability:\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n\nComponent Capability:\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n\nComponent Capability:\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n\nComponent Capability:\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n\nComponent Capability:\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n\nComponent Capability:\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n\nComponent Capability:\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n\nComponent Capability:\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n\nComponent Capability:\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n\nComponent Capability:\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n\nComponent Capability:\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n\nComponent Capability:\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n\nComponent Capability:\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n\nComponent Capability:\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n\nComponent Capability:\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.",
13910
+ "content": "Component Capability:\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n\nComponent Capability:\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n\nComponent Capability:\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n\nComponent Capability:\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n\nComponent Capability:\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n\nComponent Capability:\n - Path: inputs.submitIdempotencyKey\n Category: inputs\n Kind: string\n Description: Identidade estavel da tentativa de comando, materializada a partir da politica execution da action.\n\nComponent Capability:\n - Path: inputs.submitCorrelationId\n Category: inputs\n Kind: string\n Description: Identificador de correlacao governado para rastreabilidade ponta a ponta do comando.\n\nComponent Capability:\n - Path: inputs.submitResourceVersion\n Category: inputs\n Kind: string\n Description: Versao persistida esperada, transportada como If-Match quando exigida pela action.\n\nComponent Capability:\n - Path: inputs.submitResourceVersionTargetResourceKey\n Category: inputs\n Kind: string\n Description: Resource key canônico materializado pela action para resolver o ETag de outro agregado no momento do submit.\n\nComponent Capability:\n - Path: inputs.submitResourceVersionTargetIdField\n Category: inputs\n Kind: string\n Description: Campo exato do request que identifica o agregado cujo ETag governa a action.\n\nComponent Capability:\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n\nComponent Capability:\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n\nComponent Capability:\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n\nComponent Capability:\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n\nComponent Capability:\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n\nComponent Capability:\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n\nComponent Capability:\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n\nComponent Capability:\n - Path: inputs.configPersistenceStrategy\n Category: inputs\n Kind: enum\n Description: Define se preferências locais persistidas ou o contrato explícito do host governam a materialização corrente.\n\nComponent Capability:\n - Path: inputs.layoutPolicy\n Category: inputs\n Kind: object\n Description: Politica opt-in para materializar layout diretamente do schema atual sem depender de FormConfig.sections authoradas.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.preset\n Category: inputs\n Kind: enum\n Description: Preset de layout schema-driven. compactPresentation cobre detalhe read-only; groupedCommand cobre create/edit.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.persistence\n Category: inputs\n Kind: enum\n Description: Define se sections geradas sao transient ou podem virar layout authorado apos detach explicito.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.orphanFieldExpansion\n Category: inputs\n Kind: enum\n Description: Define como uma linha groupedCommand com um unico campo usa o espaco restante. O default medium-and-wide expande spans 6 ou 8 e preserva campos compactos.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.contextFields\n Category: inputs\n Kind: array\n Description: Campos canônicos do request cujo valor vem do contexto da surface. Eles permanecem no FormGroup e no payload, sem renderizar controles redundantes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.partialRowStrategy\n Category: inputs\n Kind: enum\n Description: Define se cada linha visual parcial, depois de resolver visibilidade responsiva, CSS order e wrap, preserva os spans canônicos ou redistribui apenas campos compatíveis para completar 12 colunas no breakpoint atual.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.",
13244
13911
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
13245
- "contentHash": "d8a5bd44a76042ef92898e9140289bc09495b4ae07573b497e95c9abdc1ab4a7",
13912
+ "contentHash": "fb0074203e0a6e14fec64b7a21f0d85f815714122bb49a18404c5e5c64904c4c",
13246
13913
  "sourceKind": "component_definition",
13247
13914
  "sourceId": "praxis-dynamic-form-dialog-host",
13248
13915
  "corpusVersion": "1.0.0"
@@ -13250,15 +13917,25 @@
13250
13917
  {
13251
13918
  "chunkIndex": 12,
13252
13919
  "chunkKind": "capabilities",
13253
- "content": "Component Capability:\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n\nComponent Capability:\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n\nComponent Capability:\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n\nComponent Capability:\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n\nComponent Capability:\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n\nComponent Capability:\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n\nComponent Capability:\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n\nComponent Capability:\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n\nComponent Capability:\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n\nComponent Capability:\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n\nComponent Capability:\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n\nComponent Capability:\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n\nComponent Capability:\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n\nComponent Capability:\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n\nComponent Capability:\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n\nComponent Capability:\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n\nComponent Capability:\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\n\nCapability Note:\n - Este catalogo descreve inputs e outputs do componente.\n\nCapability Note:\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n\nCapability Note:\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n\nCapability Note:\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n\nCapability Note:\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n\nCapability Note:\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.",
13920
+ "content": "Component Capability:\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n\nComponent Capability:\n - Path: inputs.fieldIconPolicy\n Category: inputs\n Kind: enum\n Description: Controla se icones prefix/suffix dos metadados aparecem em todos os modos, apenas apresentacao, ou nunca.\n\nComponent Capability:\n - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n\nComponent Capability:\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n\nComponent Capability:\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n\nComponent Capability:\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n\nComponent Capability:\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n\nComponent Capability:\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n\nComponent Capability:\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n\nComponent Capability:\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n\nComponent Capability:\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n\nComponent Capability:\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n\nComponent Capability:\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n\nComponent Capability:\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n\nComponent Capability:\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n\nComponent Capability:\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n\nComponent Capability:\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n\nComponent Capability:\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n\nComponent Capability:\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n\nComponent Capability:\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n\nComponent Capability:\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n\nComponent Capability:\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n\nComponent Capability:\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n\nComponent Capability:\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n\nComponent Capability:\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n\nComponent Capability:\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n\nComponent Capability:\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n\nComponent Capability:\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n\nComponent Capability:\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n\nComponent Capability:\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n\nComponent Capability:\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n\nComponent Capability:\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n\nComponent Capability:\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.",
13254
13921
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
13255
- "contentHash": "8cde02bbb0100a17feb34ecf1e03642b852a82d237170763ad456693ee7b8789",
13922
+ "contentHash": "581cd896c206465873181d72b074d69d2bacefd3bae0bca8cc3db46a378af5d3",
13256
13923
  "sourceKind": "component_definition",
13257
13924
  "sourceId": "praxis-dynamic-form-dialog-host",
13258
13925
  "corpusVersion": "1.0.0"
13259
13926
  },
13260
13927
  {
13261
13928
  "chunkIndex": 13,
13929
+ "chunkKind": "capabilities",
13930
+ "content": "Component Capability:\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n\nComponent Capability:\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n\nComponent Capability:\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n\nComponent Capability:\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n\nComponent Capability:\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n\nComponent Capability:\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n\nComponent Capability:\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\n\nCapability Note:\n - Este catalogo descreve inputs e outputs do componente.\n\nCapability Note:\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n\nCapability Note:\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n\nCapability Note:\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n\nCapability Note:\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n\nCapability Note:\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.",
13931
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
13932
+ "contentHash": "2ce7f5421defeaee7239892584b36760cd38d627750678d49068eaee9ecfd09c",
13933
+ "sourceKind": "component_definition",
13934
+ "sourceId": "praxis-dynamic-form-dialog-host",
13935
+ "corpusVersion": "1.0.0"
13936
+ },
13937
+ {
13938
+ "chunkIndex": 14,
13262
13939
  "chunkKind": "context_pack",
13263
13940
  "content": "{\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{},\"actionCatalog\":[{\"id\":\"inputs.formId.set\",\"intentExamples\":[\"form id\",\"formulario\",\"identificador\"],\"patchTemplate\":{\"inputs\":{\"formId\":\"{{value}}\"}}},{\"id\":\"inputs.resourcePath.set\",\"intentExamples\":[\"resource path\",\"endpoint\",\"api\"],\"patchTemplate\":{\"inputs\":{\"resourcePath\":\"{{value}}\"}}},{\"id\":\"inputs.mode.set\",\"intentExamples\":[\"modo\",\"mode\",\"create\",\"edit\",\"view\"],\"patchTemplate\":{\"inputs\":{\"mode\":\"{{value}}\"}}},{\"id\":\"inputs.schemaSource.set\",\"intentExamples\":[\"schema source\",\"schema\",\"resource\",\"filter\"],\"patchTemplate\":{\"inputs\":{\"schemaSource\":\"{{value}}\"}}},{\"id\":\"inputs.layoutPolicy.schemaDetail\",\"intentExamples\":[\"layout schema detail\",\"detalhe agrupado\",\"readonly agrupado\"],\"patchTemplate\":{\"inputs\":{\"layoutPolicy\":{\"source\":\"schema\",\"intent\":\"detail\",\"preset\":\"compactPresentation\",\"lifecycle\":\"live\",\"persistence\":\"transient\",\"schemaOperation\":\"detail\",\"schemaType\":\"response\"}}}},{\"id\":\"inputs.enableCustomization.enable\",\"intentExamples\":[\"enable edit\",\"modo edicao\",\"edit layout\"],\"patchTemplate\":{\"inputs\":{\"enableCustomization\":true}}},{\"id\":\"inputs.enableCustomization.disable\",\"intentExamples\":[\"disable edit\",\"somente leitura\",\"no edit\"],\"patchTemplate\":{\"inputs\":{\"enableCustomization\":false}}}],\"fieldResolvers\":{},\"hints\":[\"Dialog host: patches operate over inputs.*.\",\"Use mode=create|edit|view and schemaSource=resource|filter.\"]}}",
13264
13941
  "sourcePointer": "projects/praxis-crud/src/lib/ai/dynamic-form-dialog-host-context-pack.ts",