@praxisui/core 9.0.3 → 9.0.4-rc.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-07-28T00:59:00.108Z",
3
+ "generatedAt": "2026-08-03T00:29:05.091Z",
4
4
  "packageName": "@praxisui/core",
5
- "packageVersion": "9.0.3",
5
+ "packageVersion": "9.0.4-rc.10",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 4,
@@ -3318,6 +3318,186 @@
3318
3318
  {
3319
3319
  "chunkIndex": 41,
3320
3320
  "chunkKind": "recipe",
3321
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment\",\"_comment\":\"Receita enterprise para um workspace operacional de RH governado por resources, surfaces, actions, capabilities e composition.links.\"}",
3322
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3323
+ "contentHash": "39ef4e0936fd37a8ff176cc690cb1ece89254097eefd1120253d994f2f87f9ef",
3324
+ "sourceKind": "component_definition",
3325
+ "sourceId": "praxis-dynamic-page",
3326
+ "corpusVersion": "1.0.0"
3327
+ },
3328
+ {
3329
+ "chunkIndex": 42,
3330
+ "chunkKind": "recipe",
3331
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment2\",\"_comment2\":\"Use praxis-related-resource-outlet para as colecoes filhas; nao replique filtros funcionarioId quando a surface.relatedResource ja publica a relacao.\"}",
3332
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3333
+ "contentHash": "8f3fcff9c5f0e2a9b9b6d5e6511af767a182f77c98b1c1cde47872c47b66d5b7",
3334
+ "sourceKind": "component_definition",
3335
+ "sourceId": "praxis-dynamic-page",
3336
+ "corpusVersion": "1.0.0"
3337
+ },
3338
+ {
3339
+ "chunkIndex": 43,
3340
+ "chunkKind": "recipe",
3341
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"employee-operations-casework\",\"status\":\"golden-fixture\",\"useWhen\":\"Create a complex enterprise HR workbench with a rich employee CRUD, governed lifecycle actions, drawer forms and tabbed related resources.\",\"examplePrompts\":[\"crie um workspace enterprise de RH com tabela, drawers, actions e abas de detalhe\",\"mostre um formulario corporativo complexo totalmente governado pelo quickstart\",\"combine funcionarios, folha, carreira, dependentes, missoes e custodia de equipamentos\"]}}",
3342
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3343
+ "contentHash": "23b3126d08ce7a03a72b9f23dbf87dd3793488282cd1ec1c7cd18af57216ed75",
3344
+ "sourceKind": "component_definition",
3345
+ "sourceId": "praxis-dynamic-page",
3346
+ "corpusVersion": "1.0.0"
3347
+ },
3348
+ {
3349
+ "chunkIndex": 44,
3350
+ "chunkKind": "recipe",
3351
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"platformValue\",\"platformValue\":{\"canonicalContract\":\"praxis-api-quickstart publishes the human-resources.funcionarios resource, item surfaces, lifecycle actions, capabilities and relatedResource relationships.\",\"angularRuntime\":\"@praxisui/crud materializes canonical forms and workflow actions with a stable idempotency key per command attempt; @praxisui/tabs and @praxisui/core materialize nested related-resource outlets through composition.links.\",\"businessFlow\":\"An HR operator filters and selects an employee, performs governed lifecycle operations and inspects one employee dossier without losing portfolio context.\",\"hostResponsibility\":\"The host supplies API_URL, runtime providers and drawer/surface bridges; it does not own employee business rules or parent-child filters.\"}}",
3352
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3353
+ "contentHash": "b036abe355aa938fe5f9cba693e0138259fc944ef2cf0f9f9ed230ef71a4198b",
3354
+ "sourceKind": "component_definition",
3355
+ "sourceId": "praxis-dynamic-page",
3356
+ "corpusVersion": "1.0.0"
3357
+ },
3358
+ {
3359
+ "chunkIndex": 45,
3360
+ "chunkKind": "recipe",
3361
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"inventoryOutcome\",\"inventoryOutcome\":{\"crudDrawersAndWorkflowForms\":\"ja-suportado-mal-nomeado-ou-mal-materializado\",\"tabbedMasterDetailComposition\":\"ja-suportado-so-ux\",\"payrollCareerPeopleAndMissionRelations\":\"ja-suportado-so-ux\",\"equipmentCustodyRelation\":\"lacuna-real-de-contrato-corrigida-no-quickstart\"}}",
3362
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3363
+ "contentHash": "1820143a45550a68c61d3273993602d9f2ca75c81c165b3bdd25259ddbd53689",
3364
+ "sourceKind": "component_definition",
3365
+ "sourceId": "praxis-dynamic-page",
3366
+ "corpusVersion": "1.0.0"
3367
+ },
3368
+ {
3369
+ "chunkIndex": 46,
3370
+ "chunkKind": "recipe",
3371
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"operationalEvidence\",\"operationalEvidence\":{\"baseUrl\":\"https://praxis-api-quickstart.onrender.com\",\"resources\":[\"api/human-resources/funcionarios\",\"api/human-resources/vw-analytics-folha-pagamento\",\"api/human-resources/funcionario-habilidades\",\"api/human-resources/historicos-cargos\",\"api/human-resources/dependentes\",\"api/human-resources/enderecos\",\"api/operations/missao-participantes\",\"api/assets/equipamento-alocacoes\"],\"safeFirstIds\":[\"schemas-surfaces-human-resources-funcionarios\",\"funcionarios-filter-basic\",\"funcionarios-get-by-id\",\"missao-participantes-stats-papel\",\"equipamento-alocacoes-filter-status-danificado\"],\"deploymentNotes\":[\"Deploy the quickstart state snapshot resolver before validating deactivate/reactivate availability against persisted employee state.\",\"Deploy the additive equipment-custody employee surface before validating that related tab against the public host.\",\"Deploy the corrected payroll-history relatedResource operations before validating the payroll tab against the public host.\"]}}",
3372
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3373
+ "contentHash": "1486eaefa8a1506ef89ec65bd09508d6d47b27a6324cb60ee2fe4a6a65a86df5",
3374
+ "sourceKind": "component_definition",
3375
+ "sourceId": "praxis-dynamic-page",
3376
+ "corpusVersion": "1.0.0"
3377
+ },
3378
+ {
3379
+ "chunkIndex": 47,
3380
+ "chunkKind": "recipe",
3381
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringGuidance\",\"authoringGuidance\":[\"Keep create, view and edit as canonical CRUD actions and let discovered surfaces supply schema, method and target URL.\",\"Keep deactivate and reactivate as row actions without explicit form bindings so ResourceActionOpenAdapterService materializes the backend request schema.\",\"Keep the generated submitIdempotencyKey stable while the action form remains open so a retry after timeout replays the committed result instead of repeating the transition.\",\"Use JSON Logic visibleWhen only for presentation; backend availability remains the authority for lifecycle transitions.\",\"Write selected employee state through composition.links and use component-port nestedPath for every child widget inside tabs.\",\"Use praxis-related-resource-outlet with surfaceId and parentResourceId; do not hand-author child filters already published by relatedResource.\",\"Lazy-load tabs so a large corporate dossier does not fetch every related collection before the operator asks for it.\",\"Treat salary, CPF and employee records as sensitive: production hosts must enforce backend field access, authorization, audit and masking instead of hiding fields only in the client.\"]}",
3382
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3383
+ "contentHash": "cdaf8b1a71cc0bb73dbd1b48fceb34ac8314588c49d3bfb06fa26f5f578e8998",
3384
+ "sourceKind": "component_definition",
3385
+ "sourceId": "praxis-dynamic-page",
3386
+ "corpusVersion": "1.0.0"
3387
+ },
3388
+ {
3389
+ "chunkIndex": 48,
3390
+ "chunkKind": "recipe",
3391
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"teaches\",\"teaches\":[\"crud.remote-metadata\",\"crud.drawer.create-view-edit\",\"workflow-action.request-schema\",\"table.rich-columns\",\"table.quick-and-advanced-filters\",\"table.row-actions.json-logic\",\"tabs.lazy-nested-widgets\",\"composition.links\",\"component-port.nestedPath\",\"surface.relatedResource\",\"praxis-related-resource-outlet\",\"master-detail.selection-state\"]}",
3392
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3393
+ "contentHash": "adbf54ae383493951428bf236f020123390769f7671e8b341bd09565a935db17",
3394
+ "sourceKind": "component_definition",
3395
+ "sourceId": "praxis-dynamic-page",
3396
+ "corpusVersion": "1.0.0"
3397
+ },
3398
+ {
3399
+ "chunkIndex": 49,
3400
+ "chunkKind": "recipe",
3401
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"20px\"},\"state\":{\"values\":{\"selection\":{\"employeeId\":1,\"employee\":{\"id\":1,\"nomeCompleto\":\"Tony Stark\",\"cargoNome\":\"Diretor de P&D\",\"departamentoNome\":\"Stark Industries - P&D\",\"ativo\":true}}}}}}",
3402
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3403
+ "contentHash": "e7e995bf21f8e9ce036ddcd3abca637c60bafb82df3237199ed7567d163e8d1a",
3404
+ "sourceKind": "component_definition",
3405
+ "sourceId": "praxis-dynamic-page",
3406
+ "corpusVersion": "1.0.0"
3407
+ },
3408
+ {
3409
+ "chunkIndex": 50,
3410
+ "chunkKind": "recipe",
3411
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets\",\"page\":{\"widgets\":[{\"key\":\"employeePortfolio\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"groups\",\"title\":\"Central de operações de pessoas\",\"subtitle\":\"Filtre, selecione e execute ações governadas sem perder o contexto da carteira\"},\"definition\":{\"id\":\"praxis-crud\",\"bindingOrder\":[\"crudId\",\"componentInstanceId\",\"metadata\"],\"inputs\":{\"crudId\":\"employee-operations-casework\",\"componentInstanceId\":\"employee-operations-casework\",\"metadata\":{\"component\":\"praxis-crud\",\"resource\":{\"path\":\"human-resources/funcionarios\",\"idField\":\"id\",\"endpointKey\":\"human-resources.funcionarios\",\"title\":\"Funcionários\",\"formTitle\":\"Cadastro do funcionário\"},\"table\":{\"toolbar\":{\"visible\":true,\"title\":\"Carteira de funcionários\",\"subtitle\":\"Contexto cadastral, organizacional e financeiro governado pelo Quickstart\",\"search\":{\"enabled\":true,\"placeholder\":\"Buscar por nome, e-mail, cargo ou departamento\"},\"filters\":{\"enabled\":true,\"showAdvancedButton\":true,\"quickFilters\":[{\"id\":\"active-employees\",\"label\":\"Ativos\",\"icon\":\"check_circle\",\"filter\":{\"ativo\":true}},{\"id\":\"inactive-employees\",\"label\":\"Inativos\",\"icon\":\"block\",\"filter\":{\"ativo\":false}}]},\"columnsVisibility\":{\"enabled\":true},\"densityToggle\":{\"enabled\":true}},\"columns\":[{\"field\":\"avatarUrl\",\"header\":\"Pessoa\",\"type\":\"string\",\"width\":\"76px\",\"sticky\":\"start\",\"renderer\":{\"type\":\"avatar\",\"avatar\":{\"srcField\":\"avatarUrl\",\"altField\":\"nomeCompleto\",\"initialsField\":\"nomeCompleto\",\"shape\":\"circle\",\"size\":36}}},{\"field\":\"nomeCompleto\",\"header\":\"Funcionário\",\"type\":\"string\",\"width\":\"220px\",\"sticky\":\"start\"},{\"field\":\"ativo\",\"header\":\"Vínculo\",\"type\":\"boolean\",\"format\":\"active-inactive\",\"width\":\"120px\",\"align\":\"center\",\"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\"}}}]},{\"field\":\"cargoNome\",\"header\":\"Cargo\",\"type\":\"string\",\"width\":\"190px\",\"renderer\":{\"type\":\"chip\",\"chip\":{\"textField\":\"cargoNome\",\"variant\":\"outlined\",\"color\":\"primary\"}}},{\"field\":\"departamentoNome\",\"header\":\"Departamento\",\"type\":\"string\",\"width\":\"220px\",\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"departamentoNome\",\"variant\":\"soft\",\"color\":\"accent\"}}},{\"field\":\"dataAdmissao\",\"header\":\"Admissão\",\"type\":\"date\",\"format\":\"dd/MM/yyyy\",\"width\":\"132px\"},{\"field\":\"salario\",\"header\":\"Salário base\",\"type\":\"currency\",\"format\":\"BRL|symbol|2\",\"align\":\"end\",\"width\":\"150px\"},{\"field\":\"email\",\"header\":\"Contato\",\"type\":\"string\",\"width\":\"240px\"}],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":8,\"pageSizeOptions\":[8,16,32],\"position\":\"bottom\"},\"sorting\":{\"enabled\":true,\"strategy\":\"server\",\"defaultSort\":{\"field\":\"id\",\"direction\":\"asc\"}},\"filtering\":{\"enabled\":true,\"strategy\":\"server\",\"debounceTime\":300,\"advancedFilters\":{\"enabled\":true,\"settings\":{\"alwaysVisibleFields\":[\"nomeCompleto\",\"ativo\",\"dataAdmissaoLastDays\"],\"allowSaveTags\":true,\"advancedOpenMode\":\"modal\",\"advancedClearButtonsEnabled\":true,\"changeDebounceMs\":300}}},\"selection\":{\"enabled\":true,\"type\":\"single\",\"mode\":\"row\",\"persistSelection\":false},\"density\":\"compact\"},\"actions\":{\"row\":{\"enabled\":true,\"display\":\"icons\",\"position\":\"end\",\"sticky\":\"end\",\"width\":\"156px\",\"header\":{\"label\":\"Ações\",\"icon\":\"bolt\",\"tooltip\":\"Formulários e transições descobertos no contrato\"},\"behavior\":{\"enabled\":true,\"maxInline\":3,\"autoStrategy\":\"breakpoints\"},\"actions\":[{\"id\":\"view\",\"label\":\"Visualizar\",\"icon\":\"visibility\",\"action\":\"view\",\"tooltip\":\"Abrir formulário de leitura\"},{\"id\":\"edit\",\"label\":\"Editar\",\"icon\":\"edit\",\"action\":\"edit\",\"tooltip\":\"Abrir formulário de edição\"},{\"id\":\"deactivate\",\"label\":\"Inativar\",\"icon\":\"person_off\",\"color\":\"warn\",\"action\":\"deactivate\",\"tooltip\":\"Abrir action governada com motivo e vigência\",\"visibleWhen\":{\"==\":[{\"var\":\"ativo\"},true]}},{\"id\":\"reactivate\",\"label\":\"Reativar\",\"icon\":\"person_add\",\"color\":\"primary\",\"action\":\"reactivate\",\"tooltip\":\"Abrir action governada com motivo e vigência\",\"visibleWhen\":{\"==\":[{\"var\":\"ativo\"},false]}}]}},\"appearance\":{\"density\":\"compact\",\"stickyHeader\":true,\"stripedRows\":false,\"hoverHighlight\":true}},\"defaults\":{\"openMode\":\"drawer\"},\"actions\":[{\"action\":\"create\",\"openMode\":\"drawer\"},{\"action\":\"view\",\"openMode\":\"drawer\"},{\"action\":\"edit\",\"openMode\":\"drawer\"}]}},\"outputs\":{\"rowClick\":\"emit\",\"selectionChange\":\"emit\",\"afterSave\":\"emit\",\"afterDelete\":\"emit\"}}}]}}",
3412
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3413
+ "contentHash": "eb9bc609666701e587ea3a328682cef771cbe0efc7c644aabafcef9bde6ed1d8",
3414
+ "sourceKind": "component_definition",
3415
+ "sourceId": "praxis-dynamic-page",
3416
+ "corpusVersion": "1.0.0"
3417
+ },
3418
+ {
3419
+ "chunkIndex": 51,
3420
+ "chunkKind": "recipe",
3421
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[1]\",\"fragmentPath\":\"page.widgets[1]\",\"fragmentIdentity\":{\"key\":\"employeeCaseTabs\"},\"fragment\":{\"key\":\"employeeCaseTabs\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"folder_shared\",\"title\":\"Dossiê operacional do funcionário\",\"subtitle\":\"Um contexto inicial explícito é substituído pela seleção feita na carteira\"}}}",
3422
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3423
+ "contentHash": "07a46a02f3a6bdb8879097cba3ddf320b0e00e6d1b080188616bf780ed3ecc64",
3424
+ "sourceKind": "component_definition",
3425
+ "sourceId": "praxis-dynamic-page",
3426
+ "corpusVersion": "1.0.0"
3427
+ },
3428
+ {
3429
+ "chunkIndex": 52,
3430
+ "chunkKind": "recipe",
3431
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[1].definition\",\"fragmentPath\":\"page.widgets[1].definition\",\"fragmentIdentity\":{\"key\":\"employeeCaseTabs\",\"id\":\"praxis-tabs\"},\"fragment\":{\"id\":\"praxis-tabs\",\"bindingOrder\":[\"tabsId\",\"componentInstanceId\",\"config\",\"selectedIndex\"]}}",
3432
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3433
+ "contentHash": "e2d33408b9f745ca378e3d68e9e5aed94e84dd96c228597c4461020343a0724c",
3434
+ "sourceKind": "component_definition",
3435
+ "sourceId": "praxis-dynamic-page",
3436
+ "corpusVersion": "1.0.0"
3437
+ },
3438
+ {
3439
+ "chunkIndex": 53,
3440
+ "chunkKind": "recipe",
3441
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[1].definition.inputs\",\"fragmentPath\":\"page.widgets[1].definition.inputs\",\"fragmentIdentity\":{\"key\":\"employeeCaseTabs\",\"id\":\"praxis-tabs\"},\"fragment\":{\"tabsId\":\"employee-operations-case-tabs\",\"componentInstanceId\":\"employee-operations-case-tabs\",\"selectedIndex\":0}}",
3442
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3443
+ "contentHash": "e94f66ae4bb97373a6228d31e03f6322faffebd4c2bd007965fa0a9a801851a0",
3444
+ "sourceKind": "component_definition",
3445
+ "sourceId": "praxis-dynamic-page",
3446
+ "corpusVersion": "1.0.0"
3447
+ },
3448
+ {
3449
+ "chunkIndex": 54,
3450
+ "chunkKind": "recipe",
3451
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[1].definition.inputs.config\",\"fragmentPath\":\"page.widgets[1].definition.inputs.config\",\"fragmentIdentity\":{\"key\":\"employeeCaseTabs\",\"id\":\"praxis-tabs\"},\"fragment\":{\"appearance\":{\"density\":\"comfortable\"},\"group\":{\"dynamicHeight\":true,\"fitInkBarToContent\":true,\"stretchTabs\":false,\"ariaLabel\":\"Perspectivas do dossiê operacional do funcionário\"},\"behavior\":{\"lazyLoad\":true,\"reorderable\":false,\"closeable\":false}}}",
3452
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3453
+ "contentHash": "e8ef140c0ba6049e3539dfa6c011380468a7d3a8c902a58c32a85b4b4629c991",
3454
+ "sourceKind": "component_definition",
3455
+ "sourceId": "praxis-dynamic-page",
3456
+ "corpusVersion": "1.0.0"
3457
+ },
3458
+ {
3459
+ "chunkIndex": 55,
3460
+ "chunkKind": "recipe",
3461
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[1].definition.inputs.config.tabs\",\"fragmentPath\":\"page.widgets[1].definition.inputs.config.tabs\",\"fragmentIdentity\":{\"key\":\"employeeCaseTabs\",\"id\":\"praxis-tabs\"},\"fragment\":[{\"id\":\"dossier\",\"textLabel\":\"Dossiê\",\"icon\":\"badge\",\"widgets\":[{\"id\":\"praxis-rich-content\",\"childWidgetKey\":\"employee-selection-context\",\"bindingOrder\":[\"document\",\"context\",\"layout\"],\"inputs\":{\"layout\":\"block\",\"context\":{\"selection\":{\"employee\":{\"id\":1,\"nomeCompleto\":\"Tony Stark\",\"cargoNome\":\"Diretor de P&D\",\"departamentoNome\":\"Stark Industries - P&D\",\"ativo\":true}}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"lookupResult\",\"titleExpr\":\"${selection.employee.nomeCompleto}\",\"subtitleExpr\":\"${selection.employee.cargoNome}\",\"status\":\"resolved\",\"meta\":\"Contexto ativo do dossiê\",\"fields\":[{\"label\":\"Departamento\",\"valueExpr\":\"${selection.employee.departamentoNome}\"},{\"label\":\"ID do funcionário\",\"valueExpr\":\"${selection.employee.id}\"}]},{\"type\":\"callout\",\"tone\":\"info\",\"icon\":\"touch_app\",\"title\":\"Como explorar\",\"message\":\"O contrato começa com Tony Stark como referência didática, sem simular uma linha selecionada. Selecione uma linha para substituí-la e atualizar todo o dossiê. Use os ícones de ação para abrir os contratos de visualizar, editar, inativar ou reativar.\"}]}}},{\"id\":\"praxis-dynamic-form\",\"childWidgetKey\":\"employee-dossier-form\",\"bindingOrder\":[\"formId\",\"componentInstanceId\",\"resourcePath\",\"resourceId\",\"mode\",\"config\"],\"inputs\":{\"formId\":\"employee-operations-dossier\",\"componentInstanceId\":\"employee-operations-dossier\",\"resourcePath\":\"human-resources/funcionarios\",\"resourceId\":1,\"mode\":\"view\",\"config\":{\"appearance\":{\"density\":\"comfortable\"}}},\"outputs\":{\"customAction\":\"emit\",\"initializationError\":\"emit\"}}]},{\"id\":\"payroll\",\"textLabel\":\"Folha\",\"icon\":\"payments\",\"widgets\":[{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-payroll-history\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"payroll-history\",\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":1,\"mode\":\"inline\",\"tableId\":\"employee-payroll-history\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":\"Histórico analítico de folha\",\"subtitle\":\"Competência, composição e eventos do funcionário selecionado\"},\"columns\":[{\"field\":\"competencia\",\"header\":\"Competência\",\"type\":\"date\",\"format\":\"MM/yyyy\",\"width\":\"120px\"},{\"field\":\"salarioBruto\",\"header\":\"Bruto\",\"type\":\"currency\",\"format\":\"BRL|symbol|2\",\"align\":\"end\"},{\"field\":\"totalDescontos\",\"header\":\"Descontos\",\"type\":\"currency\",\"format\":\"BRL|symbol|2\",\"align\":\"end\"},{\"field\":\"salarioLiquido\",\"header\":\"Líquido\",\"type\":\"currency\",\"format\":\"BRL|symbol|2\",\"align\":\"end\"},{\"field\":\"qtdEventos\",\"header\":\"Eventos\",\"type\":\"number\",\"align\":\"center\",\"width\":\"100px\"},{\"field\":\"composicaoFolha\",\"header\":\"Composição\",\"type\":\"string\",\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"composicaoFolha\",\"variant\":\"soft\",\"color\":\"primary\"}}}],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":6,\"pageSizeOptions\":[6,12]}}}},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}}]},{\"id\":\"career\",\"textLabel\":\"Carreira\",\"icon\":\"trending_up\",\"widgets\":[{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-skills\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"skills\",\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":1,\"mode\":\"inline\",\"tableId\":\"employee-skill-matrix\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":\"Matriz de competências\"},\"columns\":[{\"field\":\"habilidadeNome\",\"header\":\"Competência\",\"type\":\"string\"},{\"field\":\"proficiencia\",\"header\":\"Proficiência\",\"type\":\"number\",\"renderer\":{\"type\":\"progress\",\"progress\":{\"valueExpr\":\"proficiencia\",\"color\":\"primary\",\"showLabel\":true}}},{\"field\":\"origem\",\"header\":\"Origem\",\"type\":\"string\",\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"origem\",\"variant\":\"outlined\",\"color\":\"accent\"}}}],\"behavior\":{\"pagination\":{\"enabled\":false}}}},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}},{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-career-history\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"career-history\",\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":1,\"mode\":\"inline\",\"tableId\":\"employee-career-history\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":\"Histórico de cargos\"},\"columns\":[{\"field\":\"cargoNome\",\"header\":\"Cargo\",\"type\":\"string\",\"sticky\":\"start\"},{\"field\":\"dataInicio\",\"header\":\"Início\",\"type\":\"date\",\"format\":\"dd/MM/yyyy\"},{\"field\":\"dataFim\",\"header\":\"Fim\",\"type\":\"date\",\"format\":\"dd/MM/yyyy\"},{\"field\":\"observacoes\",\"header\":\"Contexto\",\"type\":\"string\"}],\"behavior\":{\"pagination\":{\"enabled\":false}}}},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}}]},{\"id\":\"people\",\"textLabel\":\"Pessoas\",\"icon\":\"family_restroom\",\"widgets\":[{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-dependents\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"dependents\",\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":1,\"mode\":\"inline\",\"tableId\":\"employee-dependents\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":\"Dependentes e elegibilidade\"},\"columns\":[{\"field\":\"nomeCompleto\",\"header\":\"Dependente\",\"type\":\"string\",\"sticky\":\"start\"},{\"field\":\"parentesco\",\"header\":\"Parentesco\",\"type\":\"string\",\"renderer\":{\"type\":\"chip\",\"chip\":{\"textField\":\"parentesco\",\"variant\":\"outlined\",\"color\":\"primary\"}}},{\"field\":\"dataNascimento\",\"header\":\"Nascimento\",\"type\":\"date\",\"format\":\"dd/MM/yyyy\"}],\"behavior\":{\"pagination\":{\"enabled\":false}}}},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}},{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-address\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"address\",\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":1,\"mode\":\"inline\",\"tableId\":\"employee-address\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":\"Endereço cadastral\"},\"columns\":[{\"field\":\"logradouro\",\"header\":\"Logradouro\",\"type\":\"string\",\"sticky\":\"start\"},{\"field\":\"numero\",\"header\":\"Número\",\"type\":\"string\",\"width\":\"100px\"},{\"field\":\"cidade\",\"header\":\"Cidade\",\"type\":\"string\"},{\"field\":\"estado\",\"header\":\"UF\",\"type\":\"string\",\"width\":\"80px\"},{\"field\":\"cep\",\"header\":\"CEP\",\"type\":\"string\",\"width\":\"120px\"}],\"behavior\":{\"pagination\":{\"enabled\":false}}}},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}}]}]}",
3462
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3463
+ "contentHash": "6c1933fea58c774cfeb067f7c98eec52c15420261aa46b1e7179b57579dbb50a",
3464
+ "sourceKind": "component_definition",
3465
+ "sourceId": "praxis-dynamic-page",
3466
+ "corpusVersion": "1.0.0"
3467
+ },
3468
+ {
3469
+ "chunkIndex": 56,
3470
+ "chunkKind": "recipe",
3471
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[1].definition.inputs.config.tabs\",\"fragmentPath\":\"page.widgets[1].definition.inputs.config.tabs\",\"fragmentIdentity\":{\"key\":\"employeeCaseTabs\",\"id\":\"praxis-tabs\"},\"fragment\":[{\"id\":\"operations\",\"textLabel\":\"Operação\",\"icon\":\"hub\",\"widgets\":[{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-missions\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"mission-participations\",\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":1,\"mode\":\"inline\",\"tableId\":\"employee-mission-participations\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":\"Participações em missões\"},\"columns\":[{\"field\":\"missaoTitulo\",\"header\":\"Missão\",\"type\":\"string\",\"sticky\":\"start\"},{\"field\":\"papel\",\"header\":\"Papel\",\"type\":\"string\",\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"papel\",\"variant\":\"soft\",\"color\":\"primary\"}}},{\"field\":\"principal\",\"header\":\"Liderança\",\"type\":\"boolean\",\"format\":\"yes-no\",\"align\":\"center\"},{\"field\":\"resultado\",\"header\":\"Resultado\",\"type\":\"string\",\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"resultado\",\"variant\":\"outlined\",\"color\":\"accent\"}}}],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":5,\"pageSizeOptions\":[5,10]}}}},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}},{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-equipment-custody\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"equipment-custody\",\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":1,\"mode\":\"inline\",\"tableId\":\"employee-equipment-custody\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":\"Equipamentos sob custódia\"},\"columns\":[{\"field\":\"equipamentoId\",\"header\":\"Equipamento\",\"type\":\"number\",\"sticky\":\"start\"},{\"field\":\"status\",\"header\":\"Status\",\"type\":\"string\",\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"status\",\"variant\":\"soft\",\"color\":\"accent\"}}},{\"field\":\"inicio\",\"header\":\"Início da custódia\",\"type\":\"date\",\"format\":\"dd/MM/yyyy HH:mm\"},{\"field\":\"fim\",\"header\":\"Encerramento\",\"type\":\"date\",\"format\":\"dd/MM/yyyy HH:mm\"}],\"behavior\":{\"pagination\":{\"enabled\":false}}}},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}}]}]}",
3472
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3473
+ "contentHash": "bba253a63a00af22cec7548220ee2eb5eac02ec5d37bd7d7ebc1d0b49bd26c0e",
3474
+ "sourceKind": "component_definition",
3475
+ "sourceId": "praxis-dynamic-page",
3476
+ "corpusVersion": "1.0.0"
3477
+ },
3478
+ {
3479
+ "chunkIndex": 57,
3480
+ "chunkKind": "recipe",
3481
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets[1].definition\",\"fragmentPath\":\"page.widgets[1].definition\",\"fragmentIdentity\":{\"key\":\"employeeCaseTabs\",\"id\":\"praxis-tabs\"},\"fragment\":{\"outputs\":{\"selectedIndexChange\":\"emit\"}}}",
3482
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3483
+ "contentHash": "060dd36673d9346c3e6d3c59a2db044d6ba2469f68320e10788680e2c0c38bf4",
3484
+ "sourceKind": "component_definition",
3485
+ "sourceId": "praxis-dynamic-page",
3486
+ "corpusVersion": "1.0.0"
3487
+ },
3488
+ {
3489
+ "chunkIndex": 58,
3490
+ "chunkKind": "recipe",
3491
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"composition\":{\"version\":\"1.0.0\",\"links\":[{\"id\":\"employee-casework:portfolio.rowClick->state.selection.employeeId\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"employeePortfolio\",\"port\":\"rowClick\",\"direction\":\"output\",\"componentType\":\"praxis-crud\"}},\"to\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.employeeId\",\"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\":\"employee-casework:pick-employee-id\",\"kind\":\"pick-path\",\"phase\":\"link-propagation\",\"input\":{\"source\":\"event\"},\"config\":{\"path\":\"payload.row.id\"}}]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true,\"debounceMs\":50}},{\"id\":\"employee-casework:portfolio.rowClick->state.selection.employee\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"employeePortfolio\",\"port\":\"rowClick\",\"direction\":\"output\",\"componentType\":\"praxis-crud\"}},\"to\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.employee\",\"layer\":\"values\",\"writable\":true}},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"single-value\",\"sourceBindings\":[{\"source\":\"event\"}],\"steps\":[{\"id\":\"employee-casework:pick-employee-record\",\"kind\":\"pick-path\",\"phase\":\"link-propagation\",\"input\":{\"source\":\"event\"},\"config\":{\"path\":\"payload.row\"}}]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true,\"debounceMs\":50}},{\"id\":\"employee-casework:state.employee->dossier-context.context\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.employee\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"employeeCaseTabs\",\"port\":\"context\",\"direction\":\"input\",\"componentType\":\"praxis-rich-content\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"dossier\",\"index\":0},{\"kind\":\"widget\",\"key\":\"employee-selection-context\",\"componentType\":\"praxis-rich-content\"}]}},\"transform\":{\"version\":\"2.0\",\"phase\":\"link-propagation\",\"mode\":\"object-fragment\",\"sourceBindings\":[{\"source\":\"state\",\"path\":\"selection.employee\"}],\"steps\":[{\"id\":\"employee-casework:employee-context\",\"kind\":\"object-template\",\"phase\":\"link-propagation\",\"config\":{\"template\":{\"selection\":{\"employee\":\"${source}\"}}}}]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}},{\"id\":\"employee-casework:state.employeeId->dossier-form.resourceId\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.employeeId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"employeeCaseTabs\",\"port\":\"resourceId\",\"direction\":\"input\",\"componentType\":\"praxis-dynamic-form\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"dossier\",\"index\":0},{\"kind\":\"widget\",\"key\":\"employee-dossier-form\",\"componentType\":\"praxis-dynamic-form\"}]}},\"condition\":{\">\":[{\"var\":\"source\"},0]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}},{\"id\":\"employee-casework:state.employeeId->payroll.parentResourceId\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.employeeId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"employeeCaseTabs\",\"port\":\"parentResourceId\",\"direction\":\"input\",\"componentType\":\"praxis-related-resource-outlet\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"payroll\",\"index\":1},{\"kind\":\"widget\",\"key\":\"employee-payroll-history\",\"componentType\":\"praxis-related-resource-outlet\"}]}},\"condition\":{\">\":[{\"var\":\"source\"},0]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}},{\"id\":\"employee-casework:state.employeeId->skills.parentResourceId\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.employeeId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"employeeCaseTabs\",\"port\":\"parentResourceId\",\"direction\":\"input\",\"componentType\":\"praxis-related-resource-outlet\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"career\",\"index\":2},{\"kind\":\"widget\",\"key\":\"employee-skills\",\"componentType\":\"praxis-related-resource-outlet\"}]}},\"condition\":{\">\":[{\"var\":\"source\"},0]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}},{\"id\":\"employee-casework:state.employeeId->career.parentResourceId\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.employeeId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"employeeCaseTabs\",\"port\":\"parentResourceId\",\"direction\":\"input\",\"componentType\":\"praxis-related-resource-outlet\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"career\",\"index\":2},{\"kind\":\"widget\",\"key\":\"employee-career-history\",\"componentType\":\"praxis-related-resource-outlet\"}]}},\"condition\":{\">\":[{\"var\":\"source\"},0]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}},{\"id\":\"employee-casework:state.employeeId->dependents.parentResourceId\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.employeeId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"employeeCaseTabs\",\"port\":\"parentResourceId\",\"direction\":\"input\",\"componentType\":\"praxis-related-resource-outlet\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"people\",\"index\":3},{\"kind\":\"widget\",\"key\":\"employee-dependents\",\"componentType\":\"praxis-related-resource-outlet\"}]}},\"condition\":{\">\":[{\"var\":\"source\"},0]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}},{\"id\":\"employee-casework:state.employeeId->address.parentResourceId\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.employeeId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"employeeCaseTabs\",\"port\":\"parentResourceId\",\"direction\":\"input\",\"componentType\":\"praxis-related-resource-outlet\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"people\",\"index\":3},{\"kind\":\"widget\",\"key\":\"employee-address\",\"componentType\":\"praxis-related-resource-outlet\"}]}},\"condition\":{\">\":[{\"var\":\"source\"},0]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}},{\"id\":\"employee-casework:state.employeeId->missions.parentResourceId\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.employeeId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"employeeCaseTabs\",\"port\":\"parentResourceId\",\"direction\":\"input\",\"componentType\":\"praxis-related-resource-outlet\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"operations\",\"index\":4},{\"kind\":\"widget\",\"key\":\"employee-missions\",\"componentType\":\"praxis-related-resource-outlet\"}]}},\"condition\":{\">\":[{\"var\":\"source\"},0]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}},{\"id\":\"employee-casework:state.employeeId->equipment.parentResourceId\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"ref\":{\"path\":\"selection.employeeId\",\"layer\":\"values\"}},\"to\":{\"kind\":\"component-port\",\"ref\":{\"widget\":\"employeeCaseTabs\",\"port\":\"parentResourceId\",\"direction\":\"input\",\"componentType\":\"praxis-related-resource-outlet\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"operations\",\"index\":4},{\"kind\":\"widget\",\"key\":\"employee-equipment-custody\",\"componentType\":\"praxis-related-resource-outlet\"}]}},\"condition\":{\">\":[{\"var\":\"source\"},0]},\"policy\":{\"missingValuePolicy\":\"skip\",\"distinct\":true}}]}}}",
3492
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-operations-casework.json",
3493
+ "contentHash": "1f94ddab7e05c4dd6fb3c526dccb4f8e34b6e65092a2789b744a8837562c5939",
3494
+ "sourceKind": "component_definition",
3495
+ "sourceId": "praxis-dynamic-page",
3496
+ "corpusVersion": "1.0.0"
3497
+ },
3498
+ {
3499
+ "chunkIndex": 59,
3500
+ "chunkKind": "recipe",
3321
3501
  "content": "{\"_comment\":\"Praxis Dynamic Page recipe for an HR performance review workbench using portable rich-content blocks for review signals, manager context and governed calibration actions.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"employee-performance-review-workbench\",\"status\":\"public-example\",\"useWhen\":\"Create an HR performance review workbench with review signals, calibration context and governed review actions.\",\"examplePrompts\":[\"create an HR performance review workbench\",\"show a governed performance review rich content surface\",\"generate a people operations page with review signals and calibration actions\"]},\"platformValue\":{\"canonicalRuntime\":\"@praxisui/rich-content owns the portable HR performance review surface.\",\"hostMediation\":\"The host mediates employee, manager, calibration and escalation flows through actionId contracts.\",\"publicExamples\":\"praxis-ui-landing-page can expose the same review workbench without serializing runtime helpers.\",\"agentCorpus\":\"This recipe keeps review signals, selected employee context, manager ownership and governed review actions inside RichContentDocument so agents can reuse the same semantic surface across hosts.\"},\"authoringGuidance\":[\"Use definition.id \\\"praxis-rich-content\\\".\",\"Model review metrics with statGroup instead of host-authored review cards.\",\"Model the selected employee with lookupCard when the host already resolved the review context.\",\"Use tabs for summary and calibration views instead of host-authored review sections.\",\"Use relatedRecord, ctaGroup and actionCard for governed review and escalation 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\":\"employeePerformanceReviewWorkbench\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"military_tech\",\"title\":\"Performance review workbench\",\"subtitle\":\"Portable rich-content surface for governed HR review operations\"},\"definition\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"document\",\"context\",\"layout\",\"rootClassName\"],\"inputs\":{\"layout\":\"block\",\"rootClassName\":\"employee-performance-review-workbench\",\"context\":{\"employee\":{\"id\":\"EMP-320\",\"name\":\"Rafaela Nunes\",\"role\":\"Senior Product Designer\",\"department\":\"Experience Design\",\"cycle\":\"Q2\",\"calibration\":\"2\",\"rating\":\"Exceeds\",\"promotionReadiness\":\"Stretch role ready\",\"reviewWindow\":\"3d\"},\"manager\":{\"name\":\"Marcos Lima\",\"department\":\"Design leadership\",\"reviewLane\":\"Design council\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"callout\",\"tone\":\"info\",\"icon\":\"military_tech\",\"titleExpr\":\"${employee.name}\",\"message\":\"Use a portable HR performance review surface when the host must expose review signals, calibration context and governed actions without inventing people-ops templates.\"},{\"type\":\"statGroup\",\"title\":\"Review signals\",\"subtitle\":\"Canonical KPI block for performance review workbenches\",\"layout\":\"grid\",\"items\":[{\"label\":\"Cycle\",\"valueExpr\":\"${employee.cycle}\",\"captionExpr\":\"${employee.department}\",\"icon\":\"event\"},{\"label\":\"Calibration\",\"valueExpr\":\"${employee.calibration}\",\"captionExpr\":\"${employee.reviewWindow}\",\"icon\":\"balance\"},{\"label\":\"Rating\",\"valueExpr\":\"${employee.rating}\",\"captionExpr\":\"${employee.promotionReadiness}\",\"icon\":\"emoji_events\"}]},{\"type\":\"lookupCard\",\"title\":\"Selected employee\",\"status\":\"resolved\",\"subtitleExpr\":\"${employee.name}\",\"metaExpr\":\"${employee.role}\",\"ctaLabel\":\"Open employee\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"hr.review.employee.open\",\"payloadExpr\":\"${employee}\"},\"fields\":[{\"label\":\"Current rating\",\"valueExpr\":\"${employee.rating}\"},{\"label\":\"Promotion readiness\",\"valueExpr\":\"${employee.promotionReadiness}\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"hr.review.dossier.open\",\"payloadExpr\":\"${employee}\"}}]},{\"type\":\"tabs\",\"title\":\"Review views\",\"subtitle\":\"Portable editorial tabs for review and calibration context.\",\"appearance\":\"underline\",\"defaultTabId\":\"summary\",\"items\":[{\"id\":\"summary\",\"label\":\"Summary\",\"icon\":\"dashboard\",\"content\":[{\"type\":\"text\",\"text\":\"Tabs keep review notes, promotion context and calibration rationale inside the same RichContentDocument.\"}]},{\"id\":\"calibration\",\"label\":\"Calibration\",\"icon\":\"tune\",\"content\":[{\"type\":\"keyValueList\",\"layout\":\"stacked\",\"items\":[{\"label\":\"Calibration rule\",\"value\":\"Escalate any rating change that requires council approval.\"},{\"label\":\"Evidence source\",\"valueExpr\":\"${employee.reviewWindow}\"},{\"label\":\"Portability rule\",\"value\":\"Keep review semantics in the rich-content document; keep execution in the host.\"}]}]}]},{\"type\":\"relatedRecord\",\"title\":\"Review manager\",\"subtitleExpr\":\"${manager.name}\",\"relationLabel\":\"Manager\",\"metaExpr\":\"${manager.department}\",\"ctaLabel\":\"Open manager\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"hr.review.manager.open\",\"payloadExpr\":\"${manager}\"},\"fields\":[{\"label\":\"Review lane\",\"valueExpr\":\"${manager.reviewLane}\",\"hint\":\"Resolved from the current review assignment.\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Schedule calibration\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"hr.review.manager.scheduleCalibration\",\"payloadExpr\":\"${employee}\"}}]},{\"type\":\"ctaGroup\",\"title\":\"Review actions\",\"subtitle\":\"Governed HR review outcomes\",\"message\":\"Use semantic review actions instead of host-authored performance review button bars.\",\"layout\":\"split\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Confirm review\",\"icon\":\"task_alt\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"hr.review.confirm\",\"payloadExpr\":\"${employee}\"}},{\"type\":\"actionButton\",\"label\":\"Request calibration follow-up\",\"icon\":\"flag\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"hr.review.calibration.followUp\",\"payloadExpr\":\"${employee}\"}}]},{\"type\":\"actionCard\",\"title\":\"Escalate review case\",\"subtitleExpr\":\"${employee.id}\",\"message\":\"Use actionCard when the HR host needs a governed escalation or calibration flow.\",\"metaExpr\":\"${employee.role}\",\"ctaLabel\":\"Escalate review\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"hr.review.escalate\",\"payloadExpr\":\"${employee}\"},\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"hr.review.dossier.open\",\"payloadExpr\":\"${employee}\"}}]}]}}}}]}}",
3322
3502
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-performance-review-workbench.json",
3323
3503
  "contentHash": "bea5f828c290327377d6264ddff026ab3da6a2c5187146d3c812edac91b8ff28",
@@ -3326,7 +3506,7 @@
3326
3506
  "corpusVersion": "1.0.0"
3327
3507
  },
