@praxisui/table 1.0.0-beta.45 → 1.0.0-beta.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -48,6 +48,15 @@ Nota: a classe de tema é decisão do host (`.dark-theme` ou `.theme-dark`/`.the
48
48
  - **Acessibilidade**: WCAG 2.1 AA compliant
49
49
  - **Verificação de Schema**: ETag/If-None-Match com notificações (somente em customização)
50
50
 
51
+ ### 📄 Contrato Inline do Filtro
52
+
53
+ - Referencia canonica: `projects/praxis-dynamic-fields/docs/filter-inline-components-guide.md`
54
+ - No contexto da tabela, use este contrato para definir `controlType` inline e politica de compatibilidade (canonica vs legado).
55
+
56
+ ### 🧭 Decisoes de Arquitetura (ADR)
57
+
58
+ - Bundle/adapters: `projects/praxis-table/docs/adr/2026-03-filter-drawer-adapter-light-entrypoint.md`
59
+
51
60
  ### 🎨 Editores Visuais
52
61
 
53
62
  - **Behavior Editor**: Configuração de comportamentos
@@ -708,7 +717,7 @@ onSchemaStatus(ev: { outdated: boolean; serverHash?: string; lastVerifiedAt?: st
708
717
  - O `PraxisFilter` busca schema do DTO de filtro via `/schemas/filtered` com ETag/If-None-Match
709
718
  e emite `metaChanged` com `{ schemaId, serverHash, context }`.
710
719
  - O schema é normalizado e `advancedConfig.metadata` é preenchido para auditoria/telemetria.
711
- - Detalhes: `docs/schemas/fluxo-schema.md` (cliente/caching, 200/304, reconciliadores Form/Filter).
720
+ - Detalhes: `projects/praxis-core/docs/schema-flow.md` (canônico) e `docs/schemas/fluxo-schema.md` (resumo operacional) para cliente/caching, 200/304 e reconciliadores Form/Filter.
712
721
 
713
722
  ### Resolução da chave primária (idField)
714
723
 
@@ -1346,7 +1355,7 @@ Atalhos são “chips” que guardam um conjunto de filtros (DTO) para reuso rá
1346
1355
  - i18n
1347
1356
  - Chaves úteis: `saveAsShortcut`, `renameShortcut`, `removeShortcut`, `shortcutSaved`, `shortcutRemoved`, `undo`, `readonlyShortcut`.
1348
1357
 
1349
- Veja também: “Guia de Integração — Hosts (filtro em gaveta) em `docs/host-crud-integration.md` para detalhes do contrato do Adapter.
1358
+ Veja também: `docs/host-crud-integration.md` (guia operacional host) e `projects/praxis-crud/docs/host-crud-runtime-and-openmode.md` (contrato técnico canônico) para detalhes do contrato do Adapter.
1350
1359
 
1351
1360
  ### Novos Inputs/Outputs (PraxisFilter)
1352
1361
 
@@ -1415,6 +1424,35 @@ Exemplos práticos no workspace (rotas):
1415
1424
  - Regras Visuais (Simples): `/table-rules-simple`
1416
1425
  - Regras Visuais (Complexas): `/table-rules-complex`
1417
1426
 
1427
+ ## Auto-render de Avatar (strict mode)
1428
+
1429
+ No bootstrap de schema (quando `config.columns` esta vazio), a tabela detecta automaticamente colunas de avatar e aplica `renderer.type = 'avatar'`.
1430
+
1431
+ Deteccao:
1432
+ - somente quando `FieldDefinition.controlType === 'avatar'`
1433
+
1434
+ Renderer aplicado:
1435
+ - `renderer: { type: 'avatar', avatar: { srcField, initialsExpr, shape: 'circle', size: 28 } }`
1436
+ - alinhamento central e largura compacta (~56px)
1437
+ - `initialsExpr` com fallback para `nomeCompleto|nome|fullName|name|title`
1438
+
1439
+ Comportamento importante:
1440
+ - a autodeteccao ocorre apenas no bootstrap (nao sobrescreve configuracoes de colunas persistidas)
1441
+ - se quiser desabilitar, defina renderer explicito na coluna (`image` ou `text`)
1442
+ - para cenarios sem `x-ui`, exponha renderer no config ou ajuste backend para enviar `x-ui.controlType`
1443
+
1444
+ Ajustes comuns:
1445
+ - `renderer.avatar.shape`: `'square' | 'rounded' | 'circle'`
1446
+ - `renderer.avatar.size`: numero em px
1447
+ - `renderer.avatar.alt` / `altField`
1448
+ - use `conditionalRenderers` para variar renderer por linha
1449
+
1450
+ A11y, seguranca e performance:
1451
+ - `alt`/`altField` sao respeitados
1452
+ - fallback para iniciais quando imagem falha/nao existe
1453
+ - URL da imagem sanitizada (bloqueia esquemas perigosos)
1454
+ - imagem com `loading=\"lazy\"`
1455
+
1418
1456
  ## 📊 Roadmap
1419
1457
 
1420
1458
  ### Próximas Versões
@@ -0,0 +1,18 @@
1
+ import { InjectionToken } from '@angular/core';
2
+
3
+ function getFilterDrawerAdapterToken() {
4
+ const registryKey = '__PAX_FILTER_DRAWER_ADAPTER_TOKEN__';
5
+ const globalRegistry = globalThis;
6
+ if (!globalRegistry[registryKey]) {
7
+ globalRegistry[registryKey] = new InjectionToken('FILTER_DRAWER_ADAPTER');
8
+ }
9
+ return globalRegistry[registryKey];
10
+ }
11
+ const FILTER_DRAWER_ADAPTER = getFilterDrawerAdapterToken();
12
+
13
+ /**
14
+ * Generated bundle index. Do not edit.
15
+ */
16
+
17
+ export { FILTER_DRAWER_ADAPTER };
18
+ //# sourceMappingURL=praxisui-table-filter-drawer-adapter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"praxisui-table-filter-drawer-adapter.mjs","sources":["../../../projects/praxis-table/filter-drawer-adapter/src/filter-drawer-adapter.ts","../../../projects/praxis-table/filter-drawer-adapter/praxisui-table-filter-drawer-adapter.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { FormConfig } from '@praxisui/core';\n\n/**\n * Configuração de abertura do Advanced Filter em gaveta pelo host.\n *\n * Notas para hosts que exibem botão \"Salvar como atalho\":\n * - Exiba a ação apenas quando `allowSaveTags === true`.\n * - Para habilitar o botão, verifique se há ao menos um filtro efetivo no DTO (campos não vazios).\n * - Monte o DTO para salvar mesclando `initialDto` e o valor atual do formulário (`lastValue`),\n * e limpe chaves com valores vazios ('' | null | undefined) antes de chamar `onSaveShortcut(dto)`.\n */\nexport interface FilterDrawerOpenConfig {\n resourcePath: string;\n formId: string;\n config: FormConfig;\n initialDto?: Record<string, any>;\n title?: string;\n onSubmit(dto: Record<string, any>): void;\n onClose?(): void;\n /** Permite que a UI do host exiba ação de salvar atalho (opcional, retrocompatível) */\n allowSaveTags?: boolean;\n /** Rótulo i18n para o botão de salvar atalho (opcional) */\n i18nSaveAsShortcut?: string;\n /** Callback disparado pelo host com o DTO atual quando o usuário optar por salvar um atalho */\n onSaveShortcut?: (dto: Record<string, any>) => void;\n}\n\nexport interface FilterDrawerAdapter {\n open(config: FilterDrawerOpenConfig): Promise<void> | void;\n}\n\nfunction getFilterDrawerAdapterToken(): InjectionToken<FilterDrawerAdapter> {\n const registryKey = '__PAX_FILTER_DRAWER_ADAPTER_TOKEN__';\n const globalRegistry = globalThis as typeof globalThis & {\n [registryKey]?: InjectionToken<FilterDrawerAdapter>;\n };\n if (!globalRegistry[registryKey]) {\n globalRegistry[registryKey] = new InjectionToken<FilterDrawerAdapter>('FILTER_DRAWER_ADAPTER');\n }\n return globalRegistry[registryKey];\n}\n\nexport const FILTER_DRAWER_ADAPTER = getFilterDrawerAdapterToken();\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAgCA,SAAS,2BAA2B,GAAA;IAClC,MAAM,WAAW,GAAG,qCAAqC;IACzD,MAAM,cAAc,GAAG,UAEtB;AACD,IAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;QAChC,cAAc,CAAC,WAAW,CAAC,GAAG,IAAI,cAAc,CAAsB,uBAAuB,CAAC;IAChG;AACA,IAAA,OAAO,cAAc,CAAC,WAAW,CAAC;AACpC;AAEO,MAAM,qBAAqB,GAAG,2BAA2B;;AC3ChE;;AAEG;;;;"}