@praxisui/metadata-editor 10.0.0-rc.40 → 10.0.0-rc.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -130,6 +130,11 @@ Configs de authoring podem declarar `labelKey`, `hintKey`, `placeholderKey`,
130
130
  essas chaves no namespace `praxis.metadataEditor.*` e mantém o texto literal
131
131
  como fallback.
132
132
 
133
+ Configurações de Quick View também possuem cobertura visual dedicada:
134
+ - Na seção de apresentação de todos os campos (`field-presentation.config.ts`), `quickViewVisible` (`checkbox`) e `quickViewOrder` (`number`) permitem governar quais campos do recurso aparecem no card de Quick View e em qual ordem, enquanto `quickView.previewSurfaceId` e `quickView.detailPresentation` (`auto` | `overlay-only` | `Drawer` | `Modal` | `Route`) governam a superfície de pré-visualização e de abertura do registro.
135
+ - Em controles de relacionamento (`entity-lookup` e `async-select`), `actions.showQuickView` e `quickViewActionLabel` governam a exibição e o rótulo acessível do botão explícito de Quick View em modo de edição.
136
+ - Ao normalizar patches de apresentação, `FieldMetadataEditorComponent` preserva integralmente `seed.quickView.recordOpen` e demais contratos de navegação vindos do backend.
137
+
133
138
  Para `controlType: "array"`, o editor renderiza `array.itemSchema.fields`
134
139
  como uma lista visual estruturada de `FieldMetadata[]`. O fluxo preserva
135
140
  propriedades avançadas dos subcampos, como `options`, `optionSource`,
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-10-26T18:09:20.136Z",
3
+ "generatedAt": "2026-11-01T13:59:56.156Z",
4
4
  "packageName": "@praxisui/metadata-editor",
5
- "packageVersion": "10.0.0-rc.40",
5
+ "packageVersion": "10.0.0-rc.42",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 1,
@@ -182,6 +182,12 @@
182
182
  "presentation.badge",
183
183
  "presentation.tooltip",
184
184
  "presentationRules",
185
+ "quickViewVisible",
186
+ "quickViewOrder",
187
+ "quickViewActionLabel",
188
+ "actions.showQuickView",
189
+ "quickView.previewSurfaceId",
190
+ "quickView.detailPresentation",
185
191
  "options",
186
192
  "optionSource",
187
193
  "validators",
@@ -252,6 +258,12 @@
252
258
  "presentation.badge",
253
259
  "presentation.tooltip",
254
260
  "presentationRules",
261
+ "quickViewVisible",
262
+ "quickViewOrder",
263
+ "quickViewActionLabel",
264
+ "actions.showQuickView",
265
+ "quickView.previewSurfaceId",
266
+ "quickView.detailPresentation",
255
267
  "options",
256
268
  "optionSource",
257
269
  "validators",
@@ -479,6 +491,14 @@
479
491
  },
480
492
  "statusToneMap": {
481
493
  "type": "object"
494
+ },
495
+ "actions": {
496
+ "type": "object",
497
+ "properties": {
498
+ "showQuickView": {
499
+ "type": "boolean"
500
+ }
501
+ }
482
502
  }
483
503
  }
484
504
  },
@@ -492,9 +512,15 @@
492
512
  "href"
493
513
  ]
494
514
  },
515
+ "resourceKey": {
516
+ "type": "string"
517
+ },
495
518
  "surfaceId": {
496
519
  "type": "string"
497
520
  },
521
+ "previewSurfaceId": {
522
+ "type": "string"
523
+ },
498
524
  "presentation": {
499
525
  "enum": [
500
526
  "drawer",
@@ -626,6 +652,14 @@
626
652
  },
627
653
  "statusToneMap": {
628
654
  "type": "object"
655
+ },
656
+ "actions": {
657
+ "type": "object",
658
+ "properties": {
659
+ "showQuickView": {
660
+ "type": "boolean"
661
+ }
662
+ }
629
663
  }
630
664
  }
631
665
  },
@@ -639,9 +673,15 @@
639
673
  "href"
640
674
  ]
641
675
  },
676
+ "resourceKey": {
677
+ "type": "string"
678
+ },
642
679
  "surfaceId": {
643
680
  "type": "string"
644
681
  },