3328
3508
  {
3329
- "chunkIndex": 42,
3509
+ "chunkIndex": 60,
3330
3510
  "chunkKind": "recipe",
3331
3511
  "content": "{\"_comment\":\"Praxis Dynamic Page recipe for an HR promotion review workbench using portable rich-content blocks for readiness signals, sponsor context and governed promotion actions.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"employee-promotion-review-workbench\",\"status\":\"public-example\",\"useWhen\":\"Create an HR promotion review workbench with readiness signals, sponsor context and governed promotion actions.\",\"examplePrompts\":[\"create an HR promotion review workbench\",\"show a governed promotion review rich content surface\",\"generate a people operations page with promotion signals and sponsor actions\"]},\"platformValue\":{\"canonicalRuntime\":\"@praxisui/rich-content owns the portable HR promotion review surface.\",\"hostMediation\":\"The host mediates employee, sponsor, promotion planning and escalation flows through actionId contracts.\",\"publicExamples\":\"praxis-ui-landing-page can expose the same promotion review workbench without serializing runtime helpers.\",\"agentCorpus\":\"This recipe keeps promotion signals, selected employee context, sponsor ownership and governed promotion actions inside RichContentDocument so agents can reuse the same semantic surface across hosts.\"},\"authoringGuidance\":[\"Use definition.id \\\"praxis-rich-content\\\".\",\"Model promotion metrics with statGroup instead of host-authored readiness cards.\",\"Model the selected employee with lookupCard when the host already resolved the promotion context.\",\"Use tabs for summary and sponsor views instead of host-authored promotion sections.\",\"Use relatedRecord, ctaGroup and actionCard for governed promotion and escalation 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\":\"employeePromotionReviewWorkbench\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"north_star\",\"title\":\"Promotion review workbench\",\"subtitle\":\"Portable rich-content surface for governed HR promotion operations\"},\"definition\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"document\",\"context\",\"layout\",\"rootClassName\"],\"inputs\":{\"layout\":\"block\",\"rootClassName\":\"employee-promotion-review-workbench\",\"context\":{\"employee\":{\"id\":\"EMP-512\",\"name\":\"Larissa Azevedo\",\"role\":\"Senior Platform Engineer\",\"department\":\"Platform engineering\",\"cycle\":\"Q2\",\"readiness\":\"Ready now\",\"targetRole\":\"Staff Platform Engineer\",\"impactSignal\":\"Cross-team platform leadership\",\"reviewWindow\":\"5d\"},\"sponsor\":{\"name\":\"Helena Souza\",\"department\":\"Leadership sponsor\",\"promotionLane\":\"Leadership council / role leveling\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"callout\",\"tone\":\"info\",\"icon\":\"north_star\",\"titleExpr\":\"${employee.name}\",\"message\":\"Use a portable HR promotion review surface when the host must expose readiness signals, sponsor context and governed promotion actions without inventing people-ops templates.\"},{\"type\":\"statGroup\",\"title\":\"Promotion signals\",\"subtitle\":\"Canonical KPI block for promotion review workbenches\",\"layout\":\"grid\",\"items\":[{\"label\":\"Cycle\",\"valueExpr\":\"${employee.cycle}\",\"captionExpr\":\"${employee.department}\",\"icon\":\"event\"},{\"label\":\"Readiness\",\"valueExpr\":\"${employee.readiness}\",\"captionExpr\":\"${employee.reviewWindow}\",\"icon\":\"trending_up\"},{\"label\":\"Target role\",\"valueExpr\":\"${employee.targetRole}\",\"captionExpr\":\"${employee.impactSignal}\",\"icon\":\"north\"}]},{\"type\":\"lookupCard\",\"title\":\"Selected employee\",\"status\":\"resolved\",\"subtitleExpr\":\"${employee.name}\",\"metaExpr\":\"${employee.role}\",\"ctaLabel\":\"Open employee\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"hr.promotion.employee.open\",\"payloadExpr\":\"${employee}\"},\"fields\":[{\"label\":\"Target role\",\"valueExpr\":\"${employee.targetRole}\"},{\"label\":\"Impact signal\",\"valueExpr\":\"${employee.impactSignal}\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"hr.promotion.dossier.open\",\"payloadExpr\":\"${employee}\"}}]},{\"type\":\"tabs\",\"title\":\"Promotion views\",\"subtitle\":\"Portable editorial tabs for promotion summary and sponsor context.\",\"appearance\":\"underline\",\"defaultTabId\":\"summary\",\"items\":[{\"id\":\"summary\",\"label\":\"Summary\",\"icon\":\"dashboard\",\"content\":[{\"type\":\"text\",\"text\":\"Tabs keep promotion notes, readiness signals and sponsor rationale inside the same RichContentDocument.\"}]},{\"id\":\"sponsor\",\"label\":\"Sponsor\",\"icon\":\"groups\",\"content\":[{\"type\":\"keyValueList\",\"layout\":\"stacked\",\"items\":[{\"label\":\"Promotion rule\",\"value\":\"Escalate any readiness change that requires panel approval or role leveling exception.\"},{\"label\":\"Evidence source\",\"valueExpr\":\"${employee.reviewWindow}\"},{\"label\":\"Portability rule\",\"value\":\"Keep promotion semantics in the rich-content document; keep execution in the host.\"}]}]}]},{\"type\":\"relatedRecord\",\"title\":\"Promotion sponsor\",\"subtitleExpr\":\"${sponsor.name}\",\"relationLabel\":\"Sponsor\",\"metaExpr\":\"${sponsor.department}\",\"ctaLabel\":\"Open sponsor\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"hr.promotion.sponsor.open\",\"payloadExpr\":\"${sponsor}\"},\"fields\":[{\"label\":\"Promotion lane\",\"valueExpr\":\"${sponsor.promotionLane}\",\"hint\":\"Resolved from the current promotion review assignment.\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Schedule sponsor review\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"hr.promotion.sponsor.scheduleReview\",\"payloadExpr\":\"${employee}\"}}]},{\"type\":\"ctaGroup\",\"title\":\"Promotion actions\",\"subtitle\":\"Governed HR promotion outcomes\",\"message\":\"Use semantic promotion actions instead of host-authored readiness button bars.\",\"layout\":\"split\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Confirm promotion plan\",\"icon\":\"task_alt\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"hr.promotion.confirm\",\"payloadExpr\":\"${employee}\"}},{\"type\":\"actionButton\",\"label\":\"Request sponsor follow-up\",\"icon\":\"flag\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"hr.promotion.sponsor.followUp\",\"payloadExpr\":\"${employee}\"}}]},{\"type\":\"actionCard\",\"title\":\"Escalate promotion case\",\"subtitleExpr\":\"${employee.id}\",\"message\":\"Use actionCard when the HR host needs a governed promotion escalation or leveling exception flow.\",\"metaExpr\":\"${employee.role}\",\"ctaLabel\":\"Escalate promotion\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"hr.promotion.escalate\",\"payloadExpr\":\"${employee}\"},\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"hr.promotion.dossier.open\",\"payloadExpr\":\"${employee}\"}}]}]}}}}]}}",
3332
3512
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-promotion-review-workbench.json",
@@ -3336,7 +3516,7 @@
3336
3516
  "corpusVersion": "1.0.0"
3337
3517
  },
