@celke/kole-react 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +370 -3
  3. package/dist/components/Abas/Abas.d.ts +55 -0
  4. package/dist/components/AcaoLinha/AcaoLinha.d.ts +12 -0
  5. package/dist/components/Acordeao/Acordeao.d.ts +42 -0
  6. package/dist/components/Alerta/Alerta.d.ts +39 -0
  7. package/dist/components/Arquivo/CampoAnexo.d.ts +27 -0
  8. package/dist/components/Arquivo/DialogoArquivo.d.ts +11 -0
  9. package/dist/components/Arquivo/Foto.d.ts +29 -0
  10. package/dist/components/Arquivo/VisualizadorArquivo.d.ts +12 -0
  11. package/dist/components/Avaliacao/Avaliacao.d.ts +30 -0
  12. package/dist/components/Avatar/Avatar.d.ts +12 -0
  13. package/dist/components/Badge/Badge.d.ts +43 -0
  14. package/dist/components/Balao/Balao.d.ts +30 -0
  15. package/dist/components/BoasVindas/BoasVindas.d.ts +19 -0
  16. package/dist/components/Botao/Botao.d.ts +40 -0
  17. package/dist/components/BotaoFechar/BotaoFechar.d.ts +10 -0
  18. package/dist/components/Busca/Busca.d.ts +27 -0
  19. package/dist/components/CabecalhoPagina/CabecalhoPagina.d.ts +21 -0
  20. package/dist/components/Campo/Campo.d.ts +63 -0
  21. package/dist/components/CampoBusca/CampoBusca.d.ts +28 -0
  22. package/dist/components/CampoBusca/CampoCidade.d.ts +25 -0
  23. package/dist/components/CampoDominio/CampoDominio.d.ts +17 -0
  24. package/dist/components/CampoMarcacao/CampoMarcacao.d.ts +13 -0
  25. package/dist/components/CampoMensagem/CampoMensagem.d.ts +31 -0
  26. package/dist/components/CampoSelect/CampoSelect.d.ts +25 -0
  27. package/dist/components/CampoSenha/CampoSenha.d.ts +16 -0
  28. package/dist/components/CampoTextarea/CampoTextarea.d.ts +11 -0
  29. package/dist/components/CampoTexto/CampoTexto.d.ts +63 -0
  30. package/dist/components/Card/Card.d.ts +51 -0
  31. package/dist/components/Carregando/Carregando.d.ts +10 -0
  32. package/dist/components/Carrossel/Carrossel.d.ts +33 -0
  33. package/dist/components/Chip/Chip.d.ts +11 -0
  34. package/dist/components/Citacao/Citacao.d.ts +20 -0
  35. package/dist/components/Confirmacao/Confirmacao.d.ts +35 -0
  36. package/dist/components/Conversa/Conversa.d.ts +21 -0
  37. package/dist/components/Detalhes/Detalhes.d.ts +12 -0
  38. package/dist/components/Dialogo/Dialogo.d.ts +37 -0
  39. package/dist/components/Dialogo/Sobreposicao.d.ts +19 -0
  40. package/dist/components/Dica/Dica.d.ts +15 -0
  41. package/dist/components/Escolha/Escolha.d.ts +14 -0
  42. package/dist/components/Estrutura/Estrutura.d.ts +106 -0
  43. package/dist/components/Filtros/Filtros.d.ts +22 -0
  44. package/dist/components/Form/Form.d.ts +85 -0
  45. package/dist/components/Girador/Girador.d.ts +15 -0
  46. package/dist/components/GrupoBotoes/GrupoBotoes.d.ts +56 -0
  47. package/dist/components/Imagem/Imagem.d.ts +40 -0
  48. package/dist/components/Indicador/Indicador.d.ts +29 -0
  49. package/dist/components/Lista/Lista.d.ts +47 -0
  50. package/dist/components/ListaCards/ListaCards.d.ts +28 -0
  51. package/dist/components/Mensagem/Mensagem.d.ts +40 -0
  52. package/dist/components/MenuSuspenso/MenuSuspenso.d.ts +79 -0
  53. package/dist/components/Paginacao/Paginacao.d.ts +13 -0
  54. package/dist/components/Picklist/Picklist.d.ts +28 -0
  55. package/dist/components/Placa/Placa.d.ts +9 -0
  56. package/dist/components/Preferencias/Preferencias.d.ts +43 -0
  57. package/dist/components/Progresso/Progresso.d.ts +42 -0
  58. package/dist/components/QuadroArrastavel/QuadroArrastavel.d.ts +27 -0
  59. package/dist/components/Recolhivel/Recolhivel.d.ts +14 -0
  60. package/dist/components/Referencias/Referencias.d.ts +24 -0
  61. package/dist/components/Skeleton/Skeleton.d.ts +8 -0
  62. package/dist/components/Status/Status.d.ts +10 -0
  63. package/dist/components/Tabela/Tabela.d.ts +57 -0
  64. package/dist/components/TelaErro/TelaErro.d.ts +25 -0
  65. package/dist/components/TelaLogin/TelaLogin.d.ts +66 -0
  66. package/dist/components/Toast/Toast.d.ts +62 -0
  67. package/dist/components/Trilha/Trilha.d.ts +60 -0
  68. package/dist/components/Vazio/Vazio.d.ts +12 -0
  69. package/dist/css.d.ts +1 -0
  70. package/dist/estilos.css +72 -0
  71. package/dist/fonts/LICENSE +93 -0
  72. package/dist/fonts/inter-cyrillic-ext-wght-normal.woff2 +0 -0
  73. package/dist/fonts/inter-cyrillic-wght-normal.woff2 +0 -0
  74. package/dist/fonts/inter-greek-ext-wght-normal.woff2 +0 -0
  75. package/dist/fonts/inter-greek-wght-normal.woff2 +0 -0
  76. package/dist/fonts/inter-latin-ext-wght-normal.woff2 +0 -0
  77. package/dist/fonts/inter-latin-wght-normal.woff2 +0 -0
  78. package/dist/fonts/inter-vietnamese-wght-normal.woff2 +0 -0
  79. package/dist/index.d.ts +81 -0
  80. package/dist/index.js +6938 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/tailwind.css +82 -0
  83. package/dist/tokens.css +407 -0
  84. package/dist/utils/Icone.d.ts +22 -0
  85. package/dist/utils/anexos.d.ts +20 -0
  86. package/dist/utils/constantes.d.ts +14 -0
  87. package/dist/utils/cx.d.ts +2 -0
  88. package/dist/utils/datas.d.ts +17 -0
  89. package/dist/utils/entidade.d.ts +19 -0
  90. package/dist/utils/jwt.d.ts +11 -0
  91. package/dist/utils/mascara.d.ts +19 -0
  92. package/dist/utils/picklist.d.ts +15 -0
  93. package/dist/utils/portal.d.ts +8 -0
  94. package/dist/utils/senha.d.ts +21 -0
  95. package/dist/utils/severidade.d.ts +7 -0
  96. package/dist/utils/texto.d.ts +28 -0
  97. package/dist/utils/tipos.d.ts +8 -0
  98. package/dist/utils/tiposCampo.d.ts +12 -0
  99. package/dist/utils/useBuscaAssincrona.d.ts +22 -0
  100. package/dist/utils/useCliqueFora.d.ts +3 -0
  101. package/dist/utils/usePosicaoFlutuante.d.ts +13 -0
  102. package/dist/utils/validadores.d.ts +42 -0
  103. package/package.json +91 -6
