@praxisui/core 9.0.23 → 9.0.25
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/ai/component-registry.json +64 -54
- package/fesm2022/praxisui-core.mjs +79 -10
- package/package.json +1 -1
- package/types/praxisui-core.d.ts +12 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-08-
|
|
3
|
+
"generatedAt": "2026-08-26T20:18:42.419Z",
|
|
4
4
|
"packageName": "@praxisui/core",
|
|
5
|
-
"packageVersion": "9.0.
|
|
5
|
+
"packageVersion": "9.0.25",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 4,
|
|
@@ -4151,9 +4151,9 @@
|
|
|
4151
4151
|
{
|
|
4152
4152
|
"chunkIndex": 117,
|
|
4153
4153
|
"chunkKind": "recipe",
|
|
4154
|
-
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"
|
|
4154
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"themePreset\":\"executive-command-center\",\"i18n\":{\"fallbackLocale\":\"en-US\",\"dictionaries\":{\"en-US\":{\"mission.chart.shell.title\":\"Mission status mix\",\"mission.chart.shell.subtitle\":\"Remote stats projection from the published quickstart\",\"mission.chart.dimension.status\":\"Status\",\"mission.chart.metric.missions\":\"Missions\",\"mission.portfolio.shell.title\":\"Mission portfolio\",\"mission.portfolio.shell.subtitle\":\"Aggregated mission status and threat context\",\"mission.portfolio.toolbar.title\":\"Mission portfolio\",\"mission.workflow.shell.title\":\"Workflow actions\",\"mission.workflow.shell.subtitle\":\"Host-mediated actions declared by the mission controller contract\",\"mission.workflow.toolbar.title\":\"Mission workflow\",\"mission.discovery.surfaces\":\"Surfaces\",\"mission.discovery.actions\":\"Actions\",\"mission.column.mission\":\"Mission\",\"mission.column.status\":\"Status\",\"mission.column.priority\":\"Priority\",\"mission.column.threat\":\"Threat\",\"mission.column.workflow\":\"Workflow\",\"mission.action.start\":\"Start\",\"mission.action.pause\":\"Pause\",\"mission.action.resume\":\"Resume\",\"mission.action.complete\":\"Complete\",\"mission.team.shell.title\":\"Mission team\",\"mission.team.shell.subtitle\":\"Participants, roles and outcomes\",\"mission.team.toolbar.title\":\"Mission team\",\"mission.column.order\":\"Order\",\"mission.column.hero\":\"Hero\",\"mission.column.role\":\"Role\",\"mission.column.outcome\":\"Outcome\",\"mission.timeline.shell.title\":\"Mission timeline\",\"mission.timeline.shell.subtitle\":\"Governed event surface for selected mission\",\"mission.timeline.toolbar.title\":\"Mission timeline\",\"mission.column.type\":\"Type\",\"mission.column.event\":\"Event\",\"mission.column.occurredAt\":\"Occurred at\"},\"pt-BR\":{\"mission.chart.shell.title\":\"Distribuição de status das missões\",\"mission.chart.shell.subtitle\":\"Projeção remota de estatísticas do quickstart publicado\",\"mission.chart.dimension.status\":\"Status\",\"mission.chart.metric.missions\":\"Missões\",\"mission.portfolio.shell.title\":\"Portfólio de missões\",\"mission.portfolio.shell.subtitle\":\"Contexto agregado de status e ameaças das missões\",\"mission.portfolio.toolbar.title\":\"Portfólio de missões\",\"mission.workflow.shell.title\":\"Ações do fluxo\",\"mission.workflow.shell.subtitle\":\"Ações mediadas pelo host e declaradas pelo contrato do controlador de missões\",\"mission.workflow.toolbar.title\":\"Fluxo da missão\",\"mission.discovery.surfaces\":\"Superfícies\",\"mission.discovery.actions\":\"Ações\",\"mission.column.mission\":\"Missão\",\"mission.column.status\":\"Status\",\"mission.column.priority\":\"Prioridade\",\"mission.column.threat\":\"Ameaça\",\"mission.column.workflow\":\"Fluxo\",\"mission.action.start\":\"Iniciar\",\"mission.action.pause\":\"Pausar\",\"mission.action.resume\":\"Retomar\",\"mission.action.complete\":\"Concluir\",\"mission.team.shell.title\":\"Equipe da missão\",\"mission.team.shell.subtitle\":\"Participantes, papéis e resultados\",\"mission.team.toolbar.title\":\"Equipe da missão\",\"mission.column.order\":\"Ordem\",\"mission.column.hero\":\"Herói\",\"mission.column.role\":\"Papel\",\"mission.column.outcome\":\"Resultado\",\"mission.timeline.shell.title\":\"Linha do tempo da missão\",\"mission.timeline.shell.subtitle\":\"Superfície governada de eventos da missão selecionada\",\"mission.timeline.toolbar.title\":\"Linha do tempo da missão\",\"mission.column.type\":\"Tipo\",\"mission.column.event\":\"Evento\",\"mission.column.occurredAt\":\"Ocorrido em\"}}},\"layout\":{\"orientation\":\"columns\",\"columns\":3,\"gap\":\"16px\"},\"deviceLayouts\":{\"tablet\":{\"layout\":{\"orientation\":\"columns\",\"columns\":2,\"gap\":\"14px\"}},\"mobile\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"12px\"}}},\"state\":{\"values\":{\"selection\":{\"missionId\":1}}}}}",
|
|
4155
4155
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
|
|
4156
|
-
"contentHash": "
|
|
4156
|
+
"contentHash": "ba8a5f17e0cca605c2bc561650129424bfea90f3265869813b54647e43d8bdc9",
|
|
4157
4157
|
"sourceKind": "component_definition",
|
|
4158
4158
|
"sourceId": "praxis-dynamic-page",
|
|
4159
4159
|
"corpusVersion": "1.0.0"
|
|
@@ -4161,6 +4161,16 @@
|
|
|
4161
4161
|
{
|
|
4162
4162
|
"chunkIndex": 118,
|
|
4163
4163
|
"chunkKind": "recipe",
|
|
4164
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"widgets\":[{\"key\":\"missionStatusChart\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"bar_chart\",\"title\":{\"key\":\"mission.chart.shell.title\",\"text\":\"Mission status mix\"},\"subtitle\":{\"key\":\"mission.chart.shell.subtitle\",\"text\":\"Remote stats projection from the published quickstart\"}},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"mission-status-mix\",\"kind\":\"horizontal-bar\",\"orientation\":\"horizontal\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/operations/vw-resumo-missoes\",\"operation\":\"group-by\",\"options\":{\"limit\":10,\"orderBy\":\"key-asc\"}},\"dimensions\":[{\"field\":\"status\",\"label\":{\"key\":\"mission.chart.dimension.status\",\"text\":\"Status\"},\"role\":\"category\"}],\"metrics\":[{\"field\":\"missions\",\"label\":{\"key\":\"mission.chart.metric.missions\",\"text\":\"Missions\"},\"aggregation\":\"count\"}],\"events\":{\"pointClick\":{\"action\":\"emit\"},\"selectionChange\":{\"action\":\"emit\",\"mapping\":{\"status\":\"status\"}},\"crossFilter\":{\"action\":\"filter-widget\",\"target\":\"missionSummary\",\"mapping\":{\"status\":\"status\"}}},\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true},\"theme\":{\"surface\":{\"mode\":\"embedded\"}}}},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"crossFilter\":\"emit\"}}},{\"key\":\"missionSummary\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"radar\",\"title\":{\"key\":\"mission.portfolio.shell.title\",\"text\":\"Mission portfolio\"},\"subtitle\":{\"key\":\"mission.portfolio.shell.subtitle\",\"text\":\"Aggregated mission status and threat context\"}},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\"],\"inputs\":{\"resourcePath\":\"operations/vw-resumo-missoes\",\"tableId\":\"operations-vw-resumo-missoes-command-center\",\"config\":{\"meta\":{\"idField\":\"missaoId\"},\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"mission.portfolio.toolbar.title\",\"text\":\"Mission portfolio\"},\"actions\":[{\"id\":\"inspect-surfaces\",\"label\":{\"key\":\"mission.discovery.surfaces\",\"text\":\"Surfaces\"},\"icon\":\"layers\",\"action\":\"inspect-surfaces\",\"discovery\":{\"rel\":\"surfaces\",\"scope\":\"resource\",\"resourcePath\":\"operations/vw-resumo-missoes\",\"resourceKey\":\"operations.vw-resumo-missoes\"}},{\"id\":\"inspect-actions\",\"label\":{\"key\":\"mission.discovery.actions\",\"text\":\"Actions\"},\"icon\":\"bolt\",\"action\":\"inspect-actions\",\"discovery\":{\"rel\":\"actions\",\"scope\":\"resource\",\"resourcePath\":\"operations/vw-resumo-missoes\",\"resourceKey\":\"operations.vw-resumo-missoes\"}}]},\"columns\":[{\"field\":\"titulo\",\"header\":{\"key\":\"mission.column.mission\",\"text\":\"Mission\"},\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"status\",\"header\":{\"key\":\"mission.column.status\",\"text\":\"Status\"},\"type\":\"badge\"},{\"field\":\"prioridade\",\"header\":{\"key\":\"mission.column.priority\",\"text\":\"Priority\"},\"type\":\"badge\"},{\"field\":\"ameaca\",\"header\":{\"key\":\"mission.column.threat\",\"text\":\"Threat\"},\"type\":\"text\"}],\"behavior\":{\"selection\":{\"enabled\":true,\"type\":\"single\"}}}},\"outputs\":{\"rowClick\":\"emit\",\"toolbarAction\":\"emit\"}}},{\"key\":\"missionWorkflow\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"bolt\",\"title\":{\"key\":\"mission.workflow.shell.title\",\"text\":\"Workflow actions\"},\"subtitle\":{\"key\":\"mission.workflow.shell.subtitle\",\"text\":\"Host-mediated actions declared by the mission controller contract\"}},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\",\"queryContext\"],\"inputs\":{\"resourcePath\":\"operations/missoes\",\"tableId\":\"operations-missoes-workflow-actions\",\"queryContext\":{\"filters\":{}},\"config\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"mission.workflow.toolbar.title\",\"text\":\"Mission workflow\"},\"actions\":[{\"id\":\"inspect-surfaces\",\"label\":{\"key\":\"mission.discovery.surfaces\",\"text\":\"Surfaces\"},\"icon\":\"layers\",\"action\":\"inspect-surfaces\",\"discovery\":{\"rel\":\"surfaces\",\"scope\":\"resource\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}},{\"id\":\"inspect-actions\",\"label\":{\"key\":\"mission.discovery.actions\",\"text\":\"Actions\"},\"icon\":\"bolt\",\"action\":\"inspect-actions\",\"discovery\":{\"rel\":\"actions\",\"scope\":\"resource\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}}]},\"actions\":{\"row\":{\"enabled\":true,\"display\":\"buttons\",\"width\":\"360px\",\"maxVisibleActions\":3,\"behavior\":{\"maxInline\":3},\"position\":\"end\",\"header\":{\"label\":{\"key\":\"mission.column.workflow\",\"text\":\"Workflow\"},\"icon\":\"bolt\"},\"actions\":[{\"id\":\"start\",\"action\":\"start\",\"label\":{\"key\":\"mission.action.start\",\"text\":\"Start\"},\"icon\":\"play_arrow\",\"visibleWhen\":{\"===\":[{\"var\":\"status\"},\"PLANEJADA\"]},\"endpoint\":{\"method\":\"POST\",\"pathTemplate\":\"/api/operations/missoes/{id}/actions/start\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}},{\"id\":\"pause\",\"action\":\"pause\",\"label\":{\"key\":\"mission.action.pause\",\"text\":\"Pause\"},\"icon\":\"pause\",\"visibleWhen\":{\"===\":[{\"var\":\"status\"},\"EM_ANDAMENTO\"]},\"endpoint\":{\"method\":\"POST\",\"pathTemplate\":\"/api/operations/missoes/{id}/actions/pause\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}},{\"id\":\"resume\",\"action\":\"resume\",\"label\":{\"key\":\"mission.action.resume\",\"text\":\"Resume\"},\"icon\":\"replay\",\"visibleWhen\":{\"===\":[{\"var\":\"status\"},\"PAUSADA\"]},\"endpoint\":{\"method\":\"POST\",\"pathTemplate\":\"/api/operations/missoes/{id}/actions/resume\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}},{\"id\":\"complete\",\"action\":\"complete\",\"label\":{\"key\":\"mission.action.complete\",\"text\":\"Complete\"},\"icon\":\"task_alt\",\"visibleWhen\":{\"===\":[{\"var\":\"status\"},\"EM_ANDAMENTO\"]},\"endpoint\":{\"method\":\"POST\",\"pathTemplate\":\"/api/operations/missoes/{id}/actions/complete\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}}]}},\"behavior\":{\"selection\":{\"enabled\":true,\"type\":\"single\"}}}},\"outputs\":{\"rowClick\":\"emit\",\"rowAction\":\"emit\",\"toolbarAction\":\"emit\"}}},{\"key\":\"missionTeam\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"groups\",\"title\":{\"key\":\"mission.team.shell.title\",\"text\":\"Mission team\"},\"subtitle\":{\"key\":\"mission.team.shell.subtitle\",\"text\":\"Participants, roles and outcomes\"}},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\",\"queryContext\"],\"inputs\":{\"resourcePath\":\"operations/missao-participantes\",\"tableId\":\"operations-missao-participantes-command-center\",\"queryContext\":{\"filters\":{\"missaoId\":1}},\"config\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"mission.team.toolbar.title\",\"text\":\"Mission team\"}},\"columns\":[{\"field\":\"ordem\",\"header\":{\"key\":\"mission.column.order\",\"text\":\"Order\"},\"type\":\"number\"},{\"field\":\"funcionarioNome\",\"header\":{\"key\":\"mission.column.hero\",\"text\":\"Hero\"},\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"papel\",\"header\":{\"key\":\"mission.column.role\",\"text\":\"Role\"},\"type\":\"badge\"},{\"field\":\"resultado\",\"header\":{\"key\":\"mission.column.outcome\",\"text\":\"Outcome\"},\"type\":\"badge\"}]}},\"outputs\":{\"rowClick\":\"emit\",\"toolbarAction\":\"emit\"}}},{\"key\":\"missionTimeline\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"timeline\",\"title\":{\"key\":\"mission.timeline.shell.title\",\"text\":\"Mission timeline\"},\"subtitle\":{\"key\":\"mission.timeline.shell.subtitle\",\"text\":\"Governed event surface for selected mission\"}},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\",\"queryContext\"],\"inputs\":{\"resourcePath\":\"operations/missao-eventos\",\"tableId\":\"operations-missao-eventos-command-center\",\"queryContext\":{\"filters\":{\"missaoId\":1}},\"config\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"mission.timeline.toolbar.title\",\"text\":\"Mission timeline\"}},\"columns\":[{\"field\":\"ordem\",\"header\":{\"key\":\"mission.column.order\",\"text\":\"Order\"},\"type\":\"number\"},{\"field\":\"tipo\",\"header\":{\"key\":\"mission.column.type\",\"text\":\"Type\"},\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"descricao\",\"header\":{\"key\":\"mission.column.event\",\"text\":\"Event\"},\"type\":\"text\"},{\"field\":\"ocorridoEm\",\"header\":{\"key\":\"mission.column.occurredAt\",\"text\":\"Occurred at\"},\"type\":\"date-time\"}]}},\"outputs\":{\"rowClick\":\"emit\",\"toolbarAction\":\"emit\"}}}]}}",
|
|
4165
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
|
|
4166
|
+
"contentHash": "56515ba0fd2d01247106707be40f2385a881d9b706a0657ee2db483e8fd01be3",
|
|
4167
|
+
"sourceKind": "component_definition",
|
|
4168
|
+
"sourceId": "praxis-dynamic-page",
|
|
4169
|
+
"corpusVersion": "1.0.0"
|
|
4170
|
+
},
|
|
4171
|
+
{
|
|
4172
|
+
"chunkIndex": 119,
|
|
4173
|
+
"chunkKind": "recipe",
|
|
4164
4174
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"composition\":{\"version\":\"1.0.0\",\"links\":[{\"id\":\"missions:status-chart-crossFilter->summary.queryContext\",\"intent\":\"data-projection\",\"from\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"missionStatusChart\",\"port\":\"crossFilter\",\"direction\":\"output\",\"componentType\":\"praxis-chart\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"missionSummary\",\"port\":\"queryContext\",\"direction\":\"input\",\"componentType\":\"praxis-table\"}},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"object-fragment\",\"sourceBindings\":[{\"source\":\"event\"}],\"steps\":[{\"id\":\"missions:pick-status-filter-for-summary\",\"kind\":\"object-template\",\"phase\":\"link-propagation\",\"input\":{\"source\":\"event\"},\"config\":{\"template\":{\"filters\":{\"status\":\"${payload.filters.status}\"}}}}]}},{\"id\":\"missions:summary-rowClick->state:selection.missionId\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"missionSummary\",\"port\":\"rowClick\",\"direction\":\"output\",\"componentType\":\"praxis-table\"}},\"to\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.missionId\",\"layer\":\"values\",\"writable\":true}},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"single-value\",\"sourceBindings\":[{\"source\":\"event\"}],\"steps\":[{\"id\":\"missions:pick-mission-id\",\"kind\":\"pick-path\",\"phase\":\"link-propagation\",\"input\":{\"source\":\"event\"},\"config\":{\"path\":\"payload.row.id\"}}]}},{\"id\":\"missions:state:selection.missionId->team.queryContext\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.missionId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"missionTeam\",\"port\":\"queryContext\",\"direction\":\"input\",\"componentType\":\"praxis-table\"}},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"object-fragment\",\"sourceBindings\":[{\"source\":\"state\",\"path\":\"selection.missionId\"}],\"steps\":[{\"id\":\"missions:mission-id-to-team-filter\",\"kind\":\"object-template\",\"phase\":\"link-propagation\",\"config\":{\"template\":{\"filters\":{\"missaoId\":\"${source}\"}}}}]}},{\"id\":\"missions:state:selection.missionId->timeline.queryContext\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.missionId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"missionTimeline\",\"port\":\"queryContext\",\"direction\":\"input\",\"componentType\":\"praxis-table\"}},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"object-fragment\",\"sourceBindings\":[{\"source\":\"state\",\"path\":\"selection.missionId\"}],\"steps\":[{\"id\":\"missions:mission-id-to-timeline-filter\",\"kind\":\"object-template\",\"phase\":\"link-propagation\",\"config\":{\"template\":{\"filters\":{\"missaoId\":\"${source}\"}}}}]}}]}}}",
|
|
4165
4175
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
|
|
4166
4176
|
"contentHash": "0725c170f0f5c55f12a92c5d2e69aadbf8264ad8ece1e284cd2a742ee9be9cd3",
|
|
@@ -4169,7 +4179,7 @@
|
|
|
4169
4179
|
"corpusVersion": "1.0.0"
|
|
4170
4180
|
},
|
|
4171
4181
|
{
|
|
4172
|
-
"chunkIndex":
|
|
4182
|
+
"chunkIndex": 120,
|
|
4173
4183
|
"chunkKind": "recipe",
|
|
4174
4184
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment\",\"_comment\":\"Golden recipe for nested component ports in Praxis Dynamic Page.\"}",
|
|
4175
4185
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4179,7 +4189,7 @@
|
|
|
4179
4189
|
"corpusVersion": "1.0.0"
|
|
4180
4190
|
},
|
|
4181
4191
|
{
|
|
4182
|
-
"chunkIndex":
|
|
4192
|
+
"chunkIndex": 121,
|
|
4183
4193
|
"chunkKind": "recipe",
|
|
4184
4194
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment2\",\"_comment2\":\"Use only composition.links with component-port + nestedPath; do not use page.connections, bindingPath or widgetEvent as the final contract.\"}",
|
|
4185
4195
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4189,7 +4199,7 @@
|
|
|
4189
4199
|
"corpusVersion": "1.0.0"
|
|
4190
4200
|
},
|
|
4191
4201
|
{
|
|
4192
|
-
"chunkIndex":
|
|
4202
|
+
"chunkIndex": 122,
|
|
4193
4203
|
"chunkKind": "recipe",
|
|
4194
4204
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"nested-path-showcase\",\"status\":\"golden-fixture\",\"useWhen\":\"Create a dynamic page that demonstrates canonical nested component ports through an operational mission command workspace.\",\"examplePrompts\":[\"create a nestedPath example where selecting a mission updates summary, team and timeline tabs\",\"build a dynamic page using component-port nestedPath against the published operations quickstart\"]}}",
|
|
4195
4205
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4199,7 +4209,7 @@
|
|
|
4199
4209
|
"corpusVersion": "1.0.0"
|
|
4200
4210
|
},
|
|
4201
4211
|
{
|
|
4202
|
-
"chunkIndex":
|
|
4212
|
+
"chunkIndex": 123,
|
|
4203
4213
|
"chunkKind": "recipe",
|
|
4204
4214
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"platformValue\",\"platformValue\":{\"canonicalContract\":\"@praxisui/core owns CompositionLink, component-port endpoints, nestedPath, runtime delivery, validation and serialization.\",\"referenceApi\":\"praxis-api-quickstart exposes operations.missoes with summary, team, timeline, actions and capabilities on Render.\",\"angularRuntime\":\"Tabs own nested widget placement; child components keep their own public ports.\",\"businessFlow\":\"A selected mission becomes the shared state that drives downstream summary and team tables plus a rich-content timeline.\"}}",
|
|
4205
4215
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4209,7 +4219,7 @@
|
|
|
4209
4219
|
"corpusVersion": "1.0.0"
|
|
4210
4220
|
},
|
|
4211
4221
|
{
|
|
4212
|
-
"chunkIndex":
|
|
4222
|
+
"chunkIndex": 124,
|
|
4213
4223
|
"chunkKind": "recipe",
|
|
4214
4224
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"operationalEvidence\",\"operationalEvidence\":{\"baseUrl\":\"https://praxis-api-quickstart.onrender.com\",\"resources\":[\"api/operations/missoes\",\"api/operations/vw-resumo-missoes\",\"api/operations/missao-participantes\"],\"safeFirstIds\":[\"schemas-surfaces-operations-missoes\",\"schemas-actions-operations-missoes\",\"operations-missoes-item-capabilities\",\"vw-resumo-missoes-filter-basic\",\"missao-participantes-stats-papel\"]}}",
|
|
4215
4225
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4219,7 +4229,7 @@
|
|
|
4219
4229
|
"corpusVersion": "1.0.0"
|
|
4220
4230
|
},
|
|
4221
4231
|
{
|
|
4222
|
-
"chunkIndex":
|
|
4232
|
+
"chunkIndex": 125,
|
|
4223
4233
|
"chunkKind": "recipe",
|
|
4224
4234
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringGuidance\",\"authoringGuidance\":[\"Persist links only under page.composition.links.\",\"Use ref.kind component-port with ref.nestedPath for ports owned by nested child widgets.\",\"Every persisted nestedPath must end with a widget segment containing stable key and componentType.\",\"Use state links as the bridge between nested outputs and other nested inputs when the value must be shared.\",\"Keep resourcePath values as backend resource paths; the host API_URL supplies the Render origin.\"]}",
|
|
4225
4235
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4229,7 +4239,7 @@
|
|
|
4229
4239
|
"corpusVersion": "1.0.0"
|
|
4230
4240
|
},
|
|
4231
4241
|
{
|
|
4232
|
-
"chunkIndex":
|
|
4242
|
+
"chunkIndex": 126,
|
|
4233
4243
|
"chunkKind": "recipe",
|
|
4234
4244
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"teaches\",\"teaches\":[\"composition.links\",\"component-port.nestedPath\",\"tabs.nested-widgets\",\"table.rowClick.state-write\",\"state-read.nested-input\",\"rich-content.timeline\",\"transform.object-template\",\"lazy-mounted-input.delivery\"]}",
|
|
4235
4245
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4239,7 +4249,7 @@
|
|
|
4239
4249
|
"corpusVersion": "1.0.0"
|
|
4240
4250
|
},
|
|
4241
4251
|
{
|
|
4242
|
-
"chunkIndex":
|
|
4252
|
+
"chunkIndex": 127,
|
|
4243
4253
|
"chunkKind": "recipe",
|
|
4244
4254
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"state\":{\"values\":{\"selection\":{\"missionId\":1,\"missionTitle\":\"Batalha de Nova York\"}}},\"widgets\":[{\"key\":\"missionNestedWorkspace\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"account_tree\",\"title\":\"Mission command nestedPath workspace\",\"subtitle\":\"Select a mission once; summary, team and timeline tabs receive mission context through component-port + nestedPath\"},\"definition\":{\"id\":\"praxis-tabs\",\"bindingOrder\":[\"tabsId\",\"componentInstanceId\",\"config\",\"selectedIndex\"],\"inputs\":{\"tabsId\":\"nested-path-mission-workspace\",\"componentInstanceId\":\"nested-path-mission-workspace\",\"selectedIndex\":0,\"config\":{\"appearance\":{\"density\":\"comfortable\",\"dynamicHeight\":true,\"fitInkBarToContent\":true},\"behavior\":{\"lazyLoad\":true,\"reorderable\":false,\"closeable\":false},\"tabs\":[{\"id\":\"missions\",\"textLabel\":\"Select mission\",\"icon\":\"radar\",\"widgets\":[{\"id\":\"praxis-table\",\"childWidgetKey\":\"missions-table\",\"bindingOrder\":[\"tableId\",\"resourcePath\",\"config\"],\"inputs\":{\"tableId\":\"nested-path-missions-table\",\"resourcePath\":\"operations/missoes\",\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"Mission portfolio\",\"search\":{\"enabled\":true,\"placeholder\":\"Search by title, threat or location\"},\"layout\":{\"alignment\":\"space-between\",\"showSeparator\":true},\"actions\":[{\"id\":\"inspect-surfaces\",\"label\":\"Surfaces\",\"icon\":\"layers\",\"action\":\"inspect-surfaces\",\"discovery\":{\"rel\":\"surfaces\",\"scope\":\"resource\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}},{\"id\":\"inspect-actions\",\"label\":\"Actions\",\"icon\":\"bolt\",\"action\":\"inspect-actions\",\"discovery\":{\"rel\":\"actions\",\"scope\":\"resource\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}}]},\"columns\":[{\"field\":\"id\",\"header\":\"ID\",\"width\":\"80px\",\"align\":\"center\"},{\"field\":\"titulo\",\"header\":\"Mission\",\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"status\",\"header\":\"Status\",\"type\":\"badge\"},{\"field\":\"prioridade\",\"header\":\"Priority\",\"type\":\"badge\"},{\"field\":\"local\",\"header\":\"Location\",\"type\":\"text\"},{\"field\":\"ameacaNome\",\"header\":\"Threat\",\"type\":\"text\"}],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":10,\"pageSizeOptions\":[10,25,50],\"position\":\"bottom\"},\"sorting\":{\"enabled\":true,\"strategy\":\"server\",\"defaultSort\":{\"column\":\"id\",\"direction\":\"asc\"}},\"filtering\":{\"enabled\":true,\"strategy\":\"server\",\"advancedFilters\":{\"enabled\":true,\"fields\":[\"titulo\",\"status\",\"prioridade\",\"local\"]}},\"selection\":{\"enabled\":true,\"type\":\"single\",\"mode\":\"row\",\"persistSelection\":false}}}},\"outputs\":{\"rowClick\":\"emit\",\"selectionChange\":\"emit\",\"toolbarAction\":\"emit\"}}]},{\"id\":\"summary\",\"textLabel\":\"Summary\",\"icon\":\"groups\",\"widgets\":[{\"id\":\"praxis-table\",\"childWidgetKey\":\"mission-summary-table\",\"bindingOrder\":[\"tableId\",\"resourcePath\",\"queryContext\",\"config\"],\"inputs\":{\"tableId\":\"nested-path-mission-summary-table\",\"resourcePath\":\"operations/vw-resumo-missoes\",\"queryContext\":{\"filters\":{\"missaoId\":1}},\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"Selected mission summary\"},\"columns\":[{\"field\":\"titulo\",\"header\":\"Mission\",\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"status\",\"header\":\"Status\",\"type\":\"badge\"},{\"field\":\"prioridade\",\"header\":\"Priority\",\"type\":\"badge\"},{\"field\":\"qtdHerois\",\"header\":\"Heroes\",\"type\":\"number\",\"align\":\"end\"},{\"field\":\"qtdEventos\",\"header\":\"Events\",\"type\":\"number\",\"align\":\"end\"}],\"behavior\":{\"pagination\":{\"enabled\":false}}}},\"outputs\":{\"rowClick\":\"emit\"}}]},{\"id\":\"team\",\"textLabel\":\"Team\",\"icon\":\"groups\",\"widgets\":[{\"id\":\"praxis-table\",\"childWidgetKey\":\"mission-team-table\",\"bindingOrder\":[\"tableId\",\"resourcePath\",\"queryContext\",\"config\"],\"inputs\":{\"tableId\":\"nested-path-mission-team-table\",\"resourcePath\":\"operations/missao-participantes\",\"queryContext\":{\"filters\":{\"missaoId\":1}},\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"Mission team\"},\"columns\":[{\"field\":\"funcionarioNome\",\"header\":\"Participant\",\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"papel\",\"header\":\"Role\",\"type\":\"badge\"},{\"field\":\"principal\",\"header\":\"Lead\",\"type\":\"boolean\",\"width\":\"100px\",\"align\":\"center\"},{\"field\":\"resultado\",\"header\":\"Outcome\",\"type\":\"badge\"}],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":5,\"pageSizeOptions\":[5,10],\"position\":\"bottom\"}}}},\"outputs\":{\"rowClick\":\"emit\"}}]},{\"id\":\"timeline\",\"textLabel\":\"Timeline\",\"icon\":\"timeline\",\"widgets\":[{\"id\":\"praxis-rich-content\",\"childWidgetKey\":\"mission-timeline\",\"bindingOrder\":[\"document\",\"context\",\"layout\",\"rootClassName\"],\"inputs\":{\"layout\":\"block\",\"rootClassName\":\"nested-path-mission-timeline\",\"context\":{\"selection\":{\"missionId\":1,\"missionTitle\":\"Batalha de Nova York\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"timeline\",\"id\":\"mission-command-timeline\",\"title\":\"Authored mission timeline\",\"emptyText\":\"Select a mission to inspect its authored operational timeline.\",\"orientation\":\"vertical\",\"position\":\"alternate\",\"connectorVariant\":\"dashed\",\"connectorColor\":\"neutral\",\"markerVariant\":\"icon\",\"markerColor\":\"info\",\"markerStyle\":\"filled\",\"items\":[{\"id\":\"mission-event-intel\",\"icon\":\"travel_explore\",\"title\":\"Pacote de inteligência consolidado\",\"subtitleExpr\":\"selection.missionTitle\",\"meta\":\"INTEL\",\"opposite\":\"2025-10-18T02:41:41Z\",\"badge\":\"grounding\",\"markerColor\":\"info\"},{\"id\":\"mission-event-contact\",\"icon\":\"radar\",\"title\":\"Contato tático ativo\",\"subtitle\":\"Equipe em campo confirmou o ponto de contato operacional.\",\"meta\":\"CONTATO\",\"opposite\":\"2025-10-18T09:41:42Z\",\"badge\":\"signal\",\"markerColor\":\"primary\"},{\"id\":\"mission-event-combat\",\"icon\":\"shield\",\"title\":\"Engajamento inicial\",\"subtitle\":\"Civis evacuados e perímetro sob controle.\",\"meta\":\"COMBATE\",\"opposite\":\"2025-10-18T12:41:42Z\",\"badge\":\"operation\",\"markerColor\":\"warning\"},{\"id\":\"mission-event-reinforcement\",\"icon\":\"verified\",\"title\":\"Reforços a caminho\",\"subtitle\":\"SHIELD mobilizado para sustentação da missão.\",\"meta\":\"EXTRA\",\"opposite\":\"2025-10-18T18:41:42Z\",\"badge\":\"support\",\"markerColor\":\"success\"}]}]}}}]}]}},\"outputs\":{\"selectedIndexChange\":\"emit\"}}}]}}",
|
|
4245
4255
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4249,7 +4259,7 @@
|
|
|
4249
4259
|
"corpusVersion": "1.0.0"
|
|
4250
4260
|
},
|
|
4251
4261
|
{
|
|
4252
|
-
"chunkIndex":
|
|
4262
|
+
"chunkIndex": 128,
|
|
4253
4263
|
"chunkKind": "recipe",
|
|
4254
4264
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"composition\":{\"version\":\"1.0.0\",\"links\":[{\"id\":\"nestedPath:missions-table.rowClick->state.selection.missionId\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"missionNestedWorkspace\",\"port\":\"rowClick\",\"direction\":\"output\",\"componentType\":\"praxis-table\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"missions\",\"index\":0},{\"kind\":\"widget\",\"key\":\"missions-table\",\"componentType\":\"praxis-table\"}]}},\"to\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.missionId\",\"layer\":\"values\",\"writable\":true}},\"condition\":{\">\":[{\"var\":\"payload.row.id\"},0]},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"single-value\",\"sourceBindings\":[{\"source\":\"event\"}],\"steps\":[{\"id\":\"nestedPath:pick-mission-id\",\"kind\":\"pick-path\",\"phase\":\"link-propagation\",\"input\":{\"source\":\"event\"},\"config\":{\"path\":\"payload.row.id\"}}]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true,\"debounceMs\":50}},{\"id\":\"nestedPath:missions-table.rowClick->state.selection.missionTitle\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"missionNestedWorkspace\",\"port\":\"rowClick\",\"direction\":\"output\",\"componentType\":\"praxis-table\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"missions\",\"index\":0},{\"kind\":\"widget\",\"key\":\"missions-table\",\"componentType\":\"praxis-table\"}]}},\"to\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.missionTitle\",\"layer\":\"values\",\"writable\":true}},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"single-value\",\"sourceBindings\":[{\"source\":\"event\"}],\"steps\":[{\"id\":\"nestedPath:pick-mission-title\",\"kind\":\"pick-path\",\"phase\":\"link-propagation\",\"input\":{\"source\":\"event\"},\"config\":{\"path\":\"payload.row.titulo\"}}]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true,\"debounceMs\":50}},{\"id\":\"nestedPath:state.selection.missionId->summary-table.queryContext\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.missionId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"missionNestedWorkspace\",\"port\":\"queryContext\",\"direction\":\"input\",\"componentType\":\"praxis-table\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"summary\",\"index\":1},{\"kind\":\"widget\",\"key\":\"mission-summary-table\",\"componentType\":\"praxis-table\"}]}},\"condition\":{\">\":[{\"var\":\"source\"},0]},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"object-fragment\",\"sourceBindings\":[{\"source\":\"state\",\"path\":\"selection.missionId\"}],\"steps\":[{\"id\":\"nestedPath:mission-id-to-summary-filter\",\"kind\":\"object-template\",\"phase\":\"link-propagation\",\"config\":{\"template\":{\"filters\":{\"missaoId\":\"${source}\"}}}}]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}},{\"id\":\"nestedPath:state.selection.missionId->team-table.queryContext\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.missionId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"missionNestedWorkspace\",\"port\":\"queryContext\",\"direction\":\"input\",\"componentType\":\"praxis-table\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"team\",\"index\":2},{\"kind\":\"widget\",\"key\":\"mission-team-table\",\"componentType\":\"praxis-table\"}]}},\"condition\":{\">\":[{\"var\":\"source\"},0]},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"object-fragment\",\"sourceBindings\":[{\"source\":\"state\",\"path\":\"selection.missionId\"}],\"steps\":[{\"id\":\"nestedPath:mission-id-to-team-filter\",\"kind\":\"object-template\",\"phase\":\"link-propagation\",\"config\":{\"template\":{\"filters\":{\"missaoId\":\"${source}\"}}}}]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}},{\"id\":\"nestedPath:state.selection->timeline.context\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"missionNestedWorkspace\",\"port\":\"context\",\"direction\":\"input\",\"componentType\":\"praxis-rich-content\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"timeline\",\"index\":3},{\"kind\":\"widget\",\"key\":\"mission-timeline\",\"componentType\":\"praxis-rich-content\"}]}},\"condition\":{\">\":[{\"var\":\"source.missionId\"},0]},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"object-fragment\",\"sourceBindings\":[{\"source\":\"state\",\"path\":\"selection\"}],\"steps\":[{\"id\":\"nestedPath:selection-to-rich-timeline-context\",\"kind\":\"object-template\",\"phase\":\"link-propagation\",\"config\":{\"template\":{\"selection\":\"${source}\"}}}]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}}]}}}",
|
|
4255
4265
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4259,7 +4269,7 @@
|
|
|
4259
4269
|
"corpusVersion": "1.0.0"
|
|
4260
4270
|
},
|
|
4261
4271
|
{
|
|
4262
|
-
"chunkIndex":
|
|
4272
|
+
"chunkIndex": 129,
|
|
4263
4273
|
"chunkKind": "recipe",
|
|
4264
4274
|
"content": "{\"_comment\":\"Praxis Dynamic Page recipe for an onboarding day-30 coaching workbench using portable rich-content blocks for coaching signals, manager context and governed development actions.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"onboarding-day-30-coaching-workbench\",\"status\":\"public-example\",\"useWhen\":\"Create an onboarding day-30 coaching workbench with coaching signals, manager context, goal tabs and governed development actions.\",\"examplePrompts\":[\"create an onboarding day-30 coaching workbench\",\"show a governed onboarding coaching rich content surface\",\"generate an onboarding page with day-30 goals and manager coaching actions\"]},\"platformValue\":{\"canonicalRuntime\":\"@praxisui/rich-content owns the portable onboarding day-30 coaching surface.\",\"hostMediation\":\"The host mediates open, confirm, update and escalate actions through actionId contracts.\",\"publicExamples\":\"praxis-ui-landing-page can expose the same onboarding coaching workbench without serializing runtime helpers.\",\"agentCorpus\":\"This recipe keeps coaching signals, selected hire context, manager context and governed coaching actions inside RichContentDocument so agents can reuse the same semantic surface across hosts.\"},\"authoringGuidance\":[\"Use definition.id \\\"praxis-rich-content\\\".\",\"Model coaching metrics with statGroup instead of host-authored manager cards.\",\"Model the selected hire with lookupCard when the host already resolved the day-30 coaching context.\",\"Use tabs for goals and blockers instead of host-authored coaching sections.\",\"Use relatedRecord, ctaGroup and actionCard for governed coaching actions; keep handlers out of the document.\",\"Do not serialize hostCapabilities in the page JSON; the host injects runtime mediation only while rendering.\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"onboardingDay30CoachingWorkbench\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"psychology\",\"title\":\"Onboarding day-30 coaching workbench\",\"subtitle\":\"Portable rich-content surface for governed coaching\"},\"definition\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"document\",\"context\",\"layout\",\"rootClassName\"],\"inputs\":{\"layout\":\"block\",\"rootClassName\":\"onboarding-day-30-coaching-workbench\",\"context\":{\"hire\":{\"id\":\"ONB-830\",\"name\":\"Tiago Almeida\",\"role\":\"Customer Success Engineer\",\"department\":\"Customer platform\",\"focus\":\"Role clarity and first-month delivery plan\",\"confidence\":\"8.1\",\"openGoals\":\"4\",\"risk\":\"Medium\",\"pulse\":\"Needs stakeholder alignment\"},\"manager\":{\"name\":\"Helena Souza\",\"department\":\"Engineering leadership\",\"lane\":\"First-month development plan\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"callout\",\"tone\":\"info\",\"icon\":\"psychology\",\"titleExpr\":\"${hire.name}\",\"message\":\"Use a portable onboarding day-30 coaching surface when the host must expose governed coaching and manager development actions without inventing onboarding-specific templates.\"},{\"type\":\"statGroup\",\"title\":\"Day-30 coaching signals\",\"subtitle\":\"Canonical KPI block for onboarding coaching surfaces\",\"layout\":\"grid\",\"items\":[{\"label\":\"Confidence\",\"valueExpr\":\"${hire.confidence}\",\"captionExpr\":\"${hire.id}\",\"icon\":\"psychology\"},{\"label\":\"Open goals\",\"valueExpr\":\"${hire.openGoals}\",\"caption\":\"Needs manager review\",\"icon\":\"flag\"},{\"label\":\"Coaching risk\",\"valueExpr\":\"${hire.risk}\",\"captionExpr\":\"${hire.pulse}\",\"icon\":\"report\"}]},{\"type\":\"lookupCard\",\"title\":\"Selected hire\",\"status\":\"resolved\",\"subtitleExpr\":\"${hire.name}\",\"metaExpr\":\"${hire.role}\",\"ctaLabel\":\"Open hire\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.day30.hire.open\",\"payloadExpr\":\"${hire}\"},\"fields\":[{\"label\":\"Department\",\"valueExpr\":\"${hire.department}\"},{\"label\":\"Coaching focus\",\"valueExpr\":\"${hire.focus}\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.day30.dossier.open\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"tabs\",\"title\":\"Coaching views\",\"subtitle\":\"Portable editorial tabs for goals, blockers and next steps.\",\"appearance\":\"underline\",\"defaultTabId\":\"goals\",\"items\":[{\"id\":\"goals\",\"label\":\"Goals\",\"icon\":\"flag\",\"content\":[{\"type\":\"text\",\"text\":\"Keep day-30 goals, first-month outcomes and coaching notes inside the same RichContentDocument.\"}]},{\"id\":\"blockers\",\"label\":\"Blockers\",\"icon\":\"warning\",\"content\":[{\"type\":\"keyValueList\",\"layout\":\"stacked\",\"items\":[{\"label\":\"Coaching blocker\",\"value\":\"Stakeholder map and role expectations need a manager-led reset.\"},{\"label\":\"Coaching rule\",\"value\":\"Escalate when day-30 confidence drops below target or when two coaching goals remain unowned after manager review.\"}]}]}]},{\"type\":\"relatedRecord\",\"title\":\"Coaching owner\",\"subtitleExpr\":\"${manager.name}\",\"relationLabel\":\"Manager\",\"metaExpr\":\"${manager.department}\",\"ctaLabel\":\"Open manager\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.day30.manager.open\",\"payloadExpr\":\"${manager}\"},\"fields\":[{\"label\":\"Coaching lane\",\"valueExpr\":\"${manager.lane}\",\"hint\":\"Resolved from the day-30 coaching assignment context.\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Schedule coaching sync\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.day30.manager.scheduleSync\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"ctaGroup\",\"title\":\"Coaching actions\",\"subtitle\":\"Governed day-30 coaching outcomes\",\"message\":\"Use semantic coaching actions instead of host-authored onboarding manager button bars.\",\"layout\":\"split\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Confirm coaching plan\",\"icon\":\"check_circle\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.day30.coaching.confirm\",\"payloadExpr\":\"${hire}\"}},{\"type\":\"actionButton\",\"label\":\"Request goal update\",\"icon\":\"flag\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.day30.goals.requestUpdate\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"actionCard\",\"title\":\"Escalate coaching risk\",\"subtitleExpr\":\"${hire.id}\",\"message\":\"Use actionCard when the onboarding host needs a governed escalation flow for unresolved first-month coaching risks.\",\"metaExpr\":\"${hire.pulse}\",\"ctaLabel\":\"Escalate coaching risk\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.day30.coaching.escalate\",\"payloadExpr\":\"${hire}\"},\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.day30.dossier.open\",\"payloadExpr\":\"${hire}\"}}]}]}}}}]}}",
|
|
4265
4275
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-day-30-coaching-workbench.json",
|
|
@@ -4269,7 +4279,7 @@
|
|
|
4269
4279
|
"corpusVersion": "1.0.0"
|
|
4270
4280
|
},
|
|
4271
4281
|
{
|
|
4272
|
-
"chunkIndex":
|
|
4282
|
+
"chunkIndex": 130,
|
|
4273
4283
|
"chunkKind": "recipe",
|
|
4274
4284
|
"content": "{\"_comment\":\"Praxis Dynamic Page recipe for an onboarding equipment and access recovery workbench using portable rich-content blocks for recovery signals, access owner context and governed remediation actions.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"onboarding-equipment-access-recovery-workbench\",\"status\":\"public-example\",\"useWhen\":\"Create an onboarding equipment and access recovery workbench with recovery signals, access owner context, blocker tabs and governed remediation actions.\",\"examplePrompts\":[\"create an onboarding equipment and access recovery workbench\",\"show a governed onboarding recovery rich content surface\",\"generate an onboarding page with access blockers and remediation actions\"]},\"platformValue\":{\"canonicalRuntime\":\"@praxisui/rich-content owns the portable onboarding equipment and access recovery surface.\",\"hostMediation\":\"The host mediates open, confirm, reset and escalate actions through actionId contracts.\",\"publicExamples\":\"praxis-ui-landing-page can expose the same onboarding recovery workbench without serializing runtime helpers.\",\"agentCorpus\":\"This recipe keeps recovery signals, selected hire context, access owner context and governed recovery actions inside RichContentDocument so agents can reuse the same semantic surface across hosts.\"},\"authoringGuidance\":[\"Use definition.id \\\"praxis-rich-content\\\".\",\"Model recovery metrics with statGroup instead of host-authored access cards.\",\"Model the selected hire with lookupCard when the host already resolved the equipment and access recovery context.\",\"Use tabs for status and blockers instead of host-authored recovery sections.\",\"Use relatedRecord, ctaGroup and actionCard for governed recovery actions; keep handlers out of the document.\",\"Do not serialize hostCapabilities in the page JSON; the host injects runtime mediation only while rendering.\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"onboardingEquipmentAccessRecoveryWorkbench\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"vpn_key\",\"title\":\"Onboarding equipment and access recovery workbench\",\"subtitle\":\"Portable rich-content surface for governed access recovery\"},\"definition\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"document\",\"context\",\"layout\",\"rootClassName\"],\"inputs\":{\"layout\":\"block\",\"rootClassName\":\"onboarding-equipment-access-recovery-workbench\",\"context\":{\"hire\":{\"id\":\"ONB-741\",\"name\":\"Rafaela Dias\",\"role\":\"Platform Engineer\",\"department\":\"Developer experience\",\"blocker\":\"VPN and SSO provisioning\",\"openBlockers\":\"3\",\"criticalApps\":\"2\",\"recoverySla\":\"6h\",\"deviceState\":\"Laptop delivered / account pending\"},\"owner\":{\"name\":\"Marcos Lima\",\"department\":\"IT operations\",\"lane\":\"Identity and device setup\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"callout\",\"tone\":\"warning\",\"icon\":\"vpn_key\",\"titleExpr\":\"${hire.name}\",\"message\":\"Use a portable onboarding equipment and access recovery surface when the host must expose governed access recovery and device remediation actions without inventing onboarding-specific templates.\"},{\"type\":\"statGroup\",\"title\":\"Recovery signals\",\"subtitle\":\"Canonical KPI block for onboarding recovery surfaces\",\"layout\":\"grid\",\"items\":[{\"label\":\"Open blockers\",\"valueExpr\":\"${hire.openBlockers}\",\"captionExpr\":\"${hire.id}\",\"icon\":\"warning\"},{\"label\":\"Critical apps\",\"valueExpr\":\"${hire.criticalApps}\",\"caption\":\"Still missing\",\"icon\":\"apps\"},{\"label\":\"Recovery SLA\",\"valueExpr\":\"${hire.recoverySla}\",\"captionExpr\":\"${hire.blocker}\",\"icon\":\"schedule\"}]},{\"type\":\"lookupCard\",\"title\":\"Selected hire\",\"status\":\"resolved\",\"subtitleExpr\":\"${hire.name}\",\"metaExpr\":\"${hire.role}\",\"ctaLabel\":\"Open hire\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.recovery.hire.open\",\"payloadExpr\":\"${hire}\"},\"fields\":[{\"label\":\"Department\",\"valueExpr\":\"${hire.department}\"},{\"label\":\"Device state\",\"valueExpr\":\"${hire.deviceState}\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.recovery.dossier.open\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"tabs\",\"title\":\"Recovery views\",\"subtitle\":\"Portable editorial tabs for recovery status and blocker details.\",\"appearance\":\"underline\",\"defaultTabId\":\"status\",\"items\":[{\"id\":\"status\",\"label\":\"Status\",\"icon\":\"dashboard\",\"content\":[{\"type\":\"text\",\"text\":\"Keep access status, recovery notes and remediation evidence inside the same RichContentDocument.\"}]},{\"id\":\"blockers\",\"label\":\"Blockers\",\"icon\":\"warning\",\"content\":[{\"type\":\"keyValueList\",\"layout\":\"stacked\",\"items\":[{\"label\":\"Missing access\",\"value\":\"SSO, analytics workspace and VPN group mapping.\"},{\"label\":\"Recovery rule\",\"value\":\"Escalate any access or device blocker still unresolved after the first business day or any blocker affecting payroll, identity or secure access.\"}]}]}]},{\"type\":\"relatedRecord\",\"title\":\"Access owner\",\"subtitleExpr\":\"${owner.name}\",\"relationLabel\":\"Ops owner\",\"metaExpr\":\"${owner.department}\",\"ctaLabel\":\"Open owner\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.recovery.owner.open\",\"payloadExpr\":\"${owner}\"},\"fields\":[{\"label\":\"Recovery lane\",\"valueExpr\":\"${owner.lane}\",\"hint\":\"Resolved from the recovery assignment context.\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Schedule recovery sync\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.recovery.owner.scheduleSync\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"ctaGroup\",\"title\":\"Recovery actions\",\"subtitle\":\"Governed onboarding recovery outcomes\",\"message\":\"Use semantic recovery actions instead of host-authored onboarding access button bars.\",\"layout\":\"split\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Confirm recovery plan\",\"icon\":\"check_circle\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.recovery.confirm\",\"payloadExpr\":\"${hire}\"}},{\"type\":\"actionButton\",\"label\":\"Request access reset\",\"icon\":\"restart_alt\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.recovery.access.reset\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"actionCard\",\"title\":\"Escalate recovery risk\",\"subtitleExpr\":\"${hire.id}\",\"message\":\"Use actionCard when the onboarding host needs a governed escalation flow for unresolved access or equipment blockers.\",\"metaExpr\":\"${hire.blocker}\",\"ctaLabel\":\"Escalate recovery risk\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.recovery.escalate\",\"payloadExpr\":\"${hire}\"},\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.recovery.dossier.open\",\"payloadExpr\":\"${hire}\"}}]}]}}}}]}}",
|
|
4275
4285
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-equipment-access-recovery-workbench.json",
|
|
@@ -4279,7 +4289,7 @@
|
|
|
4279
4289
|
"corpusVersion": "1.0.0"
|
|
4280
4290
|
},
|
|
4281
4291
|
{
|
|
4282
|
-
"chunkIndex":
|
|
4292
|
+
"chunkIndex": 131,
|
|
4283
4293
|
"chunkKind": "recipe",
|
|
4284
4294
|
"content": "{\"_comment\":\"Praxis Dynamic Page recipe for an onboarding journey workbench using portable rich-content blocks instead of host-authored journey templates.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"onboarding-journey-workbench\",\"status\":\"public-example\",\"useWhen\":\"Create an onboarding workbench with journey signals, assigned buddy context and governed next-step actions.\",\"examplePrompts\":[\"create an onboarding journey workbench\",\"show a governed onboarding rich content surface\",\"generate an onboarding page with buddy context and next-step actions\"]},\"platformValue\":{\"canonicalRuntime\":\"@praxisui/rich-content owns the portable onboarding surface.\",\"hostMediation\":\"The host mediates hire lookup, buddy navigation and checklist flows through actionId contracts.\",\"publicExamples\":\"praxis-ui-landing-page can expose the same onboarding workbench without serializing runtime helpers.\",\"agentCorpus\":\"This recipe keeps onboarding signals, buddy context and governed actions inside RichContentDocument so agents can reuse the same semantic surface across hosts.\"},\"authoringGuidance\":[\"Use definition.id \\\"praxis-rich-content\\\".\",\"Model journey KPIs with statGroup instead of custom host progress cards.\",\"Model the selected hire with lookupCard when the record is resolved by host context.\",\"Model the assigned buddy with relatedRecord instead of host-authored relationship wrappers.\",\"Use ctaGroup and actionCard for governed onboarding actions; keep handlers out of the document.\",\"Do not serialize hostCapabilities in the page JSON; the host injects runtime mediation only while rendering.\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"onboardingJourneyWorkbench\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"person_add\",\"title\":\"Onboarding journey workbench\",\"subtitle\":\"Portable rich-content surface for governed onboarding flows\"},\"definition\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"document\",\"context\",\"layout\",\"rootClassName\"],\"inputs\":{\"layout\":\"block\",\"rootClassName\":\"onboarding-journey-workbench\",\"context\":{\"hire\":{\"id\":\"ONB-301\",\"name\":\"Leonardo Ramos\",\"role\":\"Platform Engineer\",\"department\":\"Platform Engineering\",\"day\":\"D+3\",\"pendingTasks\":\"5\",\"equipment\":\"Awaiting delivery\",\"welcomeTrack\":\"Platform foundation\",\"reviewWindow\":\"Friday\"},\"buddy\":{\"name\":\"Marina Costa\",\"department\":\"Engineering enablement\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"callout\",\"tone\":\"info\",\"icon\":\"person_add\",\"titleExpr\":\"${hire.name}\",\"message\":\"Use a portable onboarding surface when the host must expose governed journey actions without inventing onboarding-specific templates.\"},{\"type\":\"statGroup\",\"title\":\"Onboarding signals\",\"subtitle\":\"Canonical KPI block for onboarding journey surfaces\",\"layout\":\"grid\",\"items\":[{\"label\":\"Day\",\"valueExpr\":\"${hire.day}\",\"captionExpr\":\"${hire.department}\",\"icon\":\"event\"},{\"label\":\"Tasks left\",\"valueExpr\":\"${hire.pendingTasks}\",\"captionExpr\":\"${hire.welcomeTrack}\",\"icon\":\"task_alt\"},{\"label\":\"Equipment\",\"valueExpr\":\"${hire.equipment}\",\"caption\":\"Provisioning status\",\"icon\":\"laptop_mac\"}]},{\"type\":\"lookupCard\",\"title\":\"Selected hire\",\"status\":\"resolved\",\"subtitleExpr\":\"${hire.name}\",\"metaExpr\":\"${hire.role}\",\"ctaLabel\":\"Open hire\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.hire.open\",\"payloadExpr\":\"${hire}\"},\"fields\":[{\"label\":\"Department\",\"valueExpr\":\"${hire.department}\"},{\"label\":\"Welcome track\",\"valueExpr\":\"${hire.welcomeTrack}\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.dossier.open\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"tabs\",\"title\":\"Journey views\",\"subtitle\":\"Portable editorial tabs for onboarding context.\",\"appearance\":\"underline\",\"defaultTabId\":\"overview\",\"items\":[{\"id\":\"overview\",\"label\":\"Overview\",\"icon\":\"dashboard\",\"content\":[{\"type\":\"text\",\"text\":\"Tabs keep journey notes, provisioning context and first-week readiness inside the same RichContentDocument.\"}]},{\"id\":\"readiness\",\"label\":\"Readiness\",\"icon\":\"assignment_turned_in\",\"content\":[{\"type\":\"keyValueList\",\"layout\":\"stacked\",\"items\":[{\"label\":\"Review window\",\"valueExpr\":\"${hire.reviewWindow}\"},{\"label\":\"Equipment\",\"valueExpr\":\"${hire.equipment}\"},{\"label\":\"Portability rule\",\"value\":\"Keep journey semantics in the rich-content document; keep execution in the host.\"}]}]}]},{\"type\":\"relatedRecord\",\"title\":\"Assigned buddy\",\"subtitleExpr\":\"${buddy.name}\",\"relationLabel\":\"Buddy\",\"metaExpr\":\"${buddy.department}\",\"ctaLabel\":\"Open buddy\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.buddy.open\",\"payloadExpr\":\"${buddy}\"},\"fields\":[{\"label\":\"Welcome track\",\"valueExpr\":\"${hire.welcomeTrack}\",\"hint\":\"Resolved from the current onboarding plan.\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Schedule intro\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.buddy.scheduleIntro\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"ctaGroup\",\"title\":\"Journey actions\",\"subtitle\":\"Governed onboarding follow-up actions\",\"message\":\"Use semantic action clusters instead of host-authored onboarding button bars.\",\"layout\":\"split\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Start checklist\",\"icon\":\"checklist\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.checklist.start\",\"payloadExpr\":\"${hire}\"}},{\"type\":\"actionButton\",\"label\":\"Request equipment\",\"icon\":\"inventory_2\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.equipment.request\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"actionCard\",\"title\":\"Open onboarding dossier\",\"subtitleExpr\":\"${hire.id}\",\"message\":\"Use actionCard when the onboarding host needs a governed dossier or coordinator workflow.\",\"metaExpr\":\"${hire.role}\",\"ctaLabel\":\"Open dossier\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.dossier.open\",\"payloadExpr\":\"${hire}\"},\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Escalate blocker\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.blocker.escalate\",\"payloadExpr\":\"${hire}\"}}]}]}}}}]}}",
|
|
4285
4295
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-journey-workbench.json",
|
|
@@ -4289,7 +4299,7 @@
|
|
|
4289
4299
|
"corpusVersion": "1.0.0"
|
|
4290
4300
|
},
|
|
4291
4301
|
{
|
|
4292
|
-
"chunkIndex":
|
|
4302
|
+
"chunkIndex": 132,
|
|
4293
4303
|
"chunkKind": "recipe",
|
|
4294
4304
|
"content": "{\"_comment\":\"Praxis Dynamic Page recipe for an onboarding manager follow-up workbench using portable rich-content blocks for follow-up signals, manager context and governed follow-up actions.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"onboarding-manager-follow-up-workbench\",\"status\":\"public-example\",\"useWhen\":\"Create an onboarding manager follow-up workbench with follow-up signals, manager context, blocker tabs and governed coaching actions.\",\"examplePrompts\":[\"create an onboarding manager follow-up workbench\",\"show a governed onboarding manager follow-up rich content surface\",\"generate an onboarding page with follow-up signals and coaching actions\"]},\"platformValue\":{\"canonicalRuntime\":\"@praxisui/rich-content owns the portable onboarding manager follow-up surface.\",\"hostMediation\":\"The host mediates open, confirm, coaching and escalate actions through actionId contracts.\",\"publicExamples\":\"praxis-ui-landing-page can expose the same onboarding manager follow-up workbench without serializing runtime helpers.\",\"agentCorpus\":\"This recipe keeps follow-up signals, selected hire context, manager context and governed follow-up actions inside RichContentDocument so agents can reuse the same semantic surface across hosts.\"},\"authoringGuidance\":[\"Use definition.id \\\"praxis-rich-content\\\".\",\"Model follow-up metrics with statGroup instead of host-authored manager cards.\",\"Model the selected hire with lookupCard when the host already resolved the follow-up context.\",\"Use tabs for summary and blockers instead of host-authored operational sections.\",\"Use relatedRecord, ctaGroup and actionCard for governed manager follow-up actions; keep handlers out of the document.\",\"Do not serialize hostCapabilities in the page JSON; the host injects runtime mediation only while rendering.\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"onboardingManagerFollowUpWorkbench\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"supervisor_account\",\"title\":\"Onboarding manager follow-up workbench\",\"subtitle\":\"Portable rich-content surface for governed manager follow-up\"},\"definition\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"document\",\"context\",\"layout\",\"rootClassName\"],\"inputs\":{\"layout\":\"block\",\"rootClassName\":\"onboarding-manager-follow-up-workbench\",\"context\":{\"hire\":{\"id\":\"ONB-680\",\"name\":\"Bianca Torres\",\"role\":\"Product Analyst\",\"department\":\"Platform strategy\",\"focus\":\"First 30-day goals\",\"checkIns\":\"3\",\"openBlockers\":\"2\",\"sentiment\":\"7.8\",\"pulse\":\"Needs role clarity\"},\"manager\":{\"name\":\"Helena Souza\",\"department\":\"Engineering leadership\",\"lane\":\"30-day coaching plan\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"callout\",\"tone\":\"info\",\"icon\":\"supervisor_account\",\"titleExpr\":\"${hire.name}\",\"message\":\"Use a portable onboarding manager follow-up surface when the host must expose governed coaching and manager follow-up actions without inventing onboarding-specific templates.\"},{\"type\":\"statGroup\",\"title\":\"Follow-up signals\",\"subtitle\":\"Canonical KPI block for onboarding manager follow-up surfaces\",\"layout\":\"grid\",\"items\":[{\"label\":\"Check-ins\",\"valueExpr\":\"${hire.checkIns}\",\"captionExpr\":\"${hire.id}\",\"icon\":\"event_note\"},{\"label\":\"Open blockers\",\"valueExpr\":\"${hire.openBlockers}\",\"caption\":\"Needs manager action\",\"icon\":\"warning\"},{\"label\":\"Sentiment\",\"valueExpr\":\"${hire.sentiment}\",\"captionExpr\":\"${hire.pulse}\",\"icon\":\"sentiment_satisfied\"}]},{\"type\":\"lookupCard\",\"title\":\"Selected hire\",\"status\":\"resolved\",\"subtitleExpr\":\"${hire.name}\",\"metaExpr\":\"${hire.role}\",\"ctaLabel\":\"Open hire\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.followup.hire.open\",\"payloadExpr\":\"${hire}\"},\"fields\":[{\"label\":\"Department\",\"valueExpr\":\"${hire.department}\"},{\"label\":\"Current focus\",\"valueExpr\":\"${hire.focus}\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.followup.dossier.open\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"tabs\",\"title\":\"Follow-up views\",\"subtitle\":\"Portable editorial tabs for manager notes and blockers.\",\"appearance\":\"underline\",\"defaultTabId\":\"summary\",\"items\":[{\"id\":\"summary\",\"label\":\"Summary\",\"icon\":\"dashboard\",\"content\":[{\"type\":\"text\",\"text\":\"Keep manager follow-up notes, pulse observations and enablement actions inside the same RichContentDocument.\"}]},{\"id\":\"blockers\",\"label\":\"Blockers\",\"icon\":\"warning\",\"content\":[{\"type\":\"keyValueList\",\"layout\":\"stacked\",\"items\":[{\"label\":\"Open blocker\",\"value\":\"Role expectations and stakeholder map still need clarification.\"},{\"label\":\"Follow-up rule\",\"value\":\"Escalate any blocker still unresolved after the second manager follow-up or any sentiment drop below 7.\"}]}]}]},{\"type\":\"relatedRecord\",\"title\":\"Assigned manager\",\"subtitleExpr\":\"${manager.name}\",\"relationLabel\":\"Manager\",\"metaExpr\":\"${manager.department}\",\"ctaLabel\":\"Open manager\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.followup.manager.open\",\"payloadExpr\":\"${manager}\"},\"fields\":[{\"label\":\"Follow-up lane\",\"valueExpr\":\"${manager.lane}\",\"hint\":\"Resolved from the follow-up assignment context.\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Schedule manager sync\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.followup.manager.scheduleSync\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"ctaGroup\",\"title\":\"Follow-up actions\",\"subtitle\":\"Governed onboarding follow-up outcomes\",\"message\":\"Use semantic follow-up actions instead of host-authored onboarding manager button bars.\",\"layout\":\"split\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Confirm follow-up plan\",\"icon\":\"check_circle\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.followup.confirm\",\"payloadExpr\":\"${hire}\"}},{\"type\":\"actionButton\",\"label\":\"Request coaching update\",\"icon\":\"forum\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.followup.coaching.requestUpdate\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"actionCard\",\"title\":\"Escalate onboarding risk\",\"subtitleExpr\":\"${hire.id}\",\"message\":\"Use actionCard when the onboarding host needs a governed escalation flow for unresolved manager follow-up risks.\",\"metaExpr\":\"${hire.pulse}\",\"ctaLabel\":\"Escalate follow-up risk\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.followup.escalate\",\"payloadExpr\":\"${hire}\"},\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.followup.dossier.open\",\"payloadExpr\":\"${hire}\"}}]}]}}}}]}}",
|
|
4295
4305
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-manager-follow-up-workbench.json",
|
|
@@ -4299,7 +4309,7 @@
|
|
|
4299
4309
|
"corpusVersion": "1.0.0"
|
|
4300
4310
|
},
|
|
4301
4311
|
{
|
|
4302
|
-
"chunkIndex":
|
|
4312
|
+
"chunkIndex": 133,
|
|
4303
4313
|
"chunkKind": "recipe",
|
|
4304
4314
|
"content": "{\"_comment\":\"Praxis Dynamic Page recipe for an onboarding readiness workbench using portable rich-content blocks for first-week readiness, blockers and governed escalation actions.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"onboarding-readiness-workbench\",\"status\":\"public-example\",\"useWhen\":\"Create an onboarding readiness workbench with first-week signals, manager context, blocker tabs and governed follow-up actions.\",\"examplePrompts\":[\"create an onboarding readiness workbench\",\"show a governed onboarding readiness rich content surface\",\"generate an onboarding page with blockers and readiness actions\"]},\"platformValue\":{\"canonicalRuntime\":\"@praxisui/rich-content owns the portable onboarding readiness surface.\",\"hostMediation\":\"The host mediates open, confirm, follow-up and escalate actions through actionId contracts.\",\"publicExamples\":\"praxis-ui-landing-page can expose the same onboarding readiness workbench without serializing runtime helpers.\",\"agentCorpus\":\"This recipe keeps readiness signals, selected hire context, blockers and escalation actions inside RichContentDocument so agents can reuse the same semantic surface across hosts.\"},\"authoringGuidance\":[\"Use definition.id \\\"praxis-rich-content\\\".\",\"Model first-week readiness metrics with statGroup instead of custom host progress cards.\",\"Model the selected hire with lookupCard when the host already resolved the readiness context.\",\"Use tabs for readiness and blockers instead of host-authored operational sections.\",\"Use relatedRecord, ctaGroup and actionCard for governed readiness and blocker actions; keep handlers out of the document.\",\"Do not serialize hostCapabilities in the page JSON; the host injects runtime mediation only while rendering.\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"onboardingReadinessWorkbench\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"checklist\",\"title\":\"Onboarding readiness workbench\",\"subtitle\":\"Portable rich-content surface for governed first-week readiness\"},\"definition\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"document\",\"context\",\"layout\",\"rootClassName\"],\"inputs\":{\"layout\":\"block\",\"rootClassName\":\"onboarding-readiness-workbench\",\"context\":{\"hire\":{\"id\":\"ONB-512\",\"name\":\"Bianca Torres\",\"role\":\"Product Analyst\",\"department\":\"Platform strategy\",\"startDate\":\"Monday\",\"readiness\":\"82%\",\"pendingEquipment\":\"2\",\"blocker\":\"Badge access and laptop delivery\",\"weekPlan\":\"Platform immersion\"},\"manager\":{\"name\":\"Helena Souza\",\"department\":\"Engineering leadership\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"callout\",\"tone\":\"info\",\"icon\":\"checklist\",\"titleExpr\":\"${hire.name}\",\"message\":\"Use a portable onboarding readiness surface when the host must expose governed first-week actions without inventing onboarding-specific templates.\"},{\"type\":\"statGroup\",\"title\":\"Readiness signals\",\"subtitle\":\"Canonical KPI block for onboarding readiness surfaces\",\"layout\":\"grid\",\"items\":[{\"label\":\"Checklist\",\"valueExpr\":\"${hire.readiness}\",\"captionExpr\":\"${hire.id}\",\"icon\":\"checklist\"},{\"label\":\"Equipment\",\"valueExpr\":\"${hire.pendingEquipment}\",\"caption\":\"Pending deliveries\",\"icon\":\"laptop_mac\"},{\"label\":\"Start date\",\"valueExpr\":\"${hire.startDate}\",\"captionExpr\":\"${hire.department}\",\"icon\":\"event\"}]},{\"type\":\"lookupCard\",\"title\":\"Selected hire\",\"status\":\"resolved\",\"subtitleExpr\":\"${hire.name}\",\"metaExpr\":\"${hire.role}\",\"ctaLabel\":\"Open hire\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.readiness.hire.open\",\"payloadExpr\":\"${hire}\"},\"fields\":[{\"label\":\"Department\",\"valueExpr\":\"${hire.department}\"},{\"label\":\"Start date\",\"valueExpr\":\"${hire.startDate}\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.readiness.dossier.open\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"tabs\",\"title\":\"Readiness views\",\"subtitle\":\"Portable editorial tabs for readiness and blockers.\",\"appearance\":\"underline\",\"defaultTabId\":\"readiness\",\"items\":[{\"id\":\"readiness\",\"label\":\"Readiness\",\"icon\":\"task_alt\",\"content\":[{\"type\":\"text\",\"text\":\"Tabs keep first-week readiness notes, blockers and operational evidence inside the same RichContentDocument.\"}]},{\"id\":\"blockers\",\"label\":\"Blockers\",\"icon\":\"warning\",\"content\":[{\"type\":\"keyValueList\",\"layout\":\"stacked\",\"items\":[{\"label\":\"Pending item\",\"valueExpr\":\"${hire.blocker}\"},{\"label\":\"Readiness rule\",\"value\":\"Escalate any blocker that still exists by day two or blocks manager onboarding milestones.\"}]}]}]},{\"type\":\"relatedRecord\",\"title\":\"Assigned manager\",\"subtitleExpr\":\"${manager.name}\",\"relationLabel\":\"Manager\",\"metaExpr\":\"${manager.department}\",\"ctaLabel\":\"Open manager\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.readiness.manager.open\",\"payloadExpr\":\"${manager}\"},\"fields\":[{\"label\":\"Week one plan\",\"valueExpr\":\"${hire.weekPlan}\",\"hint\":\"Resolved from the readiness assignment context.\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Schedule check-in\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.readiness.manager.scheduleCheckIn\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"ctaGroup\",\"title\":\"Readiness actions\",\"subtitle\":\"Governed onboarding readiness outcomes\",\"message\":\"Use semantic readiness actions instead of host-authored onboarding button bars.\",\"layout\":\"split\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Confirm readiness\",\"icon\":\"check_circle\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.readiness.confirm\",\"payloadExpr\":\"${hire}\"}},{\"type\":\"actionButton\",\"label\":\"Request equipment follow-up\",\"icon\":\"inventory\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.readiness.equipment.followUp\",\"payloadExpr\":\"${hire}\"}}]},{\"type\":\"actionCard\",\"title\":\"Escalate onboarding blocker\",\"subtitleExpr\":\"${hire.id}\",\"message\":\"Use actionCard when the onboarding host needs a governed blocker escalation flow.\",\"metaExpr\":\"${hire.blocker}\",\"ctaLabel\":\"Escalate blocker\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"onboarding.readiness.blocker.escalate\",\"payloadExpr\":\"${hire}\"},\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"onboarding.readiness.dossier.open\",\"payloadExpr\":\"${hire}\"}}]}]}}}}]}}",
|
|
4305
4315
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-readiness-workbench.json",
|
|
@@ -4309,7 +4319,7 @@
|
|
|
4309
4319
|
"corpusVersion": "1.0.0"
|
|
4310
4320
|
},
|
|
4311
4321
|
{
|
|
4312
|
-
"chunkIndex":
|
|
4322
|
+
"chunkIndex": 134,
|
|
4313
4323
|
"chunkKind": "recipe",
|
|
4314
4324
|
"content": "{\"_comment\":\"Recipe para agentes criarem uma Praxis Dynamic Page com um perfil rico em praxis-dynamic-form.\",\"_comment2\":\"Use quando a meta for demonstrar sections, fieldMetadata, readonly detail, remote options e field-specific controls.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"profile-form\",\"status\":\"public-example\",\"useWhen\":\"Create a metadata-driven readonly profile page backed by a published resource detail endpoint.\",\"examplePrompts\":[\"crie um perfil rico de funcionario com dynamic form\",\"mostre sections e fieldMetadata no praxis-dynamic-form\",\"gere uma pagina de detalhe readonly com avatar, cpf, email, telefone, salario e options remotas\"]},\"platformValue\":{\"canonicalContract\":\"praxis-metadata-starter publishes the resource detail schema and option metadata consumed by the form runtime.\",\"referenceApi\":\"praxis-api-quickstart serves funcionarios detail data and cargo/departamento option endpoints.\",\"angularRuntime\":\"@praxisui/dynamic-form renders sections, fieldMetadata and action placement; @praxisui/dynamic-fields resolves package-owned controls.\",\"publicExamples\":\"praxis-ui-landing-page exposes the JSON envelope, runtime preview and coverage map.\",\"agentCorpus\":\"This recipe gives LLMs a copyable end-to-end form profile pattern.\"},\"operationalEvidence\":{\"baseUrl\":\"https://praxis-api-quickstart.onrender.com\",\"safeFirstIds\":[\"filtered-schema-response-funcionarios\",\"funcionarios-get-by-id\",\"cargos-options-filter\",\"departamentos-options-filter\"],\"pendingHttpIds\":[],\"httpExamples\":[\"praxisui-http-examples/http/metadata/filtered_schema_response_funcionarios.http\",\"praxisui-http-examples/http/resources/funcionarios_get_by_id.http\",\"praxisui-http-examples/http/resources/cargos_options_filter.http\",\"praxisui-http-examples/http/resources/departamentos_options_filter.http\"]},\"authoringGuidance\":[\"Use praxis-dynamic-form config.sections for the visual layout and fieldMetadata for field behavior.\",\"Keep fieldMetadata.name aligned to fields present in the published response schema.\",\"Use package-owned Dynamic Fields control types already present in the runtime/editorial catalog.\",\"Use readonly mode and readonly field metadata for profile/detail surfaces that should not mutate data.\",\"Use asyncSelect with canonical option endpoints for foreign-key labels such as cargoId and departamentoId.\",\"Use actions.placement and actions.position to show form action bar layout without turning the example into CRUD.\"],\"teaches\":[\"dynamic-form.sections\",\"dynamic-form.fieldMetadata\",\"dynamic-form.actions\",\"dynamic-fields.avatar\",\"dynamic-fields.cpfCnpjInput\",\"dynamic-fields.phone\",\"dynamic-fields.currency\",\"dynamic-fields.asyncSelect\",\"dynamic-fields.toggle\",\"remote-options\",\"readonly-detail\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"funcionarioProfileForm\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"badge\",\"title\":\"Funcionario profile\",\"subtitle\":\"Sectioned readonly form with field-specific controls\"},\"definition\":{\"id\":\"praxis-dynamic-form\",\"bindingOrder\":[\"config\",\"resourcePath\",\"formId\",\"resourceId\"],\"inputs\":{\"formId\":\"human-resources-funcionarios-profile\",\"resourcePath\":\"human-resources/funcionarios\",\"resourceId\":1,\"mode\":\"view\",\"config\":{\"metadata\":{\"name\":\"Funcionario profile surface\",\"version\":\"1.0.0\"},\"sections\":[{\"id\":\"identity\",\"title\":\"Identity\",\"description\":\"Core employee identity and contact data.\",\"appearance\":\"outlined\",\"rows\":[{\"id\":\"identity-row-main\",\"columns\":[{\"id\":\"identity-avatar\",\"span\":{\"md\":3,\"lg\":3},\"fields\":[\"fotoPerfilUrl\",\"ativo\"]},{\"id\":\"identity-primary\",\"span\":{\"md\":9,\"lg\":9},\"fields\":[\"nomeCompleto\",\"cpf\",\"email\",\"telefone\"]}]}]},{\"id\":\"assignment\",\"title\":\"Assignment\",\"description\":\"Role, department and compensation metadata.\",\"appearance\":\"outlined\",\"rows\":[{\"id\":\"assignment-row-1\",\"columns\":[{\"id\":\"assignment-role\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"cargoId\",\"departamentoId\"]},{\"id\":\"assignment-payroll\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"salario\",\"dataAdmissao\"]}]}]},{\"id\":\"personal\",\"title\":\"Personal\",\"description\":\"Civil status and birth metadata kept readonly in this surface.\",\"appearance\":\"outlined\",\"rows\":[{\"id\":\"personal-row-1\",\"columns\":[{\"id\":\"personal-main\",\"fields\":[\"estadoCivil\",\"dataNascimento\"]}]}]}],\"fieldMetadata\":[{\"name\":\"fotoPerfilUrl\",\"label\":\"Avatar\",\"controlType\":\"avatar\",\"imageField\":\"fotoPerfilUrl\",\"readonly\":true},{\"name\":\"nomeCompleto\",\"label\":\"Nome Completo\",\"controlType\":\"input\",\"validators\":{\"required\":true,\"maxLength\":160},\"readonly\":true},{\"name\":\"cpf\",\"label\":\"CPF\",\"controlType\":\"cpfCnpjInput\",\"maskType\":\"cpf\",\"unmaskOnSubmit\":true,\"readonly\":true},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"validators\":{\"email\":true},\"readonly\":true},{\"name\":\"telefone\",\"label\":\"Telefone\",\"controlType\":\"phone\",\"maskType\":\"phone\",\"readonly\":true},{\"name\":\"cargoId\",\"label\":\"Cargo\",\"controlType\":\"asyncSelect\",\"endpoint\":\"/api/human-resources/cargos/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"readonly\":true},{\"name\":\"departamentoId\",\"label\":\"Departamento\",\"controlType\":\"asyncSelect\",\"endpoint\":\"/api/human-resources/departamentos/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"readonly\":true},{\"name\":\"salario\",\"label\":\"Salario\",\"controlType\":\"currency\",\"currencyCode\":\"BRL\",\"locale\":\"pt-BR\",\"readonly\":true},{\"name\":\"dataAdmissao\",\"label\":\"Data de Admissao\",\"controlType\":\"date\",\"readonly\":true},{\"name\":\"estadoCivil\",\"label\":\"Estado Civil\",\"controlType\":\"select\",\"options\":[{\"label\":\"Solteiro\",\"value\":\"SOLTEIRO\"},{\"label\":\"Casado\",\"value\":\"CASADO\"},{\"label\":\"Divorciado\",\"value\":\"DIVORCIADO\"},{\"label\":\"Viuvo\",\"value\":\"VIUVO\"}],\"readonly\":true},{\"name\":\"dataNascimento\",\"label\":\"Data de Nascimento\",\"controlType\":\"date\",\"readonly\":true},{\"name\":\"ativo\",\"label\":\"Ativo\",\"controlType\":\"toggle\",\"readonly\":true}],\"actions\":{\"submit\":{\"id\":\"request-update\",\"label\":\"Request update\",\"visible\":false,\"type\":\"submit\"},\"cancel\":{\"id\":\"close-profile\",\"label\":\"Close\",\"visible\":true,\"type\":\"button\"},\"reset\":{\"id\":\"reset-profile\",\"label\":\"Reset\",\"visible\":false,\"type\":\"reset\"},\"position\":\"right\",\"placement\":\"afterSections\",\"spacing\":\"compact\"}}}}}]}}",
|
|
4315
4325
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.profile-form.json",
|
|
@@ -4319,7 +4329,7 @@
|
|
|
4319
4329
|
"corpusVersion": "1.0.0"
|
|
4320
4330
|
},
|
|
4321
4331
|
{
|
|
4322
|
-
"chunkIndex":
|
|
4332
|
+
"chunkIndex": 135,
|
|
4323
4333
|
"chunkKind": "recipe",
|
|
4324
4334
|
"content": "{\"_comment\":\"Focused Dynamic Page proof for a backend-published relatedResource surface. The page names the surface and parent identity; it never duplicates the child filter.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"related-resource-mission-team\",\"status\":\"public-example\",\"useWhen\":\"Teach how a parent item surface materializes a governed child collection without host-authored relationship rules.\",\"examplePrompts\":[\"show the team related to mission 1\",\"materialize a child table from surface.relatedResource\",\"explain how Praxis derives the parent filter from backend metadata\"]},\"platformValue\":{\"canonicalContract\":\"praxis-api-quickstart publishes operations.missoes item surface team with availability, child resource identity, child path, parent field and allowed child operations.\",\"angularRuntime\":\"@praxisui/core discovers the exact item surface, fails closed when it is missing or denied, derives queryContext.filters.missaoId from relatedResource.childParentField and materializes the child praxis-table.\",\"businessFlow\":\"An operations lead opens the roster for a known mission and receives the current governed participant collection without maintaining a second parent-child rule in the page.\",\"hostResponsibility\":\"The host provides the trusted API origin, authentication and runtime providers. Authorization, availability and relationship metadata remain backend-owned.\"},\"operationalEvidence\":{\"baseUrl\":\"https://praxis-enterprise-proof-sandbox-v2.onrender.com\",\"parentRead\":\"/api/operations/missoes/1\",\"itemSurfaces\":\"/api/operations/missoes/1/surfaces\",\"childFilter\":\"/api/operations/missao-participantes/filter?page=0&size=10\",\"expectedSurface\":{\"id\":\"team\",\"availabilityAllowed\":true,\"childResourceKey\":\"operations.missao-participantes\",\"childResourcePath\":\"/api/operations/missao-participantes\",\"childParentField\":\"missaoId\"}},\"authoringGuidance\":[\"Use surfaceId=team with the canonical parentResourcePath and a real parent identity.\",\"Do not author queryContext.filters.missaoId; RelatedResourceSurfaceResolverService derives it from the published childParentField.\",\"Keep table columns schema-driven and use columnProjection only to select and present the fields that support the story.\",\"Treat permission-limited, not-found and empty as distinct states; never turn missing or denied metadata into an apparently empty authorized table.\",\"Keep child create, update and delete availability capability-governed even when the published relationship lists those operation types.\"],\"teaches\":[\"surface.relatedResource\",\"surface.availability\",\"related-resource.childParentField\",\"related-resource.childResourceKey\",\"related-resource.childResourcePath\",\"praxis-related-resource-outlet\",\"related-resource.fail-closed\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"missionTeamRelationship\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"hub\",\"title\":\"Equipe da missão\",\"subtitle\":\"Relação governada pela surface team da missão Batalha de Nova York\",\"windowActions\":{\"collapsible\":false,\"fullscreen\":true}},\"definition\":{\"id\":\"praxis-related-resource-outlet\",\"bindingOrder\":[\"surfaceId\",\"parentRecord\",\"parentResourceId\",\"parentResourcePath\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"team\",\"parentResourcePath\":\"operations/missoes\",\"parentResourceId\":1,\"parentRecord\":{\"id\":1,\"titulo\":\"Batalha de Nova York\",\"status\":\"EM_ANDAMENTO\",\"prioridade\":\"CRITICA\"},\"mode\":\"inline\",\"tableId\":\"mission-team-related-resource\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":\"Participantes materializados\",\"subtitle\":\"O filtro missaoId nasce de surface.relatedResource, não deste documento\",\"search\":{\"enabled\":true},\"columnsVisibility\":{\"enabled\":false},\"densityToggle\":{\"enabled\":true}},\"columns\":[],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":10,\"pageSizeOptions\":[10,20]},\"sorting\":{\"enabled\":true,\"defaultSort\":{\"column\":\"ordem\",\"direction\":\"asc\"}}},\"columnProjection\":{\"source\":\"schema\",\"include\":[\"funcionarioFotoUrl\",\"funcionarioNome\",\"papel\",\"principal\",\"resultado\"],\"overrides\":{\"funcionarioFotoUrl\":{\"header\":\"Foto\",\"width\":\"72px\"},\"funcionarioNome\":{\"header\":\"Participante\",\"sticky\":\"start\"},\"papel\":{\"header\":\"Papel\"},\"principal\":{\"header\":\"Liderança\",\"format\":\"yes-no\",\"align\":\"center\"},\"resultado\":{\"header\":\"Resultado\"}}}}},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}}}]}}",
|
|
4325
4335
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.related-resource-mission-team.json",
|
|
@@ -4329,7 +4339,7 @@
|
|
|
4329
4339
|
"corpusVersion": "1.0.0"
|
|
4330
4340
|
},
|
|
4331
4341
|
{
|
|
4332
|
-
"chunkIndex":
|
|
4342
|
+
"chunkIndex": 136,
|
|
4333
4343
|
"chunkKind": "recipe",
|
|
4334
4344
|
"content": "{\"_comment\":\"Live remote Praxis Dynamic Page recipe with a Praxis List widget backed only by a published quickstart resourcePath.\",\"_comment2\":\"Use this when an agent needs an end-to-end copyable contract: Dynamic Page + List + GenericCrudService.filter + rich expansion + HATEOAS follow-up actions.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"remote-list\",\"useWhen\":\"Create a dynamic page with a live remote list widget backed by dataSource.resourcePath and rich-content item expansion.\",\"examplePrompts\":[\"page with remote list from resourcePath\",\"list mission participants from the quickstart API\",\"copyable dynamic page with Praxis List, backend pagination and rich item expansion\"],\"requires\":[\"@praxisui/core\",\"@praxisui/list\",\"GenericCrudService\",\"POST /api/{resourcePath}/filter\"]},\"api\":{\"origin\":\"https://praxis-api-quickstart.onrender.com\",\"baseUrl\":\"https://praxis-api-quickstart.onrender.com/api\",\"schemasBaseUrl\":\"https://praxis-api-quickstart.onrender.com/schemas\",\"resourcePath\":\"operations/missao-participantes\",\"resourceKey\":\"operations.missao-participantes\"},\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"remoteMissionParticipantList\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"groups\",\"title\":\"Mission participants\",\"subtitle\":\"Remote quickstart resourcePath with pageable filter data\",\"actions\":[{\"id\":\"toggle-list-customization\",\"label\":\"Customize list\",\"tooltip\":\"Enable or disable list customization mode\",\"icon\":\"toggle_off\",\"pressedIcon\":\"toggle_on\",\"variant\":\"icon\",\"placement\":\"header\",\"command\":\"pdx:toggle-input\",\"pressed\":\"${widget.inputs.enableCustomization}\",\"payload\":{\"input\":\"enableCustomization\"}}]},\"definition\":{\"id\":\"praxis-list\",\"bindingOrder\":[\"listId\",\"componentInstanceId\",\"enableCustomization\",\"config\"],\"inputs\":{\"listId\":\"remote-mission-participant-list-live\",\"componentInstanceId\":\"dynamic-page-live-remote\",\"enableCustomization\":false,\"config\":{\"id\":\"remote-mission-participant-list-live-config\",\"dataSource\":{\"resourcePath\":\"operations/missao-participantes\",\"query\":{},\"sort\":[\"ordem,asc\"]},\"layout\":{\"variant\":\"list\",\"density\":\"comfortable\",\"lines\":3,\"dividers\":\"between\",\"pageSize\":8,\"rowLayout\":{\"type\":\"grid\",\"columns\":[{\"slot\":\"leading\",\"width\":\"44px\",\"align\":\"center\"},{\"slot\":\"primary\",\"width\":\"minmax(180px, 1fr)\"},{\"slot\":\"secondary\",\"width\":\"minmax(220px, 1.2fr)\"},{\"slot\":\"meta\",\"width\":\"140px\",\"align\":\"center\"},{\"slot\":\"trailing\",\"width\":\"120px\",\"align\":\"center\"},{\"slot\":\"actions\",\"width\":\"92px\",\"align\":\"center\"}],\"gap\":\"12px\",\"align\":\"center\"}},\"skin\":{\"type\":\"outline\",\"radius\":\"8px\",\"border\":\"1px solid rgba(20, 184, 166, 0.32)\"},\"selection\":{\"mode\":\"multiple\",\"compareBy\":\"funcionarioId\",\"return\":\"id\"},\"interaction\":{\"expandable\":true,\"expandTrigger\":\"icon\",\"expandMode\":\"single\",\"expandPlacement\":\"actions\"},\"templating\":{\"leading\":{\"type\":\"icon\",\"expr\":\"groups\"},\"primary\":{\"type\":\"text\",\"expr\":\"${item.funcionarioNome}\"},\"secondary\":{\"type\":\"text\",\"expr\":\"${item.missaoTitulo}\"},\"meta\":{\"type\":\"chip\",\"expr\":\"${item.papel}\",\"variant\":\"outlined\"},\"trailing\":{\"type\":\"chip\",\"expr\":\"${item.resultado}\",\"variant\":\"filled\"},\"features\":[{\"type\":\"chip\",\"expr\":\"missao #${item.missaoId}\",\"variant\":\"outlined\"},{\"type\":\"chip\",\"expr\":\"funcionario #${item.funcionarioId}\",\"variant\":\"outlined\"}],\"featuresMode\":\"labels-only\",\"emptyState\":{\"type\":\"text\",\"expr\":\"No mission participants returned by the quickstart filter.\"}},\"expansion\":{\"sections\":[{\"id\":\"mission-participant-detail\",\"title\":\"Mission participant detail\",\"type\":\"rich-content\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"id\":\"relationship-summary\",\"type\":\"propertySheet\",\"title\":\"Relationship\",\"columns\":2,\"items\":[{\"id\":\"participant\",\"label\":\"Participant\",\"valueExpr\":\"${item.funcionarioNome}\",\"icon\":\"person\"},{\"id\":\"mission\",\"label\":\"Mission\",\"valueExpr\":\"${item.missaoTitulo}\",\"icon\":\"flag\"},{\"id\":\"role\",\"label\":\"Role\",\"valueExpr\":\"${item.papel}\",\"icon\":\"military_tech\",\"tone\":\"info\"},{\"id\":\"result\",\"label\":\"Result\",\"valueExpr\":\"${item.resultado}\",\"icon\":\"verified\",\"tone\":\"success\"}]},{\"id\":\"hateoas-actions\",\"type\":\"actionCard\",\"title\":\"Governed API context\",\"subtitle\":\"HATEOAS links are available for this item without exposing raw JSON in the UI.\",\"message\":\"Use the list actions to inspect surfaces or capabilities from the same canonical resource.\",\"icon\":\"hub\",\"ctaLabel\":\"Inspect capabilities\",\"ctaIcon\":\"bolt\",\"variant\":\"stroked\",\"color\":\"primary\",\"action\":{\"actionId\":\"missionParticipant.inspectCapabilities\",\"payloadExpr\":\"${item._links.capabilities.href}\"}}]}}],\"rendering\":{\"shell\":\"attached\",\"columns\":1,\"gap\":\"12px\",\"padding\":\"12px\"}},\"actions\":[{\"id\":\"open-participant-surfaces\",\"icon\":\"layers\",\"label\":\"Surfaces\",\"kind\":\"icon\",\"globalAction\":{\"actionId\":\"surface.open\",\"payload\":{\"presentation\":\"modal\",\"title\":\"Participant surfaces\",\"icon\":\"layers\",\"subtitle\":\"Governed follow-up surfaces for the selected participant\",\"size\":{\"width\":\"720px\",\"maxWidth\":\"90vw\"},\"widget\":{\"id\":\"widget:rich-text-block\",\"inputs\":{\"title\":\"Published surfaces for ${item.funcionarioNome}\",\"content\":\"The selected participant belongs to ${item.missaoTitulo}. Surface actions should open governed runtime projections instead of leaving row buttons as inert local events. Capability link: ${item._links.capabilities.href}\",\"variant\":\"emphasis\"}}}},\"emitLocal\":false,\"showLoading\":true,\"placement\":\"actions\"},{\"id\":\"inspect-participant-capabilities\",\"icon\":\"bolt\",\"label\":\"Capabilities\",\"kind\":\"icon\",\"globalAction\":{\"actionId\":\"surface.open\",\"payload\":{\"presentation\":\"modal\",\"title\":\"Participant capabilities\",\"icon\":\"bolt\",\"subtitle\":\"Canonical capabilities entrypoint for the selected participant\",\"size\":{\"width\":\"720px\",\"maxWidth\":\"90vw\"},\"widget\":{\"id\":\"widget:rich-text-block\",\"inputs\":{\"title\":\"Capabilities for ${item.funcionarioNome}\",\"content\":\"Use the canonical HATEOAS capabilities link to inspect the operations available for this participant: ${item._links.capabilities.href}. The list action is executed through surface.open, so the runtime gives immediate feedback without host-local action glue.\",\"variant\":\"emphasis\"}}}},\"emitLocal\":false,\"showLoading\":true,\"placement\":\"actions\"}],\"ui\":{\"showSearch\":false,\"showSort\":true,\"sortOptions\":[{\"label\":\"ID\",\"value\":\"id,asc\"},{\"label\":\"Role\",\"value\":\"papel,asc\"}],\"showRange\":true},\"a11y\":{\"ariaLabel\":\"Remote mission participants list\"}}},\"outputs\":{\"itemClick\":\"emit\",\"actionClick\":\"emit\",\"selectionChange\":\"emit\"}}}]}}",
|
|
4335
4345
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.remote-list.json",
|
|
@@ -4339,7 +4349,7 @@
|
|
|
4339
4349
|
"corpusVersion": "1.0.0"
|
|
4340
4350
|
},
|
|
4341
4351
|
{
|
|
4342
|
-
"chunkIndex":
|
|
4352
|
+
"chunkIndex": 137,
|
|
4343
4353
|
"chunkKind": "recipe",
|
|
4344
4354
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment\",\"_comment\":\"Praxis Dynamic Page recipe that demonstrates praxis-rich-content as a reusable knowledge surface for policy, metrics, timelines and AI-readable operational guidance.\"}",
|
|
4345
4355
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4349,7 +4359,7 @@
|
|
|
4349
4359
|
"corpusVersion": "1.0.0"
|
|
4350
4360
|
},
|
|
4351
4361
|
{
|
|
4352
|
-
"chunkIndex":
|
|
4362
|
+
"chunkIndex": 138,
|
|
4353
4363
|
"chunkKind": "recipe",
|
|
4354
4364
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"rich-content-knowledge-surface\",\"status\":\"public-example\",\"useWhen\":\"Create a Dynamic Page with rich presentation surfaces and host-mediated actions instead of custom explanatory Angular templates.\",\"examplePrompts\":[\"create a dynamic page with a rich policy briefing\",\"show praxis-rich-content with metrics and timeline\",\"generate an AI-readable knowledge surface\",\"show host-mediated rich content actions in dynamic page\"]}}",
|
|
4355
4365
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4359,7 +4369,7 @@
|
|
|
4359
4369
|
"corpusVersion": "1.0.0"
|
|
4360
4370
|
},
|
|
4361
4371
|
{
|
|
4362
|
-
"chunkIndex":
|
|
4372
|
+
"chunkIndex": 139,
|
|
4363
4373
|
"chunkKind": "recipe",
|
|
4364
4374
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"platformValue\",\"platformValue\":{\"canonicalRuntime\":\"@praxisui/rich-content owns RichContentDocument rendering.\",\"hostMediation\":\"praxis-dynamic-page injects hostCapabilities at runtime for hosted praxis-rich-content widgets.\",\"publicExamples\":\"praxis-ui-landing-page exposes the live preview and inspector JSON.\",\"agentCorpus\":\"This recipe keeps agents on portable nodes, separates rich presentation from editable data widgets and makes host-mediated actions explicit without serializing runtime helpers.\"}}",
|
|
4365
4375
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4369,7 +4379,7 @@
|
|
|
4369
4379
|
"corpusVersion": "1.0.0"
|
|
4370
4380
|
},
|
|
4371
4381
|
{
|
|
4372
|
-
"chunkIndex":
|
|
4382
|
+
"chunkIndex": 140,
|
|
4373
4383
|
"chunkKind": "recipe",
|
|
4374
4384
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringGuidance\",\"authoringGuidance\":[\"Use definition.id \\\"praxis-rich-content\\\".\",\"Pass a canonical document through inputs.document for block surfaces.\",\"Pass inputs.nodes plus layout \\\"inline\\\" for compact ribbons or cell-style content.\",\"Use context and *Expr fields for host-state interpolation.\",\"Use actionButton plus action.actionId when the host should mediate an action instead of embedding handler code in the document.\",\"Use action.confirmMessage for governed confirmation. Hosted praxis-rich-content calls hostCapabilities.confirmAction first and fails closed without dispatch when the host omits or rejects confirmation.\",\"Use requiresCapabilities for nodes that should appear only when the hosting runtime exposes the required capability snapshot.\",\"Do not serialize hostCapabilities inside the page JSON; praxis-dynamic-page injects that runtime capability bridge only while rendering hosted praxis-rich-content widgets.\",\"Do not use rich-content as a replacement for table rows, form fields or list records.\"]}",
|
|
4375
4385
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4379,7 +4389,7 @@
|
|
|
4379
4389
|
"corpusVersion": "1.0.0"
|
|
4380
4390
|
},
|
|
4381
4391
|
{
|
|
4382
|
-
"chunkIndex":
|
|
4392
|
+
"chunkIndex": 141,
|
|
4383
4393
|
"chunkKind": "recipe",
|
|
4384
4394
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"}}}",
|
|
4385
4395
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4389,7 +4399,7 @@
|
|
|
4389
4399
|
"corpusVersion": "1.0.0"
|
|
4390
4400
|
},
|
|
4391
4401
|
{
|
|
4392
|
-
"chunkIndex":
|
|
4402
|
+
"chunkIndex": 142,
|
|
4393
4403
|
"chunkKind": "recipe",
|
|
4394
4404
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[0]\",\"fragmentPath\":\"page.widgets[0]\",\"fragmentIdentity\":{\"key\":\"missionKnowledgeBriefing\"},\"fragment\":{\"key\":\"missionKnowledgeBriefing\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"article\",\"title\":\"Mission knowledge briefing\",\"subtitle\":\"Policy, metrics and timeline authored as RichContentDocument\"}}}",
|
|
4395
4405
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4399,7 +4409,7 @@
|
|
|
4399
4409
|
"corpusVersion": "1.0.0"
|
|
4400
4410
|
},
|
|
4401
4411
|
{
|
|
4402
|
-
"chunkIndex":
|
|
4412
|
+
"chunkIndex": 143,
|
|
4403
4413
|
"chunkKind": "recipe",
|
|
4404
4414
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[0].definition\",\"fragmentPath\":\"page.widgets[0].definition\",\"fragmentIdentity\":{\"key\":\"missionKnowledgeBriefing\",\"id\":\"praxis-rich-content\"},\"fragment\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"document\",\"context\",\"layout\",\"rootClassName\"]}}",
|
|
4405
4415
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4409,7 +4419,7 @@
|
|
|
4409
4419
|
"corpusVersion": "1.0.0"
|
|
4410
4420
|
},
|
|
4411
4421
|
{
|
|
4412
|
-
"chunkIndex":
|
|
4422
|
+
"chunkIndex": 144,
|
|
4413
4423
|
"chunkKind": "recipe",
|
|
4414
4424
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[0].definition.inputs\",\"fragmentPath\":\"page.widgets[0].definition.inputs\",\"fragmentIdentity\":{\"key\":\"missionKnowledgeBriefing\",\"id\":\"praxis-rich-content\"},\"fragment\":{\"layout\":\"block\",\"rootClassName\":\"dynamic-page-rich-content-knowledge-surface\",\"context\":{\"mission\":{\"name\":\"Operation Dawn Gate\",\"owner\":\"Ariadne Ops\",\"readiness\":82,\"risk\":\"Elevated\",\"semanticRisk\":\"medium\",\"governanceStatus\":\"published\",\"region\":\"South Atlantic\"},\"policy\":{\"owner\":\"Platform Governance\",\"version\":\"2026.04\",\"source\":\"Quickstart reference contract\",\"lastReviewed\":\"2026-04-18\",\"cueCount\":3,\"cueCaption\":\"governed cues\"}}}}",
|
|
4415
4425
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4419,7 +4429,7 @@
|
|
|
4419
4429
|
"corpusVersion": "1.0.0"
|
|
4420
4430
|
},
|
|
4421
4431
|
{
|
|
4422
|
-
"chunkIndex":
|
|
4432
|
+
"chunkIndex": 145,
|
|
4423
4433
|
"chunkKind": "recipe",
|
|
4424
4434
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[0].definition.inputs.document\",\"fragmentPath\":\"page.widgets[0].definition.inputs.document\",\"fragmentIdentity\":{\"key\":\"missionKnowledgeBriefing\",\"id\":\"praxis-rich-content\",\"kind\":\"praxis.rich-content\"},\"fragment\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\"}}",
|
|
4425
4435
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4429,7 +4439,7 @@
|
|
|
4429
4439
|
"corpusVersion": "1.0.0"
|
|
4430
4440
|
},
|
|
4431
4441
|
{
|
|
4432
|
-
"chunkIndex":
|
|
4442
|
+
"chunkIndex": 146,
|
|
4433
4443
|
"chunkKind": "recipe",
|
|
4434
4444
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[0].definition.inputs.document.nodes\",\"fragmentPath\":\"page.widgets[0].definition.inputs.document.nodes\",\"fragmentIdentity\":{\"key\":\"missionKnowledgeBriefing\",\"id\":\"praxis-rich-content\",\"kind\":\"praxis.rich-content\"},\"fragment\":[{\"id\":\"governed-decision-brief\",\"type\":\"decisionPackage\",\"titleExpr\":\"${mission.name}\",\"subtitleExpr\":\"${policy.source}\",\"summary\":\"Governed semantic briefing authored from the reference contract: readiness, risk, owner and policy version stay portable as one RichContentDocument while the host owns runtime actions.\",\"statusExpr\":\"${mission.governanceStatus}\",\"ownerExpr\":\"${policy.owner}\",\"policySourceExpr\":\"${policy.source}\",\"versionExpr\":\"${policy.version}\",\"confidenceExpr\":\"${mission.readiness}\",\"riskExpr\":\"${mission.semanticRisk}\",\"lastReviewedExpr\":\"${policy.lastReviewed}\",\"evidence\":[{\"id\":\"quickstart-contract\",\"label\":\"Reference contract\",\"source\":\"schemas.filtered\"},{\"id\":\"ai-authoring\",\"label\":\"AI-authored decision\",\"source\":\"RichContentDocument\"}],\"primaryAction\":{\"type\":\"actionButton\",\"label\":\"Inspect decision package\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"mission.decision.inspect\"}},\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open evidence\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"mission.evidence.open\"}}],\"accessibility\":{\"role\":\"article\",\"ariaLabel\":\"Governed semantic decision briefing\"}},{\"type\":\"card\",\"title\":\"Compact policy note\",\"subtitle\":\"Outlined / neutral / compact / leading icon\",\"variant\":\"outlined\",\"tone\":\"neutral\",\"size\":\"sm\",\"density\":\"compact\",\"orientation\":\"horizontal\",\"media\":{\"kind\":\"icon\",\"icon\":\"policy\",\"label\":\"Policy note\",\"placement\":\"leading\"},\"accessibility\":{\"role\":\"group\",\"ariaLabel\":\"Compact neutral policy card with leading policy icon\"},\"content\":[{\"type\":\"text\",\"text\":\"Dense policy hints can stay readable when media, tags and body copy are balanced inside one portable card.\"},{\"type\":\"compose\",\"wrap\":true,\"gap\":\"xs\",\"items\":[{\"type\":\"badge\",\"label\":\"policy hint\"},{\"type\":\"badge\",\"label\":\"dense\"},{\"type\":\"badge\",\"label\":\"portable\"}]},{\"type\":\"metric\",\"label\":\"Signal\",\"valueExpr\":\"${policy.cueCount}\",\"captionExpr\":\"${policy.cueCaption}\"}]},{\"type\":\"card\",\"title\":\"Reusable decision package\",\"subtitle\":\"Filled / success / selectable\",\"variant\":\"filled\",\"tone\":\"success\",\"size\":\"md\",\"density\":\"comfortable\",\"orientation\":\"horizontal\",\"active\":true,\"media\":{\"kind\":\"image\",\"src\":\"/examples/rich-content/reusable-decision-package-portrait.png\",\"alt\":\"Generated portrait of a verified reusable decision package with approval lineage\",\"placement\":\"leading\",\"aspectRatio\":\"3 / 4\"},\"interaction\":{\"mode\":\"selectable\",\"selected\":true},\"accessibility\":{\"role\":\"button\",\"ariaLabel\":\"Selected reusable decision package card\"},\"content\":[{\"type\":\"text\",\"text\":\"Selectable cards can express governed choices while keeping the host responsible for persistence and action routing.\"},{\"type\":\"compose\",\"wrap\":true,\"gap\":\"sm\",\"items\":[{\"type\":\"badge\",\"label\":\"selected\"},{\"type\":\"badge\",\"label\":\"active\"},{\"type\":\"badge\",\"label\":\"portrait media\"},{\"type\":\"badge\",\"label\":\"92% confidence\"}]}]},{\"type\":\"card\",\"title\":\"Risk review checkpoint\",\"subtitle\":\"Transparent / warning / top generated media\",\"variant\":\"transparent\",\"tone\":\"warning\",\"size\":\"md\",\"density\":\"comfortable\",\"orientation\":\"vertical\",\"media\":{\"kind\":\"image\",\"src\":\"/examples/rich-content/risk-review-checkpoint.png\",\"alt\":\"Generated warning checkpoint dashboard with audit trail and review markers\",\"placement\":\"top\",\"aspectRatio\":\"21 / 9\"},\"headerAction\":{\"type\":\"actionButton\",\"label\":\"Review\",\"icon\":\"rule\",\"variant\":\"stroked\",\"color\":\"accent\",\"action\":{\"actionId\":\"reviewRiskCheckpoint\",\"payload\":{\"source\":\"rich-content-card-gallery\",\"checkpoint\":\"risk-review\"}}},\"accessibility\":{\"role\":\"article\",\"ariaLabel\":\"Risk review checkpoint card with generated warning image\"},\"content\":[{\"type\":\"compose\",\"wrap\":true,\"gap\":\"sm\",\"items\":[{\"type\":\"badge\",\"label\":\"warning\"},{\"type\":\"badge\",\"label\":\"generated image\"},{\"type\":\"badge\",\"label\":\"header action\"}]},{\"type\":\"text\",\"text\":\"Header actions keep secondary affordances visible without turning every card into a host-specific wrapper.\"}]},{\"type\":\"card\",\"title\":\"Escalation context\",\"subtitle\":\"Plain / danger / background media\",\"variant\":\"plain\",\"tone\":\"danger\",\"size\":\"sm\",\"density\":\"compact\",\"orientation\":\"vertical\",\"media\":{\"kind\":\"image\",\"src\":\"/examples/rich-content/danger-escalation-gate.png\",\"alt\":\"Generated blocked decision package paused behind a red escalation gate\",\"placement\":\"background\",\"aspectRatio\":\"21 / 9\"},\"accessibility\":{\"role\":\"article\",\"ariaLabel\":\"Plain danger escalation context card with background icon\"},\"content\":[{\"type\":\"text\",\"text\":\"Use danger tone for blocked or escalated decisions that need immediate human attention before publication.\"},{\"type\":\"compose\",\"wrap\":true,\"gap\":\"xs\",\"items\":[{\"type\":\"icon\",\"icon\":\"priority_high\",\"ariaLabel\":\"High priority\"},{\"type\":\"badge\",\"label\":\"danger\"},{\"type\":\"badge\",\"label\":\"generated background\"}]}]},{\"type\":\"card\",\"title\":\"Published visual evidence\",\"subtitle\":\"Elevated / info / image media\",\"variant\":\"elevated\",\"tone\":\"info\",\"size\":\"md\",\"density\":\"comfortable\",\"orientation\":\"vertical\",\"media\":{\"kind\":\"image\",\"src\":\"/examples/rich-content/governed-evidence-publication.png\",\"alt\":\"Generated governed evidence publication surface with verified decision document\",\"placement\":\"top\",\"aspectRatio\":\"21 / 9\"},\"accessibility\":{\"role\":\"article\",\"ariaLabel\":\"Info card with top image media\"},\"content\":[{\"type\":\"compose\",\"wrap\":true,\"gap\":\"sm\",\"items\":[{\"type\":\"badge\",\"label\":\"image\"},{\"type\":\"badge\",\"label\":\"top media\"},{\"type\":\"badge\",\"label\":\"elevated\"}]},{\"type\":\"text\",\"text\":\"Image media is useful for evidence cards, product explainers and visual attachments without leaving the canonical document contract.\"}]},{\"type\":\"card\",\"title\":\"Governed next step\",\"subtitle\":\"Outlined / action mode / button semantics\",\"variant\":\"outlined\",\"tone\":\"success\",\"size\":\"md\",\"density\":\"comfortable\",\"orientation\":\"horizontal\",\"media\":{\"kind\":\"icon\",\"icon\":\"rocket_launch\",\"label\":\"Publish\",\"placement\":\"leading\"},\"interaction\":{\"mode\":\"action\",\"action\":{\"actionId\":\"publishDecisionPreview\",\"payload\":{\"source\":\"rich-content-card-gallery\",\"step\":\"publish-preview\"}}},\"accessibility\":{\"role\":\"button\",\"ariaLabel\":\"Publish decision preview action card\"},\"content\":[{\"type\":\"text\",\"text\":\"Action cards can be keyboard-focusable semantic buttons while the host still owns authorization, routing and side effects.\"},{\"type\":\"compose\",\"wrap\":true,\"gap\":\"xs\",\"items\":[{\"type\":\"badge\",\"label\":\"action\"},{\"type\":\"badge\",\"label\":\"keyboard ready\"},{\"type\":\"badge\",\"label\":\"host mediated\"}]}]},{\"type\":\"card\",\"title\":\"Quiet reference card\",\"subtitle\":\"Transparent / neutral / trailing avatar\",\"variant\":\"transparent\",\"tone\":\"neutral\",\"size\":\"sm\",\"density\":\"compact\",\"orientation\":\"horizontal\",\"media\":{\"kind\":\"avatar\",\"label\":\"QA\",\"placement\":\"trailing\"},\"accessibility\":{\"role\":\"group\",\"ariaLabel\":\"Quiet neutral reference card with trailing avatar\"},\"content\":[{\"type\":\"text\",\"text\":\"Transparent neutral cards work well for secondary notes, attribution and compact reference material.\"}]},{\"type\":\"card\",\"title\":\"Approval pending\",\"subtitle\":\"Filled / warning / compact leading status\",\"variant\":\"filled\",\"tone\":\"warning\",\"size\":\"sm\",\"density\":\"compact\",\"orientation\":\"horizontal\",\"loading\":true,\"media\":{\"kind\":\"icon\",\"icon\":\"hourglass_top\",\"label\":\"Pending\",\"placement\":\"leading\"},\"accessibility\":{\"role\":\"article\",\"ariaLabel\":\"Warning card showing a pending loading state\"},\"content\":[{\"type\":\"text\",\"text\":\"Loading state communicates that the card is waiting for a governed publication or approval snapshot.\"},{\"type\":\"compose\",\"wrap\":true,\"gap\":\"xs\",\"items\":[{\"type\":\"badge\",\"label\":\"pending\"},{\"type\":\"badge\",\"label\":\"compact status\"}]}]}]}",
|
|
4435
4445
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4439,7 +4449,7 @@
|
|
|
4439
4449
|
"corpusVersion": "1.0.0"
|
|
4440
4450
|
},
|
|
4441
4451
|
{
|
|
4442
|
-
"chunkIndex":
|
|
4452
|
+
"chunkIndex": 147,
|
|
4443
4453
|
"chunkKind": "recipe",
|
|
4444
4454
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[0].definition.inputs.document.nodes\",\"fragmentPath\":\"page.widgets[0].definition.inputs.document.nodes\",\"fragmentIdentity\":{\"key\":\"missionKnowledgeBriefing\",\"id\":\"praxis-rich-content\",\"kind\":\"praxis.rich-content\"},\"fragment\":[{\"id\":\"decision-provenance-note\",\"type\":\"mediaBlock\",\"avatar\":{\"type\":\"avatar\",\"initials\":\"AI\",\"name\":\"AI-authored decision\"},\"title\":{\"type\":\"text\",\"text\":\"Authoring evidence\"},\"subtitle\":{\"type\":\"text\",\"text\":\"Policy context, ownership and runtime boundaries travel with the document; editable business data remains in forms, tables and governed host services.\"},\"meta\":{\"type\":\"badge\",\"label\":\"runtime-safe JSON\"},\"trailing\":[{\"type\":\"icon\",\"icon\":\"psychology\",\"ariaLabel\":\"AI ready\"}]},{\"id\":\"decision-lifecycle\",\"type\":\"timeline\",\"title\":\"Decision lifecycle\",\"orientation\":\"horizontal\",\"order\":\"reverse\",\"position\":\"alternate\",\"connectorVariant\":\"dashed\",\"markerVariant\":\"number\",\"markerColor\":\"primary\",\"emphasis\":\"strong\",\"density\":\"spacious\",\"textAppearance\":\"prominent\",\"style\":{\"--prx-rich-timeline-item-body-background\":\"color-mix(in srgb, var(--md-sys-color-primary, #6750a4) 8%, transparent)\",\"--prx-rich-timeline-item-body-border\":\"1px solid color-mix(in srgb, var(--md-sys-color-primary, #6750a4) 28%, transparent)\",\"--prx-rich-timeline-item-body-border-radius\":\"8px\",\"--prx-rich-timeline-item-body-padding\":\"14px\"},\"items\":[{\"icon\":\"schema\",\"title\":\"Grounded\",\"subtitle\":\"Resolve the canonical contract and classify the surface as explanation, data or action before rendering.\",\"meta\":\"schemas.filtered + recipes\",\"opposite\":\"1. Ground\",\"badge\":\"source\"},{\"icon\":\"article\",\"title\":\"Authored\",\"subtitle\":\"Publish briefing, metrics and evidence as a portable RichContentDocument instead of a local Angular template.\",\"meta\":\"praxis-rich-content\",\"opposite\":\"2. Author\",\"badge\":\"runtime\"},{\"icon\":\"open_in_new\",\"title\":\"Materialized\",\"subtitle\":\"Reuse the same semantic decision package in tabs, dialogs, steppers, list expansion or dashboard cells.\",\"meta\":\"Dynamic Page composition\",\"opposite\":\"3. Publish\",\"badge\":\"portable\"}]}]}",
|
|
4445
4455
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4449,7 +4459,7 @@
|
|
|
4449
4459
|
"corpusVersion": "1.0.0"
|
|
4450
4460
|
},
|
|
4451
4461
|
{
|
|
4452
|
-
"chunkIndex":
|
|
4462
|
+
"chunkIndex": 148,
|
|
4453
4463
|
"chunkKind": "recipe",
|
|
4454
4464
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets\",\"page\":{\"widgets\":[{\"key\":\"missionKnowledgeStatusRibbon\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"fact_check\",\"title\":\"Inline status ribbon\",\"subtitle\":\"Compact rich-content nodes for toolbar and table-cell style affordances\"},\"definition\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"nodes\",\"context\",\"layout\",\"rootClassName\"],\"inputs\":{\"layout\":\"inline\",\"rootClassName\":\"dynamic-page-rich-content-inline-status\",\"context\":{\"status\":{\"icon\":\"verified\",\"label\":\"Governed knowledge surface\",\"phase\":\"Reusable\"}},\"nodes\":[{\"type\":\"icon\",\"icon\":\"verified\",\"ariaLabel\":\"Verified\"},{\"type\":\"text\",\"textExpr\":\"${status.label}\"},{\"type\":\"badge\",\"labelExpr\":\"${status.phase}\"}]}}},{\"key\":\"missionKnowledgeHostMediation\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"hub\",\"title\":\"Host-mediated editorial actions\",\"subtitle\":\"Action buttons and capability-gated blocks resolved by praxis-dynamic-page at runtime\"},\"definition\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"document\",\"context\"],\"inputs\":{\"context\":{\"selectedRecord\":{\"name\":\"Carla Mendes\",\"department\":\"Platform Governance\",\"status\":\"Needs review\",\"recordId\":\"employee-42\"},\"pageRuntime\":{\"capability\":\"page.widget.configurable\",\"actionChannel\":\"customAction or GlobalActionService\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"callout\",\"tone\":\"info\",\"icon\":\"hub\",\"title\":\"Runtime host mediation\",\"message\":\"Hosted praxis-rich-content widgets can trigger governed actions and capability-gated editorial blocks without persisting runtime helpers in WidgetPageDefinition.\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Open details\",\"icon\":\"open_in_new\",\"variant\":\"stroked\",\"color\":\"primary\",\"action\":{\"actionId\":\"openDetails\",\"confirmMessage\":\"Confirm opening the governed details package?\",\"payload\":{\"source\":\"rich-content-knowledge-surface\",\"widgetKey\":\"missionKnowledgeHostMediation\"}}}]},{\"type\":\"recordSummary\",\"titleExpr\":\"${selectedRecord.name}\",\"subtitleExpr\":\"${selectedRecord.department}\",\"metaExpr\":\"${pageRuntime.actionChannel}\",\"fields\":[{\"label\":\"Status\",\"valueExpr\":\"${selectedRecord.status}\"},{\"label\":\"Capability gate\",\"valueExpr\":\"${pageRuntime.capability}\"},{\"label\":\"Persistence rule\",\"value\":\"Persist only document/context; never persist hostCapabilities\"}],\"actions\":[{\"type\":\"actionButton\",\"label\":\"Inspect widget settings\",\"icon\":\"settings\",\"variant\":\"flat\",\"color\":\"accent\",\"action\":{\"actionId\":\"openWidgetSettings\",\"payloadExpr\":\"${selectedRecord}\"}}]},{\"type\":\"statGroup\",\"title\":\"Governed host metrics\",\"subtitle\":\"Portable KPI summary owned by the rich-content document\",\"layout\":\"grid\",\"items\":[{\"label\":\"Capability gates\",\"value\":\"1\",\"captionExpr\":\"${pageRuntime.capability}\",\"icon\":\"shield\"},{\"label\":\"Action channel\",\"value\":\"2\",\"captionExpr\":\"${pageRuntime.actionChannel}\",\"icon\":\"hub\"},{\"label\":\"Selection status\",\"valueExpr\":\"${selectedRecord.status}\",\"captionExpr\":\"${selectedRecord.recordId}\",\"icon\":\"person_search\"}]},{\"type\":\"tabs\",\"title\":\"Governed host views\",\"subtitle\":\"One portable document organizing multiple editorial panels without host-specific tab markup.\",\"appearance\":\"underline\",\"defaultTabId\":\"overview\",\"items\":[{\"id\":\"overview\",\"label\":\"Overview\",\"icon\":\"dashboard\",\"content\":[{\"type\":\"text\",\"text\":\"Tabs keep explanatory panels, summaries and governed actions inside the canonical RichContentDocument instead of forcing each host to invent its own tab container.\"}]},{\"id\":\"selection\",\"label\":\"Selection\",\"icon\":\"person_search\",\"badgeExpr\":\"${selectedRecord.status}\",\"content\":[{\"type\":\"keyValueList\",\"layout\":\"stacked\",\"items\":[{\"label\":\"Selected record\",\"valueExpr\":\"${selectedRecord.name}\"},{\"label\":\"Department\",\"valueExpr\":\"${selectedRecord.department}\"},{\"label\":\"Portability rule\",\"value\":\"Selected record context stays portable across host surfaces.\"}]}]}]},{\"type\":\"ctaGroup\",\"title\":\"Next steps\",\"subtitle\":\"Choose the governed host action\",\"message\":\"Use a semantic CTA cluster when the host must expose multiple governed next steps from one portable document.\",\"layout\":\"split\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Open governed lookup\",\"icon\":\"open_in_new\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"openDetails\",\"confirmMessage\":\"Confirm opening the governed lookup?\",\"payloadExpr\":\"${selectedRecord}\"}},{\"type\":\"actionButton\",\"label\":\"Inspect widget settings\",\"icon\":\"settings\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"openWidgetSettings\",\"payloadExpr\":\"${selectedRecord}\"}}]},{\"type\":\"relatedRecord\",\"title\":\"Reports to\",\"subtitleExpr\":\"${selectedRecord.name}\",\"relationLabel\":\"Manager record\",\"metaExpr\":\"${selectedRecord.department}\",\"ctaLabel\":\"Open related manager\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"openDetails\",\"confirmMessage\":\"Confirm opening the related manager record?\",\"payloadExpr\":\"${selectedRecord}\"},\"fields\":[{\"label\":\"Selection status\",\"valueExpr\":\"${selectedRecord.status}\",\"hint\":\"Resolved from the same selected record context.\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Inspect related settings\",\"icon\":\"settings\",\"variant\":\"stroked\",\"color\":\"accent\",\"action\":{\"actionId\":\"openWidgetSettings\",\"payloadExpr\":\"${selectedRecord}\"}}]},{\"type\":\"actionCard\",\"title\":\"Inspect governed package\",\"subtitleExpr\":\"${selectedRecord.department}\",\"message\":\"Use actionCard when the host must execute a governed workflow from an editorial surface without embedding handlers in the document.\",\"metaExpr\":\"${pageRuntime.actionChannel}\",\"ctaLabel\":\"Inspect governed package\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"openDetails\",\"confirmMessage\":\"Confirm inspecting this governed package?\",\"payloadExpr\":\"${selectedRecord}\"},\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Inspect widget settings\",\"icon\":\"settings\",\"variant\":\"stroked\",\"color\":\"accent\",\"action\":{\"actionId\":\"openWidgetSettings\",\"payloadExpr\":\"${selectedRecord}\"}}]},{\"type\":\"disclosure\",\"title\":\"Visible only when the page host exposes widget configuration capability\",\"subtitle\":\"This block stays in the document but the host decides whether it renders\",\"appearance\":\"card\",\"defaultExpanded\":true,\"requiresCapabilities\":[\"page.widget.configurable\"],\"content\":[{\"type\":\"keyValueList\",\"layout\":\"stacked\",\"items\":[{\"label\":\"Capability source\",\"value\":\"DynamicWidgetPageComponent hostCapabilities.hasCapability\"},{\"label\":\"Action dispatch\",\"value\":\"hostCapabilities.dispatchAction resolves GlobalActionService first and falls back to customAction\"},{\"label\":\"Persisted contract\",\"value\":\"definition.inputs.document remains the only canonical rich-content payload in the page JSON\"}]}]},{\"type\":\"emptyState\",\"icon\":\"data_object\",\"title\":\"Do not serialize runtime bridges\",\"message\":\"This recipe intentionally omits hostCapabilities from definition.inputs. Runtime helpers belong to the page host, not to the persisted recipe.\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Refresh host state\",\"icon\":\"refresh\",\"variant\":\"basic\",\"action\":{\"actionId\":\"refreshHostState\",\"payload\":{\"recordId\":\"employee-42\"}}}]}]}}}}]}}",
|
|
4455
4465
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4459,7 +4469,7 @@
|
|
|
4459
4469
|
"corpusVersion": "1.0.0"
|
|
4460
4470
|
},
|
|
4461
4471
|
{
|
|
4462
|
-
"chunkIndex":
|
|
4472
|
+
"chunkIndex": 149,
|
|
4463
4473
|
"chunkKind": "recipe",
|
|
4464
4474
|
"content": "{\"_comment\":\"Recipe para agentes criarem uma Praxis Dynamic Page com tabela rica sobre o quickstart publicado.\",\"_comment2\":\"Use quando a meta for demonstrar renderers, formatters e configuracao de coluna em praxis-table sem mudar o backend.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"rich-table-surface\",\"status\":\"public-example\",\"useWhen\":\"Create a metadata-driven page that turns one resource table into a rich operational surface with explicit renderers and formatters.\",\"examplePrompts\":[\"crie uma tabela rica de funcionarios com avatar, badges, salario e datas\",\"gere um exemplo de praxis-table mostrando renderers e formatters\",\"monte uma dynamic page com tabela operacional usando o quickstart publicado\"]},\"platformValue\":{\"canonicalContract\":\"praxis-metadata-starter publishes the structural funcionarios schema through /schemas/filtered.\",\"referenceApi\":\"praxis-api-quickstart serves funcionarios data and options on Render.\",\"angularRuntime\":\"@praxisui/core resolves praxis-dynamic-page and @praxisui/table renders the configured table.\",\"publicExamples\":\"praxis-ui-landing-page exposes the JSON envelope, live runtime preview and capability coverage map.\",\"agentCorpus\":\"praxisui-http-examples provides executable metadata and filter evidence.\"},\"operationalEvidence\":{\"baseUrl\":\"https://praxis-api-quickstart.onrender.com\",\"safeFirstIds\":[\"filtered-schema-response-funcionarios\",\"funcionarios-filter-basic\"],\"httpExamples\":[\"praxisui-http-examples/http/metadata/filtered_schema_response_funcionarios.http\",\"praxisui-http-examples/http/resources/funcionarios_filter_basic.http\"]},\"authoringGuidance\":[\"Keep resourcePath as the base resource path, without /filter.\",\"Let /schemas/filtered provide the canonical field metadata.\",\"Use host-authored columns only to demonstrate renderers, formatting, width, sticky columns and visual density.\",\"Prefer renderer examples that map to real backend fields; do not invent frontend-only fields for a remote example.\",\"Keep status presentation read-only unless a real backend action is configured.\",\"Treat salary as sensitive demonstration data; real hosts should gate visibility and exports through policy.\",\"Emit rowClick and selectionChange so the page can later compose this table with forms, charts or actions.\"],\"teaches\":[\"table.renderers.avatar\",\"table.renderers.badge\",\"table.renderers.chip\",\"table.conditional-renderers.status-badge\",\"table.formatters.currency\",\"table.formatters.date\",\"table.selection-state\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"funcionariosRichTable\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"table\",\"title\":\"Funcionarios rich surface\",\"subtitle\":\"Renderers, formatters and dense business columns\"},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\"],\"inputs\":{\"resourcePath\":\"human-resources/funcionarios\",\"tableId\":\"human-resources-funcionarios-rich-surface\",\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"Funcionarios\",\"subtitle\":\"Rich metadata-driven employee surface\"},\"columns\":[{\"field\":\"avatarUrl\",\"header\":\"Avatar\",\"type\":\"string\",\"renderer\":{\"type\":\"avatar\",\"avatar\":{\"srcField\":\"avatarUrl\",\"altField\":\"nomeCompleto\",\"initialsField\":\"nomeCompleto\",\"shape\":\"circle\",\"size\":36}},\"width\":\"88px\",\"sticky\":\"start\"},{\"field\":\"nomeCompleto\",\"header\":\"Nome Completo\",\"type\":\"string\",\"sticky\":\"start\",\"width\":\"220px\"},{\"field\":\"email\",\"header\":\"Email\",\"type\":\"string\",\"width\":\"260px\"},{\"field\":\"telefone\",\"header\":\"Telefone\",\"type\":\"string\",\"width\":\"160px\"},{\"field\":\"salario\",\"header\":\"Salario\",\"type\":\"currency\",\"align\":\"end\",\"format\":\"BRL|symbol|2\",\"width\":\"150px\"},{\"field\":\"cargoNome\",\"header\":\"Cargo\",\"type\":\"string\",\"renderer\":{\"type\":\"chip\",\"chip\":{\"textField\":\"cargoNome\",\"variant\":\"outlined\",\"color\":\"primary\"}},\"width\":\"190px\"},{\"field\":\"departamentoNome\",\"header\":\"Departamento\",\"type\":\"string\",\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"departamentoNome\",\"variant\":\"soft\",\"color\":\"accent\"}},\"width\":\"180px\"},{\"field\":\"estadoCivil\",\"header\":\"Estado Civil\",\"type\":\"string\",\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"estadoCivil\",\"variant\":\"outlined\",\"color\":\"primary\"}},\"width\":\"150px\"},{\"field\":\"dataAdmissao\",\"header\":\"Data de Admissao\",\"type\":\"date\",\"format\":\"dd/MM/yyyy\",\"width\":\"170px\"},{\"field\":\"dataNascimento\",\"header\":\"Data de Nascimento\",\"type\":\"date\",\"format\":\"dd/MM/yyyy\",\"width\":\"190px\"},{\"field\":\"ativo\",\"header\":\"Status\",\"type\":\"boolean\",\"align\":\"center\",\"format\":\"active-inactive\",\"width\":\"130px\",\"conditionalRenderers\":[{\"condition\":{\"==\":[{\"var\":\"ativo\"},true]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":\"Ativo\",\"color\":\"success\",\"variant\":\"filled\",\"icon\":\"check_circle\"}}},{\"condition\":{\"==\":[{\"var\":\"ativo\"},false]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":\"Inativo\",\"color\":\"warn\",\"variant\":\"outlined\",\"icon\":\"block\"}}}]}],\"behavior\":{\"selection\":{\"enabled\":true,\"type\":\"multiple\"},\"density\":\"compact\"}}},\"outputs\":{\"rowClick\":\"emit\",\"selectionChange\":\"emit\"}}}]}}",
|
|
4465
4475
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-table-surface.json",
|
|
@@ -4469,7 +4479,7 @@
|
|
|
4469
4479
|
"corpusVersion": "1.0.0"
|
|
4470
4480
|
},
|
|
4471
4481
|
{
|
|
4472
|
-
"chunkIndex":
|
|
4482
|
+
"chunkIndex": 150,
|
|
4473
4483
|
"chunkKind": "recipe",
|
|
4474
4484
|
"content": "{\"_comment\":\"Recipe para agentes criarem uma Praxis Dynamic Page com computed columns e conditional rules em praxis-table.\",\"_comment2\":\"Use quando a meta for mostrar regras de tabela, colunas calculadas e feedback visual runtime sobre dados reais.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"rules-computed-table\",\"status\":\"public-example\",\"useWhen\":\"Create a metadata-driven table example with Json Logic computed columns, conditional styles and conditional renderers.\",\"examplePrompts\":[\"crie uma tabela com colunas calculadas e regras condicionais\",\"mostre funcionarios com tempo de casa calculado e destaque visual\",\"gere um exemplo de praxis-table com conditionalRenderers e rowConditionalStyles\"]},\"platformValue\":{\"canonicalContract\":\"praxis-metadata-starter publishes funcionarios schema and data fields; table rules stay in the Angular runtime config.\",\"referenceApi\":\"praxis-api-quickstart serves funcionarios rows used by computed columns and rules.\",\"angularRuntime\":\"@praxisui/table evaluates computed expressions and conditional table rules without bespoke host code.\",\"publicExamples\":\"praxis-ui-landing-page exposes this JSON envelope and coverage status.\",\"agentCorpus\":\"praxisui-http-examples provides executable metadata and filter evidence.\"},\"operationalEvidence\":{\"baseUrl\":\"https://praxis-api-quickstart.onrender.com\",\"safeFirstIds\":[\"filtered-schema-response-funcionarios\",\"funcionarios-filter-basic\"],\"httpExamples\":[\"praxisui-http-examples/http/metadata/filtered_schema_response_funcionarios.http\",\"praxisui-http-examples/http/resources/funcionarios_filter_basic.http\"]},\"authoringGuidance\":[\"Use columns[].computed.expression as canonical Json Logic, not JavaScript strings.\",\"Use { \\\"var\\\": \\\"field\\\" } for row data and { \\\"var\\\": \\\"computed.field\\\" } when rules depend on computed columns.\",\"Keep conditionalStyles focused on cell-level feedback and rowConditionalStyles focused on row-level state.\",\"Use conditionalRenderers when the displayed semantic state should change by rule.\",\"Keep the remote resourcePath as the base resource path; rules are runtime config over published rows.\"],\"teaches\":[\"table.computed-columns\",\"table.rules.conditionalStyles\",\"table.rules.rowConditionalStyles\",\"table.rules.conditionalRenderers\",\"json-logic\",\"table.selection-state\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"funcionariosRulesComputedTable\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"rule\",\"title\":\"Funcionarios rules and computed columns\",\"subtitle\":\"Tenure, salary bands and conditional runtime feedback\"},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\"],\"inputs\":{\"resourcePath\":\"human-resources/funcionarios\",\"tableId\":\"human-resources-funcionarios-rules-computed\",\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"Funcionarios\",\"subtitle\":\"Computed columns and conditional rules\"},\"columns\":[{\"field\":\"nomeCompleto\",\"header\":\"Funcionario\",\"type\":\"text\",\"sticky\":\"start\",\"width\":\"220px\"},{\"field\":\"dataAdmissao\",\"header\":\"Admissao\",\"type\":\"date\",\"format\":{\"dateStyle\":\"short\",\"locale\":\"pt-BR\"},\"width\":\"140px\"},{\"field\":\"tempoCasaAnos\",\"header\":\"Tempo de Casa\",\"type\":\"number\",\"align\":\"end\",\"width\":\"150px\",\"computed\":{\"expression\":{\"yearsSince\":[{\"var\":\"dataAdmissao\"}]},\"outputType\":\"number\",\"format\":\"1.0-0\",\"dependencies\":[\"dataAdmissao\"]},\"conditionalStyles\":[{\"condition\":{\">=\":[{\"var\":\"computed.tempoCasaAnos\"},5]},\"style\":{\"color\":\"#166534\",\"fontWeight\":\"700\"}}]},{\"field\":\"salario\",\"header\":\"Salario\",\"type\":\"currency\",\"align\":\"end\",\"format\":{\"currency\":\"BRL\",\"locale\":\"pt-BR\"},\"width\":\"150px\",\"conditionalStyles\":[{\"condition\":{\">=\":[{\"var\":\"salario\"},35000]},\"style\":{\"color\":\"#7c2d12\",\"fontWeight\":\"700\"}}]},{\"field\":\"faixaSalarial\",\"header\":\"Faixa\",\"type\":\"badge\",\"width\":\"130px\",\"computed\":{\"expression\":{\"if\":[{\">=\":[{\"var\":\"salario\"},35000]},\"executive\",{\">=\":[{\"var\":\"salario\"},18000]},\"senior\",\"standard\"]},\"outputType\":\"text\",\"dependencies\":[\"salario\"]},\"conditionalRenderers\":[{\"condition\":{\"==\":[{\"var\":\"computed.faixaSalarial\"},\"executive\"]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":\"Executive\",\"color\":\"warn\",\"variant\":\"filled\"}}},{\"condition\":{\"==\":[{\"var\":\"computed.faixaSalarial\"},\"senior\"]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":\"Senior\",\"color\":\"primary\",\"variant\":\"soft\"}}}]},{\"field\":\"departamentoNome\",\"header\":\"Departamento\",\"type\":\"chip\",\"width\":\"180px\"},{\"field\":\"ativo\",\"header\":\"Estado\",\"type\":\"badge\",\"width\":\"130px\",\"conditionalRenderers\":[{\"condition\":{\"==\":[{\"var\":\"ativo\"},true]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":\"Ativo\",\"color\":\"success\",\"variant\":\"filled\"}}},{\"condition\":{\"==\":[{\"var\":\"ativo\"},false]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":\"Inativo\",\"color\":\"warn\",\"variant\":\"outlined\"}}}]}],\"rowConditionalStyles\":[{\"condition\":{\"==\":[{\"var\":\"ativo\"},false]},\"style\":{\"opacity\":\"0.68\",\"backgroundColor\":\"rgba(239, 68, 68, 0.08)\"}},{\"condition\":{\">=\":[{\"var\":\"computed.tempoCasaAnos\"},5]},\"style\":{\"borderLeft\":\"4px solid #16a34a\"}}],\"behavior\":{\"selection\":{\"enabled\":true,\"type\":\"single\"},\"density\":\"comfortable\"}}},\"outputs\":{\"rowClick\":\"emit\"}}}]}}",
|
|
4475
4485
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rules-computed-table.json",
|
|
@@ -4479,7 +4489,7 @@
|
|
|
4479
4489
|
"corpusVersion": "1.0.0"
|
|
4480
4490
|
},
|
|
4481
4491
|
{
|
|
4482
|
-
"chunkIndex":
|
|
4492
|
+
"chunkIndex": 151,
|
|
4483
4493
|
"chunkKind": "recipe",
|
|
4484
4494
|
"content": "{\"_comment\":\"Recipe for agents to create a Praxis Dynamic Page with a rich Praxis Stepper workflow.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"stepper-onboarding-workflow\",\"status\":\"public-example\",\"useWhen\":\"Create a dynamic page where praxis-stepper orchestrates form, upload and approval widgets.\",\"examplePrompts\":[\"create an onboarding workflow page\",\"show praxis-stepper inside praxis-dynamic-page\",\"generate a stepper workflow with form, files upload and approval checklist\"]},\"platformValue\":{\"canonicalRuntime\":\"@praxisui/stepper owns steps, linear navigation, step forms, rich content and nested widget orchestration.\",\"angularRuntime\":\"@praxisui/core resolves the stepper and every nested widget through ComponentMetadataRegistry and DynamicWidgetLoader.\",\"publicExamples\":\"praxis-ui-landing-page exposes the envelope, live preview and inspector JSON.\",\"agentCorpus\":\"This recipe keeps agents on supported paths: steps[].form, stepBlocksBeforeForm, stepBlocksAfterForm and steps[].widgets.\"},\"authoringGuidance\":[\"Use stable stepperId and componentInstanceId values.\",\"Use steps[].form for Dynamic Form integration and put form config under steps[].form.config.\",\"Use RichContentDocument nodes in stepBlocksBeforeForm and stepBlocksAfterForm for editorial text and badges.\",\"Use steps[].widgets only for real nested runtime components.\",\"Do not use legacy steps[].content for runtime rendering.\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"employeeOnboardingStepper\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"assignment_turned_in\",\"title\":\"Employee onboarding workflow\",\"subtitle\":\"Stepper with form rules, evidence upload and approval checklist\"},\"definition\":{\"id\":\"praxis-stepper\",\"bindingOrder\":[\"stepperId\",\"componentInstanceId\",\"config\",\"stepperContext\"],\"inputs\":{\"stepperId\":\"employee-onboarding-workflow\",\"componentInstanceId\":\"dynamic-page-showcase\",\"enableCustomization\":true,\"stepperContext\":{\"workflowId\":\"employee-onboarding-demo\",\"resourcePath\":\"human-resources/funcionarios\",\"evidenceBaseUrl\":\"/api/files\"},\"config\":{\"orientation\":\"horizontal\",\"linear\":true,\"labelPosition\":\"bottom\",\"selectedIndex\":0,\"density\":\"comfortable\",\"appearance\":{\"preset\":\"ft-light\",\"icons\":{\"number\":\"radio_button_unchecked\",\"done\":\"check_circle\",\"edit\":\"edit_note\",\"error\":\"error\"}},\"navigation\":{\"visible\":true,\"prevLabel\":\"Back\",\"nextLabel\":\"Continue\",\"prevIcon\":\"arrow_back\",\"nextIcon\":\"arrow_forward\",\"variant\":\"stroked\",\"color\":\"primary\",\"align\":\"space-between\"},\"steps\":[{\"id\":\"employee-intake\",\"label\":\"Employee\",\"description\":\"Capture employee identity, assignment and workflow-only risk fields.\",\"stepBlocksBeforeForm\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"text\":\"The step owns its local Dynamic Form config. Backend metadata can replace this config later without changing the Stepper host template.\"},{\"type\":\"badge\",\"label\":\"form rules\"},{\"type\":\"badge\",\"label\":\"validators\"}]},\"form\":{\"mode\":\"create\",\"formId\":\"employee-onboarding-intake-form\",\"schemaSource\":\"resource\",\"config\":{\"sections\":[{\"id\":\"identity\",\"title\":\"Identity\",\"appearance\":\"outlined\",\"rows\":[{\"id\":\"identity-row\",\"columns\":[{\"id\":\"identity-main\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"nomeCompleto\",\"email\"]},{\"id\":\"identity-contact\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"telefone\",\"dataNascimento\"]}]}]}],\"fieldMetadata\":[{\"name\":\"nomeCompleto\",\"label\":\"Nome Completo\",\"controlType\":\"input\",\"validators\":{\"required\":true,\"minLength\":3,\"maxLength\":160}},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"telefone\",\"label\":\"Telefone\",\"controlType\":\"phone\",\"validators\":{\"required\":true}},{\"name\":\"dataNascimento\",\"label\":\"Data de Nascimento\",\"controlType\":\"date\",\"validators\":{\"required\":true}}]}}},{\"id\":\"evidence\",\"label\":\"Evidence\",\"optional\":true,\"widgets\":[{\"id\":\"praxis-files-upload\",\"inputs\":{\"filesUploadId\":\"employee-onboarding-evidence\",\"baseUrl\":\"/api/files\",\"displayMode\":\"compact\",\"config\":{\"strategy\":\"direct\",\"ui\":{\"showDropzone\":true,\"showConflictPolicySelector\":true,\"showMetadataForm\":true,\"showProgress\":true,\"manualUpload\":true},\"limits\":{\"maxFileSizeBytes\":10485760,\"maxFilesPerBulk\":4,\"maxBulkSizeBytes\":31457280}}}}]},{\"id\":\"approval\",\"label\":\"Approval\",\"widgets\":[{\"id\":\"praxis-list\",\"inputs\":{\"listId\":\"employee-onboarding-approval-checklist\",\"config\":{\"dataSource\":{\"data\":[{\"id\":1,\"title\":\"Identity fields validated\",\"owner\":\"People Ops\",\"status\":\"Required\",\"priority\":\"P0\"},{\"id\":2,\"title\":\"Evidence attached or waived\",\"owner\":\"Hiring Manager\",\"status\":\"Required\",\"priority\":\"P0\"},{\"id\":3,\"title\":\"Security review completed\",\"owner\":\"Security\",\"status\":\"Conditional\",\"priority\":\"P1\"}]},\"selection\":{\"mode\":\"multiple\",\"compareBy\":\"id\",\"return\":\"id\"},\"templating\":{\"leading\":{\"type\":\"icon\",\"expr\":\"task_alt\"},\"primary\":{\"type\":\"text\",\"expr\":\"${item.title}\"},\"secondary\":{\"type\":\"text\",\"expr\":\"${item.owner}\"},\"meta\":{\"type\":\"chip\",\"expr\":\"${item.priority}\",\"variant\":\"filled\"},\"trailing\":{\"type\":\"chip\",\"expr\":\"${item.status}\",\"variant\":\"outlined\"}}}}}]}]}},\"outputs\":{\"selectionChange\":\"emit\",\"selectedIndexChange\":\"emit\",\"stepFormReady\":\"emit\",\"stepFormValueChange\":\"emit\"}}}]}}",
|
|
4485
4495
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.stepper-onboarding-workflow.json",
|
|
@@ -4489,7 +4499,7 @@
|
|
|
4489
4499
|
"corpusVersion": "1.0.0"
|
|
4490
4500
|
},
|
|
4491
4501
|
{
|
|
4492
|
-
"chunkIndex":
|
|
4502
|
+
"chunkIndex": 152,
|
|
4493
4503
|
"chunkKind": "recipe",
|
|
4494
4504
|
"content": "{\"_comment\":\"Template de pagina com stepper (Praxis Dynamic Page).\",\"_comment2\":\"resourcePath deve ser o path base do recurso (sem /filter).\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"stepper\",\"useWhen\":\"Create a dynamic page with a stepper wizard.\",\"examplePrompts\":[\"pagina com stepper\",\"wizard de cadastro\",\"fluxo em etapas\"]},\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":2,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"mainStepper\",\"definition\":{\"id\":\"praxis-stepper\",\"inputs\":{\"stepperId\":\"{{resourceKey}}-stepper\",\"config\":{\"orientation\":\"horizontal\",\"linear\":true,\"steps\":[{\"id\":\"step-1\",\"label\":\"Dados\",\"form\":{\"resourcePath\":\"{{resourcePath}}\",\"schemaSource\":\"resource\",\"mode\":\"edit\",\"formId\":\"{{resourceKey}}-step-1\"}},{\"id\":\"step-2\",\"label\":\"Detalhes\",\"optional\":true,\"form\":{\"resourcePath\":\"{{resourcePath}}\",\"schemaSource\":\"resource\",\"mode\":\"edit\",\"formId\":\"{{resourceKey}}-step-2\"}}],\"navigation\":{\"visible\":true,\"prevLabel\":\"Voltar\",\"nextLabel\":\"Proximo\",\"finishLabel\":\"Concluir\"}}}}}]}}",
|
|
4495
4505
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.stepper.json",
|
|
@@ -4499,7 +4509,7 @@
|
|
|
4499
4509
|
"corpusVersion": "1.0.0"
|
|
4500
4510
|
},
|
|
4501
4511
|
{
|
|
4502
|
-
"chunkIndex":
|
|
4512
|
+
"chunkIndex": 153,
|
|
4503
4513
|
"chunkKind": "recipe",
|
|
4504
4514
|
"content": "{\"_comment\":\"Recipe para agentes criarem uma Praxis Dynamic Page que demonstra surfaces, actions e capabilities de ponta a ponta.\",\"_comment2\":\"Use quando o objetivo for mostrar contrato metadata-driven, runtime Angular, quickstart API e modais de discovery.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"surfaces-actions-showcase\",\"status\":\"public-example\",\"useWhen\":\"Create an operational page where table buttons open resource surfaces, actions and item capabilities.\",\"examplePrompts\":[\"crie uma pagina que demonstre surfaces actions e capabilities\",\"mostre botoes de tabela que abrem modais com metadata do backend\",\"gere um exemplo para agentes copiarem discovery actions do praxis dynamic page\"]},\"platformValue\":{\"canonicalContract\":\"praxis-metadata-starter defines /schemas/filtered, /schemas/surfaces, /schemas/actions and capabilities semantics.\",\"referenceApi\":\"praxis-api-quickstart exposes mission resources, related team/timeline resources and item capabilities on Render.\",\"angularRuntime\":\"@praxisui/core resolves praxis-dynamic-page widgets; @praxisui/table emits toolbarAction and rowAction events.\",\"publicExamples\":\"praxis-ui-landing-page renders the JSON envelope, runtime preview, floating Inspector and discovery modal.\",\"agentCorpus\":\"This recipe keeps resourcePath, resourceKey and discovery metadata explicit so LLMs can preserve the platform handoff.\"},\"operationalEvidence\":{\"baseUrl\":\"https://praxis-api-quickstart.onrender.com\",\"safeFirstIds\":[\"schemas-catalog\",\"schemas-surfaces-operations-missoes\",\"schemas-actions-operations-missoes\",\"operations-missoes-item-capabilities\",\"vw-resumo-missoes-filter-basic\",\"missao-participantes-stats-papel\",\"missao-eventos-stats-ocorrido-em-day\"],\"pendingHttpIds\":[]},\"authoringGuidance\":[\"Put resource discovery in toolbar.actions so users can inspect the full resource contract before selecting a row.\",\"Put item discovery in actions.row and include discovery.scope = item so the host can hydrate previews with the selected id.\",\"Emit toolbarAction and rowAction from the widget when the host owns modal orchestration.\",\"Preserve resourcePath and resourceKey inside discovery metadata; do not infer them from labels or routes.\",\"Use composition links to keep related surfaces, such as team and timeline, synchronized with selected state.\",\"Treat actions in the JSON as affordances; execute policy-sensitive workflows only after checking backend capabilities.\"],\"teaches\":[\"page.surfaces-actions-capabilities\",\"table.toolbar.actions\",\"table.actions.row\",\"toolbarAction\",\"rowAction\",\"composition.links\",\"state.values\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":3,\"gap\":\"16px\"},\"state\":{\"values\":{\"selection\":{\"missionId\":1}}},\"widgets\":[{\"key\":\"missionSurface\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"layers\",\"title\":\"Mission surface\",\"subtitle\":\"Resource and item discovery actions\"},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\"],\"inputs\":{\"resourcePath\":\"operations/missoes\",\"tableId\":\"operations-missoes-surfaces-actions-showcase\",\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"Missions\",\"actionsPosition\":\"both\",\"actions\":[{\"id\":\"inspect-surfaces\",\"action\":\"inspect-surfaces\",\"label\":\"Surfaces\",\"icon\":\"layers\",\"type\":\"button\",\"appearance\":\"outlined\",\"discovery\":{\"rel\":\"surfaces\",\"scope\":\"resource\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}},{\"id\":\"inspect-actions\",\"action\":\"inspect-actions\",\"label\":\"Actions\",\"icon\":\"bolt\",\"type\":\"button\",\"appearance\":\"outlined\",\"discovery\":{\"rel\":\"actions\",\"scope\":\"resource\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}}]},\"columns\":[{\"field\":\"titulo\",\"header\":\"Mission\",\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"status\",\"header\":\"Status\",\"type\":\"badge\"},{\"field\":\"prioridade\",\"header\":\"Priority\",\"type\":\"badge\"},{\"field\":\"local\",\"header\":\"Location\",\"type\":\"text\"}],\"actions\":{\"row\":{\"enabled\":true,\"display\":\"icons\",\"position\":\"end\",\"sticky\":\"end\",\"actions\":[{\"id\":\"inspect-row-surfaces\",\"label\":\"Surfaces\",\"icon\":\"layers\",\"action\":\"inspect-surfaces\",\"discovery\":{\"rel\":\"surfaces\",\"scope\":\"item\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}},{\"id\":\"inspect-row-actions\",\"label\":\"Actions\",\"icon\":\"bolt\",\"action\":\"inspect-actions\",\"discovery\":{\"rel\":\"actions\",\"scope\":\"item\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}}]}},\"behavior\":{\"selection\":{\"enabled\":true,\"type\":\"single\"}}}},\"outputs\":{\"rowClick\":\"emit\",\"rowAction\":\"emit\",\"toolbarAction\":\"emit\"}}},{\"key\":\"missionTeamSurface\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"groups\",\"title\":\"Team surface\",\"subtitle\":\"Related resource filtered by selected mission\"},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\",\"queryContext\"],\"inputs\":{\"resourcePath\":\"operations/missao-participantes\",\"queryContext\":{\"filters\":{\"missaoId\":1}},\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"Team\"},\"columns\":[{\"field\":\"funcionarioNome\",\"header\":\"Hero\",\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"papel\",\"header\":\"Role\",\"type\":\"badge\"},{\"field\":\"resultado\",\"header\":\"Outcome\",\"type\":\"badge\"}]}},\"outputs\":{\"rowClick\":\"emit\",\"toolbarAction\":\"emit\"}}}],\"composition\":{\"version\":\"1.0.0\",\"links\":[{\"id\":\"surfaces:mission-rowClick->state:selection.missionId\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"missionSurface\",\"port\":\"rowClick\",\"direction\":\"output\",\"componentType\":\"praxis-table\"}},\"to\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.missionId\",\"layer\":\"values\",\"writable\":true}},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"single-value\",\"sourceBindings\":[{\"source\":\"event\"}],\"steps\":[{\"id\":\"surfaces:pick-mission-id\",\"kind\":\"pick-path\",\"phase\":\"link-propagation\",\"input\":{\"source\":\"event\"},\"config\":{\"path\":\"payload.row.id\"}}]}},{\"id\":\"surfaces:state:selection.missionId->team.queryContext\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.missionId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"missionTeamSurface\",\"port\":\"queryContext\",\"direction\":\"input\",\"componentType\":\"praxis-table\"}},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"single-value\",\"sourceBindings\":[{\"source\":\"state\",\"path\":\"selection.missionId\"}],\"steps\":[{\"id\":\"surfaces:team-query-context\",\"kind\":\"object-template\",\"phase\":\"link-propagation\",\"config\":{\"template\":{\"filters\":{\"missaoId\":\"${source}\"}}}}]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}}]}}}",
|
|
4505
4515
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.surfaces-actions-showcase.json",
|
|
@@ -4509,7 +4519,7 @@
|
|
|
4509
4519
|
"corpusVersion": "1.0.0"
|
|
4510
4520
|
},
|
|
4511
4521
|
{
|
|
4512
|
-
"chunkIndex":
|
|
4522
|
+
"chunkIndex": 154,
|
|
4513
4523
|
"chunkKind": "recipe",
|
|
4514
4524
|
"content": "{\"_comment\":\"Template de pagina com tabela unica (Praxis Dynamic Page).\",\"_comment2\":\"resourcePath deve ser o path base do recurso (sem /filter).\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"table\",\"useWhen\":\"Create a dynamic page with a single table widget.\",\"examplePrompts\":[\"pagina com tabela\",\"crie uma pagina com tabela de funcionarios\",\"tabela simples\"]},\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":2,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"mainTable\",\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\"],\"inputs\":{\"resourcePath\":\"{{resourcePath}}\",\"tableId\":\"{{resourceKey}}-table\",\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"{{resourceLabel}}\"}}},\"outputs\":{\"rowClick\":\"emit\"}}}]}}",
|
|
4515
4525
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.table.json",
|
|
@@ -4519,7 +4529,7 @@
|
|
|
4519
4529
|
"corpusVersion": "1.0.0"
|
|
4520
4530
|
},
|
|
4521
4531
|
{
|
|
4522
|
-
"chunkIndex":
|
|
4532
|
+
"chunkIndex": 155,
|
|
4523
4533
|
"chunkKind": "recipe",
|
|
4524
4534
|
"content": "{\"_comment\":\"Recipe for agents to create a Praxis Dynamic Page with Praxis Tabs in nav mode.\",\"_comment2\":\"Use this when the host shell needs navigation semantics but each link still renders metadata-driven widgets.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"tabs-nav-routing-workspace\",\"status\":\"public-example\",\"useWhen\":\"Create a dynamic page where Praxis Tabs nav.links switch between nested runtime widgets.\",\"examplePrompts\":[\"create a navigation tabs workspace with nested widgets\",\"show praxis-tabs nav mode inside praxis-dynamic-page\",\"generate a tabs nav example with list and rich content widgets\"]},\"platformValue\":{\"canonicalRuntime\":\"@praxisui/tabs owns nav.links and selectedIndexChange; nested widget wiring uses composition.links with component-port + nestedPath.\",\"angularRuntime\":\"@praxisui/core resolves nested widgets through the same DynamicWidgetLoader used by top-level page widgets.\",\"publicExamples\":\"praxis-ui-landing-page exposes the envelope, live preview and inspector JSON.\",\"agentCorpus\":\"This recipe gives agents a copyable nav-mode contract without inventing unsupported route fields.\"},\"authoringGuidance\":[\"Use config.nav.links for nav mode; do not add route fields unless the host explicitly maps them.\",\"Put per-link content in widgets or content arrays.\",\"Use selectedIndexChange for shell coordination.\",\"Use composition.links with component-port + nestedPath when nested widgets need to bubble actions or selections back to the page.\",\"Keep tabsId stable so preferences and host diagnostics can identify the instance.\"],\"teaches\":[\"tabs.nav-mode\",\"tabs.nested-widgets\",\"tabs.nested-component-ports\",\"page.composition-links\",\"list.selection-actions\",\"rich-content.knowledge-surface\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"tabsNavRoutingWorkspace\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"alt_route\",\"title\":\"Tabs nav workspace\",\"subtitle\":\"Navigation links with nested runtime widgets\"},\"definition\":{\"id\":\"praxis-tabs\",\"bindingOrder\":[\"tabsId\",\"config\"],\"inputs\":{\"tabsId\":\"tabs-nav-routing-workspace\",\"componentInstanceId\":\"dynamic-page-showcase\",\"config\":{\"appearance\":{\"density\":\"comfortable\",\"tokens\":{\"active-indicator-color\":\"#0f766e\",\"active-label-text-color\":\"#0f172a\",\"inactive-label-text-color\":\"#475569\"}},\"behavior\":{\"lazyLoad\":true,\"closeable\":false,\"reorderable\":false},\"accessibility\":{\"ariaLabel\":\"Navigation workspace tabs\",\"reduceMotion\":true},\"nav\":{\"selectedIndex\":0,\"fitInkBarToContent\":true,\"stretchTabs\":false,\"ariaLabel\":\"Operations navigation\",\"links\":[{\"id\":\"briefing\",\"label\":\"Briefing\",\"widgets\":[{\"id\":\"widget:rich-text-block\",\"inputs\":{\"title\":\"Mission operations briefing\",\"content\":\"Use nav mode when the host shell needs stable navigation semantics while each link remains metadata-driven content. The runtime changes the active link and renders only the selected link widgets.\",\"variant\":\"emphasis\"}}]},{\"id\":\"queue\",\"label\":\"Queue\",\"widgets\":[{\"id\":\"praxis-list\",\"bindingOrder\":[\"listId\",\"config\"],\"inputs\":{\"listId\":\"tabs-nav-routing-queue-list\",\"config\":{\"id\":\"tabs-nav-routing-queue-list-config\",\"dataSource\":{\"data\":[{\"id\":1,\"title\":\"Review mission readiness\",\"owner\":\"Sol Drax\",\"status\":\"Ready\",\"priority\":\"P1\"},{\"id\":2,\"title\":\"Confirm payroll exceptions\",\"owner\":\"Mira Drax\",\"status\":\"At risk\",\"priority\":\"P0\"},{\"id\":3,\"title\":\"Publish capability notes\",\"owner\":\"Ravi Almeida\",\"status\":\"Blocked\",\"priority\":\"P1\"}]},\"layout\":{\"variant\":\"list\",\"density\":\"compact\",\"lines\":2,\"dividers\":\"between\",\"pageSize\":5},\"selection\":{\"mode\":\"single\",\"compareBy\":\"id\",\"return\":\"id\"},\"templating\":{\"leading\":{\"type\":\"icon\",\"expr\":\"route\"},\"primary\":{\"type\":\"text\",\"expr\":\"${item.title}\"},\"secondary\":{\"type\":\"text\",\"expr\":\"${item.owner}\"},\"meta\":{\"type\":\"chip\",\"expr\":\"${item.priority}\",\"variant\":\"filled\"},\"trailing\":{\"type\":\"chip\",\"expr\":\"${item.status}\",\"variant\":\"outlined\"}},\"ui\":{\"showSearch\":false,\"showSort\":false,\"showRange\":false}}},\"outputs\":{\"itemClick\":\"emit\",\"selectionChange\":\"emit\"}}]},{\"id\":\"decisions\",\"label\":\"Decisions\",\"widgets\":[{\"id\":\"widget:rich-text-block\",\"inputs\":{\"title\":\"Host-owned routing intent\",\"content\":\"Praxis Tabs nav mode owns the selected link. The application shell can map selectedIndexChange to route state, breadcrumbs or inspector context, while nested widget events should be wired through composition.links with component-port + nestedPath.\",\"variant\":\"default\"}}]}]}}},\"outputs\":{\"selectedIndexChange\":\"emit\",\"indexFocused\":\"emit\",\"selectFocusedIndex\":\"emit\"}}}]}}",
|
|
4525
4535
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.tabs-nav-routing-workspace.json",
|
|
@@ -4529,7 +4539,7 @@
|
|
|
4529
4539
|
"corpusVersion": "1.0.0"
|
|
4530
4540
|
},
|
|
4531
4541
|
{
|
|
4532
|
-
"chunkIndex":
|
|
4542
|
+
"chunkIndex": 156,
|
|
4533
4543
|
"chunkKind": "recipe",
|
|
4534
4544
|
"content": "{\"_comment\":\"Template de pagina com abas (Praxis Dynamic Page).\",\"_comment2\":\"resourcePath deve ser o path base do recurso (sem /filter).\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"tabs\",\"useWhen\":\"Create a dynamic page with tabs.\",\"examplePrompts\":[\"pagina com abas\",\"crie tabs com tabela e formulario\",\"tela em abas\"]},\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":2,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"mainTabs\",\"definition\":{\"id\":\"praxis-tabs\",\"inputs\":{\"tabsId\":\"{{resourceKey}}-tabs\",\"config\":{\"behavior\":{\"lazyLoad\":true,\"reorderable\":false,\"closeable\":false},\"tabs\":[{\"id\":\"tab-list\",\"textLabel\":\"Lista\",\"widgets\":[{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\"],\"inputs\":{\"resourcePath\":\"{{resourcePath}}\",\"tableId\":\"{{resourceKey}}-tabs-table\",\"config\":{\"toolbar\":{\"visible\":true}}},\"outputs\":{\"rowClick\":\"emit\"}}]},{\"id\":\"tab-detail\",\"textLabel\":\"Detalhes\",\"widgets\":[{\"id\":\"praxis-dynamic-form\",\"bindingOrder\":[\"resourcePath\",\"formId\",\"resourceId\"],\"inputs\":{\"formId\":\"{{resourceKey}}-tabs-form\",\"resourcePath\":\"{{resourcePath}}\",\"mode\":\"view\"}}]}]}}}}]}}",
|
|
4535
4545
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.tabs.json",
|
|
@@ -4539,7 +4549,7 @@
|
|
|
4539
4549
|
"corpusVersion": "1.0.0"
|
|
4540
4550
|
},
|
|
4541
4551
|
{
|
|
4542
|
-
"chunkIndex":
|
|
4552
|
+
"chunkIndex": 157,
|
|
4543
4553
|
"chunkKind": "recipe",
|
|
4544
4554
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment\",\"_comment\":\"Praxis Dynamic Page recipe that demonstrates visual block presets persisted as richContent layout items inside praxis-dynamic-form columns.\"}",
|
|
4545
4555
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4549,7 +4559,7 @@
|
|
|
4549
4559
|
"corpusVersion": "1.0.0"
|
|
4550
4560
|
},
|
|
4551
4561
|
{
|
|
4552
|
-
"chunkIndex":
|
|
4562
|
+
"chunkIndex": 158,
|
|
4553
4563
|
"chunkKind": "recipe",
|
|
4554
4564
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"visual-block-presets-form\",\"status\":\"public-example\",\"useWhen\":\"Create a Dynamic Page form that keeps API fields aligned while larger visual blocks live on dedicated rows authored from visual block presets.\",\"examplePrompts\":[\"create a dynamic page form with visual block presets\",\"show FormColumn.items with fields and static rich content blocks\",\"demonstrate dynamic form layout items using text notice divider info card and timeline\",\"show dedicated rows for large guidance cards in a dynamic form layout\"]}}",
|
|
4555
4565
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4559,7 +4569,7 @@
|
|
|
4559
4569
|
"corpusVersion": "1.0.0"
|
|
4560
4570
|
},
|
|
4561
4571
|
{
|
|
4562
|
-
"chunkIndex":
|
|
4572
|
+
"chunkIndex": 159,
|
|
4563
4573
|
"chunkKind": "recipe",
|
|
4564
4574
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"platformValue\",\"platformValue\":{\"canonicalContract\":\"@praxisui/dynamic-form owns FormColumn.items and renders field plus richContent layout items in order.\",\"visualBlockRuntime\":\"@praxisui/rich-content owns the RichContentDocument rendered by each static visual block.\",\"authoringContract\":\"Preset ids are authoring shortcuts only; the persisted config stores kind richContent with a RichContentDocument.\",\"publicExamples\":\"praxis-ui-landing-page exposes the live preview and inspector JSON for the complete Dynamic Page envelope.\",\"agentCorpus\":\"This recipe gives agents a copyable canonical layout-item example instead of teaching legacy fields-only columns.\"}}",
|
|
4565
4575
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4569,7 +4579,7 @@
|
|
|
4569
4579
|
"corpusVersion": "1.0.0"
|
|
4570
4580
|
},
|
|
4571
4581
|
{
|
|
4572
|
-
"chunkIndex":
|
|
4582
|
+
"chunkIndex": 160,
|
|
4573
4583
|
"chunkKind": "recipe",
|
|
4574
4584
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"operationalEvidence\",\"operationalEvidence\":{\"baseUrl\":\"https://praxis-api-quickstart.onrender.com\",\"safeFirstIds\":[\"filtered-schema-response-funcionarios\",\"funcionarios-get-by-id\",\"cargos-options-filter\",\"departamentos-options-filter\"],\"pendingHttpIds\":[],\"httpExamples\":[\"praxisui-http-examples/http/metadata/filtered_schema_response_funcionarios.http\",\"praxisui-http-examples/http/resources/funcionarios_get_by_id.http\",\"praxisui-http-examples/http/resources/cargos_options_filter.http\",\"praxisui-http-examples/http/resources/departamentos_options_filter.http\"]}}",
|
|
4575
4585
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4579,7 +4589,7 @@
|
|
|
4579
4589
|
"corpusVersion": "1.0.0"
|
|
4580
4590
|
},
|
|
4581
4591
|
{
|
|
4582
|
-
"chunkIndex":
|
|
4592
|
+
"chunkIndex": 161,
|
|
4583
4593
|
"chunkKind": "recipe",
|
|
4584
4594
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringGuidance\",\"authoringGuidance\":[\"Use sections[].rows[].columns[].items[] as the canonical ordered column contract.\",\"Use kind field items for fields already present in fieldMetadata.\",\"Use kind richContent items for static visual blocks and pass a canonical RichContentDocument in document.\",\"Keep fields[] synchronized as a projection of the field items only.\",\"Do not store visual blocks in fieldMetadata.\",\"Do not persist preset ids; presets only create the initial RichContentDocument in the layout editor.\",\"Use text, notice, divider, info card and timeline examples as starting documents that can be edited by the Rich Content editor.\",\"Place dividers and larger guidance cards on dedicated full-width rows when they separate semantic groups or would otherwise break the field grid rhythm.\",\"Use visualBlock formRules for governed text/style changes, and prefer textNodeId/titleNodeId/messageNodeId when the document has more than one textual node.\"]}",
|
|
4585
4595
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4589,7 +4599,7 @@
|
|
|
4589
4599
|
"corpusVersion": "1.0.0"
|
|
4590
4600
|
},
|
|
4591
4601
|
{
|
|
4592
|
-
"chunkIndex":
|
|
4602
|
+
"chunkIndex": 162,
|
|
4593
4603
|
"chunkKind": "recipe",
|
|
4594
4604
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"teaches\",\"teaches\":[\"dynamic-form.layout-items\",\"FormColumn.items\",\"FormLayoutItem.kind.field\",\"FormLayoutItem.kind.richContent\",\"visual-block-presets.text\",\"visual-block-presets.notice\",\"visual-block-presets.divider\",\"visual-block-presets.infoCard\",\"visual-block-presets.contractProof\",\"rich-content.timeline\",\"rich-content.document\",\"visualBlock.formRules\",\"visualBlock.textNodeId\",\"visualBlock.titleNodeId\",\"visualBlock.messageNodeId\",\"fields-projection\"]}",
|
|
4595
4605
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4599,7 +4609,7 @@
|
|
|
4599
4609
|
"corpusVersion": "1.0.0"
|
|
4600
4610
|
},
|
|
4601
4611
|
{
|
|
4602
|
-
"chunkIndex":
|
|
4612
|
+
"chunkIndex": 163,
|
|
4603
4613
|
"chunkKind": "recipe",
|
|
4604
4614
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"}}}",
|
|
4605
4615
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4609,7 +4619,7 @@
|
|
|
4609
4619
|
"corpusVersion": "1.0.0"
|
|
4610
4620
|
},
|
|
4611
4621
|
{
|
|
4612
|
-
"chunkIndex":
|
|
4622
|
+
"chunkIndex": 164,
|
|
4613
4623
|
"chunkKind": "recipe",
|
|
4614
4624
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets\",\"page\":{\"widgets\":[{\"key\":\"visualBlockPresetBriefing\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"article\",\"title\":\"Visual block presets\",\"subtitle\":\"Authoring shortcuts that persist as RichContentDocument layout items\"},\"definition\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"document\",\"layout\",\"rootClassName\"],\"inputs\":{\"layout\":\"block\",\"rootClassName\":\"dynamic-page-visual-block-presets-briefing\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"card\",\"title\":\"Static guidance belongs in layout items\",\"subtitle\":\"The form stays metadata-driven while explanation, warnings and separators remain governed content.\",\"content\":[{\"type\":\"compose\",\"wrap\":true,\"gap\":\"sm\",\"items\":[{\"type\":\"badge\",\"label\":\"FormColumn.items\"},{\"type\":\"badge\",\"label\":\"richContent\"},{\"type\":\"badge\",\"label\":\"fields[] projection\"}]},{\"type\":\"text\",\"text\":\"The examples below show the persisted shape produced by visual block presets: text, notice, divider, info card and contract proof. The preset id is not part of the saved contract.\"}]}]}}}}]}}",
|
|
4615
4625
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4619,7 +4629,7 @@
|
|
|
4619
4629
|
"corpusVersion": "1.0.0"
|
|
4620
4630
|
},
|
|
4621
4631
|
{
|
|
4622
|
-
"chunkIndex":
|
|
4632
|
+
"chunkIndex": 165,
|
|
4623
4633
|
"chunkKind": "recipe",
|
|
4624
4634
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[1]\",\"fragmentPath\":\"page.widgets[1]\",\"fragmentIdentity\":{\"key\":\"funcionarioVisualBlocksForm\"},\"fragment\":{\"key\":\"funcionarioVisualBlocksForm\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"view_agenda\",\"title\":\"Funcionario review form\",\"subtitle\":\"API fields stay aligned while guidance cards move to dedicated rows\"}}}",
|
|
4625
4635
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4629,7 +4639,7 @@
|
|
|
4629
4639
|
"corpusVersion": "1.0.0"
|
|
4630
4640
|
},
|
|
4631
4641
|
{
|
|
4632
|
-
"chunkIndex":
|
|
4642
|
+
"chunkIndex": 166,
|
|
4633
4643
|
"chunkKind": "recipe",
|
|
4634
4644
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[1].definition\",\"fragmentPath\":\"page.widgets[1].definition\",\"fragmentIdentity\":{\"key\":\"funcionarioVisualBlocksForm\",\"id\":\"praxis-dynamic-form\"},\"fragment\":{\"id\":\"praxis-dynamic-form\",\"bindingOrder\":[\"config\",\"resourcePath\",\"formId\",\"resourceId\"]}}",
|
|
4635
4645
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4639,7 +4649,7 @@
|
|
|
4639
4649
|
"corpusVersion": "1.0.0"
|
|
4640
4650
|
},
|
|
4641
4651
|
{
|
|
4642
|
-
"chunkIndex":
|
|
4652
|
+
"chunkIndex": 167,
|
|
4643
4653
|
"chunkKind": "recipe",
|
|
4644
4654
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[1].definition.inputs\",\"fragmentPath\":\"page.widgets[1].definition.inputs\",\"fragmentIdentity\":{\"key\":\"funcionarioVisualBlocksForm\",\"id\":\"praxis-dynamic-form\"},\"fragment\":{\"formId\":\"human-resources-funcionarios-visual-block-presets\",\"resourcePath\":\"human-resources/funcionarios\",\"resourceId\":1,\"mode\":\"view\"}}",
|
|
4645
4655
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4649,7 +4659,7 @@
|
|
|
4649
4659
|
"corpusVersion": "1.0.0"
|
|
4650
4660
|
},
|
|
4651
4661
|
{
|
|
4652
|
-
"chunkIndex":
|
|
4662
|
+
"chunkIndex": 168,
|
|
4653
4663
|
"chunkKind": "recipe",
|
|
4654
4664
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[1].definition.inputs.config\",\"fragmentPath\":\"page.widgets[1].definition.inputs.config\",\"fragmentIdentity\":{\"key\":\"funcionarioVisualBlocksForm\",\"id\":\"praxis-dynamic-form\"},\"fragment\":{\"metadata\":{\"name\":\"Funcionario visual block review\",\"version\":\"1.0.0\"},\"editorialContext\":{\"review\":{\"scope\":4,\"scopeCaption\":\"identity fields\",\"readiness\":80}},\"sections\":[{\"id\":\"identity-and-context\",\"title\":\"Identity and context\",\"description\":\"A fields-plus-content layout that keeps larger guidance cards on dedicated rows so the field grid stays aligned.\",\"appearance\":\"outlined\",\"rows\":[{\"id\":\"identity-row-main\",\"columns\":[{\"id\":\"identity-main\",\"span\":{\"md\":7,\"lg\":7},\"items\":[{\"kind\":\"richContent\",\"id\":\"identity-introduction-block\",\"layout\":\"block\",\"rootClassName\":\"visual-block-text\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"text\":\"Review the employee identity before checking assignment and payroll data. This block represents a RichContentDocument created from the Text preset.\"}]}},{\"kind\":\"field\",\"id\":\"field-nomeCompleto\",\"fieldName\":\"nomeCompleto\"},{\"kind\":\"field\",\"id\":\"field-email\",\"fieldName\":\"email\"},{\"kind\":\"richContent\",\"id\":\"contact-guidance-notice\",\"layout\":\"block\",\"rootClassName\":\"visual-block-notice\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"compose\",\"direction\":\"row\",\"gap\":\"sm\",\"wrap\":true,\"className\":\"praxis-rich-content-notice\",\"items\":[{\"type\":\"icon\",\"icon\":\"error_outline\",\"ariaLabel\":\"Notice\"},{\"type\":\"text\",\"text\":\"Email and phone are operational contact fields. Keep changes aligned with the backend employee record instead of treating this guidance as field metadata.\"}]}]}},{\"kind\":\"field\",\"id\":\"field-telefone\",\"fieldName\":\"telefone\"}],\"fields\":[\"nomeCompleto\",\"email\",\"telefone\"]},{\"id\":\"identity-side\",\"span\":{\"md\":5,\"lg\":5},\"items\":[{\"kind\":\"field\",\"id\":\"field-fotoPerfilUrl\",\"fieldName\":\"fotoPerfilUrl\"},{\"kind\":\"field\",\"id\":\"field-ativo\",\"fieldName\":\"ativo\"},{\"kind\":\"field\",\"id\":\"field-estadoCivil\",\"fieldName\":\"estadoCivil\"}],\"fields\":[\"fotoPerfilUrl\",\"ativo\",\"estadoCivil\"]}]},{\"id\":\"identity-status-row\",\"columns\":[{\"id\":\"identity-status\",\"span\":{\"md\":12,\"lg\":12},\"items\":[{\"kind\":\"richContent\",\"id\":\"profile-status-card\",\"layout\":\"block\",\"rootClassName\":\"visual-block-info-card\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"card\",\"id\":\"profile-status-title\",\"title\":\"Profile status\",\"subtitle\":\"Info card preset placed on a dedicated row to preserve the field rhythm.\",\"content\":[{\"type\":\"compose\",\"wrap\":true,\"gap\":\"sm\",\"items\":[{\"type\":\"badge\",\"label\":\"API field\"},{\"type\":\"badge\",\"label\":\"visual guidance\"}]},{\"id\":\"profile-status-message\",\"type\":\"text\",\"text\":\"Keep assignment, department and contact details current.\"},{\"type\":\"metric\",\"label\":\"Review scope\",\"valueExpr\":\"${review.scope}\",\"captionExpr\":\"${review.scopeCaption}\"},{\"type\":\"progress\",\"label\":\"Readiness\",\"valueExpr\":\"${review.readiness}\",\"max\":100,\"showPercent\":true}]}]}}]}]}]},{\"id\":\"assignment-review\",\"title\":\"Assignment review\",\"description\":\"Divider and card blocks separate assignment data from compensation context while the guidance card stays on its own row.\",\"appearance\":\"outlined\",\"rows\":[{\"id\":\"assignment-role-row\",\"columns\":[{\"id\":\"assignment-role\",\"span\":{\"md\":6,\"lg\":6},\"items\":[{\"kind\":\"field\",\"id\":\"field-cargoId\",\"fieldName\":\"cargoId\"}],\"fields\":[\"cargoId\"]},{\"id\":\"assignment-department\",\"span\":{\"md\":6,\"lg\":6},\"items\":[{\"kind\":\"field\",\"id\":\"field-departamentoId\",\"fieldName\":\"departamentoId\"}],\"fields\":[\"departamentoId\"]}]},{\"id\":\"assignment-policy-row\",\"columns\":[{\"id\":\"assignment-policy\",\"span\":{\"md\":12,\"lg\":12},\"items\":[{\"kind\":\"richContent\",\"id\":\"assignment-policy-divider\",\"layout\":\"block\",\"rootClassName\":\"visual-block-divider\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"id\":\"assignment-policy-divider-text\",\"text\":\"Assignment policy checkpoint\",\"className\":\"praxis-rich-content-divider\"}]}}]}]},{\"id\":\"assignment-compensation-row\",\"columns\":[{\"id\":\"assignment-admission\",\"span\":{\"md\":6,\"lg\":6},\"items\":[{\"kind\":\"field\",\"id\":\"field-dataAdmissao\",\"fieldName\":\"dataAdmissao\"}],\"fields\":[\"dataAdmissao\"]},{\"id\":\"assignment-payroll\",\"span\":{\"md\":6,\"lg\":6},\"items\":[{\"kind\":\"field\",\"id\":\"field-salario\",\"fieldName\":\"salario\"}],\"fields\":[\"salario\"]}]},{\"id\":\"assignment-guidance-row\",\"columns\":[{\"id\":\"assignment-guidance\",\"span\":{\"md\":12,\"lg\":12},\"items\":[{\"kind\":\"richContent\",\"id\":\"assignment-guidance-card\",\"layout\":\"block\",\"rootClassName\":\"visual-block-guidance-card\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"card\",\"id\":\"assignment-guidance-title\",\"title\":\"Operational assignment\",\"subtitle\":\"Confirm role, department and start date before closing the review.\",\"content\":[{\"type\":\"text\",\"id\":\"assignment-guidance-message\",\"text\":\"This row keeps guidance outside the submit payload while preserving the field rhythm.\"}]},{\"type\":\"keyValueList\",\"id\":\"assignment-contract-proof\",\"title\":\"Contract proof\",\"layout\":\"stacked\",\"items\":[{\"label\":\"items[]\",\"value\":\"Owns the mixed order of fields and visual blocks.\",\"icon\":\"view_week\",\"badge\":\"canonical\"},{\"label\":\"fields[]\",\"value\":\"Keeps only API field names as a derived projection.\",\"icon\":\"schema\",\"badge\":\"field projection\"}]}]}}]}]},{\"id\":\"assignment-timeline-row\",\"columns\":[{\"id\":\"assignment-timeline\",\"span\":{\"md\":12,\"lg\":12},\"items\":[{\"kind\":\"richContent\",\"id\":\"assignment-review-timeline\",\"layout\":\"block\",\"rootClassName\":\"visual-block-timeline\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"timeline\",\"id\":\"assignment-review-timeline-node\",\"title\":\"Assignment review timeline\",\"orientation\":\"horizontal\",\"order\":\"normal\",\"position\":\"alternate\",\"connectorVariant\":\"none\",\"connectorColor\":\"neutral\",\"markerVariant\":\"number\",\"markerColor\":\"primary\",\"markerStyle\":\"filled\",\"emphasis\":\"hero\",\"density\":\"comfortable\",\"textAppearance\":\"prominent\",\"items\":[{\"id\":\"identity-check\",\"title\":\"Validate identity\",\"subtitle\":\"Confirm name, contact data and active status before reviewing assignment.\",\"opposite\":\"1. Intake\",\"badge\":\"Form data\",\"markerColor\":\"success\",\"markerStyle\":\"outlined\",\"connectorColor\":\"success\",\"connectorVariant\":\"solid\"},{\"id\":\"assignment-check\",\"title\":\"Review assignment\",\"subtitle\":\"Cargo and department stay as API fields; this timeline remains presentation metadata.\",\"opposite\":\"2. Assignment\",\"badge\":\"Rich content\",\"markerColor\":\"warning\",\"connectorColor\":\"warning\",\"connectorVariant\":\"dashed\"},{\"id\":\"payroll-check\",\"title\":\"Confirm payroll readiness\",\"subtitle\":\"Salary and admission date remain outside the visual block payload.\",\"opposite\":\"3. Payroll\",\"badge\":\"No submit payload\",\"markerColor\":\"info\",\"markerStyle\":\"outlined\",\"connectorVariant\":\"none\"}]}]}}],\"fields\":[]}]}]}]}}",
|
|
4655
4665
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4659,7 +4669,7 @@
|
|
|
4659
4669
|
"corpusVersion": "1.0.0"
|
|
4660
4670
|
},
|
|
4661
4671
|
{
|
|
4662
|
-
"chunkIndex":
|
|
4672
|
+
"chunkIndex": 169,
|
|
4663
4673
|
"chunkKind": "recipe",
|
|
4664
4674
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[1].definition.inputs.config\",\"fragmentPath\":\"page.widgets[1].definition.inputs.config\",\"fragmentIdentity\":{\"key\":\"funcionarioVisualBlocksForm\",\"id\":\"praxis-dynamic-form\"},\"fragment\":{\"fieldMetadata\":[{\"name\":\"fotoPerfilUrl\",\"label\":\"Avatar\",\"controlType\":\"avatar\",\"imageField\":\"fotoPerfilUrl\",\"readonly\":true},{\"name\":\"nomeCompleto\",\"label\":\"Nome Completo\",\"controlType\":\"input\",\"validators\":{\"required\":true,\"maxLength\":160},\"readonly\":true},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"validators\":{\"email\":true},\"readonly\":true},{\"name\":\"telefone\",\"label\":\"Telefone\",\"controlType\":\"phone\",\"maskType\":\"phone\",\"readonly\":true},{\"name\":\"ativo\",\"label\":\"Ativo\",\"controlType\":\"toggle\",\"readonly\":true},{\"name\":\"cargoId\",\"label\":\"Cargo\",\"controlType\":\"asyncSelect\",\"endpoint\":\"/api/human-resources/cargos/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"readonly\":true},{\"name\":\"departamentoId\",\"label\":\"Departamento\",\"controlType\":\"asyncSelect\",\"endpoint\":\"/api/human-resources/departamentos/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"readonly\":true},{\"name\":\"dataAdmissao\",\"label\":\"Data de Admissão\",\"controlType\":\"date\",\"readonly\":true},{\"name\":\"salario\",\"label\":\"Salário\",\"controlType\":\"currency\",\"currencyCode\":\"BRL\",\"locale\":\"pt-BR\",\"readonly\":true},{\"name\":\"estadoCivil\",\"label\":\"Estado Civil\",\"controlType\":\"select\",\"options\":[{\"label\":\"Solteiro\",\"value\":\"SOLTEIRO\"},{\"label\":\"Casado\",\"value\":\"CASADO\"},{\"label\":\"Divorciado\",\"value\":\"DIVORCIADO\"},{\"label\":\"Viúvo\",\"value\":\"VIUVO\"}],\"readonly\":true}],\"actions\":{\"submit\":{\"id\":\"submit-visual-block-review\",\"label\":\"Submit review\",\"visible\":false,\"type\":\"submit\"},\"reset\":{\"id\":\"reset-visual-block-review\",\"label\":\"Reset\",\"visible\":false,\"type\":\"reset\"},\"cancel\":{\"id\":\"close-visual-block-review\",\"label\":\"Close\",\"visible\":false,\"type\":\"button\"},\"position\":\"right\",\"placement\":\"afterSections\",\"spacing\":\"compact\"},\"formRules\":[{\"id\":\"employee-inactive-visual-guidance\",\"name\":\"Employee inactive visual guidance\",\"targetType\":\"visualBlock\",\"targets\":[\"profile-status-card\"],\"effect\":{\"condition\":{\"===\":[{\"var\":\"ativo\"},false]},\"properties\":{\"title\":\"Employee inactive\",\"titleNodeId\":\"profile-status-title\",\"message\":\"Review offboarding, access revocation and justification before saving.\",\"messageNodeId\":\"profile-status-message\",\"className\":\"employee-status-card employee-status-card--warning\"},\"propertiesWhenFalse\":{\"title\":\"Employee active\",\"titleNodeId\":\"profile-status-title\",\"message\":\"Keep assignment, department and contact details current.\",\"messageNodeId\":\"profile-status-message\",\"className\":\"employee-status-card employee-status-card--ok\"}}},{\"id\":\"assignment-guidance-by-role\",\"name\":\"Assignment guidance by role\",\"targetType\":\"visualBlock\",\"targets\":[\"assignment-guidance-card\"],\"effect\":{\"condition\":{\"===\":[{\"var\":\"cargoId\"},\"gestor\"]},\"properties\":{\"title\":\"Managerial assignment\",\"titleNodeId\":\"assignment-guidance-title\",\"message\":\"Confirm approval scope, reporting line and department ownership.\",\"messageNodeId\":\"assignment-guidance-message\",\"rootClassName\":\"visual-block-guidance-card visual-block-guidance-card--manager\"},\"propertiesWhenFalse\":{\"title\":\"Operational assignment\",\"titleNodeId\":\"assignment-guidance-title\",\"message\":\"This row keeps guidance outside the submit payload while preserving the field rhythm.\",\"messageNodeId\":\"assignment-guidance-message\",\"rootClassName\":\"visual-block-guidance-card\"}}}]}}",
|
|
4665
4675
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|