3338
3518
  {
3339
- "chunkIndex": 43,
3519
+ "chunkIndex": 61,
3340
3520
  "chunkKind": "recipe",
3341
3521
  "content": "{\"_comment\":\"Praxis Dynamic Page recipe for an HR succession planning workbench using portable rich-content blocks for readiness signals, sponsor context and governed succession actions.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"employee-succession-planning-workbench\",\"status\":\"public-example\",\"useWhen\":\"Create an HR succession planning workbench with readiness signals, sponsor context and governed succession actions.\",\"examplePrompts\":[\"create an HR succession planning workbench\",\"show a governed succession planning rich content surface\",\"generate a people operations page with succession signals and sponsor actions\"]},\"platformValue\":{\"canonicalRuntime\":\"@praxisui/rich-content owns the portable HR succession planning surface.\",\"hostMediation\":\"The host mediates role, sponsor, readiness planning and escalation flows through actionId contracts.\",\"publicExamples\":\"praxis-ui-landing-page can expose the same succession planning workbench without serializing runtime helpers.\",\"agentCorpus\":\"This recipe keeps succession signals, target role context, sponsor ownership and governed succession actions inside RichContentDocument so agents can reuse the same semantic surface across hosts.\"},\"authoringGuidance\":[\"Use definition.id \\\"praxis-rich-content\\\".\",\"Model succession metrics with statGroup instead of host-authored readiness cards.\",\"Model the target role with lookupCard when the host already resolved the succession planning context.\",\"Use tabs for summary and pipeline views instead of host-authored succession sections.\",\"Use relatedRecord, ctaGroup and actionCard for governed succession and escalation 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\":\"employeeSuccessionPlanningWorkbench\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"account_tree\",\"title\":\"Succession planning workbench\",\"subtitle\":\"Portable rich-content surface for governed HR succession planning\"},\"definition\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"document\",\"context\",\"layout\",\"rootClassName\"],\"inputs\":{\"layout\":\"block\",\"rootClassName\":\"employee-succession-planning-workbench\",\"context\":{\"plan\":{\"role\":\"Principal Platform Lead\",\"incumbent\":\"Patricia Almeida\",\"bench\":\"2\",\"risk\":\"Moderate\",\"window\":\"90d\",\"readiness\":\"Ready in < 6 months\"},\"sponsor\":{\"name\":\"Helena Souza\",\"department\":\"Leadership sponsor\",\"lane\":\"Leadership council / critical roles\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"callout\",\"tone\":\"info\",\"icon\":\"account_tree\",\"titleExpr\":\"${plan.role}\",\"message\":\"Use a portable HR succession planning surface when the host must expose readiness signals, sponsor context and governed succession actions without inventing people-ops templates.\"},{\"type\":\"statGroup\",\"title\":\"Succession signals\",\"subtitle\":\"Canonical KPI block for succession planning workbenches\",\"layout\":\"grid\",\"items\":[{\"label\":\"Bench\",\"valueExpr\":\"${plan.bench}\",\"caption\":\"Ready successors\",\"icon\":\"groups\"},{\"label\":\"Risk\",\"valueExpr\":\"${plan.risk}\",\"caption\":\"Coverage continuity\",\"icon\":\"warning\"},{\"label\":\"Window\",\"valueExpr\":\"${plan.window}\",\"caption\":\"Planning horizon\",\"icon\":\"schedule\"}]},{\"type\":\"lookupCard\",\"title\":\"Target role\",\"status\":\"resolved\",\"subtitleExpr\":\"${plan.role}\",\"meta\":\"Succession planning\",\"ctaLabel\":\"Open successor plan\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"hr.succession.plan.open\",\"payloadExpr\":\"${plan}\"},\"fields\":[{\"label\":\"Current incumbent\",\"valueExpr\":\"${plan.incumbent}\"},{\"label\":\"Readiness\",\"valueExpr\":\"${plan.readiness}\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"hr.succession.dossier.open\",\"payloadExpr\":\"${plan}\"}}]},{\"type\":\"tabs\",\"title\":\"Succession views\",\"subtitle\":\"Portable editorial tabs for readiness summary and pipeline context.\",\"appearance\":\"underline\",\"defaultTabId\":\"summary\",\"items\":[{\"id\":\"summary\",\"label\":\"Summary\",\"icon\":\"dashboard\",\"content\":[{\"type\":\"text\",\"text\":\"Keep succession rationale, readiness notes and pipeline context inside the same RichContentDocument.\"}]},{\"id\":\"pipeline\",\"label\":\"Pipeline\",\"icon\":\"account_tree\",\"content\":[{\"type\":\"keyValueList\",\"layout\":\"stacked\",\"items\":[{\"label\":\"Planning rule\",\"value\":\"Escalate any succession gap with no ready-now successor or no sponsor alignment in the current cycle.\"},{\"label\":\"Evidence source\",\"value\":\"Performance history, promotion outlook and sponsor alignment notes.\"}]}]}]},{\"type\":\"relatedRecord\",\"title\":\"Succession sponsor\",\"relationLabel\":\"Sponsor\",\"subtitleExpr\":\"${sponsor.name}\",\"metaExpr\":\"${sponsor.department}\",\"ctaLabel\":\"Open sponsor\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"hr.succession.sponsor.open\",\"payloadExpr\":\"${sponsor}\"},\"fields\":[{\"label\":\"Planning lane\",\"valueExpr\":\"${sponsor.lane}\",\"hint\":\"Resolved from the current succession planning assignment.\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Schedule sponsor sync\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"hr.succession.sponsor.scheduleSync\",\"payloadExpr\":\"${plan}\"}}]},{\"type\":\"ctaGroup\",\"title\":\"Succession actions\",\"subtitle\":\"Governed HR succession outcomes\",\"message\":\"Use semantic succession actions instead of host-authored planning button bars.\",\"layout\":\"split\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Confirm succession plan\",\"icon\":\"task_alt\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"hr.succession.confirm\",\"payloadExpr\":\"${plan}\"}},{\"type\":\"actionButton\",\"label\":\"Request readiness follow-up\",\"icon\":\"sync\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"hr.succession.readiness.followUp\",\"payloadExpr\":\"${plan}\"}}]},{\"type\":\"actionCard\",\"title\":\"Escalate succession gap\",\"subtitleExpr\":\"${plan.role}\",\"message\":\"Use actionCard when the HR host needs a governed escalation for unresolved succession gaps or sponsor exceptions.\",\"metaExpr\":\"${plan.readiness}\",\"ctaLabel\":\"Escalate gap\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"hr.succession.escalate\",\"payloadExpr\":\"${plan}\"},\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Open dossier\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"hr.succession.dossier.open\",\"payloadExpr\":\"${plan}\"}}]}]}}}}]}}",
3342
3522
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.employee-succession-planning-workbench.json",
@@ -3346,7 +3526,7 @@
3346
3526
  "corpusVersion": "1.0.0"
3347
3527
  },
