@grazziotin/react-components 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -1
- package/package.json +9 -164
- package/.editorconfig +0 -13
- package/.eslintignore +0 -3
- package/.eslintrc.json +0 -16
- package/.prettierrc +0 -6
- package/.vscode/settings.json +0 -18
- package/src/components/Inputs/Input/constants.ts +0 -25
- package/src/components/Inputs/Input/index.tsx +0 -94
- package/src/env.d.ts +0 -16
- package/src/functions/mascaras/index.ts +0 -432
- package/src/hooks/index.ts +0 -60
- package/src/index.tsx +0 -2
- package/src/lib/utils.ts +0 -6
- package/src/styles/sx.ts +0 -148
- package/tailwind.config.js +0 -234
- package/tsconfig.json +0 -37
- package/webpack.config.js +0 -32
|
@@ -1,432 +0,0 @@
|
|
|
1
|
-
interface MascaradorCPFCNPJProps {
|
|
2
|
-
v: string | number
|
|
3
|
-
autoComplete?: boolean
|
|
4
|
-
ignoreCNPJ?: boolean
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Função para formatar um CPF ou CNPJ, adicionando as pontuações adequadas.
|
|
9
|
-
*
|
|
10
|
-
* @param {string} v - O valor do CPF ou CNPJ a ser formatado (como string ou number).
|
|
11
|
-
* @returns {string} O valor formatado com as pontuações de CPF ou CNPJ.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* const cpfCnpjFormatado = mascaradorCPFCNPJ('12345678901'); // Retorna '123.456.789-01'
|
|
15
|
-
* @author Flaviasoz, Nicolasfmc
|
|
16
|
-
* @version 1.6.0
|
|
17
|
-
*/
|
|
18
|
-
export const mascaradorCPFCNPJ = ({
|
|
19
|
-
v,
|
|
20
|
-
autoComplete,
|
|
21
|
-
ignoreCNPJ,
|
|
22
|
-
}: MascaradorCPFCNPJProps): string => {
|
|
23
|
-
const value = v?.toString().replace(/\D/g, '')
|
|
24
|
-
|
|
25
|
-
if (!ignoreCNPJ) {
|
|
26
|
-
// Verifica se é um CPF (até 11 dígitos)
|
|
27
|
-
if (value?.length <= 11) {
|
|
28
|
-
const a = autoComplete ? value?.padStart(11, '0') : value
|
|
29
|
-
return a
|
|
30
|
-
.replace(/(\d{3})(\d)/, '$1.$2')
|
|
31
|
-
.replace(/(\d{3})(\d)/, '$1.$2')
|
|
32
|
-
.replace(/(\d{3})(\d{1,2})$/, '$1-$2')
|
|
33
|
-
} else {
|
|
34
|
-
// Se for um CNPJ
|
|
35
|
-
const a = autoComplete ? value?.padStart(14, '0') : value
|
|
36
|
-
return a
|
|
37
|
-
.replace(/^(\d{2})(\d)/, '$1.$2')
|
|
38
|
-
.replace(/^(\d{2})\.(\d{3})(\d)/, '$1.$2.$3')
|
|
39
|
-
.replace(/\.(\d{3})(\d)/, '.$1/$2')
|
|
40
|
-
.replace(/(\d{4})(\d)/, '$1-$2')
|
|
41
|
-
}
|
|
42
|
-
} else {
|
|
43
|
-
const a = autoComplete ? value?.padStart(11, '0') : value
|
|
44
|
-
return a
|
|
45
|
-
.slice(0, 11)
|
|
46
|
-
.replace(/(\d{3})(\d)/, '$1.$2')
|
|
47
|
-
.replace(/(\d{3})(\d)/, '$1.$2')
|
|
48
|
-
.replace(/(\d{3})(\d{1,2})$/, '$1-$2')
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Função para formatar um número de telefone, adicionando as pontuações adequadas.
|
|
54
|
-
*
|
|
55
|
-
* @param {string | number} v - O número de telefone a ser formatado (como string ou number).
|
|
56
|
-
* @returns {string} O número de telefone formatado com as pontuações adequadas.
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* const telefoneFormatado = mascaradorTelefone('1234567890'); // Retorna '(12) 3456-7890'
|
|
60
|
-
* @author Flaviasoz
|
|
61
|
-
* @version 1.2.0
|
|
62
|
-
*/
|
|
63
|
-
export const mascaradorTelefone = (v: string | number): string => {
|
|
64
|
-
v = v?.toString().replace(/\D/g, '')
|
|
65
|
-
|
|
66
|
-
if (v.length === 8) {
|
|
67
|
-
return v.replace(/(\d{4})(\d{4})/, '$1-$2')
|
|
68
|
-
} else if (v.length === 9) {
|
|
69
|
-
return v.replace(/(\d{5})(\d{4})/, '$1-$2')
|
|
70
|
-
} else if (v.length === 10) {
|
|
71
|
-
return v.replace(/(\d{2})(\d{4})(\d{4})/, '($1) $2-$3')
|
|
72
|
-
} else if (v.length === 11) {
|
|
73
|
-
return v.replace(/(\d{2})(\d{5})(\d{4})/, '($1) $2-$3')
|
|
74
|
-
} else if (v.length === 12) {
|
|
75
|
-
return v.replace(/(\d{2})(\d{2})(\d{4})(\d{4})/, '+$1 ($2) $3-$4')
|
|
76
|
-
} else if (v.length === 13) {
|
|
77
|
-
return v.replace(/(\d{2})(\d{2})(\d{5})(\d{4})/, '+$1 ($2) $3-$4')
|
|
78
|
-
} else {
|
|
79
|
-
return v
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Função para adicionar pontos de separação de milhar em um número.
|
|
85
|
-
*
|
|
86
|
-
* @param {string | number} valor - O valor numérico a ser formatado com pontos de separação de milhar.
|
|
87
|
-
* @returns {string} - O valor formatado com pontos de separação de milhar.
|
|
88
|
-
*
|
|
89
|
-
* @example
|
|
90
|
-
* const numeroFormatado = mascaradorMilhar(1234567); // Retorna '1.234.567'
|
|
91
|
-
* @author Flaviasoz
|
|
92
|
-
* @version 1.0.0
|
|
93
|
-
*/
|
|
94
|
-
export const mascaradorMilhar = (valor: string | number): string => {
|
|
95
|
-
return valor?.toString()?.replace(/\B(?=(\d{3})+(?!\d))/g, '.')
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Função para adicionar pontos de separação de milhar e decimais em um número.
|
|
100
|
-
*
|
|
101
|
-
* @param {string | number} v - O valor numérico a ser formatado com pontos de separação de milhar.
|
|
102
|
-
* @returns {string} - O valor formatado com pontos de separação de milhar e duas casas decimais após a vírgula.
|
|
103
|
-
*
|
|
104
|
-
* @example
|
|
105
|
-
* const numeroFormatado = mascaradorMilharDecimal(1234567); // Retorna '1.234.567,00'
|
|
106
|
-
* @author Nicolasfmc
|
|
107
|
-
* @version 1.0.0
|
|
108
|
-
*/
|
|
109
|
-
export const mascaradorMilharDecimal = (v: string | number): string => {
|
|
110
|
-
let res = ''
|
|
111
|
-
|
|
112
|
-
if (!v) {
|
|
113
|
-
v = 0
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
res = v
|
|
117
|
-
.toLocaleString('pt-BR', {
|
|
118
|
-
style: 'currency',
|
|
119
|
-
currency: 'BRL',
|
|
120
|
-
})
|
|
121
|
-
.toString()
|
|
122
|
-
|
|
123
|
-
return res.replace('R$', '').trim()
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Função para formatar um valor numérico como moeda brasileira (BRL).
|
|
128
|
-
*
|
|
129
|
-
* @param {string | number} v - O valor a ser formatado como moeda brasileira.
|
|
130
|
-
* @returns {string} O valor formatado como moeda brasileira (BRL), no formato de string.
|
|
131
|
-
* @example
|
|
132
|
-
* style: 'currency', // Estilo de formatação de moeda
|
|
133
|
-
* currency: 'BRL', // Tipo de moeda (Real brasileiro)
|
|
134
|
-
* const valorFormatado = mascaradorValorReal(12345.67); // Retorna 'R$ 12.345,67'
|
|
135
|
-
* @author Flaviasoz
|
|
136
|
-
* @version 1.0.0
|
|
137
|
-
*/
|
|
138
|
-
export const mascaradorValorReal = (v?: string | number | null): string => {
|
|
139
|
-
// Convertendo para um número, se for uma string
|
|
140
|
-
const valorNumerico = typeof v === 'string' ? parseFloat(v) : v ?? 0
|
|
141
|
-
|
|
142
|
-
// Verificando se a conversão foi bem-sucedida
|
|
143
|
-
if (!isNaN(valorNumerico)) {
|
|
144
|
-
// Formatando o número como moeda
|
|
145
|
-
const valorFormatado = valorNumerico.toLocaleString('pt-BR', {
|
|
146
|
-
style: 'currency',
|
|
147
|
-
currency: 'BRL',
|
|
148
|
-
})
|
|
149
|
-
|
|
150
|
-
return valorFormatado
|
|
151
|
-
} else {
|
|
152
|
-
// Tratamento para casos em que a conversão não é bem-sucedida
|
|
153
|
-
return 'R$ 0,00'
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Função para formatar uma data no formato 'YYYY-MM-DD' para 'DD/MM/YYYY'.
|
|
159
|
-
*
|
|
160
|
-
* @param {Date | string} data - A data a ser formatada (como objeto Date ou string).
|
|
161
|
-
* @returns {string} A data formatada no formato 'DD/MM/YYYY' ou '' se a entrada for inválida.
|
|
162
|
-
*
|
|
163
|
-
* @example
|
|
164
|
-
* const dataFormatada = formatarDataBR('2021-09-26'); // Retorna '26/09/2021'
|
|
165
|
-
* @author Flaviasoz
|
|
166
|
-
* @version 1.0.0
|
|
167
|
-
*/
|
|
168
|
-
export function formatarDataBR(data: Date | string): string {
|
|
169
|
-
const dataformata = data
|
|
170
|
-
?.toString()
|
|
171
|
-
?.substring(0, 10)
|
|
172
|
-
?.split('-')
|
|
173
|
-
?.reverse()
|
|
174
|
-
?.join('/')
|
|
175
|
-
|
|
176
|
-
return dataformata || ''
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Função para formatar uma data no formato 'yyyy-mm' e um dia para 'DD/MM/YYYY'.
|
|
181
|
-
*
|
|
182
|
-
* @param {string} anoMes - A string no formato 'yyyy-mm'.
|
|
183
|
-
* @param {string} [dia='01'] - A string representando o dia (opcional, padrão é '01' se não informado).
|
|
184
|
-
* @returns {string} A data formatada no formato 'DD/MM/YYYY' ou '' se a entrada for inválida.
|
|
185
|
-
*
|
|
186
|
-
* @example
|
|
187
|
-
* const dataFormatada = formatarMesAno('2023-01'); // Retorna '01/01/2023'
|
|
188
|
-
* const dataFormatadaComDia = formatarMesAno('2023-01', '10'); // Retorna '10/01/2023'
|
|
189
|
-
* @author Nicolasfmc
|
|
190
|
-
* @version 1.1.0
|
|
191
|
-
*/
|
|
192
|
-
export function formatarMesAno(anoMes: string, dia = '01'): string {
|
|
193
|
-
const ano = anoMes.substring(0, 4)
|
|
194
|
-
const mes = anoMes.substring(5, 7)
|
|
195
|
-
|
|
196
|
-
const diaFormatado = dia.padStart(2, '0')
|
|
197
|
-
|
|
198
|
-
return `${diaFormatado}/${mes}/${ano}`
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* Formata um valor numérico para uma string no formato de moeda brasileira (BRL).
|
|
203
|
-
*
|
|
204
|
-
* @param {string} v - Valor numérico a ser formatado.
|
|
205
|
-
* @returns {string} - Valor formatado como moeda brasileira.
|
|
206
|
-
* @example
|
|
207
|
-
* const valorFormatado = mascaradorInputMoeda('123456'); // Resultado: 'R$ 1.234,56'
|
|
208
|
-
* @author Flaviasoz
|
|
209
|
-
* @version 1.0.0
|
|
210
|
-
*/
|
|
211
|
-
export function mascaradorInputMoeda(v: string): string {
|
|
212
|
-
let valor = v.replace(/\D/g, '')
|
|
213
|
-
// Formata para moeda
|
|
214
|
-
valor = (Number(valor) / 100).toLocaleString('pt-BR', {
|
|
215
|
-
style: 'currency',
|
|
216
|
-
currency: 'BRL',
|
|
217
|
-
})
|
|
218
|
-
return valor
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Converte uma string formatada como moeda brasileira para um número decimal.
|
|
223
|
-
*
|
|
224
|
-
* @param {string} valor - String no formato de moeda brasileira a ser convertida.
|
|
225
|
-
* @returns {number} - Valor convertido para número decimal.
|
|
226
|
-
* @example
|
|
227
|
-
* const valorDecimal = formatarInputMoedaFloat('R$1.234,56'); // Resultado: 1234.56
|
|
228
|
-
* @author Flaviasoz
|
|
229
|
-
* @version 1.0.0
|
|
230
|
-
*/
|
|
231
|
-
export function formatarInputMoedaFloat(valor: string): number {
|
|
232
|
-
return parseFloat(
|
|
233
|
-
valor.replace('R$', '').replaceAll('.', '').replace(',', '.'),
|
|
234
|
-
)
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* Função para formatar uma string numérica no formato '00.00.00.0.000'.
|
|
239
|
-
*
|
|
240
|
-
* @param {string} v - A string numérica a ser formatada.
|
|
241
|
-
* @returns {string} A string formatada no formato '00.00.00.0.000'.
|
|
242
|
-
* @example
|
|
243
|
-
* const stringFormatada = formatarStringNumerica('1234567890'); // Retorna '12.34.56.7.890'
|
|
244
|
-
* @author Nicolasfmc
|
|
245
|
-
* @version 1.0.0
|
|
246
|
-
*/
|
|
247
|
-
export function mascaradorCodItem(v?: string | undefined): string | undefined {
|
|
248
|
-
v = v?.replace(/\D/g, '')
|
|
249
|
-
|
|
250
|
-
if (v && v?.length < 10) {
|
|
251
|
-
v = v?.padEnd(10, '0')
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
return v?.replace(/(\d{2})(\d{2})(\d{2})(\d{1})(\d{3})/, '$1.$2.$3.$4.$5')
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
* Função para formatar uma string numérica no formato dinâmico até '50.50.20.20.5.510'.
|
|
259
|
-
*
|
|
260
|
-
* @param {string} v - A string numérica a ser formatada.
|
|
261
|
-
* @returns {string} A string formatada dinamicamente conforme o número de dígitos.
|
|
262
|
-
* @example
|
|
263
|
-
* const stringFormatada = mascaradorCodItemRede('1010'); // Retorna '10.10'
|
|
264
|
-
* const stringFormatadaComNoveDigitos = mascaradorCodItemRede('505020205'); // Retorna '50.50.20.20.5'
|
|
265
|
-
* const stringFormatadaComDozeDigitos = mascaradorCodItemRede('505020205510'); // Retorna '50.50.20.20.5.510'
|
|
266
|
-
* @author Flaviasoz
|
|
267
|
-
* @version 1.0.1
|
|
268
|
-
*/
|
|
269
|
-
export function mascaradorCodItemRede(v: string): string {
|
|
270
|
-
v = v.replace(/\D/g, '') // Remove caracteres não numéricos
|
|
271
|
-
|
|
272
|
-
// Formatação dinâmica conforme o comprimento da string
|
|
273
|
-
if (v.length <= 2) {
|
|
274
|
-
return v
|
|
275
|
-
} else if (v.length <= 4) {
|
|
276
|
-
return v.replace(/(\d{2})(\d+)/, '$1.$2')
|
|
277
|
-
} else if (v.length <= 6) {
|
|
278
|
-
return v.replace(/(\d{2})(\d{2})(\d+)/, '$1.$2.$3')
|
|
279
|
-
} else if (v.length <= 8) {
|
|
280
|
-
return v.replace(/(\d{2})(\d{2})(\d{2})(\d+)/, '$1.$2.$3.$4')
|
|
281
|
-
} else if (v.length === 9) {
|
|
282
|
-
return v.replace(/(\d{2})(\d{2})(\d{2})(\d{2})(\d+)/, '$1.$2.$3.$4.$5')
|
|
283
|
-
} else if (v.length <= 11) {
|
|
284
|
-
return v.replace(
|
|
285
|
-
/(\d{2})(\d{2})(\d{2})(\d{2})(\d{1})(\d+)/,
|
|
286
|
-
'$1.$2.$3.$4.$5.$6',
|
|
287
|
-
)
|
|
288
|
-
} else {
|
|
289
|
-
return v.replace(
|
|
290
|
-
/(\d{2})(\d{2})(\d{2})(\d{2})(\d{1})(\d{3})/,
|
|
291
|
-
'$1.$2.$3.$4.$5.$6',
|
|
292
|
-
)
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
/**
|
|
297
|
-
* Formata uma data para uma string no formato 'dia de mês de ano, hora'.
|
|
298
|
-
*
|
|
299
|
-
* @param {Date} data - A data a ser formatada.
|
|
300
|
-
* @returns {string} A data formatada no formato 'dia de mês de ano, hora'.
|
|
301
|
-
* @author Flaviasoz
|
|
302
|
-
*/
|
|
303
|
-
export function formatarDataParaString(data: Date): string {
|
|
304
|
-
const diasSemana = [
|
|
305
|
-
'Domingo',
|
|
306
|
-
'Segunda-feira',
|
|
307
|
-
'Terça-feira',
|
|
308
|
-
'Quarta-feira',
|
|
309
|
-
'Quinta-feira',
|
|
310
|
-
'Sexta-feira',
|
|
311
|
-
'Sábado',
|
|
312
|
-
]
|
|
313
|
-
|
|
314
|
-
const meses = [
|
|
315
|
-
'Janeiro',
|
|
316
|
-
'Fevereiro',
|
|
317
|
-
'Março',
|
|
318
|
-
'Abril',
|
|
319
|
-
'Maio',
|
|
320
|
-
'Junho',
|
|
321
|
-
'Julho',
|
|
322
|
-
'Agosto',
|
|
323
|
-
'Setembro',
|
|
324
|
-
'Outubro',
|
|
325
|
-
'Novembro',
|
|
326
|
-
'Dezembro',
|
|
327
|
-
]
|
|
328
|
-
|
|
329
|
-
const diaSemana = diasSemana[data.getDay()]
|
|
330
|
-
const dia = data.getDate()
|
|
331
|
-
const mes = meses[data.getMonth()]
|
|
332
|
-
const ano = data.getFullYear()
|
|
333
|
-
const hora = data.toLocaleTimeString('pt-BR', {
|
|
334
|
-
hour: '2-digit',
|
|
335
|
-
minute: '2-digit',
|
|
336
|
-
})
|
|
337
|
-
|
|
338
|
-
const dataFormatada = `${diaSemana}, ${dia} de ${mes} de ${ano}, ${hora}`
|
|
339
|
-
|
|
340
|
-
return dataFormatada
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
/**
|
|
344
|
-
* Mascara um CPF, adicionando pontos e traço.
|
|
345
|
-
*
|
|
346
|
-
* @param {string} cpf - O CPF a ser mascarado.
|
|
347
|
-
* @param {boolean} autoComplete - Indica se deve completar com zeros à esquerda.
|
|
348
|
-
* @returns {string} O CPF mascarado.
|
|
349
|
-
*/
|
|
350
|
-
interface MascararCPF {
|
|
351
|
-
cpfCnpj: string | number
|
|
352
|
-
autoComplete?: boolean
|
|
353
|
-
}
|
|
354
|
-
export function mascararCPF({
|
|
355
|
-
cpfCnpj,
|
|
356
|
-
autoComplete = false,
|
|
357
|
-
}: MascararCPF): string {
|
|
358
|
-
const value = cpfCnpj?.toString().replace(/\D/g, '')
|
|
359
|
-
|
|
360
|
-
const mask = autoComplete ? value?.padStart(11, '0') : value
|
|
361
|
-
return mask
|
|
362
|
-
.replace(/(\d{3})(\d)/, '$1.$2')
|
|
363
|
-
.replace(/(\d{3})(\d)/, '$1.$2')
|
|
364
|
-
.replace(/(\d{3})(\d{1,2})$/, '$1-$2')
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
/**
|
|
368
|
-
* Mascara um CNPJ, adicionando pontos, barra e traço.
|
|
369
|
-
*
|
|
370
|
-
* @param {string} cnpj - O CNPJ a ser mascarado.
|
|
371
|
-
* @param {boolean} autoComplete - Indica se deve completar com zeros à esquerda.
|
|
372
|
-
* @returns {string} O CNPJ mascarado.
|
|
373
|
-
*/
|
|
374
|
-
export function mascararCNPJ({
|
|
375
|
-
cpfCnpj,
|
|
376
|
-
autoComplete = false,
|
|
377
|
-
}: MascararCPF): string {
|
|
378
|
-
const value = cpfCnpj?.toString().replace(/\D/g, '')
|
|
379
|
-
|
|
380
|
-
const mask = autoComplete ? value?.padStart(14, '0') : value
|
|
381
|
-
return mask
|
|
382
|
-
.replace(/^(\d{2})(\d)/, '$1.$2')
|
|
383
|
-
.replace(/^(\d{2})\.(\d{3})(\d)/, '$1.$2.$3')
|
|
384
|
-
.replace(/\.(\d{3})(\d)/, '.$1/$2')
|
|
385
|
-
.replace(/(\d{4})(\d)/, '$1-$2')
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
export function formatValuesToMoney<T>(obj: T, fieldsToFormat: (keyof T)[]): T {
|
|
389
|
-
if (Array.isArray(obj)) {
|
|
390
|
-
return obj.map((item) => formatValuesToMoney(item, fieldsToFormat)) as any
|
|
391
|
-
} else if (typeof obj === 'object' && obj !== null) {
|
|
392
|
-
const newObj: any = {}
|
|
393
|
-
for (const key in obj) {
|
|
394
|
-
if (Object.hasOwn(obj, key)) {
|
|
395
|
-
if (fieldsToFormat.includes(key as keyof T)) {
|
|
396
|
-
const value = (obj as any)[key]
|
|
397
|
-
if (typeof value === 'number') {
|
|
398
|
-
newObj[key] = mascaradorInputMoeda(String(value.toFixed(2)))
|
|
399
|
-
} else if (typeof value === 'string') {
|
|
400
|
-
const numericValue = parseFloat(value.replace(/[^\d.-]+/g, ''))
|
|
401
|
-
newObj[key] = isNaN(numericValue)
|
|
402
|
-
? value
|
|
403
|
-
: mascaradorInputMoeda(String(numericValue.toFixed(2)))
|
|
404
|
-
} else {
|
|
405
|
-
newObj[key] = formatValuesToMoney(value, fieldsToFormat)
|
|
406
|
-
}
|
|
407
|
-
} else {
|
|
408
|
-
newObj[key] = formatValuesToMoney((obj as any)[key], fieldsToFormat)
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
return newObj as T
|
|
413
|
-
} else {
|
|
414
|
-
return obj
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
export function limitDecimais(value: string, limit: number): string {
|
|
419
|
-
value = value.replace(/[^\d.]/g, '').replace(',', '.')
|
|
420
|
-
const parts = value.split('.')
|
|
421
|
-
const oldVal = value
|
|
422
|
-
|
|
423
|
-
if (parts.length > 2) {
|
|
424
|
-
return oldVal.slice(0, oldVal.length - 1)
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
if (parts.length > 1 && parts[1].length > limit) {
|
|
428
|
-
return oldVal.slice(0, oldVal.length - (parts[1].length - limit))
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
return value
|
|
432
|
-
}
|
package/src/hooks/index.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { useCallback, useEffect, useState } from 'react'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Gancho personalizado para tornar os árbitros com estado
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```ts
|
|
8
|
-
* const [inputRef, setInputRef] = useStateRef<HTMLInputElement | null>(null);
|
|
9
|
-
*
|
|
10
|
-
* <input type = "text" ref = {setInputRef} />
|
|
11
|
-
* ```
|
|
12
|
-
* @version 1.0.0
|
|
13
|
-
* @ViniciusCLoeblein
|
|
14
|
-
*/
|
|
15
|
-
export function useStateRef<T>(initialValue: T): [T, (node: T) => void] {
|
|
16
|
-
const [state, setState] = useState(initialValue)
|
|
17
|
-
const setRef = useCallback((node: T) => {
|
|
18
|
-
setState(node)
|
|
19
|
-
}, [])
|
|
20
|
-
return [state, setRef]
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* usa a dimensão passada por props para saber se a tela é menor, se for retorna True
|
|
25
|
-
* @ViniciusCLoeblein @Flaviasoz
|
|
26
|
-
* @version 1.2.0
|
|
27
|
-
*/
|
|
28
|
-
export function useDimension(width: number): boolean {
|
|
29
|
-
const [state, setState] = useState(false)
|
|
30
|
-
|
|
31
|
-
const updateMobileState = useCallback(() => {
|
|
32
|
-
const newMobile = window.innerWidth <= width
|
|
33
|
-
if (newMobile !== state) {
|
|
34
|
-
setState(newMobile)
|
|
35
|
-
}
|
|
36
|
-
}, [width, state])
|
|
37
|
-
|
|
38
|
-
useEffect(() => {
|
|
39
|
-
updateMobileState()
|
|
40
|
-
|
|
41
|
-
window.addEventListener('resize', updateMobileState)
|
|
42
|
-
|
|
43
|
-
return () => window.removeEventListener('resize', updateMobileState)
|
|
44
|
-
}, [updateMobileState])
|
|
45
|
-
|
|
46
|
-
return state
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export const useWindowWidth = () => {
|
|
50
|
-
const [width, setWidth] = useState(window.innerWidth)
|
|
51
|
-
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
const handleResize = () => setWidth(window.innerWidth)
|
|
54
|
-
|
|
55
|
-
window.addEventListener('resize', handleResize)
|
|
56
|
-
return () => window.removeEventListener('resize', handleResize)
|
|
57
|
-
}, [])
|
|
58
|
-
|
|
59
|
-
return width
|
|
60
|
-
}
|
package/src/index.tsx
DELETED
package/src/lib/utils.ts
DELETED
package/src/styles/sx.ts
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { createTheme } from '@mui/material'
|
|
2
|
-
|
|
3
|
-
export const sxTextField = {
|
|
4
|
-
'& label.Mui-focused': {
|
|
5
|
-
color: '#00B2A6',
|
|
6
|
-
},
|
|
7
|
-
'& .MuiFormHelperText-root': {
|
|
8
|
-
margin: '1px 0px 0 1px',
|
|
9
|
-
},
|
|
10
|
-
'& .MuiInput-underline:after': {
|
|
11
|
-
borderBottomColor: '#00B2A6',
|
|
12
|
-
},
|
|
13
|
-
'& .MuiOutlinedInput-root': {
|
|
14
|
-
'& fieldset': {
|
|
15
|
-
borderColor: '#00B2A6',
|
|
16
|
-
},
|
|
17
|
-
'&:hover fieldset': {
|
|
18
|
-
borderColor: '#00B2A6',
|
|
19
|
-
},
|
|
20
|
-
'&.Mui-focused fieldset': {
|
|
21
|
-
borderColor: '#00B2A6',
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
'& .MuiOutlinedInput-root.Mui-disabled': {
|
|
25
|
-
'& fieldset': {
|
|
26
|
-
borderColor: '#00B2A6 !important',
|
|
27
|
-
},
|
|
28
|
-
'& .MuiOutlinedInput-notchedOutline': {
|
|
29
|
-
borderColor: '#00B2A6 !important',
|
|
30
|
-
},
|
|
31
|
-
'& .MuiAutocomplete-input': {
|
|
32
|
-
color: '#00B2A6 !important',
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export const theme = createTheme({
|
|
38
|
-
palette: {
|
|
39
|
-
primary: {
|
|
40
|
-
main: '#00B2A6',
|
|
41
|
-
light: '#019F95',
|
|
42
|
-
dark: '#019F95',
|
|
43
|
-
contrastText: '#FFFFFF',
|
|
44
|
-
},
|
|
45
|
-
secondary: {
|
|
46
|
-
main: '#13477B',
|
|
47
|
-
light: '#34495E',
|
|
48
|
-
dark: '#1565c0',
|
|
49
|
-
contrastText: '#FFFFFF',
|
|
50
|
-
},
|
|
51
|
-
error: {
|
|
52
|
-
main: '#EF4058',
|
|
53
|
-
light: '#CA3449',
|
|
54
|
-
dark: '#CA3449',
|
|
55
|
-
contrastText: '#FFFFFF',
|
|
56
|
-
},
|
|
57
|
-
warning: {
|
|
58
|
-
main: '#ECC005',
|
|
59
|
-
light: '#E0B605',
|
|
60
|
-
dark: '#E0B605',
|
|
61
|
-
contrastText: '#FFFFFF',
|
|
62
|
-
},
|
|
63
|
-
info: {
|
|
64
|
-
main: '#FFFFFF',
|
|
65
|
-
light: '#FFFFFF',
|
|
66
|
-
dark: '#FFFFFF',
|
|
67
|
-
contrastText: '#FFFFFF',
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
export const sx = {
|
|
73
|
-
'& label.Mui-focused': {
|
|
74
|
-
color: '#00B2A6',
|
|
75
|
-
// fontFamily: 'Montserrat, sans-serif', // Fonte Montserrat
|
|
76
|
-
// fontWeight: '600', // Defina o peso da fonte como semi bold
|
|
77
|
-
},
|
|
78
|
-
'& .MuiFormHelperText-root': {
|
|
79
|
-
margin: '1px 0px 0 1px',
|
|
80
|
-
},
|
|
81
|
-
'& .MuiInput-underline:after': {
|
|
82
|
-
borderBottomColor: '#00B2A6',
|
|
83
|
-
},
|
|
84
|
-
'& .MuiOutlinedInput-root': {
|
|
85
|
-
'& fieldset': {
|
|
86
|
-
borderColor: '#00B2A6',
|
|
87
|
-
},
|
|
88
|
-
'&:hover fieldset': {
|
|
89
|
-
borderColor: '#00B2A6',
|
|
90
|
-
},
|
|
91
|
-
'&.Mui-focused fieldset': {
|
|
92
|
-
borderColor: '#00B2A6',
|
|
93
|
-
},
|
|
94
|
-
},
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export const standard = {
|
|
98
|
-
'& .MuiInput-underline:before': {
|
|
99
|
-
borderBottomColor: 'whitesmoke',
|
|
100
|
-
},
|
|
101
|
-
'& .MuiFormHelperText-root': {
|
|
102
|
-
margin: '1px 0px 0 1px',
|
|
103
|
-
},
|
|
104
|
-
'& .MuiInputLabel-root': {
|
|
105
|
-
color: 'white',
|
|
106
|
-
},
|
|
107
|
-
'& .MuiInputBase-root': {
|
|
108
|
-
color: 'white',
|
|
109
|
-
},
|
|
110
|
-
'& .MuiInput-underline:hover:not(.Mui-disabled):before': {
|
|
111
|
-
borderBottomColor: 'white',
|
|
112
|
-
},
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export const sxAutoComplete = {
|
|
116
|
-
'& label.Mui-focused': {
|
|
117
|
-
color: '#00B2A6',
|
|
118
|
-
},
|
|
119
|
-
'& .MuiFormHelperText-root': {
|
|
120
|
-
margin: '1px 0px 0 1px',
|
|
121
|
-
},
|
|
122
|
-
'& .MuiInput-underline:after': {
|
|
123
|
-
borderBottomColor: '#00B2A6',
|
|
124
|
-
},
|
|
125
|
-
'& .MuiOutlinedInput-root': {
|
|
126
|
-
'& fieldset': {
|
|
127
|
-
borderColor: '#00B2A6',
|
|
128
|
-
},
|
|
129
|
-
'&:hover fieldset': {
|
|
130
|
-
borderColor: '#00B2A6',
|
|
131
|
-
},
|
|
132
|
-
'&.Mui-focused fieldset': {
|
|
133
|
-
borderColor: '#00B2A6',
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
// Estilização para o botão desabilitado usando pseudoseletor :disabled
|
|
137
|
-
'& .MuiOutlinedInput-root.Mui-disabled': {
|
|
138
|
-
'& fieldset': {
|
|
139
|
-
borderColor: '#00B2A6 !important',
|
|
140
|
-
},
|
|
141
|
-
'& .MuiOutlinedInput-notchedOutline': {
|
|
142
|
-
borderColor: '#00B2A6 !important',
|
|
143
|
-
},
|
|
144
|
-
'& .MuiAutocomplete-input': {
|
|
145
|
-
color: '#00B2A6 !important',
|
|
146
|
-
},
|
|
147
|
-
},
|
|
148
|
-
}
|