Atualização floresta

This commit is contained in:
Luiz Silva 2026-05-31 11:27:51 -03:00
parent 0886fd5c3e
commit 2d4d8f8929
103 changed files with 19266 additions and 14160 deletions

13476
dist/eli-vue.es.js vendored

File diff suppressed because one or more lines are too long

298
dist/eli-vue.umd.js vendored

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,51 @@
/**
* Helpers de formatação e parsing numérico usados pelo EliEntradaNumero.
* Extraídos do componente Vue para manter o arquivo dentro de 250 linhas.
*/
export declare function casasDecimaisFromPrecisao(precisao: number): number;
/**
* Analisa a entrada de texto e converte em um valor numérico válido (float).
* Troca a vírgula brasileira por ponto antes de passar para o parser nativo.
*
* @param texto - O texto bruto digitado ou vindo do estado
* @returns O número processado ou `null` caso inválido ou vazio
*/
export declare function parseNumero(texto: string): number | null;
/**
* Formata um valor numérico para a exibição na interface (usando vírgula como separador).
*
* @param value - O valor numérico de fato emitido
* @param casas - Opcionalmente, o número exato de casas decimais para fixar
* @returns String formatada amigável para exibição em pt-BR
*/
export declare function formatarNumero(value: number | null | undefined, casas: number | null): string;
/**
* Retira todo tipo de sujeira de uma string, devolvendo restritamente números (para inteiros).
*
* @param texto - String de entrada
* @returns Apenas dígitos de 0 a 9
*/
export declare function somenteNumeros(texto: string): string;
/**
* Higieniza o texto preservando apenas os dígitos e exatamente UM separador decimal.
*
* @param texto - Texto misto de entrada
* @returns String contendo número e (opcionalmente) uma vírgula ou ponto residual
*/
export declare function somenteNumerosESeparadorDecimal(texto: string): string;
/**
* Trunca a parte decimal de um texto numérico ao número máximo de casas permitidas.
* Aplicado durante a digitação para evitar que o usuário ultrapasse a precisão configurada.
*
* @param texto - Texto numérico já higienizado (com separador único)
* @param casas - Número máximo de casas decimais; `null` = sem limite
* @returns Texto com a parte decimal truncada no limite especificado
*/
export declare function limitarCasasDecimais(texto: string, casas: number | null): string;
/**
* Resolve o edge-case de digitação transitória parcial terminada em separador (ex: "1,").
*
* @param texto - O texto já higienizado, tipicamente terminando em vírgula ou ponto
* @returns A conversão parcial estrita ou `null` caso falhe
*/
export declare function valorParcialDecimal(texto: string): number | null;

View file

@ -1,5 +1,6 @@
import { type PropType } from "vue";
import type { PadroesEntradas } from "./tiposEntradas";
import "./EliEntradaNumero.css";
type EntradaNumero = PadroesEntradas["numero"];
declare const _default: typeof __VLS_export;
export default _default;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1,9 @@
/**
* Formata um CPF ou CNPJ aplicando a máscara brasileira padrão durante a digitação.
* Detecta automaticamente o tipo pelo comprimento (≤11 dígitos = CPF, >11 = CNPJ).
* Não valida o dígito verificador — apenas aplica a formatação visual.
*
* @param v - Valor bruto (pode conter letras, pontos, traços etc.)
* @returns String formatada no padrão `000.000.000-00` (CPF) ou `00.000.000/0000-00` (CNPJ)
*/
export declare function formatarCpfCnpj(v: string): string;

View file