3348
3528
  {
3349
- "chunkIndex": 44,
3529
+ "chunkIndex": 62,
3350
3530
  "chunkKind": "recipe",
3351
3531
  "content": "{\"_comment\":\"Recipe for agents to create a Praxis Dynamic Page with a governed files evidence upload flow.\",\"_comment2\":\"Use this when a page needs file intake, validation, metadata, quota/rate-limit feedback and upload lifecycle events.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"files-upload-evidence-flow\",\"status\":\"public-example\",\"useWhen\":\"Create a metadata-driven page that embeds praxis-files-upload as a governed evidence intake surface.\",\"examplePrompts\":[\"create a mission evidence upload page\",\"show praxis-files-upload with metadata and validation\",\"generate an evidence intake dynamic page with upload lifecycle events\"]},\"platformValue\":{\"canonicalRuntime\":\"@praxisui/files-upload owns validation, retry, quota, rate-limit and event semantics.\",\"hostBoundary\":\"The host owns the files API provided through baseUrl and must return the documented Praxis envelopes.\",\"angularRuntime\":\"@praxisui/core resolves praxis-files-upload and the support widgets from one Dynamic Page contract.\",\"publicExamples\":\"praxis-ui-landing-page exposes the live preview and inspector JSON.\",\"agentCorpus\":\"This recipe keeps agents on the supported config paths: ui, limits, options, bulk, quotas, rateLimit, headers and messages.\"},\"authoringGuidance\":[\"Use filesUploadId as a stable instance key for persistence and diagnostics.\",\"Set baseUrl explicitly to the host files API boundary.\",\"Use ui.accept for input hints and options.allowedExtensions plus options.acceptMimeTypes for backend validation.\",\"Use limits.maxFileSizeBytes, limits.maxFilesPerBulk and limits.maxBulkSizeBytes for client-side guards.\",\"Use manualUpload when metadata or review context should be completed before sending files.\",\"Do not use legacy keys such as maxFileSize, endpoint.uploadUrl, valueMode or texts on praxis-files-upload; valueMode belongs to the form field wrapper.\"],\"teaches\":[\"files-upload.evidence-flow\",\"files-upload.validation\",\"files-upload.backend-options\",\"files-upload.bulk-policy\",\"files-upload.rateLimit\",\"files-upload.quotas\",\"page.composition-links\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":2,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"missionEvidenceUpload\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"upload_file\",\"title\":\"Mission evidence intake\",\"subtitle\":\"Manual upload, metadata, validation and host API boundary\"},\"definition\":{\"id\":\"praxis-files-upload\",\"bindingOrder\":[\"filesUploadId\",\"baseUrl\",\"displayMode\",\"config\",\"context\"],\"inputs\":{\"filesUploadId\":\"mission-evidence-upload\",\"componentInstanceId\":\"dynamic-page-showcase\",\"baseUrl\":\"/api/files\",\"displayMode\":\"full\",\"enableCustomization\":true,\"context\":{\"resourceKey\":\"operations.missoes\",\"resourcePath\":\"operations/missoes\",\"evidenceScope\":\"mission-review\"},\"config\":{\"strategy\":\"direct\",\"ui\":{\"showDropzone\":true,\"accept\":[\"application/pdf\",\"image/png\",\"image/jpeg\",\".pdf\",\".png\",\".jpg\"],\"dense\":false,\"showConflictPolicySelector\":true,\"showMetadataForm\":true,\"showProgress\":true,\"manualUpload\":true,\"dropzone\":{\"expandOnDragProximity\":true,\"proximityPx\":96,\"expandMode\":\"inline\",\"expandHeight\":180,\"expandDebounceMs\":120},\"list\":{\"collapseAfter\":4,\"detailsMode\":\"card\",\"detailsShowTechnical\":true,\"detailsFields\":[\"id\",\"fileName\",\"contentType\",\"fileSize\",\"uploadedAt\",\"scanStatus\"]}},\"limits\":{\"maxFileSizeBytes\":10485760,\"maxFilesPerBulk\":6,\"maxBulkSizeBytes\":52428800},\"options\":{\"defaultConflictPolicy\":\"MAKE_UNIQUE\",\"strictValidation\":true,\"maxUploadSizeMb\":10,\"allowedExtensions\":[\"pdf\",\"png\",\"jpg\",\"jpeg\"],\"acceptMimeTypes\":[\"application/pdf\",\"image/png\",\"image/jpeg\"],\"targetDirectory\":\"mission-evidence\",\"enableVirusScanning\":true},\"bulk\":{\"failFast\":false,\"parallelUploads\":2,\"retryCount\":2,\"retryBackoffMs\":600},\"quotas\":{\"showQuotaWarnings\":true,\"blockOnExceed\":true},\"rateLimit\":{\"autoRetryOn429\":true,\"showBannerOn429\":true,\"maxAutoRetry\":2,\"baseBackoffMs\":1000},\"headers\":{\"tenantHeader\":\"X-Tenant-Id\",\"userHeader\":\"X-User-Id\"},\"messages\":{\"successSingle\":\"Evidence uploaded and ready for review.\",\"successBulk\":\"Evidence batch processed.\",\"errors\":{\"QUOTA_EXCEEDED\":\"Evidence quota reached for this mission.\",\"TIPO_ARQUIVO_INVALIDO\":\"Only PDF, PNG and JPEG evidence is accepted.\",\"FILE_TOO_LARGE\":\"Evidence file exceeds the 10 MB limit.\"}}}},\"outputs\":{\"uploadStart\":\"emit\",\"uploadProgress\":\"emit\",\"uploadSuccess\":\"emit\",\"bulkComplete\":\"emit\",\"error\":\"emit\",\"rateLimited\":\"emit\",\"pendingStateChange\":\"emit\",\"retry\":\"emit\",\"download\":\"emit\",\"copyLink\":\"emit\",\"detailsOpened\":\"emit\",\"detailsClosed\":\"emit\"}}}]}}",
3352
3532
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.files-upload-evidence-flow.json",
@@ -3356,7 +3536,7 @@
3356
3536
  "corpusVersion": "1.0.0"
3357
3537
  },
3358
3538
  {
3359
- "chunkIndex": 45,
3539
+ "chunkIndex": 63,
3360
3540
  "chunkKind": "recipe",
3361
3541
  "content": "{\"_comment\":\"Template de pagina com formulario unico (Praxis Dynamic Page).\",\"_comment2\":\"resourcePath deve ser o path base do recurso (sem /filter).\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"form\",\"useWhen\":\"Create a dynamic page with a single form widget.\",\"examplePrompts\":[\"pagina com formulario\",\"crie uma pagina de formulario\",\"formulario de detalhes\"]},\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":2,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"mainForm\",\"definition\":{\"id\":\"praxis-dynamic-form\",\"bindingOrder\":[\"resourcePath\",\"formId\"],\"inputs\":{\"formId\":\"{{resourceKey}}-form\",\"resourcePath\":\"{{resourcePath}}\",\"mode\":\"view\"}}}]}}",
3362
3542
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.form.json",
@@ -3366,7 +3546,7 @@
3366
3546
  "corpusVersion": "1.0.0"
3367
3547
  },
3368
3548
  {
3369
- "chunkIndex": 46,
3549
+ "chunkIndex": 64,
3370
3550
  "chunkKind": "recipe",
3371
3551
  "content": "{\"_comment\":\"Recipe for agents that need to author inline table filter fields through the canonical Praxis Metadata Editor.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"inline-filter-editorial-lab\",\"status\":\"public-example\",\"useWhen\":\"Create an authoring workspace for inline filter field metadata before generating praxis-table advancedFilters.\",\"examplePrompts\":[\"show an inline filter metadata authoring lab\",\"generate metadata editor examples for async select date range currency range and toggle filters\",\"teach agents how to author inline table filter fields\"]},\"platformValue\":{\"canonicalContract\":\"@praxisui/core owns inline filter control type tokens and aliases.\",\"editorialOwner\":\"@praxisui/metadata-editor maps inline filter control types to package-owned editor properties.\",\"runtimeConsumer\":\"@praxisui/table consumes the authored FieldDefinition metadata inside advancedFilters.\",\"publicExamples\":\"praxis-ui-landing-page exposes a copyable Dynamic Page contract that renders the metadata editor.\",\"agentCorpus\":\"This recipe pairs with praxis-dynamic-page.inline-filter-lab.json, which shows the runtime table filter surface.\"},\"authoringGuidance\":[\"Use praxis-metadata-editor when the goal is to author or inspect FieldDefinition metadata.\",\"Set controlType to package-owned inline filter tokens such as inlineAsyncSelect, inlineDateRange, inlineCurrencyRange and inlineToggle.\",\"Keep backend filter semantics in the published filter DTO; use metadata editor seeds for field presentation, option loading and inline behavior.\",\"For async selects, prefer resourcePath or the canonical option endpoint, plus displayField/valueField or optionLabelKey/optionValueKey.\",\"For range controls, include labels, bounds, locale/currency when relevant and inlineAutoSize constraints so the table toolbar remains stable.\",\"For boolean filters, use inlineToggle when the field should behave as a toolbar affordance rather than a long form field.\",\"After authoring metadata, place the resulting fields under praxis-table behavior.filtering.advancedFilters.settings.alwaysVisibleFieldMetadataOverrides.\"],\"teaches\":[\"metadata-editor.inline-filter-editorial\",\"inline-filter-control-types\",\"inlineAsyncSelect.editorial\",\"inlineDateRange.editorial\",\"inlineCurrencyRange.editorial\",\"inlineToggle.editorial\",\"praxis-tabs.nested-widgets\",\"table.filters.advancedFilters\"],\"companionRecipes\":[\"praxis-ui-angular/examples/ai-recipes/praxis-dynamic-page.inline-filter-lab.json\",\"praxis-ui-angular/examples/ai-recipes/praxis-field-metadata-editor.json\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"inlineFilterEditorialTabs\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"tune\",\"title\":\"Inline filter editorial lab\",\"subtitle\":\"Author filter field metadata before composing table advancedFilters\"},\"definition\":{\"id\":\"praxis-tabs\",\"bindingOrder\":[\"tabsId\",\"config\"],\"inputs\":{\"tabsId\":\"inline-filter-editorial-lab\",\"componentInstanceId\":\"dynamic-page-showcase\",\"config\":{\"appearance\":{\"density\":\"comfortable\",\"color\":\"primary\",\"stretchTabs\":false,\"alignTabs\":\"start\",\"dynamicHeight\":true,\"fitInkBarToContent\":true},\"tabs\":[{\"id\":\"async-select\",\"textLabel\":\"Async select\",\"icon\":\"manage_search\",\"widgets\":[{\"id\":\"praxis-metadata-editor\",\"bindingOrder\":[\"controlType\",\"seed\"],\"inputs\":{\"controlType\":\"inlineAsyncSelect\",\"seed\":{\"name\":\"cargoId\",\"label\":\"Cargo\",\"controlType\":\"inlineAsyncSelect\",\"placeholder\":\"Buscar cargo\",\"helpText\":\"Remote option filter for the funcionarios table toolbar.\",\"resourcePath\":\"human-resources/cargos\",\"endpoint\":\"/api/human-resources/cargos/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"optionLabelKey\":\"label\",\"optionValueKey\":\"id\",\"minSearchLength\":2,\"validationDebounce\":250,\"inlineAutoSize\":{\"minWidth\":220,\"maxWidth\":320},\"clearButton\":{\"enabled\":true,\"showOnlyWhenFilled\":true}}},\"outputs\":{\"applied\":\"emit\",\"cancel\":\"emit\"}}]},{\"id\":\"date-range\",\"textLabel\":\"Date range\",\"icon\":\"date_range\",\"widgets\":[{\"id\":\"praxis-metadata-editor\",\"bindingOrder\":[\"controlType\",\"seed\"],\"inputs\":{\"controlType\":\"inlineDateRange\",\"seed\":{\"name\":\"dataAdmissaoRange\",\"label\":\"Admissao\",\"controlType\":\"inlineDateRange\",\"startLabel\":\"Inicio\",\"endLabel\":\"Fim\",\"placeholder\":\"Periodo de admissao\",\"helpText\":\"Date interval filter mapped to the published funcionarios filter DTO.\",\"minDate\":\"2020-01-01\",\"maxDate\":\"2026-12-31\",\"inlinePanelTitle\":\"Periodo de admissao\",\"inlineAutoSize\":{\"minWidth\":260,\"maxWidth\":380},\"clearButton\":{\"enabled\":true}}},\"outputs\":{\"applied\":\"emit\",\"cancel\":\"emit\"}}]},{\"id\":\"currency-range\",\"textLabel\":\"Currency range\",\"icon\":\"payments\",\"widgets\":[{\"id\":\"praxis-metadata-editor\",\"bindingOrder\":[\"controlType\",\"seed\"],\"inputs\":{\"controlType\":\"inlineCurrencyRange\",\"seed\":{\"name\":\"salarioBetween\",\"label\":\"Salario\",\"controlType\":\"inlineCurrencyRange\",\"startLabel\":\"Minimo\",\"endLabel\":\"Maximo\",\"placeholder\":\"Faixa salarial\",\"helpText\":\"Currency range filter with locale and bounds for payroll analysis.\",\"currency\":\"BRL\",\"currencyCode\":\"BRL\",\"locale\":\"pt-BR\",\"min\":0,\"max\":50000,\"step\":500,\"decimalPlaces\":2,\"inlineAutoSize\":{\"minWidth\":280,\"maxWidth\":420}}},\"outputs\":{\"applied\":\"emit\",\"cancel\":\"emit\"}}]},{\"id\":\"toggle\",\"textLabel\":\"Toggle\",\"icon\":\"toggle_on\",\"widgets\":[{\"id\":\"praxis-metadata-editor\",\"bindingOrder\":[\"controlType\",\"seed\"],\"inputs\":{\"controlType\":\"inlineToggle\",\"seed\":{\"name\":\"ativo\",\"label\":\"Ativos\",\"controlType\":\"inlineToggle\",\"defaultValue\":true,\"helpText\":\"Boolean filter that can be rendered as an action-style toolbar affordance.\",\"inlineLabelVisible\":true,\"trueLabel\":\"Ativos\",\"falseLabel\":\"Inativos\",\"indeterminateLabel\":\"Todos\",\"clearButton\":{\"enabled\":true},\"inlineAutoSize\":{\"minWidth\":128,\"maxWidth\":180}}},\"outputs\":{\"applied\":\"emit\",\"cancel\":\"emit\"}}]}]}},\"outputs\":{\"selectedIndexChange\":\"emit\"}}}]}}",
3372
3552
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.inline-filter-editorial-lab.json",
@@ -3376,7 +3556,7 @@
3376
3556
  "corpusVersion": "1.0.0"
3377
3557
  },
3378
3558
  {
3379
- "chunkIndex": 47,
3559
+ "chunkIndex": 65,
3380
3560
  "chunkKind": "recipe",
3381
3561
  "content": "{\"_comment\":\"Recipe para agentes criarem uma Praxis Dynamic Page com filtros inline avancados em praxis-table.\",\"_comment2\":\"Use quando a meta for demonstrar o filter DTO publicado renderizado como controles inline no toolbar da tabela.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"inline-filter-lab\",\"status\":\"public-example\",\"useWhen\":\"Create a metadata-driven table page that pins filter DTO fields as inline toolbar controls.\",\"examplePrompts\":[\"crie uma tabela com filtros inline para funcionarios\",\"mostre filtros com async select, date range e currency range\",\"gere um exemplo de praxis-table com advancedFilters sempre visiveis\"]},\"platformValue\":{\"canonicalContract\":\"praxis-metadata-starter publishes the filter request schema used by praxis-filter.\",\"referenceApi\":\"praxis-api-quickstart serves funcionarios data and remote option endpoints.\",\"angularRuntime\":\"@praxisui/table hosts praxis-filter in the toolbar and wires filter events into remote table refresh.\",\"publicExamples\":\"praxis-ui-landing-page exposes the JSON envelope, runtime preview and coverage map.\",\"agentCorpus\":\"praxisui-http-examples provides executable schema and filter evidence.\"},\"operationalEvidence\":{\"baseUrl\":\"https://praxis-api-quickstart.onrender.com\",\"safeFirstIds\":[\"filtered-schema-request-funcionarios\",\"funcionarios-filter-basic\",\"cargos-options-filter\",\"departamentos-options-filter\"],\"pendingHttpIds\":[],\"httpExamples\":[\"praxisui-http-examples/http/metadata/filtered_schema_request_funcionarios.http\",\"praxisui-http-examples/http/resources/funcionarios_filter_basic.http\",\"praxisui-http-examples/http/resources/cargos_options_filter.http\",\"praxisui-http-examples/http/resources/departamentos_options_filter.http\"]},\"authoringGuidance\":[\"Use behavior.filtering.advancedFilters.settings to pin filter DTO fields in the table toolbar.\",\"Prefer alwaysVisibleFields that exist in the published filter request schema.\",\"Use alwaysVisibleFieldMetadataOverrides for presentation only; do not redefine backend filter semantics.\",\"Use package-owned inline control types such as inlineInput, inlineToggle, inlineAsyncSelect, inlineDateRange and inlineCurrencyRange.\",\"Keep option endpoints from the canonical x-ui metadata when using async select filters.\"],\"teaches\":[\"table.filters.advancedFilters\",\"dynamic-fields.inlineInput\",\"dynamic-fields.inlineToggle\",\"dynamic-fields.inlineAsyncSelect\",\"dynamic-fields.inlineDateRange\",\"dynamic-fields.inlineCurrencyRange\",\"remote-options\",\"filter.dto\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"funcionariosInlineFilterTable\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"filter_alt\",\"title\":\"Funcionarios inline filter lab\",\"subtitle\":\"Filter DTO rendered as toolbar controls\"},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\"],\"inputs\":{\"resourcePath\":\"human-resources/funcionarios\",\"tableId\":\"human-resources-funcionarios-inline-filter-lab\",\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"Funcionarios\",\"subtitle\":\"Inline filter controls backed by the quickstart filter DTO\"},\"columns\":[{\"field\":\"nomeCompleto\",\"header\":\"Funcionario\",\"type\":\"text\",\"sticky\":\"start\",\"width\":\"220px\"},{\"field\":\"cargoNome\",\"header\":\"Cargo\",\"type\":\"chip\",\"width\":\"180px\"},{\"field\":\"departamentoNome\",\"header\":\"Departamento\",\"type\":\"badge\",\"width\":\"190px\"},{\"field\":\"estadoCivil\",\"header\":\"Estado Civil\",\"type\":\"badge\",\"width\":\"150px\"},{\"field\":\"salario\",\"header\":\"Salario\",\"type\":\"currency\",\"align\":\"end\",\"format\":{\"currency\":\"BRL\",\"locale\":\"pt-BR\"},\"width\":\"150px\"},{\"field\":\"dataAdmissao\",\"header\":\"Admissao\",\"type\":\"date\",\"format\":{\"dateStyle\":\"short\",\"locale\":\"pt-BR\"},\"width\":\"140px\"},{\"field\":\"ativo\",\"header\":\"Ativo\",\"type\":\"toggle\",\"align\":\"center\",\"width\":\"110px\"}],\"behavior\":{\"filtering\":{\"enabled\":true,\"strategy\":\"server\",\"debounceTime\":250,\"advancedFilters\":{\"enabled\":true,\"settings\":{\"mode\":\"filter\",\"showAdvanced\":true,\"allowSaveTags\":true,\"changeDebounceMs\":250,\"alwaysVisibleFields\":[\"nomeCompleto\",\"ativo\",\"cargoId\",\"departamentoId\",\"dataAdmissaoRange\",\"salarioBetween\",\"estadoCivil\"],\"selectedFieldIds\":[\"email\",\"telefone\"],\"placeBooleansInActions\":true,\"showToggleLabels\":true,\"alwaysMinWidth\":180,\"alwaysColsMd\":3,\"alwaysColsLg\":4,\"tagColor\":\"primary\",\"tagVariant\":\"outlined\",\"actionsButtonColor\":\"primary\",\"actionsVariant\":\"outlined\",\"useInlineSearchableSelectVariant\":true,\"useInlineDateRangeVariant\":true,\"useInlineRangeVariant\":true,\"overlayVariant\":\"card\",\"advancedOpenMode\":\"drawer\",\"advancedClearButtonsEnabled\":true,\"alwaysVisibleFieldMetadataOverrides\":{\"nomeCompleto\":{\"label\":\"Nome\",\"controlType\":\"inlineInput\",\"inlineAutoSize\":{\"minWidth\":220,\"maxWidth\":320},\"clearButton\":{\"enabled\":true,\"showOnlyWhenFilled\":true}},\"ativo\":{\"label\":\"Ativos\",\"controlType\":\"inlineToggle\",\"inlineAutoSize\":{\"minWidth\":112}},\"cargoId\":{\"label\":\"Cargo\",\"controlType\":\"inlineAsyncSelect\",\"endpoint\":\"/api/human-resources/cargos/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"inlineAutoSize\":{\"minWidth\":190,\"maxWidth\":280}},\"departamentoId\":{\"label\":\"Departamento\",\"controlType\":\"inlineAsyncSelect\",\"endpoint\":\"/api/human-resources/departamentos/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"inlineAutoSize\":{\"minWidth\":210,\"maxWidth\":320}},\"dataAdmissaoRange\":{\"label\":\"Admissao\",\"controlType\":\"inlineDateRange\",\"inlineAutoSize\":{\"minWidth\":260,\"maxWidth\":360}},\"salarioBetween\":{\"label\":\"Salario\",\"controlType\":\"inlineCurrencyRange\",\"currency\":\"BRL\",\"locale\":\"pt-BR\",\"inlineAutoSize\":{\"minWidth\":250,\"maxWidth\":360}},\"estadoCivil\":{\"label\":\"Estado Civil\",\"controlType\":\"inlineSelect\",\"inlineAutoSize\":{\"minWidth\":160,\"maxWidth\":240}}}}}},\"selection\":{\"enabled\":true,\"type\":\"single\"},\"density\":\"compact\"}}},\"outputs\":{\"rowClick\":\"emit\"}}}]}}",
3382
3562
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.inline-filter-lab.json",
@@ -3386,17 +3566,17 @@
3386
3566
  "corpusVersion": "1.0.0"
3387
3567
  },
