@praxisui/crud 10.0.0-rc.19 → 10.0.0-rc.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-10-15T00:20:34.117Z",
3
+ "generatedAt": "2026-10-15T04:35:19.773Z",
4
4
  "packageName": "@praxisui/crud",
5
- "packageVersion": "10.0.0-rc.19",
5
+ "packageVersion": "10.0.0-rc.21",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 2,
@@ -5828,6 +5828,105 @@
5828
5828
  },
5829
5829
  "filterCriteria": {
5830
5830
  "type": "object"
5831
+ },
5832
+ "kpiBand": {
5833
+ "type": "object",
5834
+ "properties": {
5835
+ "enabled": {
5836
+ "type": "boolean"
5837
+ },
5838
+ "cards": {
5839
+ "type": "array",
5840
+ "items": {
5841
+ "type": "object",
5842
+ "required": [
5843
+ "label",
5844
+ "value"
5845
+ ],
5846
+ "properties": {
5847
+ "id": {
5848
+ "type": "string"
5849
+ },
5850
+ "label": {
5851
+ "type": "string"
5852
+ },
5853
+ "value": {
5854
+ "type": [
5855
+ "string",
5856
+ "number"
5857
+ ]
5858
+ },
5859
+ "caption": {
5860
+ "type": "string"
5861
+ },
5862
+ "icon": {
5863
+ "type": "string"
5864
+ },
5865
+ "variant": {
5866
+ "enum": [
5867
+ "default",
5868
+ "primary",
5869
+ "success",
5870
+ "warning",
5871
+ "danger"
5872
+ ]
5873
+ },
5874
+ "filter": {
5875
+ "type": "object"
5876
+ }
5877
+ }
5878
+ }
5879
+ }
5880
+ }
5881
+ },
5882
+ "filterBar": {
5883
+ "type": "object",
5884
+ "properties": {
5885
+ "inlineFields": {
5886
+ "type": "array",
5887
+ "items": {
5888
+ "type": "string"
5889
+ }
5890
+ },
5891
+ "quickFilters": {
5892
+ "oneOf": [
5893
+ {
5894
+ "const": false
5895
+ },
5896
+ {
5897
+ "type": "array",
5898
+ "items": {
5899
+ "type": "object",
5900
+ "required": [
5901
+ "id",
5902
+ "label",
5903
+ "filter"
5904
+ ],
5905
+ "properties": {
5906
+ "id": {
5907
+ "type": "string"
5908
+ },
5909
+ "label": {
5910
+ "type": "string"
5911
+ },
5912
+ "icon": {
5913
+ "type": "string"
5914
+ },
5915
+ "filter": {
5916
+ "type": [
5917
+ "string",
5918
+ "object"
5919
+ ]
5920
+ }
5921
+ }
5922
+ }
5923
+ }
5924
+ ]
5925
+ },
5926
+ "showAdvanced": {
5927
+ "type": "boolean"
5928
+ }
5929
+ }
5831
5930
  }
5832
5931
  }
5833
5932
  },
@@ -5839,13 +5938,17 @@
5839
5938
  "reads": [
5840
5939
  "CrudMetadata.table",
5841
5940
  "CrudMetadata.queryContext",
5941
+ "CrudMetadata.kpiBand",
5942
+ "CrudMetadata.filterBar",
5842
5943
  "PRAXIS_TABLE_AUTHORING_MANIFEST",
5843
5944
  "CRUD_AI_CAPABILITIES"
5844
5945
  ],
5845
5946
  "writes": [
5846
5947
  "CrudMetadata.table",
5847
5948
  "CrudMetadata.queryContext",
5848
- "CrudMetadata.filterCriteria"
5949
+ "CrudMetadata.filterCriteria",
5950
+ "CrudMetadata.kpiBand",
5951
+ "CrudMetadata.filterBar"
5849
5952
  ],
