@praxisui/table 8.0.0-beta.104 → 8.0.0-beta.106

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import { firstValueFrom } from 'rxjs';
2
2
  import { BaseAiAdapter, sanitizePraxisAssistantText, createComponentAuthoringContext } from '@praxisui/ai';
3
3
  import { PRAXIS_GLOBAL_ACTION_CATALOG, deepMerge } from '@praxisui/core';
4
- import { G as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, k as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, W as coerceTableComponentEditPlans, Y as compileTableComponentEditPlans, I as TASK_PRESETS, a1 as getTableComponentEditPlanCapabilities, y as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, w as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, z as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, H as TABLE_COMPONENT_EDIT_PLAN_VERSION, x as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, E as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-BV50-u0I.mjs';
4
+ import { G as TABLE_COMPONENT_EDIT_PLAN_OPERATION_IDS, k as PRAXIS_TABLE_AUTHORING_MANIFEST, T as TABLE_AI_CAPABILITIES, W as coerceTableComponentEditPlans, Y as compileTableComponentEditPlans, I as TASK_PRESETS, a1 as getTableComponentEditPlanCapabilities, y as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, w as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, z as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, H as TABLE_COMPONENT_EDIT_PLAN_VERSION, x as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, E as TABLE_COMPONENT_EDIT_PLAN_KIND } from './praxisui-table-praxisui-table-CunEk0vb.mjs';
5
5
 
6
6
  const TABLE_COMPONENT_CONTEXT_PACK = {
7
7
  version: 'v1',
@@ -1 +1 @@
1
- export { A as AnalyticsTableConfigAdapterService, a as AnalyticsTableContractService, b as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, c as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, d as ColumnsConfigEditorComponent, D as DATE_PRESETS, e as DataFormatterComponent, f as DataFormattingService, F as FORMULA_TEMPLATES, g as FilterConfigService, h as FilterSettingsComponent, i as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, j as PRAXIS_FILTER_COMPONENT_METADATA, k as PRAXIS_TABLE_AUTHORING_MANIFEST, l as PRAXIS_TABLE_COMPONENT_METADATA, m as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, n as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, o as PraxisFilter, p as PraxisFilterWidgetConfigEditor, q as PraxisTable, r as PraxisTableConfigEditor, s as PraxisTableInlineAuthoringEditorComponent, t as PraxisTableToolbar, u as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, v as TABLE_COMPONENT_AI_CAPABILITIES, w as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, x as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, y as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, z as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, E as TABLE_COMPONENT_EDIT_PLAN_KIND, H as TABLE_COMPONENT_EDIT_PLAN_VERSION, I as TASK_PRESETS, K as TableDefaultsProvider, L as TableRulesEditorComponent, O as ToolbarActionsEditorComponent, V as ValueMappingEditorComponent, Q as VisualFormulaBuilderComponent, R as buildTableApplyPlan, U as coerceTableComponentEditPlan, W as coerceTableComponentEditPlans, X as compileTableComponentEditPlan, Y as compileTableComponentEditPlans, Z as createTableAuthoringDocument, _ as getActionId, $ as getEnum, a0 as getTableCapabilities, a1 as getTableComponentEditPlanCapabilities, a2 as isTableRendererSupportedByRichContentP0, a3 as mapTableRendererToRichContentP0, a4 as normalizeTableAuthoringDocument, a5 as parseLegacyOrTableDocument, a6 as providePraxisFilterMetadata, a7 as providePraxisTableMetadata, a8 as providePraxisTableToolbarAppearance, a9 as serializeTableAuthoringDocument, aa as toCanonicalTableConfig, ab as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-BV50-u0I.mjs';
1
+ export { A as AnalyticsTableConfigAdapterService, a as AnalyticsTableContractService, b as AnalyticsTableStatsApiService, B as BOOLEAN_PRESETS, c as BehaviorConfigEditorComponent, C as CURRENCY_PRESETS, d as ColumnsConfigEditorComponent, D as DATE_PRESETS, e as DataFormatterComponent, f as DataFormattingService, F as FORMULA_TEMPLATES, g as FilterConfigService, h as FilterSettingsComponent, i as FormulaGeneratorService, J as JsonConfigEditorComponent, M as MessagesLocalizationEditorComponent, N as NUMBER_PRESETS, P as PERCENTAGE_PRESETS, j as PRAXIS_FILTER_COMPONENT_METADATA, k as PRAXIS_TABLE_AUTHORING_MANIFEST, l as PRAXIS_TABLE_COMPONENT_METADATA, m as PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, n as PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, o as PraxisFilter, p as PraxisFilterWidgetConfigEditor, q as PraxisTable, r as PraxisTableConfigEditor, s as PraxisTableInlineAuthoringEditorComponent, t as PraxisTableToolbar, u as PraxisTableWidgetConfigEditor, S as STRING_PRESETS, T as TABLE_AI_CAPABILITIES, v as TABLE_COMPONENT_AI_CAPABILITIES, w as TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, x as TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, y as TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, z as TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, E as TABLE_COMPONENT_EDIT_PLAN_KIND, H as TABLE_COMPONENT_EDIT_PLAN_VERSION, I as TASK_PRESETS, K as TableDefaultsProvider, L as TableRulesEditorComponent, O as ToolbarActionsEditorComponent, V as ValueMappingEditorComponent, Q as VisualFormulaBuilderComponent, R as buildTableApplyPlan, U as coerceTableComponentEditPlan, W as coerceTableComponentEditPlans, X as compileTableComponentEditPlan, Y as compileTableComponentEditPlans, Z as createTableAuthoringDocument, _ as getActionId, $ as getEnum, a0 as getTableCapabilities, a1 as getTableComponentEditPlanCapabilities, a2 as isTableRendererSupportedByRichContentP0, a3 as mapTableRendererToRichContentP0, a4 as normalizeTableAuthoringDocument, a5 as parseLegacyOrTableDocument, a6 as providePraxisFilterMetadata, a7 as providePraxisTableMetadata, a8 as providePraxisTableToolbarAppearance, a9 as serializeTableAuthoringDocument, aa as toCanonicalTableConfig, ab as validateTableAuthoringDocument } from './praxisui-table-praxisui-table-CunEk0vb.mjs';
package/package.json CHANGED
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "name": "@praxisui/table",
3
- "version": "8.0.0-beta.104",
3
+ "version": "8.0.0-beta.106",
4
4
  "description": "Advanced data table for Angular (Praxis UI) with editing, filtering, sorting, virtualization, and settings panel integration.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
7
7
  "@angular/core": "^21.0.0",
8
- "@praxisui/ai": "^8.0.0-beta.104",
9
- "@praxisui/core": "^8.0.0-beta.104",
10
- "@praxisui/dynamic-fields": "^8.0.0-beta.104",
11
- "@praxisui/dynamic-form": "^8.0.0-beta.104",
12
- "@praxisui/metadata-editor": "^8.0.0-beta.104",
13
- "@praxisui/rich-content": "^8.0.0-beta.104",
14
- "@praxisui/settings-panel": "^8.0.0-beta.104",
15
- "@praxisui/table-rule-builder": "^8.0.0-beta.104",
8
+ "@praxisui/ai": "^8.0.0-beta.106",
9
+ "@praxisui/core": "^8.0.0-beta.106",
10
+ "@praxisui/dynamic-fields": "^8.0.0-beta.106",
11
+ "@praxisui/dynamic-form": "^8.0.0-beta.106",
12
+ "@praxisui/metadata-editor": "^8.0.0-beta.106",
13
+ "@praxisui/rich-content": "^8.0.0-beta.106",
14
+ "@praxisui/settings-panel": "^8.0.0-beta.106",
15
+ "@praxisui/table-rule-builder": "^8.0.0-beta.106",
16
16
  "@angular/cdk": "^21.0.0",
17
17
  "@angular/forms": "^21.0.0",
18
18
  "@angular/material": "^21.0.0",
19
19
  "@angular/router": "^21.0.0",
20
- "@praxisui/dialog": "^8.0.0-beta.104",
20
+ "@praxisui/dialog": "^8.0.0-beta.106",
21
21
  "rxjs": "~7.8.0"
22
22
  },
23
23
  "dependencies": {
@@ -96,7 +96,7 @@ Este documento e a referencia canonica da API JSON de praxis-table.
96
96
 
97
97
  - `config.toolbar.columnsVisibility.enabled` controla a exibição do botão de visibilidade de colunas na barra de ferramentas.
98
98
  - Por padrão, o botão de visibilidade rápida de colunas estará habilitado caso a toolbar esteja visível.
99
- - **Guardrail de UX**: O último checkbox ativo no dropdown de colunas é automaticamente desabilitado quando apenas 1 coluna permanece visível, para impedir que o usuário oculte todas as colunas de dados da tabela.
99
+ - **Guardrail de UX**: O último controle ativo no dropdown de colunas é automaticamente desabilitado quando apenas 1 coluna permanece visível, para impedir que o usuário oculte todas as colunas de dados da tabela.
100
100
  - A desativação rápida de colunas reflete instantaneamente no layout visual (`displayedColumns`) e emite o evento `configChange`.
101
101
 
102
102
  > [!WARNING]
@@ -341,7 +341,7 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
341
341
  - O bloco `toolbar` continua parte do contrato público principal.
342
342
  - Use `toolbar.actions[]` para quick actions e `toolbar.search` para busca quando o host não injeta shell própria.
343
343
  - Use `toolbar.appearance` para personalizar o chrome da toolbar por contrato governado. O runtime materializa `variant`, `density`, `shape`, `divider` e `tokens` como classes e CSS custom properties públicas; o host pode trocar aparência sem redefinir intenção, capability ou roteamento.
344
- - Tokens públicos suportados em `toolbar.appearance.tokens`: `bg`, `fg`, `borderColor`, `borderWidth`, `radius`, `shadow`, `paddingBlock`, `paddingInline`, `minHeight`, `gap`, `actionsGap`, `dividerColor`, `actionSize`, `actionRadius`, `actionBg`, `actionFg`, `actionHoverBg`, `actionActiveBg`, `actionFocusRing`, `aiAccentColor` e `statusFg`.
344
+ - Tokens públicos suportados em `toolbar.appearance.tokens`: `bg`, `fg`, `borderColor`, `borderWidth`, `radius`, `shadow`, `paddingBlock`, `paddingInline`, `minHeight`, `gap`, `actionsGap`, `dividerColor`, `actionSize`, `actionRadius`, `actionBg`, `actionFg`, `actionHoverBg`, `actionActiveBg`, `actionFocusRing`, `aiAccentColor`, `statusFg`, `titleFg`, `subtitleFg`, `iconFg`, `titleFontSize`, `subtitleFontSize`, `titleFontWeight`, `identityGap`, `identityFilterGap`, `identityMinHeight`, `identityMarginBottom`, `identityIconSize` e `identityIconRadius`.
345
345
  - Para localizar paths específicos de toolbar, complemente a leitura com o `Appendix: JSON path index`.
346
346
 
347
347
  ### Messages contract
@@ -359,6 +359,7 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
359
359
  | `data` | `any[] \| null` | No | component-input | `dataSource.data = data` | Ativa caminho de dados locais. |
360
360
  | `tableId` | `string` | Yes | component-input | trim + component key builder | Necessário para persistência/configuração por instância. |
361
361
  | `componentInstanceId` | `string \| undefined` | No | component-input | component key scoping | Isola preferências por instância em mesma rota. |
362
+ | `configPersistenceStrategy` | `'local-first' \| 'input-first' \| 'volatile'` | No | component-input | default `local-first` | Controla a hidratação de preferências persistidas. `volatile` renderiza apenas por inputs/runtime e não consulta nem grava `ASYNC_CONFIG_STORAGE`, útil para surfaces executivas efêmeras abertas por `surface.open`. |
362
363
  | `title` | `string` | No | component-input | host-surface passthrough | Título opcional consumido por superfícies auxiliares, quick connect e contextos host. |
363
364
  | `subtitle` | `string` | No | component-input | host-surface passthrough | Subtítulo opcional para contexto operacional do host. |
364
365
  | `icon` | `string` | No | component-input | host-surface passthrough | Ícone opcional usado em affordances auxiliares do runtime. |
@@ -434,7 +435,7 @@ degraded filter.
434
435
 
435
436
  | Channel | Direction | Contract | Failure mode | Notes |
436
437
  | --- | --- | --- | --- | --- |
437
- | `ASYNC_CONFIG_STORAGE` | bidirectional | `loadConfig/saveConfig/clearConfig` | fail-open | Persistência de config e inputs por `tableId`/instância. |
438
+ | `ASYNC_CONFIG_STORAGE` | bidirectional | `loadConfig/saveConfig/clearConfig` | fail-open | Persistência de config e inputs por `tableId`/instância; não é acessado quando `configPersistenceStrategy='volatile'`. |
438
439
  | `CONNECTION_STORAGE` | bidirectional | `loadConnection/saveConnection` | fail-open | Persistência de `resourcePath` para quick-connect. |
439
440
  | `SettingsPanelService` | bidirectional | `open(...).applied$/saved$` | fail-open | Canal de edição em runtime (quick connect/editor). |
440
441
  | `Global resolver: PAX_EXPANSION_DETAIL_RESOURCE_RESOLVER` | outbound call | function contract | fail-closed | Resolução externa de detail schema por `resource`. |
@@ -559,81 +560,79 @@ Referencia canonica da API JSON do `praxis-table`.
559
560
  - **Deprecated**
560
561
 
561
562
  ### Overview
562
- `praxis-table` nao e apenas um grid ou uma tabela convencional. Ele funciona
563
- como um motor de renderizacao dinamico orientado a contrato (`TableConfig`).
564
- Em vez de criar um template para cada tela de listagem, voce entrega a planta
565
- (JSON) e o runtime monta a obra em tempo de execucao.
566
-
567
- Em arquiteturas tradicionais, cada variacao de colunas, acoes e filtros costuma
568
- virar nova camada de HTML + estado + condicionais. Aqui, a estrategia e inverter
569
- o custo: a mudanca fica na configuracao. Quando o requisito muda, o contrato muda
570
- e a interface se adapta sem reescrever o componente.
571
-
572
- Em linguagem simples: o JSON e a planta; a tabela e a obra. Troque a planta e o
573
- resultado muda sem retrabalho de template.
563
+ `praxis-table` é uma superfície operacional para dados corporativos. Com uma
564
+ declaração pequena, a aplicação consegue exibir dados reais, paginação, colunas,
565
+ filtros, ações, mensagens e regras visuais sem reconstruir a tela a cada novo
566
+ cenário. A primeira renderização pode nascer do recurso publicado pelo backend;
567
+ os refinamentos podem vir da aplicação, do editor visual ou das preferências
568
+ persistidas.
569
+
570
+ Em arquiteturas tradicionais, cada variação de colunas, ações e filtros costuma
571
+ virar uma nova camada de HTML, estado e condicionais. Aqui, a estratégia é
572
+ inverter esse custo: a mudança entra em uma configuração governada. Quando o
573
+ requisito muda, a experiência evolui sem transformar cada ajuste em uma nova
574
+ implementação de tabela.
574
575
 
575
576
  Conceitos-chave:
576
577
 
577
- - UI declarativa / schema-driven: um contrato JSON define estrutura, dados e UX.
578
- - Self-describing APIs: backend pode publicar OpenAPI + `x-ui` para derivar UI.
579
- - Separacao de dados e apresentacao: `columns` descreve dado; `appearance` e
580
- `behavior` definem como apresentar/interagir.
581
- - Motor de regras condicional: JSON Logic como contrato canonico para estilos, visibilidade e renderizacao sem
582
- ifs espalhados no template.
583
- - Pipeline de dados: fluxo remoto/local com estrategias de pagina, ordenacao e filtro.
584
-
585
- #### Porque este componente e diferente
586
- `praxis-table` nao e apenas um grid. E um runtime configuravel que interpreta um
587
- contrato JSON extenso e coordena varias superficies ao mesmo tempo. Em tabelas
588
- convencionais, cada mudanca de coluna, filtro, acao ou visual pede codigo e
589
- template; aqui, essas mudancas entram no JSON e o runtime responde na hora:
590
-
591
- - Configuracao declarativa profunda (TableConfig) que governa UI, dados e regras.
592
- - Dois modos de dados (remoto/local) com pipelines diferentes e impactos no UX.
593
- - Editor e runtime convivendo (settings panel, reconciliacao e marcadores).
594
- - JSON Logic para regras de estilos, renderizacao e comportamento condicional.
595
- - Persistencia e identidade atraves de `tableId` + `componentInstanceId`.
596
-
597
- O resultado e um componente "plataforma": cada bloco do contrato vira um modulo
598
- do runtime, e as interacoes entre esses modulos tornam o comportamento realmente
599
- disruptivo.
600
-
601
- #### Pitch de 30 segundos (valor)
602
- Uma tabela que vira plataforma. `praxis-table` transforma configuracao em
603
- experiencia: colunas, acoes, filtros, mensagens e regras vivem no mesmo contrato
604
- JSON, pronto para dados remotos ou locais, sem retrabalho de template.
605
-
606
- - **Entrega rapida**: ajuste comportamento e visual por JSON.
607
- - **Padrao de UX**: regras, acoes e mensagens consistentes entre telas.
608
- - **Escalavel**: JSON Logic e actions permitem crescer a complexidade sem fork do runtime.
609
-
610
- #### O fim do boilerplate
611
- Uma tabela que vira plataforma. Em vez de programar features de grade do zero,
612
- voce ativa capacidades nativas via contrato:
613
-
614
- - **Zero-code iteration**: adicionar botoes, trocar densidade, ajustar colunas,
615
- filtros e dialogs apenas alterando JSON.
616
- - **Logica desacoplada (rules engine)**: destaque de linha, visibilidade de acao
617
- e variacao de renderer ficam em expressoes condicionais canonicas, nao em `*ngIf` espalhado.
618
- - **Ecossistema embutido**: paginacao remota, virtual scroll, reorder de colunas,
619
- exportacao e `praxis-filter` avancado como capacidades prontas.
620
- - **Eventos estruturados**: `rowAction`, `bulkAction`, `toolbarAction`, `exportAction`,
621
- `columnReorder` e eventos de delete padronizam a integracao com o host.
622
- - **Governanca de estado**: `tableId` + `componentInstanceId` organizam
623
- persistencia, reconciliacao e isolamento de instancia.
624
-
625
- #### Receitas de impacto para o overview (live-first)
626
- Para o overview no estilo Angular Material (`demo vivo + view code` na mesma
627
- card), a melhor estrategia e mostrar poucos cenarios com alta densidade de
628
- valor. Sugestao de ordem para a primeira dobra:
578
+ - Uma declaração publicada define estrutura, dados e experiência.
579
+ - O backend pode descrever o recurso para que a tabela derive a primeira leitura.
580
+ - Dados, apresentação e interação ficam separados, mas evoluem no mesmo contrato.
581
+ - Regras condicionais governam estilos, visibilidade e renderização sem espalhar decisões pelo template.
582
+ - Fluxos remotos ou locais preservam paginação, ordenação e filtros de forma previsível.
583
+
584
+ #### Por que este componente é diferente
585
+ O valor da Table aparece quando a tela deixa de ser um template isolado e passa
586
+ a ser uma superfície governada por contrato. Em tabelas convencionais, cada
587
+ mudança de coluna, filtro, ação ou visual pede código e template; aqui, essas
588
+ mudanças entram em uma configuração declarativa e o componente responde de forma consistente:
589
+
590
+ - A configuração da tabela governa visual, dados e regras sem espalhar decisões pelo template.
591
+ - Dados remotos e dados locais têm estratégias próprias, com impacto claro na experiência.
592
+ - O editor visual convive com a tabela renderizada para permitir autoria governada.
593
+ - Regras condicionais cobrem destaque visual, renderização e comportamento sem duplicar tela.
594
+ - Identidade estável permite persistir preferências e reconciliar instâncias com segurança.
595
+
596
+ O resultado é um componente "plataforma": cada bloco do contrato vira um módulo
597
+ do componente, e as interações entre esses módulos permitem evoluir experiências
598
+ corporativas sem transformar cada nova regra em uma nova implementação de tela.
599
+
600
+ #### Valor em uma leitura rápida
601
+ Uma tabela que vira plataforma. `praxis-table` transforma decisões declarativas
602
+ em experiência: colunas, ações, filtros, mensagens e regras vivem no mesmo
603
+ contrato operacional, pronto para dados remotos ou locais, sem retrabalho de
604
+ template.
605
+
606
+ - **Entrega rápida**: ajuste comportamento e visual por configuração governada.
607
+ - **Padrão de UX**: regras, ações e mensagens consistentes entre telas.
608
+ - **Escalável**: regras e comandos estruturados permitem crescer a complexidade sem criar forks de tela.
609
+
610
+ #### Menos código de tela, mais contrato
611
+ Uma tabela que vira plataforma. Em vez de programar cada capacidade de tabela
612
+ do zero, você ativa recursos nativos via contrato:
613
+
614
+ - **Iteração sem código de tela**: adicionar botões, trocar densidade, ajustar
615
+ colunas, filtros e diálogos por configuração governada.
616
+ - **Lógica desacoplada**: destaque de linha, visibilidade de ação
617
+ e variação visual ficam em regras condicionais, não em `*ngIf` espalhado.
618
+ - **Ecossistema embutido**: paginação remota, virtual scroll, reorder de colunas,
619
+ exportação e `praxis-filter` avançado como capacidades prontas.
620
+ - **Eventos estruturados**: ações de linha, lote, toolbar, exportação e reordenação
621
+ entregam intenções claras para a aplicação.
622
+ - **Governança de estado**: identidade estável organiza persistência,
623
+ reconciliação e isolamento de instância.
624
+
625
+ #### Receitas de impacto
626
+ As receitas abaixo mostram capacidades que normalmente exigiriam código de tela,
627
+ mas que a Table materializa a partir do contrato. Elas funcionam como portas de
628
+ entrada para o leitor entender o valor antes de mergulhar na matriz completa da
629
+ API.
629
630
 
630
631
  1. **Dashboard financeiro**: prova `computed` + densidade + regra visual.
631
632
  2. **Micro-layout compose (CRM)**: prova poder de layout sem componente custom.
632
- 3. **Backoffice seguro**: prova bulk com travas de negocio e confirmacao.
633
+ 3. **Backoffice seguro**: prova bulk com travas de negócio e confirmação.
633
634
  4. **Rastreador de SLA**: prova de regra temporal em JSON Logic + alerta visual declarativo.
634
635
 
635
- Snippets curtos (prontos para cards de overview):
636
-
637
636
  **Receita 1 - Dashboard Financeiro**
638
637
  ```json
639
638
  {
@@ -679,7 +678,7 @@ Snippets curtos (prontos para cards de overview):
679
678
  }
680
679
  ```
681
680
 
682
- **Receita 3 - Backoffice Seguro (acoes em lote)**
681
+ **Receita 3 - Backoffice Seguro (ações em lote)**
683
682
  ```json
684
683
  {
685
684
  "actions": {
@@ -720,10 +719,10 @@ Snippets curtos (prontos para cards de overview):
720
719
 
721
720
  ### Internal route global action
722
721
 
723
- Configuracoes novas devem persistir a integracao em `effects[].globalAction`. O runtime e os validadores tambem
722
+ Configurações novas devem persistir a integração em `effects[].globalAction`. O runtime e os validadores também
724
723
  leem `globalAction` plano para documentos existentes, mas editores e AI manifest devem tratar esse campo como
725
724
  compatibilidade. O adapter da Table preserva `payload`/`payloadExpr` ao reabrir e re-selecionar a mesma `actionId`,
726
- e limpa payloads ao trocar de global action para evitar semantica cruzada.
725
+ e limpa payloads ao trocar de global action para evitar semântica cruzada.
727
726
 
728
727
  ```json
729
728
  {
@@ -779,106 +778,104 @@ e limpa payloads ao trocar de global action para evitar semantica cruzada.
779
778
  { "!==": [{ "var": "status" }, "RESOLVIDO"] }
780
779
  ]
781
780
  },
782
- "tooltip": { "text": "SLA violado: acao imediata necessaria", "position": "top" },
781
+ "tooltip": { "text": "SLA violado: ação imediata necessária", "position": "top" },
783
782
  "animation": { "preset": "warning-attention", "repeat": 3 }
784
783
  }
785
784
  ]