3388
3568
  {
3389
- "chunkIndex": 48,
3569
+ "chunkIndex": 66,
3390
3570
  "chunkKind": "recipe",
3391
- "content": "{\"_comment\":\"Template base para Praxis Dynamic Page (praxis-dynamic-page) com variantes.\",\"_comment2\":\"resourcePath deve ser o path base do recurso (sem /filter).\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"base\",\"defaultVariantId\":\"base\",\"variants\":[{\"id\":\"base\",\"registryKey\":\"praxis-dynamic-page:base\",\"variantId\":\"base\",\"label\":\"Base (widget único)\",\"description\":\"Cria uma página com um único widget simples.\",\"useWhen\":\"Create a dynamic page with a single widget.\"},{\"id\":\"table\",\"registryKey\":\"praxis-dynamic-page:table\",\"variantId\":\"table\",\"label\":\"Tabela\",\"description\":\"Cria uma página com uma tabela simples.\",\"useWhen\":\"Create a dynamic page with a single table.\"},{\"id\":\"form\",\"registryKey\":\"praxis-dynamic-page:form\",\"variantId\":\"form\",\"label\":\"Formulário\",\"description\":\"Cria uma página com formulário de detalhes.\",\"useWhen\":\"Create a dynamic page with a single form.\"},{\"id\":\"visual-block-presets-form\",\"registryKey\":\"praxis-dynamic-page:visual-block-presets-form\",\"variantId\":\"visual-block-presets-form\",\"label\":\"Formulário com blocos visuais\",\"description\":\"Cria uma página com praxis-dynamic-form usando FormColumn.items para misturar campos da API e blocos visuais estáticos.\",\"useWhen\":\"Create a dynamic page form that interleaves API fields with static visual blocks authored from visual block presets.\"},{\"id\":\"list\",\"registryKey\":\"praxis-dynamic-page:list\",\"variantId\":\"list\",\"label\":\"Lista\",\"description\":\"Cria uma página com lista de registros.\",\"useWhen\":\"Create a dynamic page with a single list.\"},{\"id\":\"master-detail\",\"registryKey\":\"praxis-dynamic-page:master-detail\",\"variantId\":\"master-detail\",\"label\":\"Master-detail (tabela + formulário)\",\"description\":\"Cria página com tabela, formulário e contexto editorial governado com rich-content.\",\"useWhen\":\"Create a master-detail page with table, form and governed editorial action surfaces.\"},{\"id\":\"master-detail-address\",\"registryKey\":\"praxis-dynamic-page:master-detail-address\",\"variantId\":\"master-detail-address\",\"label\":\"Master-detail + endereços\",\"description\":\"Cria master-detail com lista de endereços e formulário de detalhes.\",\"useWhen\":\"Create a master-detail page with address list + detail form.\"},{\"id\":\"tabs\",\"registryKey\":\"praxis-dynamic-page:tabs\",\"variantId\":\"tabs\",\"label\":\"Tabs (lista + detalhes)\",\"description\":\"Cria uma página com abas e conteúdo interno.\",\"useWhen\":\"Create a dynamic page with tabs.\"},{\"id\":\"stepper\",\"registryKey\":\"praxis-dynamic-page:stepper\",\"variantId\":\"stepper\",\"label\":\"Stepper (wizard)\",\"description\":\"Cria uma página com fluxo em etapas.\",\"useWhen\":\"Create a dynamic page with a stepper wizard.\"},{\"id\":\"nested-path-showcase\",\"registryKey\":\"praxis-dynamic-page:nested-path-showcase\",\"variantId\":\"nested-path-showcase\",\"label\":\"NestedPath showcase\",\"description\":\"Cria uma página com tabela, lista, formulário, expansion, chart, stepper e editorial forms conectados por nestedPath.\",\"useWhen\":\"Create a dynamic page focused on canonical nested component ports.\"},{\"id\":\"crud\",\"registryKey\":\"praxis-dynamic-page:crud\",\"variantId\":\"crud\",\"label\":\"CRUD\",\"description\":\"Cria uma página com widget CRUD completo.\",\"useWhen\":\"Create a dynamic page with a CRUD widget.\"}],\"useWhen\":\"Create a dynamic page layout, including governed editorial action surfaces when the page needs hosted rich-content context or domain workbenches such as approval decisions, approval reviews, approval audits, approval SLA triage workbenches, approval delegation exception workbenches, HR employee insights, HR performance reviews, HR compensation reviews, HR promotion reviews, HR offboarding reviews, HR succession planning workbenches, HR leave and absence tracking workbenches, HR internal mobility workbenches, onboarding journeys, onboarding readiness operations, onboarding manager follow-up workbenches, onboarding equipment/access recovery workbenches and onboarding day-30 coaching workbenches.\",\"examplePrompts\":[\"crie uma pagina com tabela e formulario conectados\",\"pagina master detail com tabela de funcionarios e formulario\",\"crie uma pagina dinamica com widgets conectados\",\"master-detail com enderecos\",\"pagina master-detail com rich-content e actionCard governado\",\"workbench de aprovacao com rich-content governado\",\"workbench de revisao de aprovacao com rich-content governado\",\"workbench de auditoria de aprovacao com rich-content governado\",\"workbench de triagem de sla de approval com rich-content governado\",\"workbench de excecao e delegacao de aprovacao com rich-content governado\",\"workbench de rh com rich-content governado\",\"workbench de performance review de rh com rich-content governado\",\"workbench de compensation review de rh com rich-content governado\",\"workbench de promotion review de rh com rich-content governado\",\"workbench de offboarding de rh com rich-content governado\",\"workbench de succession planning de rh com rich-content governado\",\"workbench de leave tracking de rh com rich-content governado\",\"workbench de mobilidade interna de rh com rich-content governado\",\"workbench de onboarding com rich-content governado\",\"workbench de readiness de onboarding com rich-content governado\",\"workbench de follow-up gerencial de onboarding com rich-content governado\",\"workbench de recuperacao de acessos e equipamentos de onboarding com rich-content governado\",\"workbench de coaching day-30 de onboarding com rich-content governado\"]},\"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\"}}}]}}",
3571
+ "content": "{\"_comment\":\"Template base para Praxis Dynamic Page (praxis-dynamic-page) com variantes.\",\"_comment2\":\"resourcePath deve ser o path base do recurso (sem /filter).\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"base\",\"defaultVariantId\":\"base\",\"variants\":[{\"id\":\"base\",\"registryKey\":\"praxis-dynamic-page:base\",\"variantId\":\"base\",\"label\":\"Base (widget único)\",\"description\":\"Cria uma página com um único widget simples.\",\"useWhen\":\"Create a dynamic page with a single widget.\"},{\"id\":\"table\",\"registryKey\":\"praxis-dynamic-page:table\",\"variantId\":\"table\",\"label\":\"Tabela\",\"description\":\"Cria uma página com uma tabela simples.\",\"useWhen\":\"Create a dynamic page with a single table.\"},{\"id\":\"form\",\"registryKey\":\"praxis-dynamic-page:form\",\"variantId\":\"form\",\"label\":\"Formulário\",\"description\":\"Cria uma página com formulário de detalhes.\",\"useWhen\":\"Create a dynamic page with a single form.\"},{\"id\":\"visual-block-presets-form\",\"registryKey\":\"praxis-dynamic-page:visual-block-presets-form\",\"variantId\":\"visual-block-presets-form\",\"label\":\"Formulário com blocos visuais\",\"description\":\"Cria uma página com praxis-dynamic-form usando FormColumn.items para misturar campos da API e blocos visuais estáticos.\",\"useWhen\":\"Create a dynamic page form that interleaves API fields with static visual blocks authored from visual block presets.\"},{\"id\":\"list\",\"registryKey\":\"praxis-dynamic-page:list\",\"variantId\":\"list\",\"label\":\"Lista\",\"description\":\"Cria uma página com lista de registros.\",\"useWhen\":\"Create a dynamic page with a single list.\"},{\"id\":\"master-detail\",\"registryKey\":\"praxis-dynamic-page:master-detail\",\"variantId\":\"master-detail\",\"label\":\"Master-detail (tabela + formulário)\",\"description\":\"Cria página com tabela, formulário e contexto editorial governado com rich-content.\",\"useWhen\":\"Create a master-detail page with table, form and governed editorial action surfaces.\"},{\"id\":\"master-detail-address\",\"registryKey\":\"praxis-dynamic-page:master-detail-address\",\"variantId\":\"master-detail-address\",\"label\":\"Master-detail + endereços\",\"description\":\"Cria master-detail com lista de endereços e formulário de detalhes.\",\"useWhen\":\"Create a master-detail page with address list + detail form.\"},{\"id\":\"tabs\",\"registryKey\":\"praxis-dynamic-page:tabs\",\"variantId\":\"tabs\",\"label\":\"Tabs (lista + detalhes)\",\"description\":\"Cria uma página com abas e conteúdo interno.\",\"useWhen\":\"Create a dynamic page with tabs.\"},{\"id\":\"stepper\",\"registryKey\":\"praxis-dynamic-page:stepper\",\"variantId\":\"stepper\",\"label\":\"Stepper (wizard)\",\"description\":\"Cria uma página com fluxo em etapas.\",\"useWhen\":\"Create a dynamic page with a stepper wizard.\"},{\"id\":\"nested-path-showcase\",\"registryKey\":\"praxis-dynamic-page:nested-path-showcase\",\"variantId\":\"nested-path-showcase\",\"label\":\"NestedPath showcase\",\"description\":\"Cria uma página com tabela, lista, formulário, expansion, chart, stepper e editorial forms conectados por nestedPath.\",\"useWhen\":\"Create a dynamic page focused on canonical nested component ports.\"},{\"id\":\"crud\",\"registryKey\":\"praxis-dynamic-page:crud\",\"variantId\":\"crud\",\"label\":\"CRUD\",\"description\":\"Cria uma página com widget CRUD completo.\",\"useWhen\":\"Create a dynamic page with a CRUD widget.\"},{\"id\":\"employee-operations-casework\",\"registryKey\":\"praxis-dynamic-page:employee-operations-casework\",\"variantId\":\"employee-operations-casework\",\"label\":\"Employee operations casework\",\"description\":\"Cria um workspace enterprise de RH com CRUD rico, actions governadas, drawers e recursos relacionados em abas.\",\"useWhen\":\"Create a complex enterprise HR workbench with governed employee actions and related-resource tabs.\"}],\"useWhen\":\"Create a dynamic page layout, including governed editorial action surfaces when the page needs hosted rich-content context or domain workbenches such as approval decisions, approval reviews, approval audits, approval SLA triage workbenches, approval delegation exception workbenches, HR employee insights, HR performance reviews, HR compensation reviews, HR promotion reviews, HR offboarding reviews, HR succession planning workbenches, HR leave and absence tracking workbenches, HR internal mobility workbenches, onboarding journeys, onboarding readiness operations, onboarding manager follow-up workbenches, onboarding equipment/access recovery workbenches and onboarding day-30 coaching workbenches.\",\"examplePrompts\":[\"crie uma pagina com tabela e formulario conectados\",\"pagina master detail com tabela de funcionarios e formulario\",\"crie uma pagina dinamica com widgets conectados\",\"master-detail com enderecos\",\"pagina master-detail com rich-content e actionCard governado\",\"workbench de aprovacao com rich-content governado\",\"workbench de revisao de aprovacao com rich-content governado\",\"workbench de auditoria de aprovacao com rich-content governado\",\"workbench de triagem de sla de approval com rich-content governado\",\"workbench de excecao e delegacao de aprovacao com rich-content governado\",\"workbench de rh com rich-content governado\",\"workbench de performance review de rh com rich-content governado\",\"workbench de compensation review de rh com rich-content governado\",\"workbench de promotion review de rh com rich-content governado\",\"workbench de offboarding de rh com rich-content governado\",\"workbench de succession planning de rh com rich-content governado\",\"workbench de leave tracking de rh com rich-content governado\",\"workbench de mobilidade interna de rh com rich-content governado\",\"workbench de onboarding com rich-content governado\",\"workbench de readiness de onboarding com rich-content governado\",\"workbench de follow-up gerencial de onboarding com rich-content governado\",\"workbench de recuperacao de acessos e equipamentos de onboarding com rich-content governado\",\"workbench de coaching day-30 de onboarding com rich-content governado\"]},\"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\"}}}]}}",
3392
3572
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.json",
3393
- "contentHash": "6b01a082b11f668d80e476460f5a1520cd21a831f435b589f55fa6f79626eb66",
3573
+ "contentHash": "4f4450df4e3f9f59f8a9bd0189ecab563de19bbd1fb04dabee9c9c3eb389328a",
3394
3574
  "sourceKind": "component_definition",
3395
3575
  "sourceId": "praxis-dynamic-page",
3396
3576
  "corpusVersion": "1.0.0"
3397
3577
  },
3398
3578
  {
3399
- "chunkIndex": 49,
3579
+ "chunkIndex": 67,
3400
3580
  "chunkKind": "recipe",
3401
3581
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment\",\"_comment\":\"Recipe para agentes criarem uma Praxis Dynamic Page com formulario de lifecycle usando regras, validacao reativa e actions.\"}",
3402
3582
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
@@ -3406,7 +3586,7 @@
3406
3586
  "corpusVersion": "1.0.0"
3407
3587
  },
3408
3588
  {
3409
- "chunkIndex": 50,
3589
+ "chunkIndex": 68,
3410
3590
  "chunkKind": "recipe",
3411
3591
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment2\",\"_comment2\":\"Use quando a meta for mostrar conditionalDisplay, conditionalRequired, formRules e workflow fields em praxis-dynamic-form.\"}",
3412
3592
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
@@ -3416,7 +3596,7 @@
3416
3596
  "corpusVersion": "1.0.0"
3417
3597
  },
3418
3598
  {
3419
- "chunkIndex": 51,
3599
+ "chunkIndex": 69,
3420
3600
  "chunkKind": "recipe",
3421
3601
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"lifecycle-form\",\"status\":\"public-example\",\"useWhen\":\"Create a metadata-driven edit form with lifecycle rules and host-owned workflow fields.\",\"examplePrompts\":[\"crie um formulario com regras condicionais para funcionario\",\"mostre conditionalDisplay e conditionalRequired no dynamic form\",\"gere uma pagina de lifecycle com validacao reativa e actions\"]}}",
3422
3602
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
@@ -3426,7 +3606,7 @@
3426
3606
  "corpusVersion": "1.0.0"
3427
3607
  },
3428
3608
  {
3429
- "chunkIndex": 52,
3609
+ "chunkIndex": 70,
3430
3610
  "chunkKind": "recipe",
3431
3611
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"platformValue\",\"platformValue\":{\"canonicalContract\":\"praxis-metadata-starter publishes the funcionario resource contract; host workflow fields remain explicit UI state.\",\"referenceApi\":\"praxis-api-quickstart serves funcionario detail data, options and capabilities.\",\"angularRuntime\":\"@praxisui/dynamic-form applies sections, fieldMetadata, conditional rules, validation and action placement.\",\"publicExamples\":\"praxis-ui-landing-page exposes this envelope, runtime preview and feature coverage.\",\"agentCorpus\":\"This recipe teaches LLMs how to add lifecycle logic without redefining backend resource semantics.\"}}",
3432
3612
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
@@ -3436,7 +3616,7 @@
3436
3616
  "corpusVersion": "1.0.0"
3437
3617
  },
3438
3618
  {
3439
- "chunkIndex": 53,
3619
+ "chunkIndex": 71,
3440
3620
  "chunkKind": "recipe",
3441
3621
  "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\"]}}",
3442
3622
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
@@ -3446,7 +3626,7 @@
3446
3626
  "corpusVersion": "1.0.0"
3447
3627
  },
3448
3628
  {
3449
- "chunkIndex": 54,
3629
+ "chunkIndex": 72,
3450
3630
  "chunkKind": "recipe",
3451
3631
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringGuidance\",\"authoringGuidance\":[\"Keep persisted resource fields aligned to the published response schema.\",\"Use host-owned workflow fields for lifecycle decisions that are not part of the canonical resource DTO.\",\"Use conditionalDisplay and conditionalRequired for field-level rules.\",\"Use formRules for section, row, column, action or field property patches driven by form state.\",\"Use behavior.reactiveValidation or inputs.reactiveValidation when rules should re-evaluate during editing.\",\"Use asyncSelect with canonical option endpoints for assignment changes.\"]}",
3452
3632
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
@@ -3456,7 +3636,7 @@
3456
3636
  "corpusVersion": "1.0.0"
3457
3637
  },
3458
3638
  {
3459
- "chunkIndex": 55,
3639
+ "chunkIndex": 73,
3460
3640
  "chunkKind": "recipe",
3461
3641
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"teaches\",\"teaches\":[\"dynamic-form.conditionalDisplay\",\"dynamic-form.conditionalRequired\",\"dynamic-form.formRules\",\"dynamic-form.reactiveValidation\",\"dynamic-form.actions.custom\",\"dynamic-fields.asyncSelect\",\"dynamic-fields.currency\",\"remote-options\",\"host-workflow-fields\"]}",
3462
3642
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
@@ -3466,7 +3646,7 @@
3466
3646
  "corpusVersion": "1.0.0"
3467
3647
  },
