@pipelinesolucoes/form 1.0.0-beta.0 → 1.0.0-beta.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.
Files changed (64) hide show
  1. package/LICENSE +78 -78
  2. package/README.md +170 -162
  3. package/dist/components/ButtonFormStyled.d.ts +2 -0
  4. package/dist/components/ButtonFormStyled.js +22 -0
  5. package/dist/components/ButtonFormStyled.js.map +1 -0
  6. package/dist/components/FormStyled.d.ts +2 -2
  7. package/dist/components/TextFieldValidate.d.ts +52 -67
  8. package/dist/components/TextFieldValidate.js +58 -78
  9. package/dist/components/TextFieldValidate.js.map +1 -1
  10. package/dist/components/login/GoogleButton.d.ts +64 -0
  11. package/dist/components/login/GoogleButton.js +100 -0
  12. package/dist/components/login/GoogleButton.js.map +1 -0
  13. package/dist/components/{LoginForm.js → login/LoginForm.js} +1 -1
  14. package/dist/components/login/LoginForm.js.map +1 -0
  15. package/dist/components/login/PasswordRecoveryForm.d.ts +142 -0
  16. package/dist/components/login/PasswordRecoveryForm.js +169 -0
  17. package/dist/components/login/PasswordRecoveryForm.js.map +1 -0
  18. package/dist/components/{SignUpForm.js → login/SignUpForm.js} +1 -1
  19. package/dist/components/login/SignUpForm.js.map +1 -0
  20. package/dist/components/{RecaptchaForm.js → recaptcha/RecaptchaForm.js} +1 -1
  21. package/dist/components/recaptcha/RecaptchaForm.js.map +1 -0
  22. package/dist/components/recaptcha/RecaptchaInvisible.js.map +1 -0
  23. package/dist/components/recaptcha/RecaptchaMessage.js.map +1 -0
  24. package/dist/index.d.ts +9 -5
  25. package/dist/index.js +5 -5
  26. package/dist/index.js.map +1 -1
  27. package/dist/tsconfig.tsbuildinfo +1 -1
  28. package/dist/types/BorderProps.d.ts +6 -0
  29. package/dist/types/BorderProps.js +2 -0
  30. package/dist/types/BorderProps.js.map +1 -0
  31. package/dist/types/ButtonProps.d.ts +17 -0
  32. package/dist/types/ButtonProps.js +16 -0
  33. package/dist/types/ButtonProps.js.map +1 -0
  34. package/dist/types/ColorProps.d.ts +7 -0
  35. package/dist/types/ColorProps.js +2 -0
  36. package/dist/types/ColorProps.js.map +1 -0
  37. package/dist/types/FieldProps.d.ts +9 -0
  38. package/dist/types/FieldProps.js +2 -0
  39. package/dist/types/FieldProps.js.map +1 -0
  40. package/dist/types/LayoutProps.d.ts +7 -0
  41. package/dist/types/LayoutProps.js +2 -0
  42. package/dist/types/LayoutProps.js.map +1 -0
  43. package/dist/types/TextProps.d.ts +5 -0
  44. package/dist/types/TextProps.js +2 -0
  45. package/dist/types/TextProps.js.map +1 -0
  46. package/package.json +62 -64
  47. package/dist/components/GoogleButton.d.ts +0 -60
  48. package/dist/components/GoogleButton.js +0 -110
  49. package/dist/components/GoogleButton.js.map +0 -1
  50. package/dist/components/LoginForm.js.map +0 -1
  51. package/dist/components/RecaptchaForm.js.map +0 -1
  52. package/dist/components/RecaptchaInvisible.js.map +0 -1
  53. package/dist/components/RecaptchaMessage.js.map +0 -1
  54. package/dist/components/RecuperarSenhaForm.d.ts +0 -23
  55. package/dist/components/RecuperarSenhaForm.js +0 -98
  56. package/dist/components/RecuperarSenhaForm.js.map +0 -1
  57. package/dist/components/SignUpForm.js.map +0 -1
  58. /package/dist/components/{LoginForm.d.ts → login/LoginForm.d.ts} +0 -0
  59. /package/dist/components/{SignUpForm.d.ts → login/SignUpForm.d.ts} +0 -0
  60. /package/dist/components/{RecaptchaForm.d.ts → recaptcha/RecaptchaForm.d.ts} +0 -0
  61. /package/dist/components/{RecaptchaInvisible.d.ts → recaptcha/RecaptchaInvisible.d.ts} +0 -0
  62. /package/dist/components/{RecaptchaInvisible.js → recaptcha/RecaptchaInvisible.js} +0 -0
  63. /package/dist/components/{RecaptchaMessage.d.ts → recaptcha/RecaptchaMessage.d.ts} +0 -0
  64. /package/dist/components/{RecaptchaMessage.js → recaptcha/RecaptchaMessage.js} +0 -0
