@thibezer/ui-components-kit 2.4.0 → 2.5.0

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.
Files changed (40) hide show
  1. package/CHANGELOG.md +23 -26
  2. package/README.md +31 -2
  3. package/dist/canvas.cjs +59 -59
  4. package/dist/canvas.js +1395 -1725
  5. package/dist/components/ui-canvas-cad/cad-feicoes.d.ts +1 -15
  6. package/dist/components/ui-canvas-cad/cad-ferramentas-barra.d.ts +1 -8
  7. package/dist/components/ui-canvas-cad/cad-snap.d.ts +0 -2
  8. package/dist/components/ui-canvas-cad/ui-canvas-cad.d.ts +0 -7
  9. package/dist/components/ui-tabela/tabela-corpo.d.ts +4 -0
  10. package/dist/components/ui-tabela/tabela-dom.d.ts +3 -0
  11. package/dist/components/ui-tabela/tabela-header.d.ts +3 -1
  12. package/dist/components/ui-tabela/tabela-interacao.d.ts +3 -1
  13. package/dist/components/ui-tabela/tabela-ordenacao.d.ts +5 -3
  14. package/dist/components/ui-tabela/tabela-orquestrador-dados.d.ts +13 -1
  15. package/dist/components/ui-tabela/tabela-redimensionamento.d.ts +11 -2
  16. package/dist/components/ui-tabela/tabela-remota.d.ts +17 -4
  17. package/dist/components/ui-tabela/tabela-renderizador.d.ts +2 -0
  18. package/dist/components/ui-tabela/tabela-selecao.d.ts +2 -0
  19. package/dist/components/ui-tabela/tipos.d.ts +15 -0
  20. package/dist/components/ui-tabela/ui-tabela.d.ts +28 -4
  21. package/dist/custom-elements.json +2855 -2466
  22. package/dist/data.cjs +1 -1
  23. package/dist/data.js +54 -50
  24. package/dist/gerencigeo-canvas/canvas_interacao.d.ts +0 -2
  25. package/dist/gerencigeo-canvas/feature_desenho.d.ts +0 -2
  26. package/dist/gerencigeo-canvas/feature_desenho_controle.d.ts +0 -3
  27. package/dist/gerencigeo-canvas/feature_editor_vertices.d.ts +4 -51
  28. package/dist/index.cjs +1 -1
  29. package/dist/index.js +93 -89
  30. package/dist/register.cjs +1 -1
  31. package/dist/register.js +1 -1
  32. package/dist/tabela.cjs +1 -1
  33. package/dist/tabela.js +42 -38
  34. package/dist/tipos-elementos.d.ts +11 -6
  35. package/dist/tipos-vue.d.ts +10 -6
  36. package/dist/ui-botao-OGJV6Vfk.js +165 -0
  37. package/dist/ui-botao-psS1juof.cjs +12 -0
  38. package/dist/ui-tabela-propriedades-BecPqC-e.cjs +141 -0
  39. package/dist/ui-tabela-propriedades-BokvDD3b.js +2648 -0
  40. package/package.json +1 -1
@@ -60,13 +60,6 @@ interface Contexto {
60
60
  aoFerramenta?: (ferramenta: Ferramenta | null) => void;
61
61
  /** Regra de oficial × prévia compartilhada com o renderizador (o componente a põe no contexto de renderização). */
62
62
  regra?: RegraVersoes;
63
- /** A edição de vértices começou (`true`) ou terminou (`false`), para refletir no botão da barra. */
64
- aoEdicao?: (ativa: boolean) => void;
65
- /**
66
- * Os atalhos de teclado do canvas (S do snap, Enter para editar) valem agora? O componente responde que sim com o mouse
67
- * sobre ele ou o foco dentro dele; sem esta função, valem sempre (a edição e as ferramentas em andamento também sempre valem).
68
- */
69
- atalhoValido?: () => boolean;
70
63
  }
71
64
  /** Opções do popup da feição. */