3468
3648
  {
3469
- "chunkIndex": 56,
3649
+ "chunkIndex": 74,
3470
3650
  "chunkKind": "recipe",
3471
3651
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"funcionarioLifecycleForm\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"rule\",\"title\":\"Funcionario lifecycle\",\"subtitle\":\"Rules, validations and workflow-only fields\"},\"definition\":{\"id\":\"praxis-dynamic-form\",\"bindingOrder\":[\"config\",\"resourcePath\",\"formId\",\"resourceId\",\"initialValue\"],\"inputs\":{\"formId\":\"human-resources-funcionarios-lifecycle\",\"resourcePath\":\"human-resources/funcionarios\",\"resourceId\":1,\"mode\":\"edit\",\"reactiveValidation\":true,\"reactiveValidationDebounceMs\":200,\"initialValue\":{\"lifecycleAction\":\"UPDATE_ASSIGNMENT\",\"keepPayrollActive\":true},\"config\":{\"metadata\":{\"name\":\"Funcionario lifecycle workflow\",\"version\":\"1.0.0\"},\"behavior\":{\"reactiveValidation\":true,\"reactiveValidationDebounceMs\":200},\"sections\":[{\"id\":\"current-state\",\"title\":\"Current state\",\"description\":\"Read the current employee data before choosing a lifecycle path.\",\"appearance\":\"outlined\",\"rows\":[{\"id\":\"current-state-row\",\"columns\":[{\"id\":\"current-identity\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"nomeCompleto\",\"email\",\"ativo\"]},{\"id\":\"current-assignment\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"cargoId\",\"departamentoId\",\"salario\"]}]}]},{\"id\":\"workflow-decision\",\"title\":\"Lifecycle decision\",\"description\":\"Host-owned workflow fields drive conditional display and validation.\",\"appearance\":\"outlined\",\"rows\":[{\"id\":\"decision-row-1\",\"columns\":[{\"id\":\"decision-main\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"lifecycleAction\",\"effectiveDate\"]},{\"id\":\"decision-flags\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"keepPayrollActive\",\"requiresManagerApproval\"]}]}]},{\"id\":\"assignment-change\",\"title\":\"Assignment change\",\"description\":\"Only required when the selected lifecycle path changes assignment.\",\"appearance\":\"outlined\",\"rows\":[{\"id\":\"assignment-change-row\",\"columns\":[{\"id\":\"assignment-change-main\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"newCargoId\",\"newDepartamentoId\"]},{\"id\":\"assignment-change-payroll\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"newSalary\",\"assignmentReason\"]}]}]},{\"id\":\"deactivation\",\"title\":\"Deactivation\",\"description\":\"Visible only for deactivation requests.\",\"appearance\":\"outlined\",\"rows\":[{\"id\":\"deactivation-row\",\"columns\":[{\"id\":\"deactivation-main\",\"fields\":[\"deactivationReason\",\"deactivationNotes\"]}]}]}],\"fieldMetadata\":[{\"name\":\"nomeCompleto\",\"label\":\"Nome Completo\",\"controlType\":\"input\",\"readonly\":true,\"validators\":{\"required\":true,\"maxLength\":160}},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"readonly\":true,\"validators\":{\"email\":true}},{\"name\":\"ativo\",\"label\":\"Ativo\",\"controlType\":\"toggle\",\"readonly\":true},{\"name\":\"cargoId\",\"label\":\"Cargo atual\",\"controlType\":\"asyncSelect\",\"endpoint\":\"/api/human-resources/cargos/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"readonly\":true},{\"name\":\"departamentoId\",\"label\":\"Departamento atual\",\"controlType\":\"asyncSelect\",\"endpoint\":\"/api/human-resources/departamentos/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"readonly\":true},{\"name\":\"salario\",\"label\":\"Salario atual\",\"controlType\":\"currency\",\"currencyCode\":\"BRL\",\"locale\":\"pt-BR\",\"readonly\":true},{\"name\":\"lifecycleAction\",\"label\":\"Lifecycle action\",\"controlType\":\"select\",\"validators\":{\"required\":true},\"options\":[{\"label\":\"Update assignment\",\"value\":\"UPDATE_ASSIGNMENT\"},{\"label\":\"Promote\",\"value\":\"PROMOTE\"},{\"label\":\"Deactivate\",\"value\":\"DEACTIVATE\"}]},{\"name\":\"effectiveDate\",\"label\":\"Effective date\",\"controlType\":\"date\",\"validators\":{\"required\":true}},{\"name\":\"keepPayrollActive\",\"label\":\"Keep payroll active\",\"controlType\":\"toggle\",\"conditionalDisplay\":{\"!=\":[{\"var\":\"lifecycleAction\"},\"DEACTIVATE\"]}},{\"name\":\"requiresManagerApproval\",\"label\":\"Requires manager approval\",\"controlType\":\"checkbox\",\"conditionalDisplay\":{\"or\":[{\"==\":[{\"var\":\"lifecycleAction\"},\"PROMOTE\"]},{\"==\":[{\"var\":\"lifecycleAction\"},\"DEACTIVATE\"]}]},\"conditionalRequired\":{\"or\":[{\"==\":[{\"var\":\"lifecycleAction\"},\"PROMOTE\"]},{\"==\":[{\"var\":\"lifecycleAction\"},\"DEACTIVATE\"]}]}},{\"name\":\"newCargoId\",\"label\":\"New cargo\",\"controlType\":\"asyncSelect\",\"endpoint\":\"/api/human-resources/cargos/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"conditionalDisplay\":{\"or\":[{\"==\":[{\"var\":\"lifecycleAction\"},\"UPDATE_ASSIGNMENT\"]},{\"==\":[{\"var\":\"lifecycleAction\"},\"PROMOTE\"]}]},\"conditionalRequired\":{\"or\":[{\"==\":[{\"var\":\"lifecycleAction\"},\"UPDATE_ASSIGNMENT\"]},{\"==\":[{\"var\":\"lifecycleAction\"},\"PROMOTE\"]}]}},{\"name\":\"newDepartamentoId\",\"label\":\"New departamento\",\"controlType\":\"asyncSelect\",\"endpoint\":\"/api/human-resources/departamentos/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"conditionalDisplay\":{\"or\":[{\"==\":[{\"var\":\"lifecycleAction\"},\"UPDATE_ASSIGNMENT\"]},{\"==\":[{\"var\":\"lifecycleAction\"},\"PROMOTE\"]}]},\"conditionalRequired\":{\"==\":[{\"var\":\"lifecycleAction\"},\"UPDATE_ASSIGNMENT\"]}},{\"name\":\"newSalary\",\"label\":\"New salary\",\"controlType\":\"currency\",\"currencyCode\":\"BRL\",\"locale\":\"pt-BR\",\"validators\":{\"min\":0},\"conditionalDisplay\":{\"==\":[{\"var\":\"lifecycleAction\"},\"PROMOTE\"]},\"conditionalRequired\":{\"==\":[{\"var\":\"lifecycleAction\"},\"PROMOTE\"]}},{\"name\":\"assignmentReason\",\"label\":\"Assignment reason\",\"controlType\":\"textarea\",\"rows\":3,\"validators\":{\"minLength\":12,\"maxLength\":500},\"conditionalDisplay\":{\"or\":[{\"==\":[{\"var\":\"lifecycleAction\"},\"UPDATE_ASSIGNMENT\"]},{\"==\":[{\"var\":\"lifecycleAction\"},\"PROMOTE\"]}]},\"conditionalRequired\":{\"or\":[{\"==\":[{\"var\":\"lifecycleAction\"},\"UPDATE_ASSIGNMENT\"]},{\"==\":[{\"var\":\"lifecycleAction\"},\"PROMOTE\"]}]}},{\"name\":\"deactivationReason\",\"label\":\"Deactivation reason\",\"controlType\":\"select\",\"options\":[{\"label\":\"Contract ended\",\"value\":\"CONTRACT_ENDED\"},{\"label\":\"Transferred\",\"value\":\"TRANSFERRED\"},{\"label\":\"Security hold\",\"value\":\"SECURITY_HOLD\"}],\"conditionalDisplay\":{\"==\":[{\"var\":\"lifecycleAction\"},\"DEACTIVATE\"]},\"conditionalRequired\":{\"==\":[{\"var\":\"lifecycleAction\"},\"DEACTIVATE\"]}},{\"name\":\"deactivationNotes\",\"label\":\"Deactivation notes\",\"controlType\":\"textarea\",\"rows\":4,\"validators\":{\"minLength\":20,\"maxLength\":800},\"conditionalDisplay\":{\"==\":[{\"var\":\"lifecycleAction\"},\"DEACTIVATE\"]},\"conditionalRequired\":{\"==\":[{\"var\":\"lifecycleAction\"},\"DEACTIVATE\"]}}],\"formRules\":[{\"id\":\"deactivation-hides-assignment-change\",\"name\":\"Deactivation hides assignment change section\",\"targetType\":\"section\",\"targetId\":\"assignment-change\",\"condition\":{\"==\":[{\"var\":\"lifecycleAction\"},\"DEACTIVATE\"]},\"effect\":{\"propertiesWhenTrue\":{\"visible\":false},\"propertiesWhenFalse\":{\"visible\":true}}},{\"id\":\"assignment-path-hides-deactivation-section\",\"name\":\"Assignment paths hide deactivation section\",\"targetType\":\"section\",\"targetId\":\"deactivation\",\"condition\":{\"==\":[{\"var\":\"lifecycleAction\"},\"DEACTIVATE\"]},\"effect\":{\"propertiesWhenTrue\":{\"visible\":true},\"propertiesWhenFalse\":{\"visible\":false}}}],\"actions\":{\"submit\":{\"id\":\"submit-lifecycle-request\",\"label\":\"Submit request\",\"icon\":\"send\",\"color\":\"primary\",\"visible\":true,\"type\":\"submit\"},\"cancel\":{\"id\":\"cancel-lifecycle\",\"label\":\"Cancel\",\"icon\":\"close\",\"visible\":true,\"type\":\"button\"},\"reset\":{\"id\":\"reset-lifecycle\",\"label\":\"Reset workflow\",\"visible\":true,\"type\":\"reset\"},\"custom\":[{\"id\":\"preview-policy\",\"label\":\"Preview policy\",\"icon\":\"policy\",\"visible\":true,\"action\":\"previewPolicy\"}],\"position\":\"right\",\"placement\":\"afterSections\",\"spacing\":\"normal\"}}}}}]}}",
3472
3652
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
@@ -3476,7 +3656,7 @@
3476
3656
  "corpusVersion": "1.0.0"
3477
3657
  },
3478
3658
  {
3479
- "chunkIndex": 57,
3659
+ "chunkIndex": 75,
3480
3660
  "chunkKind": "recipe",
3481
3661
  "content": "{\"_comment\":\"Template de pagina com lista unica (Praxis Dynamic Page).\",\"_comment2\":\"resourcePath deve ser o path base do recurso (sem /filter).\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"list\",\"useWhen\":\"Create a dynamic page with a single list widget.\",\"examplePrompts\":[\"pagina com lista\",\"crie uma lista simples\",\"lista de registros\"]},\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":2,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"mainList\",\"definition\":{\"id\":\"praxis-list\",\"inputs\":{\"listId\":\"{{resourceKey}}-list\",\"config\":{\"dataSource\":{\"resourcePath\":\"{{resourcePath}}\"},\"layout\":{\"variant\":\"list\",\"lines\":2,\"dividers\":\"between\",\"pageSize\":10}}},\"outputs\":{\"itemClick\":\"emit\",\"selectionChange\":\"emit\"}}}]}}",
3482
3662
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.list.json",
@@ -3486,7 +3666,7 @@
3486
3666
  "corpusVersion": "1.0.0"
3487
3667
  },
3488
3668
  {
3489
- "chunkIndex": 58,
3669
+ "chunkIndex": 76,
3490
3670
  "chunkKind": "recipe",
3491
3671
  "content": "{\"_comment\":\"Template master-detail com lista de enderecos e formulario de detalhe.\",\"_comment2\":\"resourcePath deve ser o path base do recurso (sem /filter).\",\"_comment3\":\"A lista de enderecos usa dataSource.query para filtrar pelo campo de relacao.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"master-detail-address\",\"label\":\"Master-detail + enderecos (lista + formulario)\",\"description\":\"Cria tabela e formulario do recurso principal e adiciona lista+form de enderecos relacionados.\",\"useWhen\":\"Create a master-detail page with address list + address detail form.\",\"examplePrompts\":[\"master-detail com lista de enderecos\",\"tabela funcionarios com detalhes e enderecos\",\"master detail + enderecos\"]},\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":2,\"gap\":\"16px\"},\"widgets\":[{\"_comment\":\"Tabela principal (master). Colunas sao geradas dinamicamente.\",\"key\":\"masterTable\",\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\"],\"inputs\":{\"resourcePath\":\"{{resourcePath}}\",\"tableId\":\"{{resourceKey}}-master\",\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"{{resourceLabel}}\"},\"behavior\":{\"selection\":{\"enabled\":true,\"type\":\"single\"}}}},\"outputs\":{\"rowClick\":\"emit\"}}},{\"_comment\":\"Formulario de detalhes do recurso principal.\",\"key\":\"detailForm\",\"definition\":{\"id\":\"praxis-dynamic-form\",\"bindingOrder\":[\"resourcePath\",\"formId\",\"resourceId\"],\"inputs\":{\"formId\":\"{{resourceKey}}-detail-view\",\"resourcePath\":\"{{resourcePath}}\",\"mode\":\"view\"}}},{\"_comment\":\"Lista de enderecos em cards. O filtro sera preenchido pela relacao.\",\"key\":\"addressList\",\"definition\":{\"id\":\"praxis-list\",\"inputs\":{\"listId\":\"{{resourceKey}}-address-list\",\"config\":{\"dataSource\":{\"resourcePath\":\"{{addressResourcePath}}\",\"query\":{}},\"layout\":{\"variant\":\"cards\",\"lines\":2,\"dividers\":\"between\",\"pageSize\":6},\"selection\":{\"mode\":\"single\",\"return\":\"id\",\"compareBy\":\"id\"}}},\"outputs\":{\"selectionChange\":\"emit\",\"itemClick\":\"emit\"}}},{\"_comment\":\"Formulario de detalhes do endereco selecionado.\",\"key\":\"addressForm\",\"definition\":{\"id\":\"praxis-dynamic-form\",\"bindingOrder\":[\"resourcePath\",\"formId\",\"resourceId\"],\"inputs\":{\"formId\":\"{{resourceKey}}-address-detail\",\"resourcePath\":\"{{addressResourcePath}}\",\"mode\":\"view\"}}}],\"connections\":[{\"_comment\":\"Seleciona registro principal no formulario.\",\"from\":{\"widget\":\"masterTable\",\"output\":\"rowClick\"},\"to\":{\"widget\":\"detailForm\",\"input\":\"resourceId\"},\"map\":\"payload.row.{{idField}}\"},{\"_comment\":\"Filtra a lista de enderecos pelo campo de relacao.\",\"from\":{\"widget\":\"masterTable\",\"output\":\"rowClick\"},\"to\":{\"widget\":\"addressList\",\"input\":\"inputs.config.dataSource.query\"},\"map\":\"{\\\"{{relationField}}\\\":\\\"${payload.row.{{idField}}}\\\"}\"},{\"_comment\":\"Quando selecionar um endereco, abre detalhes no formulario.\",\"from\":{\"widget\":\"addressList\",\"output\":\"selectionChange\"},\"to\":{\"widget\":\"addressForm\",\"input\":\"resourceId\"},\"map\":\"payload.value\"}]}}",
3492
3672
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.master-detail-address.json",
@@ -3496,7 +3676,7 @@
3496
3676
  "corpusVersion": "1.0.0"
3497
3677
  },
3498
3678
  {
3499
- "chunkIndex": 59,
3679
+ "chunkIndex": 77,
3500
3680
  "chunkKind": "recipe",
3501
3681
  "content": "{\"_comment\":\"Template master-detail para Praxis Dynamic Page.\",\"_comment2\":\"resourcePath deve ser o path base do recurso (sem /filter).\",\"_comment3\":\"Tabela e formulario podem gerar campos dinamicamente via resourcePath (nao defina columns/sections se nao precisar).\",\"_comment4\":\"Rich content hospedado pela pagina pode expor contexto editorial e actions mediadas por host, mas hostCapabilities nunca deve ser serializado no JSON persistido.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"master-detail\",\"useWhen\":\"Create a master-detail page with table, detail form and hosted editorial guidance.\",\"examplePrompts\":[\"pagina master detail de funcionarios\",\"criar tabela + formulario com detalhes\",\"conectar tabela ao formulario de detalhes\",\"adicionar contexto editorial governado por rich content em uma pagina master-detail\"]},\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":3,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"masterTable\",\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\"],\"inputs\":{\"resourcePath\":\"{{resourcePath}}\",\"tableId\":\"{{resourceKey}}-master\",\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"{{resourceLabel}}\"},\"behavior\":{\"selection\":{\"enabled\":true,\"type\":\"single\"}}}},\"outputs\":{\"rowClick\":\"emit\"}}},{\"key\":\"detailForm\",\"definition\":{\"id\":\"praxis-dynamic-form\",\"bindingOrder\":[\"resourcePath\",\"formId\",\"resourceId\",\"config\"],\"inputs\":{\"formId\":\"{{resourceKey}}-detail-view\",\"resourcePath\":\"{{resourcePath}}\",\"mode\":\"view\",\"config\":{\"formBlocksBefore\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"callout\",\"tone\":\"info\",\"icon\":\"rule\",\"title\":\"Formulario metadata-driven\",\"message\":\"Use blocos rich-content para contexto, politicas e operacoes auxiliares. O payload persistido continua sendo o do formulario.\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Abrir detalhes\",\"icon\":\"open_in_new\",\"variant\":\"stroked\",\"color\":\"primary\",\"action\":{\"actionId\":\"openDetails\",\"payload\":{\"source\":\"dynamic-page-master-detail\",\"widgetKey\":\"detailForm\"}}}]},{\"type\":\"disclosure\",\"title\":\"Bloco dependente de capability de edicao\",\"subtitle\":\"O host do dynamic form decide se este conteudo aparece\",\"appearance\":\"card\",\"requiresCapabilities\":[\"form.mode.edit\"],\"content\":[{\"type\":\"keyValueList\",\"layout\":\"stacked\",\"items\":[{\"label\":\"Capability gate\",\"value\":\"form.mode.edit\"},{\"label\":\"Regra de persistencia\",\"value\":\"Nao serializar hostCapabilities no config do formulario\"}]}]}]}}},\"outputs\":{\"customAction\":\"emit\"}}},{\"key\":\"detailGuide\",\"definition\":{\"id\":\"praxis-rich-content\",\"bindingOrder\":[\"document\",\"context\"],\"inputs\":{\"context\":{\"workspace\":{\"resourceLabel\":\"{{resourceLabel}}\",\"selectionFlow\":\"rowClick -> resourceId\",\"runtimeRule\":\"hostCapabilities sao apenas runtime do host\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"recordSummary\",\"title\":\"Master-detail governed by configuration\",\"subtitleExpr\":\"${workspace.resourceLabel}\",\"meta\":\"praxis-dynamic-page\",\"fields\":[{\"label\":\"Selection flow\",\"valueExpr\":\"${workspace.selectionFlow}\"},{\"label\":\"Runtime note\",\"valueExpr\":\"${workspace.runtimeRule}\"}]},{\"type\":\"statGroup\",\"title\":\"Workspace signals\",\"subtitle\":\"Portable summary blocks alongside the master-detail flow\",\"layout\":\"inline\",\"items\":[{\"label\":\"Selection flow\",\"value\":\"1\",\"captionExpr\":\"${workspace.selectionFlow}\",\"icon\":\"swap_horiz\"},{\"label\":\"Runtime contract\",\"value\":\"host\",\"captionExpr\":\"${workspace.runtimeRule}\",\"icon\":\"verified_user\"}]},{\"type\":\"tabs\",\"title\":\"Workspace views\",\"subtitle\":\"Canonical editorial tabs hosted alongside the table and detail form.\",\"appearance\":\"pills\",\"defaultTabId\":\"overview\",\"items\":[{\"id\":\"overview\",\"label\":\"Overview\",\"icon\":\"dashboard\",\"content\":[{\"type\":\"text\",\"text\":\"Use tabs when the same portable rich-content document needs multiple editorial panels near the master-detail flow.\"}]},{\"id\":\"runtime\",\"label\":\"Runtime\",\"icon\":\"verified_user\",\"badge\":\"Host\",\"content\":[{\"type\":\"keyValueList\",\"layout\":\"stacked\",\"items\":[{\"label\":\"Selection flow\",\"valueExpr\":\"${workspace.selectionFlow}\"},{\"label\":\"Runtime rule\",\"valueExpr\":\"${workspace.runtimeRule}\"},{\"label\":\"Persistence rule\",\"value\":\"hostCapabilities stay outside persisted page JSON.\"}]}]}]},{\"type\":\"ctaGroup\",\"title\":\"Next steps\",\"subtitle\":\"Governed actions for the selected record\",\"message\":\"Cluster primary and secondary host-mediated actions without inventing page-specific markup.\",\"layout\":\"split\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Open selected funcionario\",\"icon\":\"open_in_new\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"openDetails\",\"payload\":{\"source\":\"dynamic-page-master-detail\",\"widgetKey\":\"detailGuide\",\"resourceKey\":\"{{resourceKey}}\"}}},{\"type\":\"actionButton\",\"label\":\"Inspecionar workspace\",\"icon\":\"manage_search\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"inspectMasterDetailWorkspace\",\"payload\":{\"resourceKey\":\"{{resourceKey}}\"}}}]},{\"type\":\"emptyState\",\"icon\":\"integration_instructions\",\"title\":\"Use hosted editorial actions for auxiliary flows\",\"message\":\"O widget rich-content pode acionar fluxos governados pelo host sem misturar handlers no documento.\",\"actions\":[{\"type\":\"actionButton\",\"label\":\"Inspecionar workspace\",\"icon\":\"manage_search\",\"variant\":\"flat\",\"action\":{\"actionId\":\"inspectMasterDetailWorkspace\",\"payload\":{\"resourceKey\":\"{{resourceKey}}\"}}}]},{\"type\":\"relatedRecord\",\"title\":\"Selected related record\",\"subtitleExpr\":\"${workspace.resourceLabel}\",\"relationLabel\":\"Current selection\",\"meta\":\"resolved relationship\",\"ctaLabel\":\"Open related funcionario\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"openDetails\",\"payload\":{\"source\":\"dynamic-page-master-detail\",\"widgetKey\":\"detailGuide\",\"resourceKey\":\"{{resourceKey}}\"}},\"fields\":[{\"label\":\"Selection binding\",\"valueExpr\":\"${workspace.selectionFlow}\",\"hint\":\"Resolved from the same selected record context.\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Inspecionar workspace\",\"icon\":\"manage_search\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"inspectMasterDetailWorkspace\",\"payload\":{\"resourceKey\":\"{{resourceKey}}\"}}}]},{\"type\":\"actionCard\",\"title\":\"Open governed funcionario flow\",\"subtitleExpr\":\"${workspace.resourceLabel}\",\"message\":\"Use the same canonical rich-content document to launch a governed host action from the master-detail workspace.\",\"meta\":\"host-mediated action\",\"ctaLabel\":\"Open governed funcionario flow\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"openDetails\",\"payload\":{\"source\":\"dynamic-page-master-detail\",\"widgetKey\":\"detailGuide\",\"resourceKey\":\"{{resourceKey}}\"}},\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Inspecionar workspace\",\"icon\":\"manage_search\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"inspectMasterDetailWorkspace\",\"payload\":{\"resourceKey\":\"{{resourceKey}}\"}}}]}]}}}}],\"connections\":[{\"_comment\":\"Ao clicar na linha, envia o ID para o formulario.\",\"from\":{\"widget\":\"masterTable\",\"output\":\"rowClick\"},\"to\":{\"widget\":\"detailForm\",\"input\":\"resourceId\"},\"map\":\"payload.row.{{idField}}\"}]}}",
3502
3682
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.master-detail.json",
@@ -3506,7 +3686,7 @@
3506
3686
  "corpusVersion": "1.0.0"
3507
3687
  },