@@ -0,0 +1,12 @@
1
+ export interface AvatarProps {
2
+ foto?: string;
3
+ /** Nome completo — gera as iniciais quando não há foto. */
4
+ nome?: string;
5
+ iniciais?: string;
6
+ tom?: 'claro' | 'escuro';
7
+ formato?: 'circulo' | 'quadrado';
8
+ /** Tamanho CSS (ex.: `2rem`). */
9
+ tamanho?: string;
10
+ className?: string;
11
+ }
12
+ export declare function Avatar({ foto, nome, iniciais, tom, formato, tamanho, className }: AvatarProps): import("react").JSX.Element;
@@ -0,0 +1,43 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type IconeProp } from '../../utils/Icone.js';
3
+ import type { Severidade } from '../../utils/tipos.js';
4
+ /** Mesmas cores do `Alerta`: severidades + `pri` (azul) e `destaque` (laranja). */
5
+ export type CorBadge = Severidade | 'pri' | 'destaque';
6
+ export interface BadgeProps {
7
+ cor?: CorBadge;
8
+ /**
9
+ * `solido` (padrão) · `suave` = fundo claro · `contorno` = só a borda ·
10
+ * `gradiente` · `inverso` = fundo da superfície com texto colorido (para
11
+ * usar dentro de um botão sólido da mesma cor).
12
+ */
13
+ aparencia?: 'solido' | 'suave' | 'contorno' | 'gradiente' | 'inverso';
14
+ /** `pilula` = cantos totalmente arredondados. */
15
+ formato?: 'padrao' | 'pilula';
16
+ /** `herdar` = acompanha o tamanho do texto em volta (títulos). */
17
+ tamanho?: 'pequeno' | 'medio' | 'herdar';
18
+ icone?: IconeProp;
19
+ /** Texto do badge (ou use `children`). */
20
+ rotulo?: ReactNode;
21
+ children?: ReactNode;
22
+ className?: string;
23
+ }
24
+ /** Etiqueta curta: contagem, rótulo de novidade, categoria. */
25
+ export declare function Badge({ cor, aparencia, formato, tamanho, icone, rotulo, children, className }: BadgeProps): import("react").JSX.Element;
26
+ export interface ComBadgeProps {
27
+ /** Elemento que recebe o badge (avatar, botão, ícone). */
28
+ children: ReactNode;
29
+ /** Contagem ou texto no canto; com `ponto`, é ignorado. */
30
+ conteudo?: ReactNode;
31
+ /** Acima disto vira "N+" (só para números; padrão: 99). */
32
+ max?: number;
33
+ /** Só um ponto (ex.: "online", "não lido"). */
34
+ ponto?: boolean;
35
+ cor?: CorBadge;
36
+ /** Canto do badge (padrão: superior direito). */
37
+ posicao?: 'superior-direita' | 'inferior-direita' | 'superior-esquerda' | 'inferior-esquerda';
38
+ /** Texto para leitor de tela (ex.: "99 mensagens não lidas"). */
39
+ descricao?: string;
40
+ className?: string;
41
+ }
42
+ /** Posiciona um badge (ou ponto) no canto de outro elemento. */
43
+ export declare function ComBadge({ children, conteudo, max, ponto, cor, posicao, descricao, className }: ComBadgeProps): import("react").JSX.Element;
@@ -0,0 +1,30 @@
1
+ import { type ReactNode } from 'react';
2
+ export type PosicaoBalao = 'cima' | 'direita' | 'baixo' | 'esquerda';
3
+ export type CorBalao = 'pri' | 'secundario' | 'ok' | 'warn' | 'err' | 'info' | 'destaque' | 'escuro';
4
+ /** `padrao` · `cabecalho` = só o título na cor · `solido` = balão todo na cor · `suave` = fundo claro da cor. */
5
+ export type AparenciaBalao = 'padrao' | 'cabecalho' | 'solido' | 'suave';
6
+ /**
7
+ * `clique` = abre/fecha no clique; fecha também ao clicar fora ou Esc ·
8
+ * `foco` = fecha no próximo clique em qualquer lugar · `passar` = abre com o
9
+ * mouse em cima ou com o foco do teclado.
10
+ */
11
+ export type GatilhoBalao = 'clique' | 'foco' | 'passar';
12
+ export interface BalaoProps {
13
+ /** O elemento que abre o balão (botão, ícone, avatar…). */
14
+ children: ReactNode;
15
+ titulo?: ReactNode;
16
+ conteudo: ReactNode;
17
+ /** Lado preferido; vira para o oposto se não couber. */
18
+ posicao?: PosicaoBalao;
19
+ cor?: CorBalao;
20
+ aparencia?: AparenciaBalao;
21
+ gatilho?: GatilhoBalao;
22
+ /** Largura máxima (padrão `17rem`). */
23
+ largura?: string;
24
+ className?: string;
25
+ }
26
+ /**
27
+ * Balão com título e conteúdo (popover), ancorado num elemento. Abre no
28
+ * clique, no foco ou ao passar o mouse; nas 4 direções e em cores.
29
+ */
30
+ export declare function Balao({ children, titulo, conteudo, posicao, cor, aparencia, gatilho, largura, className, }: BalaoProps): import("react").JSX.Element;
@@ -0,0 +1,19 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface BoasVindasProps {
3
+ /** Nome completo (a saudação usa primeiro + último). */
4
+ nome: string;
5
+ cargo?: string;
6
+ /** Sigla da unidade (ex.: RH). */
7
+ sigla?: string;
8
+ foto?: string;
9
+ /** Último acesso; sem ele a linha some. */
10
+ ultimoAcesso?: Date | null;
11
+ /** Ações da página inicial (ex.: "Novo cadastro"). */
12
+ children?: ReactNode;
13
+ className?: string;
14
+ }
15
+ /**
16
+ * Cabeçalho de sessão da página inicial: foto, data por extenso, saudação
17
+ * pela hora, cargo · unidade e último acesso. Substitui o `CabecalhoPagina` na home.
18
+ */
19
+ export declare function BoasVindas({ nome, cargo, sigla, foto, ultimoAcesso, children, className }: BoasVindasProps): import("react").JSX.Element;
@@ -0,0 +1,40 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
+ import { type IconeProp } from '../../utils/Icone.js';
3
+ export type SeveridadeBotao = 'pri' | 'secundario' | 'ok' | 'warn' | 'err' | 'info' | 'destaque' | 'escuro';
4
+ /**
5
+ * `solido` · `contorno` · `texto` · `suave` = fundo claro da cor · `gradiente`
6
+ * · `fantasma` = contorno discreto que se preenche no hover.
7
+ */
8
+ export type AparenciaBotao = 'solido' | 'contorno' | 'texto' | 'suave' | 'gradiente' | 'fantasma';
9
+ /** Padrões que um grupo (`GrupoBotoes`) repassa aos botões de dentro. */
10
+ export interface PadroesBotao {
11
+ severidade?: SeveridadeBotao;
12
+ aparencia?: AparenciaBotao;
13
+ formato?: 'pilula' | 'retangulo';
14
+ tamanho?: 'pequeno' | 'medio' | 'grande';
15
+ }
16
+ export declare const PadroesBotaoCtx: import("react").Context<PadroesBotao>;
17
+ export interface BotaoProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
18
+ rotulo?: string;
19
+ icone?: IconeProp;
20
+ posicaoIcone?: 'esquerda' | 'direita';
21
+ severidade?: SeveridadeBotao;
22
+ aparencia?: AparenciaBotao;
23
+ /** Mostra spinner e recusa o clique (o botão segue focável). */
24
+ carregando?: boolean;
25
+ /** Ocupa 100% da largura. */
26
+ bloco?: boolean;
27
+ /** `pilula` (padrão) · `retangulo` = cantos levemente arredondados. */
28
+ formato?: 'pilula' | 'retangulo';
29
+ tamanho?: 'pequeno' | 'medio' | 'grande';
30
+ /** Sombra fixa, ou `elevado` (sombra da cor que sobe no hover). */
31
+ sombra?: 'pequena' | 'media' | 'grande' | 'elevado';
32
+ /** Ícone num segmento mais escuro, colado à borda ("botão com rótulo"). */
33
+ iconeDestacado?: boolean;
34
+ /** Botão de alternância: liga/desliga (vira `aria-pressed`). */
35
+ pressionado?: boolean;
36
+ /** Balão de dica — use em botões só com ícone. */
37
+ dica?: string;
38
+ children?: ReactNode;
39
+ }
40
+ export declare const Botao: import("react").ForwardRefExoticComponent<BotaoProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,10 @@
1
+ import type { ButtonHTMLAttributes } from 'react';
2
+ export interface BotaoFecharProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
3
+ /** `claro` = para fundos escuros. */
4
+ variante?: 'padrao' | 'claro';
5
+ tamanho?: 'pequeno' | 'medio';
6
+ /** Nome para leitor de tela (padrão: "Fechar"). */
7
+ rotulo?: string;
8
+ }
9
+ /** O × de fechar (avisos, diálogos, painéis), com o nome acessível. */
10
+ export declare function BotaoFechar({ variante, tamanho, rotulo, className, type, ...resto }: BotaoFecharProps): import("react").JSX.Element;
@@ -0,0 +1,27 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type IconeProp } from '../../utils/Icone.js';
3
+ export interface ItemBusca {
4
+ rotulo: string;
5
+ rota: string;
6
+ icone?: IconeProp;
7
+ /** Caminho no menu (ex.: "Cadastros › Pessoas"). */
8
+ trilha?: string;
9
+ }
10
+ export interface BuscaProps {
11
+ placeholder?: string;
12
+ /** Mostra spinner no lugar da lupa. */
13
+ ocupado?: boolean;
14
+ /** Itens de menu filtrados pelo termo (seção "Menu" do painel). */
15
+ itensMenu?: ItemBusca[];
16
+ aoNavegar?: (rota: string) => void;
17
+ /** Enter sem item de menu ativo. */
18
+ aoBuscar?: (termo: string) => void;
19
+ aoMudarTermo?: (termo: string) => void;
20
+ /** Ctrl+K / ⌘K foca a busca (padrão: sim). */
21
+ atalho?: boolean;
22
+ /** Resultados do app no painel; marque opções navegáveis com `data-busca-opcao`. */
23
+ children?: ReactNode;
24
+ className?: string;
25
+ }
26
+ /** Busca global da topbar: filtra o menu e hospeda resultados do app. */
27
+ export declare function Busca({ placeholder, ocupado, itensMenu, aoNavegar, aoBuscar, aoMudarTermo, atalho, children, className, }: BuscaProps): import("react").JSX.Element;
@@ -0,0 +1,21 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type IconeProp } from '../../utils/Icone.js';
3
+ import { type ItemTrilha } from '../Trilha/Trilha.js';
4
+ export interface CabecalhoPaginaProps {
5
+ titulo: string;
6
+ icone?: IconeProp;
7
+ /** Linha pequena em caixa alta acima do título. */
8
+ categoria?: string;
9
+ /**
10
+ * Trilha de navegação logo abaixo do título. `true` = caminho automático do
11
+ * menu (via `Estrutura`); lista = automático + estes passos no fim (ex.: o
12
+ * registro aberto).
13
+ */
14
+ trilha?: boolean | ItemTrilha[];
15
+ /** Botões à direita do título. */
16
+ acoes?: ReactNode;
17
+ /** Texto descritivo abaixo. */
18
+ children?: ReactNode;
19
+ className?: string;
20
+ }
21
+ export declare function CabecalhoPagina({ titulo, icone, categoria, trilha, acoes, children, className }: CabecalhoPaginaProps): import("react").JSX.Element;
@@ -0,0 +1,63 @@
1
+ import { type ReactNode } from 'react';
2
+ /** Props comuns a todo campo de formulário. */
3
+ export interface CampoBaseProps {
4
+ rotulo?: string;
5
+ /** Texto de ajuda abaixo do campo. */
6
+ dica?: string;
7
+ /** Mensagem de erro (pinta o campo de vermelho). */
8
+ erro?: string;
9
+ /** Aviso não-bloqueante (âmbar). */
10
+ aviso?: string;
11
+ obrigatorio?: boolean;
12
+ /** `campo` = rótulo em cima · `inline` = pílula com rótulo dentro (barras de filtro). */
13
+ variante?: 'campo' | 'inline';
14
+ className?: string;
15
+ }
16
+ export interface CampoProps extends CampoBaseProps {
17
+ htmlFor?: string;
18
+ msgId?: string;
19
+ children: ReactNode;
20
+ }
21
+ /**
22
+ * Contador de "tentativas de salvar" do formulário em volta. O `Form` o
23
+ * incrementa a cada envio; acima de zero, todo campo revela sua pendência
24
+ * mesmo sem ter sido tocado.
25
+ */
26
+ export declare const RevelarCamposCtx: import("react").Context<number>;
27
+ export declare const MSG_OBRIGATORIO = "Campo obrigat\u00F3rio";
28
+ interface OpcoesValidacao {
29
+ valor: string;
30
+ /** Regra de formato do campo: mensagem, ou `''` se válido. */
31
+ validar?: (valor: string) => string;
32
+ obrigatorio?: boolean;
33
+ /** Erro vindo do app — sempre vence. */
34
+ erro?: string;
35
+ aviso?: string;
36
+ }
37
+ /**
38
+ * Regra de exibição de pendência:
39
+ * - o erro só aparece ao SAIR do campo depois de o usuário mexer nele, ou
40
+ * quando o formulário tenta salvar;
41
+ * - um valor recebido de fora (carga de registro) que não atende ao formato
42
+ * NÃO é reformatado nem recusado: vira aviso âmbar não bloqueante.
43
+ */
44
+ export declare function useValidacaoCampo({ valor, validar, obrigatorio, erro, aviso }: OpcoesValidacao): {
45
+ erro: string | undefined;
46
+ aviso: string | undefined;
47
+ /** Chame no evento de digitação/gesto real do usuário. */
48
+ aoInteragir: () => void;
49
+ /** Chame no blur do controle. */
50
+ aoSair: () => false | void;
51
+ };
52
+ /** Ids estáveis do campo e da mensagem associada (aria-describedby). */
53
+ export declare function useCampoIds(idExterno?: string): {
54
+ id: string;
55
+ msgId: string;
56
+ };
57
+ export declare function descricaoDe(p: Pick<CampoBaseProps, 'erro' | 'aviso' | 'dica'>, msgId: string): string | undefined;
58
+ /**
59
+ * Moldura de campo: rótulo, asterisco de obrigatório, erro/aviso/dica.
60
+ * Envolve qualquer controle — os campos da biblioteca já a usam por dentro.
61
+ */
62
+ export declare function Campo({ rotulo, dica, erro, aviso, obrigatorio, variante, className, htmlFor, msgId, children, }: CampoProps): import("react").JSX.Element;
63
+ export {};
@@ -0,0 +1,28 @@
1
+ import { type Key } from 'react';
2
+ import { type CampoBaseProps } from '../Campo/Campo.js';
3
+ export interface CampoBuscaProps<T> extends CampoBaseProps {
4
+ /** A busca do módulo: termo → registros. */
5
+ buscar: (termo: string) => Promise<T[]>;
6
+ /** Texto do registro (no campo e em cada linha do painel). */
7
+ paraRotulo: (item: T) => string;
8
+ /** Linha secundária opcional no painel (ex.: CPF, lotação). */
9
+ paraDetalhe?: (item: T) => string | undefined;
10
+ /** Chave de cada resultado (padrão: `item.id` ou o rótulo). */
11
+ chave?: (item: T) => Key;
12
+ /** O REGISTRO escolhido — texto digitado sem escolha não é valor. */
13
+ valor?: T | null;
14
+ aoMudar?: (valor: T | null) => void;
15
+ /** Mínimo de caracteres para buscar (padrão: 1). */
16
+ minimo?: number;
17
+ atraso?: number;
18
+ placeholder?: string;
19
+ disabled?: boolean;
20
+ id?: string;
21
+ /** Mensagem quando a busca não acha nada. */
22
+ vazioTexto?: string;
23
+ }
24
+ /**
25
+ * Autocompletar com busca no servidor: o jeito canônico de buscar e vincular
26
+ * uma entidade (pessoa, servidor, fornecedor…) grande demais para carregar inteira.
27
+ */
28
+ export declare function CampoBusca<T>({ rotulo, dica, erro, aviso, obrigatorio, variante, className, id: idExterno, buscar, paraRotulo, paraDetalhe, chave, valor, aoMudar, minimo, atraso, placeholder, disabled, vazioTexto, }: CampoBuscaProps<T>): import("react").JSX.Element;
@@ -0,0 +1,25 @@
1
+ import type { CampoBaseProps } from '../Campo/Campo.js';
2
+ export interface Municipio {
3
+ id: string | number;
4
+ nome: string;
5
+ }
6
+ export interface CampoCidadeProps extends CampoBaseProps {
7
+ /** UF que filtra os municípios (`''` = nenhuma). Trocar de UF limpa a cidade. */
8
+ uf: string;
9
+ /**
10
+ * Municípios da UF. Sem esta função o campo vira texto livre
11
+ * (continua utilizável, só não sugere).
12
+ */
13
+ buscarPorUf?: (uf: string) => Promise<Municipio[]>;
14
+ /** O município escolhido — ou o texto digitado, no modo texto livre. */
15
+ valor?: Municipio | string | null;
16
+ aoMudar?: (valor: Municipio | string | null) => void;
17
+ placeholder?: string;
18
+ disabled?: boolean;
19
+ id?: string;
20
+ }
21
+ /**
22
+ * Município filtrado pela UF, com a cascata UF → cidade embutida: quando a
23
+ * UF muda, a cidade da UF anterior é limpa pelo próprio campo.
24
+ */
25
+ export declare function CampoCidade({ uf, buscarPorUf, valor, aoMudar, placeholder, disabled, ...p }: CampoCidadeProps): import("react").JSX.Element;
@@ -0,0 +1,17 @@
1
+ import { type CampoSelectMultiploProps, type CampoSelectProps } from '../CampoSelect/CampoSelect.js';
2
+ type SemOpcoes<P> = Omit<P, 'opcoes'>;
3
+ export interface CampoUfProps extends SemOpcoes<CampoSelectProps<string>> {
4
+ /** `sigla` = "PR" · `completo` = "PR — Paraná" (padrão). */
5
+ exibicao?: 'sigla' | 'completo';
6
+ }
7
+ /** UF (estado) a partir de `ESTADOS`; o valor é a sigla. */
8
+ export declare function CampoUf({ exibicao, comBusca, placeholder, ...p }: CampoUfProps): import("react").JSX.Element;
9
+ export interface CampoUfMultiploProps extends SemOpcoes<CampoSelectMultiploProps<string>> {
10
+ exibicao?: 'sigla' | 'completo';
11
+ }
12
+ /** Várias UFs; o valor é a lista de siglas. */
13
+ export declare function CampoUfMultiplo({ exibicao, comBusca, placeholder, ...p }: CampoUfMultiploProps): import("react").JSX.Element;
14
+ export type CampoTipoPessoaProps = SemOpcoes<CampoSelectProps<'F' | 'J'>>;
15
+ /** Pessoa física (`F`) ou jurídica (`J`). */
16
+ export declare function CampoTipoPessoa({ placeholder, ...p }: CampoTipoPessoaProps): import("react").JSX.Element;
17
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { InputHTMLAttributes } from 'react';
2
+ export interface CampoMarcacaoProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'checked' | 'defaultChecked' | 'className' | 'value'> {
3
+ rotulo?: string;
4
+ valor?: boolean;
5
+ aoMudar?: (valor: boolean) => void;
6
+ /** `caixa` = checkbox · `chave` = interruptor (switch). */
7
+ aparencia?: 'caixa' | 'chave';
8
+ dica?: string;
9
+ erro?: string;
10
+ obrigatorio?: boolean;
11
+ className?: string;
12
+ }
13
+ export declare function CampoMarcacao({ rotulo, valor, aoMudar, aparencia, dica, erro, obrigatorio, className, id: idExterno, onChange, ...resto }: CampoMarcacaoProps): import("react").JSX.Element;
@@ -0,0 +1,31 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface CampoMensagemProps {
3
+ valor: string;
4
+ aoMudar: (valor: string) => void;
5
+ /** Recebe o texto sem espaços nas pontas; nunca é chamado com texto vazio. */
6
+ aoEnviar: (texto: string) => void;
7
+ /** Uma resposta está chegando: o Enviar vira Parar. */
8
+ gerando?: boolean;
9
+ /** Chamado pelo botão Parar (sem ele, o Parar fica desabilitado). */
10
+ aoParar?: () => void;
11
+ desabilitado?: boolean;
12
+ placeholder?: string;
13
+ /** Limite de caracteres; o contador aparece perto do limite. */
14
+ maxCaracteres?: number;
15
+ /** Até quantas linhas o campo cresce antes de rolar. */
16
+ linhasMaximas?: number;
17
+ autoFocus?: boolean;
18
+ /** Botões próprios do app à esquerda do Enviar (anexar, escolher documentos…). */
19
+ acoesExtras?: ReactNode;
20
+ /** Rótulo do campo para leitores de tela. */
21
+ rotulo?: string;
22
+ rotuloEnviar?: string;
23
+ rotuloParar?: string;
24
+ id?: string;
25
+ className?: string;
26
+ }
27
+ /**
28
+ * Campo de envio de mensagem: Enter envia, Shift+Enter quebra a linha. Cresce
29
+ * com o texto até `linhasMaximas` e depois rola.
30
+ */
31
+ export declare const CampoMensagem: import("react").ForwardRefExoticComponent<CampoMensagemProps & import("react").RefAttributes<HTMLTextAreaElement>>;
@@ -0,0 +1,25 @@
1
+ import type { Opcao } from '../../utils/tipos.js';
2
+ import { type CampoBaseProps } from '../Campo/Campo.js';
3
+ interface BaseSelectProps<V> extends CampoBaseProps {
4
+ opcoes: Opcao<V>[];
5
+ placeholder?: string;
6
+ /** Digitar filtra as opções. */
7
+ comBusca?: boolean;
8
+ /** Mostra o "×" para limpar quando há valor. */
9
+ botaoLimpar?: boolean;
10
+ disabled?: boolean;
11
+ id?: string;
12
+ }
13
+ export interface CampoSelectProps<V = string> extends BaseSelectProps<V> {
14
+ valor?: V | null;
15
+ aoMudar?: (valor: V | null) => void;
16
+ }
17
+ export interface CampoSelectMultiploProps<V = string> extends BaseSelectProps<V> {
18
+ valor?: V[];
19
+ aoMudar?: (valor: V[]) => void;
20
+ }
21
+ /** Select de opção única. */
22
+ export declare function CampoSelect<V = string>({ valor, aoMudar, ...p }: CampoSelectProps<V>): import("react").JSX.Element;
23
+ /** Select de várias opções (com caixas de marcação). */
24
+ export declare function CampoSelectMultiplo<V = string>({ valor, aoMudar, ...p }: CampoSelectMultiploProps<V>): import("react").JSX.Element;
25
+ export {};
@@ -0,0 +1,16 @@
1
+ import { type PoliticaSenha } from '../../utils/senha.js';
2
+ import { type CampoTextoProps } from '../CampoTexto/CampoTexto.js';
3
+ export interface CampoSenhaProps extends Omit<CampoTextoProps, 'type' | 'mascara' | 'maiuscula' | 'prefixo' | 'sufixo'> {
4
+ /** Botão de olho para mostrar/ocultar (padrão: sim). */
5
+ revelavel?: boolean;
6
+ /**
7
+ * Liga o medidor de força E a validação pela `politica`. Desligado no
8
+ * login — não se cobra política de uma senha que já existe.
9
+ */
10
+ forca?: boolean;
11
+ politica?: PoliticaSenha;
12
+ /** `new-password` em cadastro/troca de senha (padrão: `current-password`). */
13
+ autoComplete?: string;
14
+ }
15
+ /** Senha com olho, aviso de Caps Lock e medidor de força opcional. */
16
+ export declare function CampoSenha({ revelavel, forca, politica, autoComplete, className, valor, validar, aviso, onKeyDown, onKeyUp, disabled, ...p }: CampoSenhaProps): import("react").JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { type TextareaHTMLAttributes } from 'react';
2
+ import { type CampoBaseProps } from '../Campo/Campo.js';
3
+ type TextareaNativo = Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'className'>;
4
+ export interface CampoTextareaProps extends Omit<CampoBaseProps, 'variante'>, TextareaNativo {
5
+ valor?: string;
6
+ aoMudar?: (valor: string) => void;
7
+ /** Com `maxLength`, mostra o contador `n/máx` no canto. */
8
+ contador?: boolean;
9
+ }
10
+ export declare const CampoTextarea: import("react").ForwardRefExoticComponent<CampoTextareaProps & import("react").RefAttributes<HTMLTextAreaElement>>;
11
+ export {};
@@ -0,0 +1,63 @@
1
+ import { type InputHTMLAttributes, type ReactNode } from 'react';
2
+ import { type IconeProp } from '../../utils/Icone.js';
3
+ import { type Mascara } from '../../utils/mascara.js';
4
+ import { type CampoBaseProps } from '../Campo/Campo.js';
5
+ type InputNativo = Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'className'>;
6
+ export interface CampoTextoProps extends CampoBaseProps, InputNativo {
7
+ valor?: string;
8
+ aoMudar?: (valor: string) => void;
9
+ /** Ícone à esquerda, dentro do campo. */
10
+ icone?: IconeProp;
11
+ /** Máscara de digitação (`0` dígito, `A` letra, `S` alfanumérico). */
12
+ mascara?: Mascara;
13
+ /** Converte o texto para CAIXA ALTA enquanto digita. */
14
+ maiuscula?: boolean;
15
+ /** Texto fixo antes do valor (ex.: "R$"). */
16
+ prefixo?: ReactNode;
17
+ /** Conteúdo após o valor (ex.: botão de lupa). */
18
+ sufixo?: ReactNode;
19
+ /**
20
+ * Regra de formato: devolve a mensagem, ou `''` se válido. O erro aparece
21
+ * ao sair do campo depois de digitar (ou ao salvar o `Form`).
22
+ */
23
+ validar?: (valor: string) => string;
24
+ }
25
+ export declare const CampoTexto: import("react").ForwardRefExoticComponent<CampoTextoProps & import("react").RefAttributes<HTMLInputElement>>;
26
+ type Preset = Omit<CampoTextoProps, 'mascara'>;
27
+ export declare const CampoCpf: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
28
+ export declare const CampoCnpj: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
29
+ /** CPF ou CNPJ: a máscara muda pelo número de dígitos. */
30
+ export declare const CampoCpfCnpj: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
31
+ export declare const CampoCep: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
32
+ export declare const CampoPlaca: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
33
+ export declare const CampoEmail: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
34
+ /** RENAVAM: 9 a 11 dígitos. */
35
+ export declare const CampoRenavam: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
36
+ /** Chassi (VIN): 17 caracteres, sem I, O e Q. */
37
+ export declare const CampoChassi: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
38
+ /** CNH com dígitos verificadores do DENATRAN. */
39
+ export declare const CampoCnh: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
40
+ /** IMEI com verificação de Luhn. */
41
+ export declare const CampoImei: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
42
+ export interface CampoTelefoneProps extends Preset {
43
+ /** Restringe a fixo (10 dígitos) ou celular (11). Sem `tipo`, aceita os dois. */
44
+ tipo?: 'fixo' | 'celular';
45
+ }
46
+ export declare const CampoTelefone: import("react").ForwardRefExoticComponent<CampoTelefoneProps & import("react").RefAttributes<HTMLInputElement>>;
47
+ /** Data no formato ISO (`AAAA-MM-DD`), com o seletor nativo do navegador. */
48
+ export declare const CampoData: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
49
+ /** Hora `HH:MM`. */
50
+ export declare const CampoHora: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
51
+ /** Data e hora `AAAA-MM-DDTHH:MM`. */
52
+ export declare const CampoDataHora: import("react").ForwardRefExoticComponent<Preset & import("react").RefAttributes<HTMLInputElement>>;
53
+ /** Valor em reais: digita-se da direita (centavos primeiro), como no caixa. */
54
+ export declare const CampoMoeda: import("react").ForwardRefExoticComponent<Omit<CampoTextoProps, "valor" | "aoMudar" | "mascara"> & {
55
+ valor?: number | null;
56
+ aoMudar?: (valor: number | null) => void;
57
+ } & import("react").RefAttributes<HTMLInputElement>>;
58
+ /** Número inteiro (só dígitos). */
59
+ export declare const CampoInteiro: import("react").ForwardRefExoticComponent<Omit<CampoTextoProps, "valor" | "aoMudar" | "mascara"> & {
60
+ valor?: number | null;
61
+ aoMudar?: (valor: number | null) => void;
62
+ } & import("react").RefAttributes<HTMLInputElement>>;
63
+ export {};
@@ -0,0 +1,51 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ import type { Severidade } from '../../utils/tipos.js';
3
+ /** Mesmas cores do `Alerta`/`Badge`. */
4
+ export type CorCard = Severidade | 'pri' | 'destaque';
5
+ export interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onClick' | 'title'> {
6
+ /** Capa que sangra até a borda (imagem, mapa…). */
7
+ midia?: ReactNode;
8
+ /**
9
+ * Onde fica a mídia: `topo` (padrão) · `base` · `esquerda`/`direita`
10
+ * (card horizontal) · `fundo` (texto sobre a imagem, com véu escuro).
11
+ */
12
+ posicaoMidia?: 'topo' | 'base' | 'esquerda' | 'direita' | 'fundo';
13
+ /** Título do cabeçalho (com linha embaixo). */
14
+ titulo?: ReactNode;
15
+ subtitulo?: ReactNode;
16
+ /** Conteúdo à direita do título (botões, badge). */
17
+ ferramentas?: ReactNode;
18
+ /** Botão de recolher/expandir o corpo no cabeçalho. */
19
+ recolhivel?: boolean;
20
+ /** Começa recolhido (com `recolhivel`). */
21
+ recolhidoInicial?: boolean;
22
+ /** Botão de fechar no cabeçalho: o card sai da tela. */
23
+ dispensavel?: boolean;
24
+ aoFechar?: () => void;
25
+ /** Botão que abre o card em tela cheia (Esc volta). */
26
+ telaCheia?: boolean;
27
+ /** Ações flutuantes no canto superior direito (aparecem no hover). */
28
+ acoes?: ReactNode;
29
+ rodape?: ReactNode;
30
+ /** Fundo na cor (texto claro/escuro conforme o contraste). */
31
+ cor?: CorCard;
32
+ /** Borda na cor, fundo normal. */
33
+ borda?: CorCard;
34
+ alinhamento?: 'esquerda' | 'centro' | 'direita';
35
+ /** Corpo sem espaçamento interno (listas, tabelas, imagem inteira). */
36
+ corpoSemEspaco?: boolean;
37
+ /**
38
+ * Painel de leitura que COBRE o card ao passar o mouse ou focar (ex.: algumas
39
+ * linhas de `<Detalhes>`). Enriquecimento rápido, não substitui a ficha.
40
+ */
41
+ detalhes?: ReactNode;
42
+ /** Torna o card inteiro clicável (role=button + Enter/Espaço). */
43
+ aoClicar?: () => void;
44
+ children?: ReactNode;
45
+ }
46
+ export declare function Card({ midia, posicaoMidia, titulo, subtitulo, ferramentas, recolhivel, recolhidoInicial, dispensavel, aoFechar, telaCheia, acoes, rodape, cor, borda, alinhamento, corpoSemEspaco, detalhes, aoClicar, children, className, ...resto }: CardProps): import("react").JSX.Element | null;
47
+ /** Cards colados lado a lado, com a mesma altura (vira coluna em tela estreita). */
48
+ export declare function GrupoCards({ children, className }: {
49
+ children: ReactNode;
50
+ className?: string;
51
+ }): import("react").JSX.Element;
@@ -0,0 +1,10 @@
1
+ export interface CarregandoProps {
2
+ mensagem?: string;
3
+ /** Imagem da marca (ex.: logo) no lugar do anel. */
4
+ logo?: string;
5
+ /** Cobre a página inteira com máscara e bloqueia interação. */
6
+ bloqueante?: boolean;
7
+ className?: string;
8
+ }
9
+ /** Indicador de espera de seção/página. Para listas, prefira Skeleton. */
10
+ export declare function Carregando({ mensagem, logo, bloqueante, className }: CarregandoProps): import("react").JSX.Element;
@@ -0,0 +1,33 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface SlideCarrossel {
3
+ imagem: string;
4
+ alt: string;
5
+ titulo?: ReactNode;
6
+ descricao?: ReactNode;
7
+ /** Tempo deste slide, em ms (sobrepõe o `intervalo` do carrossel). */
8
+ intervalo?: number;
9
+ }
10
+ export interface CarrosselProps {
11
+ slides: SlideCarrossel[];
12
+ /** Nome do carrossel para leitor de tela. */
13
+ rotulo: string;
14
+ /** Avança sozinho. Desligado para quem prefere menos movimento. */
15
+ automatico?: boolean;
16
+ /** Tempo de cada slide, em ms. */
17
+ intervalo?: number;
18
+ /** Setas de anterior/próximo. */
19
+ controles?: boolean;
20
+ /** Tracinhos que levam a cada slide. */
21
+ indicadores?: boolean;
22
+ /** `deslizar` (padrão) ou `esmaecer`. */
23
+ transicao?: 'deslizar' | 'esmaecer';
24
+ /** Controles e legendas escuros, para imagens claras. */
25
+ escuro?: boolean;
26
+ /** Arrastar para os lados no toque/mouse troca o slide. */
27
+ arrastar?: boolean;
28
+ /** Proporção da área (ex.: `'16 / 9'`). */
29
+ proporcao?: string;
30
+ className?: string;
31
+ }
32
+ /** Carrossel de imagens com legendas, setas, indicadores e avanço automático. */
33
+ export declare function Carrossel({ slides, rotulo, automatico, intervalo, controles, indicadores, transicao, escuro, arrastar, proporcao, className, }: CarrosselProps): import("react").JSX.Element;
@@ -0,0 +1,11 @@
1
+ export interface ChipProps {
2
+ rotulo: string;
3
+ /** Nome do que está etiquetado (ex.: "Protocolo" → PROTOCOLO: 123). */
4
+ campo?: string;
5
+ /** Mostra o "×" e dispara `aoRemover`. */
6
+ aoRemover?: () => void;
7
+ /** `false` tira o "×" da ordem do Tab (chips dentro de controles compostos). */
8
+ focavel?: boolean;
9
+ className?: string;
10
+ }
11
+ export declare function Chip({ rotulo, campo, aoRemover, focavel, className }: ChipProps): import("react").JSX.Element;