@pipelinesolucoes/form 1.2.0-beta.31 → 1.2.0-beta.33

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 (34) hide show
  1. package/README.md +3 -8
  2. package/dist/components/FormMessage.d.ts +268 -0
  3. package/dist/components/FormMessage.js +333 -0
  4. package/dist/components/FormMessage.js.map +1 -0
  5. package/dist/components/GoogleButton.js.map +1 -0
  6. package/dist/components/{login/StyleLogin.js → StyleForm.js} +1 -1
  7. package/dist/components/StyleForm.js.map +1 -0
  8. package/dist/components/recaptcha/RecaptchaForm.js +1 -1
  9. package/dist/components/recaptcha/RecaptchaForm.js.map +1 -1
  10. package/dist/index.d.ts +2 -5
  11. package/dist/index.js +2 -5
  12. package/dist/index.js.map +1 -1
  13. package/dist/theme.js +10 -30
  14. package/dist/theme.js.map +1 -1
  15. package/dist/tsconfig.tsbuildinfo +1 -1
  16. package/dist/{components/login → types}/ClickResult.d.ts +1 -1
  17. package/dist/types/ClickResult.js.map +1 -0
  18. package/package.json +2 -2
  19. package/dist/components/login/ClickResult.js.map +0 -1
  20. package/dist/components/login/FormLogin.d.ts +0 -150
  21. package/dist/components/login/FormLogin.js +0 -222
  22. package/dist/components/login/FormLogin.js.map +0 -1
  23. package/dist/components/login/FormPasswordRecovery.d.ts +0 -129
  24. package/dist/components/login/FormPasswordRecovery.js +0 -197
  25. package/dist/components/login/FormPasswordRecovery.js.map +0 -1
  26. package/dist/components/login/FormSignUp.d.ts +0 -147
  27. package/dist/components/login/FormSignUp.js +0 -216
  28. package/dist/components/login/FormSignUp.js.map +0 -1
  29. package/dist/components/login/GoogleButton.js.map +0 -1
  30. package/dist/components/login/StyleLogin.js.map +0 -1
  31. /package/dist/components/{login/GoogleButton.d.ts → GoogleButton.d.ts} +0 -0
  32. /package/dist/components/{login/GoogleButton.js → GoogleButton.js} +0 -0
  33. /package/dist/components/{login/StyleLogin.d.ts → StyleForm.d.ts} +0 -0
  34. /package/dist/{components/login → types}/ClickResult.js +0 -0
package/README.md CHANGED
@@ -14,14 +14,9 @@ A biblioteca inclui os seguintes componentes:
14
14
  Componente de botão que redireciona o usuário para um endpoint externo (ex: autenticação com Google).
15
15
  Durante o clique, o botão entra em estado de loading e, caso ocorra algum erro, exibe uma mensagem abaixo do botão.
16
16
 
17
- - **FormLogin**
18
- Componente de formulário de login com suporte a autenticação via Google e login por email/senha.
19
- Inclui validação básica de email, exibição de mensagens de erro/sucesso retornadas pelo handler `onClick` e
20
- customização visual via props (container, campos, botão e links).
21
-
22
- - **FormPasswordRecovery**
23
- Componente de formulário para recuperação de senha via e-mail.
24
- Faz a validação do e-mail, dispara um `onSubmit` assíncrono (obrigatório) e exibe a mensagem retornada.
17
+ - **FormMessage**
18
+ Componente de formulário para envio de mensagem.
19
+ Faz a validação do e-mail, telefone e exibe a mensagem retornada.
25
20
 
26
21
  - **TextFieldPassword**
27
22
  Componente de campo de senha baseado no TextField do Material UI, com botão para alternar entre mostrar/ocultar a senha.