5850
5953
  "identityKeys": [
5851
5954
  "crudId"
@@ -5861,6 +5964,105 @@
5861
5964
  },
5862
5965
  "filterCriteria": {
5863
5966
  "type": "object"
5967
+ },
5968
+ "kpiBand": {
5969
+ "type": "object",
5970
+ "properties": {
5971
+ "enabled": {
5972
+ "type": "boolean"
5973
+ },
5974
+ "cards": {
5975
+ "type": "array",
5976
+ "items": {
5977
+ "type": "object",
5978
+ "required": [
5979
+ "label",
5980
+ "value"
5981
+ ],
5982
+ "properties": {
5983
+ "id": {
5984
+ "type": "string"
5985
+ },
5986
+ "label": {
5987
+ "type": "string"
5988
+ },
5989
+ "value": {
5990
+ "type": [
5991
+ "string",
5992
+ "number"
5993
+ ]
5994
+ },
5995
+ "caption": {
5996
+ "type": "string"
5997
+ },
5998
+ "icon": {
5999
+ "type": "string"
6000
+ },
6001
+ "variant": {
6002
+ "enum": [
6003
+ "default",
6004
+ "primary",
6005
+ "success",
6006
+ "warning",
6007
+ "danger"
6008
+ ]
6009
+ },
6010
+ "filter": {
6011
+ "type": "object"
6012
+ }
6013
+ }
6014
+ }
6015
+ }
6016
+ }
6017
+ },
6018
+ "filterBar": {
6019
+ "type": "object",
6020
+ "properties": {
6021
+ "inlineFields": {
6022
+ "type": "array",
6023
+ "items": {
6024
+ "type": "string"
6025
+ }
6026
+ },
6027
+ "quickFilters": {
6028
+ "oneOf": [
6029
+ {
6030
+ "const": false
6031
+ },
6032
+ {
6033
+ "type": "array",
6034
+ "items": {
6035
+ "type": "object",
6036
+ "required": [
6037
+ "id",
6038
+ "label",
6039
+ "filter"
6040
+ ],
6041
+ "properties": {
6042
+ "id": {
6043
+ "type": "string"
6044
+ },
6045
+ "label": {
6046
+ "type": "string"
6047
+ },
6048
+ "icon": {
6049
+ "type": "string"
6050
+ },
6051
+ "filter": {
6052
+ "type": [
6053
+ "string",
6054
+ "object"
6055
+ ]
6056
+ }
6057
+ }
6058
+ }
6059
+ }
6060
+ ]
6061
+ },
6062
+ "showAdvanced": {
6063
+ "type": "boolean"
6064
+ }
6065
+ }
5864
6066
  }
5865
6067
  }
5866
6068
  },
@@ -5869,7 +6071,7 @@
5869
6071
  "table-patch-not-supported",
5870
6072
  "query-context-invalid"
5871
6073
  ],
5872
- "description": "Configures CRUD-owned list orchestration while routing table semantics to the praxis-table manifest."
6074
+ "description": "Configures CRUD-owned list orchestration (including KPI band and filter bar shortcuts) while routing table semantics to the praxis-table manifest."
5873
6075
  }
5874
6076
  }
5875
6077
  ],
@@ -5882,7 +6084,9 @@
5882
6084
  "affectedPaths": [
5883
6085
  "table",
5884
6086
  "queryContext",
5885
- "filterCriteria"
6087
+ "filterCriteria",
6088
+ "kpiBand",
6089
+ "filterBar"
5886
6090
  ],
5887
6091
  "submissionImpact": "config-only",
5888
6092
  "preconditions": [
@@ -5890,6 +6094,296 @@
5890
6094
  "praxis-table-manifest-available"
5891
6095
  ]
5892
6096
  },