3508
3688
  {
3509
- "chunkIndex": 60,
3689
+ "chunkIndex": 78,
3510
3690
  "chunkKind": "recipe",
3511
3691
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment\",\"_comment\":\"Recipe end-to-end para agentes criarem uma Praxis Dynamic Page rica contra o quickstart publicado.\"}",
3512
3692
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
@@ -3516,7 +3696,7 @@
3516
3696
  "corpusVersion": "1.0.0"
3517
3697
  },
3518
3698
  {
3519
- "chunkIndex": 61,
3699
+ "chunkIndex": 79,
3520
3700
  "chunkKind": "recipe",
3521
3701
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment2\",\"_comment2\":\"Use este recipe quando a meta for demonstrar contrato metadata-driven + runtime Angular + API de referencia + superficies publicas.\"}",
3522
3702
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
@@ -3526,7 +3706,7 @@
3526
3706
  "corpusVersion": "1.0.0"
3527
3707
  },
3528
3708
  {
3529
- "chunkIndex": 62,
3709
+ "chunkIndex": 80,
3530
3710
  "chunkKind": "recipe",
3531
3711
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"mission-command-center\",\"status\":\"golden-fixture\",\"useWhen\":\"Create an end-to-end operational page that composes backend metadata, tables, charts, actions, capabilities, and cross-widget state.\",\"examplePrompts\":[\"crie um command center de missoes com tabelas, graficos e actions\",\"monte uma pagina end-to-end usando quickstart, surfaces e capabilities\",\"gere um dashboard operacional metadata-driven para missoes\"]}}",
3532
3712
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
@@ -3536,7 +3716,7 @@
3536
3716
  "corpusVersion": "1.0.0"
3537
3717
  },
3538
3718
  {
3539
- "chunkIndex": 63,
3719
+ "chunkIndex": 81,
3540
3720
  "chunkKind": "recipe",
3541
3721
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"platformValue\",\"platformValue\":{\"canonicalContract\":\"praxis-metadata-starter defines resource, schemas.filtered, surfaces, actions, capabilities, and stats semantics.\",\"referenceApi\":\"praxis-api-quickstart exposes operational mission resources on Render.\",\"referenceRepository\":\"https://github.com/codexrodrigues/praxis-api-quickstart-public\",\"angularRuntime\":\"@praxisui/core resolves praxis-dynamic-page widgets and composes tables/charts without bespoke host code.\",\"publicExamples\":\"praxis-ui-landing-page publishes the JSON envelope and runtime preview.\",\"agentCorpus\":\"praxisui-http-examples provides executable HTTP evidence for LLMs and agents.\"}}",
3542
3722
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
@@ -3546,7 +3726,7 @@
3546
3726
  "corpusVersion": "1.0.0"
3547
3727
  },
3548
3728
  {
3549
- "chunkIndex": 64,
3729
+ "chunkIndex": 82,
3550
3730
  "chunkKind": "recipe",
3551
3731
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"operationalEvidence\",\"operationalEvidence\":{\"baseUrl\":\"https://praxis-api-quickstart.onrender.com\",\"httpExamples\":[\"praxisui-http-examples/http/metadata/schemas_catalog.http\",\"praxisui-http-examples/http/metadata/schemas_surfaces_operations_missoes.http\",\"praxisui-http-examples/http/metadata/schemas_actions_operations_missoes.http\",\"praxisui-http-examples/http/operations/missoes_item_capabilities.http\",\"praxisui-http-examples/http/metadata/filtered_schema_response_funcionarios.http\",\"praxisui-http-examples/http/views/vw_resumo_missoes_filter_basic.http\",\"praxisui-http-examples/http/views/vw_resumo_missoes_stats_status.http\",\"praxisui-http-examples/http/operations/missao_participantes_stats_papel.http\",\"praxisui-http-examples/http/operations/missao_eventos_stats_ocorrido_em_day.http\"],\"safeFirstIds\":[\"schemas-catalog\",\"schemas-surfaces-operations-missoes\",\"schemas-actions-operations-missoes\",\"operations-missoes-item-capabilities\",\"vw-resumo-missoes-filter-basic\",\"vw-resumo-missoes-stats-status\",\"missao-participantes-stats-papel\",\"missao-eventos-stats-ocorrido-em-day\"],\"publishedAnalyticsIds\":[\"vw-resumo-missoes-stats-status\",\"missao-participantes-stats-papel\",\"missao-eventos-stats-ocorrido-em-day\"]}}",
3552
3732
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
@@ -3556,7 +3736,7 @@
3556
3736
  "corpusVersion": "1.0.0"
3557
3737
  },
3558
3738
  {
3559
- "chunkIndex": 65,
3739
+ "chunkIndex": 83,
3560
3740
  "chunkKind": "recipe",
3561
3741
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringGuidance\",\"authoringGuidance\":[\"Start from metadata discovery before inventing columns or filters.\",\"Use resourcePath without /filter in runtime widgets.\",\"Use statsPath only inside chart dataSource.query when the backend advertises stats support.\",\"Expose backend surfaces and action catalogs as discovery toolbar actions.\",\"Executable workflow row actions are allowed in this example because the landing host mediates execution against the published endpoint and shows success, conflict, or protected-command feedback.\",\"Use composition links for cross-filtering and state writes; do not duplicate state in unrelated widgets.\"]}",
3562
3742
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
@@ -3566,17 +3746,17 @@
3566
3746
  "corpusVersion": "1.0.0"
3567
3747
  },
3568
3748
  {
3569
- "chunkIndex": 66,
3749
+ "chunkIndex": 84,
3570
3750
  "chunkKind": "recipe",
3571
- "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":3,\"gap\":\"16px\"},\"state\":{\"values\":{\"selection\":{\"missionId\":1}}},\"widgets\":[{\"key\":\"missionStatusChart\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"bar_chart\",\"title\":\"Mission status mix\",\"subtitle\":\"Remote stats projection from the published quickstart\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"config\"],\"inputs\":{\"config\":{\"id\":\"mission-status-mix\",\"type\":\"horizontal-bar\",\"dataSource\":{\"kind\":\"remote\",\"resourcePath\":\"operations/vw-resumo-missoes\",\"query\":{\"sourceKind\":\"praxis.stats\",\"statsOperation\":\"group-by\",\"statsPath\":\"/api/operations/vw-resumo-missoes/stats/group-by\",\"statsRequest\":{\"filter\":{},\"field\":\"status\",\"metric\":{\"operation\":\"COUNT\",\"alias\":\"missions\"},\"limit\":10,\"orderBy\":\"KEY_ASC\"}}},\"axes\":{\"x\":{\"field\":\"status\",\"type\":\"category\",\"label\":\"Status\"},\"y\":{\"field\":\"missions\",\"type\":\"value\",\"label\":\"Missions\"}},\"series\":[{\"id\":\"missions\",\"name\":\"Missions\",\"metric\":{\"field\":\"missions\",\"aggregation\":\"sum\"}}],\"interactions\":{\"pointClick\":true,\"selection\":true,\"crossFilter\":true,\"eventActions\":{\"selectionChange\":{\"action\":\"emit\",\"mapping\":{\"status\":\"status\"}},\"crossFilter\":{\"action\":\"filter-widget\",\"target\":\"missionSummary\",\"mapping\":{\"status\":\"status\"}}}}}},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"crossFilter\":\"emit\"}}},{\"key\":\"missionSummary\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"radar\",\"title\":\"Mission portfolio\",\"subtitle\":\"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\":\"Mission portfolio\",\"actions\":[{\"id\":\"inspect-surfaces\",\"label\":\"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\":\"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\":\"Mission\",\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"status\",\"header\":\"Status\",\"type\":\"badge\"},{\"field\":\"prioridade\",\"header\":\"Priority\",\"type\":\"badge\"},{\"field\":\"ameaca\",\"header\":\"Threat\",\"type\":\"text\"}],\"behavior\":{\"selection\":{\"enabled\":true,\"type\":\"single\"}}}},\"outputs\":{\"rowClick\":\"emit\",\"toolbarAction\":\"emit\"}}},{\"key\":\"missionWorkflow\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"bolt\",\"title\":\"Workflow actions\",\"subtitle\":\"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\":\"Mission workflow\",\"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\"}}]},\"actions\":{\"row\":{\"enabled\":true,\"display\":\"buttons\",\"width\":\"360px\",\"maxVisibleActions\":3,\"behavior\":{\"maxInline\":3},\"position\":\"end\",\"header\":{\"label\":\"Workflow\",\"icon\":\"bolt\"},\"actions\":[{\"id\":\"start\",\"action\":\"start\",\"label\":\"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\":\"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\":\"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\":\"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\":\"Mission team\",\"subtitle\":\"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\":\"Mission team\"},\"columns\":[{\"field\":\"ordem\",\"header\":\"Order\",\"type\":\"number\"},{\"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\"}}},{\"key\":\"missionTimeline\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"timeline\",\"title\":\"Mission timeline\",\"subtitle\":\"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\":\"Mission timeline\"},\"columns\":[{\"field\":\"ordem\",\"header\":\"Order\",\"type\":\"number\"},{\"field\":\"tipo\",\"header\":\"Type\",\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"descricao\",\"header\":\"Event\",\"type\":\"text\"},{\"field\":\"ocorridoEm\",\"header\":\"Occurred at\",\"type\":\"date-time\"}]}},\"outputs\":{\"rowClick\":\"emit\",\"toolbarAction\":\"emit\"}}}]}}",
3751
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":3,\"gap\":\"16px\"},\"state\":{\"values\":{\"selection\":{\"missionId\":1}}},\"widgets\":[{\"key\":\"missionStatusChart\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"bar_chart\",\"title\":\"Mission status mix\",\"subtitle\":\"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\":\"Status\",\"role\":\"category\"}],\"metrics\":[{\"field\":\"missions\",\"label\":\"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\":\"Mission portfolio\",\"subtitle\":\"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\":\"Mission portfolio\",\"actions\":[{\"id\":\"inspect-surfaces\",\"label\":\"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\":\"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\":\"Mission\",\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"status\",\"header\":\"Status\",\"type\":\"badge\"},{\"field\":\"prioridade\",\"header\":\"Priority\",\"type\":\"badge\"},{\"field\":\"ameaca\",\"header\":\"Threat\",\"type\":\"text\"}],\"behavior\":{\"selection\":{\"enabled\":true,\"type\":\"single\"}}}},\"outputs\":{\"rowClick\":\"emit\",\"toolbarAction\":\"emit\"}}},{\"key\":\"missionWorkflow\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"bolt\",\"title\":\"Workflow actions\",\"subtitle\":\"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\":\"Mission workflow\",\"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\"}}]},\"actions\":{\"row\":{\"enabled\":true,\"display\":\"buttons\",\"width\":\"360px\",\"maxVisibleActions\":3,\"behavior\":{\"maxInline\":3},\"position\":\"end\",\"header\":{\"label\":\"Workflow\",\"icon\":\"bolt\"},\"actions\":[{\"id\":\"start\",\"action\":\"start\",\"label\":\"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\":\"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\":\"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\":\"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\":\"Mission team\",\"subtitle\":\"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\":\"Mission team\"},\"columns\":[{\"field\":\"ordem\",\"header\":\"Order\",\"type\":\"number\"},{\"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\"}}},{\"key\":\"missionTimeline\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"timeline\",\"title\":\"Mission timeline\",\"subtitle\":\"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\":\"Mission timeline\"},\"columns\":[{\"field\":\"ordem\",\"header\":\"Order\",\"type\":\"number\"},{\"field\":\"tipo\",\"header\":\"Type\",\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"descricao\",\"header\":\"Event\",\"type\":\"text\"},{\"field\":\"ocorridoEm\",\"header\":\"Occurred at\",\"type\":\"date-time\"}]}},\"outputs\":{\"rowClick\":\"emit\",\"toolbarAction\":\"emit\"}}}]}}",
3572
3752
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
3573
- "contentHash": "532021d540cc36dcb877b054100431f464a7e5e97e7f5f37833e3ef3b92ba012",
3753
+ "contentHash": "f6cf93bafc88ada4a8e0a7ae0979f40c1e7c0b4555f2c85b9c6b9f8f2b29e606",
3574
3754
  "sourceKind": "component_definition",
3575
3755
  "sourceId": "praxis-dynamic-page",
3576
3756
  "corpusVersion": "1.0.0"
3577
3757
  },
3578
3758
  {
3579
- "chunkIndex": 67,
3759
+ "chunkIndex": 85,
3580
3760
  "chunkKind": "recipe",
3581
3761
  "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}\"}}}}]}}]}}}",
3582
3762
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
@@ -3586,7 +3766,7 @@
3586
3766
  "corpusVersion": "1.0.0"
3587
3767
  },
3588
3768
  {
3589
- "chunkIndex": 68,
3769
+ "chunkIndex": 86,
3590
3770
  "chunkKind": "recipe",
3591
3771
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment\",\"_comment\":\"Golden recipe for nested component ports in Praxis Dynamic Page.\"}",
3592
3772
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
@@ -3596,7 +3776,7 @@
3596
3776
  "corpusVersion": "1.0.0"
3597
3777
  },
3598
3778
  {
3599
- "chunkIndex": 69,
3779
+ "chunkIndex": 87,
3600
3780
  "chunkKind": "recipe",
3601
3781
  "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.\"}",
3602
3782
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
@@ -3606,7 +3786,7 @@
3606
3786
  "corpusVersion": "1.0.0"
3607
3787
  },
3608
3788
  {
3609
- "chunkIndex": 70,
3789
+ "chunkIndex": 88,
3610
3790
  "chunkKind": "recipe",
3611
3791
  "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\"]}}",
3612
3792
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
@@ -3616,7 +3796,7 @@
3616
3796
  "corpusVersion": "1.0.0"
3617
3797
  },
3618
3798
  {
3619
- "chunkIndex": 71,
3799
+ "chunkIndex": 89,
3620
3800
  "chunkKind": "recipe",
3621
3801
  "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.\"}}",
3622
3802
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
@@ -3626,7 +3806,7 @@
3626
3806
  "corpusVersion": "1.0.0"
3627
3807
  },
3628
3808
  {
3629
- "chunkIndex": 72,
3809
+ "chunkIndex": 90,
3630
3810
  "chunkKind": "recipe",
3631
3811
  "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\"]}}",
3632
3812
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
@@ -3636,7 +3816,7 @@
3636
3816
  "corpusVersion": "1.0.0"
3637
3817
  },
3638
3818
  {
3639
- "chunkIndex": 73,
3819
+ "chunkIndex": 91,
3640
3820
  "chunkKind": "recipe",
3641
3821
  "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.\"]}",
3642
3822
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
@@ -3646,7 +3826,7 @@
3646
3826
  "corpusVersion": "1.0.0"
3647
3827
  },
3648
3828
  {
3649
- "chunkIndex": 74,
3829
+ "chunkIndex": 92,
3650
3830
  "chunkKind": "recipe",
3651
3831
  "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\"]}",
3652
3832
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
@@ -3656,7 +3836,7 @@
3656
3836
  "corpusVersion": "1.0.0"
3657
3837
  },
3658
3838
  {
3659
- "chunkIndex": 75,
3839
+ "chunkIndex": 93,
3660
3840
  "chunkKind": "recipe",
3661
3841
  "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\":{\"field\":\"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\"}}}]}}",
3662
3842
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
@@ -3666,7 +3846,7 @@
3666
3846
  "corpusVersion": "1.0.0"
3667
3847
  },
3668
3848
  {
3669
- "chunkIndex": 76,
3849
+ "chunkIndex": 94,
3670
3850
  "chunkKind": "recipe",
3671
3851
  "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}}]}}}",
3672
3852
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
@@ -3676,7 +3856,7 @@
3676
3856
  "corpusVersion": "1.0.0"
3677
3857
  },
3678
3858
  {
3679
- "chunkIndex": 77,
3859
+ "chunkIndex": 95,
3680
3860
  "chunkKind": "recipe",
3681
3861
  "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}\"}}]}]}}}}]}}",
3682
3862
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-day-30-coaching-workbench.json",
@@ -3686,7 +3866,7 @@
3686
3866
  "corpusVersion": "1.0.0"
3687
3867
  },
3688
3868
  {
3689
- "chunkIndex": 78,
3869
+ "chunkIndex": 96,
3690
3870
  "chunkKind": "recipe",
3691
3871
  "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}\"}}]}]}}}}]}}",
3692
3872
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-equipment-access-recovery-workbench.json",
@@ -3696,7 +3876,7 @@
3696
3876
  "corpusVersion": "1.0.0"
3697
3877
  },
3698
3878
  {
3699
- "chunkIndex": 79,
3879
+ "chunkIndex": 97,
3700
3880
  "chunkKind": "recipe",
3701
3881
  "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}\"}}]}]}}}}]}}",
3702
3882
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-journey-workbench.json",
@@ -3706,7 +3886,7 @@
3706
3886
  "corpusVersion": "1.0.0"
3707
3887
  },
3708
3888
  {
3709
- "chunkIndex": 80,
3889
+ "chunkIndex": 98,
3710
3890
  "chunkKind": "recipe",
3711
3891
  "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}\"}}]}]}}}}]}}",
3712
3892
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-manager-follow-up-workbench.json",
@@ -3716,7 +3896,7 @@
3716
3896
  "corpusVersion": "1.0.0"
3717
3897
  },
3718
3898
  {
3719
- "chunkIndex": 81,
3899
+ "chunkIndex": 99,
3720
3900
  "chunkKind": "recipe",
3721
3901
  "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}\"}}]}]}}}}]}}",
3722
3902
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-readiness-workbench.json",
@@ -3726,7 +3906,7 @@
3726
3906
  "corpusVersion": "1.0.0"
3727
3907
  },
3728
3908
  {
3729
- "chunkIndex": 82,
3909
+ "chunkIndex": 100,
3730
3910
  "chunkKind": "recipe",
3731
3911
  "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\"}}}}}]}}",
3732
3912
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.profile-form.json",
@@ -3736,7 +3916,7 @@
3736
3916
  "corpusVersion": "1.0.0"
3737
3917
  },
3738
3918
  {
3739
- "chunkIndex": 83,
3919
+ "chunkIndex": 101,
3740
3920
  "chunkKind": "recipe",
3741
3921
  "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\"}}}]}}",
3742
3922
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.remote-list.json",
@@ -3746,7 +3926,7 @@
3746
3926
  "corpusVersion": "1.0.0"
3747
3927
  },
3748
3928
  {
3749
- "chunkIndex": 84,
3929
+ "chunkIndex": 102,
3750
3930
  "chunkKind": "recipe",
3751
3931
  "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.\"}",
3752
3932
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
@@ -3756,7 +3936,7 @@
3756
3936
  "corpusVersion": "1.0.0"
3757
3937
  },
3758
3938
  {
3759
- "chunkIndex": 85,
3939
+ "chunkIndex": 103,
3760
3940
  "chunkKind": "recipe",
3761
3941
  "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\"]}}",
3762
3942
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
@@ -3766,7 +3946,7 @@
3766
3946
  "corpusVersion": "1.0.0"
3767
3947
  },
3768
3948
  {
3769
- "chunkIndex": 86,
3949
+ "chunkIndex": 104,
3770
3950
  "chunkKind": "recipe",
3771
3951
  "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.\"}}",
3772
3952
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
@@ -3776,7 +3956,7 @@
3776
3956
  "corpusVersion": "1.0.0"
3777
3957
  },