@@ -0,0 +1,268 @@
1
+ import React from 'react';
2
+ import { TypographyVariant } from '@mui/material/styles';
3
+ import { SvgIconProps } from '@mui/material';
4
+ import { ButtonProps } from '../types/ButtonProps';
5
+ import { FieldProps } from '@/types/FieldProps';
6
+ import { BorderProps, ColorProps, LayoutProps } from '@pipelinesolucoes/theme';
7
+ import { ClickResult } from '../types/ClickResult';
8
+ export interface FormMessageProps extends ColorProps, BorderProps, ButtonProps, FieldProps, LayoutProps {
9
+ Icon?: React.ElementType<SvgIconProps>;
10
+ titulo?: () => React.ReactElement;
11
+ textButton?: string;
12
+ variantButton?: TypographyVariant;
13
+ rowsMessage?: number;
14
+ children?: React.ReactNode;
15
+ onClick?: (data: {
16
+ nome: string;
17
+ email: string;
18
+ telefone: string;
19
+ mensagem: string;
20
+ }) => Promise<ClickResult> | ClickResult;
21
+ }
22
+ /**
23
+ * Componente de formulário para envio de mensagem (contato), com campos controlados internamente
24
+ * (**nome**, **email**, **telefone** e **mensagem**) e submissão via callback assíncrono (`onClick`).
25
+ *
26
+ * Funcionalidades principais:
27
+ * - Renderiza campos de texto com validação (via `TextFieldValidate`) e feedback de erro ao usuário.
28
+ * - Validação local mínima para **email** antes de disparar o `onClick`.
29
+ * - Exibe mensagem de retorno (sucesso/erro) após execução do `onClick`, com cor configurável.
30
+ * - Suporta cabeçalho opcional com ícone (`Icon`) e título customizado (`titulo`).
31
+ * - Permite conteúdo adicional via `children` abaixo do feedback do formulário.
32
+ *
33
+ * Tokens de estilo (ordem de prioridade):
34
+ * - Container do formulário (`StyledRoot`):
35
+ * - `background` → `theme.pipelinesolucoes.forms.background` → `'transparent'`
36
+ * - `borderRadius` → `theme.pipelinesolucoes.forms.borderRadius` → `'0'`
37
+ * - `border` → `theme.pipelinesolucoes.forms.border` → `'0'`
38
+ * - `boxShadow` → `theme.pipelinesolucoes.forms.boxShadow` → `'none'`
39
+ * - `maxWidth` → *(sem token de theme neste componente)* → *(comportamento do styled component)*
40
+ * - Campos (`TextFieldValidate`), aplicados igualmente a todos os campos:
41
+ * - `backgroundField` → `theme.pipelinesolucoes.forms.field.background` → `undefined`
42
+ * - `colorField` → `theme.pipelinesolucoes.forms.field.color` → `undefined`
43
+ * - `borderRadiusField` → `theme.pipelinesolucoes.forms.field.borderRadius` → `undefined`
44
+ * - `boxShadowField` → `theme.pipelinesolucoes.forms.field.boxShadow` → `undefined`
45
+ * - `borderColorField` → `theme.pipelinesolucoes.forms.field.borderColor` → `undefined`
46
+ * - `paddingField` → `theme.pipelinesolucoes.forms.field.padding` → `undefined`
47
+ * - `marginField` → `theme.pipelinesolucoes.forms.field.margin` → `undefined`
48
+ * - `heightField` → `theme.pipelinesolucoes.forms.field.height` → `undefined`
49
+ * - Botão (`ButtonFormStyled`):
50
+ * - `backgroundButton` → `theme.pipelinesolucoes.forms.button.background` → `undefined`
51
+ * - `backgroundHoverButton` → `theme.pipelinesolucoes.forms.button.backgroundHover` → `undefined`
52
+ * - `colorButton` → `theme.pipelinesolucoes.forms.button.color` → `undefined`
53
+ * - `colorHoverButton` → `theme.pipelinesolucoes.forms.button.colorHover` → `undefined`
54
+ * - `borderRadiusButton` → `theme.pipelinesolucoes.forms.button.borderRadius` → `undefined`
55
+ * - `boxShadowButton` → `theme.pipelinesolucoes.forms.button.boxShadow` → `undefined`
56
+ * - `paddingButton` → `theme.pipelinesolucoes.forms.button.padding` → `undefined`
57
+ * - `borderButton` → *(prop do componente)* → `'none'`
58
+ * - `widthButton` → *(prop do componente)* → `'auto'`
59
+ * - `heightButton` → *(prop do componente)* → `'auto'`
60
+ * - `marginButton` → *(prop do componente)* → `'0'`
61
+ *
62
+ * Tipografia:
63
+ * - O texto do botão é renderizado com `Typography` do Material UI.
64
+ * - Ordem de prioridade:
65
+ * - `variantButton` → *(fallback interno)* `'body1'`
66
+ * - Observação: `variantButton` aceita qualquer `TypographyVariant` compatível com o theme do Material UI.
67
+ *
68
+ * @param {import('@mui/material/styles').TypographyVariant} [variantButton]
69
+ * Variante tipográfica do texto do botão (`Typography variant`).
70
+ * Ordem: `variantButton` → `'body1'`.
71
+ *
72
+ * @param {string} [textButton]
73
+ * Texto exibido no botão quando não está carregando.
74
+ * Padrão: `'Enviar'`.
75
+ *
76
+ * @param {number} [rowsMessage]
77
+ * Número de linhas do campo **Mensagem** quando `multiline` está ativo.
78
+ * Padrão: `5`.
79
+ *
80
+ * @param {React.ElementType<import('@mui/material').SvgIconProps>} [Icon]
81
+ * Componente de ícone (ex.: `EmailOutlined`, `ChatOutlined`) renderizado no cabeçalho do formulário.
82
+ * Renderizado apenas quando fornecido.
83
+ *
84
+ * @param {() => React.ReactElement} [titulo]
85
+ * Função que retorna o elemento React usado como título no cabeçalho do formulário.
86
+ * Renderizado apenas quando fornecido.
87
+ *
88
+ * @param {React.ReactNode} [children]
89
+ * Conteúdo adicional renderizado ao final do componente (abaixo da mensagem de feedback da API).
90
+ *
91
+ * @param {(data: { nome: string; email: string; telefone: string; mensagem: string; }) => (Promise<import('../types/ClickResult').ClickResult> | import('../types/ClickResult').ClickResult)} [onClick]
92
+ * Callback acionado ao clicar no botão (submissão). Recebe os valores atuais dos campos do formulário.
93
+ * - Se ausente, o componente exibe a mensagem: **"Nenhuma ação foi configurada para o botão."**
94
+ * - Se retornar `{ success: true }`, exibe `message` com cor `color` (ou `theme.palette.success.main` como fallback).
95
+ * - Se retornar `{ success: false }`, exibe `message` com cor `color` (ou `theme.palette.error.main` como fallback).
96
+ * - Em exceção (`throw`), exibe: **"Erro inesperado ao processar a solicitação."** com `theme.palette.error.main`.
97
+ *
98
+ * Estilo / Aparência:
99
+ * @param {import('@pipelinesolucoes/theme').ColorProps['background']} [background]
100
+ * Background do container do formulário.
101
+ * Ordem: `background` → `theme.pipelinesolucoes.forms.background` → `'transparent'`.
102
+ *
103
+ * @param {import('@pipelinesolucoes/theme').BorderProps['borderRadius']} [borderRadius]
104
+ * Raio de borda do container do formulário.
105
+ * Ordem: `borderRadius` → `theme.pipelinesolucoes.forms.borderRadius` → `'0'`.
106
+ *
107
+ * @param {import('@pipelinesolucoes/theme').BorderProps['border']} [border]
108
+ * Borda do container do formulário.
109
+ * Ordem: `border` → `theme.pipelinesolucoes.forms.border` → `'0'`.
110
+ *
111
+ * @param {import('@pipelinesolucoes/theme').LayoutProps['boxShadow']} [boxShadow]
112
+ * Sombra do container do formulário.
113
+ * Ordem: `boxShadow` → `theme.pipelinesolucoes.forms.boxShadow` → `'none'`.
114
+ *
115
+ * @param {import('@pipelinesolucoes/theme').LayoutProps['maxWidth']} [maxWidth]
116
+ * Largura máxima do container do formulário. *(Sem token de theme aplicado diretamente neste componente.)*
117
+ *
118
+ * @param {import('@/types/FieldProps').FieldProps['backgroundField']} [backgroundField]
119
+ * Background aplicado aos campos (`TextFieldValidate`).
120
+ * Ordem: `backgroundField` → `theme.pipelinesolucoes.forms.field.background` → `undefined`.
121
+ *
122
+ * @param {import('@/types/FieldProps').FieldProps['colorField']} [colorField]
123
+ * Cor do texto aplicada aos campos (`TextFieldValidate`).
124
+ * Ordem: `colorField` → `theme.pipelinesolucoes.forms.field.color` → `undefined`.
125
+ *
126
+ * @param {import('@/types/FieldProps').FieldProps['borderRadiusField']} [borderRadiusField]
127
+ * Raio de borda aplicado aos campos (`TextFieldValidate`).
128
+ * Ordem: `borderRadiusField` → `theme.pipelinesolucoes.forms.field.borderRadius` → `undefined`.
129
+ *
130
+ * @param {import('@/types/FieldProps').FieldProps['boxShadowField']} [boxShadowField]
131
+ * Sombra aplicada aos campos (`TextFieldValidate`).
132
+ * Ordem: `boxShadowField` → `theme.pipelinesolucoes.forms.field.boxShadow` → `undefined`.
133
+ *
134
+ * @param {import('@/types/FieldProps').FieldProps['borderColorField']} [borderColorField]
135
+ * Cor da borda aplicada aos campos (`TextFieldValidate`).
136
+ * Ordem: `borderColorField` → `theme.pipelinesolucoes.forms.field.borderColor` → `undefined`.
137
+ *
138
+ * @param {import('@/types/FieldProps').FieldProps['paddingField']} [paddingField]
139
+ * Padding aplicado aos campos (`TextFieldValidate`).
140
+ * Ordem: `paddingField` → `theme.pipelinesolucoes.forms.field.padding` → `undefined`.
141
+ *
142
+ * @param {import('@/types/FieldProps').FieldProps['marginField']} [marginField]
143
+ * Margem aplicada aos campos (`TextFieldValidate`).
144
+ * Ordem: `marginField` → `theme.pipelinesolucoes.forms.field.margin` → `undefined`.
145
+ *
146
+ * @param {import('@/types/FieldProps').FieldProps['heightField']} [heightField]
147
+ * Altura aplicada aos campos (`TextFieldValidate`).
148
+ * Ordem: `heightField` → `theme.pipelinesolucoes.forms.field.height` → `undefined`.
149
+ *
150
+ * @param {import('../types/ButtonProps').ButtonProps['backgroundButton']} [backgroundButton]
151
+ * Background do botão.
152
+ * Ordem: `backgroundButton` → `theme.pipelinesolucoes.forms.button.background` → `undefined`.
153
+ *
154
+ * @param {import('../types/ButtonProps').ButtonProps['backgroundHoverButton']} [backgroundHoverButton]
155
+ * Background do botão em hover.
156
+ * Ordem: `backgroundHoverButton` → `theme.pipelinesolucoes.forms.button.backgroundHover` → `undefined`.
157
+ *
158
+ * @param {import('../types/ButtonProps').ButtonProps['colorButton']} [colorButton]
159
+ * Cor do texto do botão.
160
+ * Ordem: `colorButton` → `theme.pipelinesolucoes.forms.button.color` → `undefined`.
161
+ *
162
+ * @param {import('../types/ButtonProps').ButtonProps['colorHoverButton']} [colorHoverButton]
163
+ * Cor do texto do botão em hover.
164
+ * Ordem: `colorHoverButton` → `theme.pipelinesolucoes.forms.button.colorHover` → `undefined`.
165
+ *
166
+ * @param {import('../types/ButtonProps').ButtonProps['borderRadiusButton']} [borderRadiusButton]
167
+ * Raio de borda do botão.
168
+ * Ordem: `borderRadiusButton` → `theme.pipelinesolucoes.forms.button.borderRadius` → `undefined`.
169
+ *
170
+ * @param {import('../types/ButtonProps').ButtonProps['borderButton']} [borderButton]
171
+ * Borda do botão.
172
+ * Ordem: `borderButton` → `'none'`.
173
+ *
174
+ * @param {import('../types/ButtonProps').ButtonProps['boxShadowButton']} [boxShadowButton]
175
+ * Sombra do botão.
176
+ * Ordem: `boxShadowButton` → `theme.pipelinesolucoes.forms.button.boxShadow` → `undefined`.
177
+ *
178
+ * @param {import('../types/ButtonProps').ButtonProps['widthButton']} [widthButton]
179
+ * Largura do botão.
180
+ * Ordem: `widthButton` → `'auto'`.
181
+ *
182
+ * @param {import('../types/ButtonProps').ButtonProps['heightButton']} [heightButton]
183
+ * Altura do botão.
184
+ * Ordem: `heightButton` → `'auto'`.
185
+ *
186
+ * @param {import('../types/ButtonProps').ButtonProps['paddingButton']} [paddingButton]
187
+ * Padding do botão.
188
+ * Ordem: `paddingButton` → `theme.pipelinesolucoes.forms.button.padding` → `undefined`.
189
+ *
190
+ * @param {import('../types/ButtonProps').ButtonProps['marginButton']} [marginButton]
191
+ * Margem do botão.
192
+ * Ordem: `marginButton` → `'0'`.
193
+ *
194
+ * Validação:
195
+ * - Email: validação local por regex simples (`/\S+@\S+\.\S+/`) antes de executar `onClick`.
196
+ * - Campos: cada `TextFieldValidate` recebe `required` e `showErrorOn="blur"`, além de validações específicas:
197
+ * - `validateEmailMessage` para email.
198
+ * - `validateTelefoneMessage` para telefone.
199
+ *
200
+ * Eventos:
201
+ * - Clique no botão: dispara `handleClick`, que:
202
+ * - Prevê `preventDefault()` no evento de formulário.
203
+ * - Bloqueia envio se email inválido e exibe mensagem padrão de erro.
204
+ * - Desabilita o botão enquanto `isLoading` estiver `true`, exibindo "Enviando...".
205
+ *
206
+ * @example
207
+ * ```tsx
208
+ * import FormMessage from './FormMessage';
209
+ * import EmailOutlined from '@mui/icons-material/EmailOutlined';
210
+ *
211
+ * export function Contato() {
212
+ * return (
213
+ * <FormMessage
214
+ * Icon={EmailOutlined}
215
+ * titulo={() => <strong>Fale conosco</strong>}
216
+ * textButton="Enviar mensagem"
217
+ * variantButton="body2"
218
+ * rowsMessage={6}
219
+ * onClick={async ({ nome, email, telefone, mensagem }) => {
220
+ * // Exemplo: chamada de API
221
+ * const ok = Boolean(nome && email && telefone && mensagem);
222
+ * return ok
223
+ * ? { success: true, message: 'Mensagem enviada com sucesso!' }
224
+ * : { success: false, message: 'Não foi possível enviar a mensagem.' };
225
+ * }}
226
+ * >
227
+ * <small>Responderemos em até 1 dia útil.</small>
228
+ * </FormMessage>
229
+ * );
230
+ * }
231
+ * ```
232
+ *
233
+ * @example
234
+ * ```ts
235
+ * // Exemplo de configuração no theme (Pipeline)
236
+ * const theme = {
237
+ * pipelinesolucoes: {
238
+ * forms: {
239
+ * background: 'transparent',
240
+ * borderRadius: '8px',
241
+ * border: '1px solid rgba(0,0,0,0.12)',
242
+ * boxShadow: 'none',
243
+ * field: {
244
+ * background: '#fff',
245
+ * color: '#111',
246
+ * borderRadius: '8px',
247
+ * borderColor: 'rgba(0,0,0,0.23)',
248
+ * boxShadow: 'none',
249
+ * padding: '12px',
250
+ * margin: '0 0 12px 0',
251
+ * height: '48px',
252
+ * },
253
+ * button: {
254
+ * background: '#111',
255
+ * backgroundHover: '#222',
256
+ * color: '#fff',
257
+ * colorHover: '#fff',
258
+ * borderRadius: '8px',
259
+ * boxShadow: 'none',
260
+ * padding: '12px 16px',
261
+ * },
262
+ * },
263
+ * },
264
+ * };
265
+ * ```
266
+ */
267
+ declare const FormMessage: React.FC<FormMessageProps>;
268
+ export default FormMessage;
@@ -0,0 +1,333 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { useTheme } from '@mui/material/styles';
5
+ import { Typography } from '@mui/material';
6
+ import { ButtonFormStyled } from '../style/ButtonFormStyled';
7
+ import { validateEmailMessage } from '../utils/validateEmail';
8
+ import TextFieldValidate from './TextFieldValidate';
9
+ import { DivTitulo, FormContainer, StyledRoot } from './StyleForm';
10
+ import { validateTelefoneMessage } from '../utils/validateTelefone';
11
+ /**
12
+ * Componente de formulário para envio de mensagem (contato), com campos controlados internamente
13
+ * (**nome**, **email**, **telefone** e **mensagem**) e submissão via callback assíncrono (`onClick`).
14
+ *
15
+ * Funcionalidades principais:
16
+ * - Renderiza campos de texto com validação (via `TextFieldValidate`) e feedback de erro ao usuário.
17
+ * - Validação local mínima para **email** antes de disparar o `onClick`.
18
+ * - Exibe mensagem de retorno (sucesso/erro) após execução do `onClick`, com cor configurável.
19
+ * - Suporta cabeçalho opcional com ícone (`Icon`) e título customizado (`titulo`).
20
+ * - Permite conteúdo adicional via `children` abaixo do feedback do formulário.
21
+ *
22
+ * Tokens de estilo (ordem de prioridade):
23
+ * - Container do formulário (`StyledRoot`):
24
+ * - `background` → `theme.pipelinesolucoes.forms.background` → `'transparent'`
25
+ * - `borderRadius` → `theme.pipelinesolucoes.forms.borderRadius` → `'0'`
26
+ * - `border` → `theme.pipelinesolucoes.forms.border` → `'0'`
27
+ * - `boxShadow` → `theme.pipelinesolucoes.forms.boxShadow` → `'none'`
28
+ * - `maxWidth` → *(sem token de theme neste componente)* → *(comportamento do styled component)*
29
+ * - Campos (`TextFieldValidate`), aplicados igualmente a todos os campos:
30
+ * - `backgroundField` → `theme.pipelinesolucoes.forms.field.background` → `undefined`
31
+ * - `colorField` → `theme.pipelinesolucoes.forms.field.color` → `undefined`
32
+ * - `borderRadiusField` → `theme.pipelinesolucoes.forms.field.borderRadius` → `undefined`
33
+ * - `boxShadowField` → `theme.pipelinesolucoes.forms.field.boxShadow` → `undefined`
34
+ * - `borderColorField` → `theme.pipelinesolucoes.forms.field.borderColor` → `undefined`
35
+ * - `paddingField` → `theme.pipelinesolucoes.forms.field.padding` → `undefined`
36
+ * - `marginField` → `theme.pipelinesolucoes.forms.field.margin` → `undefined`
37
+ * - `heightField` → `theme.pipelinesolucoes.forms.field.height` → `undefined`
38
+ * - Botão (`ButtonFormStyled`):
39
+ * - `backgroundButton` → `theme.pipelinesolucoes.forms.button.background` → `undefined`
40
+ * - `backgroundHoverButton` → `theme.pipelinesolucoes.forms.button.backgroundHover` → `undefined`
41
+ * - `colorButton` → `theme.pipelinesolucoes.forms.button.color` → `undefined`
42
+ * - `colorHoverButton` → `theme.pipelinesolucoes.forms.button.colorHover` → `undefined`
43
+ * - `borderRadiusButton` → `theme.pipelinesolucoes.forms.button.borderRadius` → `undefined`
44
+ * - `boxShadowButton` → `theme.pipelinesolucoes.forms.button.boxShadow` → `undefined`
45
+ * - `paddingButton` → `theme.pipelinesolucoes.forms.button.padding` → `undefined`
46
+ * - `borderButton` → *(prop do componente)* → `'none'`
47
+ * - `widthButton` → *(prop do componente)* → `'auto'`
48
+ * - `heightButton` → *(prop do componente)* → `'auto'`
49
+ * - `marginButton` → *(prop do componente)* → `'0'`
50
+ *
51
+ * Tipografia:
52
+ * - O texto do botão é renderizado com `Typography` do Material UI.
53
+ * - Ordem de prioridade:
54
+ * - `variantButton` → *(fallback interno)* `'body1'`
55
+ * - Observação: `variantButton` aceita qualquer `TypographyVariant` compatível com o theme do Material UI.
56
+ *
57
+ * @param {import('@mui/material/styles').TypographyVariant} [variantButton]
58
+ * Variante tipográfica do texto do botão (`Typography variant`).
59
+ * Ordem: `variantButton` → `'body1'`.
60
+ *
61
+ * @param {string} [textButton]
62
+ * Texto exibido no botão quando não está carregando.
63
+ * Padrão: `'Enviar'`.
64
+ *
65
+ * @param {number} [rowsMessage]
66
+ * Número de linhas do campo **Mensagem** quando `multiline` está ativo.
67
+ * Padrão: `5`.
68
+ *
69
+ * @param {React.ElementType<import('@mui/material').SvgIconProps>} [Icon]
70
+ * Componente de ícone (ex.: `EmailOutlined`, `ChatOutlined`) renderizado no cabeçalho do formulário.
71
+ * Renderizado apenas quando fornecido.
72
+ *
73
+ * @param {() => React.ReactElement} [titulo]
74
+ * Função que retorna o elemento React usado como título no cabeçalho do formulário.
75
+ * Renderizado apenas quando fornecido.
76
+ *
77
+ * @param {React.ReactNode} [children]
78
+ * Conteúdo adicional renderizado ao final do componente (abaixo da mensagem de feedback da API).
79
+ *
80
+ * @param {(data: { nome: string; email: string; telefone: string; mensagem: string; }) => (Promise<import('../types/ClickResult').ClickResult> | import('../types/ClickResult').ClickResult)} [onClick]
81
+ * Callback acionado ao clicar no botão (submissão). Recebe os valores atuais dos campos do formulário.
82
+ * - Se ausente, o componente exibe a mensagem: **"Nenhuma ação foi configurada para o botão."**
83
+ * - Se retornar `{ success: true }`, exibe `message` com cor `color` (ou `theme.palette.success.main` como fallback).
84
+ * - Se retornar `{ success: false }`, exibe `message` com cor `color` (ou `theme.palette.error.main` como fallback).
85
+ * - Em exceção (`throw`), exibe: **"Erro inesperado ao processar a solicitação."** com `theme.palette.error.main`.
86
+ *
87
+ * Estilo / Aparência:
88
+ * @param {import('@pipelinesolucoes/theme').ColorProps['background']} [background]
89
+ * Background do container do formulário.
90
+ * Ordem: `background` → `theme.pipelinesolucoes.forms.background` → `'transparent'`.
91
+ *
92
+ * @param {import('@pipelinesolucoes/theme').BorderProps['borderRadius']} [borderRadius]
93
+ * Raio de borda do container do formulário.
94
+ * Ordem: `borderRadius` → `theme.pipelinesolucoes.forms.borderRadius` → `'0'`.
95
+ *
96
+ * @param {import('@pipelinesolucoes/theme').BorderProps['border']} [border]
97
+ * Borda do container do formulário.
98
+ * Ordem: `border` → `theme.pipelinesolucoes.forms.border` → `'0'`.
99
+ *
100
+ * @param {import('@pipelinesolucoes/theme').LayoutProps['boxShadow']} [boxShadow]
101
+ * Sombra do container do formulário.
102
+ * Ordem: `boxShadow` → `theme.pipelinesolucoes.forms.boxShadow` → `'none'`.
103
+ *
104
+ * @param {import('@pipelinesolucoes/theme').LayoutProps['maxWidth']} [maxWidth]
105
+ * Largura máxima do container do formulário. *(Sem token de theme aplicado diretamente neste componente.)*
106
+ *
107
+ * @param {import('@/types/FieldProps').FieldProps['backgroundField']} [backgroundField]
108
+ * Background aplicado aos campos (`TextFieldValidate`).
109
+ * Ordem: `backgroundField` → `theme.pipelinesolucoes.forms.field.background` → `undefined`.
110
+ *
111
+ * @param {import('@/types/FieldProps').FieldProps['colorField']} [colorField]
112
+ * Cor do texto aplicada aos campos (`TextFieldValidate`).
113
+ * Ordem: `colorField` → `theme.pipelinesolucoes.forms.field.color` → `undefined`.
114
+ *
115
+ * @param {import('@/types/FieldProps').FieldProps['borderRadiusField']} [borderRadiusField]
116
+ * Raio de borda aplicado aos campos (`TextFieldValidate`).
117
+ * Ordem: `borderRadiusField` → `theme.pipelinesolucoes.forms.field.borderRadius` → `undefined`.
118
+ *
119
+ * @param {import('@/types/FieldProps').FieldProps['boxShadowField']} [boxShadowField]
120
+ * Sombra aplicada aos campos (`TextFieldValidate`).
121
+ * Ordem: `boxShadowField` → `theme.pipelinesolucoes.forms.field.boxShadow` → `undefined`.
122
+ *
123
+ * @param {import('@/types/FieldProps').FieldProps['borderColorField']} [borderColorField]
124
+ * Cor da borda aplicada aos campos (`TextFieldValidate`).
125
+ * Ordem: `borderColorField` → `theme.pipelinesolucoes.forms.field.borderColor` → `undefined`.
126
+ *
127
+ * @param {import('@/types/FieldProps').FieldProps['paddingField']} [paddingField]
128
+ * Padding aplicado aos campos (`TextFieldValidate`).
129
+ * Ordem: `paddingField` → `theme.pipelinesolucoes.forms.field.padding` → `undefined`.
130
+ *
131
+ * @param {import('@/types/FieldProps').FieldProps['marginField']} [marginField]
132
+ * Margem aplicada aos campos (`TextFieldValidate`).
133
+ * Ordem: `marginField` → `theme.pipelinesolucoes.forms.field.margin` → `undefined`.
134
+ *
135
+ * @param {import('@/types/FieldProps').FieldProps['heightField']} [heightField]
136
+ * Altura aplicada aos campos (`TextFieldValidate`).
137
+ * Ordem: `heightField` → `theme.pipelinesolucoes.forms.field.height` → `undefined`.
138
+ *
139
+ * @param {import('../types/ButtonProps').ButtonProps['backgroundButton']} [backgroundButton]
140
+ * Background do botão.
141
+ * Ordem: `backgroundButton` → `theme.pipelinesolucoes.forms.button.background` → `undefined`.
142
+ *
143
+ * @param {import('../types/ButtonProps').ButtonProps['backgroundHoverButton']} [backgroundHoverButton]
144
+ * Background do botão em hover.
145
+ * Ordem: `backgroundHoverButton` → `theme.pipelinesolucoes.forms.button.backgroundHover` → `undefined`.
146
+ *
147
+ * @param {import('../types/ButtonProps').ButtonProps['colorButton']} [colorButton]
148
+ * Cor do texto do botão.
149
+ * Ordem: `colorButton` → `theme.pipelinesolucoes.forms.button.color` → `undefined`.
150
+ *
151
+ * @param {import('../types/ButtonProps').ButtonProps['colorHoverButton']} [colorHoverButton]
152
+ * Cor do texto do botão em hover.
153
+ * Ordem: `colorHoverButton` → `theme.pipelinesolucoes.forms.button.colorHover` → `undefined`.
154
+ *
155
+ * @param {import('../types/ButtonProps').ButtonProps['borderRadiusButton']} [borderRadiusButton]
156
+ * Raio de borda do botão.
157
+ * Ordem: `borderRadiusButton` → `theme.pipelinesolucoes.forms.button.borderRadius` → `undefined`.
158
+ *
159
+ * @param {import('../types/ButtonProps').ButtonProps['borderButton']} [borderButton]
160
+ * Borda do botão.
161
+ * Ordem: `borderButton` → `'none'`.
162
+ *
163
+ * @param {import('../types/ButtonProps').ButtonProps['boxShadowButton']} [boxShadowButton]
164
+ * Sombra do botão.
165
+ * Ordem: `boxShadowButton` → `theme.pipelinesolucoes.forms.button.boxShadow` → `undefined`.
166
+ *
167
+ * @param {import('../types/ButtonProps').ButtonProps['widthButton']} [widthButton]
168
+ * Largura do botão.
169
+ * Ordem: `widthButton` → `'auto'`.
170
+ *
171
+ * @param {import('../types/ButtonProps').ButtonProps['heightButton']} [heightButton]
172
+ * Altura do botão.
173
+ * Ordem: `heightButton` → `'auto'`.
174
+ *
175
+ * @param {import('../types/ButtonProps').ButtonProps['paddingButton']} [paddingButton]
176
+ * Padding do botão.
177
+ * Ordem: `paddingButton` → `theme.pipelinesolucoes.forms.button.padding` → `undefined`.
178
+ *
179
+ * @param {import('../types/ButtonProps').ButtonProps['marginButton']} [marginButton]
180
+ * Margem do botão.
181
+ * Ordem: `marginButton` → `'0'`.
182
+ *
183
+ * Validação:
184
+ * - Email: validação local por regex simples (`/\S+@\S+\.\S+/`) antes de executar `onClick`.
185
+ * - Campos: cada `TextFieldValidate` recebe `required` e `showErrorOn="blur"`, além de validações específicas:
186
+ * - `validateEmailMessage` para email.
187
+ * - `validateTelefoneMessage` para telefone.
188
+ *
189
+ * Eventos:
190
+ * - Clique no botão: dispara `handleClick`, que:
191
+ * - Prevê `preventDefault()` no evento de formulário.
192
+ * - Bloqueia envio se email inválido e exibe mensagem padrão de erro.
193
+ * - Desabilita o botão enquanto `isLoading` estiver `true`, exibindo "Enviando...".
194
+ *
195
+ * @example
196
+ * ```tsx
197
+ * import FormMessage from './FormMessage';
198
+ * import EmailOutlined from '@mui/icons-material/EmailOutlined';
199
+ *
200
+ * export function Contato() {
201
+ * return (
202
+ * <FormMessage
203
+ * Icon={EmailOutlined}
204
+ * titulo={() => <strong>Fale conosco</strong>}
205
+ * textButton="Enviar mensagem"
206
+ * variantButton="body2"
207
+ * rowsMessage={6}
208
+ * onClick={async ({ nome, email, telefone, mensagem }) => {
209
+ * // Exemplo: chamada de API
210
+ * const ok = Boolean(nome && email && telefone && mensagem);
211
+ * return ok
212
+ * ? { success: true, message: 'Mensagem enviada com sucesso!' }
213
+ * : { success: false, message: 'Não foi possível enviar a mensagem.' };
214
+ * }}
215
+ * >
216
+ * <small>Responderemos em até 1 dia útil.</small>
217
+ * </FormMessage>
218
+ * );
219
+ * }
220
+ * ```
221
+ *
222
+ * @example
223
+ * ```ts
224
+ * // Exemplo de configuração no theme (Pipeline)
225
+ * const theme = {
226
+ * pipelinesolucoes: {
227
+ * forms: {
228
+ * background: 'transparent',
229
+ * borderRadius: '8px',
230
+ * border: '1px solid rgba(0,0,0,0.12)',
231
+ * boxShadow: 'none',
232
+ * field: {
233
+ * background: '#fff',
234
+ * color: '#111',
235
+ * borderRadius: '8px',
236
+ * borderColor: 'rgba(0,0,0,0.23)',
237
+ * boxShadow: 'none',
238
+ * padding: '12px',
239
+ * margin: '0 0 12px 0',
240
+ * height: '48px',
241
+ * },
242
+ * button: {
243
+ * background: '#111',
244
+ * backgroundHover: '#222',
245
+ * color: '#fff',
246
+ * colorHover: '#fff',
247
+ * borderRadius: '8px',
248
+ * boxShadow: 'none',
249
+ * padding: '12px 16px',
250
+ * },
251
+ * },
252
+ * },
253
+ * };
254
+ * ```
255
+ */
256
+ const FormMessage = ({ Icon, titulo, background, borderRadius, border, boxShadow, maxWidth, backgroundField, colorField, borderRadiusField, boxShadowField, borderColorField, paddingField, marginField, heightField, textButton = 'Enviar', variantButton = 'body1', backgroundButton, backgroundHoverButton, colorButton, colorHoverButton, borderRadiusButton, borderButton = 'none', boxShadowButton, widthButton = 'auto', heightButton = 'auto', paddingButton, marginButton = '0', rowsMessage = 5, children, onClick, }) => {
257
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47;
258
+ const theme = useTheme();
259
+ const color_message_sucess = theme.palette.success.main;
260
+ const color_message_erro = theme.palette.error.main;
261
+ const bContainer = (_c = background !== null && background !== void 0 ? background : (_b = (_a = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _a === void 0 ? void 0 : _a.forms) === null || _b === void 0 ? void 0 : _b.background) !== null && _c !== void 0 ? _c : 'transparent';
262
+ const brContainer = (_f = borderRadius !== null && borderRadius !== void 0 ? borderRadius : (_e = (_d = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _d === void 0 ? void 0 : _d.forms) === null || _e === void 0 ? void 0 : _e.borderRadius) !== null && _f !== void 0 ? _f : '0';
263
+ const bdContainer = (_j = border !== null && border !== void 0 ? border : (_h = (_g = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _g === void 0 ? void 0 : _g.forms) === null || _h === void 0 ? void 0 : _h.border) !== null && _j !== void 0 ? _j : '0';
264
+ const bsContainer = (_m = boxShadow !== null && boxShadow !== void 0 ? boxShadow : (_l = (_k = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _k === void 0 ? void 0 : _k.forms) === null || _l === void 0 ? void 0 : _l.boxShadow) !== null && _m !== void 0 ? _m : 'none';
265
+ const bField = (_r = backgroundField !== null && backgroundField !== void 0 ? backgroundField : (_q = (_p = (_o = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _o === void 0 ? void 0 : _o.forms) === null || _p === void 0 ? void 0 : _p.field) === null || _q === void 0 ? void 0 : _q.background) !== null && _r !== void 0 ? _r : undefined;
266
+ const cField = (_v = colorField !== null && colorField !== void 0 ? colorField : (_u = (_t = (_s = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _s === void 0 ? void 0 : _s.forms) === null || _t === void 0 ? void 0 : _t.field) === null || _u === void 0 ? void 0 : _u.color) !== null && _v !== void 0 ? _v : undefined;
267
+ const brField = (_z = borderRadiusField !== null && borderRadiusField !== void 0 ? borderRadiusField : (_y = (_x = (_w = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _w === void 0 ? void 0 : _w.forms) === null || _x === void 0 ? void 0 : _x.field) === null || _y === void 0 ? void 0 : _y.borderRadius) !== null && _z !== void 0 ? _z : undefined;
268
+ const bsField = (_3 = boxShadowField !== null && boxShadowField !== void 0 ? boxShadowField : (_2 = (_1 = (_0 = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _0 === void 0 ? void 0 : _0.forms) === null || _1 === void 0 ? void 0 : _1.field) === null || _2 === void 0 ? void 0 : _2.boxShadow) !== null && _3 !== void 0 ? _3 : undefined;
269
+ const bcField = (_7 = borderColorField !== null && borderColorField !== void 0 ? borderColorField : (_6 = (_5 = (_4 = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _4 === void 0 ? void 0 : _4.forms) === null || _5 === void 0 ? void 0 : _5.field) === null || _6 === void 0 ? void 0 : _6.borderColor) !== null && _7 !== void 0 ? _7 : undefined;
270
+ const pField = (_11 = paddingField !== null && paddingField !== void 0 ? paddingField : (_10 = (_9 = (_8 = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _8 === void 0 ? void 0 : _8.forms) === null || _9 === void 0 ? void 0 : _9.field) === null || _10 === void 0 ? void 0 : _10.padding) !== null && _11 !== void 0 ? _11 : undefined;
271
+ const mgField = (_15 = marginField !== null && marginField !== void 0 ? marginField : (_14 = (_13 = (_12 = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _12 === void 0 ? void 0 : _12.forms) === null || _13 === void 0 ? void 0 : _13.field) === null || _14 === void 0 ? void 0 : _14.margin) !== null && _15 !== void 0 ? _15 : undefined;
272
+ const hgField = (_19 = heightField !== null && heightField !== void 0 ? heightField : (_18 = (_17 = (_16 = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _16 === void 0 ? void 0 : _16.forms) === null || _17 === void 0 ? void 0 : _17.field) === null || _18 === void 0 ? void 0 : _18.height) !== null && _19 !== void 0 ? _19 : undefined;
273
+ const bgButton = (_23 = backgroundButton !== null && backgroundButton !== void 0 ? backgroundButton : (_22 = (_21 = (_20 = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _20 === void 0 ? void 0 : _20.forms) === null || _21 === void 0 ? void 0 : _21.button) === null || _22 === void 0 ? void 0 : _22.background) !== null && _23 !== void 0 ? _23 : undefined;
274
+ const bgHoverButton = (_27 = backgroundHoverButton !== null && backgroundHoverButton !== void 0 ? backgroundHoverButton : (_26 = (_25 = (_24 = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _24 === void 0 ? void 0 : _24.forms) === null || _25 === void 0 ? void 0 : _25.button) === null || _26 === void 0 ? void 0 : _26.backgroundHover) !== null && _27 !== void 0 ? _27 : undefined;
275
+ const cButton = (_31 = colorButton !== null && colorButton !== void 0 ? colorButton : (_30 = (_29 = (_28 = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _28 === void 0 ? void 0 : _28.forms) === null || _29 === void 0 ? void 0 : _29.button) === null || _30 === void 0 ? void 0 : _30.color) !== null && _31 !== void 0 ? _31 : undefined;
276
+ const cHoverButton = (_35 = colorHoverButton !== null && colorHoverButton !== void 0 ? colorHoverButton : (_34 = (_33 = (_32 = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _32 === void 0 ? void 0 : _32.forms) === null || _33 === void 0 ? void 0 : _33.button) === null || _34 === void 0 ? void 0 : _34.colorHover) !== null && _35 !== void 0 ? _35 : undefined;
277
+ const brButton = (_39 = borderRadiusButton !== null && borderRadiusButton !== void 0 ? borderRadiusButton : (_38 = (_37 = (_36 = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _36 === void 0 ? void 0 : _36.forms) === null || _37 === void 0 ? void 0 : _37.button) === null || _38 === void 0 ? void 0 : _38.borderRadius) !== null && _39 !== void 0 ? _39 : undefined;
278
+ const bsButton = (_43 = boxShadowButton !== null && boxShadowButton !== void 0 ? boxShadowButton : (_42 = (_41 = (_40 = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _40 === void 0 ? void 0 : _40.forms) === null || _41 === void 0 ? void 0 : _41.button) === null || _42 === void 0 ? void 0 : _42.boxShadow) !== null && _43 !== void 0 ? _43 : undefined;
279
+ const pButton = (_47 = paddingButton !== null && paddingButton !== void 0 ? paddingButton : (_46 = (_45 = (_44 = theme === null || theme === void 0 ? void 0 : theme.pipelinesolucoes) === null || _44 === void 0 ? void 0 : _44.forms) === null || _45 === void 0 ? void 0 : _45.button) === null || _46 === void 0 ? void 0 : _46.padding) !== null && _47 !== void 0 ? _47 : undefined;
280
+ const [mensagemApi, setMensagemApi] = useState('');
281
+ const [corMensagemApi, setCorMensagemApi] = useState(color_message_erro);
282
+ const [nome, setNome] = useState('');
283
+ const [email, setEmail] = useState('');
284
+ const [telefone, setTelefone] = useState('');
285
+ const [mensagem, setMensagem] = useState('');
286
+ const [errors, setErrors] = useState({});
287
+ const [isLoading, setIsLoading] = useState(false);
288
+ const validateEmail = (value) => /\S+@\S+\.\S+/.test(value);
289
+ const handleClick = async (e) => {
290
+ var _a, _b, _c;
291
+ e.preventDefault();
292
+ // validação local básica (mantém o comportamento atual)
293
+ const newErrors = {
294
+ email: !validateEmail(email),
295
+ };
296
+ setErrors(newErrors);
297
+ const hasErrors = Object.values(newErrors).some(Boolean);
298
+ if (hasErrors) {
299
+ setCorMensagemApi(color_message_erro);
300
+ setMensagemApi('Alguns dos dados fornecidos estão inválidos. Por favor, revise as informações preenchidas e corrija os campos destacados.');
301
+ return;
302
+ }
303
+ setIsLoading(true);
304
+ setMensagemApi('');
305
+ try {
306
+ if (!onClick) {
307
+ // Se o pai não passou handler, mantém feedback amigável
308
+ setCorMensagemApi(color_message_erro);
309
+ setMensagemApi('Nenhuma ação foi configurada para o botão.');
310
+ return;
311
+ }
312
+ const result = await onClick({ nome, email, telefone, mensagem });
313
+ if (result === null || result === void 0 ? void 0 : result.success) {
314
+ setCorMensagemApi((_a = result.color) !== null && _a !== void 0 ? _a : color_message_sucess);
315
+ setMensagemApi(result.message);
316
+ }
317
+ else {
318
+ setCorMensagemApi((_b = result.color) !== null && _b !== void 0 ? _b : color_message_erro);
319
+ setMensagemApi((_c = result === null || result === void 0 ? void 0 : result.message) !== null && _c !== void 0 ? _c : 'Falha ao realizar a operação.');
320
+ }
321
+ }
322
+ catch (err) {
323
+ setCorMensagemApi(color_message_erro);
324
+ setMensagemApi('Erro inesperado ao processar a solicitação.');
325
+ }
326
+ finally {
327
+ setIsLoading(false);
328
+ }
329
+ };
330
+ return (_jsxs(StyledRoot, { background: bContainer, border_radius: brContainer, box_shadow: bsContainer, border: bdContainer, maxWidth: maxWidth, children: [(Icon || titulo) && (_jsxs(DivTitulo, { children: [Icon && _jsx(Icon, {}), titulo && titulo()] })), _jsxs(FormContainer, { children: [_jsx(TextFieldValidate, { id: "nome", label: "Nome", placeholder: "Nome", value: nome, onChange: (e) => setNome(e.target.value), required: true, requiredMessage: "nome obrigat\u00F3rio", showErrorOn: "blur", height: hgField, background: bField, color: cField, borderRadius: brField, borderColor: bcField, boxShadow: bsField, padding: pField, margin: mgField }), _jsx(TextFieldValidate, { id: "email", label: "Email", placeholder: "Email", value: email, onChange: (e) => setEmail(e.target.value), required: true, requiredMessage: "email obrigat\u00F3rio", validate: validateEmailMessage, showErrorOn: "blur", height: hgField, background: bField, color: cField, borderRadius: brField, borderColor: bcField, boxShadow: bsField, padding: pField, margin: mgField }), _jsx(TextFieldValidate, { id: "telefone", label: "Telefone", placeholder: "Telefone", value: telefone, onChange: (e) => setTelefone(e.target.value), required: true, requiredMessage: "telefone obrigat\u00F3rio", validate: validateTelefoneMessage, showErrorOn: "blur", height: hgField, background: bField, color: cField, borderRadius: brField, borderColor: bcField, boxShadow: bsField, padding: pField, margin: mgField }), _jsx(TextFieldValidate, { id: "mensagem", label: "Mensagem", placeholder: "Mensagem", value: mensagem, onChange: (e) => setMensagem(e.target.value), required: true, requiredMessage: "mensagem obrigat\u00F3ria", multiline: true, rows: rowsMessage, showErrorOn: "blur", height: hgField, background: bField, color: cField, borderRadius: brField, borderColor: bcField, boxShadow: bsField, padding: pField, margin: mgField }), _jsx(ButtonFormStyled, { backgroundButton: bgButton, backgroundHoverButton: bgHoverButton, colorButton: cButton, colorHoverButton: cHoverButton, borderRadiusButton: brButton, borderButton: borderButton, boxShadowButton: bsButton, widthButton: widthButton, heightButton: heightButton, paddingButton: pButton, marginButton: marginButton, disabled: isLoading, onClick: handleClick, children: isLoading ? ('Enviando...') : (_jsx(Typography, { variant: variantButton, component: "span", children: textButton })) })] }), mensagemApi && (_jsx(Typography, { variant: "body2", sx: { color: corMensagemApi }, children: mensagemApi })), children] }));
331
+ };
332
+ export default FormMessage;
333
+ //# sourceMappingURL=FormMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormMessage.js","sourceRoot":"","sources":["../../src/components/FormMessage.tsx"],"names":[],"mappings":"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"}