682
+ "previewSurfaceId": {
683
+ "type": "string"
684
+ },
645
685
  "presentation": {
646
686
  "enum": [
647
687
  "drawer",
@@ -1873,9 +1913,9 @@
1873
1913
  {
1874
1914
  "chunkIndex": 1,
1875
1915
  "chunkKind": "authoring_manifest",
1876
- "content": "{\"operationId\":\"fieldMetadata.property.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set FieldMetadata property Effects: compile-domain-patch. Set this field label to Customer name.\",\"scope\":\"fieldMetadataPath\",\"target\":{\"kind\":\"fieldMetadata\",\"resolver\":\"field-metadata-json-path\",\"required\":true},\"inputContract\":{\"required\":[\"path\",\"value\"],\"properties\":[\"path\",\"value\",\"merge\"],\"semanticTerms\":[\"path\",\"value\",\"merge\",\"name\",\"label\",\"description\",\"controlType\",\"placeholder\",\"defaultValue\",\"group\",\"order\",\"required\",\"disabled\",\"readOnly\",\"hidden\",\"source\",\"transient\",\"submitPolicy\",\"hint\",\"helpText\",\"tooltip\",\"valuePresentation\",\"presentation\",\"presentation.presenter\",\"presentation.tone\",\"presentation.appearance\",\"presentation.icon\",\"presentation.label\",\"presentation.badge\",\"presentation.tooltip\",\"presentationRules\",\"options\",\"optionSource\",\"validators\",\"conditionalRequired\",\"conditionalDisplay\",\"visibleIn\",\"ariaLabel\",\"ariaDescribedBy\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata\"],\"validators\":[{\"validatorId\":\"field-metadata-shape-canonical\",\"level\":\"error\",\"code\":\"METADATA_FIELD_SHAPE_CANONICAL\",\"description\":\"Edited metadata must remain compatible with canonical FieldMetadata.\"},{\"validatorId\":\"field-path-supported-by-editor\",\"level\":\"error\",\"code\":\"METADATA_FIELD_PATH_SUPPORTED\",\"description\":\"Edited paths must be supported by visual editor coverage or explicitly delegated.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"field-metadata-loaded\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-label\",\"request\":\"Set this field label to Customer name.\",\"operationId\":\"fieldMetadata.property.set\",\"params\":{\"path\":\"label\",\"value\":\"Customer name\"},\"isPositive\":true}],\"negativeExamples\":[]}",
1916
+ "content": "{\"operationId\":\"fieldMetadata.property.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set FieldMetadata property Effects: compile-domain-patch. Set this field label to Customer name.\",\"scope\":\"fieldMetadataPath\",\"target\":{\"kind\":\"fieldMetadata\",\"resolver\":\"field-metadata-json-path\",\"required\":true},\"inputContract\":{\"required\":[\"path\",\"value\"],\"properties\":[\"path\",\"value\",\"merge\"],\"semanticTerms\":[\"path\",\"value\",\"merge\",\"name\",\"label\",\"description\",\"controlType\",\"placeholder\",\"defaultValue\",\"group\",\"order\",\"required\",\"disabled\",\"readOnly\",\"hidden\",\"source\",\"transient\",\"submitPolicy\",\"hint\",\"helpText\",\"tooltip\",\"valuePresentation\",\"presentation\",\"presentation.presenter\",\"presentation.tone\",\"presentation.appearance\",\"presentation.icon\",\"presentation.label\",\"presentation.badge\",\"presentation.tooltip\",\"presentationRules\",\"quickViewVisible\",\"quickViewOrder\",\"quickViewActionLabel\",\"actions.showQuickView\",\"quickView.previewSurfaceId\",\"quickView.detailPresentation\",\"options\",\"optionSource\",\"validators\",\"conditionalRequired\",\"conditionalDisplay\",\"visibleIn\",\"ariaLabel\",\"ariaDescribedBy\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata\"],\"validators\":[{\"validatorId\":\"field-metadata-shape-canonical\",\"level\":\"error\",\"code\":\"METADATA_FIELD_SHAPE_CANONICAL\",\"description\":\"Edited metadata must remain compatible with canonical FieldMetadata.\"},{\"validatorId\":\"field-path-supported-by-editor\",\"level\":\"error\",\"code\":\"METADATA_FIELD_PATH_SUPPORTED\",\"description\":\"Edited paths must be supported by visual editor coverage or explicitly delegated.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"field-metadata-loaded\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-label\",\"request\":\"Set this field label to Customer name.\",\"operationId\":\"fieldMetadata.property.set\",\"params\":{\"path\":\"label\",\"value\":\"Customer name\"},\"isPositive\":true}],\"negativeExamples\":[]}",
1877
1917
  "sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
1878
- "contentHash": "cef5507ef8785f477a8f7b35c35aa16eb04d2d492a41b77bff023582be8088e5",
1918
+ "contentHash": "4f7b26803c56d14364b0d1087058cee0984bb7d088bdcbea3c2b8512f770fc9d",
1879
1919
  "sourceKind": "component_definition",
1880
1920
  "sourceId": "praxis-metadata-editor",
1881
1921
  "corpusVersion": "1.0.0"
@@ -1893,9 +1933,9 @@
1893
1933
  {
1894
1934
  "chunkIndex": 3,
1895
1935
  "chunkKind": "authoring_manifest",
1896
- "content": "{\"operationId\":\"optionSource.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure option source Effects: compile-domain-patch. Load options from the customers resource using id and name. Save a host-only URL string as the option source.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"optionSource\",\"resolver\":\"field-metadata-option-source\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"kind\",\"resource\",\"endpoint\",\"valueField\",\"labelField\",\"dependsOn\",\"dependencyFilterMap\",\"display\",\"detail\",\"options\"],\"semanticTerms\":[\"kind\",\"resource\",\"endpoint\",\"valueField\",\"labelField\",\"dependsOn\",\"dependencyFilterMap\",\"display\",\"detail\",\"options\",\"static\",\"remote\",\"lookup\",\"display.preset\",\"display.usage\",\"display.density\",\"display.selectedLayout\",\"display.resultLayout\",\"display.primaryPropertyPath\",\"display.fields\",\"display.secondaryPropertyPaths\",\"display.badgePropertyPaths\",\"display.statusToneMap\",\"detail.kind\",\"detail.surfaceId\",\"detail.presentation\",\"detail.preferredWidget\",\"detail.mode\",\"compact\",\"rich\",\"directory\",\"status\",\"reference\",\"hierarchical\",\"form\",\"filter\",\"table-cell\",\"dashboard\",\"wizard\",\"review\",\"comfortable\",\"card\",\"inline\",\"token\",\"list\",\"denseList\",\"table\",\"surface\",\"route\",\"href\",\"drawer\",\"modal\",\"view\",\"edit\",\"create\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata.optionSource\"],\"validators\":[{\"validatorId\":\"option-source-shape-canonical\",\"level\":\"error\",\"code\":\"METADATA_OPTION_SOURCE_CANONICAL\",\"description\":\"Option source must use canonical FieldMetadata/x-ui shape.\"},{\"validatorId\":\"remote-option-source-governed\",\"level\":\"error\",\"code\":\"METADATA_REMOTE_OPTION_SOURCE_GOVERNED\",\"description\":\"Remote option sources must resolve through governed resource or endpoint metadata.\"},{\"validatorId\":\"cascade-backend-shape-preserved\",\"level\":\"error\",\"code\":\"METADATA_CASCADE_BACKEND_SHAPE_PRESERVED\",\"description\":\"Cascade config must preserve x-ui optionSource dependsOn and dependencyFilterMap semantics.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"field-metadata-loaded\"],\"submissionImpact\":\"affects-remote-binding\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-remote-options\",\"request\":\"Load options from the customers resource using id and name.\",\"operationId\":\"optionSource.configure\",\"params\":{\"kind\":\"resource\",\"resource\":\"customers\",\"valueField\":\"id\",\"labelField\":\"name\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-host-only-option-source\",\"request\":\"Save a host-only URL string as the option source.\",\"operationId\":\"optionSource.configure\",\"params\":{\"kind\":\"remote\",\"endpoint\":\"local-only://options\"},\"isPositive\":false}]}",
1936
+ "content": "{\"operationId\":\"optionSource.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure option source Effects: compile-domain-patch. Load options from the customers resource using id and name. Save a host-only URL string as the option source.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"optionSource\",\"resolver\":\"field-metadata-option-source\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"kind\",\"resource\",\"endpoint\",\"valueField\",\"labelField\",\"dependsOn\",\"dependencyFilterMap\",\"display\",\"detail\",\"options\"],\"semanticTerms\":[\"kind\",\"resource\",\"endpoint\",\"valueField\",\"labelField\",\"dependsOn\",\"dependencyFilterMap\",\"display\",\"detail\",\"options\",\"static\",\"remote\",\"lookup\",\"display.preset\",\"display.usage\",\"display.density\",\"display.selectedLayout\",\"display.resultLayout\",\"display.primaryPropertyPath\",\"display.fields\",\"display.secondaryPropertyPaths\",\"display.badgePropertyPaths\",\"display.statusToneMap\",\"display.actions\",\"detail.kind\",\"detail.resourceKey\",\"detail.surfaceId\",\"detail.previewSurfaceId\",\"detail.presentation\",\"detail.preferredWidget\",\"detail.mode\",\"compact\",\"rich\",\"directory\",\"status\",\"reference\",\"hierarchical\",\"form\",\"filter\",\"table-cell\",\"dashboard\",\"wizard\",\"review\",\"comfortable\",\"card\",\"inline\",\"token\",\"list\",\"denseList\",\"table\",\"display.actions.showQuickView\",\"surface\",\"route\",\"href\",\"drawer\",\"modal\",\"view\",\"edit\",\"create\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata.optionSource\"],\"validators\":[{\"validatorId\":\"option-source-shape-canonical\",\"level\":\"error\",\"code\":\"METADATA_OPTION_SOURCE_CANONICAL\",\"description\":\"Option source must use canonical FieldMetadata/x-ui shape.\"},{\"validatorId\":\"remote-option-source-governed\",\"level\":\"error\",\"code\":\"METADATA_REMOTE_OPTION_SOURCE_GOVERNED\",\"description\":\"Remote option sources must resolve through governed resource or endpoint metadata.\"},{\"validatorId\":\"cascade-backend-shape-preserved\",\"level\":\"error\",\"code\":\"METADATA_CASCADE_BACKEND_SHAPE_PRESERVED\",\"description\":\"Cascade config must preserve x-ui optionSource dependsOn and dependencyFilterMap semantics.\"},{\"validatorId\":\"metadata-round-trip\",\"level\":\"error\",\"code\":\"METADATA_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve metadata.\"}],\"preconditions\":[\"field-metadata-loaded\"],\"submissionImpact\":\"affects-remote-binding\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-remote-options\",\"request\":\"Load options from the customers resource using id and name.\",\"operationId\":\"optionSource.configure\",\"params\":{\"kind\":\"resource\",\"resource\":\"customers\",\"valueField\":\"id\",\"labelField\":\"name\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-host-only-option-source\",\"request\":\"Save a host-only URL string as the option source.\",\"operationId\":\"optionSource.configure\",\"params\":{\"kind\":\"remote\",\"endpoint\":\"local-only://options\"},\"isPositive\":false}]}",
1897
1937
  "sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
1898
- "contentHash": "037355de1c38dbb6cde763014aa5c89698eed8af1c9aa5bdbfc80e955ba1f3b4",
1938
+ "contentHash": "4dcc9f7ae06d7cc3bbc58c2b1dba28262c3172faba29339540cd4b550b8e9738",
1899
1939
  "sourceKind": "component_definition",
1900
1940
  "sourceId": "praxis-metadata-editor",
1901
1941
  "corpusVersion": "1.0.0"
@@ -1993,9 +2033,9 @@
1993
2033
  {
1994
2034
  "chunkIndex": 13,
1995
2035
  "chunkKind": "authoring_manifest",
1996
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"fieldMetadata.property.set\",\"title\":\"Set FieldMetadata property\",\"scope\":\"fieldMetadataPath\",\"targetKind\":\"fieldMetadata\",\"target\":{\"kind\":\"fieldMetadata\",\"resolver\":\"field-metadata-json-path\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"path\",\"value\"],\"properties\":{\"path\":{\"enum\":[\"name\",\"label\",\"description\",\"controlType\",\"placeholder\",\"defaultValue\",\"group\",\"order\",\"required\",\"disabled\",\"readOnly\",\"hidden\",\"source\",\"transient\",\"submitPolicy\",\"hint\",\"helpText\",\"tooltip\",\"valuePresentation\",\"presentation\",\"presentation.presenter\",\"presentation.tone\",\"presentation.appearance\",\"presentation.icon\",\"presentation.label\",\"presentation.badge\",\"presentation.tooltip\",\"presentationRules\",\"options\",\"optionSource\",\"validators\",\"conditionalRequired\",\"conditionalDisplay\",\"visibleIn\",\"ariaLabel\",\"ariaDescribedBy\"]},\"value\":{},\"merge\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-field-property-set\",\"handlerContract\":{\"reads\":[\"fieldMetadata\",\"fieldMetadataPath\",\"SchemaNormalizerService\"],\"writes\":[\"fieldMetadata\"],\"identityKeys\":[\"field.name\",\"path\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"path\",\"value\"],\"properties\":{\"path\":{\"enum\":[\"name\",\"label\",\"description\",\"controlType\",\"placeholder\",\"defaultValue\",\"group\",\"order\",\"required\",\"disabled\",\"readOnly\",\"hidden\",\"source\",\"transient\",\"submitPolicy\",\"hint\",\"helpText\",\"tooltip\",\"valuePresentation\",\"presentation\",\"presentation.presenter\",\"presentation.tone\",\"presentation.appearance\",\"presentation.icon\",\"presentation.label\",\"presentation.badge\",\"presentation.tooltip\",\"presentationRules\",\"options\",\"optionSource\",\"validators\",\"conditionalRequired\",\"conditionalDisplay\",\"visibleIn\",\"ariaLabel\",\"ariaDescribedBy\"]},\"value\":{},\"merge\":{\"type\":\"boolean\"}}},\"failureModes\":[\"unknown-field-metadata-path\",\"non-canonical-shape\",\"readonly-field\",\"normalization-failed\"],\"description\":\"Sets a canonical FieldMetadata property through a governed metadata path and re-runs schema normalization.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"field-metadata-shape-canonical\",\"field-path-supported-by-editor\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"field-metadata-loaded\"]},{\"operationId\":\"controlType.set\",\"title\":\"Set control type\",\"scope\":\"controlType\",\"targetKind\":\"controlType\",\"target\":{\"kind\":\"controlType\",\"resolver\":\"dynamic-fields-control-type-discovery\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"controlType\"],\"properties\":{\"controlType\":{\"type\":\"string\"},\"preserveCompatibleProperties\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-control-type-set\",\"handlerContract\":{\"reads\":[\"FieldControlType\",\"ConfigRegistryService\",\"dynamic-fields-discovery\",\"fieldMetadata\"],\"writes\":[\"fieldMetadata.controlType\",\"properties\",\"normalizedSeed\"],\"identityKeys\":[\"field.name\",\"controlType\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"controlType\"],\"properties\":{\"controlType\":{\"type\":\"string\"},\"preserveCompatibleProperties\":{\"type\":\"boolean\"}}},\"failureModes\":[\"control-type-not-discovered\",\"editor-coverage-missing\",\"incompatible-metadata-preservation\"],\"description\":\"Changes control type only when dynamic-fields discovery and metadata-editor config registry both expose renderer/editor coverage.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"control-type-exists-in-discovery\",\"editor-coverage-exists\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata.controlType\",\"properties\",\"normalizedSeed\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"dynamic-fields-discovery-loaded\"]},{\"operationId\":\"optionSource.configure\",\"title\":\"Configure option source\",\"scope\":\"dataBinding\",\"targetKind\":\"optionSource\",\"target\":{\"kind\":\"optionSource\",\"resolver\":\"field-metadata-option-source\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"kind\":{\"enum\":[\"static\",\"remote\",\"resource\",\"lookup\"]},\"resource\":{\"type\":\"string\"},\"endpoint\":{\"type\":\"string\"},\"valueField\":{\"type\":\"string\"},\"labelField\":{\"type\":\"string\"},\"dependsOn\":{\"type\":\"string\"},\"dependencyFilterMap\":{\"type\":\"object\"},\"display\":{\"type\":\"object\",\"properties\":{\"preset\":{\"enum\":[\"compact\",\"rich\",\"directory\",\"status\",\"reference\",\"hierarchical\"]},\"usage\":{\"enum\":[\"form\",\"filter\",\"table-cell\",\"dashboard\",\"wizard\",\"review\"]},\"density\":{\"enum\":[\"compact\",\"comfortable\",\"rich\"]},\"selectedLayout\":{\"enum\":[\"card\",\"inline\",\"compact\",\"token\"]},\"resultLayout\":{\"enum\":[\"list\",\"denseList\",\"table\",\"card\"]},\"primaryPropertyPath\":{\"type\":\"string\"},\"fields\":{\"type\":\"array\"},\"secondaryPropertyPaths\":{\"type\":\"array\"},\"badgePropertyPaths\":{\"type\":\"array\"},\"statusToneMap\":{\"type\":\"object\"}}},\"detail\":{\"type\":\"object\",\"properties\":{\"kind\":{\"enum\":[\"surface\",\"route\",\"href\"]},\"surfaceId\":{\"type\":\"string\"},\"presentation\":{\"enum\":[\"drawer\",\"modal\"]},\"preferredWidget\":{\"type\":\"string\"},\"mode\":{\"enum\":[\"view\",\"edit\",\"create\"]}}},\"options\":{\"type\":\"array\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-option-source-configure\",\"handlerContract\":{\"reads\":[\"fieldMetadata.optionSource\",\"backend.x-ui.optionSource\",\"SchemaNormalizerService\"],\"writes\":[\"fieldMetadata.optionSource\"],\"identityKeys\":[\"field.name\",\"optionSource.kind\",\"optionSource.resource\"],\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"kind\":{\"enum\":[\"static\",\"remote\",\"resource\",\"lookup\"]},\"resource\":{\"type\":\"string\"},\"endpoint\":{\"type\":\"string\"},\"valueField\":{\"type\":\"string\"},\"labelField\":{\"type\":\"string\"},\"dependsOn\":{\"type\":\"string\"},\"dependencyFilterMap\":{\"type\":\"object\"},\"display\":{\"type\":\"object\",\"properties\":{\"preset\":{\"enum\":[\"compact\",\"rich\",\"directory\",\"status\",\"reference\",\"hierarchical\"]},\"usage\":{\"enum\":[\"form\",\"filter\",\"table-cell\",\"dashboard\",\"wizard\",\"review\"]},\"density\":{\"enum\":[\"compact\",\"comfortable\",\"rich\"]},\"selectedLayout\":{\"enum\":[\"card\",\"inline\",\"compact\",\"token\"]},\"resultLayout\":{\"enum\":[\"list\",\"denseList\",\"table\",\"card\"]},\"primaryPropertyPath\":{\"type\":\"string\"},\"fields\":{\"type\":\"array\"},\"secondaryPropertyPaths\":{\"type\":\"array\"},\"badgePropertyPaths\":{\"type\":\"array\"},\"statusToneMap\":{\"type\":\"object\"}}},\"detail\":{\"type\":\"object\",\"properties\":{\"kind\":{\"enum\":[\"surface\",\"route\",\"href\"]},\"surfaceId\":{\"type\":\"string\"},\"presentation\":{\"enum\":[\"drawer\",\"modal\"]},\"preferredWidget\":{\"type\":\"string\"},\"mode\":{\"enum\":[\"view\",\"edit\",\"create\"]}}},\"options\":{\"type\":\"array\"}}},\"failureModes\":[\"invalid-option-source-kind\",\"remote-source-missing-governed-resource\",\"dependency-filter-map-invalid\"],\"description\":\"Configures canonical optionSource fields while preserving backend x-ui dependsOn and dependencyFilterMap semantics.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"option-source-shape-canonical\",\"remote-option-source-governed\",\"cascade-backend-shape-preserved\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata.optionSource\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"field-metadata-loaded\"]}]}",
2036
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-metadata-editor\",\"ownerPackage\":\"@praxisui/metadata-editor\",\"configSchemaId\":\"FieldMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"fieldMetadata.property.set\",\"title\":\"Set FieldMetadata property\",\"scope\":\"fieldMetadataPath\",\"targetKind\":\"fieldMetadata\",\"target\":{\"kind\":\"fieldMetadata\",\"resolver\":\"field-metadata-json-path\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"path\",\"value\"],\"properties\":{\"path\":{\"enum\":[\"name\",\"label\",\"description\",\"controlType\",\"placeholder\",\"defaultValue\",\"group\",\"order\",\"required\",\"disabled\",\"readOnly\",\"hidden\",\"source\",\"transient\",\"submitPolicy\",\"hint\",\"helpText\",\"tooltip\",\"valuePresentation\",\"presentation\",\"presentation.presenter\",\"presentation.tone\",\"presentation.appearance\",\"presentation.icon\",\"presentation.label\",\"presentation.badge\",\"presentation.tooltip\",\"presentationRules\",\"quickViewVisible\",\"quickViewOrder\",\"quickViewActionLabel\",\"actions.showQuickView\",\"quickView.previewSurfaceId\",\"quickView.detailPresentation\",\"options\",\"optionSource\",\"validators\",\"conditionalRequired\",\"conditionalDisplay\",\"visibleIn\",\"ariaLabel\",\"ariaDescribedBy\"]},\"value\":{},\"merge\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-field-property-set\",\"handlerContract\":{\"reads\":[\"fieldMetadata\",\"fieldMetadataPath\",\"SchemaNormalizerService\"],\"writes\":[\"fieldMetadata\"],\"identityKeys\":[\"field.name\",\"path\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"path\",\"value\"],\"properties\":{\"path\":{\"enum\":[\"name\",\"label\",\"description\",\"controlType\",\"placeholder\",\"defaultValue\",\"group\",\"order\",\"required\",\"disabled\",\"readOnly\",\"hidden\",\"source\",\"transient\",\"submitPolicy\",\"hint\",\"helpText\",\"tooltip\",\"valuePresentation\",\"presentation\",\"presentation.presenter\",\"presentation.tone\",\"presentation.appearance\",\"presentation.icon\",\"presentation.label\",\"presentation.badge\",\"presentation.tooltip\",\"presentationRules\",\"quickViewVisible\",\"quickViewOrder\",\"quickViewActionLabel\",\"actions.showQuickView\",\"quickView.previewSurfaceId\",\"quickView.detailPresentation\",\"options\",\"optionSource\",\"validators\",\"conditionalRequired\",\"conditionalDisplay\",\"visibleIn\",\"ariaLabel\",\"ariaDescribedBy\"]},\"value\":{},\"merge\":{\"type\":\"boolean\"}}},\"failureModes\":[\"unknown-field-metadata-path\",\"non-canonical-shape\",\"readonly-field\",\"normalization-failed\"],\"description\":\"Sets a canonical FieldMetadata property through a governed metadata path and re-runs schema normalization.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"field-metadata-shape-canonical\",\"field-path-supported-by-editor\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"field-metadata-loaded\"]},{\"operationId\":\"controlType.set\",\"title\":\"Set control type\",\"scope\":\"controlType\",\"targetKind\":\"controlType\",\"target\":{\"kind\":\"controlType\",\"resolver\":\"dynamic-fields-control-type-discovery\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"controlType\"],\"properties\":{\"controlType\":{\"type\":\"string\"},\"preserveCompatibleProperties\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-control-type-set\",\"handlerContract\":{\"reads\":[\"FieldControlType\",\"ConfigRegistryService\",\"dynamic-fields-discovery\",\"fieldMetadata\"],\"writes\":[\"fieldMetadata.controlType\",\"properties\",\"normalizedSeed\"],\"identityKeys\":[\"field.name\",\"controlType\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"controlType\"],\"properties\":{\"controlType\":{\"type\":\"string\"},\"preserveCompatibleProperties\":{\"type\":\"boolean\"}}},\"failureModes\":[\"control-type-not-discovered\",\"editor-coverage-missing\",\"incompatible-metadata-preservation\"],\"description\":\"Changes control type only when dynamic-fields discovery and metadata-editor config registry both expose renderer/editor coverage.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"control-type-exists-in-discovery\",\"editor-coverage-exists\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata.controlType\",\"properties\",\"normalizedSeed\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"dynamic-fields-discovery-loaded\"]},{\"operationId\":\"optionSource.configure\",\"title\":\"Configure option source\",\"scope\":\"dataBinding\",\"targetKind\":\"optionSource\",\"target\":{\"kind\":\"optionSource\",\"resolver\":\"field-metadata-option-source\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"kind\":{\"enum\":[\"static\",\"remote\",\"resource\",\"lookup\"]},\"resource\":{\"type\":\"string\"},\"endpoint\":{\"type\":\"string\"},\"valueField\":{\"type\":\"string\"},\"labelField\":{\"type\":\"string\"},\"dependsOn\":{\"type\":\"string\"},\"dependencyFilterMap\":{\"type\":\"object\"},\"display\":{\"type\":\"object\",\"properties\":{\"preset\":{\"enum\":[\"compact\",\"rich\",\"directory\",\"status\",\"reference\",\"hierarchical\"]},\"usage\":{\"enum\":[\"form\",\"filter\",\"table-cell\",\"dashboard\",\"wizard\",\"review\"]},\"density\":{\"enum\":[\"compact\",\"comfortable\",\"rich\"]},\"selectedLayout\":{\"enum\":[\"card\",\"inline\",\"compact\",\"token\"]},\"resultLayout\":{\"enum\":[\"list\",\"denseList\",\"table\",\"card\"]},\"primaryPropertyPath\":{\"type\":\"string\"},\"fields\":{\"type\":\"array\"},\"secondaryPropertyPaths\":{\"type\":\"array\"},\"badgePropertyPaths\":{\"type\":\"array\"},\"statusToneMap\":{\"type\":\"object\"},\"actions\":{\"type\":\"object\",\"properties\":{\"showQuickView\":{\"type\":\"boolean\"}}}}},\"detail\":{\"type\":\"object\",\"properties\":{\"kind\":{\"enum\":[\"surface\",\"route\",\"href\"]},\"resourceKey\":{\"type\":\"string\"},\"surfaceId\":{\"type\":\"string\"},\"previewSurfaceId\":{\"type\":\"string\"},\"presentation\":{\"enum\":[\"drawer\",\"modal\"]},\"preferredWidget\":{\"type\":\"string\"},\"mode\":{\"enum\":[\"view\",\"edit\",\"create\"]}}},\"options\":{\"type\":\"array\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"metadata-option-source-configure\",\"handlerContract\":{\"reads\":[\"fieldMetadata.optionSource\",\"backend.x-ui.optionSource\",\"SchemaNormalizerService\"],\"writes\":[\"fieldMetadata.optionSource\"],\"identityKeys\":[\"field.name\",\"optionSource.kind\",\"optionSource.resource\"],\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"kind\":{\"enum\":[\"static\",\"remote\",\"resource\",\"lookup\"]},\"resource\":{\"type\":\"string\"},\"endpoint\":{\"type\":\"string\"},\"valueField\":{\"type\":\"string\"},\"labelField\":{\"type\":\"string\"},\"dependsOn\":{\"type\":\"string\"},\"dependencyFilterMap\":{\"type\":\"object\"},\"display\":{\"type\":\"object\",\"properties\":{\"preset\":{\"enum\":[\"compact\",\"rich\",\"directory\",\"status\",\"reference\",\"hierarchical\"]},\"usage\":{\"enum\":[\"form\",\"filter\",\"table-cell\",\"dashboard\",\"wizard\",\"review\"]},\"density\":{\"enum\":[\"compact\",\"comfortable\",\"rich\"]},\"selectedLayout\":{\"enum\":[\"card\",\"inline\",\"compact\",\"token\"]},\"resultLayout\":{\"enum\":[\"list\",\"denseList\",\"table\",\"card\"]},\"primaryPropertyPath\":{\"type\":\"string\"},\"fields\":{\"type\":\"array\"},\"secondaryPropertyPaths\":{\"type\":\"array\"},\"badgePropertyPaths\":{\"type\":\"array\"},\"statusToneMap\":{\"type\":\"object\"},\"actions\":{\"type\":\"object\",\"properties\":{\"showQuickView\":{\"type\":\"boolean\"}}}}},\"detail\":{\"type\":\"object\",\"properties\":{\"kind\":{\"enum\":[\"surface\",\"route\",\"href\"]},\"resourceKey\":{\"type\":\"string\"},\"surfaceId\":{\"type\":\"string\"},\"previewSurfaceId\":{\"type\":\"string\"},\"presentation\":{\"enum\":[\"drawer\",\"modal\"]},\"preferredWidget\":{\"type\":\"string\"},\"mode\":{\"enum\":[\"view\",\"edit\",\"create\"]}}},\"options\":{\"type\":\"array\"}}},\"failureModes\":[\"invalid-option-source-kind\",\"remote-source-missing-governed-resource\",\"dependency-filter-map-invalid\"],\"description\":\"Configures canonical optionSource fields while preserving backend x-ui dependsOn and dependencyFilterMap semantics.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"option-source-shape-canonical\",\"remote-option-source-governed\",\"cascade-backend-shape-preserved\",\"metadata-round-trip\"],\"affectedPaths\":[\"fieldMetadata.optionSource\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"field-metadata-loaded\"]}]}",
1997
2037
  "sourcePointer": "projects/praxis-metadata-editor/src/lib/ai/praxis-metadata-editor-authoring-manifest.ts",
1998
- "contentHash": "3cbf9d244088100c598a101e744d6bfa766a130030aa42544e015f9d203865b1",
2038
+ "contentHash": "cc0e26b2ad9262aa2b3f9d034cafadb57ce4abcd180c565a7cdaab81cd5fc98e",
1999
2039
  "sourceKind": "component_definition",
2000
2040
  "sourceId": "praxis-metadata-editor",
2001
2041
  "corpusVersion": "1.0.0"
@@ -559,6 +559,16 @@ const METADATA_EDITOR_EN_US = {
559
559
  'praxis.metadataEditor.presentationFields.tooltip.hint': 'Short explanation shown as a tooltip.',
560
560
  'praxis.metadataEditor.presentationFields.presentationRules.label': 'Presentation rules',
561
561
  'praxis.metadataEditor.presentationFields.presentationRules.hint': 'Guided builder for ordered Json Logic rules that only change presentation. Later rules win.',
562
+ 'praxis.metadataEditor.presentationFields.quickViewVisible.label': 'Show in Quick View summary',
563
+ 'praxis.metadataEditor.presentationFields.quickViewVisible.hint': 'Controls x-ui.quickViewVisible when this resource is previewed inside a Quick View card.',
564
+ 'praxis.metadataEditor.presentationFields.quickViewOrder.label': 'Quick View summary order',
565
+ 'praxis.metadataEditor.presentationFields.quickViewOrder.hint': 'Numeric priority (x-ui.quickViewOrder) for this field in Quick View summary items.',
566
+ 'praxis.metadataEditor.presentationFields.quickViewPreviewSurfaceId.label': 'Quick View: preview surface',
567
+ 'praxis.metadataEditor.presentationFields.quickViewPreviewSurfaceId.hint': 'Optional dedicated read-only surface for this field\u2019s Quick View card (preserves canonical server recordOpen).',
568
+ 'praxis.metadataEditor.presentationFields.quickViewDetailPresentation.label': 'Quick View: detail handoff mode',
569
+ 'praxis.metadataEditor.presentationFields.quickViewDetailPresentation.hint': 'Defines whether the primary Quick View CTA opens the full surface in a drawer or modal.',
570
+ 'praxis.metadataEditor.presentationFields.quickViewDetailPresentation.option.drawer': 'Side drawer',
571
+ 'praxis.metadataEditor.presentationFields.quickViewDetailPresentation.option.modal': 'Modal dialog',
562
572
  'praxis.metadataEditor.presentationChoice.help': 'Help',
563
573
  'praxis.metadataEditor.presentationChoice.clear': 'Clear selection',
564
574
  'praxis.metadataEditor.presentationRulesBuilder.title': 'Presentation rules',
@@ -813,6 +823,16 @@ const METADATA_EDITOR_PT_BR = {
813
823
  'praxis.metadataEditor.presentationFields.tooltip.hint': 'Explica\u00e7\u00e3o curta exibida como tooltip.',
814
824
  'praxis.metadataEditor.presentationFields.presentationRules.label': 'Regras de apresenta\u00e7\u00e3o',
815
825
  'praxis.metadataEditor.presentationFields.presentationRules.hint': 'Builder guiado para regras Json Logic ordenadas que alteram somente a apresenta\u00e7\u00e3o. Regras posteriores vencem.',
826
+ 'praxis.metadataEditor.presentationFields.quickViewVisible.label': 'Exibir no resumo Quick View',
827
+ 'praxis.metadataEditor.presentationFields.quickViewVisible.hint': 'Controla x-ui.quickViewVisible quando este recurso \u00e9 exibido em um card de Quick View.',
828
+ 'praxis.metadataEditor.presentationFields.quickViewOrder.label': 'Ordem no resumo Quick View',
829
+ 'praxis.metadataEditor.presentationFields.quickViewOrder.hint': 'Prioridade num\u00e9rica (x-ui.quickViewOrder) deste campo na s\u00edntese do card Quick View.',
830
+ 'praxis.metadataEditor.presentationFields.quickViewPreviewSurfaceId.label': 'Quick View: surface de preview',
831
+ 'praxis.metadataEditor.presentationFields.quickViewPreviewSurfaceId.hint': 'Surface read-only opcional dedicada ao card de Quick View deste v\u00ednculo (preserva o recordOpen can\u00f4nico do servidor).',
832
+ 'praxis.metadataEditor.presentationFields.quickViewDetailPresentation.label': 'Quick View: abertura de detalhe',
833
+ 'praxis.metadataEditor.presentationFields.quickViewDetailPresentation.hint': 'Define se o CTA prim\u00e1rio do Quick View abre a superf\u00edcie completa em drawer ou modal.',
834
+ 'praxis.metadataEditor.presentationFields.quickViewDetailPresentation.option.drawer': 'Gaveta lateral (drawer)',
835
+ 'praxis.metadataEditor.presentationFields.quickViewDetailPresentation.option.modal': 'Modal (dialog)',
816
836
  'praxis.metadataEditor.presentationChoice.help': 'Ajuda',
817
837
  'praxis.metadataEditor.presentationChoice.clear': 'Limpar sele\u00e7\u00e3o',
818
838
  'praxis.metadataEditor.presentationRulesBuilder.title': 'Regras de apresenta\u00e7\u00e3o',
@@ -4228,6 +4248,20 @@ const selectProperties = [
4228
4248
  { value: 'danger', text: 'Danger' },
4229
4249
  ],
4230
4250
  },
4251
+ {
4252
+ name: 'actions.showQuickView',
4253
+ label: 'Quick View: exibir botão',
4254
+ editorType: 'checkbox',
4255
+ group: 'Ações',
4256
+ hint: 'Controla o botão de visualização rápida quando um único item está selecionado e há vínculo governado (resourceReference / optionSource.detail).',
4257
+ },
4258
+ {
4259
+ name: 'quickViewActionLabel',
4260
+ label: 'Quick View: label da ação',
4261
+ editorType: 'text',
4262
+ group: 'Ações',
4263
+ hint: 'Rótulo acessível customizado para o botão de visualização rápida do item selecionado.',
4264
+ },
4231
4265
  // 7) Aparência
4232
4266
  {
4233
4267
  name: 'materialDesign.appearance',
@@ -4601,6 +4635,13 @@ const entityLookupProperties = [
4601
4635
  group: 'Display canonico',
4602
4636
  hint: 'Limite preferencial de badges antes de overflow.',
4603
4637
  },
4638
+ {
4639
+ name: 'optionSource.display.actions.showQuickView',
4640
+ label: 'Display: acao visualizacao rapida',
4641
+ editorType: 'checkbox',
4642
+ group: 'Display canonico',
4643
+ hint: 'Exibe ou oculta o gatilho de Quick View na projecao canonica de display do optionSource.',
4644
+ },
4604
4645
  {
4605
4646
  name: 'selectedLayout',
4606
4647
  label: 'Layout selecionado',
@@ -4929,6 +4970,13 @@ const entityLookupProperties = [
4929
4970
  ],
4930
4971
  hint: 'Use surface como contrato canonico de plataforma; route/href ficam como fallback legado.',
4931
4972
  },
4973
+ {
4974
+ name: 'optionSource.detail.resourceKey',
4975
+ label: 'ResourceKey de detalhe',
4976
+ editorType: 'text',
4977
+ group: 'Navegacao',
4978
+ hint: 'Chave canonica do recurso destino publicada pelo backend (ex.: human-resources.departamentos).',
4979
+ },
4932
4980
  {
4933
4981
  name: 'optionSource.detail.surfaceId',
4934
4982
  label: 'Surface de detalhe',
@@ -4936,6 +4984,13 @@ const entityLookupProperties = [
4936
4984
  group: 'Navegacao',
4937
4985
  hint: 'Id da surface item-level preferida. Ex.: view, detail.',
4938
4986
  },
4987
+ {
4988
+ name: 'optionSource.detail.previewSurfaceId',
4989
+ label: 'Surface de preview (Quick View)',
4990
+ editorType: 'text',
4991
+ group: 'Navegacao',
4992
+ hint: 'Surface read-only opcional dedicada ao card de Quick View; quando ausente, usa surfaceId.',
4993
+ },
4939
4994
  {
4940
4995
  name: 'optionSource.detail.presentation',
4941
4996
  label: 'Apresentacao da surface',
@@ -5066,6 +5121,13 @@ const entityLookupProperties = [
5066
5121
  editorType: 'text',
5067
5122
  group: 'Acoes do lookup',
5068
5123
  },
5124
+ {
5125
+ name: 'quickViewActionLabel',
5126
+ label: 'Label visualizacao rapida',
5127
+ editorType: 'text',
5128
+ group: 'Acoes do lookup',
5129
+ hint: 'Rotulo customizado para o botao/acao de Quick View do registro selecionado.',
5130
+ },
5069
5131
  {
5070
5132
  name: 'changeActionLabel',
5071
5133
  label: 'Label trocar',
@@ -5102,6 +5164,13 @@ const entityLookupProperties = [
5102
5164
  editorType: 'checkbox',
5103
5165
  group: 'Acoes do lookup',
5104
5166
  },
5167
+ {
5168
+ name: 'actions.showQuickView',
5169
+ label: 'Acao: visualizacao rapida',
5170
+ editorType: 'checkbox',
5171
+ group: 'Acoes do lookup',
5172
+ hint: 'Exibe ou oculta o gatilho de Quick View quando houver target governado (resourceReference ou optionSource.detail).',
5173
+ },
5105
5174
  {
5106
5175
  name: 'actions.showChange',
5107
5176
  label: 'Acao: trocar',
@@ -8754,6 +8823,58 @@ const fieldPresentationProperties = [
8754
8823
  hint: 'Builder guiado para regras Json Logic ordenadas que alteram somente a apresentação. Regras posteriores vencem.',
8755
8824
  hintKey: 'presentationFields.presentationRules.hint',
8756
8825
  },
8826
+ {
8827
+ name: 'quickViewVisible',
8828
+ label: 'Exibir no resumo Quick View',
8829
+ labelKey: 'presentationFields.quickViewVisible.label',
8830
+ editorType: 'checkbox',
8831
+ group: 'Apresentação',
8832
+ groupKey: 'presentationFields.group',
8833
+ hint: 'Controla x-ui.quickViewVisible quando este recurso é exibido em um card de Quick View.',
8834
+ hintKey: 'presentationFields.quickViewVisible.hint',
8835
+ },
8836
+ {
8837
+ name: 'quickViewOrder',
8838
+ label: 'Ordem no resumo Quick View',
8839
+ labelKey: 'presentationFields.quickViewOrder.label',
8840
+ editorType: 'number',
8841
+ group: 'Apresentação',
8842
+ groupKey: 'presentationFields.group',
8843
+ hint: 'Prioridade numérica (x-ui.quickViewOrder) deste campo na síntese do card Quick View.',
8844
+ hintKey: 'presentationFields.quickViewOrder.hint',
8845
+ },
8846
+ {
8847
+ name: 'quickView.previewSurfaceId',
8848
+ label: 'Quick View: surface de preview',
8849
+ labelKey: 'presentationFields.quickViewPreviewSurfaceId.label',
8850
+ editorType: 'text',
8851
+ group: 'Apresentação',
8852
+ groupKey: 'presentationFields.group',
8853
+ hint: 'Surface read-only opcional dedicada ao card de Quick View deste vínculo (preserva o recordOpen canônico do servidor).',
8854
+ hintKey: 'presentationFields.quickViewPreviewSurfaceId.hint',
8855
+ },
8856
+ {
8857
+ name: 'quickView.detailPresentation',
8858
+ label: 'Quick View: abertura de detalhe',
8859
+ labelKey: 'presentationFields.quickViewDetailPresentation.label',
8860
+ editorType: 'select',
8861
+ group: 'Apresentação',
8862
+ groupKey: 'presentationFields.group',
8863
+ options: [
8864
+ {
8865
+ value: 'drawer',
8866
+ text: 'Gaveta lateral (drawer)',
8867
+ textKey: 'presentationFields.quickViewDetailPresentation.option.drawer',
8868
+ },
8869
+ {
8870
+ value: 'modal',
8871
+ text: 'Modal (dialog)',
8872
+ textKey: 'presentationFields.quickViewDetailPresentation.option.modal',
8873
+ },
8874
+ ],
8875
+ hint: 'Define se o CTA primário do Quick View abre a superfície completa em drawer ou modal.',
8876
+ hintKey: 'presentationFields.quickViewDetailPresentation.hint',
8877
+ },
8757
8878
  ];
8758
8879
 
8759
8880
  /** Garante que minLength <= maxLength quando ambos definidos. */
@@ -11904,6 +12025,18 @@ class FieldMetadataEditorComponent {
11904
12025
  this.normalizeJsonObjectProperty(patch, 'valuePresentation');
11905
12026
  this.normalizeJsonObjectProperty(patch, 'presentation');
11906
12027
  this.normalizeJsonArrayProperty(patch, 'presentationRules');
12028
+ const seedRecordOpen = this.seed?.quickView?.recordOpen;
12029
+ if (patch?.quickView &&
12030
+ typeof patch.quickView === 'object' &&
12031
+ !Array.isArray(patch.quickView) &&
12032
+ seedRecordOpen &&
12033
+ typeof seedRecordOpen === 'object' &&
12034
+ patch.quickView.recordOpen === undefined) {
12035
+ patch.quickView = {
12036
+ recordOpen: this.cloneSnapshot(seedRecordOpen),
12037
+ ...patch.quickView,
12038
+ };
12039
+ }
11907
12040
  }
11908
12041
  normalizeEntityLookupPatchValues(patch) {
11909
12042
  const optionSource = patch?.optionSource;
@@ -14567,6 +14700,44 @@ const BASE_CAPABILITIES = [
14567
14700
  description: 'Ordered Json Logic presentation rules edited by a guided builder for common conditions and semantic visual effects.',
14568
14701
  safetyNotes: 'Rules may only affect tone, icon, label, badge, appearance and tooltip; they must not mutate submitted values or execute commands.',
14569
14702
  },
14703
+ {
14704
+ path: 'seed.quickViewVisible',
14705
+ category: 'appearance',
14706
+ valueKind: 'boolean',
14707
+ description: 'Whether this field is shown in Resource Quick View summary items when the resource is previewed.',
14708
+ },
14709
+ {
14710
+ path: 'seed.quickViewOrder',
14711
+ category: 'layout',
14712
+ valueKind: 'number',
14713
+ description: 'Numeric ordering priority for this field inside Resource Quick View summary items.',
14714
+ },
14715
+ {
14716
+ path: 'seed.quickView.previewSurfaceId',
14717
+ category: 'behavior',
14718
+ valueKind: 'string',
14719
+ description: 'Optional dedicated read-only surfaceId used to hydrate the Quick View card while preserving the canonical server recordOpen target.',
14720
+ safetyNotes: 'Must only refine the preview surface; never override backend-owned recordOpen.target.resourceKey or surfaceId.',
14721
+ },
14722
+ {
14723
+ path: 'seed.quickView.detailPresentation',
14724
+ category: 'layout',
14725
+ valueKind: 'enum',
14726
+ allowedValues: ['drawer', 'modal'],
14727
+ description: 'Preferred presentation mode (drawer or modal) when handing off from Quick View to the full detail surface.',
14728
+ },
14729
+ {
14730
+ path: 'seed.quickViewActionLabel',
14731
+ category: 'identity',
14732
+ valueKind: 'string',
14733
+ description: 'Accessible custom label for the Quick View trigger action on lookup and select controls.',
14734
+ },
14735
+ {
14736
+ path: 'seed.actions.showQuickView',
14737
+ category: 'behavior',
14738
+ valueKind: 'boolean',
14739
+ description: 'Controls whether the explicit Quick View action button is shown when a governed reference target is present.',
14740
+ },
14570
14741
  {
14571
14742
  path: 'seed.shortcuts',
14572
14743
  category: 'behavior',
@@ -14623,6 +14794,12 @@ const fieldMetadataPropertySchema = {
14623
14794
  'presentation.badge',
14624
14795
  'presentation.tooltip',
14625
14796
  'presentationRules',
14797
+ 'quickViewVisible',
14798
+ 'quickViewOrder',
14799
+ 'quickViewActionLabel',
14800
+ 'actions.showQuickView',
14801
+ 'quickView.previewSurfaceId',
14802
+ 'quickView.detailPresentation',
14626
14803
  'options',
14627
14804
  'optionSource',
14628
14805
  'validators',
@@ -14661,13 +14838,21 @@ const optionSourceSchema = {
14661
14838
  secondaryPropertyPaths: { type: 'array' },
14662
14839
  badgePropertyPaths: { type: 'array' },
14663
14840
  statusToneMap: { type: 'object' },
14841
+ actions: {
14842
+ type: 'object',
14843
+ properties: {
14844
+ showQuickView: { type: 'boolean' },
14845
+ },
14846
+ },
14664
14847
  },
14665
14848
  },
14666
14849
  detail: {
14667
14850
  type: 'object',
14668
14851
  properties: {
14669
14852
  kind: { enum: ['surface', 'route', 'href'] },
14853
+ resourceKey: { type: 'string' },
14670
14854
  surfaceId: { type: 'string' },
14855
+ previewSurfaceId: { type: 'string' },
14671
14856
  presentation: { enum: ['drawer', 'modal'] },
14672
14857
  preferredWidget: { type: 'string' },
14673
14858
  mode: { enum: ['view', 'edit', 'create'] },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/metadata-editor",
3
- "version": "10.0.0-rc.40",
3
+ "version": "10.0.0-rc.42",
4
4
  "description": "Metadata editor for Praxis UI fields and components with runtime integration.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
@@ -8,10 +8,10 @@
8
8
  "@angular/cdk": "^21.0.0",
9
9
  "@angular/forms": "^21.0.0",
10
10
  "@angular/material": "^21.0.0",
11
- "@praxisui/ai": "^10.0.0-rc.40",
12
- "@praxisui/core": "^10.0.0-rc.40",
13
- "@praxisui/dynamic-fields": "^10.0.0-rc.40",
14
- "@praxisui/settings-panel": "^10.0.0-rc.40",
11
+ "@praxisui/ai": "^10.0.0-rc.42",
12
+ "@praxisui/core": "^10.0.0-rc.42",
13
+ "@praxisui/dynamic-fields": "^10.0.0-rc.42",
14
+ "@praxisui/settings-panel": "^10.0.0-rc.42",
15
15
  "rxjs": "~7.8.0"
16
16
  },
17
17
  "dependencies": {