72
65
  export interface OpcoesPopup {
@@ -79,14 +72,13 @@ export interface ResultadoFerramenta {
79
72
  }
80
73
  export interface ResultadoEdicao {
81
74
  ok: boolean;
82
- motivo?: MotivoRecusaEdicao | 'inexistente' | 'sem-mapa' | 'sem-selecao';
75
+ motivo?: MotivoRecusaEdicao | 'inexistente' | 'sem-mapa';
83
76
  }
84
77
  export declare class GerenciadorFeicoes {
85
78
  private contexto;
86
79
  private selecao;
87
80
  private popup;
88
81
  private editor;
89
- private vigiaCamadaEmEdicao;
90
82
  private snap;
91
83
  private desenho;
92
84
  private camadaDesenho;
@@ -202,18 +194,12 @@ export declare class GerenciadorFeicoes {
202
194
  alternarSnap(): void;
203
195
  conectarTeclado(): void;
204
196
  desconectarTeclado(): void;
205
- private atalhosValem;
206
- /** Enter com uma só feição selecionada (e nada em andamento) abre a edição de vértices. */
207
- private aoTeclaEdicao;
208
- /** Botão "Editar" da barra: encerra a edição em curso ou edita a feição selecionada (uma só). */
209
- alternarEdicaoDaSelecao(): ResultadoEdicao;
210
197
  /** Feições visíveis das camadas de feições cujo envelope toca um quadrado de `tolPx` px em volta de `coord`. */
211
198
  private candidatasEm;
212
199
  /** Snap de uma coordenada contra as feições visíveis de todas as camadas de feições (via índice espacial). */
213
200
  buscarSnapEm(coord: [number, number], excluir?: ExcluirSnap): import('../../gerencigeo-canvas').ResultadoSnap | null;
214
201
  get editando(): boolean;
215
202
  iniciarEdicao(camadaId: string, id: string): ResultadoEdicao;
216
- private pararDeVigiarCamadaEmEdicao;
217
203
  pararEdicao(): void;
218
204
  get ferramentaAtiva(): Ferramenta | null;
219
205
  /** Camada que recebe o que for desenhado. Não existe camada padrão: o consumidor escolhe. */
@@ -1,22 +1,15 @@
1
1
  import { Ferramenta } from '../../gerencigeo-canvas/feature_desenho';
2
2
  /** Interpreta o atributo; nomes desconhecidos são ignorados e a ordem da barra é sempre a canônica. */
3
3
  export declare function interpretarFerramentas(valor: string | null): Ferramenta[];
4
- /** O atributo pede o botão "Editar" (edição de vértices da feição selecionada)? Vale em "todas" ou com a palavra `editar`. */
5
- export declare function barraPedeEdicao(valor: string | null): boolean;
6
4
  export interface ContextoBarraFerramentas {
7
5
  raiz: HTMLElement;
8
6
  aoEscolher: (ferramenta: Ferramenta) => void;
9
- /** Clique em "Editar". Sem isto o botão não é montado. */
10
- aoEditar?: () => void;
11
7
  }
12
8
  export declare class BarraFerramentas {
13
9
  private ctx;
14
10
  private barra;
15
11
  constructor(ctx: ContextoBarraFerramentas);
16
- montar(ferramentas: Ferramenta[], comEdicao?: boolean): void;
17
- private editando;
18
- /** Reflete no botão "Editar" se a edição está em curso. */
19
- marcarEdicao(ativa: boolean): void;
12
+ montar(ferramentas: Ferramenta[]): void;
20
13
  marcar(ativa: Ferramenta | null): void;
21
14
  desmontar(): void;
22
15
  }
@@ -5,8 +5,6 @@ export interface ContextoControleSnap {
5
5
  ligado: boolean;
6
6
  temporario: boolean;
7
7
  }) => void;
8
- /** A tecla S só vale quando isto devolve `true` (ex.: mouse sobre o canvas ou foco dentro dele). Sem a função, vale sempre. */
9
- aplica?: () => boolean;
10
8
  /** Alvo dos listeners de teclado (padrão: window). */
11
9
  alvo?: Pick<Window, 'addEventListener' | 'removeEventListener'>;
12
10
  }
@@ -25,17 +25,10 @@ export declare class UICanvasCAD extends SafeHTMLElement {
25
25
  private estilosExternos;
26
26
  private lastPopupActionEmit?;
27
27
  private lastCanvasClickTime;
28
- /** Mouse sobre o componente: junto com o foco dentro dele, decide se S e Enter valem quando há vários canvases na página. */
29
- private ponteiroSobre;
30
28
  private _chaveGrupo?;
31
29
  private _zonaProjecao;
32
30
  constructor();
33
31
  connectedCallback(): void;
34
- private montarBarra;
35
- /** Único canvas da página: os atalhos valem em qualquer lugar (comportamento de sempre). Com vários, só no que está sob o mouse ou com foco. */
36
- private ehUnicoCanvas;
37
- /** O foco do teclado está dentro do componente (inclusive no shadow DOM)? */
38
- private matchesFocoInterno;
39
32
  destroy(): void;
40
33
  disconnectedCallback(): void;
41
34
  invalidateSizeSafely(): void;
@@ -11,6 +11,10 @@ export interface ContextoCorpoTabela {
11
11
  rowHeight: number;
12
12
  /** Linha que recebe tabindex=0 (foco móvel); fora da janela renderizada, vale a primeira visível. */
13
13
  indiceAtivo?: number | null;
14
+ /** Há filtro de texto ativo: o vazio vira "sem resultados" (mensagem distinta). */
15
+ filtroAtivo?: boolean;
16
+ textoVazio?: string;
17
+ textoSemResultados?: string;
14
18
  isItemSelecionado: (item: Record<string, any>, index: number) => boolean;
15
19
  onLinhaClique: (item: Record<string, any>, index: number) => void;
16
20
  formatWidth: (largura?: string | number) => string;
@@ -7,6 +7,9 @@ export interface EstruturaDOMElementos {
7
7
  colgroupElement: HTMLTableColElement;
8
8
  emptyElement: HTMLDivElement;
9
9
  loadingElement: HTMLDivElement;
10
+ erroElement: HTMLDivElement;
11
+ /** Região só para leitores de tela (contagem de resultados do filtro). */
12
+ anuncioElement: HTMLDivElement;
10
13
  }
11
14
  export declare function formatWidth(largura?: string | number): string;
12
15
  export declare function getAlignmentClass(alinhamento?: string): string;
@@ -12,7 +12,9 @@ export interface ContextoHeaderTabela {
12
12
  getTextAlign: (alinhamento?: string) => string;
13
13
  onHeaderClick: (coluna: TabelaColuna) => void;
14
14
  onHeaderContextMenu: (e: MouseEvent, coluna: TabelaColuna, colIndex: number, th: HTMLTableCellElement) => void;
15
- onInitColumnResize: (e: MouseEvent, coluna: TabelaColuna, colIndex: number, th: HTMLTableCellElement, resizer: HTMLDivElement) => void;
15
+ onInitColumnResize: (e: MouseEvent | PointerEvent, coluna: TabelaColuna, colIndex: number, th: HTMLTableCellElement, resizer: HTMLDivElement) => void;
16
+ /** Ajuste por teclado (setas na alça): `delta` em px. */
17
+ onResizeTeclado?: (delta: number, coluna: TabelaColuna, colIndex: number, th: HTMLTableCellElement, col: HTMLTableColElement) => void;
16
18
  onColumnAutoFit: (coluna: TabelaColuna, th: HTMLTableCellElement, col: HTMLTableColElement) => void;
17
19
  }
18
20
  export declare function renderizarHeaderTabela(ctx: ContextoHeaderTabela): void;
@@ -5,5 +5,7 @@ export interface ContextoTabelaInteracao {
5
5
  shadow: ShadowRoot;
6
6
  onSetIsResizing: (resizing: boolean) => void;
7
7
  }
8
- export declare function executarRedimensionamentoColuna(e: MouseEvent, coluna: TabelaColuna, colIndex: number, thElement: HTMLTableCellElement, resizer: HTMLDivElement, ctx: ContextoTabelaInteracao): (() => void) | null;
8
+ export declare function executarRedimensionamentoColuna(e: MouseEvent | PointerEvent, coluna: TabelaColuna, colIndex: number, thElement: HTMLTableCellElement, resizer: HTMLDivElement, ctx: ContextoTabelaInteracao): (() => void) | null;
9
9
  export declare function abrirPopoverRedimensionamento(e: MouseEvent, coluna: TabelaColuna, colIndex: number, thElement: HTMLTableCellElement, ctx: ContextoTabelaInteracao): void;
10
+ /** Redimensionamento por teclado (setas na alça): ajusta a largura e emite ui-column-resize. */
11
+ export declare function executarRedimensionamentoTeclado(delta: number, coluna: TabelaColuna, thElement: HTMLTableCellElement, colElement: HTMLTableColElement | undefined, ctx: ContextoTabelaInteracao): void;
@@ -1,4 +1,4 @@
1
- import { UISortDetail } from './tipos';
1
+ import { TabelaColuna, UISortDetail } from './tipos';
2
2
  /**
3
3
  * Alterna ciclicamente a ordenação tri-state:
4
4
  * Primeira vez -> 'asc'
@@ -7,6 +7,8 @@ import { UISortDetail } from './tipos';
7
7
  */
8
8
  export declare function alternarDirecaoOrdenacao(colunaAtual: string | null, direcaoAtual: 'asc' | 'desc' | 'original', colunaClicada: string): UISortDetail;
9
9
  /**
10
- * Ordena os dados em memória respeitando valores nulos/undefined, números e strings com collation pt-BR.
10
+ * Ordena os dados em memória (sem alterar o array recebido). Estável; valores nulos/undefined ficam
11
+ * sempre no fim, em qualquer direção. Usa `coluna.comparador` quando existir; senão `coluna.tipo`
12
+ * (numero, data, booleano, texto) ou o tipo dos valores, com collation pt-BR reutilizada.
11
13
  */
12
- export declare function aplicarOrdenacaoTabela(dadosOriginais: Record<string, any>[], colunaOrdenada: string | null, direcao: 'asc' | 'desc' | 'original'): Record<string, any>[];
14
+ export declare function aplicarOrdenacaoTabela(dadosOriginais: Record<string, any>[], colunaOrdenada: string | null, direcao: 'asc' | 'desc' | 'original', coluna?: TabelaColuna | null): Record<string, any>[];
@@ -1,4 +1,6 @@
1
1
  import { TabelaColuna, UISortDetail } from './tipos';
2
+ /** Minúsculas e sem acentos: "ipe" encontra "Ipê". */
3
+ export declare function normalizarTexto(t: string): string;
2
4
  export declare class TabelaOrquestradorDados {
3
5
  private dadosOriginais;
4
6
  private dadosExibicao;
@@ -7,6 +9,13 @@ export declare class TabelaOrquestradorDados {
7
9
  private ultimoFiltro;
8
10
  /** Colunas declaradas: o filtro olha só elas (vazio = todos os campos do registro). */
9
11
  private colunasFiltro;
12
+ private colunas;
13
+ /** Ordenação feita pelo servidor: a tabela guarda coluna/direção (indicador) mas não reordena os dados. */
14
+ private ordenacaoRemota;
15
+ setColunas(colunas: TabelaColuna[]): void;
16
+ setOrdenacaoRemota(remota: boolean): void;
17
+ /** Restaura coluna/direção (ex.: `ui-sort` cancelado) e recalcula. */
18
+ restaurarOrdenacao(coluna: string | null, direcao: 'asc' | 'desc' | 'original'): void;
10
19
  setColunasFiltro(ids: string[]): void;
11
20
  getDadosOriginais(): Record<string, any>[];
12
21
  setDadosOriginais(dados: Record<string, any>[]): void;
@@ -16,7 +25,10 @@ export declare class TabelaOrquestradorDados {
16
25
  getDirecaoOrdenacao(): 'asc' | 'desc' | 'original';
17
26
  setDirecaoOrdenacao(dir: 'asc' | 'desc' | 'original'): void;
18
27
  alternarOrdenacaoColuna(coluna: TabelaColuna): UISortDetail | null;
19
- /** Recalcula a lista exibida: ordenação da coluna e, por cima, o filtro vigente (os dois valem juntos). */
28
+ /** Recalcula a lista exibida: filtro vigente e, sobre o resultado, a ordenação da coluna (valem juntos). */
20
29
  aplicarOrdenacao(): void;
30
+ private casaFiltro;
31
+ /** Há um filtro de texto aplicado (o vazio vira "sem resultados"). */
32
+ temFiltro(): boolean;
21
33
  filtrar(termo: string): void;
22
34
  }
@@ -1,6 +1,6 @@
1
1
  import { TabelaColuna } from './tipos';
2
2
  export interface IniciarRedimensionamentoContexto {
3
- evento: MouseEvent;
3
+ evento: MouseEvent | PointerEvent;
4
4
  coluna: TabelaColuna;
5
5
  colIndex: number;
6
6
  thElement: HTMLTableCellElement;
@@ -8,9 +8,16 @@ export interface IniciarRedimensionamentoContexto {
8
8
  colgroupElement: HTMLTableColElement | null;
9
9
  onResizeStart: () => void;
10
10
  onResizeEnd: (larguraFinal: string) => void;
11
+ /** Soltou sem arrastar: nada mudou, só libera o estado de redimensionamento. */
12
+ onResizeCancel?: () => void;
11
13
  }
14
+ /** Aplica os limites da coluna (mínimo padrão 60px, máximo opcional). */
15
+ export declare function limitarLarguraColuna(coluna: TabelaColuna, largura: number): number;
16
+ /** Redimensiona por teclado: soma `delta` px à largura atual (respeitando os limites). Devolve a largura final. */
17
+ export declare function redimensionarColunaPorDelta(coluna: TabelaColuna, thElement: HTMLTableCellElement, colElement: HTMLTableColElement | undefined, delta: number): string;
12
18
  /**
13
19
  * Gerencia o ciclo de eventos de drag-to-resize de uma coluna da tabela.
20
+ * Aceita mouse (mousedown) e toque/caneta (pointerdown); os ouvintes seguem o mesmo tipo do evento inicial.
14
21
  */
15
22
  export declare function iniciarRedimensionamentoColuna(ctx: IniciarRedimensionamentoContexto): () => void;
16
23
  export interface ExibirPromptPopoverContexto {
@@ -23,6 +30,8 @@ export interface ExibirPromptPopoverContexto {
23
30
  onResizeEnd: (larguraFinal: string) => void;
24
31
  }
25
32
  /**
26
- * Exibe o diálogo popover para ajuste numérico preciso da largura da coluna.
33
+ * Exibe o diálogo para ajuste numérico preciso da largura da coluna.
34
+ * Campo numérico rotulado (vazio = automática), validação inline, posicionado junto ao ponto de origem
35
+ * e mantido dentro da janela; devolve o foco ao cabeçalho ao fechar.
27
36
  */
28
37
  export declare function exibirPromptPopoverRedimensionamento(ctx: ExibirPromptPopoverContexto): void;
@@ -1,15 +1,28 @@
1
- /**
2
- * Gerenciador de requisições remotas para <ui-tabela> (endpoint JSON)
3
- */
1
+ import { TabelaFetcher } from './tipos';
4
2
  export interface ContextoTabelaRemota {
5
3
  host: HTMLElement;
6
4
  onCarregandoAlterado: (carregando: boolean) => void;
7
5
  onDadosRecebidos: (dados: Record<string, any>[]) => void;
6
+ /** Opções do fetch (headers, credentials, method...); lidas a cada requisição. */
7
+ getOpcoes?: () => RequestInit | null | undefined;
8
+ /** Função de busca alternativa; padrão: `fetch` global. */
9
+ getFetcher?: () => TabelaFetcher | null | undefined;
8
10
  }
9
11
  export declare class TabelaRemotaController {
10
12
  private ctx;
11
13
  private autoFetchController;
14
+ private emVoo;
12
15
  constructor(ctx: ContextoTabelaRemota);
13
- carregar(endpoint: string): Promise<void>;
16
+ /**
17
+ * Busca os dados. Resolve `true` em sucesso e `false` em falha, cancelamento ou requisição
18
+ * substituída (nunca rejeita; o motivo da falha vai no evento `ui-fetch-erro`).
19
+ * Uma chamada com a mesma URL de uma requisição em andamento reaproveita essa requisição.
20
+ */
21
+ carregar(endpoint: string): Promise<boolean>;
22
+ private emitir;
23
+ private erro;
24
+ private executar;
25
+ /** Cancela a requisição em andamento (se houver) e libera o indicador de carregamento. */
14
26
  abortar(): void;
27
+ private cancelarEmVoo;
15
28
  }
@@ -20,6 +20,8 @@ export interface ContextoOrquestradorRender {
20
20
  virtualizar: boolean;
21
21
  rowHeight: number;
22
22
  indiceAtivo: number | null;
23
+ textoVazio?: string;
24
+ textoSemResultados?: string;
23
25
  onSetIsResizing: (resizing: boolean) => void;
24
26
  onActiveResizeCleanup: (cleanup: (() => void) | null) => void;
25
27
  onHeaderClick: (col: TabelaColuna) => void;
@@ -32,6 +32,8 @@ export declare class TabelaSelecaoController {
32
32
  * - Item removido dos dados: limpa a seleção e emite `ui-selecao-removida`.
33
33
  */
34
34
  reconciliar(): void;
35
+ /** Mesmo registro com outro objeto (dados recarregados): atualiza a referência e avisa. */
36
+ private substituirReferencia;
35
37
  limparSelecao(): void;
36
38
  isItemSelecionado(item: Record<string, any>, index: number): boolean;
37
39
  atualizarLinhasSelecionadas(): void;
@@ -11,6 +11,12 @@ export interface TabelaColuna<T = any> {
11
11
  alinhamento?: 'esquerda' | 'centro' | 'direita' | 'left' | 'center' | 'right';
12
12
  ordenavel?: boolean;
13
13
  tooltip?: string;
14
+ /** Tipo do dado, usado só na ordenação local: `data` aceita Date, ISO e dd/mm/aaaa. Padrão: inferido pelo valor. */
15
+ tipo?: 'texto' | 'numero' | 'data' | 'booleano';
16
+ /** Comparador próprio para a ordenação local (sentido crescente; a direção é aplicada pela tabela). */
17
+ comparador?: (a: any, b: any, itemA: T, itemB: T) => number;
18
+ /** Texto pesquisável da célula (o filtro padrão olha o valor bruto); útil quando `render` formata o valor. */
19
+ textoFiltro?: (valor: any, item: T) => string;
14
20
  render?: (valor: any, item: T, index: number) => HTMLElement | string;
15
21
  }
16
22
  export interface UISortDetail {
@@ -31,3 +37,12 @@ export interface UISelecaoRemovidaDetail {
31
37
  /** Item que estava selecionado e deixou de existir nos dados. */
32
38
  item: Record<string, any>;
33
39
  }
40
+ export interface UIFetchErroDetail {
41
+ url: string;
42
+ erro: string;
43
+ /** Código HTTP quando a falha veio de uma resposta; undefined em falha de rede/JSON/render. */
44
+ status?: number;
45
+ origem: 'rede' | 'http' | 'json' | 'render';
46
+ }
47
+ /** Substitui o `fetch` do modo remoto (autenticação, interceptadores, mocks). */
48
+ export type TabelaFetcher = (url: string, init: RequestInit) => Promise<Response>;
@@ -1,6 +1,6 @@
1
- import { DensidadeTabela, TabelaColuna, UISortDetail, UIColumnResizeDetail, UIRowScrollOptions, UISelecaoRemovidaDetail } from './tipos';
1
+ import { DensidadeTabela, TabelaColuna, TabelaFetcher, UISortDetail, UIColumnResizeDetail, UIRowScrollOptions, UISelecaoRemovidaDetail, UIFetchErroDetail } from './tipos';
2
2
  import { SafeHTMLElement } from '../../core/ssr-safe';
3
- export type { DensidadeTabela, TabelaColuna, UISortDetail, UIColumnResizeDetail, UIRowScrollOptions, UISelecaoRemovidaDetail };
3
+ export type { DensidadeTabela, TabelaColuna, TabelaFetcher, UISortDetail, UIColumnResizeDetail, UIRowScrollOptions, UISelecaoRemovidaDetail, UIFetchErroDetail };
4
4
  export declare class UITabela extends SafeHTMLElement {
5
5
  static get observedAttributes(): string[];
6
6
  private shadow;
@@ -10,6 +10,8 @@ export declare class UITabela extends SafeHTMLElement {
10
10
  private _isResizing;
11
11
  private _carregando;
12
12
  private _src;
13
+ private _fetchOpcoes;
14
+ private _fetcher;
13
15
  private _containerElement;
14
16
  private _tableElement;
15
17
  private _theadElement;
@@ -17,6 +19,10 @@ export declare class UITabela extends SafeHTMLElement {
17
19
  private _colgroupElement;
18
20
  private _emptyElement;
19
21
  private _loadingElement;
22
+ private _erroElement;
23
+ private _anuncioElement;
24
+ /** Último erro de carregamento remoto (null = sem erro). */
25
+ private _erro;
20
26
  private _scrollHandler;
21
27
  private _activeResizeCleanup;
22
28
  private _headerListeners;
@@ -36,14 +42,32 @@ export declare class UITabela extends SafeHTMLElement {
36
42
  attributeChangedCallback(name: string, _oldVal: string | null, newVal: string | null): void;
37
43
  /** Nome acessível vem do host (`aria-label`); `aria-busy` acompanha o carregamento remoto. */
38
44
  private sincronizarAria;
45
+ /** Textos de estado configuráveis por atributo (carregando, sem resultados, erro). */
46
+ private atualizarTextosEstado;
47
+ /** Mostra (ou oculta, com null) o aviso de erro de carregamento com a ação "Tentar novamente". */
48
+ private mostrarErro;
49
+ private renderizarErro;
50
+ /** Anuncia ao leitor de tela o resultado do filtro (a região é limpa sem filtro ativo). */
51
+ private anunciarResultado;
52
+ private _textoSemResultados;
39
53
  private syncAttributes;
40
54
  private obterContextoAtributos;
41
55
  get src(): string | null;
42
56
  set src(val: string | null);
43
57
  get carregando(): boolean;
44
58
  set carregando(val: boolean);
45
- carregarDoEndpoint(url?: string): Promise<void>;
46
- recarregar(): Promise<void>;
59
+ /** Opções do `fetch` do modo remoto (headers, credentials, method, body...); o `signal` é da tabela. */
60
+ get fetchOpcoes(): RequestInit | null;
61
+ set fetchOpcoes(val: RequestInit | null);
62
+ /** Função de busca alternativa ao `fetch` (autenticação, renovação de token, mocks). */
63
+ get fetcher(): TabelaFetcher | null;
64
+ set fetcher(val: TabelaFetcher | null);
65
+ /** Ordenação feita pelo servidor: o clique no cabeçalho atualiza o indicador e emite `ui-sort`, mas não reordena. */
66
+ get ordenacaoRemota(): boolean;
67
+ set ordenacaoRemota(val: boolean);
68
+ /** Busca a URL (guardada como `src`, para `recarregar()`). Resolve `true` em sucesso; falhas vão em `ui-fetch-erro`. */
69
+ carregarDoEndpoint(url?: string): Promise<boolean>;
70
+ recarregar(): Promise<boolean>;
47
71
  filtrar(termo: string): void;
48
72
  private cleanupEventListeners;
49
73
  get colunas(): TabelaColuna[];