6097
+ {
6098
+ "operationId": "list.kpiBand.configure",
6099
+ "title": "Configure CRUD KPI band",
6100
+ "scope": "interaction",
6101
+ "targetKind": "listSurface",
6102
+ "target": {
6103
+ "kind": "listSurface",
6104
+ "resolver": "crud-list-surface",
6105
+ "ambiguityPolicy": "fail",
6106
+ "required": true
6107
+ },
6108
+ "inputSchema": {
6109
+ "type": "object",
6110
+ "properties": {
6111
+ "enabled": {
6112
+ "type": "boolean"
6113
+ },
6114
+ "cards": {
6115
+ "type": "array",
6116
+ "items": {
6117
+ "type": "object",
6118
+ "required": [
6119
+ "label",
6120
+ "value"
6121
+ ],
6122
+ "properties": {
6123
+ "id": {
6124
+ "type": "string"
6125
+ },
6126
+ "label": {
6127
+ "type": "string"
6128
+ },
6129
+ "value": {
6130
+ "type": [
6131
+ "string",
6132
+ "number"
6133
+ ]
6134
+ },
6135
+ "caption": {
6136
+ "type": "string"
6137
+ },
6138
+ "icon": {
6139
+ "type": "string"
6140
+ },
6141
+ "variant": {
6142
+ "enum": [
6143
+ "default",
6144
+ "primary",
6145
+ "success",
6146
+ "warning",
6147
+ "danger"
6148
+ ]
6149
+ },
6150
+ "filter": {
6151
+ "type": "object"
6152
+ }
6153
+ }
6154
+ }
6155
+ }
6156
+ }
6157
+ },
6158
+ "effects": [
6159
+ {
6160
+ "kind": "compile-domain-patch",
6161
+ "handler": "crud-kpi-band-configure",
6162
+ "handlerContract": {
6163
+ "reads": [
6164
+ "CrudMetadata.kpiBand",
6165
+ "CrudMetadata.resource"
6166
+ ],
6167
+ "writes": [
6168
+ "CrudMetadata.kpiBand"
6169
+ ],
6170
+ "identityKeys": [
6171
+ "crudId"
6172
+ ],
6173
+ "inputSchema": {
6174
+ "type": "object",
6175
+ "properties": {
6176
+ "enabled": {
6177
+ "type": "boolean"
6178
+ },
6179
+ "cards": {
6180
+ "type": "array",
6181
+ "items": {
6182
+ "type": "object",
6183
+ "required": [
6184
+ "label",
6185
+ "value"
6186
+ ],
6187
+ "properties": {
6188
+ "id": {
6189
+ "type": "string"
6190
+ },
6191
+ "label": {
6192
+ "type": "string"
6193
+ },
6194
+ "value": {
6195
+ "type": [
6196
+ "string",
6197
+ "number"
6198
+ ]
6199
+ },
6200
+ "caption": {
6201
+ "type": "string"
6202
+ },
6203
+ "icon": {
6204
+ "type": "string"
6205
+ },
6206
+ "variant": {
6207
+ "enum": [
6208
+ "default",
6209
+ "primary",
6210
+ "success",
6211
+ "warning",
6212
+ "danger"
6213
+ ]
6214
+ },
6215
+ "filter": {
6216
+ "type": "object"
6217
+ }
6218
+ }
6219
+ }
6220
+ }
6221
+ }
6222
+ },
6223
+ "failureModes": [
6224
+ "kpi-card-label-missing",
6225
+ "kpi-card-value-missing",
6226
+ "kpi-card-filter-invalid"
6227
+ ],
6228
+ "description": "Configures the CRUD KPI summary band and optional click-to-filter card criteria."
6229
+ }
6230
+ }
6231
+ ],
6232
+ "validators": [
6233
+ "crud-context-stable"
6234
+ ],
6235
+ "affectedPaths": [
6236
+ "kpiBand"
6237
+ ],
6238
+ "submissionImpact": "config-only",
6239
+ "preconditions": [
6240
+ "crud-metadata-loaded"
6241
+ ]
6242
+ },
6243
+ {
6244
+ "operationId": "list.filterBar.configure",
6245
+ "title": "Configure CRUD filter bar",
6246
+ "scope": "interaction",
6247
+ "targetKind": "listSurface",
6248
+ "target": {
6249
+ "kind": "listSurface",
6250
+ "resolver": "crud-list-surface",
6251
+ "ambiguityPolicy": "fail",
6252
+ "required": true
6253
+ },
6254
+ "inputSchema": {
6255
+ "type": "object",
6256
+ "properties": {
6257
+ "inlineFields": {
6258
+ "type": "array",
6259
+ "items": {
6260
+ "type": "string"
6261
+ }
6262
+ },
6263
+ "quickFilters": {
6264
+ "oneOf": [
6265
+ {
6266
+ "const": false
6267
+ },
6268
+ {
6269
+ "type": "array",
6270
+ "items": {
6271
+ "type": "object",
6272
+ "required": [
6273
+ "id",
6274
+ "label",
6275
+ "filter"
6276
+ ],
6277
+ "properties": {
6278
+ "id": {
6279
+ "type": "string"
6280
+ },
6281
+ "label": {
6282
+ "type": "string"
6283
+ },
6284
+ "icon": {
6285
+ "type": "string"
6286
+ },
6287
+ "filter": {
6288
+ "type": [
6289
+ "string",
6290
+ "object"
6291
+ ]
6292
+ }
6293
+ }
6294
+ }
6295
+ }
6296
+ ]
6297
+ },
6298
+ "showAdvanced": {
6299
+ "type": "boolean"
6300
+ }
6301
+ }
6302
+ },
6303
+ "effects": [
6304
+ {
6305
+ "kind": "compile-domain-patch",
6306
+ "handler": "crud-filter-bar-configure",
6307
+ "handlerContract": {
6308
+ "reads": [
6309
+ "CrudMetadata.filterBar",
6310
+ "CrudMetadata.resource"
6311
+ ],
6312
+ "writes": [
6313
+ "CrudMetadata.filterBar"
6314
+ ],
6315
+ "identityKeys": [
6316
+ "crudId"
6317
+ ],
6318
+ "inputSchema": {
6319
+ "type": "object",
6320
+ "properties": {
6321
+ "inlineFields": {
6322
+ "type": "array",
6323
+ "items": {
6324
+ "type": "string"
6325
+ }
6326
+ },
6327
+ "quickFilters": {
6328
+ "oneOf": [
6329
+ {
6330
+ "const": false
6331
+ },
6332
+ {
6333
+ "type": "array",
6334
+ "items": {
6335
+ "type": "object",
6336
+ "required": [
6337
+ "id",
6338
+ "label",
6339
+ "filter"
6340
+ ],
6341
+ "properties": {
6342
+ "id": {
6343
+ "type": "string"
6344
+ },
6345
+ "label": {
6346
+ "type": "string"
6347
+ },
6348
+ "icon": {
6349
+ "type": "string"
6350
+ },
6351
+ "filter": {
6352
+ "type": [
6353
+ "string",
6354
+ "object"
6355
+ ]
6356
+ }
6357
+ }
6358
+ }
6359
+ }
6360
+ ]
6361
+ },
6362
+ "showAdvanced": {
6363
+ "type": "boolean"
6364
+ }
6365
+ }
6366
+ },
6367
+ "failureModes": [
6368
+ "quick-filter-id-missing",
6369
+ "quick-filter-label-missing",
6370
+ "quick-filter-condition-invalid"
6371
+ ],
6372
+ "description": "Configures CRUD filterBar shorthand (inlineFields, quickFilters, showAdvanced) expanded into the internal table runtime."
6373
+ }
6374
+ }
6375
+ ],
6376
+ "validators": [
6377
+ "crud-context-stable"
6378
+ ],
6379
+ "affectedPaths": [
6380
+ "filterBar"
6381
+ ],
6382
+ "submissionImpact": "config-only",
6383
+ "preconditions": [
6384
+ "crud-metadata-loaded"
6385
+ ]
6386
+ },
5893
6387
  {
5894
6388
  "operationId": "surface.create.configure",
5895
6389
  "title": "Configure create surface",
@@ -7820,9 +8314,9 @@
7820
8314
  {
7821
8315
  "chunkIndex": 14,
7822
8316
  "chunkKind": "authoring_manifest",
7823
- "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\"],\"semanticTerms\":[\"tablePatch\",\"queryContext\",\"filterCriteria\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"table\",\"queryContext\",\"filterCriteria\"],\"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\":[]}",
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\":[]}",
7824
8318
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
7825
- "contentHash": "750dbceb00256dc93416b8449cf22ab62c3f7685885772d54343afa3966e9478",
8319
+ "contentHash": "5267bfb8d86a62fe84517727ab4f8ad433d34edbfb27da118d3f9776aac17538",
7826
8320
  "sourceKind": "component_definition",
7827
8321
  "sourceId": "praxis-crud",
7828
8322
  "corpusVersion": "1.0.0"
@@ -7830,6 +8324,26 @@
7830
8324
  {
7831
8325
  "chunkIndex": 15,
7832
8326
  "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\":[]}",
8328
+ "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
8329
+ "contentHash": "0a57da458f4e2e23953315404d23bd8a8a868d81b59fa642663be20b4d2186b2",
8330
+ "sourceKind": "component_definition",
8331
+ "sourceId": "praxis-crud",
8332
+ "corpusVersion": "1.0.0"
8333
+ },
8334
+ {
8335
+ "chunkIndex": 16,
8336
+ "chunkKind": "authoring_manifest",
8337
+ "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
+ "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
8339
+ "contentHash": "3eec6472c96d6c696f637c12f0603b2ad3e691dfcaf2b84664cf1846ed9c3aea",
8340
+ "sourceKind": "component_definition",
8341
+ "sourceId": "praxis-crud",
8342
+ "corpusVersion": "1.0.0"
8343
+ },
8344
+ {
8345
+ "chunkIndex": 17,
8346
+ "chunkKind": "authoring_manifest",
7833
8347
  "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\":[]}",
7834
8348
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
7835
8349
  "contentHash": "c9d3a2b385b1e0a9a648fc32ce4a51a0436592c7659440662080210986483d20",
@@ -7838,7 +8352,7 @@
7838
8352
  "corpusVersion": "1.0.0"
7839
8353
  },
7840
8354
  {
7841
- "chunkIndex": 16,
8355
+ "chunkIndex": 18,
7842
8356
  "chunkKind": "authoring_manifest",
7843
8357
  "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\":[]}",
7844
8358
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -7848,7 +8362,7 @@
7848
8362
  "corpusVersion": "1.0.0"
7849
8363
  },
7850
8364
  {
7851
- "chunkIndex": 17,
8365
+ "chunkIndex": 19,
7852
8366
  "chunkKind": "authoring_manifest",
7853
8367
  "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\":[]}",
7854
8368
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -7858,7 +8372,7 @@
7858
8372
  "corpusVersion": "1.0.0"
7859
8373
  },
7860
8374
  {
7861
- "chunkIndex": 18,
8375
+ "chunkIndex": 20,
7862
8376
  "chunkKind": "authoring_manifest",
7863
8377
  "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}]}",
7864
8378
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -7868,7 +8382,7 @@
7868
8382
  "corpusVersion": "1.0.0"
7869
8383
  },
7870
8384
  {
7871
- "chunkIndex": 19,
8385
+ "chunkIndex": 21,
7872
8386
  "chunkKind": "authoring_manifest",
7873
8387
  "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\":[]}",
7874
8388
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -7878,7 +8392,7 @@
7878
8392
  "corpusVersion": "1.0.0"
7879
8393
  },
7880
8394
  {
7881
- "chunkIndex": 20,
8395
+ "chunkIndex": 22,
7882
8396
  "chunkKind": "authoring_manifest",
7883
8397
  "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\":[]}",
7884
8398
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -7888,7 +8402,7 @@
7888
8402
  "corpusVersion": "1.0.0"
7889
8403
  },
7890
8404
  {
7891
- "chunkIndex": 21,
8405
+ "chunkIndex": 23,
7892
8406
  "chunkKind": "authoring_manifest",
7893
8407
  "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}]}",
7894
8408
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -7898,7 +8412,7 @@
7898
8412
  "corpusVersion": "1.0.0"
7899
8413
  },
7900
8414
  {
7901
- "chunkIndex": 22,
8415
+ "chunkIndex": 24,
7902
8416
  "chunkKind": "authoring_manifest",
7903
8417
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"identity\"}",
7904
8418
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -7908,7 +8422,7 @@
7908
8422
  "corpusVersion": "1.0.0"
7909
8423
  },
7910
8424
  {
7911
- "chunkIndex": 23,
8425
+ "chunkIndex": 25,
7912
8426
  "chunkKind": "authoring_manifest",
7913
8427
  "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.\"}]}",
7914
8428
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -7918,7 +8432,7 @@
7918
8432
  "corpusVersion": "1.0.0"
7919
8433
  },
7920
8434
  {
7921
- "chunkIndex": 24,
8435
+ "chunkIndex": 26,
7922
8436
  "chunkKind": "authoring_manifest",
7923
8437
  "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.\"}]}",
7924
8438
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -7928,47 +8442,47 @@
7928
8442
  "corpusVersion": "1.0.0"
7929
8443
  },
7930
8444
  {
7931
- "chunkIndex": 25,
8445
+ "chunkIndex": 27,
7932
8446
  "chunkKind": "authoring_manifest",
7933
- "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\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"crud-list-surface-configure\",\"handlerContract\":{\"reads\":[\"CrudMetadata.table\",\"CrudMetadata.queryContext\",\"PRAXIS_TABLE_AUTHORING_MANIFEST\",\"CRUD_AI_CAPABILITIES\"],\"writes\":[\"CrudMetadata.table\",\"CrudMetadata.queryContext\",\"CrudMetadata.filterCriteria\"],\"identityKeys\":[\"crudId\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"tablePatch\":{\"type\":\"object\"},\"queryContext\":{\"type\":\"object\"},\"filterCriteria\":{\"type\":\"object\"}}},\"failureModes\":[\"table-operation-not-delegated\",\"table-patch-not-supported\",\"query-context-invalid\"],\"description\":\"Configures CRUD-owned list orchestration 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\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"crud-metadata-loaded\",\"praxis-table-manifest-available\"]}]}",
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\"]}]}",
7934
8448
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
7935
- "contentHash": "8d4f814dd09220677524756bda3fcdcea3d1399f29a922dd15ff06f97d9dc823",
8449
+ "contentHash": "6b37865c88d877c9d97c7b97cb5c5cb69351423b909060f1ffef5341db31dd09",
7936
8450
  "sourceKind": "component_definition",
7937
8451
  "sourceId": "praxis-crud",
7938
8452
  "corpusVersion": "1.0.0"
7939
8453
  },
7940
8454
  {
7941
- "chunkIndex": 26,
8455
+ "chunkIndex": 28,
7942
8456
  "chunkKind": "authoring_manifest",
7943
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-crud\",\"ownerPackage\":\"@praxisui/crud\",\"configSchemaId\":\"CrudMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"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\"]}]}",
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\"]}]}",
7944
8458
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
7945
- "contentHash": "a69add5e3a6a89e379839d5c8e148adbd16d897981f6036f8538ee08ea665b79",
8459
+ "contentHash": "d9769c236573d125c1f78429f3f1260b3a8ff2b7327b79e0e9178363247022f4",
7946
8460
  "sourceKind": "component_definition",
7947
8461
  "sourceId": "praxis-crud",
7948
8462
  "corpusVersion": "1.0.0"
7949
8463
  },
7950
8464
  {
7951
- "chunkIndex": 27,
8465
+ "chunkIndex": 29,
7952
8466
  "chunkKind": "authoring_manifest",
7953
- "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\"]}]}",
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\"]}]}",
7954
8468
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
7955
- "contentHash": "aeac1aa4a0974965ee0dd0a53fe3e1c24cea2bdef83e2d36fb545e03204d112e",
8469
+ "contentHash": "ba9cb09dd833ed9c00537e77d59c1ecf4d4eb4bfc221b424a720210f65e1b95b",
7956
8470
  "sourceKind": "component_definition",
7957
8471
  "sourceId": "praxis-crud",
7958
8472
  "corpusVersion": "1.0.0"
7959
8473
  },
7960
8474
  {
7961
- "chunkIndex": 28,
8475
+ "chunkIndex": 30,
7962
8476
  "chunkKind": "authoring_manifest",
7963
- "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\"]}]}",
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\"]}]}",
7964
8478
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
7965
- "contentHash": "7c3eedc499e0d963c9c909d7f98d6f3feb2b8a0fe5e62638c82682df535c6b0d",
8479
+ "contentHash": "fd018052aa671ae87830b486ff98a51e8f19e752c940b1ea8648af5e73fcc61b",
7966
8480
  "sourceKind": "component_definition",
7967
8481
  "sourceId": "praxis-crud",
7968
8482
  "corpusVersion": "1.0.0"
7969
8483
  },
7970
8484
  {
7971
- "chunkIndex": 29,
8485
+ "chunkIndex": 31,
7972
8486
  "chunkKind": "authoring_manifest",
7973
8487
  "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.\"}]}",
7974
8488
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -7978,7 +8492,7 @@
7978
8492
  "corpusVersion": "1.0.0"
7979
8493
  },
7980
8494
  {
7981
- "chunkIndex": 30,
8495
+ "chunkIndex": 32,
7982
8496
  "chunkKind": "authoring_manifest",
7983
8497
  "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.\"]}",
7984
8498
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -7988,7 +8502,7 @@
7988
8502
  "corpusVersion": "1.0.0"
7989
8503
  },
7990
8504
  {
7991
- "chunkIndex": 31,
8505
+ "chunkIndex": 33,
7992
8506
  "chunkKind": "authoring_manifest",
7993
8507
  "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}]}",
7994
8508
  "sourcePointer": "projects/praxis-crud/src/lib/ai/praxis-crud-authoring-manifest.ts",
@@ -7998,7 +8512,7 @@
7998
8512
  "corpusVersion": "1.0.0"
7999
8513
  },
8000
8514
  {
8001
- "chunkIndex": 32,
8515
+ "chunkIndex": 34,
8002
8516
  "chunkKind": "context_pack",
8003
8517
  "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.\"]}}",
8004
8518
  "sourcePointer": "projects/praxis-crud/src/lib/ai/crud-context-pack.ts",
@@ -8008,7 +8522,7 @@
8008
8522
  "corpusVersion": "1.0.0"
8009
8523
  },
8010
8524
  {
8011
- "chunkIndex": 33,
8525
+ "chunkIndex": 35,
8012
8526
  "chunkKind": "recipe",
8013
8527
  "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\"}}]}",
8014
8528
  "sourcePointer": "examples/ai-recipes/praxis-crud.actions.json",
@@ -8018,7 +8532,7 @@
8018
8532
  "corpusVersion": "1.0.0"
8019
8533
  },
8020
8534
  {
8021
- "chunkIndex": 34,
8535
+ "chunkIndex": 36,
8022
8536
  "chunkKind": "recipe",
8023
8537
  "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}}}]}}",
8024
8538
  "sourcePointer": "examples/ai-recipes/praxis-crud.form.json",
@@ -8028,7 +8542,7 @@
8028
8542
  "corpusVersion": "1.0.0"
8029
8543
  },
8030
8544
  {
8031
- "chunkIndex": 35,
8545
+ "chunkIndex": 37,
8032
8546
  "chunkKind": "recipe",
8033
8547
  "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"_comment\",\"_comment\":\"Receita de CRUD alinhada ao PraxisCrud, usando acoes canonicas inferidas como baseline.\"}",
8034
8548
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8038,7 +8552,7 @@
8038
8552
  "corpusVersion": "1.0.0"
8039
8553
  },
8040
8554
  {
8041
- "chunkIndex": 36,
8555
+ "chunkIndex": 38,
8042
8556
  "chunkKind": "recipe",
8043
8557
  "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\"]}]}}",
8044
8558
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8048,7 +8562,7 @@
8048
8562
  "corpusVersion": "1.0.0"
8049
8563
  },
8050
8564
  {
8051
- "chunkIndex": 37,
8565
+ "chunkIndex": 39,
8052
8566
  "chunkKind": "recipe",
8053
8567
  "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"component\",\"component\":\"praxis-crud\"}",
8054
8568
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8058,7 +8572,7 @@
8058
8572
  "corpusVersion": "1.0.0"
8059
8573
  },
8060
8574
  {
8061
- "chunkIndex": 38,
8575
+ "chunkIndex": 40,
8062
8576
  "chunkKind": "recipe",
8063
8577
  "content": "{\"componentId\":\"praxis-crud\",\"chunkSection\":\"resource\",\"resource\":{\"path\":\"/api/employees\",\"idField\":\"id\",\"endpointKey\":\"employees\"}}",
8064
8578
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8068,7 +8582,7 @@
8068
8582
  "corpusVersion": "1.0.0"
8069
8583
  },
8070
8584
  {
8071
- "chunkIndex": 39,
8585
+ "chunkIndex": 41,
8072
8586
  "chunkKind": "recipe",
8073
8587
  "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}}}",
8074
8588
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8078,7 +8592,7 @@
8078
8592
  "corpusVersion": "1.0.0"
8079
8593
  },
8080
8594
  {
8081
- "chunkIndex": 40,
8595
+ "chunkIndex": 42,
8082
8596
  "chunkKind": "recipe",
8083
8597
  "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\"}}]}",
8084
8598
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8088,7 +8602,7 @@
8088
8602
  "corpusVersion": "1.0.0"
8089
8603
  },
8090
8604
  {
8091
- "chunkIndex": 41,
8605
+ "chunkIndex": 43,
8092
8606
  "chunkKind": "recipe",
8093
8607
  "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\"}}}}",
8094
8608
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8098,7 +8612,7 @@
8098
8612
  "corpusVersion": "1.0.0"
8099
8613
  },
8100
8614
  {
8101
- "chunkIndex": 42,
8615
+ "chunkIndex": 44,
8102
8616
  "chunkKind": "recipe",
8103
8617
  "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}}}]}}",
8104
8618
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8108,7 +8622,7 @@
8108
8622
  "corpusVersion": "1.0.0"
8109
8623
  },
8110
8624
  {
8111
- "chunkIndex": 43,
8625
+ "chunkIndex": 45,
8112
8626
  "chunkKind": "recipe",
8113
8627
  "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?\"}}}",
8114
8628
  "sourcePointer": "examples/ai-recipes/praxis-crud.json",
@@ -8118,7 +8632,7 @@
8118
8632
  "corpusVersion": "1.0.0"
8119
8633
  },
8120
8634
  {
8121
- "chunkIndex": 44,
8635
+ "chunkIndex": 46,
8122
8636
  "chunkKind": "recipe",
8123
8637
  "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\"}}}}",
8124
8638
  "sourcePointer": "examples/ai-recipes/praxis-crud.table.json",