@@ -1,104 +1,89 @@
1
1
  import React from 'react';
2
- interface TextFieldValidateProps {
2
+ import { BorderProps } from '../types/BorderProps';
3
+ import { ColorProps } from '../types/ColorProps';
4
+ import { LayoutProps } from '../types/LayoutProps';
5
+ interface TextFieldValidateProps extends BorderProps, ColorProps, LayoutProps {
3
6
  id?: string;
4
7
  label?: string;
8
+ placeholder?: string;
9
+ value?: string;
5
10
  background?: string;
6
11
  colorText?: string;
12
+ colorFocused?: string;
7
13
  borderRadius?: string;
8
14
  boxShadow?: string;
9
15
  borderColor?: string;
10
- placeholder?: string;
16
+ padding?: string;
11
17
  disabled?: boolean;
12
- value?: string;
13
- onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
14
- onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;
15
18
  multiline?: boolean;
16
19
  rows?: number;
17
20
  required?: boolean;
18
21
  requiredMessage?: string;
19
- minLength?: number;
20
22
  pattern?: RegExp | string;
21
23
  patternMessage?: string;
22
24
  validate?: (value: string) => string | null | undefined;
23
25
  showErrorOn?: 'change' | 'blur';
26
+ minLength?: number;
24
27
  maxLength?: number;
28
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
29
+ onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;
25
30
  }
26
31
  /**
27
- * TextFieldValidate Component
32
+ * Componente de campo de texto com validação, baseado no TextField do Material UI.
33
+ * Permite personalização visual via `styled` e suporte a validações comuns
34
+ * (obrigatório, tamanho mínimo, regex) e validação customizada.
28
35
  *
29
- * Um campo de texto personalizável baseado no Material UI (MUI 6+), com suporte a:
30
- * - Estilização via `styled` (background, cor do texto, bordas, sombra).
31
- * - Estados e acessibilidade do MUI (`label`, `disabled`, `helperText`, `error`).
32
- * - Modo multilinha (`multiline`, `rows`).
33
- * - Validações simples (obrigatório, tamanho mínimo, `pattern`) e validação customizada (`validate`).
34
- * - Controle de exibição de erro durante a digitação ou após perder o foco (`showErrorOn`).
35
- * - Limite máximo de caracteres via `maxLength` (aplicado ao input).
36
- * - Suporte a um `onBlur` externo para lógicas adicionais (ex: busca de CEP).
36
+ * O erro pode ser exibido durante a digitação ou apenas após o campo perder o foco.
37
37
  *
38
- * ### Parâmetros (props)
39
- * - `id?: string` Id do campo (passado para o DOM/MUI). **Default:** `undefined`
40
- * - `label?: string` Rótulo exibido acima do campo (Label do MUI). **Default:** `undefined`
41
- * - `background?: string` Cor de fundo do campo. **Default:** `"#fff"`
42
- * - `colorText?: string` Cor do texto. **Default:** `"#000"`
43
- * - `borderRadius?: string` — Raio de borda. **Default:** `"6px"`
44
- * - `boxShadow?: string` — Sombra do campo. **Default:** `"none"`
45
- * - `borderColor?: string` — Cor da borda do campo (estado base e hover). **Default:** `"#ccc"`
46
- * - `placeholder?: string` — Placeholder exibido quando o campo está vazio. **Default:** `""`
47
- * - `disabled?: boolean` — Desabilita o campo (estado disabled). **Default:** `false`
48
- * - `value?: string` — Valor atual do campo (controlado). **Default:** `""`
49
- * - `onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void` — Função chamada ao alterar o valor. **Default:** `undefined`
50
- * - `onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void` — Função chamada ao perder o foco, após a lógica interna marcar o campo como “tocado”. **Default:** `undefined`
38
+ * @param {string} [id] Id do campo (replicado no input do MUI).
39
+ * @param {string} [label] Rótulo exibido acima do campo.
40
+ * @param {string} [placeholder] Placeholder exibido quando o campo está vazio.
41
+ * @param {string} [value=''] Valor atual do campo (modo controlado).
42
+ * @param {boolean} [disabled=false] Define se o campo está desabilitado.
51
43
  *
52
- * **Multiline**
53
- * - `multiline?: boolean` Define se o campo é multilinha. **Default:** `false`
54
- * - `rows?: number` Número de linhas quando `multiline` está ativo. **Default:** `3`
44
+ * @param {string} [background='#fff'] Cor de fundo do campo.
45
+ * @param {string} [colorText='#000'] Cor do texto e do label.
46
+ * @param {string} [colorFocused='#1976d2'] Cor da borda quando o campo está focado.
47
+ * @param {string} [borderColor='#ccc'] Cor da borda no estado normal e hover.
48
+ * @param {string} [borderRadius='0'] Raio da borda do campo.
49
+ * @param {string} [boxShadow='none'] Sombra aplicada ao campo.
50
+ * @param {string} [padding='4px 8px'] Espaçamento interno do input.
55
51
  *
56
- * **Validação**
57
- * - `required?: boolean` Indica se o preenchimento é obrigatório. **Default:** `false`
58
- * - `requiredMessage?: string` — Mensagem quando obrigatório não atendido. **Default:** `"Campo obrigatório"`
59
- * - `minLength?: number` — Tamanho mínimo (caracteres). **Default:** `undefined`
60
- * - `pattern?: RegExp | string` — Expressão regular para validar o formato. **Default:** `undefined`
61
- * - `patternMessage?: string` — Mensagem quando o `pattern` não é atendido. **Default:** `"Formato inválido"`
62
- * - `validate?: (value: string) => string | null | undefined` — Validação customizada; retorne string com a mensagem de erro, ou `null/undefined` se válido. **Default:** `undefined`
63
- * - `showErrorOn?: 'change' | 'blur'` — Quando exibir erros: durante a digitação (`"change"`) ou ao perder o foco (`"blur"`). **Default:** `"blur"`
52
+ * @param {boolean} [multiline=false] Define se o campo é multilinha.
53
+ * @param {number} [rows=3] Número de linhas quando `multiline` está ativo.
64
54
  *
65
- * **Outros**
66
- * - `maxLength?: number` Limite máximo de caracteres permitido (não valida; apenas limita o input). **Default:** `undefined`
55
+ * @param {boolean} [required=false] Indica se o campo é obrigatório.
56
+ * @param {string} [requiredMessage='Campo obrigatório'] Mensagem exibida quando o campo obrigatório está vazio.
57
+ * @param {number} [minLength] Número mínimo de caracteres.
58
+ * @param {RegExp | string} [pattern] Expressão regular para validação do valor.
59
+ * @param {string} [patternMessage='Formato inválido'] Mensagem exibida quando o pattern não é atendido.
60
+ * @param {(value: string) => string | null | undefined} [validate] Função de validação customizada.
61
+ * @param {'change' | 'blur'} [showErrorOn='blur'] Momento em que o erro deve ser exibido.
67
62
  *
68
- * ### Exemplo (uso com CEP e onBlur)
63
+ * @param {number} [maxLength] Limite máximo de caracteres permitido no input.
64
+ * @param {(event: React.ChangeEvent<HTMLInputElement>) => void} [onChange] Callback disparado ao alterar o valor.
65
+ * @param {(event: React.FocusEvent<HTMLInputElement>) => void} [onBlur] Callback disparado ao perder o foco.
66
+ *
67
+ * @example
69
68
  * ```tsx
70
69
  * import React from 'react';
71
- * import TextFieldValidate from './TextFieldValidate';
72
- *
73
- * const CepExample: React.FC = () => {
74
- * const [cep, setCep] = React.useState('');
75
- *
76
- * const handleCepBlur = async (event: React.FocusEvent<HTMLInputElement>) => {
77
- * const raw = event.target.value || '';
78
- * const onlyDigits = raw.replace(/\D/g, '');
70
+ * import TextFieldValidate from '@/components/TextFieldValidate';
79
71
  *
80
- * if (onlyDigits.length === 8) {
81
- * // Exemplo de chamada de API (ViaCEP)
82
- * // const response = await fetch(`https://viacep.com.br/ws/${onlyDigits}/json/`);
83
- * // const data = await response.json();
84
- * // ...preencher outros campos do formulário...
85
- * console.log('CEP para buscar:', onlyDigits);
86
- * }
87
- * };
72
+ * const Example = () => {
73
+ * const [email, setEmail] = React.useState('');
88
74
  *
89
75
  * return (
90
76
  * <TextFieldValidate
91
- * id="cep-input"
92
- * label="CEP"
93
- * placeholder="Digite o CEP"
94
- * value={cep}
95
- * onChange={(e) => setCep(e.target.value)}
96
- * onBlur={handleCepBlur}
97
- * pattern={/^\d{5}-?\d{3}$/}
98
- * patternMessage="CEP inválido"
77
+ * label="E-mail"
78
+ * placeholder="Digite seu e-mail"
79
+ * value={email}
80
+ * onChange={(e) => setEmail(e.target.value)}
99
81
  * required
82
+ * pattern={/^[^\s@]+@[^\s@]+\.[^\s@]+$/}
83
+ * patternMessage="E-mail inválido"
100
84
  * showErrorOn="blur"
101
- * maxLength={9}
85
+ * maxLength={120}
86
+ * borderRadius="6px"
102
87
  * />
103
88
  * );
104
89
  * };
@@ -3,30 +3,30 @@ import React from 'react';
3
3
  import { styled } from '@mui/material/styles';
4
4
  import TextField from '@mui/material/TextField';
5
5
  const StyledTextField = styled(TextField, {
6
- shouldForwardProp: (prop) => !['background', 'colorText', 'borderRadius', 'boxShadow', 'borderColor'].includes(prop),
7
- })(({ background, colorText, borderRadius, boxShadow, borderColor }) => ({
8
- background: background || '#fff',
9
- color: colorText || '#000',
10
- borderRadius: borderRadius || '6px',
11
- boxShadow: boxShadow || 'none',
6
+ shouldForwardProp: (prop) => !['background', 'colorText', 'borderRadius', 'boxShadow', 'borderColor', 'colorFocused', 'padding'].includes(prop),
7
+ })(({ background, colorText, borderRadius, boxShadow, borderColor, colorFocused, padding }) => ({
8
+ background: background,
9
+ color: colorText,
10
+ borderRadius: borderRadius,
11
+ boxShadow: boxShadow,
12
12
  '& .MuiInputBase-root': {
13
- color: colorText || '#000',
14
- background: background || '#fff',
15
- borderRadius: borderRadius || '6px',
16
- boxShadow: boxShadow || 'none',
17
- padding: '4px 8px',
13
+ color: colorText,
14
+ background: background,
15
+ borderRadius: borderRadius,
16
+ boxShadow: boxShadow,
17
+ padding: padding,
18
18
  },
19
19
  '& .MuiInputLabel-root': {
20
- color: colorText || '#000',
20
+ color: colorText,
21
21
  },
22
22
  '& .MuiOutlinedInput-notchedOutline': {
23
- borderColor: borderColor || '#ccc',
23
+ borderColor: borderColor,
24
24
  },
25
25
  '&:hover .MuiOutlinedInput-notchedOutline': {
26
- borderColor: borderColor || '#888',
26
+ borderColor: borderColor,
27
27
  },
28
28
  '&.Mui-focused .MuiOutlinedInput-notchedOutline': {
29
- borderColor: '#1976d2',
29
+ borderColor: colorFocused,
30
30
  },
31
31
  }));
32
32
  const computeError = (value, { required, requiredMessage, minLength, pattern, patternMessage, validate, }) => {
@@ -48,87 +48,67 @@ const computeError = (value, { required, requiredMessage, minLength, pattern, pa
48
48
  return null;
49
49
  };
50
50
  /**
51
- * TextFieldValidate Component
51
+ * Componente de campo de texto com validação, baseado no TextField do Material UI.
52
+ * Permite personalização visual via `styled` e suporte a validações comuns
53
+ * (obrigatório, tamanho mínimo, regex) e validação customizada.
52
54
  *
53
- * Um campo de texto personalizável baseado no Material UI (MUI 6+), com suporte a:
54
- * - Estilização via `styled` (background, cor do texto, bordas, sombra).
55
- * - Estados e acessibilidade do MUI (`label`, `disabled`, `helperText`, `error`).
56
- * - Modo multilinha (`multiline`, `rows`).
57
- * - Validações simples (obrigatório, tamanho mínimo, `pattern`) e validação customizada (`validate`).
58
- * - Controle de exibição de erro durante a digitação ou após perder o foco (`showErrorOn`).
59
- * - Limite máximo de caracteres via `maxLength` (aplicado ao input).
60
- * - Suporte a um `onBlur` externo para lógicas adicionais (ex: busca de CEP).
55
+ * O erro pode ser exibido durante a digitação ou apenas após o campo perder o foco.
61
56
  *
62
- * ### Parâmetros (props)
63
- * - `id?: string` Id do campo (passado para o DOM/MUI). **Default:** `undefined`
64
- * - `label?: string` Rótulo exibido acima do campo (Label do MUI). **Default:** `undefined`
65
- * - `background?: string` Cor de fundo do campo. **Default:** `"#fff"`
66
- * - `colorText?: string` Cor do texto. **Default:** `"#000"`
67
- * - `borderRadius?: string` — Raio de borda. **Default:** `"6px"`
68
- * - `boxShadow?: string` — Sombra do campo. **Default:** `"none"`
69
- * - `borderColor?: string` — Cor da borda do campo (estado base e hover). **Default:** `"#ccc"`
70
- * - `placeholder?: string` — Placeholder exibido quando o campo está vazio. **Default:** `""`
71
- * - `disabled?: boolean` — Desabilita o campo (estado disabled). **Default:** `false`
72
- * - `value?: string` — Valor atual do campo (controlado). **Default:** `""`
73
- * - `onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void` — Função chamada ao alterar o valor. **Default:** `undefined`
74
- * - `onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void` — Função chamada ao perder o foco, após a lógica interna marcar o campo como “tocado”. **Default:** `undefined`
57
+ * @param {string} [id] Id do campo (replicado no input do MUI).
58
+ * @param {string} [label] Rótulo exibido acima do campo.
59
+ * @param {string} [placeholder] Placeholder exibido quando o campo está vazio.
60
+ * @param {string} [value=''] Valor atual do campo (modo controlado).
61
+ * @param {boolean} [disabled=false] Define se o campo está desabilitado.
75
62
  *
76
- * **Multiline**
77
- * - `multiline?: boolean` Define se o campo é multilinha. **Default:** `false`
78
- * - `rows?: number` Número de linhas quando `multiline` está ativo. **Default:** `3`
63
+ * @param {string} [background='#fff'] Cor de fundo do campo.
64
+ * @param {string} [colorText='#000'] Cor do texto e do label.
65
+ * @param {string} [colorFocused='#1976d2'] Cor da borda quando o campo está focado.
66
+ * @param {string} [borderColor='#ccc'] Cor da borda no estado normal e hover.
67
+ * @param {string} [borderRadius='0'] Raio da borda do campo.
68
+ * @param {string} [boxShadow='none'] Sombra aplicada ao campo.
69
+ * @param {string} [padding='4px 8px'] Espaçamento interno do input.
79
70
  *
80
- * **Validação**
81
- * - `required?: boolean` Indica se o preenchimento é obrigatório. **Default:** `false`
82
- * - `requiredMessage?: string` — Mensagem quando obrigatório não atendido. **Default:** `"Campo obrigatório"`
83
- * - `minLength?: number` — Tamanho mínimo (caracteres). **Default:** `undefined`
84
- * - `pattern?: RegExp | string` — Expressão regular para validar o formato. **Default:** `undefined`
85
- * - `patternMessage?: string` — Mensagem quando o `pattern` não é atendido. **Default:** `"Formato inválido"`
86
- * - `validate?: (value: string) => string | null | undefined` — Validação customizada; retorne string com a mensagem de erro, ou `null/undefined` se válido. **Default:** `undefined`
87
- * - `showErrorOn?: 'change' | 'blur'` — Quando exibir erros: durante a digitação (`"change"`) ou ao perder o foco (`"blur"`). **Default:** `"blur"`
71
+ * @param {boolean} [multiline=false] Define se o campo é multilinha.
72
+ * @param {number} [rows=3] Número de linhas quando `multiline` está ativo.
88
73
  *
89
- * **Outros**
90
- * - `maxLength?: number` Limite máximo de caracteres permitido (não valida; apenas limita o input). **Default:** `undefined`
74
+ * @param {boolean} [required=false] Indica se o campo é obrigatório.
75
+ * @param {string} [requiredMessage='Campo obrigatório'] Mensagem exibida quando o campo obrigatório está vazio.
76
+ * @param {number} [minLength] Número mínimo de caracteres.
77
+ * @param {RegExp | string} [pattern] Expressão regular para validação do valor.
78
+ * @param {string} [patternMessage='Formato inválido'] Mensagem exibida quando o pattern não é atendido.
79
+ * @param {(value: string) => string | null | undefined} [validate] Função de validação customizada.
80
+ * @param {'change' | 'blur'} [showErrorOn='blur'] Momento em que o erro deve ser exibido.
91
81
  *
92
- * ### Exemplo (uso com CEP e onBlur)
82
+ * @param {number} [maxLength] Limite máximo de caracteres permitido no input.
83
+ * @param {(event: React.ChangeEvent<HTMLInputElement>) => void} [onChange] Callback disparado ao alterar o valor.
84
+ * @param {(event: React.FocusEvent<HTMLInputElement>) => void} [onBlur] Callback disparado ao perder o foco.
85
+ *
86
+ * @example
93
87
  * ```tsx
94
88
  * import React from 'react';
95
- * import TextFieldValidate from './TextFieldValidate';
96
- *
97
- * const CepExample: React.FC = () => {
98
- * const [cep, setCep] = React.useState('');
99
- *
100
- * const handleCepBlur = async (event: React.FocusEvent<HTMLInputElement>) => {
101
- * const raw = event.target.value || '';
102
- * const onlyDigits = raw.replace(/\D/g, '');
89
+ * import TextFieldValidate from '@/components/TextFieldValidate';
103
90
  *
104
- * if (onlyDigits.length === 8) {
105
- * // Exemplo de chamada de API (ViaCEP)
106
- * // const response = await fetch(`https://viacep.com.br/ws/${onlyDigits}/json/`);
107
- * // const data = await response.json();
108
- * // ...preencher outros campos do formulário...
109
- * console.log('CEP para buscar:', onlyDigits);
110
- * }
111
- * };
91
+ * const Example = () => {
92
+ * const [email, setEmail] = React.useState('');
112
93
  *
113
94
  * return (
114
95
  * <TextFieldValidate
115
- * id="cep-input"
116
- * label="CEP"
117
- * placeholder="Digite o CEP"
118
- * value={cep}
119
- * onChange={(e) => setCep(e.target.value)}
120
- * onBlur={handleCepBlur}
121
- * pattern={/^\d{5}-?\d{3}$/}
122
- * patternMessage="CEP inválido"
96
+ * label="E-mail"
97
+ * placeholder="Digite seu e-mail"
98
+ * value={email}
99
+ * onChange={(e) => setEmail(e.target.value)}
123
100
  * required
101
+ * pattern={/^[^\s@]+@[^\s@]+\.[^\s@]+$/}
102
+ * patternMessage="E-mail inválido"
124
103
  * showErrorOn="blur"
125
- * maxLength={9}
104
+ * maxLength={120}
105
+ * borderRadius="6px"
126
106
  * />
127
107
  * );
128
108
  * };
129
109
  * ```
130
110
  */
131
- const TextFieldValidate = ({ id, label, background, colorText = '#000', borderRadius, boxShadow, borderColor, placeholder, disabled = false, value = '', onChange, onBlur, multiline = false, rows = 3, required = false, requiredMessage = 'Campo obrigatório', minLength, pattern, patternMessage = 'Formato inválido', validate, showErrorOn = 'blur', maxLength, }) => {
111
+ const TextFieldValidate = ({ id, label, background = '#fff', colorText = '#000', colorFocused = '#1976d2', borderRadius = '0', boxShadow = 'none', borderColor = '#ccc', placeholder, disabled = false, value = '', onChange, onBlur, multiline = false, rows = 3, required = false, requiredMessage = 'Campo obrigatório', minLength, pattern, patternMessage = 'Formato inválido', validate, showErrorOn = 'blur', maxLength, padding = '4px 8px' }) => {
132
112
  const [touched, setTouched] = React.useState(false);
133
113
  const errorMessage = React.useMemo(() => {
134
114
  if (showErrorOn === 'change') {
@@ -170,7 +150,7 @@ const TextFieldValidate = ({ id, label, background, colorText = '#000', borderRa
170
150
  onBlur(event);
171
151
  }
172
152
  };
173
- return (_jsx(StyledTextField, { id: id, label: label, placeholder: placeholder, value: value, onChange: onChange, onBlur: handleBlur, background: background, colorText: colorText, borderRadius: borderRadius, boxShadow: boxShadow, borderColor: borderColor, disabled: disabled, multiline: multiline, required: required, rows: multiline ? rows : undefined, fullWidth: true, error: Boolean(errorMessage), helperText: errorMessage || ' ', slotProps: {
153
+ return (_jsx(StyledTextField, { id: id, label: label, placeholder: placeholder, value: value, onChange: onChange, onBlur: handleBlur, background: background, colorText: colorText, colorFocused: colorFocused, borderRadius: borderRadius, boxShadow: boxShadow, borderColor: borderColor, padding: padding, disabled: disabled, multiline: multiline, required: required, rows: multiline ? rows : undefined, fullWidth: true, error: Boolean(errorMessage), helperText: errorMessage || ' ', slotProps: {
174
154
  input: {
175
155
  inputProps: typeof maxLength === 'number' ? { maxLength } : undefined,
176
156
  },
@@ -1 +1 @@
1
- {"version":3,"file":"TextFieldValidate.js","sourceRoot":"","sources":["../../src/components/TextFieldValidate.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextFieldValidate.js","sourceRoot":"","sources":["../../src/components/TextFieldValidate.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import React from 'react';
2
+ import { TypographyVariant } from '@mui/material';
3
+ import { ColorProps } from '@/types/ColorProps';
4
+ import { BorderProps } from '@/types/BorderProps';
5
+ import { LayoutProps } from '@/types/LayoutProps';
6
+ import { TextProps } from '@/types/TextProps';
7
+ interface GoogleButtonProps extends ColorProps, BorderProps, LayoutProps, TextProps {
8
+ text: string;
9
+ variant?: TypographyVariant;
10
+ endpoint: string;
11
+ messageError?: string;
12
+ errorColor?: string;
13
+ background?: string;
14
+ width?: string;
15
+ height?: string;
16
+ padding?: string;
17
+ margin?: string;
18
+ border?: string;
19
+ borderRadius?: string;
20
+ boxShadow?: string;
21
+ }
22
+ /**
23
+ * Componente de botão que redireciona o usuário para um endpoint externo
24
+ * (ex: autenticação com Google). Durante o clique, o botão entra em estado
25
+ * de loading e, caso ocorra algum erro, exibe uma mensagem abaixo do botão.
26
+ *
27
+ * @param {string} text Texto exibido dentro do botão.
28
+ * @param {TypographyVariant} [variant='body1'] Variante do Typography usada no texto do botão.
29
+ * @param {string} endpoint URL para a qual o usuário será redirecionado ao clicar no botão.
30
+ * @param {string} [messageError='Ocorreu um erro ao processar sua solicitação.'] Mensagem exibida em caso de erro.
31
+ * @param {string} [errorColor='#d32f2f'] Cor do texto da mensagem de erro.
32
+ * @param {string} [width='auto'] Largura do botão.
33
+ * @param {string} [height='auto'] Altura do botão.
34
+ * @param {string} [padding='8px 24px'] Espaçamento interno do botão.
35
+ * @param {string} [margin='0'] Margem externa do botão.
36
+ * @param {string} [background='transparent'] Cor de fundo do botão.
37
+ * @param {string} [border='none'] Borda do botão.
38
+ * @param {string | number} [borderRadius='8px'] Raio da borda do botão.
39
+ * @param {string} [boxShadow='none'] Sombra aplicada ao botão.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * import { GoogleButton } from '@/components/GoogleButton';
44
+ *
45
+ * const Example = () => {
46
+ * return (
47
+ * <GoogleButton
48
+ * text="Continuar com Google"
49
+ * endpoint="/api/auth/google"
50
+ * width="100%"
51
+ * height="40px"
52
+ * background="transparent"
53
+ * border="1px solid #ccc"
54
+ * borderRadius="6px"
55
+ * boxShadow="0 2px 6px rgba(0,0,0,0.1)"
56
+ * messageError="Falha ao autenticar com o Google."
57
+ * errorColor="#d32f2f"
58
+ * />
59
+ * );
60
+ * };
61
+ * ```
62
+ */
63
+ declare const GoogleButton: React.FC<GoogleButtonProps>;
64
+ export default GoogleButton;
@@ -0,0 +1,100 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { Button, styled, Typography, Box } from '@mui/material';
4
+ const ButtonFormStyled = styled(Button, {
5
+ shouldForwardProp: (prop) => ![
6
+ 'width',
7
+ 'height',
8
+ 'padding',
9
+ 'margin',
10
+ 'background',
11
+ 'border',
12
+ 'borderRadius',
13
+ 'boxShadow',
14
+ ].includes(prop),
15
+ })(({ width, height, padding, margin, background, border, borderRadius, boxShadow, }) => ({
16
+ // Layout
17
+ width: width,
18
+ height: height,
19
+ padding: padding,
20
+ margin: margin,
21
+ // Visual
22
+ background: background,
23
+ border: border,
24
+ borderRadius: borderRadius,
25
+ boxShadow: boxShadow,
26
+ textTransform: 'none',
27
+ cursor: 'pointer',
28
+ '&:hover': {
29
+ opacity: 0.9,
30
+ boxShadow: boxShadow || 'none',
31
+ },
32
+ '&:disabled': {
33
+ opacity: 0.6,
34
+ cursor: 'not-allowed',
35
+ },
36
+ }));
37
+ /**
38
+ * Componente de botão que redireciona o usuário para um endpoint externo
39
+ * (ex: autenticação com Google). Durante o clique, o botão entra em estado
40
+ * de loading e, caso ocorra algum erro, exibe uma mensagem abaixo do botão.
41
+ *
42
+ * @param {string} text Texto exibido dentro do botão.
43
+ * @param {TypographyVariant} [variant='body1'] Variante do Typography usada no texto do botão.
44
+ * @param {string} endpoint URL para a qual o usuário será redirecionado ao clicar no botão.
45
+ * @param {string} [messageError='Ocorreu um erro ao processar sua solicitação.'] Mensagem exibida em caso de erro.
46
+ * @param {string} [errorColor='#d32f2f'] Cor do texto da mensagem de erro.
47
+ * @param {string} [width='auto'] Largura do botão.
48
+ * @param {string} [height='auto'] Altura do botão.
49
+ * @param {string} [padding='8px 24px'] Espaçamento interno do botão.
50
+ * @param {string} [margin='0'] Margem externa do botão.
51
+ * @param {string} [background='transparent'] Cor de fundo do botão.
52
+ * @param {string} [border='none'] Borda do botão.
53
+ * @param {string | number} [borderRadius='8px'] Raio da borda do botão.
54
+ * @param {string} [boxShadow='none'] Sombra aplicada ao botão.
55
+ *
56
+ * @example
57
+ * ```tsx
58
+ * import { GoogleButton } from '@/components/GoogleButton';
59
+ *
60
+ * const Example = () => {
61
+ * return (
62
+ * <GoogleButton
63
+ * text="Continuar com Google"
64
+ * endpoint="/api/auth/google"
65
+ * width="100%"
66
+ * height="40px"
67
+ * background="transparent"
68
+ * border="1px solid #ccc"
69
+ * borderRadius="6px"
70
+ * boxShadow="0 2px 6px rgba(0,0,0,0.1)"
71
+ * messageError="Falha ao autenticar com o Google."
72
+ * errorColor="#d32f2f"
73
+ * />
74
+ * );
75
+ * };
76
+ * ```
77
+ */
78
+ const GoogleButton = ({ text, variant = 'body1', endpoint, messageError = 'Ocorreu um erro ao processar sua solicitação.', errorColor = '#d32f2f', boxShadow = 'none', width = 'auto', height = 'auto', padding = '8px 24px', margin = '0', background = "transparent", border = 'none', borderRadius, }) => {
79
+ const [loading, setLoading] = React.useState(false);
80
+ const [errorMsg, setErrorMsg] = React.useState(null);
81
+ const handleClick = async () => {
82
+ setErrorMsg(null);
83
+ setLoading(true);
84
+ try {
85
+ window.location.href = endpoint;
86
+ }
87
+ catch (e) {
88
+ setErrorMsg(messageError);
89
+ }
90
+ finally {
91
+ setLoading(false);
92
+ }
93
+ };
94
+ return (_jsxs(Box, { children: [_jsx(ButtonFormStyled, { onClick: handleClick, disabled: loading, width: width, height: height, padding: padding, margin: margin, background: background, border: border, borderRadius: borderRadius, boxShadow: boxShadow, children: loading
95
+ ? 'Carregando...'
96
+ : _jsx(Typography, { variant: variant, children: text }) }), errorMsg && (_jsx(Typography, { role: "alert", variant: "body2", sx: { mt: 1 }, color: errorColor, children: errorMsg }))] }));
97
+ };
98
+ GoogleButton.displayName = 'GoogleButton';
99
+ export default GoogleButton;
100
+ //# sourceMappingURL=GoogleButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoogleButton.js","sourceRoot":"","sources":["../../../src/components/login/GoogleButton.tsx"],"names":[],"mappings":"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"}
@@ -3,10 +3,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState } from 'react';
4
4
  import { styled } from '@mui/material/styles';
5
5
  import { Box, Divider, IconButton, InputAdornment, Typography } from '@mui/material';
6
- import { ButtonFormStyled, LinkFormStyled, TextFieldStyled } from './FormStyled';
7
6
  import VisibilityOffIcon from '@mui/icons-material/VisibilityOff';
8
7
  import VisibilityIcon from '@mui/icons-material/Visibility';
9
8
  import GoogleIcon from '@mui/icons-material/Google';
9
+ import { ButtonFormStyled, LinkFormStyled, TextFieldStyled } from '../FormStyled';
10
10
  const FormContainer = styled('div')(() => ({
11
11
  display: 'flex',
12
12
  flexDirection: 'column',
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginForm.js","sourceRoot":"","sources":["../../../src/components/login/LoginForm.tsx"],"names":[],"mappings":"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"}