@ -1,8 +1,17 @@
/** Dependências do Vue (Composition API) */
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
* O setup() é orquestrado por `useEliTabela`, que compõe os seguintes sub-composables:
* - useEliTabelaConsulta — carregamento, paginação, ordenação, busca
* - useEliTabelaFiltrosAvancados — filtros avançados, modal e persistência
* - useEliTabelaSelecao — seleção múltipla de linhas
* - useEliTabelaColunas — visibilidade, ordem e modal de colunas
* - useEliTabelaMenu — menu de ações por linha e posicionamento de popup
*/
import { type PropType } from "vue";
import { type EliTabelaColunasConfig } from "./colunasStorage";
/** Tipos da configuração/contrato da tabela */
import type { parametrosConsulta, tipoEliColuna, tipoEliTabelaConsulta, tipoFiltro } from "./types-eli-tabela";
import "./EliTabela.css";
import type { tipoEliTabelaConsulta } from "./types-eli-tabela";
import type { FiltroBase } from "./useFiltroAvancado";
declare const _default: typeof __VLS_export;
export default _default;
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
@ -16,119 +25,19 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
type: PropType<unknown[]>;
default: () => never[];
};
/** Ocultar painel de debug lateral (EliTabelaDebug) */
esconderDebug: {
type: BooleanConstructor;
default: boolean;
};
}>, {
isDev: boolean;
tabela: import("vue").ComputedRef<tipoEliTabelaConsulta<any>>;
carregando: import("vue").Ref<boolean, boolean>;
erro: import("vue").Ref<string | null, string | null>;
linhas: import("vue").Ref<unknown[], unknown[]>;
linhasPaginadas: import("vue").ComputedRef<unknown[]>;
filtrosAvancadosAtivos: import("vue").ComputedRef<tipoFiltro<any>[]>;
quantidadeFiltrada: import("vue").ComputedRef<number>;
quantidade: import("vue").Ref<number, number>;
menuAberto: import("vue").Ref<number | null, number | null>;
valorBusca: import("vue").Ref<string, string>;
paginaAtual: import("vue").Ref<number, number>;
colunaOrdenacao: import("vue").Ref<string | null, string | null>;
direcaoOrdenacao: import("vue").Ref<"desc" | "asc", "desc" | "asc">;
totalPaginas: import("vue").ComputedRef<number>;
registrosPorConsulta: import("vue").ComputedRef<number>;
exibirBusca: import("vue").ComputedRef<boolean>;
exibirFiltroAvancado: import("vue").ComputedRef<boolean>;
acoesSuperiores: import("vue").ComputedRef<{
posicao: "superior" | "inferior";
icone?: import("@lucide/vue").LucideIcon;
cor?: string;
rotulo: string;
acao: (parametrosConsulta: parametrosConsulta<any> & {
atualizarConsulta: () => Promise<void>;
editarLista: (lista: any[]) => Promise<any[]>;
}) => void;
}[]>;
temAcoesSuperiores: import("vue").ComputedRef<boolean>;
acoesInferiores: import("vue").ComputedRef<{
posicao: "superior" | "inferior";
icone?: import("@lucide/vue").LucideIcon;
cor?: string;
rotulo: string;
acao: (parametrosConsulta: parametrosConsulta<any> & {
atualizarConsulta: () => Promise<void>;
editarLista: (lista: any[]) => Promise<any[]>;
}) => void;
}[]>;
temAcoesInferiores: import("vue").ComputedRef<boolean>;
parametrosConsultaAtuais: import("vue").ComputedRef<{
atualizarConsulta: () => Promise<void>;
editarLista: (novaLista: any[]) => Promise<any[]>;
filtros?: import("p-comuns").tipoFiltro26<any>[] | undefined;
coluna_ordem?: string | number | symbol | undefined;
direcao_ordem?: "asc" | "desc";
offSet?: number;
limit?: number;
texto_busca?: string;
}>;
temAcoes: import("vue").ComputedRef<boolean>;
totalColunas: import("vue").ComputedRef<number>;
colunasEfetivas: import("vue").ComputedRef<any[]>;
rotulosColunas: import("vue").ComputedRef<string[]>;
modalColunasAberto: import("vue").Ref<boolean, boolean>;
configColunas: import("vue").Ref<{
visiveis: string[];
invisiveis: string[];
}, EliTabelaColunasConfig | {
visiveis: string[];
invisiveis: string[];
}>;
temColunasInvisiveis: import("vue").ComputedRef<boolean>;
colunasInvisiveisEfetivas: import("vue").ComputedRef<tipoEliColuna<any>[]>;
linhasExpandidas: import("vue").Ref<Record<number, boolean>, Record<number, boolean>>;
mostrarSelecao: import("vue").ComputedRef<boolean>;
isSelecionado: (linha: unknown) => boolean;
alternarSelecao: (linha: unknown) => void;
todosSelecionados: import("vue").ComputedRef<boolean>;
algunsSelecionados: import("vue").ComputedRef<boolean>;
alternarSelecaoTodos: (forcarMarcar?: boolean) => void;
abrirModalColunas: () => void;
abrirModalFiltro: () => void;
fecharModalColunas: () => void;
salvarModalColunas: (cfg: EliTabelaColunasConfig) => void;
modalFiltroAberto: import("vue").Ref<boolean, boolean>;
filtrosUi: import("vue").Ref<{
chave: string;
valor: any;
}[], {
chave: string;
valor: any;
}[] | {
chave: string;
valor: any;
}[]>;
salvarFiltrosAvancados: (novo: any[]) => void;
limparFiltrosAvancados: () => void;
fecharModalFiltro: () => void;
alternarLinhaExpandida: (indice: number) => void;
alternarOrdenacao: (chave?: string) => void;
atualizarBusca: (texto: string) => void;
irParaPagina: (pagina: number) => void;
acoesDisponiveisPorLinha: (i: number) => {
acao: import("./types-eli-tabela").tipoEliTabelaAcao<any>;
indice: number;
visivel: boolean;
}[];
possuiAcoes: (i: number) => boolean;
toggleMenu: (i: number, evento?: MouseEvent) => void;
menuPopup: import("vue").Ref<{
menuEl: {
value: HTMLElement | null;
};
menuEl: HTMLElement | null;
} | null, {
menuEl: {
value: HTMLElement | null;
};
menuEl: HTMLElement | null;
} | {
menuEl: {
value: HTMLElement | null;
};
menuEl: HTMLElement | null;
} | null>;
menuPopupPos: import("vue").Ref<{
top: number;
@ -140,6 +49,111 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
top: number;
left: number;
}>;
possuiAcoes: (i: number) => boolean;
toggleMenu: (i: number, evento?: MouseEvent) => void;
acoesDisponiveisPorLinha: (i: number) => {
acao: import("./types-eli-tabela").tipoEliTabelaAcao<any>;
indice: number;
visivel: boolean;
}[];
paginaAtual: import("vue").Ref<number, number>;
valorBusca: import("vue").Ref<string, string>;
modalColunasAberto: import("vue").Ref<boolean, boolean>;
configColunas: import("vue").Ref<{
visiveis: string[];
invisiveis: string[];
}, import("./colunasStorage").EliTabelaColunasConfig | {
visiveis: string[];
invisiveis: string[];
}>;
linhasExpandidas: import("vue").Ref<Record<number, boolean>, Record<number, boolean>>;
rotulosColunas: import("vue").ComputedRef<string[]>;
colunasEfetivas: import("vue").ComputedRef<any[]>;
colunasInvisiveisEfetivas: import("vue").ComputedRef<import("./types-eli-tabela").tipoEliColuna<any>[]>;
temColunasInvisiveis: import("vue").ComputedRef<boolean>;
totalColunas: import("vue").ComputedRef<number>;
abrirModalColunas: () => void;
fecharModalColunas: () => void;
salvarModalColunas: (cfg: import("./colunasStorage").EliTabelaColunasConfig) => void;
alternarLinhaExpandida: (indice: number) => void;
mostrarSelecao: import("vue").ComputedRef<boolean>;
isSelecionado: (linha: unknown) => boolean;
alternarSelecao: (linha: unknown) => void;
todosSelecionados: import("vue").ComputedRef<boolean>;
algunsSelecionados: import("vue").ComputedRef<boolean>;
alternarSelecaoTodos: (forcarMarcar?: boolean) => void;
filtrosUi: import("vue").Ref<{
chave: string;
valor: unknown;
}[], {
chave: string;
valor: unknown;
}[] | {
chave: string;
valor: unknown;
}[]>;
filtrosFormula: import("vue").Ref<string, string>;
modalFiltroAberto: import("vue").Ref<boolean, boolean>;
exibirFiltroAvancado: import("vue").ComputedRef<boolean>;
filtrosAvancadosAtivos: import("vue").ComputedRef<import("p-comuns").tipoFiltroDeltaColunaTipada<any>[]>;
abrirModalFiltro: () => void;
fecharModalFiltro: () => void;
limparFiltrosAvancados: () => void;
salvarFiltrosAvancados: (novoLinhas: {
chave: string;
valor: unknown;
}[], novaFormula?: string) => void;
isDev: boolean;
tabela: import("vue").ComputedRef<tipoEliTabelaConsulta<any>>;
carregando: import("vue").Ref<boolean, boolean>;
erro: import("vue").Ref<string | null, string | null>;
linhas: import("vue").Ref<unknown[], unknown[]>;
linhasPaginadas: import("vue").ComputedRef<unknown[]>;
quantidade: import("vue").Ref<number, number>;
quantidadeFiltrada: import("vue").ComputedRef<number>;
acoesVisiveis: import("vue").Ref<boolean[][], boolean[][]>;
colunaOrdenacao: import("vue").Ref<string | null, string | null>;
direcaoOrdenacao: import("vue").Ref<"desc" | "asc", "desc" | "asc">;
registrosPorConsulta: import("vue").ComputedRef<number>;
totalPaginas: import("vue").ComputedRef<number>;
temAcoes: import("vue").ComputedRef<boolean>;
exibirBusca: import("vue").ComputedRef<boolean>;
acoesSuperiores: import("vue").ComputedRef<{
posicao: "superior" | "inferior";
icone?: import("@lucide/vue").LucideIcon;
cor?: string;
rotulo: string;
acao: (parametrosConsulta: import("./types-eli-tabela").parametrosConsulta<any> & {
atualizarConsulta: () => Promise<void>;
editarLista: (lista: any[]) => Promise<any[]>;
}) => void;
}[]>;
acoesInferiores: import("vue").ComputedRef<{
posicao: "superior" | "inferior";
icone?: import("@lucide/vue").LucideIcon;
cor?: string;
rotulo: string;
acao: (parametrosConsulta: import("./types-eli-tabela").parametrosConsulta<any> & {
atualizarConsulta: () => Promise<void>;
editarLista: (lista: any[]) => Promise<any[]>;
}) => void;
}[]>;
temAcoesSuperiores: import("vue").ComputedRef<boolean>;
temAcoesInferiores: import("vue").ComputedRef<boolean>;
parametrosConsultaAtuais: import("vue").ComputedRef<{
atualizarConsulta: () => Promise<void>;
editarLista: (novaLista: any[]) => Promise<any[]>;
filtros?: import("p-comuns").tipoFiltroDeltaColunaTipada<string>[] | undefined;
coluna_ordem?: string | number | symbol | undefined;
direcao_ordem?: "asc" | "desc";
offSet?: number;
limit?: number;
texto_busca?: string;
}>;
carregar: () => Promise<void>;
alternarOrdenacao: (chave?: string) => void;
atualizarBusca: (texto: string) => void;
irParaPagina: (pagina: number) => void;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:selecionados"[], "update:selecionados", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
/** Configuração principal da tabela (colunas, consulta e ações) */
tabela: {
@ -151,10 +165,16 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
type: PropType<unknown[]>;
default: () => never[];
};
/** Ocultar painel de debug lateral (EliTabelaDebug) */
esconderDebug: {
type: BooleanConstructor;
default: boolean;
};
}>> & Readonly<{
"onUpdate:selecionados"?: ((...args: any[]) => any) | undefined;
}>, {
selecionados: unknown[];
esconderDebug: boolean;
}, {}, {
EliTabelaCabecalho: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
exibirBusca: {
@ -181,28 +201,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
};
acoesCabecalho: {
type: PropType<Array<{
icone
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: any;
cor
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: string;
icone?: any;
cor?: string;
rotulo: string;
acao: (params
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: any) => void;
acao: (params?: any) => void;
}>>;
required: true;
};
@ -240,28 +242,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
};
acoesCabecalho: {
type: PropType<Array<{
icone
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: any;
cor
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: string;
icone?: any;
cor?: string;
rotulo: string;
acao: (params
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: any) => void;
acao: (params?: any) => void;
}>>;
required: true;
};
@ -273,6 +257,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
exibirBotaoColunas: boolean;
exibirBotaoFiltroAvancado: boolean;
}, {}, {
Columns3: import("@lucide/vue").LucideIcon;
EliTabelaCaixaDeBusca: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
modelo: {
type: StringConstructor;
@ -297,6 +282,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
}, {}, {
Search: import("@lucide/vue").LucideIcon;
}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
Filter: import("@lucide/vue").LucideIcon;
}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
EliTabelaEstados: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
carregando: {
@ -329,7 +315,11 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
}>> & Readonly<{}>, {
erro: string | null;
mensagemVazio: string | undefined;
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
}, {}, {
AlertCircle: import("@lucide/vue").LucideIcon;
Inbox: import("@lucide/vue").LucideIcon;
LoaderCircle: import("@lucide/vue").LucideIcon;
}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
EliTabelaDebug: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
isDev: {
type: BooleanConstructor;
@ -346,7 +336,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
}>;
required: true;
};
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
}>, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
isDev: {
type: BooleanConstructor;
required: true;
@ -367,7 +357,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
EliTabelaHead: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
colunas: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<import("./types-eli-tabela").tipoEliColuna<any>[]>;
required: true;
};
temAcoes: {
@ -401,14 +391,14 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
}>, {
ArrowUp: import("@lucide/vue").LucideIcon;
ArrowDown: import("@lucide/vue").LucideIcon;
isOrdenavel: (coluna: any) => boolean;
isOrdenavel: (coluna: import("./types-eli-tabela").tipoEliColuna<unknown>) => boolean;
emitAlternarOrdenacao: (chave: string) => void;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
alternarOrdenacao(chave: string): boolean;
"alternar-selecao-todos": () => true;
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
colunas: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<import("./types-eli-tabela").tipoEliColuna<any>[]>;
required: true;
};
temAcoes: {
@ -453,11 +443,11 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
EliTabelaBody: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
colunas: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<import("./types-eli-tabela").tipoEliColuna<any>[]>;
required: true;
};
colunasInvisiveis: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<import("./types-eli-tabela").tipoEliColuna<any>[]>;
required: true;
};
temColunasInvisiveis: {
@ -469,7 +459,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
linhas: {
type: PropType<Array<unknown>>;
type: PropType<unknown[]>;
required: true;
};
temAcoes: {
@ -509,11 +499,11 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
ChevronDown: import("@lucide/vue").LucideIcon;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
colunas: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<import("./types-eli-tabela").tipoEliColuna<any>[]>;
required: true;
};
colunasInvisiveis: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<import("./types-eli-tabela").tipoEliColuna<any>[]>;
required: true;
};
temColunasInvisiveis: {
@ -525,7 +515,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
linhas: {
type: PropType<Array<unknown>>;
type: PropType<unknown[]>;
required: true;
};
temAcoes: {
@ -588,22 +578,37 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
* O setup() é orquestrado por `useEliTabela`, que compõe os seguintes sub-composables:
* - useEliTabelaConsulta — carregamento, paginação, ordenação, busca
* - useEliTabelaFiltrosAvancados — filtros avançados, modal e persistência
* - useEliTabelaSelecao — seleção múltipla de linhas
* - useEliTabelaColunas — visibilidade, ordem e modal de colunas
* - useEliTabelaMenu — menu de ações por linha e posicionamento de popup
*/
/** Enum de códigos de resposta utilizado na consulta */
?: string;
icone
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
* O setup() é orquestrado por `useEliTabela`, que compõe os seguintes sub-composables:
* - useEliTabelaConsulta — carregamento, paginação, ordenação, busca
* - useEliTabelaFiltrosAvancados — filtros avançados, modal e persistência
* - useEliTabelaSelecao — seleção múltipla de linhas
* - useEliTabelaColunas — visibilidade, ordem e modal de colunas
* - useEliTabelaMenu — menu de ações por linha e posicionamento de popup
*/
/** Enum de códigos de resposta utilizado na consulta */
?: import("@lucide/vue").LucideIcon;
acao
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
* O setup() é orquestrado por `useEliTabela`, que compõe os seguintes sub-composables:
* - useEliTabelaConsulta — carregamento, paginação, ordenação, busca
* - useEliTabelaFiltrosAvancados — filtros avançados, modal e persistência
* - useEliTabelaSelecao — seleção múltipla de linhas
* - useEliTabelaColunas — visibilidade, ordem e modal de colunas
* - useEliTabelaMenu — menu de ações por linha e posicionamento de popup
*/
/** Enum de códigos de resposta utilizado na consulta */
?: () => void;
}[];
} | {
@ -623,7 +628,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
colunasInvisiveis: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<import("./types-eli-tabela").tipoEliColuna<any>[]>;
required: true;
};
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
@ -632,7 +637,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
colunasInvisiveis: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<import("./types-eli-tabela").tipoEliColuna<any>[]>;
required: true;
};
}>> & Readonly<{}>, {}, {}, {
@ -661,22 +666,37 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
* O setup() é orquestrado por `useEliTabela`, que compõe os seguintes sub-composables:
* - useEliTabelaConsulta — carregamento, paginação, ordenação, busca
* - useEliTabelaFiltrosAvancados — filtros avançados, modal e persistência
* - useEliTabelaSelecao — seleção múltipla de linhas
* - useEliTabelaColunas — visibilidade, ordem e modal de colunas
* - useEliTabelaMenu — menu de ações por linha e posicionamento de popup
*/
/** Enum de códigos de resposta utilizado na consulta */
?: string;
icone
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
* O setup() é orquestrado por `useEliTabela`, que compõe os seguintes sub-composables:
* - useEliTabelaConsulta — carregamento, paginação, ordenação, busca
* - useEliTabelaFiltrosAvancados — filtros avançados, modal e persistência
* - useEliTabelaSelecao — seleção múltipla de linhas
* - useEliTabelaColunas — visibilidade, ordem e modal de colunas
* - useEliTabelaMenu — menu de ações por linha e posicionamento de popup
*/
/** Enum de códigos de resposta utilizado na consulta */
?: import("@lucide/vue").LucideIcon;
acao
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
* O setup() é orquestrado por `useEliTabela`, que compõe os seguintes sub-composables:
* - useEliTabelaConsulta — carregamento, paginação, ordenação, busca
* - useEliTabelaFiltrosAvancados — filtros avançados, modal e persistência
* - useEliTabelaSelecao — seleção múltipla de linhas
* - useEliTabelaColunas — visibilidade, ordem e modal de colunas
* - useEliTabelaMenu — menu de ações por linha e posicionamento de popup
*/
/** Enum de códigos de resposta utilizado na consulta */
?: () => void;
}[];
} | {
@ -708,11 +728,11 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
acoes: {
type: PropType<Array<{
type: PropType<{
acao: import("./types-eli-tabela").tipoEliTabelaAcao<any>;
indice: number;
visivel: boolean;
}>>;
}[]>;
required: true;
};
linha: {
@ -743,11 +763,11 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
acoes: {
type: PropType<Array<{
type: PropType<{
acao: import("./types-eli-tabela").tipoEliTabelaAcao<any>;
indice: number;
visivel: boolean;
}>>;
}[]>;
required: true;
};
linha: {
@ -778,28 +798,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
};
acoes: {
type: PropType<Array<{
icone
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: any;
cor
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: string;
icone?: any;
cor?: string;
rotulo: string;
acao: (params
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: any) => void;
acao: (params?: any) => void;
}>>;
required: false;
default: () => never[];
@ -837,28 +839,10 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
};
acoes: {
type: PropType<Array<{
icone
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: any;
cor
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: string;
icone?: any;
cor?: string;
rotulo: string;
acao: (params
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: any) => void;
acao: (params?: any) => void;
}>>;
required: false;
default: () => never[];
@ -874,13 +858,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
icone?: any;
cor?: string;
rotulo: string;
acao: (params
/**
* EliTabela
* Componente de tabela consultável com busca, paginação, ordenação e ações por linha.
*/
/** Enum de códigos de resposta utilizado na consulta */
?: any) => void;
acao: (params?: any) => void;
}[];
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
EliTabelaModalColunas: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
@ -893,26 +871,26 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
configInicial: {
type: PropType<EliTabelaColunasConfig>;
type: PropType<import("./colunasStorage").EliTabelaColunasConfig>;
required: true;
};
colunas: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<import("./types-eli-tabela").tipoEliColuna<any>[]>;
required: true;
};
}>, {
emitFechar: () => void;
emitSalvar: () => void;
visiveisLocal: import("vue").Ref<string[], string[]>;
invisiveisLocal: import("vue").Ref<string[], string[]>;
itemSendoArrastado: import("vue").Ref<string | null, string | null>;
emitFechar: () => void;
emitSalvar: () => void;
onDragStart: (e: DragEvent, rotulo: string) => void;
onDragEnd: () => void;
onDragOverItem: (alvoRotulo: string, destino: "visiveis" | "invisiveis") => void;
onDragOverLista: (destino: "visiveis" | "invisiveis") => void;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
fechar(): true;
salvar(_config: EliTabelaColunasConfig): true;
salvar(_config: import("./colunasStorage").EliTabelaColunasConfig): true;
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
aberto: {
type: BooleanConstructor;
@ -923,35 +901,44 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
configInicial: {
type: PropType<EliTabelaColunasConfig>;
type: PropType<import("./colunasStorage").EliTabelaColunasConfig>;
required: true;
};
colunas: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<import("./types-eli-tabela").tipoEliColuna<any>[]>;
required: true;
};
}>> & Readonly<{
onFechar?: (() => any) | undefined;
onSalvar?: ((_config: EliTabelaColunasConfig) => any) | undefined;
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
onSalvar?: ((_config: import("./colunasStorage").EliTabelaColunasConfig) => any) | undefined;
}>, {}, {}, {
Columns2: import("@lucide/vue").LucideIcon;
Eye: import("@lucide/vue").LucideIcon;
EyeOff: import("@lucide/vue").LucideIcon;
GripVertical: import("@lucide/vue").LucideIcon;
X: import("@lucide/vue").LucideIcon;
Check: import("@lucide/vue").LucideIcon;
}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
EliTabelaModalFiltroAvancado: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
aberto: {
type: BooleanConstructor;
required: true;
};
filtrosBase: {
type: PropType<Array<{
chave: string;
rotulo: string;
filtro: (valor: unknown) => import("p-comuns").tipoFiltro26<any>;
entrada: import("../EliEntrada/tiposEntradas").ComponenteEntrada;
}>>;
type: PropType<FiltroBase<string>[]>;
required: true;
};
modelo: {
type: PropType<Array<any>>;
type: PropType<Array<{
chave: string;
valor: unknown;
}>>;
required: true;
};
modeloFormula: {
type: StringConstructor;
default: string;
};
}>, {
linhas: import("vue").Ref<{
chave: string;
@ -1009,12 +996,8 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
densidade?: import("../..").CampoDensidade | undefined;
variante?: import("../..").CampoVariante | undefined;
}];
valor: any;
}[], {
chave: string;
entrada: import("../EliEntrada/tiposEntradas").ComponenteEntrada;
valor: any;
}[] | {
valor: unknown;
}[], import("./useFiltroAvancado").LinhaFiltro[] | {
chave: string;
entrada: readonly ["texto", {
rotulo: string;
@ -1070,15 +1053,17 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
densidade?: import("../..").CampoDensidade | undefined;
variante?: import("../..").CampoVariante | undefined;
}];
valor: any;
valor: unknown;
}[]>;
opcoesParaAdicionar: import("vue").ComputedRef<{
chave: string;
rotulo: string;
filtro: (valor: unknown) => import("p-comuns").tipoFiltro26<any>;
filtro: (valor: unknown) => import("p-comuns").tipoFiltroDeltaColunaTipada<"small" | "length" | "concat" | "slice" | "indexOf" | "lastIndexOf" | "includes" | "toString" | "charAt" | "charCodeAt" | "localeCompare" | "match" | "replace" | "search" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" | "codePointAt" | "endsWith" | "normalize" | "repeat" | "startsWith" | "anchor" | "big" | "blink" | "bold" | "fixed" | "fontcolor" | "fontsize" | "italics" | "link" | "strike" | "sub" | "sup" | "padStart" | "padEnd" | "trimEnd" | "trimStart" | "trimLeft" | "trimRight" | "matchAll" | "valueOf"> | undefined;
entrada: import("../EliEntrada/tiposEntradas").ComponenteEntrada;
}[]>;
chaveParaAdicionar: import("vue").Ref<string, string>;
formulaCustomizada: import("vue").Ref<string, string>;
formulaGerada: import("vue").ComputedRef<string>;
componenteEntrada: (entrada: import("../EliEntrada/tiposEntradas").ComponenteEntrada) => import("vue").DefineComponent<import("vue").ExtractPropTypes<{
value: {
type: PropType<string | null | undefined>;
@ -1418,43 +1403,57 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
}>, {
value: string | null | undefined;
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
opcoesEntrada: (entrada: import("../EliEntrada/tiposEntradas").ComponenteEntrada) => any;
opcoesEntrada: (entrada: import("../EliEntrada/tiposEntradas").ComponenteEntrada) => {
rotulo: string;
};
adicionar: () => void;
remover: (idx: number) => void;
emitFechar: () => void;
emitSalvar: () => void;
emitLimpar: () => void;
rotuloDoFiltro: (f: {
chave: string;
rotulo: string;
filtro: (valor: unknown) => import("p-comuns").tipoFiltro26<any>;
entrada: import("../EliEntrada/tiposEntradas").ComponenteEntrada;
}) => string;
rotuloDoFiltro: typeof import("./useFiltroAvancado").rotuloDoFiltro;
rotuloDoFiltroAtivo: (chave: string) => string;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
fechar: () => true;
limpar: () => true;
salvar: (_linhas: any[]) => true;
salvar: (_linhas: Array<{
chave: string;
valor: unknown;
}>, _formula?: string) => true;
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
aberto: {
type: BooleanConstructor;
required: true;
};
filtrosBase: {
type: PropType<Array<{
chave: string;
rotulo: string;
filtro: (valor: unknown) => import("p-comuns").tipoFiltro26<any>;
entrada: import("../EliEntrada/tiposEntradas").ComponenteEntrada;
}>>;
type: PropType<FiltroBase<string>[]>;
required: true;
};
modelo: {
type: PropType<Array<any>>;
type: PropType<Array<{
chave: string;
valor: unknown;
}>>;
required: true;
};
modeloFormula: {
type: StringConstructor;
default: string;
};
}>> & Readonly<{
onFechar?: (() => any) | undefined;
onSalvar?: ((_linhas: any[]) => any) | undefined;
onSalvar?: ((_linhas: {
chave: string;
valor: unknown;
}[], _formula?: string | undefined) => any) | undefined;
onLimpar?: (() => any) | undefined;
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
}>, {
modeloFormula: string;
}, {}, {
CircleHelp: import("@lucide/vue").LucideIcon;
Filter: import("@lucide/vue").LucideIcon;
Plus: import("@lucide/vue").LucideIcon;
Trash2: import("@lucide/vue").LucideIcon;
X: import("@lucide/vue").LucideIcon;
}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;

View file

@ -4,11 +4,11 @@ declare const _default: typeof __VLS_export;
export default _default;
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
colunas: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<tipoEliColuna<any>[]>;
required: true;
};
colunasInvisiveis: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<tipoEliColuna<any>[]>;
required: true;
};
temColunasInvisiveis: {
@ -20,7 +20,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
linhas: {
type: PropType<Array<unknown>>;
type: PropType<unknown[]>;
required: true;
};
temAcoes: {
@ -60,11 +60,11 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
ChevronDown: import("@lucide/vue").LucideIcon;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
colunas: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<tipoEliColuna<any>[]>;
required: true;
};
colunasInvisiveis: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<tipoEliColuna<any>[]>;
required: true;
};
temColunasInvisiveis: {
@ -76,7 +76,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
linhas: {
type: PropType<Array<unknown>>;
type: PropType<unknown[]>;
required: true;
};
temAcoes: {
@ -156,7 +156,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
colunasInvisiveis: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<tipoEliColuna<any>[]>;
required: true;
};
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
@ -165,7 +165,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
colunasInvisiveis: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<tipoEliColuna<any>[]>;
required: true;
};
}>> & Readonly<{}>, {}, {}, {

View file

@ -82,6 +82,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
exibirBotaoColunas: boolean;
exibirBotaoFiltroAvancado: boolean;
}, {}, {
Columns3: import("@lucide/vue").LucideIcon;
EliTabelaCaixaDeBusca: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
modelo: {
type: StringConstructor;
@ -106,4 +107,5 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
}, {}, {
Search: import("@lucide/vue").LucideIcon;
}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
Filter: import("@lucide/vue").LucideIcon;
}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;