3778
3958
  {
3779
- "chunkIndex": 87,
3959
+ "chunkIndex": 105,
3780
3960
  "chunkKind": "recipe",
3781
3961
  "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.\"]}",
3782
3962
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
@@ -3786,7 +3966,7 @@
3786
3966
  "corpusVersion": "1.0.0"
3787
3967
  },
3788
3968
  {
3789
- "chunkIndex": 88,
3969
+ "chunkIndex": 106,
3790
3970
  "chunkKind": "recipe",
3791
3971
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"}}}",
3792
3972
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
@@ -3796,7 +3976,7 @@
3796
3976
  "corpusVersion": "1.0.0"
3797
3977
  },
3798
3978
  {
3799
- "chunkIndex": 89,
3979
+ "chunkIndex": 107,
3800
3980
  "chunkKind": "recipe",
3801
3981
  "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\"}}}",
3802
3982
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
@@ -3806,7 +3986,7 @@
3806
3986
  "corpusVersion": "1.0.0"
3807
3987
  },
3808
3988
  {
3809
- "chunkIndex": 90,
3989
+ "chunkIndex": 108,
3810
3990
  "chunkKind": "recipe",
3811
3991
  "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\"]}}",
3812
3992
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
@@ -3816,7 +3996,7 @@
3816
3996
  "corpusVersion": "1.0.0"
3817
3997
  },
3818
3998
  {
3819
- "chunkIndex": 91,
3999
+ "chunkIndex": 109,
3820
4000
  "chunkKind": "recipe",
3821
4001
  "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\"}}}}",
3822
4002
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
@@ -3826,7 +4006,7 @@
3826
4006
  "corpusVersion": "1.0.0"
3827
4007
  },
3828
4008
  {
3829
- "chunkIndex": 92,
4009
+ "chunkIndex": 110,
3830
4010
  "chunkKind": "recipe",
3831
4011
  "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\"}}",
3832
4012
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
@@ -3836,7 +4016,7 @@
3836
4016
  "corpusVersion": "1.0.0"
3837
4017
  },
3838
4018
  {
3839
- "chunkIndex": 93,
4019
+ "chunkIndex": 111,
3840
4020
  "chunkKind": "recipe",
3841
4021
  "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\"}]}]}]}",
3842
4022
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
@@ -3846,7 +4026,7 @@
3846
4026
  "corpusVersion": "1.0.0"
3847
4027
  },
3848
4028
  {
3849
- "chunkIndex": 94,
4029
+ "chunkIndex": 112,
3850
4030
  "chunkKind": "recipe",
3851
4031
  "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\"}]}]}",
3852
4032
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
@@ -3856,7 +4036,7 @@
3856
4036
  "corpusVersion": "1.0.0"
3857
4037
  },
3858
4038
  {
3859
- "chunkIndex": 95,
4039
+ "chunkIndex": 113,
3860
4040
  "chunkKind": "recipe",
3861
4041
  "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\"}}}]}]}}}}]}}",
3862
4042
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
@@ -3866,7 +4046,7 @@
3866
4046
  "corpusVersion": "1.0.0"
3867
4047
  },
3868
4048
  {
3869
- "chunkIndex": 96,
4049
+ "chunkIndex": 114,
3870
4050
  "chunkKind": "recipe",
3871
4051
  "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\"}}}]}}",
3872
4052
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-table-surface.json",
@@ -3876,7 +4056,7 @@
3876
4056
  "corpusVersion": "1.0.0"
3877
4057
  },
3878
4058
  {
3879
- "chunkIndex": 97,
4059
+ "chunkIndex": 115,
3880
4060
  "chunkKind": "recipe",
3881
4061
  "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\"}}}]}}",
3882
4062
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rules-computed-table.json",
@@ -3886,7 +4066,7 @@
3886
4066
  "corpusVersion": "1.0.0"
3887
4067
  },
3888
4068
  {
3889
- "chunkIndex": 98,
4069
+ "chunkIndex": 116,
3890
4070
  "chunkKind": "recipe",
3891
4071
  "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\"}}}]}}",
3892
4072
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.stepper-onboarding-workflow.json",
@@ -3896,7 +4076,7 @@
3896
4076
  "corpusVersion": "1.0.0"
3897
4077
  },
3898
4078
  {
3899
- "chunkIndex": 99,
4079
+ "chunkIndex": 117,
3900
4080
  "chunkKind": "recipe",
3901
4081
  "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\"}}}}}]}}",
3902
4082
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.stepper.json",
@@ -3906,7 +4086,7 @@
3906
4086
  "corpusVersion": "1.0.0"
3907
4087
  },
3908
4088
  {
3909
- "chunkIndex": 100,
4089
+ "chunkIndex": 118,
3910
4090
  "chunkKind": "recipe",
3911
4091
  "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}}]}}}",
3912
4092
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.surfaces-actions-showcase.json",
@@ -3916,7 +4096,7 @@
3916
4096
  "corpusVersion": "1.0.0"
3917
4097
  },
3918
4098
  {
3919
- "chunkIndex": 101,
4099
+ "chunkIndex": 119,
3920
4100
  "chunkKind": "recipe",
3921
4101
  "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\"}}}]}}",
3922
4102
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.table.json",
@@ -3926,7 +4106,7 @@
3926
4106
  "corpusVersion": "1.0.0"
3927
4107
  },
3928
4108
  {
3929
- "chunkIndex": 102,
4109
+ "chunkIndex": 120,
3930
4110
  "chunkKind": "recipe",
3931
4111
  "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\"}}}]}}",
3932
4112
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.tabs-nav-routing-workspace.json",
@@ -3936,7 +4116,7 @@
3936
4116
  "corpusVersion": "1.0.0"
3937
4117
  },
3938
4118
  {
3939
- "chunkIndex": 103,
4119
+ "chunkIndex": 121,
3940
4120
  "chunkKind": "recipe",
3941
4121
  "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\"}}]}]}}}}]}}",
3942
4122
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.tabs.json",
@@ -3946,7 +4126,7 @@
3946
4126
  "corpusVersion": "1.0.0"
3947
4127
  },
3948
4128
  {
3949
- "chunkIndex": 104,
4129
+ "chunkIndex": 122,
3950
4130
  "chunkKind": "recipe",
3951
4131
  "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.\"}",
3952
4132
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -3956,7 +4136,7 @@
3956
4136
  "corpusVersion": "1.0.0"
3957
4137
  },
3958
4138
  {
3959
- "chunkIndex": 105,
4139
+ "chunkIndex": 123,
3960
4140
  "chunkKind": "recipe",
3961
4141
  "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\"]}}",
3962
4142
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -3966,7 +4146,7 @@
3966
4146
  "corpusVersion": "1.0.0"
3967
4147
  },
3968
4148
  {
3969
- "chunkIndex": 106,
4149
+ "chunkIndex": 124,
3970
4150
  "chunkKind": "recipe",
3971
4151
  "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.\"}}",
3972
4152
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -3976,7 +4156,7 @@
3976
4156
  "corpusVersion": "1.0.0"
3977
4157
  },
3978
4158
  {
3979
- "chunkIndex": 107,
4159
+ "chunkIndex": 125,
3980
4160
  "chunkKind": "recipe",
3981
4161
  "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\"]}}",
3982
4162
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -3986,7 +4166,7 @@
3986
4166
  "corpusVersion": "1.0.0"
3987
4167
  },
3988
4168
  {
3989
- "chunkIndex": 108,
4169
+ "chunkIndex": 126,
3990
4170
  "chunkKind": "recipe",
3991
4171
  "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.\"]}",
3992
4172
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -3996,7 +4176,7 @@
3996
4176
  "corpusVersion": "1.0.0"
3997
4177
  },
3998
4178
  {
3999
- "chunkIndex": 109,
4179
+ "chunkIndex": 127,
4000
4180
  "chunkKind": "recipe",
4001
4181
  "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\"]}",
4002
4182
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -4006,7 +4186,7 @@
4006
4186
  "corpusVersion": "1.0.0"
4007
4187
  },
4008
4188
  {
4009
- "chunkIndex": 110,
4189
+ "chunkIndex": 128,
4010
4190
  "chunkKind": "recipe",
4011
4191
  "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"}}}",
4012
4192
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -4016,7 +4196,7 @@
4016
4196
  "corpusVersion": "1.0.0"
4017
4197
  },
4018
4198
  {
4019
- "chunkIndex": 111,
4199
+ "chunkIndex": 129,
4020
4200
  "chunkKind": "recipe",
4021
4201
  "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.\"}]}]}}}}]}}",
4022
4202
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -4026,7 +4206,7 @@
4026
4206
  "corpusVersion": "1.0.0"
4027
4207
  },
4028
4208
  {
4029
- "chunkIndex": 112,
4209
+ "chunkIndex": 130,
4030
4210
  "chunkKind": "recipe",
4031
4211
  "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\"}}}",
4032
4212
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -4036,7 +4216,7 @@
4036
4216
  "corpusVersion": "1.0.0"
4037
4217
  },
4038
4218
  {
4039
- "chunkIndex": 113,
4219
+ "chunkIndex": 131,
4040
4220
  "chunkKind": "recipe",
4041
4221
  "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\"]}}",
4042
4222
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -4046,7 +4226,7 @@
4046
4226
  "corpusVersion": "1.0.0"
4047
4227
  },
4048
4228
  {
4049
- "chunkIndex": 114,
4229
+ "chunkIndex": 132,
4050
4230
  "chunkKind": "recipe",
4051
4231
  "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\"}}",
4052
4232
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -4056,7 +4236,7 @@
4056
4236
  "corpusVersion": "1.0.0"
4057
4237
  },
4058
4238
  {
4059
- "chunkIndex": 115,
4239
+ "chunkIndex": 133,
4060
4240
  "chunkKind": "recipe",
4061
4241
  "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\":[]}]}]}]}}",
4062
4242
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -4066,7 +4246,7 @@
4066
4246
  "corpusVersion": "1.0.0"
4067
4247
  },
4068
4248
  {
4069
- "chunkIndex": 116,
4249
+ "chunkIndex": 134,
4070
4250
  "chunkKind": "recipe",
4071
4251
  "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\"}}}]}}",
4072
4252
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
@@ -4141,12 +4321,43 @@
4141
4321
  "required": false,
4142
4322
  "description": "ResourcePath do recurso pai para contexto da surface."
4143
4323
  },
4324
+ {
4325
+ "name": "presentation",
4326
+ "type": "SurfacePresentation",
4327
+ "required": false,
4328
+ "description": "Apresentação usada no payload de abertura host-mediated.",
4329
+ "default": "drawer"
4330
+ },
4331
+ {
4332
+ "name": "title",
4333
+ "type": "string | null",
4334
+ "required": false,
4335
+ "description": "Título opcional que substitui o título publicado pela surface."
4336
+ },
4337
+ {
4338
+ "name": "subtitle",
4339
+ "type": "string | null",
4340
+ "required": false,
4341
+ "description": "Subtítulo opcional que substitui a descrição publicada pela surface."
4342
+ },
4343
+ {
4344
+ "name": "icon",
4345
+ "type": "string | null",
4346
+ "required": false,
4347
+ "description": "Ícone opcional da superfície relacionada."
4348
+ },
4144
4349
  {
4145
4350
  "name": "queryContext",
4146
4351
  "type": "RelatedResourceQueryContext | null",
4147
4352
  "required": false,
4148
4353
  "description": "QueryContext base mesclado com o filtro canônico da relação filha."
4149
4354
  },
4355
+ {
4356
+ "name": "tableId",
4357
+ "type": "string | null",
4358
+ "required": false,
4359
+ "description": "Identidade estável da tabela filha para persistência, observabilidade e testes."
4360
+ },
4150
4361
  {
4151
4362
  "name": "tableConfig",
4152
4363
  "type": "Record<string, unknown> | null",
@@ -4185,6 +4396,12 @@
4185
4396
  "required": false,
4186
4397
  "description": "Override de estado para hosts/outlets que estejam carregando discovery remoto."
4187
4398
  },
4399
+ {
4400
+ "name": "stateReason",
4401
+ "type": "string | null",
4402
+ "required": false,
4403
+ "description": "Motivo governado associado ao override de estado."
4404
+ },
4188
4405
  {
4189
4406
  "name": "compact",
4190
4407
  "type": "boolean",
@@ -4198,6 +4415,13 @@
4198
4415
  "required": false,
4199
4416
  "description": "Validação estrita do widget materializado pelo DynamicWidgetLoader.",
4200
4417
  "default": false
4418
+ },
4419
+ {
4420
+ "name": "ownerWidgetKey",
4421
+ "type": "string",
4422
+ "required": false,
4423
+ "description": "Identidade do owner usada para correlacionar eventos do widget filho.",
4424
+ "default": "related-resource.outlet"
4201
4425
  }
4202
4426
  ],
4203
4427
  "outputs": [
@@ -4232,15 +4456,102 @@
4232
4456
  "metadata-driven"
4233
4457
  ],
4234
4458
  "lib": "@praxisui/core",
4459
+ "ports": [
4460
+ {
4461
+ "id": "parentResourceId",
4462
+ "label": "Identificador do recurso pai",
4463
+ "direction": "input",
4464
+ "semanticKind": "value",
4465
+ "schema": {
4466
+ "id": "string | number | null",
4467
+ "kind": "ts-type",
4468
+ "ref": "string | number | null"
4469
+ },
4470
+ "description": "Seleção canônica que governa a resolução da coleção filha.",
4471
+ "exposure": {
4472
+ "public": true,
4473
+ "group": "context"
4474
+ }
4475
+ },
4476
+ {
4477
+ "id": "queryContext",
4478
+ "label": "Contexto de consulta",
4479
+ "direction": "input",
4480
+ "semanticKind": "query-context",
4481
+ "schema": {
4482
+ "id": "RelatedResourceQueryContext",
4483
+ "kind": "ts-type",
4484
+ "ref": "RelatedResourceQueryContext"
4485
+ },
4486
+ "description": "Contexto adicional mesclado ao filtro pai-filho publicado pela surface.",
4487
+ "exposure": {
4488
+ "public": true,
4489
+ "advanced": true,
4490
+ "group": "context"
4491
+ }
4492
+ },
4493
+ {
4494
+ "id": "surfaceOpen",
4495
+ "label": "Abertura da superfície relacionada",
4496
+ "direction": "output",
4497
+ "semanticKind": "event",
4498
+ "schema": {
4499
+ "id": "SurfaceOpenPayload",
4500
+ "kind": "ts-type",
4501
+ "ref": "SurfaceOpenPayload"
4502
+ },
4503
+ "cardinality": "stream",
4504
+ "description": "Solicita ao host a abertura mediada da superfície no modo open-action.",
4505
+ "exposure": {
4506
+ "public": true,
4507
+ "group": "events"
4508
+ }
4509
+ },
4510
+ {
4511
+ "id": "widgetEvent",
4512
+ "label": "Evento do widget relacionado",
4513
+ "direction": "output",
4514
+ "semanticKind": "event",
4515
+ "schema": {
4516
+ "id": "WidgetEventEnvelope",
4517
+ "kind": "ts-type",
4518
+ "ref": "WidgetEventEnvelope"
4519
+ },
4520
+ "cardinality": "stream",
4521
+ "description": "Reemite eventos do widget filho com identidade de ownership.",
4522
+ "exposure": {
4523
+ "public": true,
4524
+ "advanced": true,
4525
+ "group": "events"
4526
+ }
4527
+ },
4528
+ {
4529
+ "id": "resourceEvent",
4530
+ "label": "Evento canônico do recurso relacionado",
4531
+ "direction": "output",
4532
+ "semanticKind": "event",
4533
+ "schema": {
4534
+ "id": "PraxisResourceEvent",
4535
+ "kind": "ts-type",
4536
+ "ref": "PraxisResourceEvent"
4537
+ },
4538
+ "cardinality": "stream",
4539
+ "description": "Promove seleção, mutação e lifecycle do recurso filho para a composição.",
4540
+ "exposure": {
4541
+ "public": true,
4542
+ "group": "events"
4543
+ }
4544
+ }
4545
+ ],
4235
4546
  "source": "projects/praxis-core/src/lib/surfaces/praxis-related-resource-outlet.metadata.ts",
4236
4547
  "exportName": "PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA",
4237
4548
  "chunks": [
4238
4549
  {
4239
4550
  "chunkIndex": 0,
4240
4551
  "chunkKind": "summary",
4241
- "content": "Component ID: praxis-related-resource-outlet\nSelector: praxis-related-resource-outlet\nFriendly Name: Related Resource Outlet\nDescription: Runtime genérico para materializar surface.relatedResource como tabela filha governada por metadata.\nLib/Package: @praxisui/core\nTags: resource, surface, related-resource, runtime, metadata-driven\nInputs:\n - surfaceId (string | null)\n - surfaceCatalog (ResourceSurfaceCatalogResponse | null)\n - discoverySource (ResourceLinkSource | null)\n - parentLinks (RestApiLinks | RestApiResponse<unknown> | null)\n - apiEndpointKey (ApiEndpoint | null)\n - apiUrlEntry (ApiUrlEntry | null)\n - surface (ResourceSurfaceCatalogItem | null)\n - parentRecord (Record<string, unknown> | null)\n - parentResourceId (string | number | null)\n - parentResourcePath (string | null)\n - queryContext (RelatedResourceQueryContext | null)\n - tableConfig (Record<string, unknown> | null)\n - emptyState (Record<string, unknown> | null)\n - enableCustomization (boolean)\n - authoringCapability (string | null)\n - mode ('inline' | 'open-action')\n - state (RelatedResourceResolutionState | null)\n - compact (boolean)\n - strictValidation (boolean)\nOutputs:\n - surfaceOpen (SurfaceOpenPayload)\n - widgetEvent (WidgetEventEnvelope)\n - resourceEvent (PraxisResourceEvent)\n",
4552
+ "content": "Component ID: praxis-related-resource-outlet\nSelector: praxis-related-resource-outlet\nFriendly Name: Related Resource Outlet\nDescription: Runtime genérico para materializar surface.relatedResource como tabela filha governada por metadata.\nLib/Package: @praxisui/core\nTags: resource, surface, related-resource, runtime, metadata-driven\nInputs:\n - surfaceId (string | null)\n - surfaceCatalog (ResourceSurfaceCatalogResponse | null)\n - discoverySource (ResourceLinkSource | null)\n - parentLinks (RestApiLinks | RestApiResponse<unknown> | null)\n - apiEndpointKey (ApiEndpoint | null)\n - apiUrlEntry (ApiUrlEntry | null)\n - surface (ResourceSurfaceCatalogItem | null)\n - parentRecord (Record<string, unknown> | null)\n - parentResourceId (string | number | null)\n - parentResourcePath (string | null)\n - presentation (SurfacePresentation)\n - title (string | null)\n - subtitle (string | null)\n - icon (string | null)\n - queryContext (RelatedResourceQueryContext | null)\n - tableId (string | null)\n - tableConfig (Record<string, unknown> | null)\n - emptyState (Record<string, unknown> | null)\n - enableCustomization (boolean)\n - authoringCapability (string | null)\n - mode ('inline' | 'open-action')\n - state (RelatedResourceResolutionState | null)\n - stateReason (string | null)\n - compact (boolean)\n - strictValidation (boolean)\n - ownerWidgetKey (string)\nOutputs:\n - surfaceOpen (SurfaceOpenPayload)\n - widgetEvent (WidgetEventEnvelope)\n - resourceEvent (PraxisResourceEvent)\n",
4242
4553
  "sourcePointer": "projects/praxis-core/src/lib/surfaces/praxis-related-resource-outlet.metadata.ts",
4243
- "contentHash": "a292f2206e7693a0615cd98fd9d8822adaf5b4e611920d57e0c97819eed23551",
4554
+ "contentHash": "793c5d0baa396c0f767a236bf2556b54ca2935b8aa70b55d1cdf7c24ff0b6d85",
4244
4555
  "sourceKind": "component_definition",
4245
4556
  "sourceId": "praxis-related-resource-outlet",
4246
4557
  "corpusVersion": "1.0.0"