@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,21 @@
1
+ /** Política de senha: o app declara só o que muda sobre `POLITICA_PADRAO`. */
2
+ export interface PoliticaSenha {
3
+ minimo: number;
4
+ exigirMinuscula?: boolean;
5
+ exigirMaiuscula?: boolean;
6
+ exigirDigito?: boolean;
7
+ exigirSimbolo?: boolean;
8
+ }
9
+ export type NivelForcaSenha = 'vazia' | 'fraca' | 'media' | 'forte';
10
+ export interface ForcaSenha {
11
+ /** 0 (vazia) a 4. Abaixo do mínimo fica preso em 1. */
12
+ score: number;
13
+ nivel: NivelForcaSenha;
14
+ }
15
+ /** Padrão da biblioteca: só o tamanho. */
16
+ export declare const POLITICA_PADRAO: PoliticaSenha;
17
+ /** Primeira regra violada (tamanho → minúscula → maiúscula → dígito → símbolo), ou `''`. */
18
+ export declare function validarSenha(senha: string, politica?: PoliticaSenha): string;
19
+ /** Heurística barata: +1 por classe de caractere, +1 com `minimo + 4` de tamanho. */
20
+ export declare function forcaSenha(senha: string, politica?: PoliticaSenha): ForcaSenha;
21
+ export declare function senhasIguais(a: string, b: string): boolean;
@@ -0,0 +1,7 @@
1
+ /** Fonte única de severidades; cada componente usa um recorte dela. */
2
+ export declare const SEVERIDADES: readonly ["pri", "ok", "warn", "err", "info", "neutral"];
3
+ export type SeveridadeCompleta = (typeof SEVERIDADES)[number];
4
+ /** Cor SÓLIDA da severidade (`var(--token)`) — para filete, tile ou marcador fora de um selo. */
5
+ export declare function severidadeCor(sev: SeveridadeCompleta): string;
6
+ /** O texto é um dos nomes de severidade? */
7
+ export declare function ehSeveridade(valor: string): valor is SeveridadeCompleta;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Texto e número: listas e valores por extenso (documentos), leitura de
3
+ * caminho, formatação, saudação, iniciais, normalização para busca.
4
+ */
5
+ /** `['A']` → `A` · `['A','B']` → `A e B` · `['A','B','C']` → `A, B e C`. */
6
+ export declare function listaPorExtenso(itens: readonly string[]): string;
7
+ /** Inteiro por extenso (trunca decimais): `1500` → `mil e quinhentos`. */
8
+ export declare function numeroPorExtenso(num: number): string;
9
+ /** Valor em reais por extenso: `1500.5` → `mil e quinhentos reais e cinquenta centavos`. */
10
+ export declare function valorMonetarioPorExtenso(valor: number): string;
11
+ /** Lê um caminho com ponto (`a.b.c`); `undefined` se algum trecho faltar. */
12
+ export declare function lerCampo(obj: unknown, caminho: string): unknown;
13
+ /** `1243` → `1.243` · compacto: `12400` → `12,4 mil` (deixe o valor cheio no `title`). */
14
+ export declare function formatarNumero(valor: number, opcoes?: {
15
+ compacto?: boolean;
16
+ }): string;
17
+ /** 5–11h Bom dia · 12–17h Boa tarde · demais Boa noite. */
18
+ export declare function saudacaoPorHora(agora?: Date): string;
19
+ /** Primeira letra das duas primeiras palavras: `Gabrielly Ribeiro da Silva` → `GR`. */
20
+ export declare function iniciais(nome: string): string;
21
+ /** Sem acento e em minúsculas — a comparação de toda busca/filtro. */
22
+ export declare function normalizar(s: string): string;
23
+ /** Formata CPF (até 11 dígitos) ou CNPJ (12 a 14) enquanto digita. */
24
+ export declare function formatCpfCnpj(v: string): string;
25
+ /** Nome em caixa de título (pt-BR): `GABRIELLY RIBEIRO` → `Gabrielly Ribeiro`. */
26
+ export declare function nomeProprio(valor: string): string;
27
+ /** Primeiro + último nome: `GABRIELLY RIBEIRO DA SILVA` → `Gabrielly Silva`. */
28
+ export declare function nomeCurto(valor: string): string;
@@ -0,0 +1,8 @@
1
+ /** Severidade de situação (selo, alerta, toast). */
2
+ export type Severidade = 'ok' | 'info' | 'warn' | 'err' | 'neutral';
3
+ /** Opção de select/escolha. */
4
+ export interface Opcao<V = string> {
5
+ valor: V;
6
+ rotulo: string;
7
+ desabilitada?: boolean;
8
+ }
@@ -0,0 +1,12 @@
1
+ import { type Mascara } from './mascara.js';
2
+ import { type TipoDeCampo } from './validadores.js';
3
+ /** Descritor de um tipo de campo: máscara, placeholder, validação e caixa alta. */
4
+ export interface MetaTipoCampo {
5
+ mascara?: Mascara;
6
+ placeholder?: string;
7
+ validar: (valor: string) => string;
8
+ /** `true` = sempre maiúscula (placa) · `false` = nunca (e-mail). */
9
+ caixaAlta?: boolean;
10
+ }
11
+ /** Fonte única de máscara/placeholder/validação de cada tipo de campo. */
12
+ export declare const TIPOS_CAMPO: Record<TipoDeCampo, MetaTipoCampo>;
@@ -0,0 +1,22 @@
1
+ /** Espera padrão entre a última tecla e a busca (ms). */
2
+ export declare const BUSCA_ATRASO_MS = 300;
3
+ export interface OpcoesBuscaAssincrona<T> {
4
+ /** A busca é do módulo: termo → registros. */
5
+ buscar: (termo: string) => Promise<T[]>;
6
+ /** Só busca enquanto `true` (ex.: painel aberto). Ao ligar, busca na hora, sem espera. */
7
+ ativo?: boolean;
8
+ /** Mínimo de caracteres; abaixo dele limpa sem chamar a API. */
9
+ minimo?: number;
10
+ atraso?: number;
11
+ }
12
+ /**
13
+ * Busca remota com espera de digitação e descarte de resposta velha: só a
14
+ * requisição MAIS RECENTE escreve o resultado ("ab" que volta depois de
15
+ * "abc" é ignorada). Erro da API vira lista vazia.
16
+ */
17
+ export declare function useBuscaAssincrona<T>({ buscar, ativo, minimo, atraso }: OpcoesBuscaAssincrona<T>): {
18
+ termo: string;
19
+ setTermo: import("react").Dispatch<import("react").SetStateAction<string>>;
20
+ resultados: T[];
21
+ carregando: boolean;
22
+ };
@@ -0,0 +1,3 @@
1
+ import { type RefObject } from 'react';
2
+ /** Chama `aoClicarFora` em pointerdown fora de TODOS os elementos dados. */
3
+ export declare function useCliqueFora(refs: Array<RefObject<HTMLElement | null>>, ativo: boolean, aoClicarFora: () => void): void;
@@ -0,0 +1,13 @@
1
+ import { type RefObject } from 'react';
2
+ export interface PosicaoFlutuante {
3
+ top: number;
4
+ left: number;
5
+ width: number;
6
+ /** true quando abriu para CIMA por falta de espaço embaixo */
7
+ acima: boolean;
8
+ }
9
+ /**
10
+ * Posição `fixed` de um painel flutuante ancorado num elemento (select,
11
+ * dica). Recalcula em scroll (de qualquer container) e resize.
12
+ */
13
+ export declare function usePosicaoFlutuante(ancora: RefObject<HTMLElement | null>, aberto: boolean, alturaEstimada?: number, espaco?: number): PosicaoFlutuante | null;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Validadores de dados brasileiros: predicados `is*` + o despachante `validar()`.
3
+ * Lógica pura, sem React. A máscara de cada tipo mora em `tiposCampo.ts`.
4
+ */
5
+ export declare const TIPOS_DE_CAMPO: readonly ["cpf", "cnpj", "cpfCnpj", "email", "cep", "telefone", "placa", "renavam", "chassi", "cnh", "imei", "hora", "data", "dataHora"];
6
+ export type TipoDeCampo = (typeof TIPOS_DE_CAMPO)[number];
7
+ /** CPF com os dois dígitos verificadores; rejeita sequências repetidas. */
8
+ export declare function isCpf(v: string): boolean;
9
+ /** CNPJ com os dois dígitos verificadores; rejeita sequências repetidas. */
10
+ export declare function isCnpj(v: string): boolean;
11
+ /** Mais de 11 dígitos = CNPJ; senão, CPF. */
12
+ export declare function isCpfCnpj(v: string): boolean;
13
+ export declare function isEmail(v: string): boolean;
14
+ export declare function isCep(v: string): boolean;
15
+ /** Fixo (10 dígitos) ou celular (11), sempre com DDD. */
16
+ export declare function isTelefone(v: string): boolean;
17
+ /** Placa antiga `AAA0000` ou Mercosul `AAA0A00` (aceita hífen). */
18
+ export declare function isPlaca(v: string): boolean;
19
+ /** RENAVAM: por enquanto só o tamanho (9 a 11 dígitos); o dígito verificador fica para depois. */
20
+ export declare function isRenavam(v: string): boolean;
21
+ /** Chassi (VIN): 17 caracteres alfanuméricos, sem I, O e Q. */
22
+ export declare function isChassi(v: string): boolean;
23
+ /** CNH: 9 dígitos + 2 verificadores (algoritmo do DENATRAN). */
24
+ export declare function isCnh(v: string): boolean;
25
+ /** IMEI: 15 dígitos validados por Luhn; rejeita sequências repetidas. */
26
+ export declare function isImei(v: string): boolean;
27
+ /** `HH:mm` entre 00:00 e 23:59. */
28
+ export declare function isHora(v: string): boolean;
29
+ /** `dd/mm/aaaa` existente no calendário (31/02 é recusado). */
30
+ export declare function isData(v: string): boolean;
31
+ /** `dd/mm/aaaa HH:mm`. */
32
+ export declare function isDataHora(v: string): boolean;
33
+ /**
34
+ * Telefone, opcionalmente restrito a um formato. Vazio é válido
35
+ * (obrigatoriedade é assunto do campo, não do validador).
36
+ */
37
+ export declare function validarTelefone(v: string, tipo?: 'fixo' | 'celular'): string;
38
+ /**
39
+ * Mensagem de validação do tipo, ou `''` quando vazio ou válido.
40
+ * Separa "incompleto" (ainda digitando) de "inválido" (errado).
41
+ */
42
+ export declare function validar(tipo: TipoDeCampo, valor: string): string;
package/package.json CHANGED
@@ -1,6 +1,91 @@
1
- {
2
- "name": "@celke/kole-react",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
1
+ {
2
+ "name": "@celke/kole-react",
3
+ "version": "0.2.0",
4
+ "description": "Biblioteca de componentes React para sistemas administrativos.",
5
+ "license": "MIT",
6
+ "author": "Cesar Szpak",
7
+ "homepage": "https://github.com/celkecursos/kole-react#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/celkecursos/kole-react.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/celkecursos/kole-react/issues"
14
+ },
15
+ "keywords": [
16
+ "react",
17
+ "ui",
18
+ "componentes",
19
+ "design-system",
20
+ "layout",
21
+ "admin",
22
+ "dashboard",
23
+ "formulario",
24
+ "tabela",
25
+ "pt-br",
26
+ "celke"
27
+ ],
28
+ "engines": {
29
+ "node": ">=18"
30
+ },
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "type": "module",
35
+ "sideEffects": [
36
+ "**/*.css"
37
+ ],
38
+ "files": [
39
+ "dist"
40
+ ],
41
+ "main": "./dist/index.js",
42
+ "module": "./dist/index.js",
43
+ "types": "./dist/index.d.ts",
44
+ "exports": {
45
+ ".": {
46
+ "types": "./dist/index.d.ts",
47
+ "default": "./dist/index.js"
48
+ },
49
+ "./estilos.css": {
50
+ "types": "./dist/css.d.ts",
51
+ "default": "./dist/estilos.css"
52
+ },
53
+ "./tokens.css": {
54
+ "types": "./dist/css.d.ts",
55
+ "default": "./dist/tokens.css"
56
+ },
57
+ "./tailwind.css": {
58
+ "types": "./dist/css.d.ts",
59
+ "style": "./dist/tailwind.css",
60
+ "default": "./dist/tailwind.css"
61
+ },
62
+ "./package.json": "./package.json"
63
+ },
64
+ "scripts": {
65
+ "dev": "vite",
66
+ "build": "vite build && tsc -p tsconfig.build.json && node scripts/ajustar-tipos.mjs && node scripts/embutir-fonte.mjs",
67
+ "build:demo": "vite build --mode demo",
68
+ "typecheck": "tsc -p tsconfig.json --noEmit",
69
+ "visual": "playwright test",
70
+ "visual:referencia": "playwright test --update-snapshots --project=claro --project=escuro",
71
+ "prepare": "npm run build"
72
+ },
73
+ "peerDependencies": {
74
+ "react": "^18.2.0 || ^19.0.0",
75
+ "react-dom": "^18.2.0 || ^19.0.0"
76
+ },
77
+ "devDependencies": {
78
+ "@fontsource-variable/inter": "^5.2.8",
79
+ "@playwright/test": "^1.64.1",
80
+ "@types/react": "^19.2.0",
81
+ "@types/react-dom": "^19.2.0",
82
+ "@vitejs/plugin-react": "^6.0.0",
83
+ "react": "^19.2.0",
84
+ "react-dom": "^19.2.0",
85
+ "typescript": "~6.0.3",
86
+ "vite": "^8.0.0"
87
+ },
88
+ "dependencies": {
89
+ "lucide-react": "^1.60.0"
90
+ }
91
+ }