View file

@ -17,7 +17,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
}>;
required: true;
};
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
}>, void, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
isDev: {
type: BooleanConstructor;
required: true;

View file

@ -8,7 +8,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
colunasInvisiveis: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<tipoEliColuna<any>[]>;
required: true;
};
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
@ -17,7 +17,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
colunasInvisiveis: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<tipoEliColuna<any>[]>;
required: true;
};
}>> & Readonly<{}>, {}, {}, {

View file

@ -32,4 +32,8 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
}>> & Readonly<{}>, {
erro: string | null;
mensagemVazio: string | undefined;
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
}, {}, {
AlertCircle: import("@lucide/vue").LucideIcon;
Inbox: import("@lucide/vue").LucideIcon;
LoaderCircle: import("@lucide/vue").LucideIcon;
}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;

View file

@ -4,7 +4,7 @@ declare const _default: typeof __VLS_export;
export default _default;
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
colunas: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<tipoEliColuna<any>[]>;
required: true;
};
temAcoes: {
@ -38,14 +38,14 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
}>, {
ArrowUp: import("@lucide/vue").LucideIcon;
ArrowDown: import("@lucide/vue").LucideIcon;
isOrdenavel: (coluna: any) => boolean;
isOrdenavel: (coluna: tipoEliColuna<unknown>) => boolean;
emitAlternarOrdenacao: (chave: string) => void;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
alternarOrdenacao(chave: string): boolean;
"alternar-selecao-todos": () => true;
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
colunas: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<tipoEliColuna<any>[]>;
required: true;
};
temAcoes: {

View file

@ -20,7 +20,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
acoes: {
type: PropType<Array<ItemAcao<any>>>;
type: PropType<ItemAcao<any>[]>;
required: true;
};
linha: {
@ -51,7 +51,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
acoes: {
type: PropType<Array<ItemAcao<any>>>;
type: PropType<ItemAcao<any>[]>;
required: true;
};
linha: {

View file

@ -1,7 +1,7 @@
import { type PropType } from "vue";
import "./EliTabelaModalColunas.css";
import type { EliTabelaColunasConfig } from "./colunasStorage";
import type { tipoEliColuna } from "./types-eli-tabela";
type OrigemLista = "visiveis" | "invisiveis";
declare const _default: typeof __VLS_export;
export default _default;
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
@ -18,19 +18,19 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
colunas: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<tipoEliColuna<any>[]>;
required: true;
};
}>, {
emitFechar: () => void;
emitSalvar: () => void;
visiveisLocal: import("vue").Ref<string[], string[]>;
invisiveisLocal: import("vue").Ref<string[], string[]>;
itemSendoArrastado: import("vue").Ref<string | null, string | null>;
emitFechar: () => void;
emitSalvar: () => void;
onDragStart: (e: DragEvent, rotulo: string) => void;
onDragEnd: () => void;
onDragOverItem: (alvoRotulo: string, destino: OrigemLista) => void;
onDragOverLista: (destino: OrigemLista) => void;
onDragOverItem: (alvoRotulo: string, destino: "visiveis" | "invisiveis") => void;
onDragOverLista: (destino: "visiveis" | "invisiveis") => void;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
fechar(): true;
salvar(_config: EliTabelaColunasConfig): true;
@ -48,10 +48,17 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
colunas: {
type: PropType<Array<tipoEliColuna<any>>>;
type: PropType<tipoEliColuna<any>[]>;
required: true;
};
}>> & Readonly<{
onFechar?: (() => any) | undefined;
onSalvar?: ((_config: EliTabelaColunasConfig) => any) | undefined;
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
}>, {}, {}, {
Columns2: import("@lucide/vue").LucideIcon;
Eye: import("@lucide/vue").LucideIcon;
EyeOff: import("@lucide/vue").LucideIcon;
GripVertical: import("@lucide/vue").LucideIcon;
X: import("@lucide/vue").LucideIcon;
Check: import("@lucide/vue").LucideIcon;
}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;

View file

@ -1,13 +1,7 @@
import { type PropType } from "vue";
import type { ComponenteEntrada } from "../EliEntrada/tiposEntradas";
import type { tipoEliTabelaConsulta } from "./types-eli-tabela";
type FiltroBase<T> = NonNullable<tipoEliTabelaConsulta<T>["filtroAvancado"]>[number];
type LinhaFiltro = {
chave: string;
entrada: ComponenteEntrada;
valor: any;
};
declare function rotuloDoFiltro(f: FiltroBase<any>): string;
import type { FiltroBase } from "./useFiltroAvancado";
import { rotuloDoFiltro } from "./useFiltroAvancado";
import "./EliTabelaModalFiltroAvancado.css";
declare const _default: typeof __VLS_export;
export default _default;
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
@ -16,13 +10,21 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: true;
};
filtrosBase: {
type: PropType<Array<FiltroBase<any>>>;
type: PropType<FiltroBase<string>[]>;
required: true;
};
modelo: {
type: PropType<Array<any>>;
/** Linhas persistidas do pai — normalizadas internamente via normalizarModelo() */
type: PropType<Array<{
chave: string;
valor: unknown;
}>>;
required: true;
};
modeloFormula: {
type: StringConstructor;
default: string;
};
}>, {
linhas: import("vue").Ref<{
chave: string;
@ -80,8 +82,8 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
densidade?: import("../..").CampoDensidade | undefined;
variante?: import("../..").CampoVariante | undefined;
}];
valor: any;
}[], LinhaFiltro[] | {
valor: unknown;
}[], import("./useFiltroAvancado").LinhaFiltro[] | {
chave: string;
entrada: readonly ["texto", {
rotulo: string;
@ -137,16 +139,18 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
densidade?: import("../..").CampoDensidade | undefined;
variante?: import("../..").CampoVariante | undefined;
}];
valor: any;
valor: unknown;
}[]>;
opcoesParaAdicionar: import("vue").ComputedRef<{
chave: string;
rotulo: string;
filtro: (valor: unknown) => import("p-comuns").tipoFiltro26<any>;
entrada: ComponenteEntrada;
filtro: (valor: unknown) => import("p-comuns").tipoFiltroDeltaColunaTipada<"small" | "length" | "concat" | "slice" | "indexOf" | "lastIndexOf" | "includes" | "toString" | "charAt" | "charCodeAt" | "localeCompare" | "match" | "replace" | "search" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" | "codePointAt" | "endsWith" | "normalize" | "repeat" | "startsWith" | "anchor" | "big" | "blink" | "bold" | "fixed" | "fontcolor" | "fontsize" | "italics" | "link" | "strike" | "sub" | "sup" | "padStart" | "padEnd" | "trimEnd" | "trimStart" | "trimLeft" | "trimRight" | "matchAll" | "valueOf"> | undefined;
entrada: import("../EliEntrada/tiposEntradas").ComponenteEntrada;
}[]>;
chaveParaAdicionar: import("vue").Ref<string, string>;
componenteEntrada: (entrada: ComponenteEntrada) => import("vue").DefineComponent<import("vue").ExtractPropTypes<{
formulaCustomizada: import("vue").Ref<string, string>;
formulaGerada: import("vue").ComputedRef<string>;
componenteEntrada: (entrada: import("../EliEntrada/tiposEntradas").ComponenteEntrada) => import("vue").DefineComponent<import("vue").ExtractPropTypes<{
value: {
type: PropType<string | null | undefined>;
default: undefined;
@ -485,32 +489,58 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
}>, {
value: string | null | undefined;
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
opcoesEntrada: (entrada: ComponenteEntrada) => any;
opcoesEntrada: (entrada: import("../EliEntrada/tiposEntradas").ComponenteEntrada) => {
rotulo: string;
};
adicionar: () => void;
remover: (idx: number) => void;
emitFechar: () => void;
emitSalvar: () => void;
emitLimpar: () => void;
rotuloDoFiltro: typeof rotuloDoFiltro;
rotuloDoFiltroAtivo: (chave: string) => string;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
fechar: () => true;
limpar: () => true;
salvar: (_linhas: any[]) => true;
/** Dado serializável emitido pelo botão Aplicar */
salvar: (_linhas: Array<{
chave: string;
valor: unknown;
}>, _formula?: string) => true;
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
aberto: {
type: BooleanConstructor;
required: true;
};
filtrosBase: {
type: PropType<Array<FiltroBase<any>>>;
type: PropType<FiltroBase<string>[]>;
required: true;
};
modelo: {
type: PropType<Array<any>>;
/** Linhas persistidas do pai — normalizadas internamente via normalizarModelo() */
type: PropType<Array<{
chave: string;
valor: unknown;
}>>;
required: true;
};
modeloFormula: {
type: StringConstructor;
default: string;
};
}>> & Readonly<{
onFechar?: (() => any) | undefined;
onSalvar?: ((_linhas: any[]) => any) | undefined;
onSalvar?: ((_linhas: {
chave: string;
valor: unknown;
}[], _formula?: string | undefined) => any) | undefined;
onLimpar?: (() => any) | undefined;
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
}>, {
modeloFormula: string;
}, {}, {
CircleHelp: import("@lucide/vue").LucideIcon;
Filter: import("@lucide/vue").LucideIcon;
Plus: import("@lucide/vue").LucideIcon;
Trash2: import("@lucide/vue").LucideIcon;
X: import("@lucide/vue").LucideIcon;
}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;

View file

@ -1,4 +1,5 @@
import { type PropType } from "vue";
import "./EliTabelaPaginacao.css";
declare const _default: typeof __VLS_export;
export default _default;
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{

View file

@ -1,3 +1,4 @@
import "dayjs/locale/pt-br";
import { type PropType } from "vue";
import type { tiposTabelaCelulas } from "./tiposTabelaCelulas";
declare const _default: typeof __VLS_export;
@ -8,11 +9,6 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
required: false;
};
}>, {
dados: {
valor: string;
formato: "data" | "data_hora" | "relativo";
acao?: () => void;
} | undefined;
textoData: import("vue").ComputedRef<string>;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
dados: {

View file

@ -7,12 +7,6 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
type: PropType<tiposTabelaCelulas["numero"]>;
};
}>, {
dados: {
numero: number;
prefixo?: string;
sufixo?: string;
acao?: () => void;
} | undefined;
textoNumero: import("vue").ComputedRef<string>;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
dados: {

View file

@ -7,16 +7,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
type: PropType<tiposTabelaCelulas["tags"]>;
required: false;
};
}>, {
dados: {
opcoes: {
rotulo: string;
cor?: string;
icone?: import("@lucide/vue").LucideIcon;
acao?: () => void;
}[];
} | undefined;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
dados: {
type: PropType<tiposTabelaCelulas["tags"]>;
required: false;

View file

@ -6,12 +6,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
dados: {
type: PropType<tiposTabelaCelulas["textoSimples"]>;
};
}>, {
dados: {
texto: string;
acao?: () => void;
} | undefined;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
dados: {
type: PropType<tiposTabelaCelulas["textoSimples"]>;
};

View file

@ -6,12 +6,7 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
dados: {
type: PropType<tiposTabelaCelulas["textoTruncado"]>;
};
}>, {
dados: {
texto: string;
acao?: () => void;
} | undefined;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
dados: {
type: PropType<tiposTabelaCelulas["textoTruncado"]>;
};

View file

@ -1,14 +1,19 @@
/**
* Mapa (dispatch table) que associa cada `tipoTabelaCelula` ao seu componente Vue de renderização.
* Usado por `EliTabelaCelula.vue` para resolver dinamicamente qual componente renderizar
* a partir do tipo retornado por `tipoEliColuna.celula(linha)`.
*
* Adicionar um novo tipo de célula requer:
* 1. Criar o componente `EliTabelaCelula<Tipo>.vue`
* 2. Adicionar a chave em `tipoTabelaCelula` (tiposTabelaCelulas.ts)
* 3. Registrar aqui no mapa
*/
export declare const registryTabelaCelulas: {
readonly textoSimples: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
dados: {
type: import("vue").PropType<import("./tiposTabelaCelulas").tiposTabelaCelulas["textoSimples"]>;
};
}>, {
dados: {
texto: string;
acao?: () => void;
} | undefined;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
dados: {
type: import("vue").PropType<import("./tiposTabelaCelulas").tiposTabelaCelulas["textoSimples"]>;
};
@ -17,12 +22,7 @@ export declare const registryTabelaCelulas: {
dados: {
type: import("vue").PropType<import("./tiposTabelaCelulas").tiposTabelaCelulas["textoTruncado"]>;
};
}>, {
dados: {
texto: string;
acao?: () => void;
} | undefined;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
dados: {
type: import("vue").PropType<import("./tiposTabelaCelulas").tiposTabelaCelulas["textoTruncado"]>;
};
@ -32,12 +32,6 @@ export declare const registryTabelaCelulas: {
type: import("vue").PropType<import("./tiposTabelaCelulas").tiposTabelaCelulas["numero"]>;
};
}>, {
dados: {
numero: number;
prefixo?: string;
sufixo?: string;
acao?: () => void;
} | undefined;
textoNumero: import("vue").ComputedRef<string>;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
dados: {
@ -49,16 +43,7 @@ export declare const registryTabelaCelulas: {
type: import("vue").PropType<import("./tiposTabelaCelulas").tiposTabelaCelulas["tags"]>;
required: false;
};
}>, {
dados: {
opcoes: {
rotulo: string;
cor?: string;
icone?: import("@lucide/vue").LucideIcon;
acao?: () => void;
}[];
} | undefined;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
dados: {
type: import("vue").PropType<import("./tiposTabelaCelulas").tiposTabelaCelulas["tags"]>;
required: false;
@ -729,11 +714,6 @@ export declare const registryTabelaCelulas: {
required: false;
};
}>, {
dados: {
valor: string;
formato: "data" | "data_hora" | "relativo";
acao?: () => void;
} | undefined;
textoData: import("vue").ComputedRef<string>;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
dados: {

View file

@ -1,10 +1,36 @@
export type EliTabelaColunasConfig = {
/** Rotulos das colunas visiveis (em ordem). */
/** Rótulos das colunas visíveis (em ordem). */
visiveis: string[];
/** Rotulos das colunas invisiveis. */
/** Rótulos das colunas invisíveis. */
invisiveis: string[];
};
/**
* Retorna a chave de `localStorage` utilizada para persistir a configuração de colunas de uma tabela.
*
* @param nomeTabela - Identificador único da tabela (campo `nome` de `tipoEliTabelaConsulta`)
* @returns Chave no formato `eli:tabela:<nomeTabela>:colunas`
*/
export declare function storageKeyColunas(nomeTabela: string): string;
/**
* Carrega do `localStorage` a configuração de visibilidade e ordem das colunas de uma tabela.
* Em caso de dado corrompido ou ausente, retorna configuração vazia (sem colunas fixadas).
*
* @param nomeTabela - Identificador único da tabela
* @returns Configuração salva ou `{ visiveis: [], invisiveis: [] }` como fallback seguro
*/
export declare function carregarConfigColunas(nomeTabela: string): EliTabelaColunasConfig;
/**
* Persiste no `localStorage` a configuração de visibilidade e ordem das colunas.
* Falhas de armazenamento (modo privado, storage cheio) são silenciadas.
*
* @param nomeTabela - Identificador único da tabela
* @param config - Configuração com listas de colunas visíveis e invisíveis
*/
export declare function salvarConfigColunas(nomeTabela: string, config: EliTabelaColunasConfig): void;
/**
* Remove do `localStorage` a configuração de colunas salva para uma tabela.
* Usado para restaurar o estado padrão de visibilidade definido nas props.
*
* @param nomeTabela - Identificador único da tabela
*/
export declare function limparConfigColunas(nomeTabela: string): void;

View file

@ -1,7 +1,33 @@
export type EliTabelaFiltroAvancadoSalvo<T> = Array<{
coluna: keyof T;
valor: T[keyof T];
}>;
export type EliTabelaFiltroAvancadoSalvo<T> = {
linhas: Array<{
chave: keyof T;
/** Valor vindo de JSON.parse — tipo desconhecido intencionalmente; faça narrowing no consumidor. */
valor: unknown;
}>;
formula?: string;
};
/**
* Carrega do `localStorage` as linhas de filtro avançado salvas para uma tabela.
* Trata dois formatos legados: array direto de filtros (v1) e objeto `{ linhas, formula }` (v2).
* Em caso de dado ausente, corrompido ou formato desconhecido, retorna estado vazio.
*
* @param nomeTabela - Identificador único da tabela (campo `nome` de `tipoEliTabelaConsulta`)
* @returns Estado de filtros salvo, ou `{ linhas: [], formula: '' }` como fallback seguro
*/
export declare function carregarFiltroAvancado<T>(nomeTabela: string): EliTabelaFiltroAvancadoSalvo<T>;
/**
* Persiste no `localStorage` o estado do filtro avançado de uma tabela.
* Salva tanto as linhas de filtro quanto a fórmula booleana customizada.
* Falhas de armazenamento são silenciadas para não interromper o fluxo do usuário.
*
* @param nomeTabela - Identificador único da tabela
* @param filtros - Estado completo dos filtros a persistir
*/
export declare function salvarFiltroAvancado<T>(nomeTabela: string, filtros: EliTabelaFiltroAvancadoSalvo<T>): void;
/**
* Remove do `localStorage` os filtros avançados salvos para uma tabela.
* Chamado ao executar "Limpar Filtros" no modal de filtro avançado.
*
* @param nomeTabela - Identificador único da tabela
*/
export declare function limparFiltroAvancado(nomeTabela: string): void;

View file

@ -1,6 +1,5 @@
import type { LucideIcon } from "@lucide/vue";
import type { tipoFiltro26 } from "p-comuns";
export type tipoFiltro<T> = tipoFiltro26<T>;
import type { tipoFiltroDeltaColunaTipada } from "p-comuns";
import type { tipoResposta } from "p-respostas";
import type { ComponenteEntrada } from "../EliEntrada/tiposEntradas";
import type { tiposTabelaCelulas, tipoTabelaCelula } from "./celulas/tiposTabelaCelulas";
@ -11,6 +10,20 @@ export type tipoComponenteCelulaBase<T extends tipoTabelaCelula> = readonly [
export type tipoComponenteCelula = {
[K in tipoTabelaCelula]: tipoComponenteCelulaBase<K>;
}[tipoTabelaCelula];
/**
* Cria uma tupla tipada `[tipo, dados]` que representa o conteúdo de uma célula da tabela.
* Funciona como type-safe builder: o TypeScript infere o tipo exato de `dados` a partir de `tipo`,
* garantindo que não seja possível passar dados incorretos para um tipo de célula.
*
* Uso esperado dentro de `tipoEliColuna.celula`:
* ```ts
* celula: (linha) => celulaTabela("textoSimples", { texto: linha.nome })
* ```
*
* @param tipo - Identificador do tipo de célula (chave de `tiposTabelaCelulas`)
* @param dados - Dados tipados para o tipo de célula escolhido
* @returns Tupla `[tipo, dados]` consumida pelo `EliTabelaCelula.vue`
*/
export declare const celulaTabela: <T extends tipoTabelaCelula>(tipo: T, dados: tiposTabelaCelulas[T]) => tipoComponenteCelulaBase<T>;
export type { tiposTabelaCelulas, tipoTabelaCelula };
export type tipoEliColuna<T> = {
@ -52,7 +65,7 @@ export type tipoEliTabelaAcao<T> = {
exibir?: boolean | ((linha: T) => Promise<boolean> | boolean);
};
export type parametrosConsulta<T> = {
filtros?: tipoFiltro26<T>[];
filtros?: tipoFiltroDeltaColunaTipada<Extract<keyof T, string>>[];
coluna_ordem?: keyof T;
direcao_ordem?: "asc" | "desc";
offSet?: number;
@ -124,7 +137,7 @@ export type tipoEliTabelaConsulta<T> = {
/** Rótulo exibido no select de adicionar filtro */
rotulo: string;
/** vai gerar filtro e mescla com os filtros já existentes */
filtro: (valor: unknown) => tipoFiltro26<T>;
filtro: (valor: unknown) => tipoFiltroDeltaColunaTipada<Extract<keyof T, string>> | undefined;
/** componente de entrada que vai receber o valor para o filtro */
entrada: ComponenteEntrada;
}[];

View file

@ -0,0 +1,42 @@
/**
* useColunasOrdenacao
* Composable que encapsula a lógica de drag-and-drop e sincronização de estado
* do modal de configuração de colunas da EliTabela.
*
* Responsável por:
* - Sincronizar colunas visíveis/invisíveis com a configuração persistida
* - Aplicar ordem salva e adicionar novas colunas ao final
* - Gerenciar eventos de arrastar-e-soltar entre as duas listas
*
* Extraído de `EliTabelaModalColunas.vue` para manter o componente abaixo de 250 linhas.
*/
import { type Ref } from "vue";
import type { EliTabelaColunasConfig } from "./colunasStorage";
import type { tipoEliColuna } from "./types-eli-tabela";
type OrigemLista = "visiveis" | "invisiveis";
interface UseColunasOrdenacaoOptions {
aberto: Ref<boolean>;
rotulosColunas: Ref<string[]>;
configInicial: Ref<EliTabelaColunasConfig>;
colunas: Ref<tipoEliColuna<any>[]>;
}
/**
* Composable de drag-and-drop para reordenação e alternância de visibilidade de colunas.
* Sincroniza automaticamente quando `aberto`, `rotulosColunas`, `configInicial` ou `colunas` mudam.
*
* @param options.aberto - Ref que controla se o modal está aberto (gatilho de sincronização)
* @param options.rotulosColunas - Ref com todos os rótulos de colunas da tabela
* @param options.configInicial - Ref com a configuração persistida (visíveis + invisíveis)
* @param options.colunas - Ref com a definição completa das colunas (para ler `visivel: false` padrão)
* @returns Estado reativo e handlers de drag-and-drop prontos para o template
*/
export declare function useColunasOrdenacao({ aberto, rotulosColunas, configInicial, colunas, }: UseColunasOrdenacaoOptions): {
visiveisLocal: Ref<string[], string[]>;
invisiveisLocal: Ref<string[], string[]>;
itemSendoArrastado: Ref<string | null, string | null>;
onDragStart: (e: DragEvent, rotulo: string) => void;
onDragEnd: () => void;
onDragOverItem: (alvoRotulo: string, destino: OrigemLista) => void;
onDragOverLista: (destino: OrigemLista) => void;
};
export {};

View file

@ -0,0 +1,132 @@
import type { tipoEliTabelaConsulta } from "./types-eli-tabela";
type TabelaProps = tipoEliTabelaConsulta<any>;
export declare function useEliTabela(props: {
tabela: TabelaProps;
selecionados: unknown[];
esconderDebug: boolean;
}, emit: (event: "update:selecionados", value: unknown[]) => void): {
menuAberto: import("vue").Ref<number | null, number | null>;
menuPopup: import("vue").Ref<{
menuEl: HTMLElement | null;
} | null, {
menuEl: HTMLElement | null;
} | {
menuEl: HTMLElement | null;
} | null>;
menuPopupPos: import("vue").Ref<{
top: number;
left: number;
}, {
top: number;
left: number;
} | {
top: number;
left: number;
}>;
possuiAcoes: (i: number) => boolean;
toggleMenu: (i: number, evento?: MouseEvent) => void;
acoesDisponiveisPorLinha: (i: number) => {
acao: import("./types-eli-tabela").tipoEliTabelaAcao<any>;
indice: number;
visivel: boolean;
}[];
paginaAtual: import("vue").Ref<number, number>;
valorBusca: import("vue").Ref<string, string>;
modalColunasAberto: import("vue").Ref<boolean, boolean>;
configColunas: import("vue").Ref<{
visiveis: string[];
invisiveis: string[];
}, import("./colunasStorage").EliTabelaColunasConfig | {
visiveis: string[];
invisiveis: string[];
}>;
linhasExpandidas: import("vue").Ref<Record<number, boolean>, Record<number, boolean>>;
rotulosColunas: import("vue").ComputedRef<string[]>;
colunasEfetivas: import("vue").ComputedRef<any[]>;
colunasInvisiveisEfetivas: import("vue").ComputedRef<import("./types-eli-tabela").tipoEliColuna<any>[]>;
temColunasInvisiveis: import("vue").ComputedRef<boolean>;
totalColunas: import("vue").ComputedRef<number>;
abrirModalColunas: () => void;
fecharModalColunas: () => void;
salvarModalColunas: (cfg: import("./colunasStorage").EliTabelaColunasConfig) => void;
alternarLinhaExpandida: (indice: number) => void;
mostrarSelecao: import("vue").ComputedRef<boolean>;
isSelecionado: (linha: unknown) => boolean;
alternarSelecao: (linha: unknown) => void;
todosSelecionados: import("vue").ComputedRef<boolean>;
algunsSelecionados: import("vue").ComputedRef<boolean>;
alternarSelecaoTodos: (forcarMarcar?: boolean) => void;
filtrosUi: import("vue").Ref<{
chave: string;
valor: unknown;
}[], {
chave: string;
valor: unknown;
}[] | {
chave: string;
valor: unknown;
}[]>;
filtrosFormula: import("vue").Ref<string, string>;
modalFiltroAberto: import("vue").Ref<boolean, boolean>;
exibirFiltroAvancado: import("vue").ComputedRef<boolean>;
filtrosAvancadosAtivos: import("vue").ComputedRef<import("p-comuns").tipoFiltroDeltaColunaTipada<any>[]>;
abrirModalFiltro: () => void;
fecharModalFiltro: () => void;
limparFiltrosAvancados: () => void;
salvarFiltrosAvancados: (novoLinhas: {
chave: string;
valor: unknown;
}[], novaFormula?: string) => void;
isDev: boolean;
tabela: import("vue").ComputedRef<tipoEliTabelaConsulta<any>>;
carregando: import("vue").Ref<boolean, boolean>;
erro: import("vue").Ref<string | null, string | null>;
linhas: import("vue").Ref<unknown[], unknown[]>;
linhasPaginadas: import("vue").ComputedRef<unknown[]>;
quantidade: import("vue").Ref<number, number>;
quantidadeFiltrada: import("vue").ComputedRef<number>;
acoesVisiveis: import("vue").Ref<boolean[][], boolean[][]>;
colunaOrdenacao: import("vue").Ref<string | null, string | null>;
direcaoOrdenacao: import("vue").Ref<"desc" | "asc", "desc" | "asc">;
registrosPorConsulta: import("vue").ComputedRef<number>;
totalPaginas: import("vue").ComputedRef<number>;
temAcoes: import("vue").ComputedRef<boolean>;
exibirBusca: import("vue").ComputedRef<boolean>;
acoesSuperiores: import("vue").ComputedRef<{
posicao: "superior" | "inferior";
icone?: import("@lucide/vue").LucideIcon;
cor?: string;
rotulo: string;
acao: (parametrosConsulta: import("./types-eli-tabela").parametrosConsulta<any> & {
atualizarConsulta: () => Promise<void>;
editarLista: (lista: any[]) => Promise<any[]>;
}) => void;
}[]>;
acoesInferiores: import("vue").ComputedRef<{
posicao: "superior" | "inferior";
icone?: import("@lucide/vue").LucideIcon;
cor?: string;
rotulo: string;
acao: (parametrosConsulta: import("./types-eli-tabela").parametrosConsulta<any> & {
atualizarConsulta: () => Promise<void>;
editarLista: (lista: any[]) => Promise<any[]>;
}) => void;
}[]>;
temAcoesSuperiores: import("vue").ComputedRef<boolean>;
temAcoesInferiores: import("vue").ComputedRef<boolean>;
parametrosConsultaAtuais: import("vue").ComputedRef<{
atualizarConsulta: () => Promise<void>;
editarLista: (novaLista: any[]) => Promise<any[]>;
filtros?: import("p-comuns").tipoFiltroDeltaColunaTipada<string>[] | undefined;
coluna_ordem?: string | number | symbol | undefined;
direcao_ordem?: "asc" | "desc";
offSet?: number;
limit?: number;
texto_busca?: string;
}>;
carregar: () => Promise<void>;
alternarOrdenacao: (chave?: string) => void;
atualizarBusca: (texto: string) => void;
irParaPagina: (pagina: number) => void;
};
export {};

View file

@ -0,0 +1,38 @@
/**
* useEliTabelaColunas
* Gerencia visibilidade, ordenação e persistência da configuração de colunas da EliTabela.
* Controla também o modal de colunas e o estado de linhas expandidas (detalhe de colunas invisíveis).
*
* @param props - Props do componente (tabela.colunas, tabela.nome)
* @param temAcoes - Computed que indica se existem ações por linha (para totalColunas)
*/
import { type Ref } from "vue";
import { type EliTabelaColunasConfig } from "./colunasStorage";
import type { tipoEliColuna } from "./types-eli-tabela";
type PropsColunas = {
tabela: {
colunas: tipoEliColuna<any>[];
nome: string;
};
};
export declare function useEliTabelaColunas(props: PropsColunas, temAcoes: Ref<boolean>): {
modalColunasAberto: Ref<boolean, boolean>;
configColunas: Ref<{
visiveis: string[];
invisiveis: string[];
}, EliTabelaColunasConfig | {
visiveis: string[];
invisiveis: string[];
}>;
linhasExpandidas: Ref<Record<number, boolean>, Record<number, boolean>>;
rotulosColunas: import("vue").ComputedRef<string[]>;
colunasEfetivas: import("vue").ComputedRef<any[]>;
colunasInvisiveisEfetivas: import("vue").ComputedRef<tipoEliColuna<any>[]>;
temColunasInvisiveis: import("vue").ComputedRef<boolean>;
totalColunas: import("vue").ComputedRef<number>;
abrirModalColunas: () => void;
fecharModalColunas: () => void;
salvarModalColunas: (cfg: EliTabelaColunasConfig) => void;
alternarLinhaExpandida: (indice: number) => void;
};
export {};

View file

@ -0,0 +1,72 @@
/**
* useEliTabelaConsulta
* Gerencia o ciclo de consultas da EliTabela: carregamento, paginação, ordenação e busca.
* Usa um contador sequencial para descartar respostas de consultas antigas (race condition).
*
* @param props - Props do componente (tabela, esconderDebug)
* @param filtrosAvancadosAtivos - Computed com filtros ativos para envio à API
* @param paginaAtual - Ref da página atual (compartilhada com filtros e busca)
* @param valorBusca - Ref da busca textual (compartilhada com filtros avançados)
* @param linhasExpandidas - Ref das linhas expandidas (resetada ao carregar)
*/
import type { tipoFiltroDeltaColunaTipada } from "p-comuns";
import { type Ref } from "vue";
import type { parametrosConsulta, tipoEliTabelaConsulta } from "./types-eli-tabela";
type PropsConsulta = {
tabela: tipoEliTabelaConsulta<any>;
esconderDebug: boolean;
};
export declare function useEliTabelaConsulta(props: PropsConsulta, filtrosAvancadosAtivos: Ref<tipoFiltroDeltaColunaTipada<any>[]>, paginaAtual: Ref<number>, valorBusca: Ref<string>, linhasExpandidas: Ref<Record<number, boolean>>): {
isDev: boolean;
tabela: import("vue").ComputedRef<tipoEliTabelaConsulta<any>>;
carregando: Ref<boolean, boolean>;
erro: Ref<string | null, string | null>;
linhas: Ref<unknown[], unknown[]>;
linhasPaginadas: import("vue").ComputedRef<unknown[]>;
quantidade: Ref<number, number>;
quantidadeFiltrada: import("vue").ComputedRef<number>;
acoesVisiveis: Ref<boolean[][], boolean[][]>;
colunaOrdenacao: Ref<string | null, string | null>;
direcaoOrdenacao: Ref<"desc" | "asc", "desc" | "asc">;
registrosPorConsulta: import("vue").ComputedRef<number>;
totalPaginas: import("vue").ComputedRef<number>;
temAcoes: import("vue").ComputedRef<boolean>;
exibirBusca: import("vue").ComputedRef<boolean>;
acoesSuperiores: import("vue").ComputedRef<{
posicao: "superior" | "inferior";
icone?: import("@lucide/vue").LucideIcon;
cor?: string;
rotulo: string;
acao: (parametrosConsulta: parametrosConsulta<any> & {
atualizarConsulta: () => Promise<void>;
editarLista: (lista: any[]) => Promise<any[]>;
}) => void;
}[]>;
acoesInferiores: import("vue").ComputedRef<{
posicao: "superior" | "inferior";
icone?: import("@lucide/vue").LucideIcon;
cor?: string;
rotulo: string;
acao: (parametrosConsulta: parametrosConsulta<any> & {
atualizarConsulta: () => Promise<void>;
editarLista: (lista: any[]) => Promise<any[]>;
}) => void;
}[]>;
temAcoesSuperiores: import("vue").ComputedRef<boolean>;
temAcoesInferiores: import("vue").ComputedRef<boolean>;
parametrosConsultaAtuais: import("vue").ComputedRef<{
atualizarConsulta: () => Promise<void>;
editarLista: (novaLista: any[]) => Promise<any[]>;
filtros?: tipoFiltroDeltaColunaTipada<string>[] | undefined;
coluna_ordem?: string | number | symbol | undefined;
direcao_ordem?: "asc" | "desc";
offSet?: number;
limit?: number;
texto_busca?: string;
}>;
carregar: () => Promise<void>;
alternarOrdenacao: (chave?: string) => void;
atualizarBusca: (texto: string) => void;
irParaPagina: (pagina: number) => void;
};
export {};

View file

@ -0,0 +1,45 @@
/**
* useEliTabelaFiltrosAvancados
* Gerencia o estado de filtros avançados da EliTabela, incluindo:
* - Linhas de filtro ativas (`filtrosUi`) e fórmula booleana (`filtrosFormula`)
* - Computed `filtrosAvancadosAtivos` que converte as linhas em FiltroDelta para a API
* - Abertura/fechamento e limpeza do modal de filtro avançado
*
* A fórmula é armazenada no formato `{chave}` (ex: `{email} E {nome}`) e convertida
* para IDs globais `{c1} {c2}` durante a montagem do FiltroDelta final.
*
* @param props - Props do componente (tabela.filtroAvancado, tabela.nome)
* @param paginaAtual - Ref da página atual (para resetar ao aplicar filtros)
* @param valorBusca - Ref da busca textual (limpa ao aplicar filtros avançados)
* @param carregar - Função de recarregamento dos dados
*/
import type { tipoFiltroDeltaColunaTipada } from "p-comuns";
import { type Ref } from "vue";
type PropsFiltros = {
tabela: {
filtroAvancado?: any[];
nome: string;
};
};
type LinhaFiltroUI = {
chave: string;
valor: unknown;
};
export declare function useEliTabelaFiltrosAvancados(props: PropsFiltros, paginaAtual: Ref<number>, valorBusca: Ref<string>, carregar: () => Promise<void>): {
filtrosUi: Ref<{
chave: string;
valor: unknown;
}[], LinhaFiltroUI[] | {
chave: string;
valor: unknown;
}[]>;
filtrosFormula: Ref<string, string>;
modalFiltroAberto: Ref<boolean, boolean>;
exibirFiltroAvancado: import("vue").ComputedRef<boolean>;
filtrosAvancadosAtivos: import("vue").ComputedRef<tipoFiltroDeltaColunaTipada<any>[]>;
abrirModalFiltro: () => void;
fecharModalFiltro: () => void;
limparFiltrosAvancados: () => void;
salvarFiltrosAvancados: (novoLinhas: LinhaFiltroUI[], novaFormula?: string) => void;
};
export {};

View file

@ -0,0 +1,43 @@
/**
* useEliTabelaMenu
* Gerencia o menu de ações por linha da EliTabela.
* Controla abertura/fechamento, posicionamento do popup e detecção de clique externo.
*
* @param props - Props do componente (tabela.acoesLinha)
* @param acoesVisiveis - Ref com matriz de visibilidade das ações por linha
*/
import { type Ref } from "vue";
import type { tipoEliTabelaAcao } from "./types-eli-tabela";
type PropsMenu = {
tabela: {
acoesLinha?: tipoEliTabelaAcao<any>[];
};
};
export declare function useEliTabelaMenu(props: PropsMenu, acoesVisiveis: Ref<boolean[][]>): {
menuAberto: Ref<number | null, number | null>;
menuPopup: Ref<{
menuEl: HTMLElement | null;
} | null, {
menuEl: HTMLElement | null;
} | {
menuEl: HTMLElement | null;
} | null>;
menuPopupPos: Ref<{
top: number;
left: number;
}, {
top: number;
left: number;
} | {
top: number;
left: number;
}>;
possuiAcoes: (i: number) => boolean;
toggleMenu: (i: number, evento?: MouseEvent) => void;
acoesDisponiveisPorLinha: (i: number) => {
acao: tipoEliTabelaAcao<any>;
indice: number;
visivel: boolean;
}[];
};
export {};

View file

@ -0,0 +1,26 @@
/**
* useEliTabelaSelecao
* Gerencia a seleção múltipla de linhas na EliTabela.
* Suporta seleção por objeto completo ou por chave configurável (`chave_selecao`).
*
* @param props - Props do componente (selecionados, tabela.chave_selecao, tabela.mostrar_selecao)
* @param emit - Função de emit para `update:selecionados`
* @param linhasPaginadas - Ref com as linhas da página atual (para todosSelecionados/algunsSelecionados)
*/
import { type Ref } from "vue";
type PropsSelecao = {
selecionados: unknown[];
tabela: {
mostrar_selecao?: boolean;
chave_selecao?: string | number | symbol;
};
};
export declare function useEliTabelaSelecao(props: PropsSelecao, emit: (event: "update:selecionados", value: unknown[]) => void, linhasPaginadas: Ref<unknown[]>): {
mostrarSelecao: import("vue").ComputedRef<boolean>;
isSelecionado: (linha: unknown) => boolean;
alternarSelecao: (linha: unknown) => void;
todosSelecionados: import("vue").ComputedRef<boolean>;
algunsSelecionados: import("vue").ComputedRef<boolean>;
alternarSelecaoTodos: (forcarMarcar?: boolean) => void;
};
export {};

View file

@ -0,0 +1,534 @@
/**
* useFiltroAvancado
* Composable que encapsula a lógica do modal de filtro avançado da EliTabela.
*
* Responsável por:
* - Gerenciar a lista de linhas de filtro ativas
* - Converter fórmulas booleanas entre notação de exibição (`{c1}`) e persistência (`{chave}`)
* - Normalizar filtros carregados do localStorage (compatibilidade com formatos legados)
* - Resolver o componente de entrada correto por tipo (`texto`, `numero`, `dataHora`)
*
* Extraído de `EliTabelaModalFiltroAvancado.vue` para manter o componente abaixo de 250 linhas.
*/
import { type Ref } from "vue";
import type { ComponenteEntrada } from "../EliEntrada/tiposEntradas";
import type { tipoEliTabelaConsulta } from "./types-eli-tabela";
export type FiltroBase<T> = NonNullable<tipoEliTabelaConsulta<T>["filtroAvancado"]>[number];
export type LinhaFiltro = {
chave: string;
entrada: ComponenteEntrada;
/** Valor do campo de filtro — unknown intencionalmente (vem de localStorage ou entrada do usuário). */
valor: unknown;
};
/**
* Retorna o rótulo de exibição de uma definição de filtro.
* Utilizado no template do modal para exibir o nome do campo ao usuário.
*
* @param f - Definição de filtro da configuração da tabela
* @returns Rótulo textual do filtro
*/
export declare function rotuloDoFiltro(f: FiltroBase<string>): string;
interface UseFiltroAvancadoOptions {
aberto: Ref<boolean>;
filtrosBase: Ref<FiltroBase<string>[]>;
modelo: Ref<Array<{
chave: string;
valor: unknown;
}>>;
modeloFormula: Ref<string>;
emit: {
(event: "fechar"): void;
(event: "limpar"): void;
(event: "salvar", linhas: Array<{
chave: string;
valor: unknown;
}>, formula?: string): void;
};
}
/**
* Composable principal do modal de filtro avançado da EliTabela.
* Sincroniza automaticamente quando o modal abre ou o modelo/filtrosBase mudam.
*
* @param options.aberto - Ref que controla se o modal está aberto
* @param options.filtrosBase - Ref com as definições de filtros disponíveis na tabela
* @param options.modelo - Ref com as linhas de filtro persistidas (vindo do pai)
* @param options.modeloFormula - Ref com a fórmula booleana persistida no pai
* @param options.emit - Função de emit do componente Vue pai
* @returns Estado reativo e ações do modal de filtro
*/
export declare function useFiltroAvancado({ aberto, filtrosBase, modelo, modeloFormula, emit, }: UseFiltroAvancadoOptions): {
linhas: Ref<{
chave: string;
entrada: readonly ["texto", {
rotulo: string;
placeholder?: string | undefined;
limiteCaracteres?: number | undefined;
formato?: "texto" | "email" | "url" | "telefone" | "cpfCnpj" | "cep" | undefined;
}] | readonly ["dataHora", {
rotulo: string;
placeholder?: string | undefined;
modo?: "data" | "dataHora" | undefined;
limpavel?: boolean | undefined;
erro?: boolean | undefined;
mensagensErro?: string | string[] | undefined;
dica?: string | undefined;
dicaPersistente?: boolean | undefined;
min?: string | undefined;
max?: string | undefined;
densidade?: import("../..").CampoDensidade | undefined;
variante?: import("../..").CampoVariante | undefined;
}] | readonly ["numero", {
rotulo: string;
placeholder?: string | undefined;
sufixo?: string | undefined;
prefixo?: string | undefined;
precisao?: number | undefined;
}] | readonly ["paragrafo", {
rotulo: string;
placeholder?: string | undefined;
linhas?: number | undefined;
limiteCaracteres?: number | undefined;
limpavel?: boolean | undefined;
erro?: boolean | undefined;
mensagensErro?: string | string[] | undefined;
dica?: string | undefined;
dicaPersistente?: boolean | undefined;
densidade?: import("../..").CampoDensidade | undefined;
variante?: import("../..").CampoVariante | undefined;
}] | readonly ["selecao", {
rotulo: string;
placeholder?: string | undefined;
itens: () => {
chave: string;
rotulo: string;
}[] | Promise<{
chave: string;
rotulo: string;
}[]>;
limpavel?: boolean | undefined;
erro?: boolean | undefined;
mensagensErro?: string | string[] | undefined;
dica?: string | undefined;
dicaPersistente?: boolean | undefined;
densidade?: import("../..").CampoDensidade | undefined;
variante?: import("../..").CampoVariante | undefined;
}];
valor: unknown;
}[], LinhaFiltro[] | {
chave: string;
entrada: readonly ["texto", {
rotulo: string;
placeholder?: string | undefined;
limiteCaracteres?: number | undefined;
formato?: "texto" | "email" | "url" | "telefone" | "cpfCnpj" | "cep" | undefined;
}] | readonly ["dataHora", {
rotulo: string;
placeholder?: string | undefined;
modo?: "data" | "dataHora" | undefined;
limpavel?: boolean | undefined;
erro?: boolean | undefined;
mensagensErro?: string | string[] | undefined;
dica?: string | undefined;
dicaPersistente?: boolean | undefined;
min?: string | undefined;
max?: string | undefined;
densidade?: import("../..").CampoDensidade | undefined;
variante?: import("../..").CampoVariante | undefined;
}] | readonly ["numero", {
rotulo: string;
placeholder?: string | undefined;
sufixo?: string | undefined;
prefixo?: string | undefined;
precisao?: number | undefined;
}] | readonly ["paragrafo", {
rotulo: string;
placeholder?: string | undefined;
linhas?: number | undefined;
limiteCaracteres?: number | undefined;
limpavel?: boolean | undefined;
erro?: boolean | undefined;
mensagensErro?: string | string[] | undefined;
dica?: string | undefined;
dicaPersistente?: boolean | undefined;
densidade?: import("../..").CampoDensidade | undefined;
variante?: import("../..").CampoVariante | undefined;
}] | readonly ["selecao", {
rotulo: string;
placeholder?: string | undefined;
itens: () => {
chave: string;
rotulo: string;
}[] | Promise<{
chave: string;
rotulo: string;
}[]>;
limpavel?: boolean | undefined;
erro?: boolean | undefined;
mensagensErro?: string | string[] | undefined;
dica?: string | undefined;
dicaPersistente?: boolean | undefined;
densidade?: import("../..").CampoDensidade | undefined;
variante?: import("../..").CampoVariante | undefined;
}];
valor: unknown;
}[]>;
opcoesParaAdicionar: import("vue").ComputedRef<{
chave: string;
rotulo: string;
filtro: (valor: unknown) => import("p-comuns").tipoFiltroDeltaColunaTipada<"small" | "length" | "concat" | "slice" | "indexOf" | "lastIndexOf" | "includes" | "toString" | "charAt" | "charCodeAt" | "localeCompare" | "match" | "replace" | "search" | "split" | "substring" | "toLowerCase" | "toLocaleLowerCase" | "toUpperCase" | "toLocaleUpperCase" | "trim" | "substr" | "codePointAt" | "endsWith" | "normalize" | "repeat" | "startsWith" | "anchor" | "big" | "blink" | "bold" | "fixed" | "fontcolor" | "fontsize" | "italics" | "link" | "strike" | "sub" | "sup" | "padStart" | "padEnd" | "trimEnd" | "trimStart" | "trimLeft" | "trimRight" | "matchAll" | "valueOf"> | undefined;
entrada: ComponenteEntrada;
}[]>;
chaveParaAdicionar: Ref<string, string>;
formulaCustomizada: Ref<string, string>;
formulaGerada: import("vue").ComputedRef<string>;
componenteEntrada: (entrada: ComponenteEntrada) => import("vue").DefineComponent<import("vue").ExtractPropTypes<{
value: {
type: import("vue").PropType<string | null | undefined>;
default: undefined;
};
opcoes: {
type: import("vue").PropType<{
rotulo: string;
placeholder?: string;
} & {
modo?: "data" | "dataHora";
limpavel?: boolean;
erro?: boolean;
mensagensErro?: string | string[];
dica?: string;
dicaPersistente?: boolean;
min?: string;
max?: string;
densidade?: import("../..").CampoDensidade;
variante?: import("../..").CampoVariante;
}>;
required: false;
default: undefined;
};
modelValue: {
type: import("vue").PropType<string | null>;
default: null;
};
modo: {
type: import("vue").PropType<"data" | "dataHora" | undefined>;
default: undefined;
};
rotulo: {
type: StringConstructor;
default: undefined;
};
placeholder: {
type: StringConstructor;
default: undefined;
};
desabilitado: {
type: BooleanConstructor;
default: undefined;
};
limpavel: {
type: BooleanConstructor;
default: undefined;
};
erro: {
type: BooleanConstructor;
default: undefined;
};
mensagensErro: {
type: import("vue").PropType<string | string[]>;
default: undefined;
};
dica: {
type: StringConstructor;
default: undefined;
};
dicaPersistente: {
type: BooleanConstructor;
default: undefined;
};
densidade: {
type: import("vue").PropType<import("../..").CampoDensidade>;
default: undefined;
};
variante: {
type: import("vue").PropType<import("../..").CampoVariante>;
default: undefined;
};
min: {
type: import("vue").PropType<string | undefined>;
default: undefined;
};
max: {
type: import("vue").PropType<string | undefined>;
default: undefined;
};
}>, {
attrs: import("vue").Attrs;
valor: import("vue").WritableComputedRef<string, string>;
tipoInput: import("vue").ComputedRef<"date" | "datetime-local">;
minLocal: import("vue").ComputedRef<string | undefined>;
maxLocal: import("vue").ComputedRef<string | undefined>;
opcoesEfetivas: import("vue").ComputedRef<{
rotulo: string;
placeholder?: string;
} & {
modo?: "data" | "dataHora";
limpavel?: boolean;
erro?: boolean;
mensagensErro?: string | string[];
dica?: string;
dicaPersistente?: boolean;
min?: string;
max?: string;
densidade?: import("../..").CampoDensidade;
variante?: import("../..").CampoVariante;
}>;
desabilitadoEfetivo: import("vue").ComputedRef<boolean>;
emitCompatFocus: () => void;
emitCompatBlur: () => void;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
"update:value": (_v: string | null) => true;
input: (_v: string | null) => true;
change: (_v: string | null) => true;
"update:modelValue": (_v: string | null) => true;
alterar: (_v: string | null) => true;
foco: () => true;
desfoco: () => true;
focus: () => true;
blur: () => true;
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
value: {
type: import("vue").PropType<string | null | undefined>;
default: undefined;
};
opcoes: {
type: import("vue").PropType<{
rotulo: string;
placeholder?: string;
} & {
modo?: "data" | "dataHora";
limpavel?: boolean;
erro?: boolean;
mensagensErro?: string | string[];
dica?: string;
dicaPersistente?: boolean;
min?: string;
max?: string;
densidade?: import("../..").CampoDensidade;
variante?: import("../..").CampoVariante;
}>;
required: false;
default: undefined;
};
modelValue: {
type: import("vue").PropType<string | null>;
default: null;
};
modo: {
type: import("vue").PropType<"data" | "dataHora" | undefined>;
default: undefined;
};
rotulo: {
type: StringConstructor;
default: undefined;
};
placeholder: {
type: StringConstructor;
default: undefined;
};
desabilitado: {
type: BooleanConstructor;
default: undefined;
};
limpavel: {
type: BooleanConstructor;
default: undefined;
};
erro: {
type: BooleanConstructor;
default: undefined;
};
mensagensErro: {
type: import("vue").PropType<string | string[]>;
default: undefined;
};
dica: {
type: StringConstructor;
default: undefined;
};
dicaPersistente: {
type: BooleanConstructor;
default: undefined;
};
densidade: {
type: import("vue").PropType<import("../..").CampoDensidade>;
default: undefined;
};
variante: {
type: import("vue").PropType<import("../..").CampoVariante>;
default: undefined;
};
min: {
type: import("vue").PropType<string | undefined>;
default: undefined;
};
max: {
type: import("vue").PropType<string | undefined>;
default: undefined;
};
}>> & Readonly<{
onInput?: ((_v: string | null) => any) | undefined;
"onUpdate:value"?: ((_v: string | null) => any) | undefined;
onChange?: ((_v: string | null) => any) | undefined;
"onUpdate:modelValue"?: ((_v: string | null) => any) | undefined;
onAlterar?: ((_v: string | null) => any) | undefined;
onFoco?: (() => any) | undefined;
onDesfoco?: (() => any) | undefined;
onFocus?: (() => any) | undefined;
onBlur?: (() => any) | undefined;
}>, {
modo: "data" | "dataHora" | undefined;
limpavel: boolean;
erro: boolean;
mensagensErro: string | string[];
dica: string;
dicaPersistente: boolean;
min: string | undefined;
max: string | undefined;
densidade: import("../..").CampoDensidade;
variante: import("../..").CampoVariante;
opcoes: {
rotulo: string;
placeholder?: string;
} & {
modo?: "data" | "dataHora";
limpavel?: boolean;
erro?: boolean;
mensagensErro?: string | string[];
dica?: string;
dicaPersistente?: boolean;
min?: string;
max?: string;
densidade?: import("../..").CampoDensidade;
variante?: import("../..").CampoVariante;
};
value: string | null | undefined;
modelValue: string | null;
rotulo: string;
placeholder: string;
desabilitado: boolean;
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any> | import("vue").DefineComponent<import("vue").ExtractPropTypes<{
value: {
type: import("vue").PropType<number | null | undefined>;
default: undefined;
};
opcoes: {
type: import("vue").PropType<{
rotulo: string;
placeholder?: string;
} & {
sufixo?: string;
prefixo?: string;
precisao?: number;
}>;
required: true;
};
}>, {
attrs: import("vue").Attrs;
emit: ((event: "input", _v: number | null | undefined) => void) & ((event: "update:value", _v: number | null | undefined) => void) & ((event: "change", _v: number | null | undefined) => void) & ((event: "focus") => void) & ((event: "blur") => void);
displayValue: Ref<string, string>;
isInteiro: import("vue").ComputedRef<boolean>;
onUpdateModelValue: (texto: string) => void;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
"update:value": (_v: number | null | undefined) => true;
input: (_v: number | null | undefined) => true;
change: (_v: number | null | undefined) => true;
focus: () => true;
blur: () => true;
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
value: {
type: import("vue").PropType<number | null | undefined>;
default: undefined;
};
opcoes: {
type: import("vue").PropType<{
rotulo: string;
placeholder?: string;
} & {
sufixo?: string;
prefixo?: string;
precisao?: number;
}>;
required: true;
};
}>> & Readonly<{
onInput?: ((_v: number | null | undefined) => any) | undefined;
"onUpdate:value"?: ((_v: number | null | undefined) => any) | undefined;
onChange?: ((_v: number | null | undefined) => any) | undefined;
onFocus?: (() => any) | undefined;
onBlur?: (() => any) | undefined;
}>, {
value: number | null | undefined;
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any> | import("vue").DefineComponent<import("vue").ExtractPropTypes<{
value: {
type: import("vue").PropType<string | null | undefined>;
default: undefined;
};
opcoes: {
type: import("vue").PropType<{
rotulo: string;
placeholder?: string;
} & {
limiteCaracteres?: number;
formato?: "texto" | "email" | "url" | "telefone" | "cpfCnpj" | "cep";
}>;
required: true;
};
}>, {
attrs: import("vue").Attrs;
emit: ((event: "input", _v: string | null | undefined) => void) & ((event: "update:value", _v: string | null | undefined) => void) & ((event: "change", _v: string | null | undefined) => void) & ((event: "focus") => void) & ((event: "blur") => void);
localValue: import("vue").WritableComputedRef<string | null | undefined, string | null | undefined>;
inputHtmlType: import("vue").ComputedRef<"text" | "email" | "url">;
inputMode: import("vue").ComputedRef<string | undefined>;
onInput: (e: Event) => void;
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
"update:value": (_v: string | null | undefined) => true;
input: (_v: string | null | undefined) => true;
change: (_v: string | null | undefined) => true;
focus: () => true;
blur: () => true;
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
value: {
type: import("vue").PropType<string | null | undefined>;
default: undefined;
};
opcoes: {
type: import("vue").PropType<{
rotulo: string;
placeholder?: string;
} & {
limiteCaracteres?: number;
formato?: "texto" | "email" | "url" | "telefone" | "cpfCnpj" | "cep";
}>;
required: true;
};
}>> & Readonly<{
onInput?: ((_v: string | null | undefined) => any) | undefined;
"onUpdate:value"?: ((_v: string | null | undefined) => any) | undefined;
onChange?: ((_v: string | null | undefined) => any) | undefined;
onFocus?: (() => any) | undefined;
onBlur?: (() => any) | undefined;
}>, {
value: string | null | undefined;
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
opcoesEntrada: (entrada: ComponenteEntrada) => {
rotulo: string;
};
adicionar: () => void;
remover: (idx: number) => void;
emitFechar: () => void;
emitSalvar: () => void;
emitLimpar: () => void;
rotuloDoFiltro: typeof rotuloDoFiltro;
rotuloDoFiltroAtivo: (chave: string) => string;
};
export {};

View file

@ -1,10 +1,11 @@
import type { Plugin } from "vue";
import "./styles/eli-vue-fonts.css";
import "./design-tokens.css";
import { EliBotao } from "./componentes/botao";
import { EliCartao } from "./componentes/cartao";
import { EliBadge } from "./componentes/indicador";
import { EliOlaMundo } from "./componentes/ola_mundo";
export { criarFiltro26 } from "p-comuns";
export { iniciarFiltroDelta } from "p-comuns";
export * from "./componentes/EliEntrada";
export * from "./componentes/EliTabela";
export * from "./tipos";