786
785
  }
787
786
  ```
788
787
 
789
- Para manter o overview leve, publique somente essas 4 receitas na landing da
790
- doc. Os demais casos (filtros avancados, logs massivos, overrides CRUD, etc.)
791
- ficam na aba de exemplos completos.
788
+ Essas quatro receitas cobrem o primeiro impacto. Cenários mais longos, como
789
+ filtros avançados, logs massivos e overrides CRUD, pertencem à trilha de exemplos
790
+ completos para não diluir a tese principal do runtime.
792
791
 
793
792
  #### Dominando a cauda longa das interfaces
794
- Em sistemas corporativos e aplicacoes complexas, o esforco de engenharia
795
- raramente esta nos fluxos principais. O custo aparece na cauda longa dos
796
- requisitos de UI: variacoes de regras condicionais, formatacoes especificas,
797
- tooltips baseados em estado e permissoes de acao que mudam por linha ou usuario.
793
+ Em sistemas corporativos e aplicações complexas, o esforço de engenharia
794
+ raramente está nos fluxos principais. O custo aparece na cauda longa dos
795
+ requisitos de UI: variações de regras condicionais, formatações específicas,
796
+ mensagens baseadas em estado e permissões de ação que mudam por linha, perfil
797
+ ou contexto operacional.
798
798
 
799
799
  `praxis-table` foi desenhado para reduzir drasticamente esse custo de
800
- manutencao. Em vez de espalhar condicionais `*ngIf` no codigo, o componente
801
- move o poder de decisao para uma API de regras em JSON Logic e renderizadores
802
- condicionais/compostos. Quem define o contrato ganha controle fino da
803
- experiencia, com mais autonomia para produto e menos acoplamento no frontend.
800
+ manutenção. Em vez de espalhar condicionais pelo código da tela, o componente
801
+ move essas decisões para uma configuração governada. Quem define a experiência
802
+ ganha controle fino sobre leitura visual, ações, filtros e mensagens, com mais
803
+ autonomia para produto e menos acoplamento no frontend.
804
804
 
805
- Impacto pratico:
805
+ Impacto prático:
806
806
 
807
- - Menos ramificacao de codigo no front.
808
- - Mais autonomia para evoluir UX por configuracao.
809
- - Menor risco de regressao ao escalar regras condicionais.
807
+ - Menos ramificação de código no frontend.
808
+ - Mais autonomia para evoluir UX por configuração.
809
+ - Menor risco de regressão ao escalar regras condicionais.
810
810
 
811
- #### Mapa de contrato e superficies
812
- O contrato governa 6 superficies principais:
811
+ #### Mapa de contrato e superfícies
812
+ O contrato governa 6 áreas principais:
813
813
 
814
- | Superficie | O que governa no JSON/API | Impacto no runtime |
814
+ | Área | O que governa | Impacto na experiência |
815
815
  | --- | --- | --- |
816
- | Declarativa (UI e UX) | `columns`, `appearance`, `behavior`, `messages`, `localization` | Define estrutura visual, densidade, textos, ordenacao e comportamento base da tabela. |
817
- | Dados e operacao | `resourcePath`, `data[]`, `behavior.pagination.*`, `behavior.filtering.*`, `behavior.localDataMode.*` | Resolve modo (`remote/local/empty`), estrategia de pagina/filtro/sort e pipeline de dados. |
818
- | Regras condicionais | `rules`, `conditionalStyles`, `rowConditionalStyles`, `conditionalRenderers` | Avalia JSON Logic por linha/celula para estilo, visibilidade e renderer dinamico. |
819
- | Acoes e jornada | `actions`, `toolbar`, `dialogs`, `export` | Materializa acoes de linha/lote/toolbar e fluxos de confirmacao/export. |
820
- | Integracao externa | `tableId`, `componentInstanceId`, overrides CRUD, marcadores de painel | Conecta persistencia, reconciliacao e extensoes de host sem quebrar o contrato base. |
821
- | Eventos de saida | `rowAction`, `bulkAction`, `toolbarAction`, `exportAction`, `columnReorder`, `schemaStatusChange` | Entrega intencoes do usuario como eventos padronizados para o app hospedeiro reagir. |
816
+ | Estrutura e leitura | Colunas, aparência, comportamento, mensagens e localização | Define densidade, textos, ordenação e comportamento base da tabela. |
817
+ | Dados e operação | Recurso remoto, dados locais, paginação, filtros e ordenação | Decide como a tabela busca, pagina, filtra e apresenta os registros. |
818
+ | Regras condicionais | Regras de destaque, visibilidade e variação visual | Transforma estado operacional em sinais visuais consistentes. |
819
+ | Ações e jornada | Toolbar, ações de linha, ações em lote, diálogos e exportação | Materializa comandos e confirmações sem duplicar fluxo em cada tela. |
820
+ | Integração externa | Identidade da instância, preferências e reconciliação | Preserva persistência e isolamento entre telas, usuários e contextos. |
821
+ | Eventos de saída | Intenções estruturadas do usuário | Entrega comandos claros para a aplicação executar navegação, auditoria e regra de negócio. |
822
822
 
823
- A API detalha cada superficie e explicita onde o runtime realmente consome
824
- (Active/Partial/Declared-only/Schema-only).
823
+ A API detalha cada área e explicita onde o comportamento está ativo, parcial,
824
+ declarado ou dependente de schema.
825
825
 
826
826
  #### Arquitetura orientada a contrato (como funciona)
827
- O componente separa estritamente dados, apresentacao e interacao, operando em
828
- dois eixos principais: motor interno da tabela e integracoes externas.
827
+ O componente separa estritamente dados, apresentação e interação, operando em
828
+ dois eixos principais: motor interno da tabela e integrações externas.
829
829
 
830
- Fluxo simplificado de execucao:
830
+ Fluxo simplificado de execução:
831
831
 
832
- 1. **Interpretacao do contrato**: le `TableConfig` e resolve o modo de operacao
833
- (`remote` via API, `local` via array, ou `empty`).
834
- 2. **Montagem da superficie**: renderiza colunas, toolbar, filtros e
835
- comportamentos visuais definidos em `appearance` e `behavior`.
832
+ 1. **Interpretação da configuração**: resolve se a tabela usará dados remotos,
833
+ dados locais ou estado vazio.
834
+ 2. **Montagem da superfície**: renderiza colunas, toolbar, filtros e
835
+ comportamentos visuais definidos pela configuração.
836
836
  3. **Pipeline de dados + motor de regras**:
837
- - remoto: integra `crudService` + estrategia de pagina/sort/filtro;
838
- - local: aplica `computeLocalViewPipeline()` + filtros avancados;
839
- - regras: executa JSON Logic para estilos condicionais, visibilidade de acoes e
840
- renderizadores dinamicos por linha.
841
- 4. **Ciclo de eventos**: emite acoes estruturadas (`rowAction`, `bulkAction`,
842
- `toolbarAction`, etc.) para que a aplicacao hospedeira reaja as intencoes do usuario.
837
+ - remoto: consulta a operação publicada pelo backend;
838
+ - local: aplica paginação, ordenação e filtros no conjunto recebido;
839
+ - regras: avalia destaque visual, visibilidade de ações e variações por linha.
840
+ 4. **Ciclo de eventos**: emite ações estruturadas para que a aplicação reaja às
841
+ intenções do usuário.
843
842
 
844
- #### Integracao com ecossistema Praxis (frontend e backend)
845
- `praxis-table` compoe o ecossistema Praxis de ponta a ponta. O mapa de
846
- integracao cobre frontend, contratos e backend.
843
+ #### Integração com ecossistema Praxis (frontend e backend)
844
+ `praxis-table` compõe o ecossistema Praxis de ponta a ponta. O mapa de
845
+ integração cobre frontend, contratos e backend.
847
846
 
848
847
  Frontend (UI):
849
848
 
850
- | Componente | Papel na experiencia | Como se conecta |
849
+ | Componente | Papel na experiência | Como se conecta |
851
850
  | --- | --- | --- |
852
- | `praxis-table-toolbar` | Barra superior/inferior com acoes, bulk e export | `toolbar`, `actions`, `export`, `behavior.filtering.*` |
853
- | `praxis-filter` | Filtro avancado acoplado a toolbar | `behavior.filtering.advancedFilters.*`, `behavior.filtering.debounceTime`, `resourcePath` |
854
- | `praxis-empty-state-card` | Estado inicial quando nao ha conexao remota | exibido quando nao ha `resourcePath` valido |
855
- | `PraxisAiAssistantShellComponent` | Copiloto semântico opcional nos slots de toolbar | habilitado pelo runtime com turn orchestration e contexto seguro; ao minimizar, a sessao fica no registry com `presence: "origin-anchor"` e o affordance volta ao gatilho da tabela (nao exposto no JSON) |
856
- | Angular Material + CDK | Base de tabela, menus, selecao e virtual scroll | `behavior.pagination.*`, `behavior.selection.*`, `behavior.virtualization.*`, `appearance.spacing.*` |
851
+ | `praxis-table-toolbar` | Barra superior/inferior com ações, bulk e export | `toolbar`, `actions`, `export`, `behavior.filtering.*` |
852
+ | `praxis-filter` | Filtro avançado acoplado à toolbar | `behavior.filtering.advancedFilters.*`, `behavior.filtering.debounceTime`, `resourcePath` |
853
+ | `praxis-empty-state-card` | Estado inicial quando não conexão remota | exibido quando não `resourcePath` válido |
854
+ | `PraxisAiAssistantShellComponent` | Copiloto semântico opcional nos slots de toolbar | habilitado pelo runtime com turn orchestration e contexto seguro; ao minimizar, a sessão fica no registry com `presence: "origin-anchor"` e o affordance volta ao gatilho da tabela (não exposto no JSON) |
855
+ | Angular Material + CDK | Base de tabela, menus, seleção e virtual scroll | `behavior.pagination.*`, `behavior.selection.*`, `behavior.virtualization.*`, `appearance.spacing.*` |
857
856
 
858
857
  Backend e contratos:
859
858
 
860
- | Componente | Papel na experiencia | Como se conecta |
859
+ | Componente | Papel na experiência | Como se conecta |
861
860
  | --- | --- | --- |
862
- | `praxis-metadata-starter` | Publica OpenAPI + `x-ui` e o endpoint `GET /schemas/filtered` | A tabela deriva colunas, filtros e validacoes a partir do contrato |
861
+ | `praxis-metadata-starter` | Publica OpenAPI + `x-ui` e o endpoint `GET /schemas/filtered` | A tabela deriva colunas, filtros e validações a partir do contrato |
863
862
  | `praxis-api-quickstart` | Exemplo pronto com recursos, filtros e CRUD padronizados | Demonstra o fluxo completo com `resourcePath` apontando para a API |
864
863
 
865
- No modo de edicao (quando `enableCustomization` esta ativo), a tabela exibe o painel
866
- de configuracao para ajustar colunas, behavior, appearance e regras sem editar
867
- codigo. Esse painel usa editores internos (`praxis-table-config-editor`,
868
- `behavior-config-editor`, `columns-config-editor`, `toolbar-actions-editor`,
869
- `messages-localization-editor`, etc.) para compor o JSON com consistencia e evitar
870
- divergencia entre UI e contrato.
864
+ No modo de edição, quando a aplicação habilita customização, a tabela exibe o
865
+ editor visual para ajustar colunas, comportamento, aparência e regras sem editar
866
+ código de tela. Esse editor compõe a configuração com consistência e evita
867
+ divergência entre o que o usuário authora e o que a tabela renderiza.
871
868
 
872
- #### Checklist de integracao (pre-flight)
873
- Antes de plugar a tabela em um host, valide estes pontos:
869
+ #### Checklist de integração (pre-flight)
870
+ Antes de plugar a tabela em uma aplicação, valide estes pontos:
874
871
 
875
- - `tableId` esta definido e estavel (persiste e evita colisao de storage).
876
- - Modo de dados decidido: `resourcePath` (remoto) ou `data[]` + flag local.
877
- - `columns[]` descreve o dataset real e define renderers coerentes.
878
- - Acoes e toolbar estao alinhadas com o roteamento `bulkAction` vs `toolbarAction`.
879
- - Regras condicionais: JSON Logic é o contrato canônico.
880
- - UX e mensagens: configure `appearance`, `messages` e `localization` para evitar
881
- inconsistencias entre defaults e o comportamento esperado.
872
+ - A instância tem identidade estável para persistir preferências sem colisão.
873
+ - O modo de dados está decidido: recurso remoto ou conjunto local informado pela aplicação.
874
+ - As colunas descrevem o conjunto de dados real e usam apresentação coerente.
875
+ - Ações de linha, lote e toolbar estão alinhadas com os comandos da aplicação.
876
+ - Regras condicionais têm fonte clara e não ficam espalhadas pelo template.
877
+ - Aparência, mensagens e localização foram revisadas para evitar inconsistências
878
+ entre padrões globais e comportamento esperado.
882
879
 
883
880
  ### Top-level contract
884
881
 
@@ -1170,7 +1167,23 @@ A superficie usa `horizontalScroll` com classes:
1170
1167
  | `columns[]` | `TableColumnConfig[]` | Yes | `[]` | Active | Definicao de colunas, renderers e regras de exibicao. |
1171
1168
  | `behavior` | `TableBehaviorConfig` | No | defaults do runtime | Partial | Inclui paginacao, filtro, selecao e expansao por blocos. |
1172
1169
  | `toolbar.actions[]` | `ToolbarActionConfig[]` | No | `[]` | Partial | Acoes de toolbar com roteamento para `toolbarAction` e `bulkAction`. |
1170
+ | `toolbar.title` | `string` | No | `undefined` | Active | Titulo renderizado na regiao de identidade da toolbar principal, antes de filtros e acoes. |
1171
+ | `toolbar.subtitle` | `string` | No | `undefined` | Active | Texto auxiliar renderizado abaixo do titulo quando houver espaco. |
1172
+ | `toolbar.icon` | `string` | No | `undefined` | Active | Icone semantico renderizado junto ao titulo da toolbar via `PraxisIconDirective`. |
1173
+ | `toolbar.textAlign` | `'start' \| 'center' \| 'end'` | No | `'start'` | Active | Alinhamento textual do bloco de identidade da toolbar. |
1173
1174
  | `toolbar.appearance` | `TableToolbarAppearanceConfig` | No | fallback M3 | Active | Chrome visual governado da toolbar; tokens viram `--p-table-toolbar-*` no runtime. |
1175
+ | `toolbar.appearance.tokens.titleFg` | `string` | No | fallback M3 | Active | Cor do titulo na identidade da toolbar; use tokens semanticos do host para suportar tema claro/escuro. |
1176
+ | `toolbar.appearance.tokens.subtitleFg` | `string` | No | fallback M3 | Active | Cor do subtitulo na identidade da toolbar. |
1177
+ | `toolbar.appearance.tokens.iconFg` | `string` | No | fallback M3 | Active | Cor do icone da identidade; o fundo tonal e derivado dessa cor para manter contraste suave. |
1178
+ | `toolbar.appearance.tokens.titleFontSize` | `string` | No | `14px` | Active | Tamanho tipografico do titulo da identidade. |
1179
+ | `toolbar.appearance.tokens.subtitleFontSize` | `string` | No | `11.5px` | Active | Tamanho tipografico do subtitulo da identidade. |
1180
+ | `toolbar.appearance.tokens.titleFontWeight` | `string` | No | `700` | Active | Peso tipografico do titulo da identidade. |
1181
+ | `toolbar.appearance.tokens.identityGap` | `string` | No | `8px` | Active | Espaco entre icone e copy da identidade da toolbar. |
1182
+ | `toolbar.appearance.tokens.identityFilterGap` | `string` | No | `8px` | Active | Respiro vertical entre identidade e filtros/controles quando a identidade ocupa linha propria. |
1183
+ | `toolbar.appearance.tokens.identityMinHeight` | `string` | No | `30px` | Active | Altura minima do bloco de identidade da toolbar. |
1184
+ | `toolbar.appearance.tokens.identityMarginBottom` | `string` | No | `2px` | Active | Espacamento inferior complementar da identidade da toolbar. |
1185
+ | `toolbar.appearance.tokens.identityIconSize` | `string` | No | `28px` | Active | Tamanho do container do icone da identidade. |
1186
+ | `toolbar.appearance.tokens.identityIconRadius` | `string` | No | `8px` | Active | Raio do container do icone da identidade. |
1174
1187
  | `toolbar.columnsVisibility` | `object` | No | habilitado se a toolbar estiver ativa | Active | Controle rápido de visibilidade de colunas no toolbar (dropdown). |
1175
1188
  | `messages` | `TableMessagesConfig` | No | defaults internos | Partial | Overrides de i18n e mensagens operacionais. |
1176
1189
  | `data` | `TableDataConfig` | No | modo local/remoto autodetectado | Partial | Integra origem local ou remota conforme `resourcePath`/inputs. |