@praxisui/core 9.0.62 → 9.0.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/ai/component-registry.json +486 -88
- package/fesm2022/praxisui-core.mjs +414 -137
- package/package.json +1 -1
- package/types/praxisui-core.d.ts +111 -8
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-09-
|
|
3
|
+
"generatedAt": "2026-09-05T22:17:32.983Z",
|
|
4
4
|
"packageName": "@praxisui/core",
|
|
5
|
-
"packageVersion": "9.0.
|
|
5
|
+
"packageVersion": "9.0.64",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 4,
|
|
@@ -853,7 +853,25 @@
|
|
|
853
853
|
"path": "uiCompositionPlan.bindings[].transform",
|
|
854
854
|
"category": "connections",
|
|
855
855
|
"valueKind": "object",
|
|
856
|
-
"description": "Transform declarativo: pick-path, query-context, template ou
|
|
856
|
+
"description": "Transform declarativo: pick-path, query-context, template, constant ou select-case total."
|
|
857
|
+
},
|
|
858
|
+
{
|
|
859
|
+
"path": "uiCompositionPlan.bindings[].transform.fallbackValue",
|
|
860
|
+
"category": "connections",
|
|
861
|
+
"valueKind": "object",
|
|
862
|
+
"description": "Fallback JSON explicito do pipeline quando a projecao resolve undefined; use null, objeto ou colecao conforme o contrato do destino."
|
|
863
|
+
},
|
|
864
|
+
{
|
|
865
|
+
"path": "uiCompositionPlan.bindings[].transform.cases",
|
|
866
|
+
"category": "connections",
|
|
867
|
+
"valueKind": "array",
|
|
868
|
+
"description": "Branches do select-case, cada uma com guarda Json Logic canonica em when e valor total em value."
|
|
869
|
+
},
|
|
870
|
+
{
|
|
871
|
+
"path": "uiCompositionPlan.bindings[].transform.defaultValue",
|
|
872
|
+
"category": "connections",
|
|
873
|
+
"valueKind": "object",
|
|
874
|
+
"description": "Valor total obrigatorio do select-case quando nenhuma branch corresponde; permite empty/reset sem um segundo binding."
|
|
857
875
|
},
|
|
858
876
|
{
|
|
859
877
|
"path": "uiCompositionPlan.bindings[].policy",
|
|
@@ -3026,9 +3044,9 @@
|
|
|
3026
3044
|
{
|
|
3027
3045
|
"chunkIndex": 2,
|
|
3028
3046
|
"chunkKind": "capabilities",
|
|
3029
|
-
"content": "Component Capability:\n - Path: uiCompositionPlan.bindings[].from.nestedPath[].kind\n Category: connections\n Kind: string\n Description: Tipo do segmento nested de origem, como tab, nav, link, expansion, panel ou widget. O ultimo segmento deve ser widget.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].from.nestedPath[].id\n Category: connections\n Kind: string\n Description: Identificador estrutural estavel do container de origem no segmento nested, quando existir.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].from.nestedPath[].key\n Category: connections\n Kind: string\n Description: Chave estavel do widget filho no segmento terminal widget de origem. Obrigatoria para endpoint nested persistido.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].from.nestedPath[].index\n Category: connections\n Kind: number\n Description: Indice auxiliar de origem para contexto visual/diagnostico; nao use como identidade primaria persistida.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].from.nestedPath[].componentType\n Category: connections\n Kind: string\n Description: Tipo do componente real do widget filho de origem, usado como verificacao auxiliar, nao como identidade primaria.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].to.nestedPath[].kind\n Category: connections\n Kind: string\n Description: Tipo do segmento nested de destino, como tab, nav, link, expansion, panel ou widget. O ultimo segmento deve ser widget.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].to.nestedPath[].id\n Category: connections\n Kind: string\n Description: Identificador estrutural estavel do container de destino no segmento nested, quando existir.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].to.nestedPath[].key\n Category: connections\n Kind: string\n Description: Chave estavel do widget filho no segmento terminal widget de destino. Obrigatoria para endpoint nested persistido.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].to.nestedPath[].index\n Category: connections\n Kind: number\n Description: Indice auxiliar de destino para contexto visual/diagnostico; nao use como identidade primaria persistida.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].to.nestedPath[].componentType\n Category: connections\n Kind: string\n Description: Tipo do componente real do widget filho de destino, usado como verificacao auxiliar, nao como identidade primaria.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].intent\n Category: connections\n Kind: string\n Description: Intencao semantica do binding.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].condition\n Category: connections\n Kind: expression\n Description: Guarda opcional em Json Logic.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].transform\n Category: connections\n Kind: object\n Description: Transform declarativo: pick-path, query-context, template ou
|
|
3047
|
+
"content": "Component Capability:\n - Path: uiCompositionPlan.bindings[].from.nestedPath[].kind\n Category: connections\n Kind: string\n Description: Tipo do segmento nested de origem, como tab, nav, link, expansion, panel ou widget. O ultimo segmento deve ser widget.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].from.nestedPath[].id\n Category: connections\n Kind: string\n Description: Identificador estrutural estavel do container de origem no segmento nested, quando existir.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].from.nestedPath[].key\n Category: connections\n Kind: string\n Description: Chave estavel do widget filho no segmento terminal widget de origem. Obrigatoria para endpoint nested persistido.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].from.nestedPath[].index\n Category: connections\n Kind: number\n Description: Indice auxiliar de origem para contexto visual/diagnostico; nao use como identidade primaria persistida.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].from.nestedPath[].componentType\n Category: connections\n Kind: string\n Description: Tipo do componente real do widget filho de origem, usado como verificacao auxiliar, nao como identidade primaria.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].to.nestedPath[].kind\n Category: connections\n Kind: string\n Description: Tipo do segmento nested de destino, como tab, nav, link, expansion, panel ou widget. O ultimo segmento deve ser widget.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].to.nestedPath[].id\n Category: connections\n Kind: string\n Description: Identificador estrutural estavel do container de destino no segmento nested, quando existir.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].to.nestedPath[].key\n Category: connections\n Kind: string\n Description: Chave estavel do widget filho no segmento terminal widget de destino. Obrigatoria para endpoint nested persistido.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].to.nestedPath[].index\n Category: connections\n Kind: number\n Description: Indice auxiliar de destino para contexto visual/diagnostico; nao use como identidade primaria persistida.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].to.nestedPath[].componentType\n Category: connections\n Kind: string\n Description: Tipo do componente real do widget filho de destino, usado como verificacao auxiliar, nao como identidade primaria.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].intent\n Category: connections\n Kind: string\n Description: Intencao semantica do binding.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].condition\n Category: connections\n Kind: expression\n Description: Guarda opcional em Json Logic.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].transform\n Category: connections\n Kind: object\n Description: Transform declarativo: pick-path, query-context, template, constant ou select-case total.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].transform.fallbackValue\n Category: connections\n Kind: object\n Description: Fallback JSON explicito do pipeline quando a projecao resolve undefined; use null, objeto ou colecao conforme o contrato do destino.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].transform.cases\n Category: connections\n Kind: array\n Description: Branches do select-case, cada uma com guarda Json Logic canonica em when e valor total em value.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].transform.defaultValue\n Category: connections\n Kind: object\n Description: Valor total obrigatorio do select-case quando nenhuma branch corresponde; permite empty/reset sem um segundo binding.\n\nComponent Capability:\n - Path: uiCompositionPlan.bindings[].policy\n Category: connections\n Kind: object\n Description: Politica operacional opcional do binding.\n\nComponent Capability:\n - Path: page\n Category: page\n Kind: object\n Description: Definicao da pagina (WidgetPageDefinition).\n\nComponent Capability:\n - Path: context\n Category: context\n Kind: object\n Description: Contexto extra mesclado ao page.context.\n\nComponent Capability:\n - Path: enableCustomization\n Category: behavior\n Kind: boolean\n Description: Habilita modo de edicao.\n\nComponent Capability:\n - Path: showSettingsButton\n Category: behavior\n Kind: boolean\n Description: Exibe botao de settings.\n\nComponent Capability:\n - Path: strictValidation\n Category: behavior\n Kind: boolean\n Description: Validacao estrita do widget loader.\n\nComponent Capability:\n - Path: layoutOptions\n Category: layout\n Kind: object\n Description: Overrides residuais do host aceitos apenas para compatibilidade de migracao.\n\nComponent Capability:\n - Path: layoutOptions.cols\n Category: layout\n Kind: number\n Description: Compat: numero de colunas usado para derivar canvas padrao.\n\nComponent Capability:\n - Path: layoutOptions.rowHeight\n Category: layout\n Kind: number\n Description: Compat: altura de linha usada para derivar rowUnit do canvas.\n\nComponent Capability:\n - Path: layoutOptions.gap\n Category: layout\n Kind: number\n Description: Compat: espacamento usado para derivar gap do canvas.\n\nComponent Capability:\n - Path: pageIdentity\n Category: identity\n Kind: object\n Description: Identidade de persistencia da pagina.\n\nComponent Capability:\n - Path: pageIdentity.appId\n Category: identity\n Kind: string\n Description: App id (opcional).\n\nComponent Capability:\n - Path: pageIdentity.tenantId\n Category: identity\n Kind: string\n Description: Tenant id.\n\nComponent Capability:\n - Path: pageIdentity.userId\n Category: identity\n Kind: string\n Description: User id.\n\nComponent Capability:\n - Path: pageIdentity.routePath\n Category: identity\n Kind: string\n Description: Rota base da pagina.\n\nComponent Capability:\n - Path: pageIdentity.locale\n Category: identity\n Kind: string\n Description: Locale.\n\nComponent Capability:\n - Path: page.canvas\n Category: layout\n Kind: object\n Description: Canvas espacial canonico da pagina.\n\nComponent Capability:\n - Path: page.canvas.mode\n Category: layout\n Kind: string\n Description: Modo do canvas. O builder usa grid canonico.\n\nComponent Capability:\n - Path: page.canvas.columns\n Category: layout\n Kind: number\n Description: Numero de colunas do canvas.\n\nComponent Capability:\n - Path: page.canvas.rowUnit\n Category: layout\n Kind: string\n Description: Altura base das linhas do canvas (ex: 80px).\n\nComponent Capability:\n - Path: page.canvas.gap\n Category: layout\n Kind: string\n Description: Espacamento entre itens do canvas.\n\nComponent Capability:\n - Path: page.canvas.autoRows\n Category: layout\n Kind: string\n Description: Politica de auto rows do canvas.\n\nComponent Capability:\n - Path: page.canvas.items\n Category: layout\n Kind: object\n Description: Mapa canonico de posicionamento espacial por widget key.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.col\n Category: layout\n Kind: number\n Description: Coluna inicial (1-based).\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.row\n Category: layout\n Kind: number\n Description: Linha inicial (1-based).\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.colSpan\n Category: layout\n Kind: number\n Description: Colunas ocupadas.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.rowSpan\n Category: layout\n Kind: number\n Description: Linhas ocupadas.\n\nComponent Capability:\n - Path: page.state\n Category: state\n Kind: object\n Description: Estado declarativo opcional da pagina.",
|
|
3030
3048
|
"sourcePointer": "projects/praxis-core/src/lib/ai/dynamic-page-ai-capabilities.ts",
|
|
3031
|
-
"contentHash": "
|
|
3049
|
+
"contentHash": "a267d04c2d778e17e255cadbf244eb9e1efba04cf222c04f99725f5a3aab8c70",
|
|
3032
3050
|
"sourceKind": "component_definition",
|
|
3033
3051
|
"sourceId": "praxis-dynamic-page",
|
|
3034
3052
|
"corpusVersion": "1.0.0"
|
|
@@ -3036,9 +3054,9 @@
|
|
|
3036
3054
|
{
|
|
3037
3055
|
"chunkIndex": 3,
|
|
3038
3056
|
"chunkKind": "capabilities",
|
|
3039
|
-
"content": "Component Capability:\n - Path: page.widgets[].definition\n Category: widgets\n Kind: object\n Description: Definicao do widget (WidgetDefinition).\n\nComponent Capability:\n - Path: page.widgets[].definition.id\n Category: widgets\n Kind: string\n Description: ID do componente registrado.\n\nComponent Capability:\n - Path: page.widgets[].definition.inputs\n Category: widgets\n Kind: object\n Description: Inputs do componente.\n\nComponent Capability:\n - Path: page.widgets[].definition.inputs.document\n Category: widgets\n Kind: object\n Description: RichContentDocument quando definition.id for praxis-rich-content.\n\nComponent Capability:\n - Path: page.widgets[].definition.bindingOrder\n Category: widgets\n Kind: array\n Description: Ordem de aplicacao dos inputs.\n\nComponent Capability:\n - Path: ComponentDocMeta.configEditor\n Category: widgets\n Kind: object\n Description: Editor canonico de inputs publicado pela lib dona do componente e aberto pelo settings-panel do host.\n\nComponent Capability:\n - Path: ComponentDocMeta.configEditor.component\n Category: widgets\n Kind: object\n Description: Componente standalone que implementa SettingsValueProvider para editar definition.inputs.\n\nComponent Capability:\n - Path: ComponentDocMeta.configEditor.title\n Category: widgets\n Kind: string\n Description: Titulo opcional usado pelo host ao abrir o editor de inputs do componente.\n\nComponent Capability:\n - Path: ComponentDocMeta.configEditor.contextResolver\n Category: widgets\n Kind: object\n Description: Resolver canonico de contexto transiente para o editor; catálogos, schemas, capabilities, targets e diagnostics devem ser passados por context/contextDiagnostics e nao persistidos em definition.inputs.\n\nComponent Capability:\n - Path: ComponentDocMeta.authoringManifestRef\n Category: widgets\n Kind: object\n Description: Referencia canonica para o manifesto executavel de authoring por IA publicado pela lib dona do componente.\n\nComponent Capability:\n - Path: ComponentDocMeta.authoringManifestRef.componentId\n Category: widgets\n Kind: string\n Description: ID do componente no registry/backend de manifestos de authoring.\n\nComponent Capability:\n - Path: ComponentDocMeta.authoringManifestRef.source\n Category: widgets\n Kind: string\n Description: Simbolo, modulo ou registry id estavel do manifesto usado para delegar edicoes governadas.\n\nComponent Capability:\n - Path: page.composition\n Category: connections\n Kind: object\n Description: Envelope canonico da composicao persistida.\n\nComponent Capability:\n - Path: page.composition.version\n Category: connections\n Kind: string\n Description: Versao do envelope de composicao.\n\nComponent Capability:\n - Path: page.composition.links\n Category: connections\n Kind: array\n Description: Links canonicos entre widgets, estado e actions globais.\n\nComponent Capability:\n - Path: page.composition.links[].id\n Category: connections\n Kind: string\n Description: Identificador estavel do link.\n\nComponent Capability:\n - Path: page.composition.links[].from\n Category: connections\n Kind: object\n Description: Endpoint de origem do link.\n\nComponent Capability:\n - Path: page.composition.links[].to\n Category: connections\n Kind: object\n Description: Endpoint de destino do link.\n\nComponent Capability:\n - Path: page.composition.links[].to.kind\n Category: connections\n Kind: string\n Description: Tipo do endpoint de destino, incluindo global-action para command-dispatch declarativo.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.[actionId]\n Category: connections\n Kind: string\n Description: ID da action global quando page.composition.links[].to.kind = global-action.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.payload\n Category: connections\n Kind: object\n Description: Payload estruturado opcional da action global persistida; quando omitido, o valor transformado do link segue como delivery value.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.payloadExpr\n Category: connections\n Kind: expression\n Description: Escape avancado explicito de payload da action global persistida.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.meta\n Category: connections\n Kind: object\n Description: Metadados opcionais do GlobalActionRef persistido, sem criar executor paralelo.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.nestedPath\n Category: connections\n Kind: array\n Description: NestedPath canonico em endpoint component-port de origem persistido. Omita para top-level; nao serialize nestedPath: [].\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.nestedPath[].key\n Category: connections\n Kind: string\n Description: Chave estavel do widget filho no segmento terminal widget de origem. Obrigatoria para endpoint nested persistido.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.nestedPath\n Category: connections\n Kind: array\n Description: NestedPath canonico em endpoint component-port de destino persistido. Omita para top-level; nao serialize nestedPath: [].\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.nestedPath[].key\n Category: connections\n Kind: string\n Description: Chave estavel do widget filho no segmento terminal widget de destino. Obrigatoria para endpoint nested persistido.\n\nComponent Capability:\n - Path: page.composition.links[].intent\n Category: connections\n Kind: string\n Description: Intencao semantica do link.\n\nComponent Capability:\n - Path: page.composition.links[].transform\n Category: connections\n Kind: object\n Description: Pipeline de transformacao do link.\n\nComponent Capability:\n - Path: page.composition.links[].condition\n Category: connections\n Kind: expression\n Description: Guarda semantica opcional do link, expressa como um unico AST Json Logic canonico.\n\nComponent Capability:\n - Path: page.composition.links[].policy\n Category: connections\n Kind: object\n Description: Politicas operacionais opcionais do link, separadas da condition semantica.\n\nComponent Capability:\n - Path: page.composition.links[].metadata\n Category: connections\n Kind: object\n Description: Metadados opcionais do link.\n\nComponent Capability:\n - Path: page.context\n Category: context\n Kind: object\n Description: Contexto da pagina (compartilhado por widgets).\n\nComponent Capability:\n - Path: page.i18n\n Category: localization\n Kind: object\n Description: Catálogo de copy de negócio da página, resolvido apenas na projeção runtime.\n\nComponent Capability:\n - Path: page.i18n.fallbackLocale\n Category: localization\n Kind: string\n Description: Locale de fallback do catálogo próprio da página.\n\nComponent Capability:\n - Path: page.i18n.dictionaries\n Category: localization\n Kind: object\n Description: Dicionários locale -> chave semântica -> texto usados por descritores PraxisTextValue explícitos
|
|
3057
|
+
"content": "Component Capability:\n - Path: page.state.values\n Category: state\n Kind: object\n Description: Valores primarios persistiveis do estado da pagina.\n\nComponent Capability:\n - Path: page.state.schema\n Category: state\n Kind: object\n Description: Descritores dos paths de estado primario.\n\nComponent Capability:\n - Path: page.state.derived\n Category: state\n Kind: object\n Description: Descritores de estado derivado recomputado pelo runtime.\n\nComponent Capability:\n - Path: page.widgets\n Category: widgets\n Kind: array\n Description: Widgets da pagina.\n\nComponent Capability:\n - Path: page.widgets[].key\n Category: widgets\n Kind: string\n Description: ID unico do widget.\n\nComponent Capability:\n - Path: page.widgets[].className\n Category: widgets\n Kind: string\n Description: Classe CSS do widget.\n\nComponent Capability:\n - Path: page.widgets[].definition\n Category: widgets\n Kind: object\n Description: Definicao do widget (WidgetDefinition).\n\nComponent Capability:\n - Path: page.widgets[].definition.id\n Category: widgets\n Kind: string\n Description: ID do componente registrado.\n\nComponent Capability:\n - Path: page.widgets[].definition.inputs\n Category: widgets\n Kind: object\n Description: Inputs do componente.\n\nComponent Capability:\n - Path: page.widgets[].definition.inputs.document\n Category: widgets\n Kind: object\n Description: RichContentDocument quando definition.id for praxis-rich-content.\n\nComponent Capability:\n - Path: page.widgets[].definition.bindingOrder\n Category: widgets\n Kind: array\n Description: Ordem de aplicacao dos inputs.\n\nComponent Capability:\n - Path: ComponentDocMeta.configEditor\n Category: widgets\n Kind: object\n Description: Editor canonico de inputs publicado pela lib dona do componente e aberto pelo settings-panel do host.\n\nComponent Capability:\n - Path: ComponentDocMeta.configEditor.component\n Category: widgets\n Kind: object\n Description: Componente standalone que implementa SettingsValueProvider para editar definition.inputs.\n\nComponent Capability:\n - Path: ComponentDocMeta.configEditor.title\n Category: widgets\n Kind: string\n Description: Titulo opcional usado pelo host ao abrir o editor de inputs do componente.\n\nComponent Capability:\n - Path: ComponentDocMeta.configEditor.contextResolver\n Category: widgets\n Kind: object\n Description: Resolver canonico de contexto transiente para o editor; catálogos, schemas, capabilities, targets e diagnostics devem ser passados por context/contextDiagnostics e nao persistidos em definition.inputs.\n\nComponent Capability:\n - Path: ComponentDocMeta.authoringManifestRef\n Category: widgets\n Kind: object\n Description: Referencia canonica para o manifesto executavel de authoring por IA publicado pela lib dona do componente.\n\nComponent Capability:\n - Path: ComponentDocMeta.authoringManifestRef.componentId\n Category: widgets\n Kind: string\n Description: ID do componente no registry/backend de manifestos de authoring.\n\nComponent Capability:\n - Path: ComponentDocMeta.authoringManifestRef.source\n Category: widgets\n Kind: string\n Description: Simbolo, modulo ou registry id estavel do manifesto usado para delegar edicoes governadas.\n\nComponent Capability:\n - Path: page.composition\n Category: connections\n Kind: object\n Description: Envelope canonico da composicao persistida.\n\nComponent Capability:\n - Path: page.composition.version\n Category: connections\n Kind: string\n Description: Versao do envelope de composicao.\n\nComponent Capability:\n - Path: page.composition.links\n Category: connections\n Kind: array\n Description: Links canonicos entre widgets, estado e actions globais.\n\nComponent Capability:\n - Path: page.composition.links[].id\n Category: connections\n Kind: string\n Description: Identificador estavel do link.\n\nComponent Capability:\n - Path: page.composition.links[].from\n Category: connections\n Kind: object\n Description: Endpoint de origem do link.\n\nComponent Capability:\n - Path: page.composition.links[].to\n Category: connections\n Kind: object\n Description: Endpoint de destino do link.\n\nComponent Capability:\n - Path: page.composition.links[].to.kind\n Category: connections\n Kind: string\n Description: Tipo do endpoint de destino, incluindo global-action para command-dispatch declarativo.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.[actionId]\n Category: connections\n Kind: string\n Description: ID da action global quando page.composition.links[].to.kind = global-action.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.payload\n Category: connections\n Kind: object\n Description: Payload estruturado opcional da action global persistida; quando omitido, o valor transformado do link segue como delivery value.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.payloadExpr\n Category: connections\n Kind: expression\n Description: Escape avancado explicito de payload da action global persistida.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.meta\n Category: connections\n Kind: object\n Description: Metadados opcionais do GlobalActionRef persistido, sem criar executor paralelo.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.nestedPath\n Category: connections\n Kind: array\n Description: NestedPath canonico em endpoint component-port de origem persistido. Omita para top-level; nao serialize nestedPath: [].\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.nestedPath[].key\n Category: connections\n Kind: string\n Description: Chave estavel do widget filho no segmento terminal widget de origem. Obrigatoria para endpoint nested persistido.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.nestedPath\n Category: connections\n Kind: array\n Description: NestedPath canonico em endpoint component-port de destino persistido. Omita para top-level; nao serialize nestedPath: [].\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.nestedPath[].key\n Category: connections\n Kind: string\n Description: Chave estavel do widget filho no segmento terminal widget de destino. Obrigatoria para endpoint nested persistido.\n\nComponent Capability:\n - Path: page.composition.links[].intent\n Category: connections\n Kind: string\n Description: Intencao semantica do link.\n\nComponent Capability:\n - Path: page.composition.links[].transform\n Category: connections\n Kind: object\n Description: Pipeline de transformacao do link.\n\nComponent Capability:\n - Path: page.composition.links[].condition\n Category: connections\n Kind: expression\n Description: Guarda semantica opcional do link, expressa como um unico AST Json Logic canonico.\n\nComponent Capability:\n - Path: page.composition.links[].policy\n Category: connections\n Kind: object\n Description: Politicas operacionais opcionais do link, separadas da condition semantica.\n\nComponent Capability:\n - Path: page.composition.links[].metadata\n Category: connections\n Kind: object\n Description: Metadados opcionais do link.\n\nComponent Capability:\n - Path: page.context\n Category: context\n Kind: object\n Description: Contexto da pagina (compartilhado por widgets).\n\nComponent Capability:\n - Path: page.i18n\n Category: localization\n Kind: object\n Description: Catálogo de copy de negócio da página, resolvido apenas na projeção runtime.\n\nComponent Capability:\n - Path: page.i18n.fallbackLocale\n Category: localization\n Kind: string\n Description: Locale de fallback do catálogo próprio da página.\n\nComponent Capability:\n - Path: page.i18n.dictionaries\n Category: localization\n Kind: object\n Description: Dicionários locale -> chave semântica -> texto usados por descritores PraxisTextValue explícitos.",
|
|
3040
3058
|
"sourcePointer": "projects/praxis-core/src/lib/ai/dynamic-page-ai-capabilities.ts",
|
|
3041
|
-
"contentHash": "
|
|
3059
|
+
"contentHash": "6b2a7005cdcaf1254342fab1f1d43885eb41fe8941d62261ebe13d34f0806e66",
|
|
3042
3060
|
"sourceKind": "component_definition",
|
|
3043
3061
|
"sourceId": "praxis-dynamic-page",
|
|
3044
3062
|
"corpusVersion": "1.0.0"
|
|
@@ -3046,9 +3064,9 @@
|
|
|
3046
3064
|
{
|
|
3047
3065
|
"chunkIndex": 4,
|
|
3048
3066
|
"chunkKind": "capabilities",
|
|
3049
|
-
"content": "Component Capability:\n - Path: page.layout.columns\n Category: layout\n Kind: number\n Description: Numero de colunas (quando orientation=columns).\n\nComponent Capability:\n - Path: page.layout.gap\n Category: layout\n Kind: string\n Description: Gap entre widgets (ex: 16px).\n\nComponent Capability:\n - Path: page.layout.breakpoints\n Category: layout\n Kind: object\n Description: Colunas por breakpoint.\n\nComponent Capability:\n - Path: page.layout.breakpoints.sm\n Category: layout\n Kind: number\n Description: Colunas para breakpoint sm.\n\nComponent Capability:\n - Path: page.layout.breakpoints.md\n Category: layout\n Kind: number\n Description: Colunas para breakpoint md.\n\nComponent Capability:\n - Path: page.layout.breakpoints.lg\n Category: layout\n Kind: number\n Description: Colunas para breakpoint lg.\n\nComponent Capability:\n - Path: page.layout.breakpoints.xl\n Category: layout\n Kind: number\n Description: Colunas para breakpoint xl.\n\nComponent Capability:\n - Path: page.canvas.collisionPolicy\n Category: layout\n Kind: enum\n Description: Politica de colisao do canvas espacial.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.zIndex\n Category: layout\n Kind: number\n Description: Camada opcional do item no canvas.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints\n Category: layout\n Kind: object\n Description: Restricoes opcionais de posicao e tamanho do item no canvas.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints.minColSpan\n Category: layout\n Kind: number\n Description: Span mínimo de colunas permitido.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints.minRowSpan\n Category: layout\n Kind: number\n Description: Span mínimo de linhas permitido.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints.maxColSpan\n Category: layout\n Kind: number\n Description: Span máximo de colunas permitido.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints.maxRowSpan\n Category: layout\n Kind: number\n Description: Span máximo de linhas permitido.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints.lockPosition\n Category: layout\n Kind: boolean\n Description: Bloqueia alteracao de posicao do item no canvas.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints.lockSize\n Category: layout\n Kind: boolean\n Description: Bloqueia alteracao de tamanho do item no canvas.\n\nComponent Capability:\n - Path: page.widgets[].definition.inputs.hostCapabilities\n Category: widgets\n Kind: object\n Description: Capacidades runtime mediadas pelo host quando definition.id = praxis-rich-content. Não pertence ao JSON persistido.\n\nComponent Capability:\n - Path: page.widgets[].definition.inputs.hostCapabilities.dispatchAction\n Category: widgets\n Kind: object\n Description: Dispatcher runtime para actionButton e actions declarativas de rich content hospedado na página.\n\nComponent Capability:\n - Path: page.widgets[].definition.inputs.hostCapabilities.isActionAvailable\n Category: widgets\n Kind: object\n Description: Resolver runtime de disponibilidade de actionId para rich content hospedado na página.\n\nComponent Capability:\n - Path: page.widgets[].definition.inputs.hostCapabilities.hasCapability\n Category: widgets\n Kind: object\n Description: Resolver runtime de capabilities como page.customization.enabled e page.widget.selected para rich content hospedado na página.\n\nComponent Capability:\n - Path: page.widgets[].shell\n Category: shell\n Kind: object\n Description: Configuração do shell do widget.\n\nComponent Capability:\n - Path: page.widgets[].shell.kind\n Category: shell\n Kind: enum\n Description: Tipo de shell.\n\nComponent Capability:\n - Path: page.widgets[].shell.title\n Category: shell\n Kind: string\n Description: Título do shell.\n\nComponent Capability:\n - Path: page.widgets[].shell.subtitle\n Category: shell\n Kind: string\n Description: Subtítulo do shell.\n\nComponent Capability:\n - Path: page.widgets[].shell.icon\n Category: shell\n Kind: string\n Description: Ícone do shell.\n\nComponent Capability:\n - Path: page.widgets[].shell.showHeader\n Category: shell\n Kind: boolean\n Description: Exibe o header do shell.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions\n Category: shell\n Kind: array\n Description: Ações do shell.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions[].id\n Category: shell\n Kind: string\n Description: ID da ação.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions[].label\n Category: shell\n Kind: string\n Description: Label da ação.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions[].icon\n Category: shell\n Kind: string\n Description: Ícone da ação.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions[].variant\n Category: shell\n Kind: enum\n Description: Estilo visual da ação.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions[].placement\n Category: shell\n Kind: enum\n Description: Posicionamento da ação.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions[].emit\n Category: shell\n Kind: string\n Description: Evento emitido ao acionar a ação.\n\nComponent Capability:\n - Path: page.state.schema.<token>.type\n Category: state\n Kind: string\n Description: Tipo semantico opcional do path de estado.\n\nComponent Capability:\n - Path: page.state.schema.<token>.initial\n Category: state\n Kind: object\n Description: Valor inicial usado quando page.state.values omite o path.\n\nComponent Capability:\n - Path: page.state.schema.<token>.persist\n Category: state\n Kind: boolean\n Description: Indica se o path primário deve ser persistido com a página.\n\nComponent Capability:\n - Path: page.state.schema.<token>.mergeStrategy\n Category: state\n Kind: enum\n Description: Como escritas de widget/estado combinam com o valor atual.\n\nComponent Capability:\n - Path: page.state.schema.<token>.description\n Category: state\n Kind: string\n Description: Descrição opcional do path para builders e catálogos AI.\n\nComponent Capability:\n - Path: page.state.schema.<token>.tags\n Category: state\n Kind: array\n Description: Tags opcionais para busca e governanca do estado.\n\nComponent Capability:\n - Path: page.state.derived.<token>.dependsOn\n Category: state\n Kind: array\n Description: Paths de estado que alimentam o valor derivado.\n\nComponent Capability:\n - Path: page.state.derived.<token>.compute\n Category: state\n Kind: object\n Description: Descritor de computacao do estado derivado.\n\nComponent Capability:\n - Path: page.state.derived.<token>.compute.kind\n Category: state\n Kind: enum\n Description: Tipo de computacao do estado derivado
|
|
3067
|
+
"content": "Component Capability:\n - Path: page.layoutPreset\n Category: layout\n Kind: string\n Description: ID canônico opcional do preset estrutural da página.\n\nComponent Capability:\n - Path: page.layoutPresetOptions\n Category: layout\n Kind: object\n Description: Opções específicas do preset estrutural consumidas por builders e runtimes futuros.\n\nComponent Capability:\n - Path: page.themePreset\n Category: appearance\n Kind: string\n Description: ID opcional do preset de tema para shell, gráficos, densidade e defaults visuais.\n\nComponent Capability:\n - Path: page.layout\n Category: layout\n Kind: object\n Description: Layout base da página.\n\nComponent Capability:\n - Path: page.layout.orientation\n Category: layout\n Kind: enum\n Description: Orientacao do grid (vertical/columns).\n\nComponent Capability:\n - Path: page.layout.columns\n Category: layout\n Kind: number\n Description: Numero de colunas (quando orientation=columns).\n\nComponent Capability:\n - Path: page.layout.gap\n Category: layout\n Kind: string\n Description: Gap entre widgets (ex: 16px).\n\nComponent Capability:\n - Path: page.layout.breakpoints\n Category: layout\n Kind: object\n Description: Colunas por breakpoint.\n\nComponent Capability:\n - Path: page.layout.breakpoints.sm\n Category: layout\n Kind: number\n Description: Colunas para breakpoint sm.\n\nComponent Capability:\n - Path: page.layout.breakpoints.md\n Category: layout\n Kind: number\n Description: Colunas para breakpoint md.\n\nComponent Capability:\n - Path: page.layout.breakpoints.lg\n Category: layout\n Kind: number\n Description: Colunas para breakpoint lg.\n\nComponent Capability:\n - Path: page.layout.breakpoints.xl\n Category: layout\n Kind: number\n Description: Colunas para breakpoint xl.\n\nComponent Capability:\n - Path: page.canvas.collisionPolicy\n Category: layout\n Kind: enum\n Description: Politica de colisao do canvas espacial.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.zIndex\n Category: layout\n Kind: number\n Description: Camada opcional do item no canvas.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints\n Category: layout\n Kind: object\n Description: Restricoes opcionais de posicao e tamanho do item no canvas.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints.minColSpan\n Category: layout\n Kind: number\n Description: Span mínimo de colunas permitido.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints.minRowSpan\n Category: layout\n Kind: number\n Description: Span mínimo de linhas permitido.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints.maxColSpan\n Category: layout\n Kind: number\n Description: Span máximo de colunas permitido.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints.maxRowSpan\n Category: layout\n Kind: number\n Description: Span máximo de linhas permitido.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints.lockPosition\n Category: layout\n Kind: boolean\n Description: Bloqueia alteracao de posicao do item no canvas.\n\nComponent Capability:\n - Path: page.canvas.items.<widgetKey>.constraints.lockSize\n Category: layout\n Kind: boolean\n Description: Bloqueia alteracao de tamanho do item no canvas.\n\nComponent Capability:\n - Path: page.widgets[].definition.inputs.hostCapabilities\n Category: widgets\n Kind: object\n Description: Capacidades runtime mediadas pelo host quando definition.id = praxis-rich-content. Não pertence ao JSON persistido.\n\nComponent Capability:\n - Path: page.widgets[].definition.inputs.hostCapabilities.dispatchAction\n Category: widgets\n Kind: object\n Description: Dispatcher runtime para actionButton e actions declarativas de rich content hospedado na página.\n\nComponent Capability:\n - Path: page.widgets[].definition.inputs.hostCapabilities.isActionAvailable\n Category: widgets\n Kind: object\n Description: Resolver runtime de disponibilidade de actionId para rich content hospedado na página.\n\nComponent Capability:\n - Path: page.widgets[].definition.inputs.hostCapabilities.hasCapability\n Category: widgets\n Kind: object\n Description: Resolver runtime de capabilities como page.customization.enabled e page.widget.selected para rich content hospedado na página.\n\nComponent Capability:\n - Path: page.widgets[].shell\n Category: shell\n Kind: object\n Description: Configuração do shell do widget.\n\nComponent Capability:\n - Path: page.widgets[].shell.kind\n Category: shell\n Kind: enum\n Description: Tipo de shell.\n\nComponent Capability:\n - Path: page.widgets[].shell.title\n Category: shell\n Kind: string\n Description: Título do shell.\n\nComponent Capability:\n - Path: page.widgets[].shell.subtitle\n Category: shell\n Kind: string\n Description: Subtítulo do shell.\n\nComponent Capability:\n - Path: page.widgets[].shell.icon\n Category: shell\n Kind: string\n Description: Ícone do shell.\n\nComponent Capability:\n - Path: page.widgets[].shell.showHeader\n Category: shell\n Kind: boolean\n Description: Exibe o header do shell.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions\n Category: shell\n Kind: array\n Description: Ações do shell.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions[].id\n Category: shell\n Kind: string\n Description: ID da ação.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions[].label\n Category: shell\n Kind: string\n Description: Label da ação.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions[].icon\n Category: shell\n Kind: string\n Description: Ícone da ação.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions[].variant\n Category: shell\n Kind: enum\n Description: Estilo visual da ação.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions[].placement\n Category: shell\n Kind: enum\n Description: Posicionamento da ação.\n\nComponent Capability:\n - Path: page.widgets[].shell.actions[].emit\n Category: shell\n Kind: string\n Description: Evento emitido ao acionar a ação.\n\nComponent Capability:\n - Path: page.state.schema.<token>.type\n Category: state\n Kind: string\n Description: Tipo semantico opcional do path de estado.\n\nComponent Capability:\n - Path: page.state.schema.<token>.initial\n Category: state\n Kind: object\n Description: Valor inicial usado quando page.state.values omite o path.\n\nComponent Capability:\n - Path: page.state.schema.<token>.persist\n Category: state\n Kind: boolean\n Description: Indica se o path primário deve ser persistido com a página.\n\nComponent Capability:\n - Path: page.state.schema.<token>.mergeStrategy\n Category: state\n Kind: enum\n Description: Como escritas de widget/estado combinam com o valor atual.\n\nComponent Capability:\n - Path: page.state.schema.<token>.description\n Category: state\n Kind: string\n Description: Descrição opcional do path para builders e catálogos AI.\n\nComponent Capability:\n - Path: page.state.schema.<token>.tags\n Category: state\n Kind: array\n Description: Tags opcionais para busca e governanca do estado.\n\nComponent Capability:\n - Path: page.state.derived.<token>.dependsOn\n Category: state\n Kind: array\n Description: Paths de estado que alimentam o valor derivado.\n\nComponent Capability:\n - Path: page.state.derived.<token>.compute\n Category: state\n Kind: object\n Description: Descritor de computacao do estado derivado.\n\nComponent Capability:\n - Path: page.state.derived.<token>.compute.kind\n Category: state\n Kind: enum\n Description: Tipo de computacao do estado derivado.",
|
|
3050
3068
|
"sourcePointer": "projects/praxis-core/src/lib/ai/dynamic-page-ai-capabilities.ts",
|
|
3051
|
-
"contentHash": "
|
|
3069
|
+
"contentHash": "09a54b99e55feb49655a01920a36c8862ac437e108dce1f74620118b6de2d3cc",
|
|
3052
3070
|
"sourceKind": "component_definition",
|
|
3053
3071
|
"sourceId": "praxis-dynamic-page",
|
|
3054
3072
|
"corpusVersion": "1.0.0"
|
|
@@ -3056,9 +3074,9 @@
|
|
|
3056
3074
|
{
|
|
3057
3075
|
"chunkIndex": 5,
|
|
3058
3076
|
"chunkKind": "capabilities",
|
|
3059
|
-
"content": "Component Capability:\n - Path: page.state.derived.<token>.description\n Category: state\n Kind: string\n Description: Descrição opcional do estado derivado.\n\nComponent Capability:\n - Path: page.state.derived.<token>.cache\n Category: state\n Kind: boolean\n Description: Permite cache futuro do valor derivado.\n\nComponent Capability:\n - Path: page.composition.links[].from.kind\n Category: connections\n Kind: string\n Description: Tipo do endpoint de origem, como component-port ou state.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref\n Category: connections\n Kind: object\n Description: Referencia estruturada do endpoint de origem.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.widget\n Category: connections\n Kind: string\n Description: Widget top-level dono do endpoint de origem.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.port\n Category: connections\n Kind: string\n Description: Porta de origem do componente.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.direction\n Category: connections\n Kind: string\n Description: Direcao da porta de origem.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.nestedPath[].kind\n Category: connections\n Kind: string\n Description: Tipo do segmento nested de origem.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.nestedPath[].id\n Category: connections\n Kind: string\n Description: Identificador estrutural do segmento nested de origem.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.nestedPath[].index\n Category: connections\n Kind: number\n Description: Índice auxiliar para diagnóstico visual; não use como identidade primária.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.nestedPath[].componentType\n Category: connections\n Kind: string\n Description: Tipo do componente real do widget filho de origem.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref\n Category: connections\n Kind: object\n Description: Referencia estruturada do endpoint de destino.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.widget\n Category: connections\n Kind: string\n Description: Widget top-level dono do endpoint de destino.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.port\n Category: connections\n Kind: string\n Description: Porta de destino do componente.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.direction\n Category: connections\n Kind: string\n Description: Direcao da porta de destino.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.nestedPath[].kind\n Category: connections\n Kind: string\n Description: Tipo do segmento nested de destino.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.nestedPath[].id\n Category: connections\n Kind: string\n Description: Identificador estrutural do segmento nested de destino.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.nestedPath[].index\n Category: connections\n Kind: number\n Description: Índice auxiliar para diagnóstico visual; não use como identidade primária.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.nestedPath[].componentType\n Category: connections\n Kind: string\n Description: Tipo do componente real do widget filho de destino.\n\nComponent Capability:\n - Path: page.grouping\n Category: layout\n Kind: array\n Description: Modelo semantico opcional de secoes, abas, areas hero e rails.\n\nComponent Capability:\n - Path: page.grouping[].kind\n Category: layout\n Kind: enum\n Description: Tipo do agrupamento semantico.\n\nComponent Capability:\n - Path: page.grouping[].id\n Category: layout\n Kind: string\n Description: Identificador estavel do agrupamento.\n\nComponent Capability:\n - Path: page.grouping[].label\n Category: layout\n Kind: string\n Description: Rotulo opcional do agrupamento.\n\nComponent Capability:\n - Path: page.grouping[].widgetKeys\n Category: layout\n Kind: array\n Description: Widgets pertencentes ao agrupamento section, hero ou rail.\n\nComponent Capability:\n - Path: page.grouping[].layout\n Category: layout\n Kind: enum\n Description: Layout opcional para agrupamento section.\n\nComponent Capability:\n - Path: page.grouping[].tabs\n Category: layout\n Kind: array\n Description: Abas do agrupamento kind=tabs.\n\nComponent Capability:\n - Path: page.grouping[].tabs[].id\n Category: layout\n Kind: string\n Description: Identificador estavel da aba.\n\nComponent Capability:\n - Path: page.grouping[].tabs[].label\n Category: layout\n Kind: string\n Description: Rotulo da aba.\n\nComponent Capability:\n - Path: page.grouping[].tabs[].widgetKeys\n Category: layout\n Kind: array\n Description: Widgets renderizados dentro da aba.\n\nComponent Capability:\n - Path: page.grouping[].emphasis\n Category: layout\n Kind: enum\n Description: Enfase opcional para agrupamento hero.\n\nComponent Capability:\n - Path: page.grouping[].side\n Category: layout\n Kind: enum\n Description: Lado do rail quando kind=rail.\n\nComponent Capability:\n - Path: page.slotAssignments\n Category: layout\n Kind: object\n Description: Mapa canonico de widget key para slot semantico de preset.\n\nComponent Capability:\n - Path: page.deviceLayouts\n Category: layout\n Kind: object\n Description: Variantes opcionais de layout por dispositivo.\n\nComponent Capability:\n - Path: page.deviceLayouts.desktop\n Category: layout\n Kind: object\n Description: Overrides de layout para desktop.\n\nComponent Capability:\n - Path: page.deviceLayouts.tablet\n Category: layout\n Kind: object\n Description: Overrides de layout para tablet.\n\nComponent Capability:\n - Path: page.deviceLayouts.mobile\n Category: layout\n Kind: object\n Description: Overrides de layout para mobile.\n\nComponent Capability:\n - Path: page.deviceLayouts.desktop.layout\n Category: layout\n Kind: object\n Description: Override de WidgetPageLayout para desktop.\n\nComponent Capability:\n - Path: page.deviceLayouts.desktop.canvas\n Category: layout\n Kind: object\n Description: Override de canvas para desktop.\n\nComponent Capability:\n - Path: page.deviceLayouts.desktop.groupingOverrides\n Category: layout\n Kind: array\n Description: Overrides de agrupamentos para desktop.\n\nComponent Capability:\n - Path: page.deviceLayouts.desktop.widgetOverrides\n Category: layout\n Kind: object\n Description: Overrides por widget key para desktop.\n\nComponent Capability:\n - Path: page.deviceLayouts.desktop.widgetOverrides.<widgetKey>.hidden\n Category: layout\n Kind: boolean\n Description: Oculta o widget em desktop.\n\nComponent Capability:\n - Path: page.deviceLayouts.tablet.layout\n Category: layout\n Kind: object\n Description: Override de WidgetPageLayout para tablet
|
|
3077
|
+
"content": "Component Capability:\n - Path: page.state.derived.<token>.compute.expression\n Category: state\n Kind: expression\n Description: Expressao Json Logic para compute.kind=json-logic.\n\nComponent Capability:\n - Path: page.state.derived.<token>.compute.value\n Category: state\n Kind: object\n Description: Valor template para compute.kind=template.\n\nComponent Capability:\n - Path: page.state.derived.<token>.compute.operator\n Category: state\n Kind: string\n Description: Operador para compute.kind=operator.\n\nComponent Capability:\n - Path: page.state.derived.<token>.compute.options\n Category: state\n Kind: object\n Description: Opções do operador ou transformer.\n\nComponent Capability:\n - Path: page.state.derived.<token>.compute.transformerId\n Category: state\n Kind: string\n Description: Identificador do transformer para compute.kind=transformer.\n\nComponent Capability:\n - Path: page.state.derived.<token>.description\n Category: state\n Kind: string\n Description: Descrição opcional do estado derivado.\n\nComponent Capability:\n - Path: page.state.derived.<token>.cache\n Category: state\n Kind: boolean\n Description: Permite cache futuro do valor derivado.\n\nComponent Capability:\n - Path: page.composition.links[].from.kind\n Category: connections\n Kind: string\n Description: Tipo do endpoint de origem, como component-port ou state.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref\n Category: connections\n Kind: object\n Description: Referencia estruturada do endpoint de origem.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.widget\n Category: connections\n Kind: string\n Description: Widget top-level dono do endpoint de origem.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.port\n Category: connections\n Kind: string\n Description: Porta de origem do componente.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.direction\n Category: connections\n Kind: string\n Description: Direcao da porta de origem.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.nestedPath[].kind\n Category: connections\n Kind: string\n Description: Tipo do segmento nested de origem.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.nestedPath[].id\n Category: connections\n Kind: string\n Description: Identificador estrutural do segmento nested de origem.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.nestedPath[].index\n Category: connections\n Kind: number\n Description: Índice auxiliar para diagnóstico visual; não use como identidade primária.\n\nComponent Capability:\n - Path: page.composition.links[].from.ref.nestedPath[].componentType\n Category: connections\n Kind: string\n Description: Tipo do componente real do widget filho de origem.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref\n Category: connections\n Kind: object\n Description: Referencia estruturada do endpoint de destino.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.widget\n Category: connections\n Kind: string\n Description: Widget top-level dono do endpoint de destino.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.port\n Category: connections\n Kind: string\n Description: Porta de destino do componente.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.direction\n Category: connections\n Kind: string\n Description: Direcao da porta de destino.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.nestedPath[].kind\n Category: connections\n Kind: string\n Description: Tipo do segmento nested de destino.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.nestedPath[].id\n Category: connections\n Kind: string\n Description: Identificador estrutural do segmento nested de destino.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.nestedPath[].index\n Category: connections\n Kind: number\n Description: Índice auxiliar para diagnóstico visual; não use como identidade primária.\n\nComponent Capability:\n - Path: page.composition.links[].to.ref.nestedPath[].componentType\n Category: connections\n Kind: string\n Description: Tipo do componente real do widget filho de destino.\n\nComponent Capability:\n - Path: page.grouping\n Category: layout\n Kind: array\n Description: Modelo semantico opcional de secoes, abas, areas hero e rails.\n\nComponent Capability:\n - Path: page.grouping[].kind\n Category: layout\n Kind: enum\n Description: Tipo do agrupamento semantico.\n\nComponent Capability:\n - Path: page.grouping[].id\n Category: layout\n Kind: string\n Description: Identificador estavel do agrupamento.\n\nComponent Capability:\n - Path: page.grouping[].label\n Category: layout\n Kind: string\n Description: Rotulo opcional do agrupamento.\n\nComponent Capability:\n - Path: page.grouping[].widgetKeys\n Category: layout\n Kind: array\n Description: Widgets pertencentes ao agrupamento section, hero ou rail.\n\nComponent Capability:\n - Path: page.grouping[].layout\n Category: layout\n Kind: enum\n Description: Layout opcional para agrupamento section.\n\nComponent Capability:\n - Path: page.grouping[].tabs\n Category: layout\n Kind: array\n Description: Abas do agrupamento kind=tabs.\n\nComponent Capability:\n - Path: page.grouping[].tabs[].id\n Category: layout\n Kind: string\n Description: Identificador estavel da aba.\n\nComponent Capability:\n - Path: page.grouping[].tabs[].label\n Category: layout\n Kind: string\n Description: Rotulo da aba.\n\nComponent Capability:\n - Path: page.grouping[].tabs[].widgetKeys\n Category: layout\n Kind: array\n Description: Widgets renderizados dentro da aba.\n\nComponent Capability:\n - Path: page.grouping[].emphasis\n Category: layout\n Kind: enum\n Description: Enfase opcional para agrupamento hero.\n\nComponent Capability:\n - Path: page.grouping[].side\n Category: layout\n Kind: enum\n Description: Lado do rail quando kind=rail.\n\nComponent Capability:\n - Path: page.slotAssignments\n Category: layout\n Kind: object\n Description: Mapa canonico de widget key para slot semantico de preset.\n\nComponent Capability:\n - Path: page.deviceLayouts\n Category: layout\n Kind: object\n Description: Variantes opcionais de layout por dispositivo.\n\nComponent Capability:\n - Path: page.deviceLayouts.desktop\n Category: layout\n Kind: object\n Description: Overrides de layout para desktop.\n\nComponent Capability:\n - Path: page.deviceLayouts.tablet\n Category: layout\n Kind: object\n Description: Overrides de layout para tablet.\n\nComponent Capability:\n - Path: page.deviceLayouts.mobile\n Category: layout\n Kind: object\n Description: Overrides de layout para mobile.\n\nComponent Capability:\n - Path: page.deviceLayouts.desktop.layout\n Category: layout\n Kind: object\n Description: Override de WidgetPageLayout para desktop.\n\nComponent Capability:\n - Path: page.deviceLayouts.desktop.canvas\n Category: layout\n Kind: object\n Description: Override de canvas para desktop.\n\nComponent Capability:\n - Path: page.deviceLayouts.desktop.groupingOverrides\n Category: layout\n Kind: array\n Description: Overrides de agrupamentos para desktop.\n\nComponent Capability:\n - Path: page.deviceLayouts.desktop.widgetOverrides\n Category: layout\n Kind: object\n Description: Overrides por widget key para desktop.\n\nComponent Capability:\n - Path: page.deviceLayouts.desktop.widgetOverrides.<widgetKey>.hidden\n Category: layout\n Kind: boolean\n Description: Oculta o widget em desktop.\n\nComponent Capability:\n - Path: page.deviceLayouts.tablet.layout\n Category: layout\n Kind: object\n Description: Override de WidgetPageLayout para tablet.",
|
|
3060
3078
|
"sourcePointer": "projects/praxis-core/src/lib/ai/dynamic-page-ai-capabilities.ts",
|
|
3061
|
-
"contentHash": "
|
|
3079
|
+
"contentHash": "ca1403a372c363adb3a72bb54548d9ffa18f6d24666eef9d9bd1cd88b6ff42be",
|
|
3062
3080
|
"sourceKind": "component_definition",
|
|
3063
3081
|
"sourceId": "praxis-dynamic-page",
|
|
3064
3082
|
"corpusVersion": "1.0.0"
|
|
@@ -3066,9 +3084,9 @@
|
|
|
3066
3084
|
{
|
|
3067
3085
|
"chunkIndex": 6,
|
|
3068
3086
|
"chunkKind": "capabilities",
|
|
3069
|
-
"content": "Component Capability:\n - Path: page.deviceLayouts.mobile.canvas\n Category: layout\n Kind: object\n Description: Override de canvas para mobile.\n\nComponent Capability:\n - Path: page.deviceLayouts.mobile.groupingOverrides\n Category: layout\n Kind: array\n Description: Overrides de agrupamentos para mobile.\n\nComponent Capability:\n - Path: page.deviceLayouts.mobile.widgetOverrides\n Category: layout\n Kind: object\n Description: Overrides por widget key para mobile.\n\nComponent Capability:\n - Path: page.deviceLayouts.mobile.widgetOverrides.<widgetKey>.hidden\n Category: layout\n Kind: boolean\n Description: Oculta o widget em mobile.\n\nCapability Note:\n - page segue o modelo canonico WidgetPageDefinition (widgets, composition.links, context e state opcional); composition.links pode despachar actions globais via to.kind = global-action e receber continuations exatas via from.kind = global-action.\n\nCapability Note:\n - Conteudo editorial rico deve ser modelado como widget praxis-rich-content com definition.inputs.document: RichContentDocument, nao como DSL local do page-builder.\n\nCapability Note:\n - Quando definition.id = praxis-rich-content em uma pagina dinamica, definition.inputs.document continua sendo o contrato persistido; hostCapabilities e mediado em runtime pelo host praxis-dynamic-page e nao deve ser serializado no JSON da pagina.\n\nCapability Note:\n - Edicao visual de inputs de widget deve usar ComponentDocMeta.configEditor ou ComponentDocMeta.authoringManifestRef publicado pela lib dona do componente; nao criar editor local no page-builder para semantica de outro pacote.\n\nCapability Note:\n - Canvas e o modelo espacial canonico da pagina quando houver posicionamento explicito.\n\nCapability Note:\n - Taxonomia editorial: condition usa Json Logic canonico; transform usa pipeline declarativo; policy cobre apenas comportamento operacional.\n\nCapability Note:\n - Para criacao agentic de paginas, o preview pode trazer uiCompositionPlan como plano intermediario validavel; o page-builder compila esse plano para WidgetPageDefinition antes de aplicar.\n\nCapability Note:\n - UiCompositionPlan usa widgets[].componentId e bindings declarativos. UiCompositionPlanTemplateReference pode piná-lo por registryKey + configSha256, mas precisa ser resolvido pelo backend governado antes da compilação. O JSON persistido continua sendo page.widgets[].definition.id e page.composition.links.\n\nCapability Note:\n - Nested component ports usam endpoint component-port com nestedPath. O owner em ref.widget ou bindings[].*.widget continua sendo o widget top-level; a porta real do filho fica em port/direction e o caminho ate o filho fica em nestedPath.\n\nCapability Note:\n - Nao gere links nested via owner.widgetEvent, bindingPath profundo, page.connections ou wrappers host-specific. widgetEvent e bridge legada/avancada, nao contrato principal de authoring.\n\nCapability Note:\n - Payloads legados de layout ainda podem ser ingeridos, mas sao normalizados para canvas e nao devem ser reemitidos.\n\nCapability Note:\n - pageIdentity identifica o escopo de persistencia e nao pertence ao objeto page.\n\nCapability Note:\n - authoringCapabilities é um grant transitório do host para limitar affordances visíveis; não integra WidgetPageDefinition, não é persistido e não concede autoridade de edição à IA.\n\nCapability Note:\n - Este catálogo é específico para o runtime praxis-dynamic-page; operações de authoring/mutação pertencem ao manifesto do praxis-page-builder.\n\nCapability Note:\n - WidgetPageDefinition e o contrato canonico persistido: widgets, composition.links, state, context, i18n, layout, canvas, presets, grouping, slotAssignments, deviceLayouts e themePreset.\n\nCapability Note:\n - Widgets e page.composition.links sao arrays; ferramentas de patch legadas fazem merge por key estavel e id estavel.\n\nCapability Note:\n - page.canvas.items é um mapa por widget key; não modele canvas.items como array.\n\nCapability Note:\n - Taxonomia editorial: condition usa Json Logic canônico; transform usa pipeline declarativo; não trate ambos como a mesma \"expression\".\n\nCapability Note:\n - Para remocao/replace, use flags {_remove:true} ou {_replace:true} no item.\n\nCapability Note:\n - Para renomear um link, inclua {_beforeKey:\"link-id-anterior\"} no item.\n\nCapability Note:\n - Inputs de widgets dependem do componente (ex: praxis-table, praxis-dynamic-form). Evite inventar campos; prefira pedir confirmação.\n\nCapability Note:\n - Quando page.widgets[].definition.id for praxis-rich-content, o host praxis-dynamic-page injeta hostCapabilities em runtime para actions e capability gating; não serialize funções nem tente persistir page.widgets[].definition.inputs.hostCapabilities.\n\nCapability Note:\n - Use ids estaveis para links e keys estaveis para widgets.\n\nCapability Note:\n - Nested component ports usam endpoint component-port com nestedPath; o owner em ref.widget continua sendo o widget top-level.\n\nCapability Note:\n - Objetivo: compor widgets e relacionamentos canonicos (ex.: master-detail).\n\nCapability Note:\n - Link tipico de master-detail: component-port(table.rowClick) -> component-port(form.resourceId) com transform map payload.row.id.",
|
|
3087
|
+
"content": "Component Capability:\n - Path: page.deviceLayouts.tablet.canvas\n Category: layout\n Kind: object\n Description: Override de canvas para tablet.\n\nComponent Capability:\n - Path: page.deviceLayouts.tablet.groupingOverrides\n Category: layout\n Kind: array\n Description: Overrides de agrupamentos para tablet.\n\nComponent Capability:\n - Path: page.deviceLayouts.tablet.widgetOverrides\n Category: layout\n Kind: object\n Description: Overrides por widget key para tablet.\n\nComponent Capability:\n - Path: page.deviceLayouts.tablet.widgetOverrides.<widgetKey>.hidden\n Category: layout\n Kind: boolean\n Description: Oculta o widget em tablet.\n\nComponent Capability:\n - Path: page.deviceLayouts.mobile.layout\n Category: layout\n Kind: object\n Description: Override de WidgetPageLayout para mobile.\n\nComponent Capability:\n - Path: page.deviceLayouts.mobile.canvas\n Category: layout\n Kind: object\n Description: Override de canvas para mobile.\n\nComponent Capability:\n - Path: page.deviceLayouts.mobile.groupingOverrides\n Category: layout\n Kind: array\n Description: Overrides de agrupamentos para mobile.\n\nComponent Capability:\n - Path: page.deviceLayouts.mobile.widgetOverrides\n Category: layout\n Kind: object\n Description: Overrides por widget key para mobile.\n\nComponent Capability:\n - Path: page.deviceLayouts.mobile.widgetOverrides.<widgetKey>.hidden\n Category: layout\n Kind: boolean\n Description: Oculta o widget em mobile.\n\nCapability Note:\n - page segue o modelo canonico WidgetPageDefinition (widgets, composition.links, context e state opcional); composition.links pode despachar actions globais via to.kind = global-action e receber continuations exatas via from.kind = global-action.\n\nCapability Note:\n - Conteudo editorial rico deve ser modelado como widget praxis-rich-content com definition.inputs.document: RichContentDocument, nao como DSL local do page-builder.\n\nCapability Note:\n - Quando definition.id = praxis-rich-content em uma pagina dinamica, definition.inputs.document continua sendo o contrato persistido; hostCapabilities e mediado em runtime pelo host praxis-dynamic-page e nao deve ser serializado no JSON da pagina.\n\nCapability Note:\n - Edicao visual de inputs de widget deve usar ComponentDocMeta.configEditor ou ComponentDocMeta.authoringManifestRef publicado pela lib dona do componente; nao criar editor local no page-builder para semantica de outro pacote.\n\nCapability Note:\n - Canvas e o modelo espacial canonico da pagina quando houver posicionamento explicito.\n\nCapability Note:\n - Taxonomia editorial: condition usa Json Logic canonico; transform usa pipeline declarativo; policy cobre apenas comportamento operacional.\n\nCapability Note:\n - Para criacao agentic de paginas, o preview pode trazer uiCompositionPlan como plano intermediario validavel; o page-builder compila esse plano para WidgetPageDefinition antes de aplicar.\n\nCapability Note:\n - UiCompositionPlan usa widgets[].componentId e bindings declarativos. UiCompositionPlanTemplateReference pode piná-lo por registryKey + configSha256, mas precisa ser resolvido pelo backend governado antes da compilação. O JSON persistido continua sendo page.widgets[].definition.id e page.composition.links.\n\nCapability Note:\n - Nested component ports usam endpoint component-port com nestedPath. O owner em ref.widget ou bindings[].*.widget continua sendo o widget top-level; a porta real do filho fica em port/direction e o caminho ate o filho fica em nestedPath.\n\nCapability Note:\n - Nao gere links nested via owner.widgetEvent, bindingPath profundo, page.connections ou wrappers host-specific. widgetEvent e bridge legada/avancada, nao contrato principal de authoring.\n\nCapability Note:\n - Payloads legados de layout ainda podem ser ingeridos, mas sao normalizados para canvas e nao devem ser reemitidos.\n\nCapability Note:\n - pageIdentity identifica o escopo de persistencia e nao pertence ao objeto page.\n\nCapability Note:\n - authoringCapabilities é um grant transitório do host para limitar affordances visíveis; não integra WidgetPageDefinition, não é persistido e não concede autoridade de edição à IA.\n\nCapability Note:\n - Este catálogo é específico para o runtime praxis-dynamic-page; operações de authoring/mutação pertencem ao manifesto do praxis-page-builder.\n\nCapability Note:\n - WidgetPageDefinition e o contrato canonico persistido: widgets, composition.links, state, context, i18n, layout, canvas, presets, grouping, slotAssignments, deviceLayouts e themePreset.\n\nCapability Note:\n - Widgets e page.composition.links sao arrays; ferramentas de patch legadas fazem merge por key estavel e id estavel.\n\nCapability Note:\n - page.canvas.items é um mapa por widget key; não modele canvas.items como array.\n\nCapability Note:\n - Taxonomia editorial: condition usa Json Logic canônico; transform usa pipeline declarativo; não trate ambos como a mesma \"expression\".\n\nCapability Note:\n - Para remocao/replace, use flags {_remove:true} ou {_replace:true} no item.\n\nCapability Note:\n - Para renomear um link, inclua {_beforeKey:\"link-id-anterior\"} no item.\n\nCapability Note:\n - Inputs de widgets dependem do componente (ex: praxis-table, praxis-dynamic-form). Evite inventar campos; prefira pedir confirmação.\n\nCapability Note:\n - Quando page.widgets[].definition.id for praxis-rich-content, o host praxis-dynamic-page injeta hostCapabilities em runtime para actions e capability gating; não serialize funções nem tente persistir page.widgets[].definition.inputs.hostCapabilities.\n\nCapability Note:\n - Use ids estaveis para links e keys estaveis para widgets.\n\nCapability Note:\n - Nested component ports usam endpoint component-port com nestedPath; o owner em ref.widget continua sendo o widget top-level.\n\nCapability Note:\n - Objetivo: compor widgets e relacionamentos canonicos (ex.: master-detail).\n\nCapability Note:\n - Link tipico de master-detail: component-port(table.rowClick) -> component-port(form.resourceId) com transform map payload.row.id.",
|
|
3070
3088
|
"sourcePointer": "projects/praxis-core/src/lib/ai/dynamic-page-ai-capabilities.ts",
|
|
3071
|
-
"contentHash": "
|
|
3089
|
+
"contentHash": "c127bf746d97bc0ffa7527c6eec1c1116342aa6b7e9bd33be2942b33a0121015",
|
|
3072
3090
|
"sourceKind": "component_definition",
|
|
3073
3091
|
"sourceId": "praxis-dynamic-page",
|
|
3074
3092
|
"corpusVersion": "1.0.0"
|
|
@@ -4076,6 +4094,386 @@
|
|
|
4076
4094
|
{
|
|
4077
4095
|
"chunkIndex": 107,
|
|
4078
4096
|
"chunkKind": "recipe",
|
|
4097
|
+
"content": "{\"_comment\":\"Template governado do laboratório Praxis para o arquétipo Ergon command-action.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantOf\":\"praxis-dynamic-page\",\"variantId\":\"ergon-archetype-command-action\",\"label\":\"Seleção, parâmetros, validação e retorno do comando\",\"description\":\"Prova actions reais e reversíveis sobre acordos regulatórios: discovery contextual, formulário derivado de schema, confirmação e read-after-write.\",\"useWhen\":\"Materialize o arquétipo operacional command-action com composição semântica certificável.\",\"examplePrompts\":[\"Crie uma tela command-action usando o arquétipo certificado Praxis.\",\"Materialize o caso command-action com Dynamic Page e UiCompositionPlan.\"]},\"aiDescription\":\"Prova actions reais e reversíveis sobre acordos regulatórios sem copiar regra de estado, schema ou endpoint para o plano.\",\"certification\":{\"status\":\"operational-proof\",\"route\":\"/dynamic-page-lab/archetypes/command-action\",\"legacyEvidence\":[\"ERGadm00189 · Operações de frequência\",\"Padrões Ergon de ação com validação e read-after-write\"],\"acceptance\":[\"Action disponível somente no estado permitido\",\"Justificativa validada por schema\",\"Confirmação explícita antes da mutação\",\"Status atualizado por read-after-write\",\"Estado inicial restaurado com alvo exato\"]},\"teaches\":[\"ui-composition-plan\",\"dynamic-page\",\"composition.links\",\"ergon-archetype.command-action\"],\"authoringPlanRef\":\"./praxis-dynamic-page.ergon-archetype-command-action.ui-composition-plan.artifact.json\",\"authoringPlan\":{\"version\":\"1.0\",\"kind\":\"praxis.ui-composition-plan\",\"layoutPreset\":\"ergon-command-action\",\"themePreset\":\"enterprise-operational\",\"canvas\":{\"mode\":\"grid\",\"columns\":12,\"rowUnit\":\"auto\",\"gap\":\"16px\",\"autoRows\":\"content\",\"items\":{\"agreements\":{\"col\":1,\"row\":1,\"colSpan\":12,\"rowSpan\":1}}},\"deviceLayouts\":{\"mobile\":{\"canvas\":{\"mode\":\"grid\",\"columns\":1,\"rowUnit\":\"auto\",\"gap\":\"12px\",\"autoRows\":\"content\",\"items\":{\"agreements\":{\"col\":1,\"row\":1,\"colSpan\":1,\"rowSpan\":1}}}}},\"widgets\":[{\"key\":\"agreements\",\"componentId\":\"praxis-crud\",\"role\":\"business-command-target\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"gavel\",\"title\":\"Acordos regulatórios\",\"subtitle\":\"Ações governadas por estado, schema, capabilities e HATEOAS reais\",\"bodyLayout\":\"fill\",\"windowActions\":{\"fullscreen\":true,\"collapsible\":true}},\"bindingOrder\":[\"metadata\",\"crudId\",\"componentInstanceId\",\"enableCustomization\"],\"inputs\":{\"crudId\":\"quickstart-regulatory-agreements-commands\",\"componentInstanceId\":\"quickstart-regulatory-agreements-commands\",\"enableCustomization\":false,\"metadata\":{\"component\":\"praxis-crud\",\"resource\":{\"path\":\"operations/acordos-regulatorios\",\"idField\":\"id\",\"label\":\"acordos regulatórios\"},\"table\":{\"columns\":[],\"columnProjection\":{\"source\":\"schema\",\"include\":[\"nome\",\"jurisdicao\",\"status\",\"descricao\"]},\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":8,\"pageSizeOptions\":[8,16,32],\"showFirstLastButtons\":true},\"sorting\":{\"enabled\":true,\"strategy\":\"server\",\"defaultSort\":{\"column\":\"nome\",\"direction\":\"asc\"}},\"filtering\":{\"enabled\":true,\"strategy\":\"server\",\"debounceTime\":300,\"advancedFilters\":{\"enabled\":true,\"settings\":{\"alwaysVisibleFields\":[\"nome\",\"status\"],\"mode\":\"filter\",\"allowSaveTags\":false,\"changeDebounceMs\":300,\"showAdvancedButton\":true,\"showAddButton\":true,\"showClearButton\":true,\"showSearchButton\":false,\"placeBooleansInActions\":true}}},\"selection\":{\"enabled\":true,\"type\":\"single\",\"mode\":\"row\",\"allowSelectAll\":false,\"persistSelection\":false,\"persistOnDataUpdate\":false}},\"toolbar\":{\"visible\":true,\"position\":\"top\",\"columnsVisibility\":{\"enabled\":true},\"densityToggle\":{\"enabled\":true,\"values\":[\"compact\",\"comfortable\"]}},\"appearance\":{\"density\":\"compact\",\"stickyHeader\":true,\"hoverHighlight\":true,\"responsive\":{\"breakpoints\":{\"mobile\":640},\"mobile\":{\"horizontalScroll\":false,\"cardMode\":true,\"priorityColumns\":[\"nome\",\"status\",\"jurisdicao\"]}}}},\"defaults\":{\"openMode\":\"drawer\",\"drawer\":{\"width\":\"720px\",\"maxWidth\":\"96vw\"}},\"actions\":[{\"id\":\"view\",\"action\":\"view\",\"label\":\"Visualizar\",\"openMode\":\"drawer\"}]}},\"outputs\":{\"rowAction\":\"emit\",\"resourceEvent\":\"emit\",\"afterOpen\":\"emit\",\"afterClose\":\"emit\",\"afterSave\":\"emit\",\"error\":\"emit\"}}],\"diagnostics\":{\"archetype\":\"command-action\",\"adherence\":[\"ja-suportado-mal-nomeado-ou-mal-materializado\"],\"evidence\":\"quickstart-real-http\",\"canonicalResource\":\"operations.acordos-regulatorios\",\"requiredSurfaces\":[\"POST /api/operations/acordos-regulatorios/filter\",\"GET /api/operations/acordos-regulatorios/{id}\",\"GET /api/operations/acordos-regulatorios/{id}/actions\",\"POST /api/operations/acordos-regulatorios/{id}/actions/suspend\",\"POST /api/operations/acordos-regulatorios/{id}/actions/reinstate\",\"GET /schemas/filtered\",\"GET /schemas/actions\"],\"localDataAllowed\":false,\"runtimeTarget\":\"WidgetPageDefinition.composition.links\"}}}",
|
|
4098
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-command-action.json",
|
|
4099
|
+
"contentHash": "1f2bdf206df74209349c9249e5cc895c262ce04b83e0a89a09e68ab1f83435d6",
|
|
4100
|
+
"sourceKind": "component_definition",
|
|
4101
|
+
"sourceId": "praxis-dynamic-page",
|
|
4102
|
+
"corpusVersion": "1.0.0"
|
|
4103
|
+
},
|
|
4104
|
+
{
|
|
4105
|
+
"chunkIndex": 108,
|
|
4106
|
+
"chunkKind": "recipe",
|
|
4107
|
+
"content": "{\"_comment\":\"Template governado do laboratório Praxis para o arquétipo Ergon crud-simple.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantOf\":\"praxis-dynamic-page\",\"variantId\":\"ergon-archetype-crud-simple\",\"label\":\"Cadastro tabular com filtros, ações e formulário\",\"description\":\"Prova a jornada frequente do Ergon contra o catálogo real de habilidades do Quick Start: filtrar, criar, consultar, editar e excluir com formulários materializados pelo schema.\",\"useWhen\":\"Materialize o arquétipo operacional crud-simple com composição semântica certificável.\",\"examplePrompts\":[\"Crie uma tela crud-simple usando o arquétipo certificado Praxis.\",\"Materialize o caso crud-simple com Dynamic Page e UiCompositionPlan.\"]},\"aiDescription\":\"Prova um CRUD corporativo de baixa complexidade com o recurso real human-resources.habilidades do Quick Start, sem fixture nem configuração local de campos de formulário.\",\"certification\":{\"status\":\"operational-proof\",\"route\":\"/dynamic-page-lab/archetypes/crud-simple\",\"legacyEvidence\":[\"ERGadm00001 · Tipos de dependência\",\"ERGadm00549 · Tipos de grupos de cargo\"],\"acceptance\":[\"Filtros Praxis materializados pelo schema real\",\"Seleção e ações por registro governadas por capabilities e HATEOAS\",\"Create, read, update e delete reais com limpeza determinística\",\"Formulários de criação, consulta e edição materializados pelo schema\",\"Layout estreito sem perda funcional\"]},\"teaches\":[\"ui-composition-plan\",\"dynamic-page\",\"composition.links\",\"ergon-archetype.crud-simple\"],\"authoringPlanRef\":\"./praxis-dynamic-page.ergon-archetype-crud-simple.ui-composition-plan.artifact.json\",\"authoringPlan\":{\"version\":\"1.0\",\"kind\":\"praxis.ui-composition-plan\",\"layoutPreset\":\"ergon-crud-simple\",\"themePreset\":\"enterprise-operational\",\"canvas\":{\"mode\":\"grid\",\"columns\":12,\"rowUnit\":\"auto\",\"gap\":\"16px\",\"autoRows\":\"content\",\"items\":{\"records\":{\"col\":1,\"row\":1,\"colSpan\":12,\"rowSpan\":1}}},\"deviceLayouts\":{\"mobile\":{\"canvas\":{\"mode\":\"grid\",\"columns\":1,\"rowUnit\":\"auto\",\"gap\":\"12px\",\"autoRows\":\"content\",\"items\":{\"records\":{\"col\":1,\"row\":1,\"colSpan\":1,\"rowSpan\":1}}}}},\"widgets\":[{\"key\":\"records\",\"componentId\":\"praxis-crud\",\"role\":\"primary-resource\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"psychology\",\"title\":\"Catálogo de habilidades\",\"subtitle\":\"Consulta e manutenção governadas pelo contrato real do Quick Start\",\"bodyLayout\":\"fill\",\"windowActions\":{\"fullscreen\":true,\"collapsible\":true}},\"bindingOrder\":[\"metadata\",\"crudId\",\"componentInstanceId\",\"enableCustomization\"],\"inputs\":{\"crudId\":\"quickstart-skills-crud\",\"componentInstanceId\":\"quickstart-skills-crud\",\"enableCustomization\":false,\"metadata\":{\"component\":\"praxis-crud\",\"resource\":{\"path\":\"human-resources/habilidades\",\"idField\":\"id\",\"label\":\"habilidades\"},\"table\":{\"columns\":[],\"columnProjection\":{\"source\":\"schema\",\"include\":[\"nome\",\"categoria\",\"nivelPoder\",\"descricao\"]},\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":8,\"pageSizeOptions\":[8,16,32],\"showFirstLastButtons\":true},\"sorting\":{\"enabled\":true,\"strategy\":\"server\",\"defaultSort\":{\"column\":\"nome\",\"direction\":\"asc\"}},\"filtering\":{\"enabled\":true,\"strategy\":\"server\",\"debounceTime\":300,\"advancedFilters\":{\"enabled\":true,\"settings\":{\"alwaysVisibleFields\":[\"nome\",\"categoria\"],\"mode\":\"filter\",\"allowSaveTags\":false,\"changeDebounceMs\":300,\"showAdvancedButton\":true,\"showAddButton\":true,\"showClearButton\":true,\"showSearchButton\":false,\"placeBooleansInActions\":true}}},\"selection\":{\"enabled\":true,\"type\":\"single\",\"mode\":\"row\",\"allowSelectAll\":false,\"persistSelection\":false,\"persistOnDataUpdate\":false},\"interaction\":{\"rowClick\":{\"enabled\":true,\"action\":\"select\"}}},\"toolbar\":{\"visible\":true,\"position\":\"top\",\"columnsVisibility\":{\"enabled\":true},\"densityToggle\":{\"enabled\":true,\"values\":[\"compact\",\"comfortable\"]}},\"actions\":{\"row\":{\"enabled\":true,\"position\":\"end\",\"display\":\"menu\",\"trigger\":\"always\",\"menuIcon\":\"more_vert\",\"header\":{\"label\":\"Ações\"},\"actions\":[{\"id\":\"view\",\"label\":\"Visualizar\",\"action\":\"view\",\"icon\":\"visibility\"},{\"id\":\"edit\",\"label\":\"Editar\",\"action\":\"edit\",\"icon\":\"edit\"},{\"id\":\"delete\",\"label\":\"Excluir\",\"action\":\"delete\",\"icon\":\"delete\"}]}},\"appearance\":{\"density\":\"compact\",\"stickyHeader\":true,\"hoverHighlight\":true,\"responsive\":{\"breakpoints\":{\"mobile\":640},\"mobile\":{\"horizontalScroll\":false,\"cardMode\":true,\"priorityColumns\":[\"nome\",\"categoria\",\"nivelPoder\"]}}}},\"defaults\":{\"openMode\":\"drawer\",\"drawer\":{\"width\":\"720px\",\"maxWidth\":\"96vw\"}},\"actions\":[{\"id\":\"create\",\"action\":\"create\",\"label\":\"Adicionar habilidade\",\"openMode\":\"drawer\",\"form\":{\"submitLabel\":\"Criar habilidade\"}},{\"id\":\"view\",\"action\":\"view\",\"label\":\"Visualizar\",\"openMode\":\"drawer\"},{\"id\":\"edit\",\"action\":\"edit\",\"label\":\"Editar\",\"openMode\":\"drawer\",\"form\":{\"submitLabel\":\"Salvar habilidade\"}},{\"id\":\"delete\",\"action\":\"delete\",\"label\":\"Excluir\"}]}},\"outputs\":{\"afterOpen\":\"emit\",\"afterClose\":\"emit\",\"afterSave\":\"emit\",\"afterDelete\":\"emit\",\"error\":\"emit\"}}],\"diagnostics\":{\"archetype\":\"crud-simple\",\"adherence\":[\"ja-suportado-mal-nomeado-ou-mal-materializado\"],\"evidence\":\"quickstart-real-http\",\"canonicalResource\":\"human-resources.habilidades\",\"requiredSurfaces\":[\"POST /api/human-resources/habilidades/filter\",\"POST /api/human-resources/habilidades\",\"GET /api/human-resources/habilidades/{id}\",\"PUT /api/human-resources/habilidades/{id}\",\"DELETE /api/human-resources/habilidades/{id}\",\"GET /schemas/filtered\",\"GET /schemas/surfaces\",\"GET /api/human-resources/habilidades/capabilities\"],\"localDataAllowed\":false,\"runtimeTarget\":\"WidgetPageDefinition.composition.links\"}}}",
|
|
4108
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-crud-simple.json",
|
|
4109
|
+
"contentHash": "2f63c9c2eed01b6d4f09f48ba2decd8ff2933682b90ca68b3013bb6b661f483c",
|
|
4110
|
+
"sourceKind": "component_definition",
|
|
4111
|
+
"sourceId": "praxis-dynamic-page",
|
|
4112
|
+
"corpusVersion": "1.0.0"
|
|
4113
|
+
},
|
|
4114
|
+
{
|
|
4115
|
+
"chunkIndex": 109,
|
|
4116
|
+
"chunkKind": "recipe",
|
|
4117
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment\",\"_comment\":\"Template governado do laboratório Praxis para o arquétipo Ergon master-detail-tabs usando somente APIs e surfaces reais do Quick Start.\"}",
|
|
4118
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4119
|
+
"contentHash": "2cff495f203e595827c03dce7f5ae87b228d5725ebfc876c9ccf4712cce55fd6",
|
|
4120
|
+
"sourceKind": "component_definition",
|
|
4121
|
+
"sourceId": "praxis-dynamic-page",
|
|
4122
|
+
"corpusVersion": "1.0.0"
|
|
4123
|
+
},
|
|
4124
|
+
{
|
|
4125
|
+
"chunkIndex": 110,
|
|
4126
|
+
"chunkKind": "recipe",
|
|
4127
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantOf\":\"praxis-dynamic-page\",\"variantId\":\"ergon-archetype-master-detail-tabs\",\"label\":\"Vínculo funcional com abas de detalhe e recursos relacionados\",\"description\":\"Reproduz o caso estrutural mais importante do Ergon com filtro inline, tabela mestre remota, detalhe em apresentação e coleções relacionadas descobertas por metadata.\",\"useWhen\":\"Materialize uma tela corporativa master-detail-tabs contra o Quick Start real, sem data local ou relações inventadas.\",\"examplePrompts\":[\"Crie uma tela master-detail-tabs para funcionários usando filtros inline e as item surfaces reais do Quick Start.\",\"Materialize um dossiê de funcionário com visão geral em apresentação e tabs lazy de folha, carreira, pessoas e operações.\"]}}",
|
|
4128
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4129
|
+
"contentHash": "1a8438cdbc594103b95bbf72497a272796906267bc7a06da787a14fbac1e6c4f",
|
|
4130
|
+
"sourceKind": "component_definition",
|
|
4131
|
+
"sourceId": "praxis-dynamic-page",
|
|
4132
|
+
"corpusVersion": "1.0.0"
|
|
4133
|
+
},
|
|
4134
|
+
{
|
|
4135
|
+
"chunkIndex": 111,
|
|
4136
|
+
"chunkKind": "recipe",
|
|
4137
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"aiDescription\",\"aiDescription\":\"Usa human-resources/funcionarios como recurso canônico e materializa detail e relatedResource exclusivamente a partir das APIs e surfaces reais do Quick Start.\"}",
|
|
4138
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4139
|
+
"contentHash": "fa5ef54850c5037709d889cdba27f77c2821e7caf992550c23cd7fa14c8b54f5",
|
|
4140
|
+
"sourceKind": "component_definition",
|
|
4141
|
+
"sourceId": "praxis-dynamic-page",
|
|
4142
|
+
"corpusVersion": "1.0.0"
|
|
4143
|
+
},
|
|
4144
|
+
{
|
|
4145
|
+
"chunkIndex": 112,
|
|
4146
|
+
"chunkKind": "recipe",
|
|
4147
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"certification\",\"certification\":{\"status\":\"laboratory-candidate\",\"route\":\"/dynamic-page-lab/archetypes/master-detail-tabs\",\"legacyEvidence\":[\"ERGadm00229 · Vínculos funcionais\",\"Dossiê tabulado com detalhe e coleções relacionadas ao registro selecionado\"],\"acceptance\":[\"Filtros inline Praxis contra o DTO remoto\",\"Seleção mestre propagada e revogável\",\"Tabs lazy e ids estáveis\",\"Formulário em apresentação dentro de tab\",\"Coleções filhas descobertas por item surfaces reais\",\"Troca ou remoção da seleção invalida o contexto anterior\",\"Nenhum dado local ou route mock permitido\"]}}",
|
|
4148
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4149
|
+
"contentHash": "5748f266a7000a0e8c7a3937b29f68254ba3a7452b04252ff25a57127d511713",
|
|
4150
|
+
"sourceKind": "component_definition",
|
|
4151
|
+
"sourceId": "praxis-dynamic-page",
|
|
4152
|
+
"corpusVersion": "1.0.0"
|
|
4153
|
+
},
|
|
4154
|
+
{
|
|
4155
|
+
"chunkIndex": 113,
|
|
4156
|
+
"chunkKind": "recipe",
|
|
4157
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"teaches\",\"teaches\":[\"ui-composition-plan\",\"dynamic-page\",\"composition.links\",\"ergon-archetype.master-detail-tabs\"]}",
|
|
4158
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4159
|
+
"contentHash": "73b6cd80e6a087c9ce4acf5334eb5101e429387a5e871086705c3551d0ea8f56",
|
|
4160
|
+
"sourceKind": "component_definition",
|
|
4161
|
+
"sourceId": "praxis-dynamic-page",
|
|
4162
|
+
"corpusVersion": "1.0.0"
|
|
4163
|
+
},
|
|
4164
|
+
{
|
|
4165
|
+
"chunkIndex": 114,
|
|
4166
|
+
"chunkKind": "recipe",
|
|
4167
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlanRef\",\"authoringPlanRef\":\"./praxis-dynamic-page.ergon-archetype-master-detail-tabs.ui-composition-plan.artifact.json\"}",
|
|
4168
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4169
|
+
"contentHash": "522961b2a115278b8d7c408afe2f1c7c5c9c9f2ac795851c3556a51c962c0ab0",
|
|
4170
|
+
"sourceKind": "component_definition",
|
|
4171
|
+
"sourceId": "praxis-dynamic-page",
|
|
4172
|
+
"corpusVersion": "1.0.0"
|
|
4173
|
+
},
|
|
4174
|
+
{
|
|
4175
|
+
"chunkIndex": 115,
|
|
4176
|
+
"chunkKind": "recipe",
|
|
4177
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan\",\"authoringPlan\":{\"version\":\"1.0\",\"kind\":\"praxis.ui-composition-plan\"}}",
|
|
4178
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4179
|
+
"contentHash": "bcccf6b894f9db6b7d7ac637e4c02cf12768266a830c5d6a48d36d273f7f78e2",
|
|
4180
|
+
"sourceKind": "component_definition",
|
|
4181
|
+
"sourceId": "praxis-dynamic-page",
|
|
4182
|
+
"corpusVersion": "1.0.0"
|
|
4183
|
+
},
|
|
4184
|
+
{
|
|
4185
|
+
"chunkIndex": 116,
|
|
4186
|
+
"chunkKind": "recipe",
|
|
4187
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan.i18n\",\"authoringPlan\":{\"i18n\":{\"fallbackLocale\":\"pt-BR\"}}}",
|
|
4188
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4189
|
+
"contentHash": "735874f9299502d122f1dd4e323547d68a0136c3b3ed9f9bb1f743d8d478890b",
|
|
4190
|
+
"sourceKind": "component_definition",
|
|
4191
|
+
"sourceId": "praxis-dynamic-page",
|
|
4192
|
+
"corpusVersion": "1.0.0"
|
|
4193
|
+
},
|
|
4194
|
+
{
|
|
4195
|
+
"chunkIndex": 117,
|
|
4196
|
+
"chunkKind": "recipe",
|
|
4197
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan.i18n.dictionaries\",\"authoringPlan\":{\"i18n\":{\"dictionaries\":{\"pt-BR\":{\"employeeOperations.portfolio.shell.title\":\"Gestão de pessoas\",\"employeeOperations.portfolio.shell.subtitle\":\"Encontre funcionários, atualize vínculos e consulte o dossiê sem sair da carteira\",\"employeeOperations.portfolio.resource.title\":\"Funcionários\",\"employeeOperations.portfolio.resource.formTitle\":\"Cadastro do funcionário\",\"employeeOperations.portfolio.toolbar.title\":\"Carteira de funcionários\",\"employeeOperations.portfolio.toolbar.subtitle\":\"Dados cadastrais, área, vínculo e remuneração em uma única visão\",\"employeeOperations.portfolio.search.placeholder\":\"Buscar por nome, e-mail, cargo ou departamento\",\"employeeOperations.portfolio.quickFilter.active\":\"Ativos\",\"employeeOperations.portfolio.quickFilter.inactive\":\"Inativos\",\"employeeOperations.portfolio.column.person\":\"Pessoa\",\"employeeOperations.portfolio.column.employee\":\"Funcionário\",\"employeeOperations.portfolio.column.employment\":\"Vínculo\",\"employeeOperations.portfolio.column.role\":\"Cargo\",\"employeeOperations.portfolio.column.department\":\"Departamento\",\"employeeOperations.portfolio.column.hiredAt\":\"Admissão\",\"employeeOperations.portfolio.column.salary\":\"Salário base\",\"employeeOperations.portfolio.column.contact\":\"Contato\",\"employeeOperations.portfolio.status.active\":\"Ativo\",\"employeeOperations.portfolio.status.inactive\":\"Inativo\",\"employeeOperations.portfolio.actions.header\":\"Ações\",\"employeeOperations.portfolio.actions.tooltip\":\"Visualizar, editar ou atualizar o vínculo\",\"employeeOperations.portfolio.action.view\":\"Visualizar\",\"employeeOperations.portfolio.action.view.tooltip\":\"Ver dados do funcionário\",\"employeeOperations.portfolio.action.edit\":\"Editar\",\"employeeOperations.portfolio.action.edit.tooltip\":\"Editar dados do funcionário\",\"employeeOperations.portfolio.action.deactivate\":\"Inativar\",\"employeeOperations.portfolio.action.deactivate.tooltip\":\"Inativar vínculo e registrar motivo e vigência\",\"employeeOperations.portfolio.action.reactivate\":\"Reativar\",\"employeeOperations.portfolio.action.reactivate.tooltip\":\"Reativar vínculo e registrar motivo e vigência\",\"employeeOperations.dossier.shell.title\":\"Dossiê do funcionário\",\"employeeOperations.dossier.shell.subtitle\":\"Selecione uma pessoa para consultar dados, folha, carreira e atividades relacionadas\",\"employeeOperations.dossier.ariaLabel\":\"Perspectivas do dossiê operacional do funcionário\",\"employeeOperations.dossier.tab.summary\":\"Dossiê\",\"employeeOperations.dossier.tab.payroll\":\"Folha\",\"employeeOperations.dossier.tab.career\":\"Carreira\",\"employeeOperations.dossier.tab.people\":\"Pessoas\",\"employeeOperations.dossier.tab.operations\":\"Operação\",\"employeeOperations.dossier.context.meta\":\"Contexto ativo do dossiê\",\"employeeOperations.dossier.context.employeeId\":\"ID do funcionário\",\"employeeOperations.dossier.callout.title\":\"Comece por aqui\",\"employeeOperations.dossier.callout.message\":\"Selecione uma pessoa na carteira para atualizar todo o dossiê. Use as ações da linha para visualizar, editar, inativar ou reativar o vínculo.\",\"employeeOperations.payroll.title\":\"Histórico analítico de folha\",\"employeeOperations.payroll.subtitle\":\"Competência, composição e eventos do funcionário selecionado\",\"employeeOperations.column.period\":\"Competência\",\"employeeOperations.column.gross\":\"Bruto\",\"employeeOperations.column.discounts\":\"Descontos\",\"employeeOperations.column.net\":\"Líquido\",\"employeeOperations.column.events\":\"Eventos\",\"employeeOperations.column.composition\":\"Composição\",\"employeeOperations.skills.title\":\"Matriz de competências\",\"employeeOperations.column.skill\":\"Competência\",\"employeeOperations.column.proficiency\":\"Proficiência\",\"employeeOperations.column.origin\":\"Origem\",\"employeeOperations.career.title\":\"Histórico de cargos\",\"employeeOperations.column.start\":\"Início\",\"employeeOperations.column.end\":\"Fim\",\"employeeOperations.column.context\":\"Contexto\",\"employeeOperations.dependents.title\":\"Dependentes e elegibilidade\",\"employeeOperations.column.dependent\":\"Dependente\",\"employeeOperations.column.relationship\":\"Parentesco\",\"employeeOperations.column.birthDate\":\"Nascimento\",\"employeeOperations.address.title\":\"Endereço cadastral\",\"employeeOperations.column.street\":\"Logradouro\",\"employeeOperations.column.number\":\"Número\",\"employeeOperations.column.city\":\"Cidade\",\"employeeOperations.missions.title\":\"Participações em missões\",\"employeeOperations.column.mission\":\"Missão\",\"employeeOperations.column.assignment\":\"Papel\",\"employeeOperations.column.leadership\":\"Liderança\",\"employeeOperations.column.result\":\"Resultado\",\"employeeOperations.equipment.title\":\"Equipamentos sob custódia\",\"employeeOperations.column.equipment\":\"Equipamento\",\"employeeOperations.column.status\":\"Status\",\"employeeOperations.column.custodyStart\":\"Início da custódia\",\"employeeOperations.column.custodyEnd\":\"Encerramento\"}}}}}",
|
|
4198
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4199
|
+
"contentHash": "5b88d10f3006a2b5cdee90cf225ec0594ca8973a3341cc68514b4a0980603f36",
|
|
4200
|
+
"sourceKind": "component_definition",
|
|
4201
|
+
"sourceId": "praxis-dynamic-page",
|
|
4202
|
+
"corpusVersion": "1.0.0"
|
|
4203
|
+
},
|
|
4204
|
+
{
|
|
4205
|
+
"chunkIndex": 118,
|
|
4206
|
+
"chunkKind": "recipe",
|
|
4207
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan.i18n.dictionaries\",\"authoringPlan\":{\"i18n\":{\"dictionaries\":{\"en-US\":{\"employeeOperations.portfolio.shell.title\":\"People operations\",\"employeeOperations.portfolio.shell.subtitle\":\"Find employees, update employment records, and review the dossier without leaving the portfolio\",\"employeeOperations.portfolio.resource.title\":\"Employees\",\"employeeOperations.portfolio.resource.formTitle\":\"Employee record\",\"employeeOperations.portfolio.toolbar.title\":\"Employee portfolio\",\"employeeOperations.portfolio.toolbar.subtitle\":\"Profile, department, employment, and compensation data in one view\",\"employeeOperations.portfolio.search.placeholder\":\"Search by name, email, role, or department\",\"employeeOperations.portfolio.quickFilter.active\":\"Active\",\"employeeOperations.portfolio.quickFilter.inactive\":\"Inactive\",\"employeeOperations.portfolio.column.person\":\"Person\",\"employeeOperations.portfolio.column.employee\":\"Employee\",\"employeeOperations.portfolio.column.employment\":\"Employment\",\"employeeOperations.portfolio.column.role\":\"Role\",\"employeeOperations.portfolio.column.department\":\"Department\",\"employeeOperations.portfolio.column.hiredAt\":\"Hire date\",\"employeeOperations.portfolio.column.salary\":\"Base salary\",\"employeeOperations.portfolio.column.contact\":\"Contact\",\"employeeOperations.portfolio.status.active\":\"Active\",\"employeeOperations.portfolio.status.inactive\":\"Inactive\",\"employeeOperations.portfolio.actions.header\":\"Actions\",\"employeeOperations.portfolio.actions.tooltip\":\"View, edit, or update the employment record\",\"employeeOperations.portfolio.action.view\":\"View\",\"employeeOperations.portfolio.action.view.tooltip\":\"View employee details\",\"employeeOperations.portfolio.action.edit\":\"Edit\",\"employeeOperations.portfolio.action.edit.tooltip\":\"Edit employee details\",\"employeeOperations.portfolio.action.deactivate\":\"Deactivate\",\"employeeOperations.portfolio.action.deactivate.tooltip\":\"Deactivate the employment record and provide reason and effective date\",\"employeeOperations.portfolio.action.reactivate\":\"Reactivate\",\"employeeOperations.portfolio.action.reactivate.tooltip\":\"Reactivate the employment record and provide reason and effective date\",\"employeeOperations.dossier.shell.title\":\"Employee dossier\",\"employeeOperations.dossier.shell.subtitle\":\"Select a person to review profile, payroll, career, and related activities\",\"employeeOperations.dossier.ariaLabel\":\"Operational employee dossier perspectives\",\"employeeOperations.dossier.tab.summary\":\"Dossier\",\"employeeOperations.dossier.tab.payroll\":\"Payroll\",\"employeeOperations.dossier.tab.career\":\"Career\",\"employeeOperations.dossier.tab.people\":\"People\",\"employeeOperations.dossier.tab.operations\":\"Operations\",\"employeeOperations.dossier.context.meta\":\"Active dossier context\",\"employeeOperations.dossier.context.employeeId\":\"Employee ID\",\"employeeOperations.dossier.callout.title\":\"Start here\",\"employeeOperations.dossier.callout.message\":\"Select a person in the portfolio to update the entire dossier. Use the row actions to view, edit, deactivate, or reactivate the employment record.\",\"employeeOperations.payroll.title\":\"Payroll history\",\"employeeOperations.payroll.subtitle\":\"Period, composition, and events for the selected employee\",\"employeeOperations.column.period\":\"Period\",\"employeeOperations.column.gross\":\"Gross\",\"employeeOperations.column.discounts\":\"Deductions\",\"employeeOperations.column.net\":\"Net\",\"employeeOperations.column.events\":\"Events\",\"employeeOperations.column.composition\":\"Composition\",\"employeeOperations.skills.title\":\"Skills matrix\",\"employeeOperations.column.skill\":\"Skill\",\"employeeOperations.column.proficiency\":\"Proficiency\",\"employeeOperations.column.origin\":\"Source\",\"employeeOperations.career.title\":\"Role history\",\"employeeOperations.column.start\":\"Start\",\"employeeOperations.column.end\":\"End\",\"employeeOperations.column.context\":\"Context\",\"employeeOperations.dependents.title\":\"Dependents and eligibility\",\"employeeOperations.column.dependent\":\"Dependent\",\"employeeOperations.column.relationship\":\"Relationship\",\"employeeOperations.column.birthDate\":\"Birth date\",\"employeeOperations.address.title\":\"Registered address\",\"employeeOperations.column.street\":\"Street\",\"employeeOperations.column.number\":\"Number\",\"employeeOperations.column.city\":\"City\",\"employeeOperations.missions.title\":\"Mission assignments\",\"employeeOperations.column.mission\":\"Mission\",\"employeeOperations.column.assignment\":\"Assignment\",\"employeeOperations.column.leadership\":\"Leadership\",\"employeeOperations.column.result\":\"Result\",\"employeeOperations.equipment.title\":\"Equipment in custody\",\"employeeOperations.column.equipment\":\"Equipment\",\"employeeOperations.column.status\":\"Status\",\"employeeOperations.column.custodyStart\":\"Custody started\",\"employeeOperations.column.custodyEnd\":\"Closed\"}}}}}",
|
|
4208
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4209
|
+
"contentHash": "fe3d6ee3ec97694b103cc9a8e65b3d89fe191158d7298bcf64df46e46af8ab1a",
|
|
4210
|
+
"sourceKind": "component_definition",
|
|
4211
|
+
"sourceId": "praxis-dynamic-page",
|
|
4212
|
+
"corpusVersion": "1.0.0"
|
|
4213
|
+
},
|
|
4214
|
+
{
|
|
4215
|
+
"chunkIndex": 119,
|
|
4216
|
+
"chunkKind": "recipe",
|
|
4217
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan\",\"authoringPlan\":{\"layoutPreset\":\"resource-master-detail-tabs\",\"themePreset\":\"enterprise-operational\",\"state\":{\"values\":{\"employeeFilter\":{},\"selectedEmployee\":null,\"selectedEmployeeId\":null,\"selectedEmployeeIdentity\":null},\"derived\":{\"detailTitle\":{\"dependsOn\":[\"selectedEmployeeIdentity\",\"selectedEmployee\"],\"compute\":{\"kind\":\"operator\",\"operator\":\"coalesce\",\"options\":{\"paths\":[\"selectedEmployeeIdentity.displayLabel\",\"selectedEmployeeIdentity.title.value\",\"selectedEmployee.nomeCompleto\"],\"fallback\":\"Nenhum funcionário selecionado\"}}},\"detailSubtitle\":{\"dependsOn\":[\"selectedEmployee\"],\"compute\":{\"kind\":\"operator\",\"operator\":\"select-case\",\"options\":{\"cases\":[{\"when\":{\"!!\":{\"var\":\"state.selectedEmployee\"}},\"template\":\"${state.selectedEmployee.cargoNome} · ${state.selectedEmployee.departamentoNome} · Código ${state.selectedEmployee.id}\"}],\"defaultValue\":\"Selecione um registro na tabela para consultar o detalhe publicado pelo Quick Start.\"}}}}},\"canvas\":{\"mode\":\"grid\",\"columns\":12,\"rowUnit\":\"auto\",\"gap\":\"16px\",\"autoRows\":\"content\",\"items\":{\"filters\":{\"col\":1,\"row\":1,\"colSpan\":12,\"rowSpan\":1},\"master\":{\"col\":1,\"row\":2,\"colSpan\":12,\"rowSpan\":1},\"workspace\":{\"col\":1,\"row\":3,\"colSpan\":12,\"rowSpan\":1}}},\"deviceLayouts\":{\"mobile\":{\"canvas\":{\"mode\":\"grid\",\"columns\":1,\"rowUnit\":\"auto\",\"gap\":\"12px\",\"autoRows\":\"content\",\"items\":{\"filters\":{\"col\":1,\"row\":1,\"colSpan\":1,\"rowSpan\":1},\"master\":{\"col\":1,\"row\":2,\"colSpan\":1,\"rowSpan\":1},\"workspace\":{\"col\":1,\"row\":3,\"colSpan\":1,\"rowSpan\":1}}}}}}}",
|
|
4218
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4219
|
+
"contentHash": "2a769c8c9094f70987541e7d84e17d0536f73a5e1c5e9c89c53250d94b5a1975",
|
|
4220
|
+
"sourceKind": "component_definition",
|
|
4221
|
+
"sourceId": "praxis-dynamic-page",
|
|
4222
|
+
"corpusVersion": "1.0.0"
|
|
4223
|
+
},
|
|
4224
|
+
{
|
|
4225
|
+
"chunkIndex": 120,
|
|
4226
|
+
"chunkKind": "recipe",
|
|
4227
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan.widgets\",\"authoringPlan\":{\"widgets\":[{\"key\":\"filters\",\"componentId\":\"praxis-filter\",\"role\":\"filters\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"filter_alt\",\"title\":\"Localizar funcionários\",\"subtitle\":\"Filtros inline derivados do DTO de filtro real do Quick Start\",\"bodyLayout\":\"fill\",\"windowActions\":{\"fullscreen\":true,\"collapsible\":true}},\"bindingOrder\":[\"resourcePath\",\"componentInstanceId\",\"alwaysVisibleFields\",\"value\",\"disablePersistence\",\"enableCustomization\",\"showFilterSettings\",\"showAdvancedButton\",\"showAddButton\",\"showClearButton\",\"showSearchButton\",\"placeBooleansInActions\",\"changeDebounceMs\"],\"inputs\":{\"resourcePath\":\"human-resources/funcionarios\",\"componentInstanceId\":\"quickstart-employee-master-detail-tabs-filter\",\"alwaysVisibleFields\":[\"nomeCompleto\",\"departamentoIdsIn\",\"ativo\"],\"value\":{},\"disablePersistence\":true,\"enableCustomization\":false,\"showFilterSettings\":false,\"showAdvancedButton\":true,\"showAddButton\":true,\"showClearButton\":true,\"showSearchButton\":false,\"placeBooleansInActions\":true,\"changeDebounceMs\":300},\"outputs\":{\"change\":\"emit\",\"requestSearch\":\"emit\",\"clear\":\"emit\",\"contextChange\":\"emit\"}},{\"key\":\"master\",\"componentId\":\"praxis-table\",\"role\":\"master\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"groups\",\"title\":\"Funcionários\",\"subtitle\":\"Coleção paginada pelo Quick Start; seleção única governa o detalhe\",\"bodyLayout\":\"fill\",\"windowActions\":{\"fullscreen\":true,\"collapsible\":true}},\"bindingOrder\":[\"tableId\",\"config\",\"configPersistenceStrategy\",\"enableCustomization\",\"queryContext\",\"resourcePath\"],\"inputs\":{\"tableId\":\"quickstart-employee-master-detail-tabs-master\",\"resourcePath\":\"human-resources/funcionarios\",\"queryContext\":{\"filters\":{}},\"configPersistenceStrategy\":\"volatile\",\"enableCustomization\":false,\"config\":{\"columns\":[],\"columnProjection\":{\"source\":\"schema\",\"include\":[\"avatarUrl\",\"nomeCompleto\",\"ativo\",\"cargoNome\",\"departamentoNome\",\"dataAdmissao\"]},\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":8,\"pageSizeOptions\":[8,16,32],\"showFirstLastButtons\":true},\"sorting\":{\"enabled\":true,\"strategy\":\"server\",\"defaultSort\":{\"column\":\"id\",\"direction\":\"asc\"}},\"filtering\":{\"enabled\":false,\"strategy\":\"server\"},\"selection\":{\"enabled\":true,\"type\":\"single\",\"mode\":\"row\",\"allowSelectAll\":false,\"persistSelection\":false,\"persistOnDataUpdate\":false},\"interaction\":{\"rowClick\":{\"enabled\":true,\"action\":\"select\"}}},\"toolbar\":{\"visible\":false},\"appearance\":{\"density\":\"compact\",\"stickyHeader\":true,\"hoverHighlight\":true,\"responsive\":{\"breakpoints\":{\"mobile\":640},\"mobile\":{\"horizontalScroll\":false,\"cardMode\":true,\"priorityColumns\":[\"nomeCompleto\",\"ativo\",\"cargoNome\"]}}}}},\"outputs\":{\"selectionChange\":\"emit\"}}]}}",
|
|
4228
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4229
|
+
"contentHash": "78823417dd54137b79b40e28572f55b310771ce39d965c2d6e5cd5cc91ab24f5",
|
|
4230
|
+
"sourceKind": "component_definition",
|
|
4231
|
+
"sourceId": "praxis-dynamic-page",
|
|
4232
|
+
"corpusVersion": "1.0.0"
|
|
4233
|
+
},
|
|
4234
|
+
{
|
|
4235
|
+
"chunkIndex": 121,
|
|
4236
|
+
"chunkKind": "recipe",
|
|
4237
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan.widgets[2]\",\"fragmentPath\":\"authoringPlan.widgets[2]\",\"fragmentIdentity\":{\"key\":\"workspace\",\"componentId\":\"praxis-tabs\"},\"fragment\":{\"key\":\"workspace\",\"componentId\":\"praxis-tabs\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"folder_shared\",\"title\":\"${state.detailTitle}\",\"subtitle\":\"${state.detailSubtitle}\",\"bodyLayout\":\"fill\",\"windowActions\":{\"fullscreen\":true,\"collapsible\":true}},\"bindingOrder\":[\"tabsId\",\"componentInstanceId\",\"configPersistenceStrategy\",\"config\",\"selectedIndex\"]}}",
|
|
4238
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4239
|
+
"contentHash": "c1be066afc789bdae20e85145363769a9967ca8e1257c9ac6c53a1df4fea9f27",
|
|
4240
|
+
"sourceKind": "component_definition",
|
|
4241
|
+
"sourceId": "praxis-dynamic-page",
|
|
4242
|
+
"corpusVersion": "1.0.0"
|
|
4243
|
+
},
|
|
4244
|
+
{
|
|
4245
|
+
"chunkIndex": 122,
|
|
4246
|
+
"chunkKind": "recipe",
|
|
4247
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan.widgets[2].inputs\",\"fragmentPath\":\"authoringPlan.widgets[2].inputs\",\"fragmentIdentity\":{\"key\":\"workspace\",\"componentId\":\"praxis-tabs\"},\"fragment\":{\"tabsId\":\"quickstart-employee-master-detail-tabs\",\"componentInstanceId\":\"quickstart-employee-master-detail-tabs\",\"configPersistenceStrategy\":\"input-first\",\"selectedIndex\":0}}",
|
|
4248
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4249
|
+
"contentHash": "d77b83eef45e4e17b43c9e2366b650591b045f6693f9a0bead8f26947bb3169a",
|
|
4250
|
+
"sourceKind": "component_definition",
|
|
4251
|
+
"sourceId": "praxis-dynamic-page",
|
|
4252
|
+
"corpusVersion": "1.0.0"
|
|
4253
|
+
},
|
|
4254
|
+
{
|
|
4255
|
+
"chunkIndex": 123,
|
|
4256
|
+
"chunkKind": "recipe",
|
|
4257
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan.widgets[2].inputs.config\",\"fragmentPath\":\"authoringPlan.widgets[2].inputs.config\",\"fragmentIdentity\":{\"key\":\"workspace\",\"componentId\":\"praxis-tabs\"},\"fragment\":{\"appearance\":{\"density\":\"comfortable\"},\"group\":{\"dynamicHeight\":true,\"fitInkBarToContent\":true,\"stretchTabs\":false,\"ariaLabel\":{\"key\":\"employeeOperations.dossier.ariaLabel\"}},\"behavior\":{\"lazyLoad\":true,\"reorderable\":false,\"closeable\":false}}}",
|
|
4258
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4259
|
+
"contentHash": "d761d5aae46e791dc150a52fb0adf4aa3d1cc688fecbe22806995c4bab7b7c4b",
|
|
4260
|
+
"sourceKind": "component_definition",
|
|
4261
|
+
"sourceId": "praxis-dynamic-page",
|
|
4262
|
+
"corpusVersion": "1.0.0"
|
|
4263
|
+
},
|
|
4264
|
+
{
|
|
4265
|
+
"chunkIndex": 124,
|
|
4266
|
+
"chunkKind": "recipe",
|
|
4267
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan.widgets[2].inputs.config.tabs\",\"fragmentPath\":\"authoringPlan.widgets[2].inputs.config.tabs\",\"fragmentIdentity\":{\"key\":\"workspace\",\"componentId\":\"praxis-tabs\"},\"fragment\":[{\"id\":\"dossier\",\"textLabel\":\"Visão geral\",\"icon\":\"badge\",\"widgets\":[{\"id\":\"praxis-dynamic-form\",\"childWidgetKey\":\"employee-dossier-form\",\"bindingOrder\":[\"formId\",\"componentInstanceId\",\"resourcePath\",\"resourceId\",\"emptyState\",\"mode\",\"schemaSource\",\"layoutPolicy\",\"configPersistenceStrategy\",\"enableCustomization\",\"showAiAssistant\",\"readonlyModeGlobal\",\"presentationModeGlobal\",\"fieldIconPolicy\"],\"inputs\":{\"formId\":\"quickstart-employee-tabs-detail\",\"componentInstanceId\":\"quickstart-employee-tabs-detail\",\"resourcePath\":\"human-resources/funcionarios\",\"resourceId\":null,\"emptyState\":{\"icon\":\"touch_app\",\"title\":\"Selecione um funcionário\",\"description\":\"Escolha um registro na tabela para carregar, pela API real, a visão geral em modo de apresentação.\",\"tone\":\"primary\",\"variant\":\"transparent\",\"alignment\":\"center\",\"density\":\"compact\",\"iconContainer\":\"circle\"},\"mode\":\"view\",\"schemaSource\":\"resource\",\"layoutPolicy\":{\"source\":\"schema\",\"intent\":\"detail\",\"preset\":\"compactPresentation\",\"lifecycle\":\"live\",\"persistence\":\"transient\",\"schemaOperation\":\"detail\",\"schemaType\":\"response\",\"detailSummary\":{\"includeFields\":[\"avatarUrl\",\"nomeCompleto\",\"ativo\",\"cargoNome\",\"departamentoNome\",\"dataAdmissao\",\"email\",\"telefone\"],\"columns\":3,\"responsiveColumns\":{\"lg\":3,\"md\":2,\"sm\":1,\"xs\":1},\"widthPrecedence\":\"summary\"}},\"configPersistenceStrategy\":\"input-first\",\"enableCustomization\":false,\"showAiAssistant\":false,\"readonlyModeGlobal\":true,\"presentationModeGlobal\":true,\"fieldIconPolicy\":\"presentation-only\"},\"outputs\":{\"customAction\":\"emit\",\"initializationError\":\"emit\"}}]},{\"id\":\"payroll\",\"textLabel\":{\"key\":\"employeeOperations.dossier.tab.payroll\"},\"icon\":\"payments\",\"widgets\":[{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-payroll-history\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"parentIdentity\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"payroll-history\",\"mode\":\"inline\",\"tableId\":\"employee-payroll-history\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"employeeOperations.payroll.title\"},\"subtitle\":{\"key\":\"employeeOperations.payroll.subtitle\"}},\"columns\":[],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":6,\"pageSizeOptions\":[6,12]}},\"columnProjection\":{\"source\":\"schema\",\"include\":[\"competencia\",\"salarioBruto\",\"totalDescontos\",\"salarioLiquido\",\"qtdEventos\",\"composicaoFolha\"],\"overrides\":{\"competencia\":{\"header\":{\"key\":\"employeeOperations.column.period\"},\"format\":\"MM/yyyy\",\"width\":\"120px\"},\"salarioBruto\":{\"header\":{\"key\":\"employeeOperations.column.gross\"},\"type\":\"currency\",\"format\":\"BRL|symbol|2\",\"align\":\"end\"},\"totalDescontos\":{\"header\":{\"key\":\"employeeOperations.column.discounts\"},\"type\":\"currency\",\"format\":\"BRL|symbol|2\",\"align\":\"end\"},\"salarioLiquido\":{\"header\":{\"key\":\"employeeOperations.column.net\"},\"type\":\"currency\",\"format\":\"BRL|symbol|2\",\"align\":\"end\"},\"qtdEventos\":{\"header\":{\"key\":\"employeeOperations.column.events\"},\"align\":\"center\",\"width\":\"100px\"},\"composicaoFolha\":{\"header\":{\"key\":\"employeeOperations.column.composition\"},\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"composicaoFolha\",\"variant\":\"soft\",\"color\":\"primary\"}}}}}},\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":null,\"parentIdentity\":null,\"compact\":true,\"enableCustomization\":false},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}}]},{\"id\":\"career\",\"textLabel\":{\"key\":\"employeeOperations.dossier.tab.career\"},\"icon\":\"trending_up\",\"widgets\":[{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-skills\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"parentIdentity\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"skills\",\"mode\":\"inline\",\"tableId\":\"employee-skill-matrix\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"employeeOperations.skills.title\"}},\"columns\":[],\"behavior\":{\"pagination\":{\"enabled\":false}},\"columnProjection\":{\"source\":\"schema\",\"include\":[\"habilidadeNome\",\"proficiencia\",\"origem\"],\"overrides\":{\"habilidadeNome\":{\"header\":{\"key\":\"employeeOperations.column.skill\"}},\"proficiencia\":{\"header\":{\"key\":\"employeeOperations.column.proficiency\"},\"renderer\":{\"type\":\"progress\",\"progress\":{\"valueExpr\":\"proficiencia\",\"color\":\"primary\",\"showLabel\":true}}},\"origem\":{\"header\":{\"key\":\"employeeOperations.column.origin\"},\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"origem\",\"variant\":\"outlined\",\"color\":\"accent\"}}}}}},\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":null,\"parentIdentity\":null,\"compact\":true,\"enableCustomization\":false},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}},{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-career-history\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"parentIdentity\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"career-history\",\"mode\":\"inline\",\"tableId\":\"employee-career-history\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"employeeOperations.career.title\"}},\"columns\":[],\"behavior\":{\"pagination\":{\"enabled\":false}},\"columnProjection\":{\"source\":\"schema\",\"include\":[\"cargoNome\",\"dataInicio\",\"dataFim\",\"observacoes\"],\"overrides\":{\"cargoNome\":{\"header\":{\"key\":\"employeeOperations.portfolio.column.role\"},\"sticky\":\"start\"},\"dataInicio\":{\"header\":{\"key\":\"employeeOperations.column.start\"}},\"dataFim\":{\"header\":{\"key\":\"employeeOperations.column.end\"}},\"observacoes\":{\"header\":{\"key\":\"employeeOperations.column.context\"}}}}},\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":null,\"parentIdentity\":null,\"compact\":true,\"enableCustomization\":false},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}}]}]}",
|
|
4268
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4269
|
+
"contentHash": "6f915ca72532cc22758cb0dace5eba592830399197285aaf0972ceadf6b1a71d",
|
|
4270
|
+
"sourceKind": "component_definition",
|
|
4271
|
+
"sourceId": "praxis-dynamic-page",
|
|
4272
|
+
"corpusVersion": "1.0.0"
|
|
4273
|
+
},
|
|
4274
|
+
{
|
|
4275
|
+
"chunkIndex": 125,
|
|
4276
|
+
"chunkKind": "recipe",
|
|
4277
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan.widgets[2].inputs.config.tabs\",\"fragmentPath\":\"authoringPlan.widgets[2].inputs.config.tabs\",\"fragmentIdentity\":{\"key\":\"workspace\",\"componentId\":\"praxis-tabs\"},\"fragment\":[{\"id\":\"people\",\"textLabel\":{\"key\":\"employeeOperations.dossier.tab.people\"},\"icon\":\"family_restroom\",\"widgets\":[{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-dependents\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"parentIdentity\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"dependents\",\"mode\":\"inline\",\"tableId\":\"employee-dependents\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"employeeOperations.dependents.title\"}},\"columns\":[],\"behavior\":{\"pagination\":{\"enabled\":false}},\"columnProjection\":{\"source\":\"schema\",\"include\":[\"nomeCompleto\",\"parentesco\",\"dataNascimento\"],\"overrides\":{\"nomeCompleto\":{\"header\":{\"key\":\"employeeOperations.column.dependent\"},\"sticky\":\"start\"},\"parentesco\":{\"header\":{\"key\":\"employeeOperations.column.relationship\"},\"renderer\":{\"type\":\"chip\",\"chip\":{\"textField\":\"parentesco\",\"variant\":\"outlined\",\"color\":\"primary\"}}},\"dataNascimento\":{\"header\":{\"key\":\"employeeOperations.column.birthDate\"}}}}},\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":null,\"parentIdentity\":null,\"compact\":true,\"enableCustomization\":false},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}},{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-address\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"parentIdentity\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"address\",\"mode\":\"inline\",\"tableId\":\"employee-address\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"employeeOperations.address.title\"}},\"columns\":[],\"behavior\":{\"pagination\":{\"enabled\":false}},\"columnProjection\":{\"source\":\"schema\",\"include\":[\"logradouro\",\"numero\",\"cidade\",\"estado\",\"cep\"],\"overrides\":{\"logradouro\":{\"header\":{\"key\":\"employeeOperations.column.street\"},\"sticky\":\"start\"},\"numero\":{\"header\":{\"key\":\"employeeOperations.column.number\"},\"width\":\"100px\"},\"cidade\":{\"header\":{\"key\":\"employeeOperations.column.city\"}},\"estado\":{\"header\":\"UF\",\"width\":\"80px\"},\"cep\":{\"header\":\"CEP\",\"width\":\"120px\"}}}},\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":null,\"parentIdentity\":null,\"compact\":true,\"enableCustomization\":false},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}}]},{\"id\":\"operations\",\"textLabel\":{\"key\":\"employeeOperations.dossier.tab.operations\"},\"icon\":\"hub\",\"widgets\":[{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-missions\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"parentIdentity\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"mission-participations\",\"mode\":\"inline\",\"tableId\":\"employee-mission-participations\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"employeeOperations.missions.title\"}},\"columns\":[],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":5,\"pageSizeOptions\":[5,10]}},\"columnProjection\":{\"source\":\"schema\",\"include\":[\"missaoTitulo\",\"papel\",\"principal\",\"resultado\"],\"overrides\":{\"missaoTitulo\":{\"header\":{\"key\":\"employeeOperations.column.mission\"},\"sticky\":\"start\"},\"papel\":{\"header\":{\"key\":\"employeeOperations.column.assignment\"},\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"papel\",\"variant\":\"soft\",\"color\":\"primary\"}}},\"principal\":{\"header\":{\"key\":\"employeeOperations.column.leadership\"},\"format\":\"yes-no\",\"align\":\"center\"},\"resultado\":{\"header\":{\"key\":\"employeeOperations.column.result\"},\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"resultado\",\"variant\":\"outlined\",\"color\":\"accent\"}}}}}},\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":null,\"parentIdentity\":null,\"compact\":true,\"enableCustomization\":false},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}},{\"id\":\"praxis-related-resource-outlet\",\"childWidgetKey\":\"employee-equipment-custody\",\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"parentIdentity\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"equipment-custody\",\"mode\":\"inline\",\"tableId\":\"employee-equipment-custody\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"employeeOperations.equipment.title\"}},\"columns\":[],\"behavior\":{\"pagination\":{\"enabled\":false}},\"columnProjection\":{\"source\":\"schema\",\"include\":[\"equipamentoId\",\"status\",\"inicio\",\"fim\"],\"overrides\":{\"equipamentoId\":{\"header\":{\"key\":\"employeeOperations.column.equipment\"},\"sticky\":\"start\"},\"status\":{\"header\":{\"key\":\"employeeOperations.column.status\"},\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"status\",\"variant\":\"soft\",\"color\":\"accent\"}}},\"inicio\":{\"header\":{\"key\":\"employeeOperations.column.custodyStart\"}},\"fim\":{\"header\":{\"key\":\"employeeOperations.column.custodyEnd\"}}}}},\"parentResourcePath\":\"human-resources/funcionarios\",\"parentResourceId\":null,\"parentIdentity\":null,\"compact\":true,\"enableCustomization\":false},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}}]}]}",
|
|
4278
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4279
|
+
"contentHash": "c231264bba18a1dace1935d00674dc51b2f4dcba61599e097474eb0b31801209",
|
|
4280
|
+
"sourceKind": "component_definition",
|
|
4281
|
+
"sourceId": "praxis-dynamic-page",
|
|
4282
|
+
"corpusVersion": "1.0.0"
|
|
4283
|
+
},
|
|
4284
|
+
{
|
|
4285
|
+
"chunkIndex": 126,
|
|
4286
|
+
"chunkKind": "recipe",
|
|
4287
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan.widgets[2]\",\"fragmentPath\":\"authoringPlan.widgets[2]\",\"fragmentIdentity\":{\"key\":\"workspace\",\"componentId\":\"praxis-tabs\"},\"fragment\":{\"outputs\":{\"selectedIndexChange\":\"emit\"},\"role\":\"detail\"}}",
|
|
4288
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4289
|
+
"contentHash": "6d781eb4af57c7652f8841175531e55743303939ed78755738a7832fa044f5bb",
|
|
4290
|
+
"sourceKind": "component_definition",
|
|
4291
|
+
"sourceId": "praxis-dynamic-page",
|
|
4292
|
+
"corpusVersion": "1.0.0"
|
|
4293
|
+
},
|
|
4294
|
+
{
|
|
4295
|
+
"chunkIndex": 127,
|
|
4296
|
+
"chunkKind": "recipe",
|
|
4297
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan\",\"authoringPlan\":{\"contextScopes\":[{\"id\":\"quickstart-employee-tabs:detail-context\",\"context\":{\"resourcePath\":{\"kind\":\"constant\",\"value\":\"human-resources/funcionarios\"},\"resourceId\":{\"kind\":\"state\",\"path\":\"selectedEmployeeId\",\"layer\":\"values\",\"initial\":null}},\"targets\":[{\"widget\":\"workspace\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"dossier\",\"index\":0},{\"kind\":\"widget\",\"key\":\"employee-dossier-form\",\"componentType\":\"praxis-dynamic-form\"}]}],\"policy\":{\"missingValuePolicy\":\"propagate-undefined\",\"distinct\":true},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"quickstart-employee-tabs:related-context\",\"context\":{\"parentResourcePath\":{\"kind\":\"constant\",\"value\":\"human-resources/funcionarios\"},\"parentResourceId\":{\"kind\":\"state\",\"path\":\"selectedEmployeeId\",\"layer\":\"values\",\"initial\":null},\"parentIdentity\":{\"kind\":\"state\",\"path\":\"selectedEmployeeIdentity\",\"layer\":\"values\",\"initial\":null}},\"targets\":[{\"widget\":\"workspace\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"payroll\",\"index\":1},{\"kind\":\"widget\",\"key\":\"employee-payroll-history\",\"componentType\":\"praxis-related-resource-outlet\"}]},{\"widget\":\"workspace\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"career\",\"index\":2},{\"kind\":\"widget\",\"key\":\"employee-skills\",\"componentType\":\"praxis-related-resource-outlet\"}]},{\"widget\":\"workspace\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"career\",\"index\":2},{\"kind\":\"widget\",\"key\":\"employee-career-history\",\"componentType\":\"praxis-related-resource-outlet\"}]},{\"widget\":\"workspace\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"people\",\"index\":3},{\"kind\":\"widget\",\"key\":\"employee-dependents\",\"componentType\":\"praxis-related-resource-outlet\"}]},{\"widget\":\"workspace\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"people\",\"index\":3},{\"kind\":\"widget\",\"key\":\"employee-address\",\"componentType\":\"praxis-related-resource-outlet\"}]},{\"widget\":\"workspace\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"operations\",\"index\":4},{\"kind\":\"widget\",\"key\":\"employee-missions\",\"componentType\":\"praxis-related-resource-outlet\"}]},{\"widget\":\"workspace\",\"nestedPath\":[{\"kind\":\"tab\",\"id\":\"operations\",\"index\":4},{\"kind\":\"widget\",\"key\":\"employee-equipment-custody\",\"componentType\":\"praxis-related-resource-outlet\"}]}],\"policy\":{\"missingValuePolicy\":\"propagate-undefined\",\"distinct\":true},\"metadata\":{\"source\":\"quickstart-real-http\"}}],\"bindings\":[{\"id\":\"filters.change->state.employeeFilter\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"filters\",\"port\":\"change\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"employeeFilter\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"filters.change->state.employeeFilter:pick\",\"path\":\"payload\",\"inputSource\":\"event\",\"fallbackValue\":{}},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"state.employeeFilter->master.queryContext\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"path\":\"employeeFilter\"},\"to\":{\"kind\":\"component-port\",\"widget\":\"master\",\"port\":\"queryContext\",\"direction\":\"input\"},\"transform\":{\"kind\":\"template\",\"id\":\"state.employeeFilter->master.queryContext:template\",\"template\":{\"filters\":\"${source}\"},\"inputSource\":\"payload\",\"output\":{\"semanticKind\":\"query-context\",\"stableShape\":true}},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"master.selectionChange->state.selectedEmployee\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"master\",\"port\":\"selectionChange\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedEmployee\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"master.selectionChange->state.selectedEmployee:pick\",\"path\":\"payload.selectedRows.0\",\"inputSource\":\"event\",\"fallbackValue\":null},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"master.selectionChange->state.selectedEmployeeId\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"master\",\"port\":\"selectionChange\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedEmployeeId\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"master.selectionChange->state.selectedEmployeeId:pick\",\"path\":\"payload.selectedRows.0.id\",\"inputSource\":\"event\",\"fallbackValue\":null},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"master.selectionChange->state.selectedEmployeeIdentity\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"master\",\"port\":\"selectionChange\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedEmployeeIdentity\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"master.selectionChange->state.selectedEmployeeIdentity:pick\",\"path\":\"payload.resourceIdentity\",\"inputSource\":\"event\",\"fallbackValue\":null},\"metadata\":{\"source\":\"quickstart-real-http\"}}],\"diagnostics\":{\"archetype\":\"master-detail-tabs\",\"adherence\":[\"ja-suportado-mal-nomeado-ou-mal-materializado\"],\"evidence\":\"quickstart-real-http\",\"canonicalResource\":\"human-resources.funcionarios\",\"requiredSurfaces\":[\"POST /api/human-resources/funcionarios/filter\",\"GET /api/human-resources/funcionarios/{id}\",\"GET /api/human-resources/funcionarios/{id}/surfaces\",\"payroll-history\",\"skills\",\"career-history\",\"dependents\",\"address\",\"mission-participations\",\"equipment-custody\"],\"localDataAllowed\":false,\"legacyScreen\":\"ERGadm00229\"}}}",
|
|
4298
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail-tabs.json",
|
|
4299
|
+
"contentHash": "22251e2f6e7311484b60b56a881c80ea6f5871fd45b9e063661e24517e39b99e",
|
|
4300
|
+
"sourceKind": "component_definition",
|
|
4301
|
+
"sourceId": "praxis-dynamic-page",
|
|
4302
|
+
"corpusVersion": "1.0.0"
|
|
4303
|
+
},
|
|
4304
|
+
{
|
|
4305
|
+
"chunkIndex": 128,
|
|
4306
|
+
"chunkKind": "recipe",
|
|
4307
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment\",\"_comment\":\"Template governado do laboratório Praxis para o arquétipo Ergon master-detail.\"}",
|
|
4308
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail.json",
|
|
4309
|
+
"contentHash": "c4af8f13a5e7d5d8939ae93f51823075910af73c4b08b969d6a0b9c8153ce2fe",
|
|
4310
|
+
"sourceKind": "component_definition",
|
|
4311
|
+
"sourceId": "praxis-dynamic-page",
|
|
4312
|
+
"corpusVersion": "1.0.0"
|
|
4313
|
+
},
|
|
4314
|
+
{
|
|
4315
|
+
"chunkIndex": 129,
|
|
4316
|
+
"chunkKind": "recipe",
|
|
4317
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantOf\":\"praxis-dynamic-page\",\"variantId\":\"ergon-archetype-master-detail\",\"label\":\"Consulta com filtro, tabela mestre e detalhe\",\"description\":\"Prova a seleção de uma linha como contexto canônico para um formulário read-only, sem estado paralelo no host.\",\"useWhen\":\"Materialize o arquétipo operacional master-detail sobre as surfaces reais do Praxis API Quick Start.\",\"examplePrompts\":[\"Crie uma tela master-detail baseada nas surfaces reais do Quick Start usando o arquétipo Praxis.\",\"Materialize o caso master-detail com Dynamic Page e UiCompositionPlan, sem dados locais.\"]}}",
|
|
4318
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail.json",
|
|
4319
|
+
"contentHash": "6e4393d6e51aa33c22be30b79f551c4686b0b99f59968b25e560ecab28563066",
|
|
4320
|
+
"sourceKind": "component_definition",
|
|
4321
|
+
"sourceId": "praxis-dynamic-page",
|
|
4322
|
+
"corpusVersion": "1.0.0"
|
|
4323
|
+
},
|
|
4324
|
+
{
|
|
4325
|
+
"chunkIndex": 130,
|
|
4326
|
+
"chunkKind": "recipe",
|
|
4327
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"aiDescription\",\"aiDescription\":\"Prova a seleção de uma linha como contexto canônico para um formulário read-only, sem estado paralelo no host.\"}",
|
|
4328
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail.json",
|
|
4329
|
+
"contentHash": "834b3ff8d23f407ecdf78cb04fe96a0b485de40baa620bf99ae623a4f6e39f8e",
|
|
4330
|
+
"sourceKind": "component_definition",
|
|
4331
|
+
"sourceId": "praxis-dynamic-page",
|
|
4332
|
+
"corpusVersion": "1.0.0"
|
|
4333
|
+
},
|
|
4334
|
+
{
|
|
4335
|
+
"chunkIndex": 131,
|
|
4336
|
+
"chunkKind": "recipe",
|
|
4337
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"certification\",\"certification\":{\"status\":\"laboratory-candidate\",\"route\":\"/dynamic-page-lab/archetypes/master-detail\",\"legacyEvidence\":[\"ERGadm00034 · Códigos de frequência\",\"ERGadm00069 · Tipos de rubrica\"],\"dataSource\":\"quickstart-real-http\",\"resourcePath\":\"human-resources/funcionarios\",\"localDataAllowed\":false,\"acceptance\":[\"Filtro inline derivado do schema real\",\"Tabela mestre paginada por POST /filter\",\"Seleção carrega o detalhe por GET /{id}\",\"Detalhe permanece em modo de apresentação\",\"Estado inicial sem seleção implícita\"]}}",
|
|
4338
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail.json",
|
|
4339
|
+
"contentHash": "4605c53cc27cc92b0f78f7e13a14de7e89f91da6022a31beb687decd7431fdea",
|
|
4340
|
+
"sourceKind": "component_definition",
|
|
4341
|
+
"sourceId": "praxis-dynamic-page",
|
|
4342
|
+
"corpusVersion": "1.0.0"
|
|
4343
|
+
},
|
|
4344
|
+
{
|
|
4345
|
+
"chunkIndex": 132,
|
|
4346
|
+
"chunkKind": "recipe",
|
|
4347
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"teaches\",\"teaches\":[\"ui-composition-plan\",\"dynamic-page\",\"composition.links\",\"ergon-archetype.master-detail\"]}",
|
|
4348
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail.json",
|
|
4349
|
+
"contentHash": "dce1d03c4a3a1a748ab230dba711ff751846fc73ffce295930228c3a0983d419",
|
|
4350
|
+
"sourceKind": "component_definition",
|
|
4351
|
+
"sourceId": "praxis-dynamic-page",
|
|
4352
|
+
"corpusVersion": "1.0.0"
|
|
4353
|
+
},
|
|
4354
|
+
{
|
|
4355
|
+
"chunkIndex": 133,
|
|
4356
|
+
"chunkKind": "recipe",
|
|
4357
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlanRef\",\"authoringPlanRef\":\"./praxis-dynamic-page.ergon-archetype-master-detail.ui-composition-plan.artifact.json\"}",
|
|
4358
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail.json",
|
|
4359
|
+
"contentHash": "7fdcc94ceb3f2d17a4336f3a87c27a1757e77d01c7e87892e97e6cdb8928ae99",
|
|
4360
|
+
"sourceKind": "component_definition",
|
|
4361
|
+
"sourceId": "praxis-dynamic-page",
|
|
4362
|
+
"corpusVersion": "1.0.0"
|
|
4363
|
+
},
|
|
4364
|
+
{
|
|
4365
|
+
"chunkIndex": 134,
|
|
4366
|
+
"chunkKind": "recipe",
|
|
4367
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan\",\"authoringPlan\":{\"version\":\"1.0\",\"kind\":\"praxis.ui-composition-plan\",\"layoutPreset\":\"resource-master-detail\",\"layoutPresetOptions\":{\"presetFamily\":\"master-detail-dashboard\"},\"themePreset\":\"enterprise-operational\",\"state\":{\"values\":{\"employeeFilter\":{},\"selectedEmployee\":null,\"selectedEmployeeId\":null,\"selectedEmployeeIdentity\":null},\"derived\":{\"detailTitle\":{\"dependsOn\":[\"selectedEmployeeIdentity\",\"selectedEmployee\"],\"compute\":{\"kind\":\"operator\",\"operator\":\"coalesce\",\"options\":{\"paths\":[\"selectedEmployeeIdentity.displayLabel\",\"selectedEmployeeIdentity.title.value\",\"selectedEmployee.nomeCompleto\"],\"fallback\":\"Nenhum funcionário selecionado\"}}},\"detailSubtitle\":{\"dependsOn\":[\"selectedEmployee\"],\"compute\":{\"kind\":\"operator\",\"operator\":\"select-case\",\"options\":{\"cases\":[{\"when\":{\"!!\":{\"var\":\"state.selectedEmployee\"}},\"template\":\"${state.selectedEmployee.cargoNome} · ${state.selectedEmployee.departamentoNome} · Código ${state.selectedEmployee.id}\"}],\"defaultValue\":\"Selecione um registro na tabela para consultar o detalhe publicado pelo Quick Start.\"}}}}},\"widgets\":[{\"key\":\"filters\",\"componentId\":\"praxis-filter\",\"role\":\"filters\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"filter_alt\",\"title\":\"Localizar funcionários\",\"subtitle\":\"Filtros inline derivados do DTO de filtro real do Quick Start\",\"bodyLayout\":\"fill\",\"windowActions\":{\"fullscreen\":true,\"collapsible\":true}},\"bindingOrder\":[\"resourcePath\",\"componentInstanceId\",\"alwaysVisibleFields\",\"value\",\"disablePersistence\",\"enableCustomization\",\"showFilterSettings\",\"showAdvancedButton\",\"showAddButton\",\"showClearButton\",\"showSearchButton\",\"placeBooleansInActions\",\"changeDebounceMs\"],\"inputs\":{\"resourcePath\":\"human-resources/funcionarios\",\"componentInstanceId\":\"quickstart-employee-master-detail-filter\",\"alwaysVisibleFields\":[\"nomeCompleto\",\"departamentoIdsIn\",\"ativo\"],\"value\":{},\"disablePersistence\":true,\"enableCustomization\":false,\"showFilterSettings\":false,\"showAdvancedButton\":true,\"showAddButton\":true,\"showClearButton\":true,\"showSearchButton\":false,\"placeBooleansInActions\":true,\"changeDebounceMs\":300},\"outputs\":{\"change\":\"emit\",\"requestSearch\":\"emit\",\"clear\":\"emit\",\"contextChange\":\"emit\"}},{\"key\":\"master\",\"componentId\":\"praxis-table\",\"role\":\"master\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"groups\",\"title\":\"Funcionários\",\"subtitle\":\"Coleção paginada pelo Quick Start; seleção única governa o detalhe\",\"bodyLayout\":\"fill\",\"windowActions\":{\"fullscreen\":true,\"collapsible\":true}},\"bindingOrder\":[\"tableId\",\"config\",\"configPersistenceStrategy\",\"enableCustomization\",\"queryContext\",\"resourcePath\"],\"inputs\":{\"tableId\":\"quickstart-employee-master\",\"resourcePath\":\"human-resources/funcionarios\",\"queryContext\":{\"filters\":{}},\"configPersistenceStrategy\":\"volatile\",\"enableCustomization\":false,\"config\":{\"columns\":[],\"columnProjection\":{\"source\":\"schema\",\"include\":[\"avatarUrl\",\"nomeCompleto\",\"ativo\",\"cargoNome\",\"departamentoNome\",\"dataAdmissao\"]},\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":8,\"pageSizeOptions\":[8,16,32],\"showFirstLastButtons\":true},\"sorting\":{\"enabled\":true,\"strategy\":\"server\",\"defaultSort\":{\"column\":\"id\",\"direction\":\"asc\"}},\"filtering\":{\"enabled\":false,\"strategy\":\"server\"},\"selection\":{\"enabled\":true,\"type\":\"single\",\"mode\":\"row\",\"allowSelectAll\":false,\"persistSelection\":false,\"persistOnDataUpdate\":false},\"interaction\":{\"rowClick\":{\"enabled\":true,\"action\":\"select\"}}},\"toolbar\":{\"visible\":false},\"appearance\":{\"density\":\"compact\",\"stickyHeader\":true,\"hoverHighlight\":true,\"responsive\":{\"breakpoints\":{\"mobile\":640},\"mobile\":{\"horizontalScroll\":false,\"cardMode\":true,\"priorityColumns\":[\"nomeCompleto\",\"ativo\",\"cargoNome\"]}}}}},\"outputs\":{\"selectionChange\":\"emit\"}},{\"key\":\"detail\",\"componentId\":\"praxis-dynamic-form\",\"role\":\"detail\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"badge\",\"title\":\"${state.detailTitle}\",\"subtitle\":\"${state.detailSubtitle}\",\"bodyLayout\":\"fill\",\"windowActions\":{\"fullscreen\":true,\"collapsible\":true}},\"bindingOrder\":[\"formId\",\"componentInstanceId\",\"resourcePath\",\"resourceId\",\"emptyState\",\"mode\",\"schemaSource\",\"layoutPolicy\",\"configPersistenceStrategy\",\"enableCustomization\",\"showAiAssistant\",\"readonlyModeGlobal\",\"presentationModeGlobal\",\"fieldIconPolicy\"],\"inputs\":{\"formId\":\"quickstart-employee-detail\",\"componentInstanceId\":\"quickstart-employee-detail\",\"resourcePath\":\"human-resources/funcionarios\",\"resourceId\":null,\"emptyState\":{\"icon\":\"touch_app\",\"title\":\"Selecione um funcionário\",\"description\":\"Escolha um registro na tabela para carregar, pela API real, o detalhe em modo de apresentação.\",\"tone\":\"primary\",\"variant\":\"transparent\",\"alignment\":\"center\",\"density\":\"compact\",\"iconContainer\":\"circle\"},\"mode\":\"view\",\"schemaSource\":\"resource\",\"layoutPolicy\":{\"source\":\"schema\",\"intent\":\"detail\",\"preset\":\"compactPresentation\",\"lifecycle\":\"live\",\"persistence\":\"transient\",\"schemaOperation\":\"detail\",\"schemaType\":\"response\",\"detailSummary\":{\"includeFields\":[\"avatarUrl\",\"nomeCompleto\",\"ativo\",\"cargoNome\",\"departamentoNome\",\"dataAdmissao\",\"email\",\"telefone\"],\"columns\":3,\"responsiveColumns\":{\"lg\":3,\"md\":2,\"sm\":1,\"xs\":1},\"widthPrecedence\":\"summary\"}},\"configPersistenceStrategy\":\"input-first\",\"enableCustomization\":false,\"showAiAssistant\":false,\"readonlyModeGlobal\":true,\"presentationModeGlobal\":true,\"fieldIconPolicy\":\"presentation-only\"},\"outputs\":{\"initializationError\":\"emit\"}}],\"bindings\":[{\"id\":\"filters.change->state.employeeFilter\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"filters\",\"port\":\"change\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"employeeFilter\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"filters.change->state.employeeFilter:pick\",\"path\":\"payload\",\"inputSource\":\"event\",\"fallbackValue\":{}},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"state.employeeFilter->master.queryContext\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"path\":\"employeeFilter\"},\"to\":{\"kind\":\"component-port\",\"widget\":\"master\",\"port\":\"queryContext\",\"direction\":\"input\"},\"transform\":{\"kind\":\"template\",\"id\":\"state.employeeFilter->master.queryContext:template\",\"template\":{\"filters\":\"${source}\"},\"inputSource\":\"payload\",\"output\":{\"semanticKind\":\"query-context\",\"stableShape\":true}},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"master.selectionChange->state.selectedEmployee\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"master\",\"port\":\"selectionChange\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedEmployee\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"master.selectionChange->state.selectedEmployee:pick\",\"path\":\"payload.selectedRows.0\",\"inputSource\":\"event\",\"fallbackValue\":null},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"master.selectionChange->state.selectedEmployeeId\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"master\",\"port\":\"selectionChange\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedEmployeeId\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"master.selectionChange->state.selectedEmployeeId:pick\",\"path\":\"payload.selectedRows.0.id\",\"inputSource\":\"event\",\"fallbackValue\":null},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"master.selectionChange->state.selectedEmployeeIdentity\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"master\",\"port\":\"selectionChange\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedEmployeeIdentity\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"master.selectionChange->state.selectedEmployeeIdentity:pick\",\"path\":\"payload.resourceIdentity\",\"inputSource\":\"event\",\"fallbackValue\":null},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"state.selectedEmployeeId->detail.resourceId\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"path\":\"selectedEmployeeId\"},\"to\":{\"kind\":\"component-port\",\"widget\":\"detail\",\"port\":\"resourceId\",\"direction\":\"input\"},\"policy\":{\"missingValuePolicy\":\"propagate-undefined\",\"distinct\":true},\"metadata\":{\"source\":\"quickstart-real-http\"}}]}}",
|
|
4368
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail.json",
|
|
4369
|
+
"contentHash": "40ef80839626be201853a897cc1399338d47b76ecc0c83fa26d702d8ff9e0a0e",
|
|
4370
|
+
"sourceKind": "component_definition",
|
|
4371
|
+
"sourceId": "praxis-dynamic-page",
|
|
4372
|
+
"corpusVersion": "1.0.0"
|
|
4373
|
+
},
|
|
4374
|
+
{
|
|
4375
|
+
"chunkIndex": 135,
|
|
4376
|
+
"chunkKind": "recipe",
|
|
4377
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan\",\"authoringPlan\":{\"diagnostics\":{\"evidence\":\"quickstart-real-http\",\"canonicalResource\":\"human-resources.funcionarios\",\"requiredSurfaces\":[\"POST /api/human-resources/funcionarios/filter\",\"GET /api/human-resources/funcionarios/{id}\",\"GET /schemas/filtered\"],\"localDataAllowed\":false}}}",
|
|
4378
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-master-detail.json",
|
|
4379
|
+
"contentHash": "89f640367368409f12647cf2cc847c56ef0ed7955ec8ba1c06acd749581e76c1",
|
|
4380
|
+
"sourceKind": "component_definition",
|
|
4381
|
+
"sourceId": "praxis-dynamic-page",
|
|
4382
|
+
"corpusVersion": "1.0.0"
|
|
4383
|
+
},
|
|
4384
|
+
{
|
|
4385
|
+
"chunkIndex": 136,
|
|
4386
|
+
"chunkKind": "recipe",
|
|
4387
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment\",\"_comment\":\"Template governado do laboratório Praxis para o arquétipo Ergon parent-child-related, certificado contra APIs reais do Quick Start.\"}",
|
|
4388
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-parent-child-related.json",
|
|
4389
|
+
"contentHash": "5d946c545c3f4af1548625742f315c522ea85677afbfe229d1289e119d8cd159",
|
|
4390
|
+
"sourceKind": "component_definition",
|
|
4391
|
+
"sourceId": "praxis-dynamic-page",
|
|
4392
|
+
"corpusVersion": "1.0.0"
|
|
4393
|
+
},
|
|
4394
|
+
{
|
|
4395
|
+
"chunkIndex": 137,
|
|
4396
|
+
"chunkKind": "recipe",
|
|
4397
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantOf\":\"praxis-dynamic-page\",\"variantId\":\"ergon-archetype-parent-child-related\",\"label\":\"Missão, equipe relacionada e participante selecionado\",\"description\":\"Prova duas seleções encadeadas com HTTP real: a missão define a surface team e o participante define o detalhe em apresentação.\",\"useWhen\":\"Materialize o arquétipo operacional parent-child-related com composição semântica certificável.\",\"examplePrompts\":[\"Crie uma tela parent-child-related usando o arquétipo certificado Praxis.\",\"Materialize o caso parent-child-related com Dynamic Page e UiCompositionPlan.\"]}}",
|
|
4398
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-parent-child-related.json",
|
|
4399
|
+
"contentHash": "8446afd0d21ab377fb1744593f2f9e8a7bdb334dcedebe1f3b45627233161e42",
|
|
4400
|
+
"sourceKind": "component_definition",
|
|
4401
|
+
"sourceId": "praxis-dynamic-page",
|
|
4402
|
+
"corpusVersion": "1.0.0"
|
|
4403
|
+
},
|
|
4404
|
+
{
|
|
4405
|
+
"chunkIndex": 138,
|
|
4406
|
+
"chunkKind": "recipe",
|
|
4407
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"aiDescription\",\"aiDescription\":\"Prova duas seleções encadeadas sem duplicar semântica do backend: a missão selecionada descobre a equipe pela surface team e o participante selecionado carrega seu detalhe real.\"}",
|
|
4408
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-parent-child-related.json",
|
|
4409
|
+
"contentHash": "f71798be55800d5562af0f43f1fc1e8661fccb307404c19b9a69ded9c0e94eb2",
|
|
4410
|
+
"sourceKind": "component_definition",
|
|
4411
|
+
"sourceId": "praxis-dynamic-page",
|
|
4412
|
+
"corpusVersion": "1.0.0"
|
|
4413
|
+
},
|
|
4414
|
+
{
|
|
4415
|
+
"chunkIndex": 139,
|
|
4416
|
+
"chunkKind": "recipe",
|
|
4417
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"certification\",\"certification\":{\"status\":\"operational-proof\",\"route\":\"/dynamic-page-lab/archetypes/parent-child-related\",\"legacyEvidence\":[\"ERGadm00229 · Servidor → vínculos\",\"Blocos relacionados carregados pelo pai selecionado\",\"Quick Start · operations.missoes → surface team → operations.missao-participantes\"],\"acceptance\":[\"Filtro inline consulta POST /api/operations/missoes/filter\",\"Seleção da missão descobre GET /api/operations/missoes/{id}/surfaces\",\"Surface team materializa a equipe real e suas operações governadas\",\"Seleção do participante consulta GET /api/operations/missao-participantes/{id}\",\"Refresh tardio da equipe no mesmo contexto preserva a seleção do participante\",\"Troca ou revogação do pai invalida seleção e detalhe filhos\",\"Estados vazios orientam a jornada sem seleção implícita\"]}}",
|
|
4418
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-parent-child-related.json",
|
|
4419
|
+
"contentHash": "ebc206dd3e9c43265378a5bbf809d84e434e32a9cd2a454f9ddcf0454ebe4b60",
|
|
4420
|
+
"sourceKind": "component_definition",
|
|
4421
|
+
"sourceId": "praxis-dynamic-page",
|
|
4422
|
+
"corpusVersion": "1.0.0"
|
|
4423
|
+
},
|
|
4424
|
+
{
|
|
4425
|
+
"chunkIndex": 140,
|
|
4426
|
+
"chunkKind": "recipe",
|
|
4427
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"teaches\",\"teaches\":[\"ui-composition-plan\",\"dynamic-page\",\"composition.links\",\"ergon-archetype.parent-child-related\"]}",
|
|
4428
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-parent-child-related.json",
|
|
4429
|
+
"contentHash": "428e35dce2366368a3340b80e702d29eb091ee9bf0793a7db56c20887a8d9ae3",
|
|
4430
|
+
"sourceKind": "component_definition",
|
|
4431
|
+
"sourceId": "praxis-dynamic-page",
|
|
4432
|
+
"corpusVersion": "1.0.0"
|
|
4433
|
+
},
|
|
4434
|
+
{
|
|
4435
|
+
"chunkIndex": 141,
|
|
4436
|
+
"chunkKind": "recipe",
|
|
4437
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlanRef\",\"authoringPlanRef\":\"./praxis-dynamic-page.ergon-archetype-parent-child-related.ui-composition-plan.artifact.json\"}",
|
|
4438
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-parent-child-related.json",
|
|
4439
|
+
"contentHash": "1655115fba773f130ac89c0e512e4d807fbb92b0b266073349eec1204c9336ac",
|
|
4440
|
+
"sourceKind": "component_definition",
|
|
4441
|
+
"sourceId": "praxis-dynamic-page",
|
|
4442
|
+
"corpusVersion": "1.0.0"
|
|
4443
|
+
},
|
|
4444
|
+
{
|
|
4445
|
+
"chunkIndex": 142,
|
|
4446
|
+
"chunkKind": "recipe",
|
|
4447
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan\",\"authoringPlan\":{\"version\":\"1.0\",\"kind\":\"praxis.ui-composition-plan\",\"layoutPreset\":\"ergon-parent-child-related\",\"themePreset\":\"enterprise-operational\",\"state\":{\"values\":{\"missionFilter\":{},\"selectedMission\":null,\"selectedMissionId\":null,\"selectedMissionIdentity\":null,\"selectedParticipant\":null,\"selectedParticipantId\":null,\"selectedParticipantIdentity\":null},\"derived\":{\"teamTitle\":{\"dependsOn\":[\"selectedMissionIdentity\",\"selectedMission\"],\"compute\":{\"kind\":\"operator\",\"operator\":\"coalesce\",\"options\":{\"paths\":[\"selectedMissionIdentity.displayLabel\",\"selectedMissionIdentity.title.value\",\"selectedMission.titulo\"],\"fallback\":\"Equipe da missão\"}}},\"teamSubtitle\":{\"dependsOn\":[\"selectedMission\"],\"compute\":{\"kind\":\"operator\",\"operator\":\"join-nonempty\",\"options\":{\"paths\":[\"selectedMission.status\",\"selectedMission.prioridade\",\"selectedMission.local\"],\"delimiter\":\" · \",\"fallback\":\"Selecione uma missão para materializar sua equipe pela surface team.\"}}},\"participantTitle\":{\"dependsOn\":[\"selectedParticipantIdentity\",\"selectedParticipant\"],\"compute\":{\"kind\":\"operator\",\"operator\":\"coalesce\",\"options\":{\"paths\":[\"selectedParticipantIdentity.displayLabel\",\"selectedParticipantIdentity.title.value\",\"selectedParticipant.funcionarioNome\"],\"fallback\":\"Detalhe do participante\"}}},\"participantSubtitle\":{\"dependsOn\":[\"selectedParticipant\",\"selectedMission\"],\"compute\":{\"kind\":\"operator\",\"operator\":\"join-nonempty\",\"options\":{\"paths\":[\"selectedParticipant.papel\",\"selectedParticipant.resultado\",\"selectedParticipant.missaoTitulo\"],\"delimiter\":\" · \",\"fallback\":\"Selecione um participante da equipe para consultar o registro publicado pelo Quick Start.\"}}}}},\"canvas\":{\"mode\":\"grid\",\"columns\":12,\"rowUnit\":\"auto\",\"gap\":\"16px\",\"autoRows\":\"content\",\"items\":{\"missionFilters\":{\"col\":1,\"row\":1,\"colSpan\":12,\"rowSpan\":1},\"parents\":{\"col\":1,\"row\":2,\"colSpan\":5,\"rowSpan\":1},\"children\":{\"col\":6,\"row\":2,\"colSpan\":7,\"rowSpan\":1},\"childDetail\":{\"col\":1,\"row\":3,\"colSpan\":12,\"rowSpan\":1}}},\"deviceLayouts\":{\"mobile\":{\"canvas\":{\"mode\":\"grid\",\"columns\":1,\"rowUnit\":\"auto\",\"gap\":\"12px\",\"autoRows\":\"content\",\"items\":{\"missionFilters\":{\"col\":1,\"row\":1,\"colSpan\":1,\"rowSpan\":1},\"parents\":{\"col\":1,\"row\":2,\"colSpan\":1,\"rowSpan\":1},\"children\":{\"col\":1,\"row\":3,\"colSpan\":1,\"rowSpan\":1},\"childDetail\":{\"col\":1,\"row\":4,\"colSpan\":1,\"rowSpan\":1}}}}}}}",
|
|
4448
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-parent-child-related.json",
|
|
4449
|
+
"contentHash": "7f4f7ac9ac674df2450764a3dfd36e6c8737279c7b90d0f9baae15685f077f88",
|
|
4450
|
+
"sourceKind": "component_definition",
|
|
4451
|
+
"sourceId": "praxis-dynamic-page",
|
|
4452
|
+
"corpusVersion": "1.0.0"
|
|
4453
|
+
},
|
|
4454
|
+
{
|
|
4455
|
+
"chunkIndex": 143,
|
|
4456
|
+
"chunkKind": "recipe",
|
|
4457
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan\",\"authoringPlan\":{\"widgets\":[{\"key\":\"missionFilters\",\"componentId\":\"praxis-filter\",\"role\":\"query-context\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"filter_alt\",\"title\":\"Localizar missões\",\"subtitle\":\"Filtros inline derivados do contrato real de operations.missoes\",\"bodyLayout\":\"fill\",\"windowActions\":{\"fullscreen\":true,\"collapsible\":true}},\"bindingOrder\":[\"resourcePath\",\"componentInstanceId\",\"alwaysVisibleFields\",\"value\",\"disablePersistence\",\"enableCustomization\",\"showFilterSettings\",\"showAdvancedButton\",\"showAddButton\",\"showClearButton\",\"showSearchButton\",\"placeBooleansInActions\",\"changeDebounceMs\"],\"inputs\":{\"resourcePath\":\"operations/missoes\",\"componentInstanceId\":\"quickstart-mission-parent-child-filter\",\"alwaysVisibleFields\":[\"titulo\",\"status\",\"prioridade\",\"local\"],\"value\":{},\"disablePersistence\":true,\"enableCustomization\":false,\"showFilterSettings\":false,\"showAdvancedButton\":true,\"showAddButton\":true,\"showClearButton\":true,\"showSearchButton\":false,\"placeBooleansInActions\":true,\"changeDebounceMs\":300},\"outputs\":{\"change\":\"emit\",\"requestSearch\":\"emit\",\"clear\":\"emit\",\"contextChange\":\"emit\"}},{\"key\":\"parents\",\"componentId\":\"praxis-table\",\"role\":\"parent-resource\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"assignment\",\"title\":\"Missões\",\"subtitle\":\"Coleção paginada pelo Quick Start; a seleção governa a surface relacionada\",\"bodyLayout\":\"fill\",\"windowActions\":{\"fullscreen\":true,\"collapsible\":true}},\"bindingOrder\":[\"tableId\",\"config\",\"configPersistenceStrategy\",\"enableCustomization\",\"queryContext\",\"resourcePath\"],\"inputs\":{\"tableId\":\"quickstart-mission-parent\",\"resourcePath\":\"operations/missoes\",\"queryContext\":{\"filters\":{}},\"configPersistenceStrategy\":\"volatile\",\"enableCustomization\":false,\"config\":{\"columns\":[],\"columnProjection\":{\"source\":\"schema\",\"include\":[\"titulo\",\"status\",\"prioridade\",\"local\",\"ameacaNome\",\"inicioPrev\"]},\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":8,\"pageSizeOptions\":[8,16,32],\"showFirstLastButtons\":true},\"sorting\":{\"enabled\":true,\"strategy\":\"server\",\"defaultSort\":{\"column\":\"id\",\"direction\":\"desc\"}},\"filtering\":{\"enabled\":false,\"strategy\":\"server\"},\"selection\":{\"enabled\":true,\"type\":\"single\",\"mode\":\"row\",\"allowSelectAll\":false,\"persistSelection\":false,\"persistOnDataUpdate\":false},\"interaction\":{\"rowClick\":{\"enabled\":true,\"action\":\"select\"}}},\"toolbar\":{\"visible\":false},\"appearance\":{\"density\":\"compact\",\"stickyHeader\":true,\"hoverHighlight\":true,\"responsive\":{\"breakpoints\":{\"mobile\":640},\"mobile\":{\"horizontalScroll\":false,\"cardMode\":true,\"priorityColumns\":[\"titulo\",\"status\",\"prioridade\"]}}}}},\"outputs\":{\"selectionChange\":\"emit\"}},{\"key\":\"children\",\"componentId\":\"praxis-related-resource-outlet\",\"role\":\"related-child-resource\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"groups\",\"title\":\"${state.teamTitle}\",\"subtitle\":\"${state.teamSubtitle}\",\"bodyLayout\":\"fill\",\"windowActions\":{\"fullscreen\":true,\"collapsible\":true}},\"bindingOrder\":[\"surfaceId\",\"parentResourcePath\",\"parentResourceId\",\"parentIdentity\",\"mode\",\"tableId\",\"tableConfig\",\"emptyState\",\"enableCustomization\",\"compact\"],\"inputs\":{\"surfaceId\":\"team\",\"parentResourcePath\":\"operations/missoes\",\"parentResourceId\":null,\"parentIdentity\":null,\"mode\":\"inline\",\"tableId\":\"quickstart-mission-team\",\"tableConfig\":{\"columns\":[],\"columnProjection\":{\"source\":\"schema\",\"include\":[\"funcionarioNome\",\"papel\",\"principal\",\"resultado\"],\"overrides\":{\"funcionarioNome\":{\"header\":\"Participante\",\"sticky\":\"start\"},\"principal\":{\"header\":\"Liderança\",\"format\":\"yes-no\",\"align\":\"center\"}}},\"behavior\":{\"pagination\":{\"enabled\":true,\"pageSize\":10,\"pageSizeOptions\":[10,20]},\"sorting\":{\"enabled\":true,\"defaultSort\":{\"column\":\"ordem\",\"direction\":\"asc\"}},\"selection\":{\"enabled\":true,\"type\":\"single\",\"mode\":\"row\",\"allowSelectAll\":false,\"persistSelection\":false,\"persistOnDataUpdate\":true},\"interaction\":{\"rowClick\":{\"enabled\":true,\"action\":\"select\"}}},\"toolbar\":{\"visible\":true,\"title\":\"Participantes\",\"subtitle\":\"Operações e vínculo pai-filho publicados pela surface team\",\"search\":{\"enabled\":true},\"columnsVisibility\":{\"enabled\":false},\"densityToggle\":{\"enabled\":true}},\"appearance\":{\"density\":\"compact\",\"responsive\":{\"breakpoints\":{\"mobile\":640},\"mobile\":{\"horizontalScroll\":false,\"cardMode\":true,\"priorityColumns\":[\"funcionarioNome\",\"papel\",\"principal\"]}}}},\"emptyState\":{\"icon\":\"touch_app\",\"title\":\"Selecione uma missão\",\"description\":\"Escolha uma missão para descobrir e carregar sua equipe pela surface publicada.\",\"tone\":\"primary\",\"variant\":\"transparent\",\"alignment\":\"center\",\"density\":\"compact\",\"iconContainer\":\"circle\"},\"enableCustomization\":false,\"compact\":true},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}},{\"key\":\"childDetail\",\"componentId\":\"praxis-dynamic-form\",\"role\":\"child-detail-presentation\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"badge\",\"title\":\"${state.participantTitle}\",\"subtitle\":\"${state.participantSubtitle}\",\"bodyLayout\":\"fill\",\"windowActions\":{\"fullscreen\":true,\"collapsible\":true}},\"bindingOrder\":[\"formId\",\"componentInstanceId\",\"resourcePath\",\"resourceId\",\"emptyState\",\"mode\",\"schemaSource\",\"layoutPolicy\",\"configPersistenceStrategy\",\"enableCustomization\",\"showAiAssistant\",\"readonlyModeGlobal\",\"presentationModeGlobal\",\"fieldIconPolicy\"],\"inputs\":{\"formId\":\"quickstart-mission-participant-detail\",\"componentInstanceId\":\"quickstart-mission-participant-detail\",\"resourcePath\":\"operations/missao-participantes\",\"resourceId\":null,\"emptyState\":{\"icon\":\"person_search\",\"title\":\"Selecione um participante\",\"description\":\"Escolha um registro na equipe para carregar o detalhe pela API real em modo de apresentação.\",\"tone\":\"primary\",\"variant\":\"transparent\",\"alignment\":\"center\",\"density\":\"compact\",\"iconContainer\":\"circle\"},\"mode\":\"view\",\"schemaSource\":\"resource\",\"layoutPolicy\":{\"source\":\"schema\",\"intent\":\"detail\",\"preset\":\"compactPresentation\",\"lifecycle\":\"live\",\"persistence\":\"transient\",\"schemaOperation\":\"detail\",\"schemaType\":\"response\",\"detailSummary\":{\"includeFields\":[\"funcionarioNome\",\"missaoTitulo\",\"papel\",\"ordem\",\"principal\",\"resultado\"],\"columns\":3,\"responsiveColumns\":{\"lg\":3,\"md\":2,\"sm\":1,\"xs\":1},\"widthPrecedence\":\"summary\"}},\"configPersistenceStrategy\":\"input-first\",\"enableCustomization\":false,\"showAiAssistant\":false,\"readonlyModeGlobal\":true,\"presentationModeGlobal\":true,\"fieldIconPolicy\":\"presentation-only\"},\"outputs\":{\"initializationError\":\"emit\"}}],\"contextScopes\":[{\"id\":\"quickstart-mission:team-context\",\"context\":{\"parentResourcePath\":{\"kind\":\"constant\",\"value\":\"operations/missoes\"},\"parentResourceId\":{\"kind\":\"state\",\"path\":\"selectedMissionId\",\"layer\":\"values\",\"initial\":null},\"parentIdentity\":{\"kind\":\"state\",\"path\":\"selectedMissionIdentity\",\"layer\":\"values\",\"initial\":null}},\"targets\":[{\"widget\":\"children\"}],\"policy\":{\"missingValuePolicy\":\"propagate-undefined\",\"distinct\":true},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"quickstart-mission:participant-detail-context\",\"context\":{\"resourcePath\":{\"kind\":\"constant\",\"value\":\"operations/missao-participantes\"},\"resourceId\":{\"kind\":\"state\",\"path\":\"selectedParticipantId\",\"layer\":\"values\",\"initial\":null}},\"targets\":[{\"widget\":\"childDetail\"}],\"policy\":{\"missingValuePolicy\":\"propagate-undefined\",\"distinct\":true},\"metadata\":{\"source\":\"quickstart-real-http\"}}]}}",
|
|
4458
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-parent-child-related.json",
|
|
4459
|
+
"contentHash": "83f7e3ad9fc009387e60a8987194f5e74d43804b16fdb10208c91202565b7792",
|
|
4460
|
+
"sourceKind": "component_definition",
|
|
4461
|
+
"sourceId": "praxis-dynamic-page",
|
|
4462
|
+
"corpusVersion": "1.0.0"
|
|
4463
|
+
},
|
|
4464
|
+
{
|
|
4465
|
+
"chunkIndex": 144,
|
|
4466
|
+
"chunkKind": "recipe",
|
|
4467
|
+
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"authoringPlan\",\"authoringPlan\":{\"bindings\":[{\"id\":\"missionFilters.change->state.missionFilter\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"missionFilters\",\"port\":\"change\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"missionFilter\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"missionFilters.change->state.missionFilter:pick\",\"path\":\"payload\",\"inputSource\":\"event\",\"fallbackValue\":{}},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"state.missionFilter->parents.queryContext\",\"intent\":\"state-read\",\"from\":{\"kind\":\"state\",\"path\":\"missionFilter\"},\"to\":{\"kind\":\"component-port\",\"widget\":\"parents\",\"port\":\"queryContext\",\"direction\":\"input\"},\"transform\":{\"kind\":\"template\",\"id\":\"state.missionFilter->parents.queryContext:template\",\"template\":{\"filters\":\"${source}\"},\"inputSource\":\"payload\",\"output\":{\"semanticKind\":\"query-context\",\"stableShape\":true}},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"parents.selectionChange->state.selectedMission\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"parents\",\"port\":\"selectionChange\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedMission\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"parents.selectionChange->state.selectedMission:pick\",\"path\":\"payload.selectedRows.0\",\"inputSource\":\"event\",\"fallbackValue\":null},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"parents.selectionChange->state.selectedMissionId\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"parents\",\"port\":\"selectionChange\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedMissionId\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"parents.selectionChange->state.selectedMissionId:pick\",\"path\":\"payload.selectedRows.0.id\",\"inputSource\":\"event\",\"fallbackValue\":null},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"parents.selectionChange->state.selectedMissionIdentity\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"parents\",\"port\":\"selectionChange\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedMissionIdentity\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"parents.selectionChange->state.selectedMissionIdentity:pick\",\"path\":\"payload.resourceIdentity\",\"inputSource\":\"event\",\"fallbackValue\":null},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"parents.selectionChange->state.selectedParticipant:clear\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"parents\",\"port\":\"selectionChange\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedParticipant\"},\"transform\":{\"kind\":\"constant\",\"id\":\"clear-selected-participant\",\"value\":null},\"metadata\":{\"source\":\"quickstart-real-http\",\"reason\":\"parent-context-invalidates-child-selection\"}},{\"id\":\"parents.selectionChange->state.selectedParticipantId:clear\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"parents\",\"port\":\"selectionChange\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedParticipantId\"},\"transform\":{\"kind\":\"constant\",\"id\":\"clear-selected-participant-id\",\"value\":null},\"metadata\":{\"source\":\"quickstart-real-http\",\"reason\":\"parent-context-invalidates-child-selection\"}},{\"id\":\"parents.selectionChange->state.selectedParticipantIdentity:clear\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"parents\",\"port\":\"selectionChange\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedParticipantIdentity\"},\"transform\":{\"kind\":\"constant\",\"id\":\"clear-selected-participant-identity\",\"value\":null},\"metadata\":{\"source\":\"quickstart-real-http\",\"reason\":\"parent-context-invalidates-child-selection\"}},{\"id\":\"children.resourceEvent->state.selectedParticipant\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"children\",\"port\":\"resourceEvent\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedParticipant\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"children.resourceEvent->state.selectedParticipant:pick\",\"path\":\"payload.payload.selectedRows.0\",\"inputSource\":\"event\",\"fallbackValue\":null},\"condition\":{\"===\":[{\"var\":\"payload.kind\"},\"selection-change\"]},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"children.resourceEvent->state.selectedParticipantId\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"children\",\"port\":\"resourceEvent\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedParticipantId\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"children.resourceEvent->state.selectedParticipantId:pick\",\"path\":\"payload.payload.selectedRows.0.id\",\"inputSource\":\"event\",\"fallbackValue\":null},\"condition\":{\"===\":[{\"var\":\"payload.kind\"},\"selection-change\"]},\"metadata\":{\"source\":\"quickstart-real-http\"}},{\"id\":\"children.resourceEvent->state.selectedParticipantIdentity\",\"intent\":\"state-write\",\"from\":{\"kind\":\"component-port\",\"widget\":\"children\",\"port\":\"resourceEvent\",\"direction\":\"output\"},\"to\":{\"kind\":\"state\",\"path\":\"selectedParticipantIdentity\"},\"transform\":{\"kind\":\"pick-path\",\"id\":\"children.resourceEvent->state.selectedParticipantIdentity:pick\",\"path\":\"payload.payload.resourceIdentity\",\"inputSource\":\"event\",\"fallbackValue\":null},\"condition\":{\"===\":[{\"var\":\"payload.kind\"},\"selection-change\"]},\"metadata\":{\"source\":\"quickstart-real-http\"}}],\"diagnostics\":{\"archetype\":\"parent-child-related\",\"adherence\":[\"ja-suportado-mal-nomeado-ou-mal-materializado\"],\"evidence\":\"quickstart-real-http\",\"canonicalResources\":[\"operations.missoes\",\"operations.missao-participantes\"],\"requiredSurfaces\":[\"POST /api/operations/missoes/filter\",\"GET /api/operations/missoes/{id}/surfaces\",\"GET /api/operations/missoes/{id}/team\",\"GET /api/operations/missao-participantes/{id}\",\"team\"],\"localDataAllowed\":false,\"legacyScreen\":\"ERGadm00229\",\"runtimeTarget\":\"WidgetPageDefinition.composition.links\"}}}",
|
|
4468
|
+
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.ergon-archetype-parent-child-related.json",
|
|
4469
|
+
"contentHash": "b5b05dcfdebdc5b82bead998d56bb24ed1acb346ec5b9733fb7112fd791963ef",
|
|
4470
|
+
"sourceKind": "component_definition",
|
|
4471
|
+
"sourceId": "praxis-dynamic-page",
|
|
4472
|
+
"corpusVersion": "1.0.0"
|
|
4473
|
+
},
|
|
4474
|
+
{
|
|
4475
|
+
"chunkIndex": 145,
|
|
4476
|
+
"chunkKind": "recipe",
|
|
4079
4477
|
"content": "{\"_comment\":\"Recipe for agents to create a Praxis Dynamic Page with a governed, progressively disclosed case dossier.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"expansion-governed-case-dossier\",\"status\":\"public-example\",\"useWhen\":\"Create a dense enterprise review page where praxis-expansion organizes related context, evidence and decision notes without owning business effects.\",\"examplePrompts\":[\"create a governed case review dossier\",\"show praxis-expansion with lazy nested widgets\",\"generate an enterprise accordion with stable panel identities\"]},\"platformValue\":{\"canonicalRuntime\":\"@praxisui/expansion owns panel identity, disclosure state, lazy content and panel-aware nested widget events.\",\"hostBoundary\":\"The host owns authorization, business effects and durable domain state; panel action identifiers only express local intent.\",\"angularRuntime\":\"@praxisui/core resolves praxis-expansion and its nested widgets through ComponentMetadataRegistry and DynamicWidgetLoader.\",\"publicExamples\":\"praxis-ui-landing-page exposes the live preview, complete envelope and didactic walkthrough.\",\"agentCorpus\":\"This recipe keeps agents on ExpansionMetadata paths: accordion, appearance, panels, content, widgets and actionButtons.\"},\"authoringGuidance\":[\"Use a stable expansionId and stable panels[].id values because persistence, authoring and event paths depend on them.\",\"Use panels[].content for metadata-driven fields and panels[].widgets for registered runtime widgets.\",\"Keep optional or expensive nested widgets in collapsed panels so matExpansionPanelContent preserves lazy materialization.\",\"Use panel actionButtons only for local intent; authorization and side effects remain host-owned.\",\"Do not replace WidgetEventEnvelope with local callback names or title-based routing.\"],\"teaches\":[\"expansion.stable-panel-identity\",\"expansion.lazy-content\",\"expansion.nested-widgets\",\"expansion.panel-actions\",\"expansion.widget-event-paths\",\"dynamic-page.registry-materialization\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"governedCaseDossier\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"fact_check\",\"title\":\"Governed case dossier\",\"subtitle\":\"Progressive context, lazy evidence and panel-aware actions\"},\"definition\":{\"id\":\"praxis-expansion\",\"bindingOrder\":[\"expansionId\",\"componentInstanceId\",\"config\",\"context\"],\"inputs\":{\"expansionId\":\"governed-case-dossier\",\"componentInstanceId\":\"dynamic-page-showcase\",\"enableCustomization\":false,\"strictValidation\":true,\"context\":{\"caseId\":\"CASE-2026-0842\",\"resourceKey\":\"operations.case-review\",\"reviewStage\":\"human-approval\"},\"config\":{\"appearance\":{\"density\":\"comfortable\",\"container\":{\"panelGap\":\"12px\"},\"header\":{\"titleWeight\":\"700\",\"descriptionWeight\":\"500\"}},\"accordion\":{\"id\":\"case-review-sections\",\"multi\":true,\"displayMode\":\"default\",\"togglePosition\":\"after\",\"hideToggle\":false},\"panels\":[{\"id\":\"case-context\",\"title\":\"Decision context\",\"description\":\"Identity, ownership and review priority\",\"icon\":\"assignment\",\"expanded\":true,\"content\":[{\"name\":\"caseReference\",\"label\":\"Case reference\",\"controlType\":\"input\",\"defaultValue\":\"CASE-2026-0842\",\"prefixIcon\":\"tag\",\"hint\":\"Stable domain identity remains owned by the host.\"},{\"name\":\"reviewOwner\",\"label\":\"Review owner\",\"controlType\":\"input\",\"defaultValue\":\"Enterprise Risk Office\",\"prefixIcon\":\"group\"},{\"name\":\"priority\",\"label\":\"Priority\",\"controlType\":\"select\",\"defaultValue\":\"high\",\"options\":[{\"text\":\"Standard\",\"value\":\"standard\"},{\"text\":\"High\",\"value\":\"high\"},{\"text\":\"Critical\",\"value\":\"critical\"}]}],\"actionButtons\":[{\"label\":\"Acknowledge context\",\"icon\":\"visibility\",\"action\":\"acknowledge-case-context\"}]},{\"id\":\"evidence-register\",\"title\":\"Evidence register\",\"description\":\"Materialized only when the reviewer requests detail\",\"icon\":\"inventory_2\",\"widgets\":[{\"id\":\"praxis-list\",\"inputs\":{\"listId\":\"case-evidence-register\",\"config\":{\"dataSource\":{\"data\":[{\"id\":1,\"title\":\"Identity verification\",\"owner\":\"People Operations\",\"status\":\"Verified\",\"risk\":\"Low\"},{\"id\":2,\"title\":\"Access review\",\"owner\":\"Security\",\"status\":\"Pending\",\"risk\":\"High\"},{\"id\":3,\"title\":\"Manager attestation\",\"owner\":\"Business Unit\",\"status\":\"Received\",\"risk\":\"Medium\"}]},\"selection\":{\"mode\":\"single\",\"compareBy\":\"id\",\"return\":\"id\"},\"templating\":{\"leading\":{\"type\":\"icon\",\"expr\":\"description\"},\"primary\":{\"type\":\"text\",\"expr\":\"${item.title}\"},\"secondary\":{\"type\":\"text\",\"expr\":\"${item.owner}\"},\"meta\":{\"type\":\"chip\",\"expr\":\"${item.risk}\",\"variant\":\"outlined\"},\"trailing\":{\"type\":\"chip\",\"expr\":\"${item.status}\",\"variant\":\"filled\"}}}},\"outputs\":{\"itemClick\":\"emit\",\"selectionChange\":\"emit\"}}],\"actionButtons\":[{\"label\":\"Request evidence\",\"icon\":\"add_task\",\"action\":\"request-case-evidence\"}]},{\"id\":\"decision-rationale\",\"title\":\"Decision rationale\",\"description\":\"Governance boundary and host-owned outcome\",\"icon\":\"gavel\",\"widgets\":[{\"id\":\"widget:rich-text-block\",\"inputs\":{\"title\":\"The panel coordinates context; it does not decide\",\"content\":\"Praxis Expansion preserves progressive disclosure, stable identity and event provenance. Authorization, policy evaluation and durable approval remain explicit responsibilities of the host and backend.\",\"variant\":\"emphasis\"}}],\"actionButtons\":[{\"label\":\"Submit for approval\",\"icon\":\"send\",\"action\":\"submit-case-for-approval\"}]}]}},\"outputs\":{\"opened\":\"emit\",\"closed\":\"emit\",\"expandedChange\":\"emit\",\"afterExpand\":\"emit\",\"afterCollapse\":\"emit\",\"widgetEvent\":\"emit\"}}}]}}",
|
|
4080
4478
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.expansion-governed-case-dossier.json",
|
|
4081
4479
|
"contentHash": "90d2ca5a26d3059d2fa5df46ac5392b010702eba47cac9cef08732447706708b",
|
|
@@ -4084,7 +4482,7 @@
|
|
|
4084
4482
|
"corpusVersion": "1.0.0"
|
|
4085
4483
|
},
|
|
4086
4484
|
{
|
|
4087
|
-
"chunkIndex":
|
|
4485
|
+
"chunkIndex": 146,
|
|
4088
4486
|
"chunkKind": "recipe",
|
|
4089
4487
|
"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\"}}}]}}",
|
|
4090
4488
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.files-upload-evidence-flow.json",
|
|
@@ -4094,7 +4492,7 @@
|
|
|
4094
4492
|
"corpusVersion": "1.0.0"
|
|
4095
4493
|
},
|
|
4096
4494
|
{
|
|
4097
|
-
"chunkIndex":
|
|
4495
|
+
"chunkIndex": 147,
|
|
4098
4496
|
"chunkKind": "recipe",
|
|
4099
4497
|
"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\"}}}]}}",
|
|
4100
4498
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.form.json",
|
|
@@ -4104,7 +4502,7 @@
|
|
|
4104
4502
|
"corpusVersion": "1.0.0"
|
|
4105
4503
|
},
|
|
4106
4504
|
{
|
|
4107
|
-
"chunkIndex":
|
|
4505
|
+
"chunkIndex": 148,
|
|
4108
4506
|
"chunkKind": "recipe",
|
|
4109
4507
|
"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\"}}}]}}",
|
|
4110
4508
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.inline-filter-editorial-lab.json",
|
|
@@ -4114,7 +4512,7 @@
|
|
|
4114
4512
|
"corpusVersion": "1.0.0"
|
|
4115
4513
|
},
|
|
4116
4514
|
{
|
|
4117
|
-
"chunkIndex":
|
|
4515
|
+
"chunkIndex": 149,
|
|
4118
4516
|
"chunkKind": "recipe",
|
|
4119
4517
|
"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\"}}}]}}",
|
|
4120
4518
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.inline-filter-lab.json",
|
|
@@ -4124,7 +4522,7 @@
|
|
|
4124
4522
|
"corpusVersion": "1.0.0"
|
|
4125
4523
|
},
|
|
4126
4524
|
{
|
|
4127
|
-
"chunkIndex":
|
|
4525
|
+
"chunkIndex": 150,
|
|
4128
4526
|
"chunkKind": "recipe",
|
|
4129
4527
|
"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\"}}}]}}",
|
|
4130
4528
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.json",
|
|
@@ -4134,7 +4532,7 @@
|
|
|
4134
4532
|
"corpusVersion": "1.0.0"
|
|
4135
4533
|
},
|
|
4136
4534
|
{
|
|
4137
|
-
"chunkIndex":
|
|
4535
|
+
"chunkIndex": 151,
|
|
4138
4536
|
"chunkKind": "recipe",
|
|
4139
4537
|
"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.\"}",
|
|
4140
4538
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
|
|
@@ -4144,7 +4542,7 @@
|
|
|
4144
4542
|
"corpusVersion": "1.0.0"
|
|
4145
4543
|
},
|
|
4146
4544
|
{
|
|
4147
|
-
"chunkIndex":
|
|
4545
|
+
"chunkIndex": 152,
|
|
4148
4546
|
"chunkKind": "recipe",
|
|
4149
4547
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment2\",\"_comment2\":\"Use quando a meta for mostrar conditionalDisplay, conditionalRequired, formRules e workflow fields em praxis-dynamic-form.\"}",
|
|
4150
4548
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
|
|
@@ -4154,7 +4552,7 @@
|
|
|
4154
4552
|
"corpusVersion": "1.0.0"
|
|
4155
4553
|
},
|
|
4156
4554
|
{
|
|
4157
|
-
"chunkIndex":
|
|
4555
|
+
"chunkIndex": 153,
|
|
4158
4556
|
"chunkKind": "recipe",
|
|
4159
4557
|
"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\"]}}",
|
|
4160
4558
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
|
|
@@ -4164,7 +4562,7 @@
|
|
|
4164
4562
|
"corpusVersion": "1.0.0"
|
|
4165
4563
|
},
|
|
4166
4564
|
{
|
|
4167
|
-
"chunkIndex":
|
|
4565
|
+
"chunkIndex": 154,
|
|
4168
4566
|
"chunkKind": "recipe",
|
|
4169
4567
|
"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.\"}}",
|
|
4170
4568
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
|
|
@@ -4174,7 +4572,7 @@
|
|
|
4174
4572
|
"corpusVersion": "1.0.0"
|
|
4175
4573
|
},
|
|
4176
4574
|
{
|
|
4177
|
-
"chunkIndex":
|
|
4575
|
+
"chunkIndex": 155,
|
|
4178
4576
|
"chunkKind": "recipe",
|
|
4179
4577
|
"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\"]}}",
|
|
4180
4578
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
|
|
@@ -4184,7 +4582,7 @@
|
|
|
4184
4582
|
"corpusVersion": "1.0.0"
|
|
4185
4583
|
},
|
|
4186
4584
|
{
|
|
4187
|
-
"chunkIndex":
|
|
4585
|
+
"chunkIndex": 156,
|
|
4188
4586
|
"chunkKind": "recipe",
|
|
4189
4587
|
"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.\"]}",
|
|
4190
4588
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
|
|
@@ -4194,7 +4592,7 @@
|
|
|
4194
4592
|
"corpusVersion": "1.0.0"
|
|
4195
4593
|
},
|
|
4196
4594
|
{
|
|
4197
|
-
"chunkIndex":
|
|
4595
|
+
"chunkIndex": 157,
|
|
4198
4596
|
"chunkKind": "recipe",
|
|
4199
4597
|
"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\"]}",
|
|
4200
4598
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
|
|
@@ -4204,7 +4602,7 @@
|
|
|
4204
4602
|
"corpusVersion": "1.0.0"
|
|
4205
4603
|
},
|
|
4206
4604
|
{
|
|
4207
|
-
"chunkIndex":
|
|
4605
|
+
"chunkIndex": 158,
|
|
4208
4606
|
"chunkKind": "recipe",
|
|
4209
4607
|
"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\"}}}}}]}}",
|
|
4210
4608
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.lifecycle-form.json",
|
|
@@ -4214,7 +4612,7 @@
|
|
|
4214
4612
|
"corpusVersion": "1.0.0"
|
|
4215
4613
|
},
|
|
4216
4614
|
{
|
|
4217
|
-
"chunkIndex":
|
|
4615
|
+
"chunkIndex": 159,
|
|
4218
4616
|
"chunkKind": "recipe",
|
|
4219
4617
|
"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\"}}}]}}",
|
|
4220
4618
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.list.json",
|
|
@@ -4224,7 +4622,7 @@
|
|
|
4224
4622
|
"corpusVersion": "1.0.0"
|
|
4225
4623
|
},
|
|
4226
4624
|
{
|
|
4227
|
-
"chunkIndex":
|
|
4625
|
+
"chunkIndex": 160,
|
|
4228
4626
|
"chunkKind": "recipe",
|
|
4229
4627
|
"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\"}]}}",
|
|
4230
4628
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.master-detail-address.json",
|
|
@@ -4234,7 +4632,7 @@
|
|
|
4234
4632
|
"corpusVersion": "1.0.0"
|
|
4235
4633
|
},
|
|
4236
4634
|
{
|
|
4237
|
-
"chunkIndex":
|
|
4635
|
+
"chunkIndex": 161,
|
|
4238
4636
|
"chunkKind": "recipe",
|
|
4239
4637
|
"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}}\"}]}}",
|
|
4240
4638
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.master-detail.json",
|
|
@@ -4244,7 +4642,7 @@
|
|
|
4244
4642
|
"corpusVersion": "1.0.0"
|
|
4245
4643
|
},
|
|
4246
4644
|
{
|
|
4247
|
-
"chunkIndex":
|
|
4645
|
+
"chunkIndex": 162,
|
|
4248
4646
|
"chunkKind": "recipe",
|
|
4249
4647
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment\",\"_comment\":\"Recipe end-to-end para agentes criarem uma Praxis Dynamic Page rica contra o quickstart publicado.\"}",
|
|
4250
4648
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
|
|
@@ -4254,7 +4652,7 @@
|
|
|
4254
4652
|
"corpusVersion": "1.0.0"
|
|
4255
4653
|
},
|
|
4256
4654
|
{
|
|
4257
|
-
"chunkIndex":
|
|
4655
|
+
"chunkIndex": 163,
|
|
4258
4656
|
"chunkKind": "recipe",
|
|
4259
4657
|
"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.\"}",
|
|
4260
4658
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
|
|
@@ -4264,7 +4662,7 @@
|
|
|
4264
4662
|
"corpusVersion": "1.0.0"
|
|
4265
4663
|
},
|
|
4266
4664
|
{
|
|
4267
|
-
"chunkIndex":
|
|
4665
|
+
"chunkIndex": 164,
|
|
4268
4666
|
"chunkKind": "recipe",
|
|
4269
4667
|
"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\"]}}",
|
|
4270
4668
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
|
|
@@ -4274,7 +4672,7 @@
|
|
|
4274
4672
|
"corpusVersion": "1.0.0"
|
|
4275
4673
|
},
|
|
4276
4674
|
{
|
|
4277
|
-
"chunkIndex":
|
|
4675
|
+
"chunkIndex": 165,
|
|
4278
4676
|
"chunkKind": "recipe",
|
|
4279
4677
|
"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.\"}}",
|
|
4280
4678
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
|
|
@@ -4284,7 +4682,7 @@
|
|
|
4284
4682
|
"corpusVersion": "1.0.0"
|
|
4285
4683
|
},
|
|
4286
4684
|
{
|
|
4287
|
-
"chunkIndex":
|
|
4685
|
+
"chunkIndex": 166,
|
|
4288
4686
|
"chunkKind": "recipe",
|
|
4289
4687
|
"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\"]}}",
|
|
4290
4688
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
|
|
@@ -4294,7 +4692,7 @@
|
|
|
4294
4692
|
"corpusVersion": "1.0.0"
|
|
4295
4693
|
},
|
|
4296
4694
|
{
|
|
4297
|
-
"chunkIndex":
|
|
4695
|
+
"chunkIndex": 167,
|
|
4298
4696
|
"chunkKind": "recipe",
|
|
4299
4697
|
"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.\"]}",
|
|
4300
4698
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
|
|
@@ -4304,7 +4702,7 @@
|
|
|
4304
4702
|
"corpusVersion": "1.0.0"
|
|
4305
4703
|
},
|
|
4306
4704
|
{
|
|
4307
|
-
"chunkIndex":
|
|
4705
|
+
"chunkIndex": 168,
|
|
4308
4706
|
"chunkKind": "recipe",
|
|
4309
4707
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"themePreset\":\"executive-command-center\",\"i18n\":{\"fallbackLocale\":\"en-US\",\"dictionaries\":{\"en-US\":{\"mission.chart.shell.title\":\"Mission status mix\",\"mission.chart.shell.subtitle\":\"Remote stats projection from the published quickstart\",\"mission.chart.dimension.status\":\"Status\",\"mission.chart.metric.missions\":\"Missions\",\"mission.portfolio.shell.title\":\"Mission portfolio\",\"mission.portfolio.shell.subtitle\":\"Aggregated mission status and threat context\",\"mission.portfolio.toolbar.title\":\"Mission portfolio\",\"mission.workflow.shell.title\":\"Workflow actions\",\"mission.workflow.shell.subtitle\":\"Host-mediated actions declared by the mission controller contract\",\"mission.workflow.toolbar.title\":\"Mission workflow\",\"mission.discovery.surfaces\":\"Surfaces\",\"mission.discovery.actions\":\"Actions\",\"mission.column.mission\":\"Mission\",\"mission.column.status\":\"Status\",\"mission.column.priority\":\"Priority\",\"mission.column.threat\":\"Threat\",\"mission.column.workflow\":\"Workflow\",\"mission.action.start\":\"Start\",\"mission.action.pause\":\"Pause\",\"mission.action.resume\":\"Resume\",\"mission.action.complete\":\"Complete\",\"mission.team.shell.title\":\"Mission team\",\"mission.team.shell.subtitle\":\"Participants, roles and outcomes\",\"mission.team.toolbar.title\":\"Mission team\",\"mission.column.order\":\"Order\",\"mission.column.hero\":\"Hero\",\"mission.column.role\":\"Role\",\"mission.column.outcome\":\"Outcome\",\"mission.timeline.shell.title\":\"Mission timeline\",\"mission.timeline.shell.subtitle\":\"Governed event surface for selected mission\",\"mission.timeline.toolbar.title\":\"Mission timeline\",\"mission.column.type\":\"Type\",\"mission.column.event\":\"Event\",\"mission.column.occurredAt\":\"Occurred at\"},\"pt-BR\":{\"mission.chart.shell.title\":\"Distribuição de status das missões\",\"mission.chart.shell.subtitle\":\"Projeção remota de estatísticas do quickstart publicado\",\"mission.chart.dimension.status\":\"Status\",\"mission.chart.metric.missions\":\"Missões\",\"mission.portfolio.shell.title\":\"Portfólio de missões\",\"mission.portfolio.shell.subtitle\":\"Contexto agregado de status e ameaças das missões\",\"mission.portfolio.toolbar.title\":\"Portfólio de missões\",\"mission.workflow.shell.title\":\"Ações do fluxo\",\"mission.workflow.shell.subtitle\":\"Ações mediadas pelo host e declaradas pelo contrato do controlador de missões\",\"mission.workflow.toolbar.title\":\"Fluxo da missão\",\"mission.discovery.surfaces\":\"Superfícies\",\"mission.discovery.actions\":\"Ações\",\"mission.column.mission\":\"Missão\",\"mission.column.status\":\"Status\",\"mission.column.priority\":\"Prioridade\",\"mission.column.threat\":\"Ameaça\",\"mission.column.workflow\":\"Fluxo\",\"mission.action.start\":\"Iniciar\",\"mission.action.pause\":\"Pausar\",\"mission.action.resume\":\"Retomar\",\"mission.action.complete\":\"Concluir\",\"mission.team.shell.title\":\"Equipe da missão\",\"mission.team.shell.subtitle\":\"Participantes, papéis e resultados\",\"mission.team.toolbar.title\":\"Equipe da missão\",\"mission.column.order\":\"Ordem\",\"mission.column.hero\":\"Herói\",\"mission.column.role\":\"Papel\",\"mission.column.outcome\":\"Resultado\",\"mission.timeline.shell.title\":\"Linha do tempo da missão\",\"mission.timeline.shell.subtitle\":\"Superfície governada de eventos da missão selecionada\",\"mission.timeline.toolbar.title\":\"Linha do tempo da missão\",\"mission.column.type\":\"Tipo\",\"mission.column.event\":\"Evento\",\"mission.column.occurredAt\":\"Ocorrido em\"}}},\"layout\":{\"orientation\":\"columns\",\"columns\":3,\"gap\":\"16px\"},\"deviceLayouts\":{\"tablet\":{\"layout\":{\"orientation\":\"columns\",\"columns\":2,\"gap\":\"14px\"}},\"mobile\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"12px\"}}},\"state\":{\"values\":{\"selection\":{\"missionId\":1}}}}}",
|
|
4310
4708
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
|
|
@@ -4314,7 +4712,7 @@
|
|
|
4314
4712
|
"corpusVersion": "1.0.0"
|
|
4315
4713
|
},
|
|
4316
4714
|
{
|
|
4317
|
-
"chunkIndex":
|
|
4715
|
+
"chunkIndex": 169,
|
|
4318
4716
|
"chunkKind": "recipe",
|
|
4319
4717
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"widgets\":[{\"key\":\"missionStatusChart\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"bar_chart\",\"title\":{\"key\":\"mission.chart.shell.title\",\"text\":\"Mission status mix\"},\"subtitle\":{\"key\":\"mission.chart.shell.subtitle\",\"text\":\"Remote stats projection from the published quickstart\"}},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"mission-status-mix\",\"kind\":\"horizontal-bar\",\"orientation\":\"horizontal\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/operations/vw-resumo-missoes\",\"operation\":\"group-by\",\"options\":{\"limit\":10,\"orderBy\":\"key-asc\"}},\"dimensions\":[{\"field\":\"status\",\"label\":{\"key\":\"mission.chart.dimension.status\",\"text\":\"Status\"},\"role\":\"category\"}],\"metrics\":[{\"field\":\"missions\",\"label\":{\"key\":\"mission.chart.metric.missions\",\"text\":\"Missions\"},\"aggregation\":\"count\"}],\"events\":{\"pointClick\":{\"action\":\"emit\"},\"selectionChange\":{\"action\":\"emit\",\"mapping\":{\"status\":\"status\"}},\"crossFilter\":{\"action\":\"filter-widget\",\"target\":\"missionSummary\",\"mapping\":{\"status\":\"status\"}}},\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true},\"theme\":{\"surface\":{\"mode\":\"embedded\"}}}},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"crossFilter\":\"emit\"}}},{\"key\":\"missionSummary\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"radar\",\"title\":{\"key\":\"mission.portfolio.shell.title\",\"text\":\"Mission portfolio\"},\"subtitle\":{\"key\":\"mission.portfolio.shell.subtitle\",\"text\":\"Aggregated mission status and threat context\"}},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\"],\"inputs\":{\"resourcePath\":\"operations/vw-resumo-missoes\",\"tableId\":\"operations-vw-resumo-missoes-command-center\",\"config\":{\"meta\":{\"idField\":\"missaoId\"},\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"mission.portfolio.toolbar.title\",\"text\":\"Mission portfolio\"},\"actions\":[{\"id\":\"inspect-surfaces\",\"label\":{\"key\":\"mission.discovery.surfaces\",\"text\":\"Surfaces\"},\"icon\":\"layers\",\"action\":\"inspect-surfaces\",\"discovery\":{\"rel\":\"surfaces\",\"scope\":\"resource\",\"resourcePath\":\"operations/vw-resumo-missoes\",\"resourceKey\":\"operations.vw-resumo-missoes\"}},{\"id\":\"inspect-actions\",\"label\":{\"key\":\"mission.discovery.actions\",\"text\":\"Actions\"},\"icon\":\"bolt\",\"action\":\"inspect-actions\",\"discovery\":{\"rel\":\"actions\",\"scope\":\"resource\",\"resourcePath\":\"operations/vw-resumo-missoes\",\"resourceKey\":\"operations.vw-resumo-missoes\"}}]},\"columns\":[{\"field\":\"titulo\",\"header\":{\"key\":\"mission.column.mission\",\"text\":\"Mission\"},\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"status\",\"header\":{\"key\":\"mission.column.status\",\"text\":\"Status\"},\"type\":\"badge\"},{\"field\":\"prioridade\",\"header\":{\"key\":\"mission.column.priority\",\"text\":\"Priority\"},\"type\":\"badge\"},{\"field\":\"ameaca\",\"header\":{\"key\":\"mission.column.threat\",\"text\":\"Threat\"},\"type\":\"text\"}],\"behavior\":{\"selection\":{\"enabled\":true,\"type\":\"single\"}}}},\"outputs\":{\"rowClick\":\"emit\",\"toolbarAction\":\"emit\"}}},{\"key\":\"missionWorkflow\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"bolt\",\"title\":{\"key\":\"mission.workflow.shell.title\",\"text\":\"Workflow actions\"},\"subtitle\":{\"key\":\"mission.workflow.shell.subtitle\",\"text\":\"Host-mediated actions declared by the mission controller contract\"}},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\",\"queryContext\"],\"inputs\":{\"resourcePath\":\"operations/missoes\",\"tableId\":\"operations-missoes-workflow-actions\",\"queryContext\":{\"filters\":{}},\"config\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"mission.workflow.toolbar.title\",\"text\":\"Mission workflow\"},\"actions\":[{\"id\":\"inspect-surfaces\",\"label\":{\"key\":\"mission.discovery.surfaces\",\"text\":\"Surfaces\"},\"icon\":\"layers\",\"action\":\"inspect-surfaces\",\"discovery\":{\"rel\":\"surfaces\",\"scope\":\"resource\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}},{\"id\":\"inspect-actions\",\"label\":{\"key\":\"mission.discovery.actions\",\"text\":\"Actions\"},\"icon\":\"bolt\",\"action\":\"inspect-actions\",\"discovery\":{\"rel\":\"actions\",\"scope\":\"resource\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}}]},\"actions\":{\"row\":{\"enabled\":true,\"display\":\"buttons\",\"width\":\"360px\",\"maxVisibleActions\":3,\"behavior\":{\"maxInline\":3},\"position\":\"end\",\"header\":{\"label\":{\"key\":\"mission.column.workflow\",\"text\":\"Workflow\"},\"icon\":\"bolt\"},\"actions\":[{\"id\":\"start\",\"action\":\"start\",\"label\":{\"key\":\"mission.action.start\",\"text\":\"Start\"},\"icon\":\"play_arrow\",\"visibleWhen\":{\"===\":[{\"var\":\"status\"},\"PLANEJADA\"]},\"endpoint\":{\"method\":\"POST\",\"pathTemplate\":\"/api/operations/missoes/{id}/actions/start\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}},{\"id\":\"pause\",\"action\":\"pause\",\"label\":{\"key\":\"mission.action.pause\",\"text\":\"Pause\"},\"icon\":\"pause\",\"visibleWhen\":{\"===\":[{\"var\":\"status\"},\"EM_ANDAMENTO\"]},\"endpoint\":{\"method\":\"POST\",\"pathTemplate\":\"/api/operations/missoes/{id}/actions/pause\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}},{\"id\":\"resume\",\"action\":\"resume\",\"label\":{\"key\":\"mission.action.resume\",\"text\":\"Resume\"},\"icon\":\"replay\",\"visibleWhen\":{\"===\":[{\"var\":\"status\"},\"PAUSADA\"]},\"endpoint\":{\"method\":\"POST\",\"pathTemplate\":\"/api/operations/missoes/{id}/actions/resume\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}},{\"id\":\"complete\",\"action\":\"complete\",\"label\":{\"key\":\"mission.action.complete\",\"text\":\"Complete\"},\"icon\":\"task_alt\",\"visibleWhen\":{\"===\":[{\"var\":\"status\"},\"EM_ANDAMENTO\"]},\"endpoint\":{\"method\":\"POST\",\"pathTemplate\":\"/api/operations/missoes/{id}/actions/complete\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}}]}},\"behavior\":{\"selection\":{\"enabled\":true,\"type\":\"single\"}}}},\"outputs\":{\"rowClick\":\"emit\",\"rowAction\":\"emit\",\"toolbarAction\":\"emit\"}}},{\"key\":\"missionTeam\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"groups\",\"title\":{\"key\":\"mission.team.shell.title\",\"text\":\"Mission team\"},\"subtitle\":{\"key\":\"mission.team.shell.subtitle\",\"text\":\"Participants, roles and outcomes\"}},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\",\"queryContext\"],\"inputs\":{\"resourcePath\":\"operations/missao-participantes\",\"tableId\":\"operations-missao-participantes-command-center\",\"queryContext\":{\"filters\":{\"missaoId\":1}},\"config\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"mission.team.toolbar.title\",\"text\":\"Mission team\"}},\"columns\":[{\"field\":\"ordem\",\"header\":{\"key\":\"mission.column.order\",\"text\":\"Order\"},\"type\":\"number\"},{\"field\":\"funcionarioNome\",\"header\":{\"key\":\"mission.column.hero\",\"text\":\"Hero\"},\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"papel\",\"header\":{\"key\":\"mission.column.role\",\"text\":\"Role\"},\"type\":\"badge\"},{\"field\":\"resultado\",\"header\":{\"key\":\"mission.column.outcome\",\"text\":\"Outcome\"},\"type\":\"badge\"}]}},\"outputs\":{\"rowClick\":\"emit\",\"toolbarAction\":\"emit\"}}},{\"key\":\"missionTimeline\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"timeline\",\"title\":{\"key\":\"mission.timeline.shell.title\",\"text\":\"Mission timeline\"},\"subtitle\":{\"key\":\"mission.timeline.shell.subtitle\",\"text\":\"Governed event surface for selected mission\"}},\"definition\":{\"id\":\"praxis-table\",\"bindingOrder\":[\"config\",\"resourcePath\",\"queryContext\"],\"inputs\":{\"resourcePath\":\"operations/missao-eventos\",\"tableId\":\"operations-missao-eventos-command-center\",\"queryContext\":{\"filters\":{\"missaoId\":1}},\"config\":{\"toolbar\":{\"visible\":true,\"title\":{\"key\":\"mission.timeline.toolbar.title\",\"text\":\"Mission timeline\"}},\"columns\":[{\"field\":\"ordem\",\"header\":{\"key\":\"mission.column.order\",\"text\":\"Order\"},\"type\":\"number\"},{\"field\":\"tipo\",\"header\":{\"key\":\"mission.column.type\",\"text\":\"Type\"},\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"descricao\",\"header\":{\"key\":\"mission.column.event\",\"text\":\"Event\"},\"type\":\"text\"},{\"field\":\"ocorridoEm\",\"header\":{\"key\":\"mission.column.occurredAt\",\"text\":\"Occurred at\"},\"type\":\"date-time\"}]}},\"outputs\":{\"rowClick\":\"emit\",\"toolbarAction\":\"emit\"}}}]}}",
|
|
4320
4718
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
|
|
@@ -4324,7 +4722,7 @@
|
|
|
4324
4722
|
"corpusVersion": "1.0.0"
|
|
4325
4723
|
},
|
|
4326
4724
|
{
|
|
4327
|
-
"chunkIndex":
|
|
4725
|
+
"chunkIndex": 170,
|
|
4328
4726
|
"chunkKind": "recipe",
|
|
4329
4727
|
"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}\"}}}}]}}]}}}",
|
|
4330
4728
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.mission-command-center.json",
|
|
@@ -4334,7 +4732,7 @@
|
|
|
4334
4732
|
"corpusVersion": "1.0.0"
|
|
4335
4733
|
},
|
|
4336
4734
|
{
|
|
4337
|
-
"chunkIndex":
|
|
4735
|
+
"chunkIndex": 171,
|
|
4338
4736
|
"chunkKind": "recipe",
|
|
4339
4737
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"_comment\",\"_comment\":\"Golden recipe for nested component ports in Praxis Dynamic Page.\"}",
|
|
4340
4738
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4344,7 +4742,7 @@
|
|
|
4344
4742
|
"corpusVersion": "1.0.0"
|
|
4345
4743
|
},
|
|
4346
4744
|
{
|
|
4347
|
-
"chunkIndex":
|
|
4745
|
+
"chunkIndex": 172,
|
|
4348
4746
|
"chunkKind": "recipe",
|
|
4349
4747
|
"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.\"}",
|
|
4350
4748
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4354,7 +4752,7 @@
|
|
|
4354
4752
|
"corpusVersion": "1.0.0"
|
|
4355
4753
|
},
|
|
4356
4754
|
{
|
|
4357
|
-
"chunkIndex":
|
|
4755
|
+
"chunkIndex": 173,
|
|
4358
4756
|
"chunkKind": "recipe",
|
|
4359
4757
|
"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\"]}}",
|
|
4360
4758
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4364,7 +4762,7 @@
|
|
|
4364
4762
|
"corpusVersion": "1.0.0"
|
|
4365
4763
|
},
|
|
4366
4764
|
{
|
|
4367
|
-
"chunkIndex":
|
|
4765
|
+
"chunkIndex": 174,
|
|
4368
4766
|
"chunkKind": "recipe",
|
|
4369
4767
|
"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.\"}}",
|
|
4370
4768
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4374,7 +4772,7 @@
|
|
|
4374
4772
|
"corpusVersion": "1.0.0"
|
|
4375
4773
|
},
|
|
4376
4774
|
{
|
|
4377
|
-
"chunkIndex":
|
|
4775
|
+
"chunkIndex": 175,
|
|
4378
4776
|
"chunkKind": "recipe",
|
|
4379
4777
|
"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\"]}}",
|
|
4380
4778
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4384,7 +4782,7 @@
|
|
|
4384
4782
|
"corpusVersion": "1.0.0"
|
|
4385
4783
|
},
|
|
4386
4784
|
{
|
|
4387
|
-
"chunkIndex":
|
|
4785
|
+
"chunkIndex": 176,
|
|
4388
4786
|
"chunkKind": "recipe",
|
|
4389
4787
|
"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.\"]}",
|
|
4390
4788
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4394,7 +4792,7 @@
|
|
|
4394
4792
|
"corpusVersion": "1.0.0"
|
|
4395
4793
|
},
|
|
4396
4794
|
{
|
|
4397
|
-
"chunkIndex":
|
|
4795
|
+
"chunkIndex": 177,
|
|
4398
4796
|
"chunkKind": "recipe",
|
|
4399
4797
|
"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\"]}",
|
|
4400
4798
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4404,7 +4802,7 @@
|
|
|
4404
4802
|
"corpusVersion": "1.0.0"
|
|
4405
4803
|
},
|
|
4406
4804
|
{
|
|
4407
|
-
"chunkIndex":
|
|
4805
|
+
"chunkIndex": 178,
|
|
4408
4806
|
"chunkKind": "recipe",
|
|
4409
4807
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"state\":{\"values\":{\"selection\":{\"missionId\":1,\"missionTitle\":\"Batalha de Nova York\"}}},\"widgets\":[{\"key\":\"missionNestedWorkspace\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"account_tree\",\"title\":\"Mission command nestedPath workspace\",\"subtitle\":\"Select a mission once; summary, team and timeline tabs receive mission context through component-port + nestedPath\"},\"definition\":{\"id\":\"praxis-tabs\",\"bindingOrder\":[\"tabsId\",\"componentInstanceId\",\"config\",\"selectedIndex\"],\"inputs\":{\"tabsId\":\"nested-path-mission-workspace\",\"componentInstanceId\":\"nested-path-mission-workspace\",\"selectedIndex\":0,\"config\":{\"appearance\":{\"density\":\"comfortable\",\"dynamicHeight\":true,\"fitInkBarToContent\":true},\"behavior\":{\"lazyLoad\":true,\"reorderable\":false,\"closeable\":false},\"tabs\":[{\"id\":\"missions\",\"textLabel\":\"Select mission\",\"icon\":\"radar\",\"widgets\":[{\"id\":\"praxis-table\",\"childWidgetKey\":\"missions-table\",\"bindingOrder\":[\"tableId\",\"resourcePath\",\"config\"],\"inputs\":{\"tableId\":\"nested-path-missions-table\",\"resourcePath\":\"operations/missoes\",\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"Mission portfolio\",\"search\":{\"enabled\":true,\"placeholder\":\"Search by title, threat or location\"},\"layout\":{\"alignment\":\"space-between\",\"showSeparator\":true},\"actions\":[{\"id\":\"inspect-surfaces\",\"label\":\"Surfaces\",\"icon\":\"layers\",\"action\":\"inspect-surfaces\",\"discovery\":{\"rel\":\"surfaces\",\"scope\":\"resource\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}},{\"id\":\"inspect-actions\",\"label\":\"Actions\",\"icon\":\"bolt\",\"action\":\"inspect-actions\",\"discovery\":{\"rel\":\"actions\",\"scope\":\"resource\",\"resourcePath\":\"operations/missoes\",\"resourceKey\":\"operations.missoes\"}}]},\"columns\":[{\"field\":\"id\",\"header\":\"ID\",\"width\":\"80px\",\"align\":\"center\"},{\"field\":\"titulo\",\"header\":\"Mission\",\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"status\",\"header\":\"Status\",\"type\":\"badge\"},{\"field\":\"prioridade\",\"header\":\"Priority\",\"type\":\"badge\"},{\"field\":\"local\",\"header\":\"Location\",\"type\":\"text\"},{\"field\":\"ameacaNome\",\"header\":\"Threat\",\"type\":\"text\"}],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":10,\"pageSizeOptions\":[10,25,50],\"position\":\"bottom\"},\"sorting\":{\"enabled\":true,\"strategy\":\"server\",\"defaultSort\":{\"column\":\"id\",\"direction\":\"asc\"}},\"filtering\":{\"enabled\":true,\"strategy\":\"server\",\"advancedFilters\":{\"enabled\":true,\"fields\":[\"titulo\",\"status\",\"prioridade\",\"local\"]}},\"selection\":{\"enabled\":true,\"type\":\"single\",\"mode\":\"row\",\"persistSelection\":false}}}},\"outputs\":{\"rowClick\":\"emit\",\"selectionChange\":\"emit\",\"toolbarAction\":\"emit\"}}]},{\"id\":\"summary\",\"textLabel\":\"Summary\",\"icon\":\"groups\",\"widgets\":[{\"id\":\"praxis-table\",\"childWidgetKey\":\"mission-summary-table\",\"bindingOrder\":[\"tableId\",\"resourcePath\",\"queryContext\",\"config\"],\"inputs\":{\"tableId\":\"nested-path-mission-summary-table\",\"resourcePath\":\"operations/vw-resumo-missoes\",\"queryContext\":{\"filters\":{\"missaoId\":1}},\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"Selected mission summary\"},\"columns\":[{\"field\":\"titulo\",\"header\":\"Mission\",\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"status\",\"header\":\"Status\",\"type\":\"badge\"},{\"field\":\"prioridade\",\"header\":\"Priority\",\"type\":\"badge\"},{\"field\":\"qtdHerois\",\"header\":\"Heroes\",\"type\":\"number\",\"align\":\"end\"},{\"field\":\"qtdEventos\",\"header\":\"Events\",\"type\":\"number\",\"align\":\"end\"}],\"behavior\":{\"pagination\":{\"enabled\":false}}}},\"outputs\":{\"rowClick\":\"emit\"}}]},{\"id\":\"team\",\"textLabel\":\"Team\",\"icon\":\"groups\",\"widgets\":[{\"id\":\"praxis-table\",\"childWidgetKey\":\"mission-team-table\",\"bindingOrder\":[\"tableId\",\"resourcePath\",\"queryContext\",\"config\"],\"inputs\":{\"tableId\":\"nested-path-mission-team-table\",\"resourcePath\":\"operations/missao-participantes\",\"queryContext\":{\"filters\":{\"missaoId\":1}},\"config\":{\"toolbar\":{\"visible\":true,\"title\":\"Mission team\"},\"columns\":[{\"field\":\"funcionarioNome\",\"header\":\"Participant\",\"type\":\"text\",\"sticky\":\"start\"},{\"field\":\"papel\",\"header\":\"Role\",\"type\":\"badge\"},{\"field\":\"principal\",\"header\":\"Lead\",\"type\":\"boolean\",\"width\":\"100px\",\"align\":\"center\"},{\"field\":\"resultado\",\"header\":\"Outcome\",\"type\":\"badge\"}],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":5,\"pageSizeOptions\":[5,10],\"position\":\"bottom\"}}}},\"outputs\":{\"rowClick\":\"emit\"}}]},{\"id\":\"timeline\",\"textLabel\":\"Timeline\",\"icon\":\"timeline\",\"widgets\":[{\"id\":\"praxis-rich-content\",\"childWidgetKey\":\"mission-timeline\",\"bindingOrder\":[\"document\",\"context\",\"layout\",\"rootClassName\"],\"inputs\":{\"layout\":\"block\",\"rootClassName\":\"nested-path-mission-timeline\",\"context\":{\"selection\":{\"missionId\":1,\"missionTitle\":\"Batalha de Nova York\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"timeline\",\"id\":\"mission-command-timeline\",\"title\":\"Authored mission timeline\",\"emptyText\":\"Select a mission to inspect its authored operational timeline.\",\"orientation\":\"vertical\",\"position\":\"alternate\",\"connectorVariant\":\"dashed\",\"connectorColor\":\"neutral\",\"markerVariant\":\"icon\",\"markerColor\":\"info\",\"markerStyle\":\"filled\",\"items\":[{\"id\":\"mission-event-intel\",\"icon\":\"travel_explore\",\"title\":\"Pacote de inteligência consolidado\",\"subtitleExpr\":\"selection.missionTitle\",\"meta\":\"INTEL\",\"opposite\":\"2025-10-18T02:41:41Z\",\"badge\":\"grounding\",\"markerColor\":\"info\"},{\"id\":\"mission-event-contact\",\"icon\":\"radar\",\"title\":\"Contato tático ativo\",\"subtitle\":\"Equipe em campo confirmou o ponto de contato operacional.\",\"meta\":\"CONTATO\",\"opposite\":\"2025-10-18T09:41:42Z\",\"badge\":\"signal\",\"markerColor\":\"primary\"},{\"id\":\"mission-event-combat\",\"icon\":\"shield\",\"title\":\"Engajamento inicial\",\"subtitle\":\"Civis evacuados e perímetro sob controle.\",\"meta\":\"COMBATE\",\"opposite\":\"2025-10-18T12:41:42Z\",\"badge\":\"operation\",\"markerColor\":\"warning\"},{\"id\":\"mission-event-reinforcement\",\"icon\":\"verified\",\"title\":\"Reforços a caminho\",\"subtitle\":\"SHIELD mobilizado para sustentação da missão.\",\"meta\":\"EXTRA\",\"opposite\":\"2025-10-18T18:41:42Z\",\"badge\":\"support\",\"markerColor\":\"success\"}]}]}}}]}]}},\"outputs\":{\"selectedIndexChange\":\"emit\"}}}]}}",
|
|
4410
4808
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4414,7 +4812,7 @@
|
|
|
4414
4812
|
"corpusVersion": "1.0.0"
|
|
4415
4813
|
},
|
|
4416
4814
|
{
|
|
4417
|
-
"chunkIndex":
|
|
4815
|
+
"chunkIndex": 179,
|
|
4418
4816
|
"chunkKind": "recipe",
|
|
4419
4817
|
"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}}]}}}",
|
|
4420
4818
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.nested-path-showcase.json",
|
|
@@ -4424,7 +4822,7 @@
|
|
|
4424
4822
|
"corpusVersion": "1.0.0"
|
|
4425
4823
|
},
|
|
4426
4824
|
{
|
|
4427
|
-
"chunkIndex":
|
|
4825
|
+
"chunkIndex": 180,
|
|
4428
4826
|
"chunkKind": "recipe",
|
|
4429
4827
|
"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}\"}}]}]}}}}]}}",
|
|
4430
4828
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-day-30-coaching-workbench.json",
|
|
@@ -4434,7 +4832,7 @@
|
|
|
4434
4832
|
"corpusVersion": "1.0.0"
|
|
4435
4833
|
},
|
|
4436
4834
|
{
|
|
4437
|
-
"chunkIndex":
|
|
4835
|
+
"chunkIndex": 181,
|
|
4438
4836
|
"chunkKind": "recipe",
|
|
4439
4837
|
"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}\"}}]}]}}}}]}}",
|
|
4440
4838
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-equipment-access-recovery-workbench.json",
|
|
@@ -4444,7 +4842,7 @@
|
|
|
4444
4842
|
"corpusVersion": "1.0.0"
|
|
4445
4843
|
},
|
|
4446
4844
|
{
|
|
4447
|
-
"chunkIndex":
|
|
4845
|
+
"chunkIndex": 182,
|
|
4448
4846
|
"chunkKind": "recipe",
|
|
4449
4847
|
"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}\"}}]}]}}}}]}}",
|
|
4450
4848
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-journey-workbench.json",
|
|
@@ -4454,7 +4852,7 @@
|
|
|
4454
4852
|
"corpusVersion": "1.0.0"
|
|
4455
4853
|
},
|
|
4456
4854
|
{
|
|
4457
|
-
"chunkIndex":
|
|
4855
|
+
"chunkIndex": 183,
|
|
4458
4856
|
"chunkKind": "recipe",
|
|
4459
4857
|
"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}\"}}]}]}}}}]}}",
|
|
4460
4858
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-manager-follow-up-workbench.json",
|
|
@@ -4464,7 +4862,7 @@
|
|
|
4464
4862
|
"corpusVersion": "1.0.0"
|
|
4465
4863
|
},
|
|
4466
4864
|
{
|
|
4467
|
-
"chunkIndex":
|
|
4865
|
+
"chunkIndex": 184,
|
|
4468
4866
|
"chunkKind": "recipe",
|
|
4469
4867
|
"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}\"}}]}]}}}}]}}",
|
|
4470
4868
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.onboarding-readiness-workbench.json",
|
|
@@ -4474,7 +4872,7 @@
|
|
|
4474
4872
|
"corpusVersion": "1.0.0"
|
|
4475
4873
|
},
|
|
4476
4874
|
{
|
|
4477
|
-
"chunkIndex":
|
|
4875
|
+
"chunkIndex": 185,
|
|
4478
4876
|
"chunkKind": "recipe",
|
|
4479
4877
|
"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\"}}}}}]}}",
|
|
4480
4878
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.profile-form.json",
|
|
@@ -4484,7 +4882,7 @@
|
|
|
4484
4882
|
"corpusVersion": "1.0.0"
|
|
4485
4883
|
},
|
|
4486
4884
|
{
|
|
4487
|
-
"chunkIndex":
|
|
4885
|
+
"chunkIndex": 186,
|
|
4488
4886
|
"chunkKind": "recipe",
|
|
4489
4887
|
"content": "{\"_comment\":\"Focused Dynamic Page proof for a backend-published relatedResource surface. The page names the surface and parent identity; it never duplicates the child filter.\",\"templateMeta\":{\"registryKey\":\"praxis-dynamic-page\",\"variantId\":\"related-resource-mission-team\",\"status\":\"public-example\",\"useWhen\":\"Teach how a parent item surface materializes a governed child collection without host-authored relationship rules.\",\"examplePrompts\":[\"show the team related to mission 1\",\"materialize a child table from surface.relatedResource\",\"explain how Praxis derives the parent filter from backend metadata\"]},\"platformValue\":{\"canonicalContract\":\"praxis-api-quickstart publishes operations.missoes item surface team with availability, child resource identity, child path, parent field and allowed child operations.\",\"angularRuntime\":\"@praxisui/core discovers the exact item surface, fails closed when it is missing or denied, derives queryContext.filters.missaoId from relatedResource.childParentField and materializes the child praxis-table.\",\"businessFlow\":\"An operations lead opens the roster for a known mission and receives the current governed participant collection without maintaining a second parent-child rule in the page.\",\"hostResponsibility\":\"The host provides the trusted API origin, authentication and runtime providers. Authorization, availability and relationship metadata remain backend-owned.\"},\"operationalEvidence\":{\"baseUrl\":\"https://praxis-enterprise-proof-sandbox-v2.onrender.com\",\"parentRead\":\"/api/operations/missoes/1\",\"itemSurfaces\":\"/api/operations/missoes/1/surfaces\",\"childFilter\":\"/api/operations/missao-participantes/filter?page=0&size=10\",\"expectedSurface\":{\"id\":\"team\",\"availabilityAllowed\":true,\"childResourceKey\":\"operations.missao-participantes\",\"childResourcePath\":\"/api/operations/missao-participantes\",\"childParentField\":\"missaoId\"}},\"authoringGuidance\":[\"Use surfaceId=team with the canonical parentResourcePath and a real parent identity.\",\"Do not author queryContext.filters.missaoId; RelatedResourceSurfaceResolverService derives it from the published childParentField.\",\"Keep table columns schema-driven and use columnProjection only to select and present the fields that support the story.\",\"Treat permission-limited, not-found and empty as distinct states; never turn missing or denied metadata into an apparently empty authorized table.\",\"Keep child create, update and delete availability capability-governed even when the published relationship lists those operation types.\"],\"teaches\":[\"surface.relatedResource\",\"surface.availability\",\"related-resource.childParentField\",\"related-resource.childResourceKey\",\"related-resource.childResourcePath\",\"praxis-related-resource-outlet\",\"related-resource.fail-closed\"],\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"},\"widgets\":[{\"key\":\"missionTeamRelationship\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"hub\",\"title\":\"Equipe da missão\",\"subtitle\":\"Relação governada pela surface team da missão Batalha de Nova York\",\"windowActions\":{\"collapsible\":false,\"fullscreen\":true}},\"definition\":{\"id\":\"praxis-related-resource-outlet\",\"bindingOrder\":[\"surfaceId\",\"parentRecord\",\"parentResourceId\",\"parentResourcePath\",\"mode\",\"tableId\",\"tableConfig\"],\"inputs\":{\"surfaceId\":\"team\",\"parentResourcePath\":\"operations/missoes\",\"parentResourceId\":1,\"parentRecord\":{\"id\":1,\"titulo\":\"Batalha de Nova York\",\"status\":\"EM_ANDAMENTO\",\"prioridade\":\"CRITICA\"},\"mode\":\"inline\",\"tableId\":\"mission-team-related-resource\",\"tableConfig\":{\"toolbar\":{\"visible\":true,\"title\":\"Participantes materializados\",\"subtitle\":\"O filtro missaoId nasce de surface.relatedResource, não deste documento\",\"search\":{\"enabled\":true},\"columnsVisibility\":{\"enabled\":false},\"densityToggle\":{\"enabled\":true}},\"columns\":[],\"behavior\":{\"pagination\":{\"enabled\":true,\"strategy\":\"server\",\"pageSize\":10,\"pageSizeOptions\":[10,20]},\"sorting\":{\"enabled\":true,\"defaultSort\":{\"column\":\"ordem\",\"direction\":\"asc\"}}},\"columnProjection\":{\"source\":\"schema\",\"include\":[\"funcionarioFotoUrl\",\"funcionarioNome\",\"papel\",\"principal\",\"resultado\"],\"overrides\":{\"funcionarioFotoUrl\":{\"header\":\"Foto\",\"width\":\"72px\"},\"funcionarioNome\":{\"header\":\"Participante\",\"sticky\":\"start\"},\"papel\":{\"header\":\"Papel\"},\"principal\":{\"header\":\"Liderança\",\"format\":\"yes-no\",\"align\":\"center\"},\"resultado\":{\"header\":\"Resultado\"}}}}},\"outputs\":{\"widgetEvent\":\"emit\",\"resourceEvent\":\"emit\",\"surfaceOpen\":\"emit\"}}}]}}",
|
|
4490
4888
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.related-resource-mission-team.json",
|
|
@@ -4494,7 +4892,7 @@
|
|
|
4494
4892
|
"corpusVersion": "1.0.0"
|
|
4495
4893
|
},
|
|
4496
4894
|
{
|
|
4497
|
-
"chunkIndex":
|
|
4895
|
+
"chunkIndex": 187,
|
|
4498
4896
|
"chunkKind": "recipe",
|
|
4499
4897
|
"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\"}}}]}}",
|
|
4500
4898
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.remote-list.json",
|
|
@@ -4504,7 +4902,7 @@
|
|
|
4504
4902
|
"corpusVersion": "1.0.0"
|
|
4505
4903
|
},
|
|
4506
4904
|
{
|
|
4507
|
-
"chunkIndex":
|
|
4905
|
+
"chunkIndex": 188,
|
|
4508
4906
|
"chunkKind": "recipe",
|
|
4509
4907
|
"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.\"}",
|
|
4510
4908
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4514,7 +4912,7 @@
|
|
|
4514
4912
|
"corpusVersion": "1.0.0"
|
|
4515
4913
|
},
|
|
4516
4914
|
{
|
|
4517
|
-
"chunkIndex":
|
|
4915
|
+
"chunkIndex": 189,
|
|
4518
4916
|
"chunkKind": "recipe",
|
|
4519
4917
|
"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\"]}}",
|
|
4520
4918
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4524,7 +4922,7 @@
|
|
|
4524
4922
|
"corpusVersion": "1.0.0"
|
|
4525
4923
|
},
|
|
4526
4924
|
{
|
|
4527
|
-
"chunkIndex":
|
|
4925
|
+
"chunkIndex": 190,
|
|
4528
4926
|
"chunkKind": "recipe",
|
|
4529
4927
|
"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.\"}}",
|
|
4530
4928
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4534,7 +4932,7 @@
|
|
|
4534
4932
|
"corpusVersion": "1.0.0"
|
|
4535
4933
|
},
|
|
4536
4934
|
{
|
|
4537
|
-
"chunkIndex":
|
|
4935
|
+
"chunkIndex": 191,
|
|
4538
4936
|
"chunkKind": "recipe",
|
|
4539
4937
|
"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.\"]}",
|
|
4540
4938
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4544,7 +4942,7 @@
|
|
|
4544
4942
|
"corpusVersion": "1.0.0"
|
|
4545
4943
|
},
|
|
4546
4944
|
{
|
|
4547
|
-
"chunkIndex":
|
|
4945
|
+
"chunkIndex": 192,
|
|
4548
4946
|
"chunkKind": "recipe",
|
|
4549
4947
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"}}}",
|
|
4550
4948
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4554,7 +4952,7 @@
|
|
|
4554
4952
|
"corpusVersion": "1.0.0"
|
|
4555
4953
|
},
|
|
4556
4954
|
{
|
|
4557
|
-
"chunkIndex":
|
|
4955
|
+
"chunkIndex": 193,
|
|
4558
4956
|
"chunkKind": "recipe",
|
|
4559
4957
|
"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\"}}}",
|
|
4560
4958
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4564,7 +4962,7 @@
|
|
|
4564
4962
|
"corpusVersion": "1.0.0"
|
|
4565
4963
|
},
|
|
4566
4964
|
{
|
|
4567
|
-
"chunkIndex":
|
|
4965
|
+
"chunkIndex": 194,
|
|
4568
4966
|
"chunkKind": "recipe",
|
|
4569
4967
|
"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\"]}}",
|
|
4570
4968
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4574,7 +4972,7 @@
|
|
|
4574
4972
|
"corpusVersion": "1.0.0"
|
|
4575
4973
|
},
|
|
4576
4974
|
{
|
|
4577
|
-
"chunkIndex":
|
|
4975
|
+
"chunkIndex": 195,
|
|
4578
4976
|
"chunkKind": "recipe",
|
|
4579
4977
|
"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\"}}}}",
|
|
4580
4978
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4584,7 +4982,7 @@
|
|
|
4584
4982
|
"corpusVersion": "1.0.0"
|
|
4585
4983
|
},
|
|
4586
4984
|
{
|
|
4587
|
-
"chunkIndex":
|
|
4985
|
+
"chunkIndex": 196,
|
|
4588
4986
|
"chunkKind": "recipe",
|
|
4589
4987
|
"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\"}}",
|
|
4590
4988
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4594,7 +4992,7 @@
|
|
|
4594
4992
|
"corpusVersion": "1.0.0"
|
|
4595
4993
|
},
|
|
4596
4994
|
{
|
|
4597
|
-
"chunkIndex":
|
|
4995
|
+
"chunkIndex": 197,
|
|
4598
4996
|
"chunkKind": "recipe",
|
|
4599
4997
|
"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\"}]}]}]}",
|
|
4600
4998
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4604,7 +5002,7 @@
|
|
|
4604
5002
|
"corpusVersion": "1.0.0"
|
|
4605
5003
|
},
|
|
4606
5004
|
{
|
|
4607
|
-
"chunkIndex":
|
|
5005
|
+
"chunkIndex": 198,
|
|
4608
5006
|
"chunkKind": "recipe",
|
|
4609
5007
|
"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\"}]}]}",
|
|
4610
5008
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4614,7 +5012,7 @@
|
|
|
4614
5012
|
"corpusVersion": "1.0.0"
|
|
4615
5013
|
},
|
|
4616
5014
|
{
|
|
4617
|
-
"chunkIndex":
|
|
5015
|
+
"chunkIndex": 199,
|
|
4618
5016
|
"chunkKind": "recipe",
|
|
4619
5017
|
"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\"}}}]}]}}}}]}}",
|
|
4620
5018
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-content-knowledge-surface.json",
|
|
@@ -4624,7 +5022,7 @@
|
|
|
4624
5022
|
"corpusVersion": "1.0.0"
|
|
4625
5023
|
},
|
|
4626
5024
|
{
|
|
4627
|
-
"chunkIndex":
|
|
5025
|
+
"chunkIndex": 200,
|
|
4628
5026
|
"chunkKind": "recipe",
|
|
4629
5027
|
"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.\",\"Keep columns empty and use columnProjection overrides for 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.compose\",\"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\":[],\"columnProjection\":{\"source\":\"schema\",\"include\":[\"nomeCompleto\",\"email\",\"telefone\",\"salario\",\"cargoNome\",\"departamentoNome\",\"estadoCivil\",\"dataAdmissao\",\"dataNascimento\",\"ativo\"],\"overrides\":{\"nomeCompleto\":{\"header\":\"Nome Completo\",\"sticky\":\"start\",\"width\":\"260px\",\"renderer\":{\"type\":\"compose\",\"compose\":{\"items\":[{\"type\":\"avatar\",\"avatar\":{\"srcField\":\"avatarUrl\",\"altField\":\"nomeCompleto\",\"initialsField\":\"nomeCompleto\",\"shape\":\"circle\",\"size\":36}},{\"type\":\"value\",\"field\":\"nomeCompleto\"}],\"layout\":{\"direction\":\"row\",\"align\":\"center\",\"gap\":10}}}},\"email\":{\"header\":\"Email\",\"width\":\"260px\"},\"telefone\":{\"header\":\"Telefone\",\"width\":\"160px\"},\"salario\":{\"header\":\"Salario\",\"type\":\"currency\",\"align\":\"end\",\"format\":\"BRL|symbol|2\",\"width\":\"150px\"},\"cargoNome\":{\"header\":\"Cargo\",\"renderer\":{\"type\":\"chip\",\"chip\":{\"textField\":\"cargoNome\",\"variant\":\"outlined\",\"color\":\"primary\"}},\"width\":\"190px\"},\"departamentoNome\":{\"header\":\"Departamento\",\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"departamentoNome\",\"variant\":\"soft\",\"color\":\"accent\"}},\"width\":\"180px\"},\"estadoCivil\":{\"header\":\"Estado Civil\",\"renderer\":{\"type\":\"badge\",\"badge\":{\"textField\":\"estadoCivil\",\"variant\":\"outlined\",\"color\":\"primary\"}},\"width\":\"150px\"},\"dataAdmissao\":{\"header\":\"Data de Admissao\",\"format\":\"dd/MM/yyyy\",\"width\":\"170px\"},\"dataNascimento\":{\"header\":\"Data de Nascimento\",\"format\":\"dd/MM/yyyy\",\"width\":\"190px\"},\"ativo\":{\"header\":\"Status\",\"align\":\"center\",\"format\":\"active-inactive\",\"width\":\"130px\",\"conditionalRenderers\":[{\"id\":\"status-ativo\",\"condition\":{\"==\":[{\"var\":\"ativo\"},true]},\"renderer\":{\"type\":\"badge\",\"badge\":{\"text\":\"Ativo\",\"color\":\"success\",\"variant\":\"filled\",\"icon\":\"check_circle\"}}},{\"id\":\"status-inativo\",\"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\"}}}]}}",
|
|
4630
5028
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rich-table-surface.json",
|
|
@@ -4634,7 +5032,7 @@
|
|
|
4634
5032
|
"corpusVersion": "1.0.0"
|
|
4635
5033
|
},
|
|
4636
5034
|
{
|
|
4637
|
-
"chunkIndex":
|
|
5035
|
+
"chunkIndex": 201,
|
|
4638
5036
|
"chunkKind": "recipe",
|
|
4639
5037
|
"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\"}}}]}}",
|
|
4640
5038
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.rules-computed-table.json",
|
|
@@ -4644,7 +5042,7 @@
|
|
|
4644
5042
|
"corpusVersion": "1.0.0"
|
|
4645
5043
|
},
|
|
4646
5044
|
{
|
|
4647
|
-
"chunkIndex":
|
|
5045
|
+
"chunkIndex": 202,
|
|
4648
5046
|
"chunkKind": "recipe",
|
|
4649
5047
|
"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\"}}}]}}",
|
|
4650
5048
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.stepper-onboarding-workflow.json",
|
|
@@ -4654,7 +5052,7 @@
|
|
|
4654
5052
|
"corpusVersion": "1.0.0"
|
|
4655
5053
|
},
|
|
4656
5054
|
{
|
|
4657
|
-
"chunkIndex":
|
|
5055
|
+
"chunkIndex": 203,
|
|
4658
5056
|
"chunkKind": "recipe",
|
|
4659
5057
|
"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\"}}}}}]}}",
|
|
4660
5058
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.stepper.json",
|
|
@@ -4664,7 +5062,7 @@
|
|
|
4664
5062
|
"corpusVersion": "1.0.0"
|
|
4665
5063
|
},
|
|
4666
5064
|
{
|
|
4667
|
-
"chunkIndex":
|
|
5065
|
+
"chunkIndex": 204,
|
|
4668
5066
|
"chunkKind": "recipe",
|
|
4669
5067
|
"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}}]}}}",
|
|
4670
5068
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.surfaces-actions-showcase.json",
|
|
@@ -4674,7 +5072,7 @@
|
|
|
4674
5072
|
"corpusVersion": "1.0.0"
|
|
4675
5073
|
},
|
|
4676
5074
|
{
|
|
4677
|
-
"chunkIndex":
|
|
5075
|
+
"chunkIndex": 205,
|
|
4678
5076
|
"chunkKind": "recipe",
|
|
4679
5077
|
"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\"}}}]}}",
|
|
4680
5078
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.table.json",
|
|
@@ -4684,7 +5082,7 @@
|
|
|
4684
5082
|
"corpusVersion": "1.0.0"
|
|
4685
5083
|
},
|
|
4686
5084
|
{
|
|
4687
|
-
"chunkIndex":
|
|
5085
|
+
"chunkIndex": 206,
|
|
4688
5086
|
"chunkKind": "recipe",
|
|
4689
5087
|
"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\"}}}]}}",
|
|
4690
5088
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.tabs-nav-routing-workspace.json",
|
|
@@ -4694,7 +5092,7 @@
|
|
|
4694
5092
|
"corpusVersion": "1.0.0"
|
|
4695
5093
|
},
|
|
4696
5094
|
{
|
|
4697
|
-
"chunkIndex":
|
|
5095
|
+
"chunkIndex": 207,
|
|
4698
5096
|
"chunkKind": "recipe",
|
|
4699
5097
|
"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\"}}]}]}}}}]}}",
|
|
4700
5098
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.tabs.json",
|
|
@@ -4704,7 +5102,7 @@
|
|
|
4704
5102
|
"corpusVersion": "1.0.0"
|
|
4705
5103
|
},
|
|
4706
5104
|
{
|
|
4707
|
-
"chunkIndex":
|
|
5105
|
+
"chunkIndex": 208,
|
|
4708
5106
|
"chunkKind": "recipe",
|
|
4709
5107
|
"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.\"}",
|
|
4710
5108
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4714,7 +5112,7 @@
|
|
|
4714
5112
|
"corpusVersion": "1.0.0"
|
|
4715
5113
|
},
|
|
4716
5114
|
{
|
|
4717
|
-
"chunkIndex":
|
|
5115
|
+
"chunkIndex": 209,
|
|
4718
5116
|
"chunkKind": "recipe",
|
|
4719
5117
|
"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\"]}}",
|
|
4720
5118
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4724,7 +5122,7 @@
|
|
|
4724
5122
|
"corpusVersion": "1.0.0"
|
|
4725
5123
|
},
|
|
4726
5124
|
{
|
|
4727
|
-
"chunkIndex":
|
|
5125
|
+
"chunkIndex": 210,
|
|
4728
5126
|
"chunkKind": "recipe",
|
|
4729
5127
|
"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.\"}}",
|
|
4730
5128
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4734,7 +5132,7 @@
|
|
|
4734
5132
|
"corpusVersion": "1.0.0"
|
|
4735
5133
|
},
|
|
4736
5134
|
{
|
|
4737
|
-
"chunkIndex":
|
|
5135
|
+
"chunkIndex": 211,
|
|
4738
5136
|
"chunkKind": "recipe",
|
|
4739
5137
|
"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\"]}}",
|
|
4740
5138
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4744,7 +5142,7 @@
|
|
|
4744
5142
|
"corpusVersion": "1.0.0"
|
|
4745
5143
|
},
|
|
4746
5144
|
{
|
|
4747
|
-
"chunkIndex":
|
|
5145
|
+
"chunkIndex": 212,
|
|
4748
5146
|
"chunkKind": "recipe",
|
|
4749
5147
|
"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.\"]}",
|
|
4750
5148
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4754,7 +5152,7 @@
|
|
|
4754
5152
|
"corpusVersion": "1.0.0"
|
|
4755
5153
|
},
|
|
4756
5154
|
{
|
|
4757
|
-
"chunkIndex":
|
|
5155
|
+
"chunkIndex": 213,
|
|
4758
5156
|
"chunkKind": "recipe",
|
|
4759
5157
|
"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\"]}",
|
|
4760
5158
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4764,7 +5162,7 @@
|
|
|
4764
5162
|
"corpusVersion": "1.0.0"
|
|
4765
5163
|
},
|
|
4766
5164
|
{
|
|
4767
|
-
"chunkIndex":
|
|
5165
|
+
"chunkIndex": 214,
|
|
4768
5166
|
"chunkKind": "recipe",
|
|
4769
5167
|
"content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page\",\"page\":{\"layout\":{\"orientation\":\"columns\",\"columns\":1,\"gap\":\"16px\"}}}",
|
|
4770
5168
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4774,7 +5172,7 @@
|
|
|
4774
5172
|
"corpusVersion": "1.0.0"
|
|
4775
5173
|
},
|
|
4776
5174
|
{
|
|
4777
|
-
"chunkIndex":
|
|
5175
|
+
"chunkIndex": 215,
|
|
4778
5176
|
"chunkKind": "recipe",
|
|
4779
5177
|
"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.\"}]}]}}}}]}}",
|
|
4780
5178
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4784,7 +5182,7 @@
|
|
|
4784
5182
|
"corpusVersion": "1.0.0"
|
|
4785
5183
|
},
|
|
4786
5184
|
{
|
|
4787
|
-
"chunkIndex":
|
|
5185
|
+
"chunkIndex": 216,
|
|
4788
5186
|
"chunkKind": "recipe",
|
|
4789
5187
|
"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\"}}}",
|
|
4790
5188
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4794,7 +5192,7 @@
|
|
|
4794
5192
|
"corpusVersion": "1.0.0"
|
|
4795
5193
|
},
|
|
4796
5194
|
{
|
|
4797
|
-
"chunkIndex":
|
|
5195
|
+
"chunkIndex": 217,
|
|
4798
5196
|
"chunkKind": "recipe",
|
|
4799
5197
|
"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\"]}}",
|
|
4800
5198
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4804,7 +5202,7 @@
|
|
|
4804
5202
|
"corpusVersion": "1.0.0"
|
|
4805
5203
|
},
|
|
4806
5204
|
{
|
|
4807
|
-
"chunkIndex":
|
|
5205
|
+
"chunkIndex": 218,
|
|
4808
5206
|
"chunkKind": "recipe",
|
|
4809
5207
|
"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\"}}",
|
|
4810
5208
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4814,7 +5212,7 @@
|
|
|
4814
5212
|
"corpusVersion": "1.0.0"
|
|
4815
5213
|
},
|
|
4816
5214
|
{
|
|
4817
|
-
"chunkIndex":
|
|
5215
|
+
"chunkIndex": 219,
|
|
4818
5216
|
"chunkKind": "recipe",
|
|
4819
5217
|
"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\":[]}]}]}]}}",
|
|
4820
5218
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|
|
@@ -4824,7 +5222,7 @@
|
|
|
4824
5222
|
"corpusVersion": "1.0.0"
|
|
4825
5223
|
},
|
|
4826
5224
|
{
|
|
4827
|
-
"chunkIndex":
|
|
5225
|
+
"chunkIndex": 220,
|
|
4828
5226
|
"chunkKind": "recipe",
|
|
4829
5227
|
"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\"}}}]}}",
|
|
4830
5228
|
"sourcePointer": "examples/ai-recipes/praxis-dynamic-page.visual-block-presets-form.json",
|