mitre-form-component 0.0.30 → 0.0.32
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/dist/index.cjs +1 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -375,10 +375,6 @@ function date(e) {
|
|
|
375
375
|
return e;
|
|
376
376
|
}
|
|
377
377
|
|
|
378
|
-
// src/components/Input/index.tsx
|
|
379
|
-
var import_react_phone_input_2 = __toESM(require("react-phone-input-2"), 1);
|
|
380
|
-
var import_style = require("react-phone-input-2/lib/style.css");
|
|
381
|
-
|
|
382
378
|
// src/components/Input/styles.ts
|
|
383
379
|
var import_styled_components3 = __toESM(require("styled-components"), 1);
|
|
384
380
|
var FormLabel = import_styled_components3.default.label`
|
|
@@ -493,12 +489,7 @@ var InputBase = ({ id, label, error, showErrorMessage = true, borderColor, textC
|
|
|
493
489
|
autoComplete: rest.autoComplete || "on",
|
|
494
490
|
...rest
|
|
495
491
|
}
|
|
496
|
-
) : mask === "phone" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
497
|
-
import_react_phone_input_2.default,
|
|
498
|
-
{
|
|
499
|
-
country: "br"
|
|
500
|
-
}
|
|
501
|
-
) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
492
|
+
) : mask === "phone" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
502
493
|
Input,
|
|
503
494
|
{
|
|
504
495
|
id,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/Form/index.tsx","../src/components/hooks/useError.ts","../src/components/styles/utils.ts","../src/components/Form/styles.ts","../src/components/styles/global.ts","../src/components/Input/index.tsx","../src/components/Input/masks.ts","../src/components/Input/styles.ts","../src/components/Button/styles.ts","../src/components/Button/index.tsx","../src/components/Alert/index.tsx","../src/components/Alert/styles.ts"],"sourcesContent":["export { default as MitreFormComponent } from \"./components/Form\";\nexport type { MitreFormComponentProps } from \"./components/Form\";\n","import React, { useState } from \"react\";\nimport { useError } from \"../hooks/useError\";\nimport { useForm, SubmitHandler, Controller } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\n\nimport { \n FormContainer, \n HeaderContainer, \n ButtonContainer, \n Form, \n Title, \n Text \n} from \"./styles\";\nimport FontLoader, { GlobalStyles } from \"../styles/global\";\n\nimport { Input } from \"../Input\";\nimport { Button } from \"../Button\";\nimport { Alert } from \"../Alert\";\n\nexport interface MitreFormComponentProps {\n productId: string;\n apiUrl: string;\n apiToken: string;\n utm_source: string;\n utm_medium: string;\n utm_campaign: string;\n utm_term: string;\n showHeader?: boolean;\n colorPrimary?: string;\n textColor?: string;\n backgroundColor?: string;\n innerPadding?: string;\n}\n\nconst schema = yup.object().shape({\n name: yup.string().required(\"Nome é obrigatório\"),\n email: yup.string().required(\"Email é obrigatório\").email(\"Email inválido\"),\n phone: yup.string().required(\"Telefone é obrigatório\")\n .test(\n 'min-digits',\n 'Número de telefone inválido!',\n (value) => {\n const digitsOnly = value?.replace(/\\D/g, '') || '';\n //TODO melhorar essa lógica com algum regex\n return digitsOnly.length >= 8\n })\n});\n\nconst MitreFormComponent = React.forwardRef<HTMLDivElement, MitreFormComponentProps>(({\n productId,\n apiUrl,\n apiToken,\n utm_source,\n utm_medium,\n utm_campaign,\n utm_term,\n showHeader = true,\n colorPrimary = \"#F6C76B\",\n textColor = \"#2F2F2F\",\n backgroundColor = \"#cecece\",\n innerPadding = \"1rem\",\n}, ref) => {\n const [loading, setIsLoading] = useState(false);\n const { error, handleError, clearError } = useError();\n const [successMessage, setSuccessMessage] = useState('');\n\n const { control, register, handleSubmit, formState: { errors }, reset, watch } = useForm({\n resolver: yupResolver(schema),\n });\n\n const phoneValue = watch(\"phone\");\n\n const sendMessage: SubmitHandler<{ name: string; email: string; phone: string; }> = async (data) => {\n const { name, email, phone } = data;\n const message = \"Gostaria de mais informações sobre o produto\";\n\n try {\n setIsLoading(true);\n\n if (!productId || !utm_source || !utm_medium || !utm_campaign || !utm_term || !apiToken) {\n throw new Error(\"Parâmetros obrigatórios não informados\");\n }\n\n const response = await fetch(`${apiUrl}/leads`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${apiToken}`,\n },\n body: JSON.stringify({\n name,\n email,\n phone,\n message,\n productId,\n utm_source,\n utm_medium,\n utm_campaign,\n utm_term,\n }),\n });\n\n if (!response.ok) {\n throw new Error(\"Falha ao enviar a mensagem!\");\n }\n\n setSuccessMessage(\"Mensagem enviada com sucesso!\");\n reset({\n name: \"\", \n email: \"\",\n phone: \"\",\n });\n } catch (err) {\n handleError(err);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <FontLoader />\n <GlobalStyles />\n\n {error && (\n <Alert \n type=\"error\" \n dismissible\n onDismiss={clearError}\n autoDismiss={5000}\n >\n {error!.message}\n </Alert>\n )}\n\n {successMessage && (\n <Alert \n type=\"success\"\n dismissible\n onDismiss={() => setSuccessMessage('')}\n autoDismiss={5000}\n >\n {successMessage}\n </Alert>\n )}\n\n <FormContainer $backgroundColor={backgroundColor} $innerPadding={innerPadding} ref={ref} >\n {showHeader && \n <HeaderContainer>\n <Title $textColor={textColor}>Atendimento por mensagem</Title>\n\n <Text $textColor={textColor}>Informe seus dados e retornaremos a mensagem.</Text>\n </HeaderContainer>\n }\n\n <Form $textColor={textColor} onSubmit={handleSubmit(sendMessage)} noValidate>\n <Input\n id=\"name\"\n label=\"Nome *\"\n placeholder=\"Digite seu nome\"\n {...register(\"name\")}\n borderColor={colorPrimary}\n textColor={textColor}\n error={errors.name?.message}\n autoComplete=\"name\"\n required\n />\n\n <Input\n id=\"email\"\n label=\"Email *\"\n type=\"email\"\n placeholder=\"exemplo@email.com\"\n {...register(\"email\")}\n borderColor={colorPrimary}\n textColor={textColor}\n error={errors.email?.message}\n autoComplete=\"email\"\n required\n />\n\n <Controller\n control={control}\n name=\"phone\"\n defaultValue=\"\"\n render={({ field, fieldState }) => (\n <Input\n id=\"phone\"\n label=\"Telefone *\"\n placeholder=\"(11) 00000-0000\"\n mask=\"phone\"\n borderColor={colorPrimary}\n textColor={textColor}\n error={fieldState.error?.message}\n required\n value={field.value}\n onChange={field.onChange}\n name={field.name}\n />\n )}\n />\n\n <h6>* Campos de preenchimento obrigatório.</h6>\n\n <ButtonContainer>\n <Button bgColor={colorPrimary} color={textColor} type=\"submit\" isSubmitting={loading}>\n Enviar mensagem\n </Button>\n </ButtonContainer>\n\n <p>A Mitre Realty respeita a sua privacidade e utiliza os seus dados pessoais para contatá-lo por e-mail ou telefone aqui registrados. Para saber mais, acesse a nossa{ ' '}\n <a\n href=\"https://www.mitrerealty.com.br/politica-de-privacidade\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Política de Privacidade\n </a>. Ao clicar em {'\"'}enviar{'\"'}, você concorda em permitir que a Mitre Realty, armazene e processe os dados pessoais fornecidos por você para finalidade informada</p>\n\n </Form>\n </FormContainer>\n </>\n );\n});\n\nMitreFormComponent.displayName = \"MitreFormComponent\";\n\nexport default MitreFormComponent;\n","import { useState } from \"react\";\n\nexport function useError() {\n const [error, setError] = useState<Error | null>(null);\n\n const handleError = (err: unknown) => {\n const errorObj = err instanceof Error ? err : new Error(String(err));\n setError(errorObj);\n console.error(errorObj);\n };\n\n const clearError = () => setError(null);\n\n return { error, handleError, clearError };\n}\n","type directionType = \"column\" | \"row\";\ntype alignItemsType = \"center\" | \"flex-start\";\n\ntype jutifyContentType = \"center\" | \"space-between\";\n\nexport function flex(\n direction: directionType = \"row\",\n alignItems?: alignItemsType,\n justifyContent?: jutifyContentType\n) {\n return `\n align-items:${alignItems || null};\n display:flex;\n flex-direction:${direction};\n justify-content:${justifyContent || null};\n `;\n}\n\nexport const alignX = `\n left:50%;\n transform:translateX(-50%);\n`;\n\nexport const alignXAndY = `\n left:50%;\n top:50%;\n transform:translate(-50%, -50%);\n`;\n\nexport const darkEffect = `\n &:hover {\n cursor:pointer;\n filter:brightness(98%);\n }\n\n &:active {\n filter:brightness(95%);\n }\n`;\n\nexport const opacityEffect = `\n &:hover {\n cursor:pointer;\n opacity:.9;\n }\n\n &:active {\n opacity:.7;\n }\n`;\n\nexport const modalZIndex = 9999;\n\nexport const breakpoints = {\n tablet: \"1024px\",\n};\n","import { flex, opacityEffect } from \"../styles/utils\";\nimport styled from \"styled-components\";\n\nexport const FormContainer = styled.div<{\n $backgroundColor: string;\n $innerPadding: string;\n}>`\n ${flex(\"column\")}\n align-items: stretch;\n justify-content: flex-start;\n overflow-x: hidden;\n overflow-y: auto;\n\n background: ${(props) => props.$backgroundColor || \" #cecece\"};\n\n padding: ${(props) => props.$innerPadding || \"1rem\"};\n\n /* Hide scrollbars for WebKit browsers */\n ::-webkit-scrollbar {\n display: none;\n }\n\n /* Hide scrollbars for Firefox */\n scrollbar-width: none;\n\n box-sizing: border-box;\n height: 100%;\n`;\n\nexport const HeaderContainer = styled.div`\n margin-bottom: 1rem;\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n margin-top: 0.75rem;\n`;\n\nexport const Form = styled.form<{ $textColor: string }>`\n label {\n font-weight: 700;\n }\n\n input {\n background: white;\n margin-bottom: 0.75rem;\n }\n\n p {\n font-family: \"Montserrat\", sans-serif;\n font-style: italic;\n font-weight: 200;\n font-size: 0.8rem;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n text-align: start;\n }\n\n a {\n font-family: \"Montserrat\", sans-serif;\n font-style: italic;\n font-weight: 200;\n font-size: 0.8rem;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n }\n\n h6 {\n text-align: start;\n margin-left: 10px;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n }\n\n & > div {\n margin-bottom: 10px;,\n }\n\n button {\n ${opacityEffect}\n color: var(--black);\n font-weight: 600;\n border: none;\n border-radius: 8px;\n width: 60%;\n margin-top: 10px;\n margin-bottom: 10px;\n }\n`;\n\nexport const Title = styled.h2<{ $textColor: string }>`\n font-size: 1.25rem;\n font-weight: 700;\n line-height: 24px;\n letter-spacing: 0em;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n`;\n\nexport const Text = styled.p<{ $textColor: string }>`\n font-size: 1rem;\n font-weight: 400;\n line-height: 23px;\n letter-spacing: 0em;\n margin-top: 10px;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n`;\n","import { createGlobalStyle } from \"styled-components\";\nimport React, { useEffect } from \"react\";\n\nexport const GlobalStyles = createGlobalStyle`\n :root {\n --red: #e52e4d;\n --white: #FFF;\n --black: #2F2F2F;\n --black-2:#1E1E1E;\n --alphaBlack: #000000;\n --black-2:#1E1E1E;\n --black-3:#353535;\n\n --yellow-400:#FFD789;\n --yellow-500: #F6C76B;\n --gray-40:#F0F0F0;\n --gray-45:#767676;\n --gray-50: #686A69;\n --gray-60: #8F8F8F;\n --gray-100: #B6B6B6;\n --gray-150: #B9B9B9;\n --gray-200: #D2D2D2;\n --gray-300: #EBEBEB;\n --gray-400: #ECECEC;\n --gray-500: #F4F4F4;\n --gray-550:#6F6F6F;\n --gray-600:#686868;\n --gray-700: #535353;\n --gray-800:#9D9D9D;\n --shadow-500: 0px 4px 8px rgba(91, 91, 91, 0.2);\n --green:#57C06E;\n --green-2:#2DCE68;\n --blue:#007BFF;\n }\n\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n html {\n scroll-behavior: smooth;\n\n @media (max-width: 1080px) {\n font-size: 93.75%;\n }\n @media (max-width: 720px) {\n font-size: 87.5%;\n }\n }\n\n body {\n background: var(--white);\n -webkit-font-smoothing: antialiased;\n }\n\n body, input, textarea, select, button {\n font-family: \"Montserrat\", sans-serif;\n font-weight: 400;\n } \n\n h1, h2, h3, h4, h5, h6, strong {\n font-weight: 600;\n }\n\n button {\n cursor: pointer;\n }\n\n [disabled] {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .hidden {\n overflow: hidden;\n }\n\n ::-webkit-scrollbar {\n -webkit-appearance: none;\n background: var(--gray-500);\n width: 6px;\n height: 10px;\n }\n\n ::-webkit-scrollbar-thumb {\n background-color: var(--gray-50);\n }\n\n .aligncenter {\n text-align: center;\n }\n\n .width-190px {\n width:190px;\n }\n\n .hidden-content {\n display:none !important;\n }\n\n .global-margin-bottom {\n margin-bottom:20px;\n }\n\n .background-light-gray {\n background:#F4F4F4;\n }\n\n .full-width-and-height {\n height:100%;\n width:100%;\n }\n\n .flex-direction-column {\n flex-direction:column;\n }\n\n .bold {\n font-weight:700;\n }\n\n .margin-center-x {\n margin:0 auto;\n }\n\n .border-none {\n border:none;\n }\n\n .text-center {\n text-align:center;\n }\n\n .relative {\n position:relative;\n }\n\n /* accessibility */\n body ._access-menu p._text-center{\n font-family: \"Montserrat\", sans-serif;\n font-style: italic;\n font-size: 1.2rem!important;\n margin-top: 6px;\n margin-bottom: 3px;\n } \n\n`;\n\nconst FontLoader: React.FC = () => {\n useEffect(() => {\n const link = document.createElement(\"link\");\n link.href =\n \"https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap\";\n link.rel = \"stylesheet\";\n document.head.appendChild(link);\n }, []);\n\n return null;\n};\n\nexport default FontLoader;\n","import {\n FormEvent,\n forwardRef,\n ForwardRefRenderFunction,\n InputHTMLAttributes,\n useCallback,\n useRef,\n} from \"react\";\nimport { FieldError } from \"react-hook-form\";\nimport { cep, cpf, currency, date } from \"./masks\";\n\nimport FormPhoneInput from \"react-phone-input-2\";\nimport 'react-phone-input-2/lib/style.css'\n\nimport {\n FormControl,\n FormErrorMessage,\n FormLabel,\n Input as FormInput,\n} from \"./styles\";\n\ntype InputType =\n | \"text\"\n | \"email\"\n | \"password\"\n | \"number\"\n | \"tel\"\n | \"url\"\n | \"date\"\n | \"time\"\n | \"datetime-local\";\n\ninterface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n id: string;\n label?: string;\n error?: string | FieldError;\n showErrorMessage?: boolean;\n borderColor: string;\n textColor?: string;\n\n mask?: \"cep\" | \"currency\" | \"cpf\" | \"phone\" | \"date\";\n type?: InputType;\n}\n\nconst InputBase: ForwardRefRenderFunction<HTMLInputElement, InputProps> = (\n { id, label, error, showErrorMessage = true, borderColor, textColor, mask = \"\", type = \"text\", ...rest },\n ref\n) => {\n const phoneInputRef = useRef<{ input: HTMLInputElement }>(null);\n\n const handleKeyUp = useCallback(\n (e: FormEvent<HTMLInputElement>) => {\n if (mask === \"cep\") cep(e);\n if (mask === \"currency\") currency(e);\n if (mask === \"cpf\") cpf(e);\n if (mask === \"date\") date(e);\n },\n [mask]\n );\n\n return (\n <FormControl isInvalid={!!error}>\n {!!label && <FormLabel htmlFor={id} $textColor={textColor}>{label}</FormLabel>}\n\n {!mask ? (\n <FormInput\n id={id}\n ref={ref}\n type={type} \n $bordercolor={borderColor}\n aria-invalid={!!error && showErrorMessage ? \"true\" : \"false\"}\n autoComplete={rest.autoComplete || \"on\"}\n {...rest}\n />\n ) : mask === 'phone' ? (\n <FormPhoneInput\n country={\"br\"}\n />\n ) : (\n <FormInput\n id={id}\n ref={ref}\n type={type} \n $bordercolor={borderColor}\n aria-invalid={!!error && showErrorMessage ? \"true\" : \"false\"}\n onKeyUp={handleKeyUp}\n autoComplete={rest.autoComplete || \"on\"}\n {...rest}\n />\n )}\n\n {!!error && showErrorMessage && (\n <FormErrorMessage data-testid=\"error-message\">\n {typeof error === 'string' ? error : error.message}\n </FormErrorMessage>\n )}\n </FormControl>\n );\n};\n\nexport const Input = forwardRef(InputBase);\n","import { FormEvent } from \"react\";\n\nexport function cep(e: FormEvent<HTMLInputElement>) {\n e.currentTarget.maxLength = 9;\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/^(\\d{5})(\\d)/, \"$1-$2\");\n e.currentTarget.value = value;\n return e;\n}\n\nexport function currency(e: FormEvent<HTMLInputElement>) {\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d)(\\d{2})$/, \"$1,$2\");\n value = value.replace(/(?=(\\d{3})+(\\D))\\B/g, \".\");\n\n e.currentTarget.value = value;\n return e;\n}\n\nexport function cpf(e: FormEvent<HTMLInputElement>) {\n e.currentTarget.maxLength = 14;\n let value = e.currentTarget.value;\n if (!value.match(/^(\\d{3}).(\\d{3}).(\\d{3})-(\\d{2})$/)) {\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d{3})(\\d)/, \"$1.$2\");\n value = value.replace(/(\\d{3})(\\d)/, \"$1.$2\");\n value = value.replace(/(\\d{3})(\\d{2})$/, \"$1-$2\");\n\n e.currentTarget.value = value;\n }\n return e;\n}\n\nexport function date(e: FormEvent<HTMLInputElement>) {\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n e.currentTarget.value = value;\n return e;\n}\n\nexport function phone(e: FormEvent<HTMLInputElement>) {\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n e.currentTarget.value = value;\n return e;\n}\n","import styled, { css } from \"styled-components\";\nimport { InputHTMLAttributes } from \"react\";\n\ntype InputProps = {\n isInvalid?: boolean;\n bordercolor?: string;\n};\n\nexport const FormLabel = styled.label<InputProps & { $textColor?: string }>`\n font-family: \"Montserrat\", sans-serif;\n font-style: normal;\n font-weight: 500;\n font-size: 1rem;\n color: ${(props) =>\n props.isInvalid ? \"var(--red)\" : props.$textColor || \"var(--black)\"};\n display: block;\n margin-bottom: 0.5rem;\n text-align: left;\n`;\n\nexport const Input = styled.input<\n InputHTMLAttributes<HTMLInputElement> & { $bordercolor?: string }\n>`\n font-family: \"Montserrat\", sans-serif;\n font-style: normal;\n font-weight: 500;\n font-size: 1rem;\n line-height: 1.5rem;\n background: var(--gray-500);\n color: var(--black);\n padding: 0.5rem;\n border-radius: 0.125rem;\n border: 1px solid transparent;\n display: block;\n height: 3.125rem;\n width: 100%;\n\n &:focus {\n border-radius: 0.125rem;\n border: 2px solid ${(props) => props.$bordercolor || \"var(--yellow-500)\"};\n outline: none;\n }\n\n &::placeholder {\n font-size: 1rem;\n line-height: 1.5rem;\n color: #b6b6b6;\n font-weight: 800;\n }\n\n /* Autofill styles */\n &:-webkit-autofill {\n background: var(--gray-500) !important;\n color: var(--black) !important;\n -webkit-text-fill-color: var(--black) !important;\n transition: background-color 5000s ease-in-out 0s; /* Prevent flashing */\n }\n\n &:-webkit-autofill::first-line {\n font-family: \"Montserrat\", sans-serif;\n font-size: 1rem;\n font-weight: 500;\n }\n`;\n\nexport const FormErrorMessage = styled.small`\n font-size: 0.75rem;\n line-height: 1.125rem;\n color: var(--red);\n margin-top: 0.25rem;\n display: block;\n`;\n\nexport const FormControl = styled.div.withConfig({\n shouldForwardProp: (prop) => ![\"isInvalid\", \"$bordercolor\"].includes(prop),\n})<{ isInvalid?: boolean; $bordercolor?: string }>`\n ${FormLabel} {\n ${(props) =>\n props.isInvalid &&\n css`\n color: var(--red);\n `};\n }\n\n ${Input} {\n ${(props) =>\n props.isInvalid &&\n css`\n border: 1px solid var(--red);\n\n &:not(:focus)::placeholder {\n color: var(--red);\n font-weight: 600;\n }\n `};\n\n &:focus {\n ${(props) =>\n props.isInvalid &&\n css`\n border: 1px solid var(--red);\n `};\n }\n }\n`;\n","import { darken } from \"polished\";\nimport styled, { css } from \"styled-components\";\n\ntype ButtonProps = {\n hasIcon?: boolean;\n isSubmitting?: boolean;\n hasSubmittingMessage?: boolean;\n bgColor?: string;\n bordercolor?: string;\n color?: string;\n height?: string;\n};\n\nexport const Icon = styled.span`\n font-size: 0;\n line-height: 0;\n transition: all 0.25s ease;\n\n transform: translate3d(-30px, 0px, 0px);\n visibility: hidden;\n opacity: 0;\n margin-right: 0.625rem;\n`;\n\nexport const Text = styled.span`\n font-family: \"Montserrat\", sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n margin-bottom: -2px;\n\n transition: all 0.25s ease;\n`;\n\nexport const TextSubmitting = styled.span`\n font-family: \"Montserrat\", sans-serif;\n font-weight: 400;\n font-size: 1rem;\n\n transition: all 0.25s ease;\n`;\n\nexport const LoadingIcon = styled.span.withConfig({\n shouldForwardProp: (prop) => prop !== \"hasText\",\n})<{ hasText?: boolean }>`\n display: block;\n\n width: 1rem;\n height: 1rem;\n border: 0.125rem solid var(--white);\n border-radius: 50%;\n animation: loadingAnimation 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: var(--white) transparent transparent transparent;\n\n margin-right: ${(props) => (props.hasText ? \"0.625rem\" : \"0\")};\n\n @keyframes loadingAnimation {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nexport const Button = styled.button.withConfig({\n shouldForwardProp: (prop) =>\n ![\n \"hasIcon\",\n \"isSubmitting\",\n \"hasSubmittingMessage\",\n \"bgColor\",\n \"bordercolor\",\n \"color\",\n \"height\",\n ].includes(prop),\n})<ButtonProps>`\n background: ${(props) => darken(0.1, props?.bgColor || \"#F6C76B\")};\n color: ${(props) => props?.color || \"#2F2F2F\"};\n border: 1px solid ${(props) => darken(0.1, props?.bordercolor || \"#F6C76B\")};\n border-radius: 2px;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0 0.75rem;\n height: ${(props) => props?.height || \"3.125rem\"};\n position: relative;\n font-size: 0;\n line-height: 0;\n\n transition: all 0.25s;\n\n ${Icon} {\n display: ${(props) => (props?.hasIcon ? \"block\" : \"\")};\n }\n\n ${Text} {\n transform: ${(props) =>\n props?.hasIcon ? \"translate3d(-4.5px, 0px, 0px)\" : \"unset\"};\n\n @media print, screen and (min-width: 40em) {\n transform: ${(props) =>\n props?.hasIcon ? \"translate3d(-14.5px, 0px, 0px)\" : \"unset\"};\n }\n\n color: ${(props) => props?.color || \"#2F2F2F\"};\n }\n\n &:hover {\n background: ${(props) => darken(0.2, props?.bgColor || \"#F6C76B\")};\n border-color: ${(props) => darken(0.2, props?.bordercolor || \"#F6C76B\")};\n\n ${Icon} {\n opacity: 1;\n visibility: visible;\n transform: translate3d(0px, 0px, 0px);\n }\n\n ${Text} {\n transform: ${(props) =>\n props?.hasIcon ? \"translate3d(-5px, 0px, 0px)\" : \"unset\"};\n }\n }\n\n ${Text} {\n ${(props) =>\n props.isSubmitting &&\n !props.hasSubmittingMessage &&\n css`\n transform: unset;\n opacity: 0;\n `}\n }\n\n ${LoadingIcon} {\n ${(props) =>\n props.isSubmitting &&\n !props.hasSubmittingMessage &&\n css`\n display: flex;\n -webkit-box-align: center;\n align-items: center;\n position: absolute;\n `}\n }\n`;\n","import { ButtonHTMLAttributes, ReactElement, ReactNode } from \"react\";\n\nimport {\n Button as ButtonComponent,\n Icon,\n LoadingIcon,\n Text,\n TextSubmitting,\n} from \"./styles\";\n\ntype ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n children: ReactNode;\n icon?: ReactElement;\n isSubmitting?: boolean;\n submittingMessage?: string;\n bgColor?: string;\n bordercolor?: string;\n color?: string;\n height?: string;\n};\n\nexport function Button({\n children,\n icon,\n isSubmitting = false,\n submittingMessage = \"\",\n disabled = false,\n color = \"#2F2F2F\",\n ...rest\n}: ButtonProps) {\n return (\n <ButtonComponent\n isSubmitting={isSubmitting}\n hasSubmittingMessage={submittingMessage.length > 0}\n disabled={isSubmitting || disabled}\n aria-disabled={isSubmitting || disabled}\n hasIcon={!!icon}\n color={color}\n {...rest}\n >\n {icon && !isSubmitting && <Icon data-testid=\"button-icon\">{icon}</Icon>}\n {isSubmitting && <LoadingIcon hasText={submittingMessage.length > 0} />}\n {(!isSubmitting || submittingMessage.length === 0) && (\n <Text className=\"text\">{children}</Text>\n )}\n {isSubmitting && submittingMessage.length > 0 && (\n <TextSubmitting>{submittingMessage}</TextSubmitting>\n )}\n </ButtonComponent>\n );\n}\n","import React, { useEffect, useState, useCallback } from 'react';\nimport { AlertContainer, DismissButton } from './styles';\nimport { AlertType } from './styles';\n\nimport { HiX } from 'react-icons/hi';\n\ninterface AlertProps {\n type?: AlertType;\n children: React.ReactNode;\n className?: string;\n dismissible?: boolean;\n onDismiss?: () => void;\n autoDismiss?: number;\n}\n\nexport const Alert = ({\n type = 'info',\n children,\n className,\n dismissible = false,\n onDismiss,\n autoDismiss\n}: AlertProps) => {\n const [isClosing, setIsClosing] = useState(false);\n\n const handleDismiss = useCallback(() => {\n setIsClosing(true);\n setTimeout(() => onDismiss?.(), 300);\n }, [onDismiss]);\n\n useEffect(() => {\n if (autoDismiss) {\n const timer = setTimeout(handleDismiss, autoDismiss);\n return () => clearTimeout(timer);\n }\n }, [autoDismiss, handleDismiss]);\n\n return (\n <AlertContainer\n $type={type}\n $dismissible={dismissible}\n $isClosing={isClosing}\n className={className}\n role=\"alert\"\n >\n {children}\n {dismissible && (\n <DismissButton \n onClick={handleDismiss} \n aria-label=\"Dismiss alert\"\n >\n <HiX /> \n </DismissButton>\n )}\n </AlertContainer>\n );\n};","import styled, { css, keyframes } from \"styled-components\";\n\nexport type AlertType = \"error\" | \"warning\" | \"info\" | \"success\";\n\nconst fadeIn = keyframes`\n from { opacity: 0; transform: translateY(-10px); }\n to { opacity: 1; transform: translateY(0); }\n`;\n\nconst fadeOut = keyframes`\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(-10px); }\n`;\n\ninterface AlertContainerProps {\n $type: AlertType;\n $dismissible?: boolean;\n $isClosing: boolean;\n}\n\nconst typeStyles = {\n error: css`\n background-color: var(--red);\n border: 1px solid var(--red);\n color: var(--white);\n svg {\n color: var(--white);\n }\n `,\n warning: css`\n background-color: var(--yellow-500);\n border: 1px solid var(--yellow-400);\n color: var(--black);\n svg {\n color: var(--black);\n }\n `,\n info: css`\n background-color: var(--blue);\n border: 1px solid var(--blue);\n color: var(--white);\n svg {\n color: var(--white);\n }\n `,\n success: css`\n background-color: var(--green);\n border: 1px solid var(--green-2);\n color: var(--white);\n svg {\n color: var(--white);\n }\n `,\n};\n\nexport const AlertContainer = styled.div<AlertContainerProps>`\n position: fixed;\n width: 500px;\n top: 15px;\n right: 15px;\n padding: 1rem ${({ $dismissible }) => ($dismissible ? \"2.5rem\" : \"1rem\")} 1rem\n 1rem;\n margin-bottom: 1rem;\n animation: ${({ $isClosing }) => ($isClosing ? fadeOut : fadeIn)} 0.3s\n ease-out;\n animation-fill-mode: forwards;\n align-items: center;\n gap: 0.5rem;\n box-shadow: var(--shadow-500);\n border-radius: 0.5rem;\n font-size: 1rem;\n font-weight: 500;\n\n ${({ $type }) => typeStyles[$type]}\n`;\n\nexport const DismissButton = styled.button`\n position: absolute;\n background: transparent;\n right: 10px;\n border: none;\n cursor: pointer;\n color: inherit;\n opacity: 1;\n transition: opacity 0.2s;\n\n &:hover {\n opacity: 0.7;\n }\n\n svg {\n width: 1rem;\n height: 1rem;\n }\n`;\n"],"mappings":"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","names":["import_react","styled","import_styled_components","import_react","import_react","import_styled_components","styled","FormPhoneInput","Input","import_styled_components","styled","Text","import_jsx_runtime","Button","Text","import_react","import_styled_components","styled","import_jsx_runtime","import_jsx_runtime","React","Input","Button"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/Form/index.tsx","../src/components/hooks/useError.ts","../src/components/styles/utils.ts","../src/components/Form/styles.ts","../src/components/styles/global.ts","../src/components/Input/index.tsx","../src/components/Input/masks.ts","../src/components/Input/styles.ts","../src/components/Button/styles.ts","../src/components/Button/index.tsx","../src/components/Alert/index.tsx","../src/components/Alert/styles.ts"],"sourcesContent":["export { default as MitreFormComponent } from \"./components/Form\";\nexport type { MitreFormComponentProps } from \"./components/Form\";\n","import React, { useState } from \"react\";\nimport { useError } from \"../hooks/useError\";\nimport { useForm, SubmitHandler, Controller } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\n\nimport { \n FormContainer, \n HeaderContainer, \n ButtonContainer, \n Form, \n Title, \n Text \n} from \"./styles\";\nimport FontLoader, { GlobalStyles } from \"../styles/global\";\n\nimport { Input } from \"../Input\";\nimport { Button } from \"../Button\";\nimport { Alert } from \"../Alert\";\n\nexport interface MitreFormComponentProps {\n productId: string;\n apiUrl: string;\n apiToken: string;\n utm_source: string;\n utm_medium: string;\n utm_campaign: string;\n utm_term: string;\n showHeader?: boolean;\n colorPrimary?: string;\n textColor?: string;\n backgroundColor?: string;\n innerPadding?: string;\n}\n\nconst schema = yup.object().shape({\n name: yup.string().required(\"Nome é obrigatório\"),\n email: yup.string().required(\"Email é obrigatório\").email(\"Email inválido\"),\n phone: yup.string().required(\"Telefone é obrigatório\")\n .test(\n 'min-digits',\n 'Número de telefone inválido!',\n (value) => {\n const digitsOnly = value?.replace(/\\D/g, '') || '';\n //TODO melhorar essa lógica com algum regex\n return digitsOnly.length >= 8\n })\n});\n\nconst MitreFormComponent = React.forwardRef<HTMLDivElement, MitreFormComponentProps>(({\n productId,\n apiUrl,\n apiToken,\n utm_source,\n utm_medium,\n utm_campaign,\n utm_term,\n showHeader = true,\n colorPrimary = \"#F6C76B\",\n textColor = \"#2F2F2F\",\n backgroundColor = \"#cecece\",\n innerPadding = \"1rem\",\n}, ref) => {\n const [loading, setIsLoading] = useState(false);\n const { error, handleError, clearError } = useError();\n const [successMessage, setSuccessMessage] = useState('');\n\n const { control, register, handleSubmit, formState: { errors }, reset, watch } = useForm({\n resolver: yupResolver(schema),\n });\n\n const phoneValue = watch(\"phone\");\n\n const sendMessage: SubmitHandler<{ name: string; email: string; phone: string; }> = async (data) => {\n const { name, email, phone } = data;\n const message = \"Gostaria de mais informações sobre o produto\";\n\n try {\n setIsLoading(true);\n\n if (!productId || !utm_source || !utm_medium || !utm_campaign || !utm_term || !apiToken) {\n throw new Error(\"Parâmetros obrigatórios não informados\");\n }\n\n const response = await fetch(`${apiUrl}/leads`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${apiToken}`,\n },\n body: JSON.stringify({\n name,\n email,\n phone,\n message,\n productId,\n utm_source,\n utm_medium,\n utm_campaign,\n utm_term,\n }),\n });\n\n if (!response.ok) {\n throw new Error(\"Falha ao enviar a mensagem!\");\n }\n\n setSuccessMessage(\"Mensagem enviada com sucesso!\");\n reset({\n name: \"\", \n email: \"\",\n phone: \"\",\n });\n } catch (err) {\n handleError(err);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <FontLoader />\n <GlobalStyles />\n\n {error && (\n <Alert \n type=\"error\" \n dismissible\n onDismiss={clearError}\n autoDismiss={5000}\n >\n {error!.message}\n </Alert>\n )}\n\n {successMessage && (\n <Alert \n type=\"success\"\n dismissible\n onDismiss={() => setSuccessMessage('')}\n autoDismiss={5000}\n >\n {successMessage}\n </Alert>\n )}\n\n <FormContainer $backgroundColor={backgroundColor} $innerPadding={innerPadding} ref={ref} >\n {showHeader && \n <HeaderContainer>\n <Title $textColor={textColor}>Atendimento por mensagem</Title>\n\n <Text $textColor={textColor}>Informe seus dados e retornaremos a mensagem.</Text>\n </HeaderContainer>\n }\n\n <Form $textColor={textColor} onSubmit={handleSubmit(sendMessage)} noValidate>\n <Input\n id=\"name\"\n label=\"Nome *\"\n placeholder=\"Digite seu nome\"\n {...register(\"name\")}\n borderColor={colorPrimary}\n textColor={textColor}\n error={errors.name?.message}\n autoComplete=\"name\"\n required\n />\n\n <Input\n id=\"email\"\n label=\"Email *\"\n type=\"email\"\n placeholder=\"exemplo@email.com\"\n {...register(\"email\")}\n borderColor={colorPrimary}\n textColor={textColor}\n error={errors.email?.message}\n autoComplete=\"email\"\n required\n />\n\n <Controller\n control={control}\n name=\"phone\"\n defaultValue=\"\"\n render={({ field, fieldState }) => (\n <Input\n id=\"phone\"\n label=\"Telefone *\"\n placeholder=\"(11) 00000-0000\"\n mask=\"phone\"\n borderColor={colorPrimary}\n textColor={textColor}\n error={fieldState.error?.message}\n required\n value={field.value}\n onChange={field.onChange}\n name={field.name}\n />\n )}\n />\n\n <h6>* Campos de preenchimento obrigatório.</h6>\n\n <ButtonContainer>\n <Button bgColor={colorPrimary} color={textColor} type=\"submit\" isSubmitting={loading}>\n Enviar mensagem\n </Button>\n </ButtonContainer>\n\n <p>A Mitre Realty respeita a sua privacidade e utiliza os seus dados pessoais para contatá-lo por e-mail ou telefone aqui registrados. Para saber mais, acesse a nossa{ ' '}\n <a\n href=\"https://www.mitrerealty.com.br/politica-de-privacidade\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Política de Privacidade\n </a>. Ao clicar em {'\"'}enviar{'\"'}, você concorda em permitir que a Mitre Realty, armazene e processe os dados pessoais fornecidos por você para finalidade informada</p>\n\n </Form>\n </FormContainer>\n </>\n );\n});\n\nMitreFormComponent.displayName = \"MitreFormComponent\";\n\nexport default MitreFormComponent;\n","import { useState } from \"react\";\n\nexport function useError() {\n const [error, setError] = useState<Error | null>(null);\n\n const handleError = (err: unknown) => {\n const errorObj = err instanceof Error ? err : new Error(String(err));\n setError(errorObj);\n console.error(errorObj);\n };\n\n const clearError = () => setError(null);\n\n return { error, handleError, clearError };\n}\n","type directionType = \"column\" | \"row\";\ntype alignItemsType = \"center\" | \"flex-start\";\n\ntype jutifyContentType = \"center\" | \"space-between\";\n\nexport function flex(\n direction: directionType = \"row\",\n alignItems?: alignItemsType,\n justifyContent?: jutifyContentType\n) {\n return `\n align-items:${alignItems || null};\n display:flex;\n flex-direction:${direction};\n justify-content:${justifyContent || null};\n `;\n}\n\nexport const alignX = `\n left:50%;\n transform:translateX(-50%);\n`;\n\nexport const alignXAndY = `\n left:50%;\n top:50%;\n transform:translate(-50%, -50%);\n`;\n\nexport const darkEffect = `\n &:hover {\n cursor:pointer;\n filter:brightness(98%);\n }\n\n &:active {\n filter:brightness(95%);\n }\n`;\n\nexport const opacityEffect = `\n &:hover {\n cursor:pointer;\n opacity:.9;\n }\n\n &:active {\n opacity:.7;\n }\n`;\n\nexport const modalZIndex = 9999;\n\nexport const breakpoints = {\n tablet: \"1024px\",\n};\n","import { flex, opacityEffect } from \"../styles/utils\";\nimport styled from \"styled-components\";\n\nexport const FormContainer = styled.div<{\n $backgroundColor: string;\n $innerPadding: string;\n}>`\n ${flex(\"column\")}\n align-items: stretch;\n justify-content: flex-start;\n overflow-x: hidden;\n overflow-y: auto;\n\n background: ${(props) => props.$backgroundColor || \" #cecece\"};\n\n padding: ${(props) => props.$innerPadding || \"1rem\"};\n\n /* Hide scrollbars for WebKit browsers */\n ::-webkit-scrollbar {\n display: none;\n }\n\n /* Hide scrollbars for Firefox */\n scrollbar-width: none;\n\n box-sizing: border-box;\n height: 100%;\n`;\n\nexport const HeaderContainer = styled.div`\n margin-bottom: 1rem;\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n margin-top: 0.75rem;\n`;\n\nexport const Form = styled.form<{ $textColor: string }>`\n label {\n font-weight: 700;\n }\n\n input {\n background: white;\n margin-bottom: 0.75rem;\n }\n\n p {\n font-family: \"Montserrat\", sans-serif;\n font-style: italic;\n font-weight: 200;\n font-size: 0.8rem;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n text-align: start;\n }\n\n a {\n font-family: \"Montserrat\", sans-serif;\n font-style: italic;\n font-weight: 200;\n font-size: 0.8rem;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n }\n\n h6 {\n text-align: start;\n margin-left: 10px;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n }\n\n & > div {\n margin-bottom: 10px;,\n }\n\n button {\n ${opacityEffect}\n color: var(--black);\n font-weight: 600;\n border: none;\n border-radius: 8px;\n width: 60%;\n margin-top: 10px;\n margin-bottom: 10px;\n }\n`;\n\nexport const Title = styled.h2<{ $textColor: string }>`\n font-size: 1.25rem;\n font-weight: 700;\n line-height: 24px;\n letter-spacing: 0em;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n`;\n\nexport const Text = styled.p<{ $textColor: string }>`\n font-size: 1rem;\n font-weight: 400;\n line-height: 23px;\n letter-spacing: 0em;\n margin-top: 10px;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n`;\n","import { createGlobalStyle } from \"styled-components\";\nimport React, { useEffect } from \"react\";\n\nexport const GlobalStyles = createGlobalStyle`\n :root {\n --red: #e52e4d;\n --white: #FFF;\n --black: #2F2F2F;\n --black-2:#1E1E1E;\n --alphaBlack: #000000;\n --black-2:#1E1E1E;\n --black-3:#353535;\n\n --yellow-400:#FFD789;\n --yellow-500: #F6C76B;\n --gray-40:#F0F0F0;\n --gray-45:#767676;\n --gray-50: #686A69;\n --gray-60: #8F8F8F;\n --gray-100: #B6B6B6;\n --gray-150: #B9B9B9;\n --gray-200: #D2D2D2;\n --gray-300: #EBEBEB;\n --gray-400: #ECECEC;\n --gray-500: #F4F4F4;\n --gray-550:#6F6F6F;\n --gray-600:#686868;\n --gray-700: #535353;\n --gray-800:#9D9D9D;\n --shadow-500: 0px 4px 8px rgba(91, 91, 91, 0.2);\n --green:#57C06E;\n --green-2:#2DCE68;\n --blue:#007BFF;\n }\n\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n html {\n scroll-behavior: smooth;\n\n @media (max-width: 1080px) {\n font-size: 93.75%;\n }\n @media (max-width: 720px) {\n font-size: 87.5%;\n }\n }\n\n body {\n background: var(--white);\n -webkit-font-smoothing: antialiased;\n }\n\n body, input, textarea, select, button {\n font-family: \"Montserrat\", sans-serif;\n font-weight: 400;\n } \n\n h1, h2, h3, h4, h5, h6, strong {\n font-weight: 600;\n }\n\n button {\n cursor: pointer;\n }\n\n [disabled] {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .hidden {\n overflow: hidden;\n }\n\n ::-webkit-scrollbar {\n -webkit-appearance: none;\n background: var(--gray-500);\n width: 6px;\n height: 10px;\n }\n\n ::-webkit-scrollbar-thumb {\n background-color: var(--gray-50);\n }\n\n .aligncenter {\n text-align: center;\n }\n\n .width-190px {\n width:190px;\n }\n\n .hidden-content {\n display:none !important;\n }\n\n .global-margin-bottom {\n margin-bottom:20px;\n }\n\n .background-light-gray {\n background:#F4F4F4;\n }\n\n .full-width-and-height {\n height:100%;\n width:100%;\n }\n\n .flex-direction-column {\n flex-direction:column;\n }\n\n .bold {\n font-weight:700;\n }\n\n .margin-center-x {\n margin:0 auto;\n }\n\n .border-none {\n border:none;\n }\n\n .text-center {\n text-align:center;\n }\n\n .relative {\n position:relative;\n }\n\n /* accessibility */\n body ._access-menu p._text-center{\n font-family: \"Montserrat\", sans-serif;\n font-style: italic;\n font-size: 1.2rem!important;\n margin-top: 6px;\n margin-bottom: 3px;\n } \n\n`;\n\nconst FontLoader: React.FC = () => {\n useEffect(() => {\n const link = document.createElement(\"link\");\n link.href =\n \"https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap\";\n link.rel = \"stylesheet\";\n document.head.appendChild(link);\n }, []);\n\n return null;\n};\n\nexport default FontLoader;\n","import {\n FormEvent,\n forwardRef,\n ForwardRefRenderFunction,\n InputHTMLAttributes,\n useCallback,\n useRef,\n} from \"react\";\nimport { FieldError } from \"react-hook-form\";\nimport { cep, cpf, currency, date } from \"./masks\";\n\n\nimport {\n FormControl,\n FormErrorMessage,\n FormLabel,\n Input as FormInput,\n} from \"./styles\";\n\ntype InputType =\n | \"text\"\n | \"email\"\n | \"password\"\n | \"number\"\n | \"tel\"\n | \"url\"\n | \"date\"\n | \"time\"\n | \"datetime-local\";\n\ninterface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n id: string;\n label?: string;\n error?: string | FieldError;\n showErrorMessage?: boolean;\n borderColor: string;\n textColor?: string;\n\n mask?: \"cep\" | \"currency\" | \"cpf\" | \"phone\" | \"date\";\n type?: InputType;\n}\n\nconst InputBase: ForwardRefRenderFunction<HTMLInputElement, InputProps> = (\n { id, label, error, showErrorMessage = true, borderColor, textColor, mask = \"\", type = \"text\", ...rest },\n ref\n) => {\n const phoneInputRef = useRef<{ input: HTMLInputElement }>(null);\n\n const handleKeyUp = useCallback(\n (e: FormEvent<HTMLInputElement>) => {\n if (mask === \"cep\") cep(e);\n if (mask === \"currency\") currency(e);\n if (mask === \"cpf\") cpf(e);\n if (mask === \"date\") date(e);\n },\n [mask]\n );\n\n return (\n <FormControl isInvalid={!!error}>\n {!!label && <FormLabel htmlFor={id} $textColor={textColor}>{label}</FormLabel>}\n\n {!mask ? (\n <FormInput\n id={id}\n ref={ref}\n type={type} \n $bordercolor={borderColor}\n aria-invalid={!!error && showErrorMessage ? \"true\" : \"false\"}\n autoComplete={rest.autoComplete || \"on\"}\n {...rest}\n />\n ) : mask === 'phone' ? (\n <></>\n ) : (\n <FormInput\n id={id}\n ref={ref}\n type={type} \n $bordercolor={borderColor}\n aria-invalid={!!error && showErrorMessage ? \"true\" : \"false\"}\n onKeyUp={handleKeyUp}\n autoComplete={rest.autoComplete || \"on\"}\n {...rest}\n />\n )}\n\n {!!error && showErrorMessage && (\n <FormErrorMessage data-testid=\"error-message\">\n {typeof error === 'string' ? error : error.message}\n </FormErrorMessage>\n )}\n </FormControl>\n );\n};\n\nexport const Input = forwardRef(InputBase);\n","import { FormEvent } from \"react\";\n\nexport function cep(e: FormEvent<HTMLInputElement>) {\n e.currentTarget.maxLength = 9;\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/^(\\d{5})(\\d)/, \"$1-$2\");\n e.currentTarget.value = value;\n return e;\n}\n\nexport function currency(e: FormEvent<HTMLInputElement>) {\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d)(\\d{2})$/, \"$1,$2\");\n value = value.replace(/(?=(\\d{3})+(\\D))\\B/g, \".\");\n\n e.currentTarget.value = value;\n return e;\n}\n\nexport function cpf(e: FormEvent<HTMLInputElement>) {\n e.currentTarget.maxLength = 14;\n let value = e.currentTarget.value;\n if (!value.match(/^(\\d{3}).(\\d{3}).(\\d{3})-(\\d{2})$/)) {\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d{3})(\\d)/, \"$1.$2\");\n value = value.replace(/(\\d{3})(\\d)/, \"$1.$2\");\n value = value.replace(/(\\d{3})(\\d{2})$/, \"$1-$2\");\n\n e.currentTarget.value = value;\n }\n return e;\n}\n\nexport function date(e: FormEvent<HTMLInputElement>) {\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n e.currentTarget.value = value;\n return e;\n}\n\nexport function phone(e: FormEvent<HTMLInputElement>) {\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n e.currentTarget.value = value;\n return e;\n}\n","import styled, { css } from \"styled-components\";\nimport { InputHTMLAttributes } from \"react\";\n\ntype InputProps = {\n isInvalid?: boolean;\n bordercolor?: string;\n};\n\nexport const FormLabel = styled.label<InputProps & { $textColor?: string }>`\n font-family: \"Montserrat\", sans-serif;\n font-style: normal;\n font-weight: 500;\n font-size: 1rem;\n color: ${(props) =>\n props.isInvalid ? \"var(--red)\" : props.$textColor || \"var(--black)\"};\n display: block;\n margin-bottom: 0.5rem;\n text-align: left;\n`;\n\nexport const Input = styled.input<\n InputHTMLAttributes<HTMLInputElement> & { $bordercolor?: string }\n>`\n font-family: \"Montserrat\", sans-serif;\n font-style: normal;\n font-weight: 500;\n font-size: 1rem;\n line-height: 1.5rem;\n background: var(--gray-500);\n color: var(--black);\n padding: 0.5rem;\n border-radius: 0.125rem;\n border: 1px solid transparent;\n display: block;\n height: 3.125rem;\n width: 100%;\n\n &:focus {\n border-radius: 0.125rem;\n border: 2px solid ${(props) => props.$bordercolor || \"var(--yellow-500)\"};\n outline: none;\n }\n\n &::placeholder {\n font-size: 1rem;\n line-height: 1.5rem;\n color: #b6b6b6;\n font-weight: 800;\n }\n\n /* Autofill styles */\n &:-webkit-autofill {\n background: var(--gray-500) !important;\n color: var(--black) !important;\n -webkit-text-fill-color: var(--black) !important;\n transition: background-color 5000s ease-in-out 0s; /* Prevent flashing */\n }\n\n &:-webkit-autofill::first-line {\n font-family: \"Montserrat\", sans-serif;\n font-size: 1rem;\n font-weight: 500;\n }\n`;\n\nexport const FormErrorMessage = styled.small`\n font-size: 0.75rem;\n line-height: 1.125rem;\n color: var(--red);\n margin-top: 0.25rem;\n display: block;\n`;\n\nexport const FormControl = styled.div.withConfig({\n shouldForwardProp: (prop) => ![\"isInvalid\", \"$bordercolor\"].includes(prop),\n})<{ isInvalid?: boolean; $bordercolor?: string }>`\n ${FormLabel} {\n ${(props) =>\n props.isInvalid &&\n css`\n color: var(--red);\n `};\n }\n\n ${Input} {\n ${(props) =>\n props.isInvalid &&\n css`\n border: 1px solid var(--red);\n\n &:not(:focus)::placeholder {\n color: var(--red);\n font-weight: 600;\n }\n `};\n\n &:focus {\n ${(props) =>\n props.isInvalid &&\n css`\n border: 1px solid var(--red);\n `};\n }\n }\n`;\n","import { darken } from \"polished\";\nimport styled, { css } from \"styled-components\";\n\ntype ButtonProps = {\n hasIcon?: boolean;\n isSubmitting?: boolean;\n hasSubmittingMessage?: boolean;\n bgColor?: string;\n bordercolor?: string;\n color?: string;\n height?: string;\n};\n\nexport const Icon = styled.span`\n font-size: 0;\n line-height: 0;\n transition: all 0.25s ease;\n\n transform: translate3d(-30px, 0px, 0px);\n visibility: hidden;\n opacity: 0;\n margin-right: 0.625rem;\n`;\n\nexport const Text = styled.span`\n font-family: \"Montserrat\", sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n margin-bottom: -2px;\n\n transition: all 0.25s ease;\n`;\n\nexport const TextSubmitting = styled.span`\n font-family: \"Montserrat\", sans-serif;\n font-weight: 400;\n font-size: 1rem;\n\n transition: all 0.25s ease;\n`;\n\nexport const LoadingIcon = styled.span.withConfig({\n shouldForwardProp: (prop) => prop !== \"hasText\",\n})<{ hasText?: boolean }>`\n display: block;\n\n width: 1rem;\n height: 1rem;\n border: 0.125rem solid var(--white);\n border-radius: 50%;\n animation: loadingAnimation 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: var(--white) transparent transparent transparent;\n\n margin-right: ${(props) => (props.hasText ? \"0.625rem\" : \"0\")};\n\n @keyframes loadingAnimation {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nexport const Button = styled.button.withConfig({\n shouldForwardProp: (prop) =>\n ![\n \"hasIcon\",\n \"isSubmitting\",\n \"hasSubmittingMessage\",\n \"bgColor\",\n \"bordercolor\",\n \"color\",\n \"height\",\n ].includes(prop),\n})<ButtonProps>`\n background: ${(props) => darken(0.1, props?.bgColor || \"#F6C76B\")};\n color: ${(props) => props?.color || \"#2F2F2F\"};\n border: 1px solid ${(props) => darken(0.1, props?.bordercolor || \"#F6C76B\")};\n border-radius: 2px;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0 0.75rem;\n height: ${(props) => props?.height || \"3.125rem\"};\n position: relative;\n font-size: 0;\n line-height: 0;\n\n transition: all 0.25s;\n\n ${Icon} {\n display: ${(props) => (props?.hasIcon ? \"block\" : \"\")};\n }\n\n ${Text} {\n transform: ${(props) =>\n props?.hasIcon ? \"translate3d(-4.5px, 0px, 0px)\" : \"unset\"};\n\n @media print, screen and (min-width: 40em) {\n transform: ${(props) =>\n props?.hasIcon ? \"translate3d(-14.5px, 0px, 0px)\" : \"unset\"};\n }\n\n color: ${(props) => props?.color || \"#2F2F2F\"};\n }\n\n &:hover {\n background: ${(props) => darken(0.2, props?.bgColor || \"#F6C76B\")};\n border-color: ${(props) => darken(0.2, props?.bordercolor || \"#F6C76B\")};\n\n ${Icon} {\n opacity: 1;\n visibility: visible;\n transform: translate3d(0px, 0px, 0px);\n }\n\n ${Text} {\n transform: ${(props) =>\n props?.hasIcon ? \"translate3d(-5px, 0px, 0px)\" : \"unset\"};\n }\n }\n\n ${Text} {\n ${(props) =>\n props.isSubmitting &&\n !props.hasSubmittingMessage &&\n css`\n transform: unset;\n opacity: 0;\n `}\n }\n\n ${LoadingIcon} {\n ${(props) =>\n props.isSubmitting &&\n !props.hasSubmittingMessage &&\n css`\n display: flex;\n -webkit-box-align: center;\n align-items: center;\n position: absolute;\n `}\n }\n`;\n","import { ButtonHTMLAttributes, ReactElement, ReactNode } from \"react\";\n\nimport {\n Button as ButtonComponent,\n Icon,\n LoadingIcon,\n Text,\n TextSubmitting,\n} from \"./styles\";\n\ntype ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n children: ReactNode;\n icon?: ReactElement;\n isSubmitting?: boolean;\n submittingMessage?: string;\n bgColor?: string;\n bordercolor?: string;\n color?: string;\n height?: string;\n};\n\nexport function Button({\n children,\n icon,\n isSubmitting = false,\n submittingMessage = \"\",\n disabled = false,\n color = \"#2F2F2F\",\n ...rest\n}: ButtonProps) {\n return (\n <ButtonComponent\n isSubmitting={isSubmitting}\n hasSubmittingMessage={submittingMessage.length > 0}\n disabled={isSubmitting || disabled}\n aria-disabled={isSubmitting || disabled}\n hasIcon={!!icon}\n color={color}\n {...rest}\n >\n {icon && !isSubmitting && <Icon data-testid=\"button-icon\">{icon}</Icon>}\n {isSubmitting && <LoadingIcon hasText={submittingMessage.length > 0} />}\n {(!isSubmitting || submittingMessage.length === 0) && (\n <Text className=\"text\">{children}</Text>\n )}\n {isSubmitting && submittingMessage.length > 0 && (\n <TextSubmitting>{submittingMessage}</TextSubmitting>\n )}\n </ButtonComponent>\n );\n}\n","import React, { useEffect, useState, useCallback } from 'react';\nimport { AlertContainer, DismissButton } from './styles';\nimport { AlertType } from './styles';\n\nimport { HiX } from 'react-icons/hi';\n\ninterface AlertProps {\n type?: AlertType;\n children: React.ReactNode;\n className?: string;\n dismissible?: boolean;\n onDismiss?: () => void;\n autoDismiss?: number;\n}\n\nexport const Alert = ({\n type = 'info',\n children,\n className,\n dismissible = false,\n onDismiss,\n autoDismiss\n}: AlertProps) => {\n const [isClosing, setIsClosing] = useState(false);\n\n const handleDismiss = useCallback(() => {\n setIsClosing(true);\n setTimeout(() => onDismiss?.(), 300);\n }, [onDismiss]);\n\n useEffect(() => {\n if (autoDismiss) {\n const timer = setTimeout(handleDismiss, autoDismiss);\n return () => clearTimeout(timer);\n }\n }, [autoDismiss, handleDismiss]);\n\n return (\n <AlertContainer\n $type={type}\n $dismissible={dismissible}\n $isClosing={isClosing}\n className={className}\n role=\"alert\"\n >\n {children}\n {dismissible && (\n <DismissButton \n onClick={handleDismiss} \n aria-label=\"Dismiss alert\"\n >\n <HiX /> \n </DismissButton>\n )}\n </AlertContainer>\n );\n};","import styled, { css, keyframes } from \"styled-components\";\n\nexport type AlertType = \"error\" | \"warning\" | \"info\" | \"success\";\n\nconst fadeIn = keyframes`\n from { opacity: 0; transform: translateY(-10px); }\n to { opacity: 1; transform: translateY(0); }\n`;\n\nconst fadeOut = keyframes`\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(-10px); }\n`;\n\ninterface AlertContainerProps {\n $type: AlertType;\n $dismissible?: boolean;\n $isClosing: boolean;\n}\n\nconst typeStyles = {\n error: css`\n background-color: var(--red);\n border: 1px solid var(--red);\n color: var(--white);\n svg {\n color: var(--white);\n }\n `,\n warning: css`\n background-color: var(--yellow-500);\n border: 1px solid var(--yellow-400);\n color: var(--black);\n svg {\n color: var(--black);\n }\n `,\n info: css`\n background-color: var(--blue);\n border: 1px solid var(--blue);\n color: var(--white);\n svg {\n color: var(--white);\n }\n `,\n success: css`\n background-color: var(--green);\n border: 1px solid var(--green-2);\n color: var(--white);\n svg {\n color: var(--white);\n }\n `,\n};\n\nexport const AlertContainer = styled.div<AlertContainerProps>`\n position: fixed;\n width: 500px;\n top: 15px;\n right: 15px;\n padding: 1rem ${({ $dismissible }) => ($dismissible ? \"2.5rem\" : \"1rem\")} 1rem\n 1rem;\n margin-bottom: 1rem;\n animation: ${({ $isClosing }) => ($isClosing ? fadeOut : fadeIn)} 0.3s\n ease-out;\n animation-fill-mode: forwards;\n align-items: center;\n gap: 0.5rem;\n box-shadow: var(--shadow-500);\n border-radius: 0.5rem;\n font-size: 1rem;\n font-weight: 500;\n\n ${({ $type }) => typeStyles[$type]}\n`;\n\nexport const DismissButton = styled.button`\n position: absolute;\n background: transparent;\n right: 10px;\n border: none;\n cursor: pointer;\n color: inherit;\n opacity: 1;\n transition: opacity 0.2s;\n\n &:hover {\n opacity: 0.7;\n }\n\n svg {\n width: 1rem;\n height: 1rem;\n }\n`;\n"],"mappings":"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","names":["import_react","styled","import_styled_components","import_react","import_react","import_styled_components","styled","Input","import_styled_components","styled","Text","import_jsx_runtime","Button","Text","import_react","import_styled_components","styled","import_jsx_runtime","import_jsx_runtime","React","Input","Button"]}
|
package/dist/index.js
CHANGED
|
@@ -343,10 +343,6 @@ function date(e) {
|
|
|
343
343
|
return e;
|
|
344
344
|
}
|
|
345
345
|
|
|
346
|
-
// src/components/Input/index.tsx
|
|
347
|
-
import FormPhoneInput from "react-phone-input-2";
|
|
348
|
-
import "react-phone-input-2/lib/style.css";
|
|
349
|
-
|
|
350
346
|
// src/components/Input/styles.ts
|
|
351
347
|
import styled2, { css } from "styled-components";
|
|
352
348
|
var FormLabel = styled2.label`
|
|
@@ -436,7 +432,7 @@ var FormControl = styled2.div.withConfig({
|
|
|
436
432
|
`;
|
|
437
433
|
|
|
438
434
|
// src/components/Input/index.tsx
|
|
439
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
435
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
440
436
|
var InputBase = ({ id, label, error, showErrorMessage = true, borderColor, textColor, mask = "", type = "text", ...rest }, ref) => {
|
|
441
437
|
const phoneInputRef = useRef(null);
|
|
442
438
|
const handleKeyUp = useCallback(
|
|
@@ -461,12 +457,7 @@ var InputBase = ({ id, label, error, showErrorMessage = true, borderColor, textC
|
|
|
461
457
|
autoComplete: rest.autoComplete || "on",
|
|
462
458
|
...rest
|
|
463
459
|
}
|
|
464
|
-
) : mask === "phone" ? /* @__PURE__ */ jsx(
|
|
465
|
-
FormPhoneInput,
|
|
466
|
-
{
|
|
467
|
-
country: "br"
|
|
468
|
-
}
|
|
469
|
-
) : /* @__PURE__ */ jsx(
|
|
460
|
+
) : mask === "phone" ? /* @__PURE__ */ jsx(Fragment, {}) : /* @__PURE__ */ jsx(
|
|
470
461
|
Input,
|
|
471
462
|
{
|
|
472
463
|
id,
|
|
@@ -772,7 +763,7 @@ var Alert = ({
|
|
|
772
763
|
};
|
|
773
764
|
|
|
774
765
|
// src/components/Form/index.tsx
|
|
775
|
-
import { Fragment, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
766
|
+
import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
776
767
|
var schema = yup.object().shape({
|
|
777
768
|
name: yup.string().required("Nome \xE9 obrigat\xF3rio"),
|
|
778
769
|
email: yup.string().required("Email \xE9 obrigat\xF3rio").email("Email inv\xE1lido"),
|
|
@@ -847,7 +838,7 @@ var MitreFormComponent = React3.forwardRef(({
|
|
|
847
838
|
setIsLoading(false);
|
|
848
839
|
}
|
|
849
840
|
};
|
|
850
|
-
return /* @__PURE__ */ jsxs4(
|
|
841
|
+
return /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
851
842
|
/* @__PURE__ */ jsx4(global_default, {}),
|
|
852
843
|
/* @__PURE__ */ jsx4(GlobalStyles, {}),
|
|
853
844
|
error && /* @__PURE__ */ jsx4(
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Form/index.tsx","../src/components/hooks/useError.ts","../src/components/styles/utils.ts","../src/components/Form/styles.ts","../src/components/styles/global.ts","../src/components/Input/index.tsx","../src/components/Input/masks.ts","../src/components/Input/styles.ts","../src/components/Button/styles.ts","../src/components/Button/index.tsx","../src/components/Alert/index.tsx","../src/components/Alert/styles.ts"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useError } from \"../hooks/useError\";\nimport { useForm, SubmitHandler, Controller } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\n\nimport { \n FormContainer, \n HeaderContainer, \n ButtonContainer, \n Form, \n Title, \n Text \n} from \"./styles\";\nimport FontLoader, { GlobalStyles } from \"../styles/global\";\n\nimport { Input } from \"../Input\";\nimport { Button } from \"../Button\";\nimport { Alert } from \"../Alert\";\n\nexport interface MitreFormComponentProps {\n productId: string;\n apiUrl: string;\n apiToken: string;\n utm_source: string;\n utm_medium: string;\n utm_campaign: string;\n utm_term: string;\n showHeader?: boolean;\n colorPrimary?: string;\n textColor?: string;\n backgroundColor?: string;\n innerPadding?: string;\n}\n\nconst schema = yup.object().shape({\n name: yup.string().required(\"Nome é obrigatório\"),\n email: yup.string().required(\"Email é obrigatório\").email(\"Email inválido\"),\n phone: yup.string().required(\"Telefone é obrigatório\")\n .test(\n 'min-digits',\n 'Número de telefone inválido!',\n (value) => {\n const digitsOnly = value?.replace(/\\D/g, '') || '';\n //TODO melhorar essa lógica com algum regex\n return digitsOnly.length >= 8\n })\n});\n\nconst MitreFormComponent = React.forwardRef<HTMLDivElement, MitreFormComponentProps>(({\n productId,\n apiUrl,\n apiToken,\n utm_source,\n utm_medium,\n utm_campaign,\n utm_term,\n showHeader = true,\n colorPrimary = \"#F6C76B\",\n textColor = \"#2F2F2F\",\n backgroundColor = \"#cecece\",\n innerPadding = \"1rem\",\n}, ref) => {\n const [loading, setIsLoading] = useState(false);\n const { error, handleError, clearError } = useError();\n const [successMessage, setSuccessMessage] = useState('');\n\n const { control, register, handleSubmit, formState: { errors }, reset, watch } = useForm({\n resolver: yupResolver(schema),\n });\n\n const phoneValue = watch(\"phone\");\n\n const sendMessage: SubmitHandler<{ name: string; email: string; phone: string; }> = async (data) => {\n const { name, email, phone } = data;\n const message = \"Gostaria de mais informações sobre o produto\";\n\n try {\n setIsLoading(true);\n\n if (!productId || !utm_source || !utm_medium || !utm_campaign || !utm_term || !apiToken) {\n throw new Error(\"Parâmetros obrigatórios não informados\");\n }\n\n const response = await fetch(`${apiUrl}/leads`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${apiToken}`,\n },\n body: JSON.stringify({\n name,\n email,\n phone,\n message,\n productId,\n utm_source,\n utm_medium,\n utm_campaign,\n utm_term,\n }),\n });\n\n if (!response.ok) {\n throw new Error(\"Falha ao enviar a mensagem!\");\n }\n\n setSuccessMessage(\"Mensagem enviada com sucesso!\");\n reset({\n name: \"\", \n email: \"\",\n phone: \"\",\n });\n } catch (err) {\n handleError(err);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <FontLoader />\n <GlobalStyles />\n\n {error && (\n <Alert \n type=\"error\" \n dismissible\n onDismiss={clearError}\n autoDismiss={5000}\n >\n {error!.message}\n </Alert>\n )}\n\n {successMessage && (\n <Alert \n type=\"success\"\n dismissible\n onDismiss={() => setSuccessMessage('')}\n autoDismiss={5000}\n >\n {successMessage}\n </Alert>\n )}\n\n <FormContainer $backgroundColor={backgroundColor} $innerPadding={innerPadding} ref={ref} >\n {showHeader && \n <HeaderContainer>\n <Title $textColor={textColor}>Atendimento por mensagem</Title>\n\n <Text $textColor={textColor}>Informe seus dados e retornaremos a mensagem.</Text>\n </HeaderContainer>\n }\n\n <Form $textColor={textColor} onSubmit={handleSubmit(sendMessage)} noValidate>\n <Input\n id=\"name\"\n label=\"Nome *\"\n placeholder=\"Digite seu nome\"\n {...register(\"name\")}\n borderColor={colorPrimary}\n textColor={textColor}\n error={errors.name?.message}\n autoComplete=\"name\"\n required\n />\n\n <Input\n id=\"email\"\n label=\"Email *\"\n type=\"email\"\n placeholder=\"exemplo@email.com\"\n {...register(\"email\")}\n borderColor={colorPrimary}\n textColor={textColor}\n error={errors.email?.message}\n autoComplete=\"email\"\n required\n />\n\n <Controller\n control={control}\n name=\"phone\"\n defaultValue=\"\"\n render={({ field, fieldState }) => (\n <Input\n id=\"phone\"\n label=\"Telefone *\"\n placeholder=\"(11) 00000-0000\"\n mask=\"phone\"\n borderColor={colorPrimary}\n textColor={textColor}\n error={fieldState.error?.message}\n required\n value={field.value}\n onChange={field.onChange}\n name={field.name}\n />\n )}\n />\n\n <h6>* Campos de preenchimento obrigatório.</h6>\n\n <ButtonContainer>\n <Button bgColor={colorPrimary} color={textColor} type=\"submit\" isSubmitting={loading}>\n Enviar mensagem\n </Button>\n </ButtonContainer>\n\n <p>A Mitre Realty respeita a sua privacidade e utiliza os seus dados pessoais para contatá-lo por e-mail ou telefone aqui registrados. Para saber mais, acesse a nossa{ ' '}\n <a\n href=\"https://www.mitrerealty.com.br/politica-de-privacidade\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Política de Privacidade\n </a>. Ao clicar em {'\"'}enviar{'\"'}, você concorda em permitir que a Mitre Realty, armazene e processe os dados pessoais fornecidos por você para finalidade informada</p>\n\n </Form>\n </FormContainer>\n </>\n );\n});\n\nMitreFormComponent.displayName = \"MitreFormComponent\";\n\nexport default MitreFormComponent;\n","import { useState } from \"react\";\n\nexport function useError() {\n const [error, setError] = useState<Error | null>(null);\n\n const handleError = (err: unknown) => {\n const errorObj = err instanceof Error ? err : new Error(String(err));\n setError(errorObj);\n console.error(errorObj);\n };\n\n const clearError = () => setError(null);\n\n return { error, handleError, clearError };\n}\n","type directionType = \"column\" | \"row\";\ntype alignItemsType = \"center\" | \"flex-start\";\n\ntype jutifyContentType = \"center\" | \"space-between\";\n\nexport function flex(\n direction: directionType = \"row\",\n alignItems?: alignItemsType,\n justifyContent?: jutifyContentType\n) {\n return `\n align-items:${alignItems || null};\n display:flex;\n flex-direction:${direction};\n justify-content:${justifyContent || null};\n `;\n}\n\nexport const alignX = `\n left:50%;\n transform:translateX(-50%);\n`;\n\nexport const alignXAndY = `\n left:50%;\n top:50%;\n transform:translate(-50%, -50%);\n`;\n\nexport const darkEffect = `\n &:hover {\n cursor:pointer;\n filter:brightness(98%);\n }\n\n &:active {\n filter:brightness(95%);\n }\n`;\n\nexport const opacityEffect = `\n &:hover {\n cursor:pointer;\n opacity:.9;\n }\n\n &:active {\n opacity:.7;\n }\n`;\n\nexport const modalZIndex = 9999;\n\nexport const breakpoints = {\n tablet: \"1024px\",\n};\n","import { flex, opacityEffect } from \"../styles/utils\";\nimport styled from \"styled-components\";\n\nexport const FormContainer = styled.div<{\n $backgroundColor: string;\n $innerPadding: string;\n}>`\n ${flex(\"column\")}\n align-items: stretch;\n justify-content: flex-start;\n overflow-x: hidden;\n overflow-y: auto;\n\n background: ${(props) => props.$backgroundColor || \" #cecece\"};\n\n padding: ${(props) => props.$innerPadding || \"1rem\"};\n\n /* Hide scrollbars for WebKit browsers */\n ::-webkit-scrollbar {\n display: none;\n }\n\n /* Hide scrollbars for Firefox */\n scrollbar-width: none;\n\n box-sizing: border-box;\n height: 100%;\n`;\n\nexport const HeaderContainer = styled.div`\n margin-bottom: 1rem;\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n margin-top: 0.75rem;\n`;\n\nexport const Form = styled.form<{ $textColor: string }>`\n label {\n font-weight: 700;\n }\n\n input {\n background: white;\n margin-bottom: 0.75rem;\n }\n\n p {\n font-family: \"Montserrat\", sans-serif;\n font-style: italic;\n font-weight: 200;\n font-size: 0.8rem;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n text-align: start;\n }\n\n a {\n font-family: \"Montserrat\", sans-serif;\n font-style: italic;\n font-weight: 200;\n font-size: 0.8rem;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n }\n\n h6 {\n text-align: start;\n margin-left: 10px;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n }\n\n & > div {\n margin-bottom: 10px;,\n }\n\n button {\n ${opacityEffect}\n color: var(--black);\n font-weight: 600;\n border: none;\n border-radius: 8px;\n width: 60%;\n margin-top: 10px;\n margin-bottom: 10px;\n }\n`;\n\nexport const Title = styled.h2<{ $textColor: string }>`\n font-size: 1.25rem;\n font-weight: 700;\n line-height: 24px;\n letter-spacing: 0em;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n`;\n\nexport const Text = styled.p<{ $textColor: string }>`\n font-size: 1rem;\n font-weight: 400;\n line-height: 23px;\n letter-spacing: 0em;\n margin-top: 10px;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n`;\n","import { createGlobalStyle } from \"styled-components\";\nimport React, { useEffect } from \"react\";\n\nexport const GlobalStyles = createGlobalStyle`\n :root {\n --red: #e52e4d;\n --white: #FFF;\n --black: #2F2F2F;\n --black-2:#1E1E1E;\n --alphaBlack: #000000;\n --black-2:#1E1E1E;\n --black-3:#353535;\n\n --yellow-400:#FFD789;\n --yellow-500: #F6C76B;\n --gray-40:#F0F0F0;\n --gray-45:#767676;\n --gray-50: #686A69;\n --gray-60: #8F8F8F;\n --gray-100: #B6B6B6;\n --gray-150: #B9B9B9;\n --gray-200: #D2D2D2;\n --gray-300: #EBEBEB;\n --gray-400: #ECECEC;\n --gray-500: #F4F4F4;\n --gray-550:#6F6F6F;\n --gray-600:#686868;\n --gray-700: #535353;\n --gray-800:#9D9D9D;\n --shadow-500: 0px 4px 8px rgba(91, 91, 91, 0.2);\n --green:#57C06E;\n --green-2:#2DCE68;\n --blue:#007BFF;\n }\n\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n html {\n scroll-behavior: smooth;\n\n @media (max-width: 1080px) {\n font-size: 93.75%;\n }\n @media (max-width: 720px) {\n font-size: 87.5%;\n }\n }\n\n body {\n background: var(--white);\n -webkit-font-smoothing: antialiased;\n }\n\n body, input, textarea, select, button {\n font-family: \"Montserrat\", sans-serif;\n font-weight: 400;\n } \n\n h1, h2, h3, h4, h5, h6, strong {\n font-weight: 600;\n }\n\n button {\n cursor: pointer;\n }\n\n [disabled] {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .hidden {\n overflow: hidden;\n }\n\n ::-webkit-scrollbar {\n -webkit-appearance: none;\n background: var(--gray-500);\n width: 6px;\n height: 10px;\n }\n\n ::-webkit-scrollbar-thumb {\n background-color: var(--gray-50);\n }\n\n .aligncenter {\n text-align: center;\n }\n\n .width-190px {\n width:190px;\n }\n\n .hidden-content {\n display:none !important;\n }\n\n .global-margin-bottom {\n margin-bottom:20px;\n }\n\n .background-light-gray {\n background:#F4F4F4;\n }\n\n .full-width-and-height {\n height:100%;\n width:100%;\n }\n\n .flex-direction-column {\n flex-direction:column;\n }\n\n .bold {\n font-weight:700;\n }\n\n .margin-center-x {\n margin:0 auto;\n }\n\n .border-none {\n border:none;\n }\n\n .text-center {\n text-align:center;\n }\n\n .relative {\n position:relative;\n }\n\n /* accessibility */\n body ._access-menu p._text-center{\n font-family: \"Montserrat\", sans-serif;\n font-style: italic;\n font-size: 1.2rem!important;\n margin-top: 6px;\n margin-bottom: 3px;\n } \n\n`;\n\nconst FontLoader: React.FC = () => {\n useEffect(() => {\n const link = document.createElement(\"link\");\n link.href =\n \"https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap\";\n link.rel = \"stylesheet\";\n document.head.appendChild(link);\n }, []);\n\n return null;\n};\n\nexport default FontLoader;\n","import {\n FormEvent,\n forwardRef,\n ForwardRefRenderFunction,\n InputHTMLAttributes,\n useCallback,\n useRef,\n} from \"react\";\nimport { FieldError } from \"react-hook-form\";\nimport { cep, cpf, currency, date } from \"./masks\";\n\nimport FormPhoneInput from \"react-phone-input-2\";\nimport 'react-phone-input-2/lib/style.css'\n\nimport {\n FormControl,\n FormErrorMessage,\n FormLabel,\n Input as FormInput,\n} from \"./styles\";\n\ntype InputType =\n | \"text\"\n | \"email\"\n | \"password\"\n | \"number\"\n | \"tel\"\n | \"url\"\n | \"date\"\n | \"time\"\n | \"datetime-local\";\n\ninterface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n id: string;\n label?: string;\n error?: string | FieldError;\n showErrorMessage?: boolean;\n borderColor: string;\n textColor?: string;\n\n mask?: \"cep\" | \"currency\" | \"cpf\" | \"phone\" | \"date\";\n type?: InputType;\n}\n\nconst InputBase: ForwardRefRenderFunction<HTMLInputElement, InputProps> = (\n { id, label, error, showErrorMessage = true, borderColor, textColor, mask = \"\", type = \"text\", ...rest },\n ref\n) => {\n const phoneInputRef = useRef<{ input: HTMLInputElement }>(null);\n\n const handleKeyUp = useCallback(\n (e: FormEvent<HTMLInputElement>) => {\n if (mask === \"cep\") cep(e);\n if (mask === \"currency\") currency(e);\n if (mask === \"cpf\") cpf(e);\n if (mask === \"date\") date(e);\n },\n [mask]\n );\n\n return (\n <FormControl isInvalid={!!error}>\n {!!label && <FormLabel htmlFor={id} $textColor={textColor}>{label}</FormLabel>}\n\n {!mask ? (\n <FormInput\n id={id}\n ref={ref}\n type={type} \n $bordercolor={borderColor}\n aria-invalid={!!error && showErrorMessage ? \"true\" : \"false\"}\n autoComplete={rest.autoComplete || \"on\"}\n {...rest}\n />\n ) : mask === 'phone' ? (\n <FormPhoneInput\n country={\"br\"}\n />\n ) : (\n <FormInput\n id={id}\n ref={ref}\n type={type} \n $bordercolor={borderColor}\n aria-invalid={!!error && showErrorMessage ? \"true\" : \"false\"}\n onKeyUp={handleKeyUp}\n autoComplete={rest.autoComplete || \"on\"}\n {...rest}\n />\n )}\n\n {!!error && showErrorMessage && (\n <FormErrorMessage data-testid=\"error-message\">\n {typeof error === 'string' ? error : error.message}\n </FormErrorMessage>\n )}\n </FormControl>\n );\n};\n\nexport const Input = forwardRef(InputBase);\n","import { FormEvent } from \"react\";\n\nexport function cep(e: FormEvent<HTMLInputElement>) {\n e.currentTarget.maxLength = 9;\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/^(\\d{5})(\\d)/, \"$1-$2\");\n e.currentTarget.value = value;\n return e;\n}\n\nexport function currency(e: FormEvent<HTMLInputElement>) {\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d)(\\d{2})$/, \"$1,$2\");\n value = value.replace(/(?=(\\d{3})+(\\D))\\B/g, \".\");\n\n e.currentTarget.value = value;\n return e;\n}\n\nexport function cpf(e: FormEvent<HTMLInputElement>) {\n e.currentTarget.maxLength = 14;\n let value = e.currentTarget.value;\n if (!value.match(/^(\\d{3}).(\\d{3}).(\\d{3})-(\\d{2})$/)) {\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d{3})(\\d)/, \"$1.$2\");\n value = value.replace(/(\\d{3})(\\d)/, \"$1.$2\");\n value = value.replace(/(\\d{3})(\\d{2})$/, \"$1-$2\");\n\n e.currentTarget.value = value;\n }\n return e;\n}\n\nexport function date(e: FormEvent<HTMLInputElement>) {\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n e.currentTarget.value = value;\n return e;\n}\n\nexport function phone(e: FormEvent<HTMLInputElement>) {\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n e.currentTarget.value = value;\n return e;\n}\n","import styled, { css } from \"styled-components\";\nimport { InputHTMLAttributes } from \"react\";\n\ntype InputProps = {\n isInvalid?: boolean;\n bordercolor?: string;\n};\n\nexport const FormLabel = styled.label<InputProps & { $textColor?: string }>`\n font-family: \"Montserrat\", sans-serif;\n font-style: normal;\n font-weight: 500;\n font-size: 1rem;\n color: ${(props) =>\n props.isInvalid ? \"var(--red)\" : props.$textColor || \"var(--black)\"};\n display: block;\n margin-bottom: 0.5rem;\n text-align: left;\n`;\n\nexport const Input = styled.input<\n InputHTMLAttributes<HTMLInputElement> & { $bordercolor?: string }\n>`\n font-family: \"Montserrat\", sans-serif;\n font-style: normal;\n font-weight: 500;\n font-size: 1rem;\n line-height: 1.5rem;\n background: var(--gray-500);\n color: var(--black);\n padding: 0.5rem;\n border-radius: 0.125rem;\n border: 1px solid transparent;\n display: block;\n height: 3.125rem;\n width: 100%;\n\n &:focus {\n border-radius: 0.125rem;\n border: 2px solid ${(props) => props.$bordercolor || \"var(--yellow-500)\"};\n outline: none;\n }\n\n &::placeholder {\n font-size: 1rem;\n line-height: 1.5rem;\n color: #b6b6b6;\n font-weight: 800;\n }\n\n /* Autofill styles */\n &:-webkit-autofill {\n background: var(--gray-500) !important;\n color: var(--black) !important;\n -webkit-text-fill-color: var(--black) !important;\n transition: background-color 5000s ease-in-out 0s; /* Prevent flashing */\n }\n\n &:-webkit-autofill::first-line {\n font-family: \"Montserrat\", sans-serif;\n font-size: 1rem;\n font-weight: 500;\n }\n`;\n\nexport const FormErrorMessage = styled.small`\n font-size: 0.75rem;\n line-height: 1.125rem;\n color: var(--red);\n margin-top: 0.25rem;\n display: block;\n`;\n\nexport const FormControl = styled.div.withConfig({\n shouldForwardProp: (prop) => ![\"isInvalid\", \"$bordercolor\"].includes(prop),\n})<{ isInvalid?: boolean; $bordercolor?: string }>`\n ${FormLabel} {\n ${(props) =>\n props.isInvalid &&\n css`\n color: var(--red);\n `};\n }\n\n ${Input} {\n ${(props) =>\n props.isInvalid &&\n css`\n border: 1px solid var(--red);\n\n &:not(:focus)::placeholder {\n color: var(--red);\n font-weight: 600;\n }\n `};\n\n &:focus {\n ${(props) =>\n props.isInvalid &&\n css`\n border: 1px solid var(--red);\n `};\n }\n }\n`;\n","import { darken } from \"polished\";\nimport styled, { css } from \"styled-components\";\n\ntype ButtonProps = {\n hasIcon?: boolean;\n isSubmitting?: boolean;\n hasSubmittingMessage?: boolean;\n bgColor?: string;\n bordercolor?: string;\n color?: string;\n height?: string;\n};\n\nexport const Icon = styled.span`\n font-size: 0;\n line-height: 0;\n transition: all 0.25s ease;\n\n transform: translate3d(-30px, 0px, 0px);\n visibility: hidden;\n opacity: 0;\n margin-right: 0.625rem;\n`;\n\nexport const Text = styled.span`\n font-family: \"Montserrat\", sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n margin-bottom: -2px;\n\n transition: all 0.25s ease;\n`;\n\nexport const TextSubmitting = styled.span`\n font-family: \"Montserrat\", sans-serif;\n font-weight: 400;\n font-size: 1rem;\n\n transition: all 0.25s ease;\n`;\n\nexport const LoadingIcon = styled.span.withConfig({\n shouldForwardProp: (prop) => prop !== \"hasText\",\n})<{ hasText?: boolean }>`\n display: block;\n\n width: 1rem;\n height: 1rem;\n border: 0.125rem solid var(--white);\n border-radius: 50%;\n animation: loadingAnimation 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: var(--white) transparent transparent transparent;\n\n margin-right: ${(props) => (props.hasText ? \"0.625rem\" : \"0\")};\n\n @keyframes loadingAnimation {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nexport const Button = styled.button.withConfig({\n shouldForwardProp: (prop) =>\n ![\n \"hasIcon\",\n \"isSubmitting\",\n \"hasSubmittingMessage\",\n \"bgColor\",\n \"bordercolor\",\n \"color\",\n \"height\",\n ].includes(prop),\n})<ButtonProps>`\n background: ${(props) => darken(0.1, props?.bgColor || \"#F6C76B\")};\n color: ${(props) => props?.color || \"#2F2F2F\"};\n border: 1px solid ${(props) => darken(0.1, props?.bordercolor || \"#F6C76B\")};\n border-radius: 2px;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0 0.75rem;\n height: ${(props) => props?.height || \"3.125rem\"};\n position: relative;\n font-size: 0;\n line-height: 0;\n\n transition: all 0.25s;\n\n ${Icon} {\n display: ${(props) => (props?.hasIcon ? \"block\" : \"\")};\n }\n\n ${Text} {\n transform: ${(props) =>\n props?.hasIcon ? \"translate3d(-4.5px, 0px, 0px)\" : \"unset\"};\n\n @media print, screen and (min-width: 40em) {\n transform: ${(props) =>\n props?.hasIcon ? \"translate3d(-14.5px, 0px, 0px)\" : \"unset\"};\n }\n\n color: ${(props) => props?.color || \"#2F2F2F\"};\n }\n\n &:hover {\n background: ${(props) => darken(0.2, props?.bgColor || \"#F6C76B\")};\n border-color: ${(props) => darken(0.2, props?.bordercolor || \"#F6C76B\")};\n\n ${Icon} {\n opacity: 1;\n visibility: visible;\n transform: translate3d(0px, 0px, 0px);\n }\n\n ${Text} {\n transform: ${(props) =>\n props?.hasIcon ? \"translate3d(-5px, 0px, 0px)\" : \"unset\"};\n }\n }\n\n ${Text} {\n ${(props) =>\n props.isSubmitting &&\n !props.hasSubmittingMessage &&\n css`\n transform: unset;\n opacity: 0;\n `}\n }\n\n ${LoadingIcon} {\n ${(props) =>\n props.isSubmitting &&\n !props.hasSubmittingMessage &&\n css`\n display: flex;\n -webkit-box-align: center;\n align-items: center;\n position: absolute;\n `}\n }\n`;\n","import { ButtonHTMLAttributes, ReactElement, ReactNode } from \"react\";\n\nimport {\n Button as ButtonComponent,\n Icon,\n LoadingIcon,\n Text,\n TextSubmitting,\n} from \"./styles\";\n\ntype ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n children: ReactNode;\n icon?: ReactElement;\n isSubmitting?: boolean;\n submittingMessage?: string;\n bgColor?: string;\n bordercolor?: string;\n color?: string;\n height?: string;\n};\n\nexport function Button({\n children,\n icon,\n isSubmitting = false,\n submittingMessage = \"\",\n disabled = false,\n color = \"#2F2F2F\",\n ...rest\n}: ButtonProps) {\n return (\n <ButtonComponent\n isSubmitting={isSubmitting}\n hasSubmittingMessage={submittingMessage.length > 0}\n disabled={isSubmitting || disabled}\n aria-disabled={isSubmitting || disabled}\n hasIcon={!!icon}\n color={color}\n {...rest}\n >\n {icon && !isSubmitting && <Icon data-testid=\"button-icon\">{icon}</Icon>}\n {isSubmitting && <LoadingIcon hasText={submittingMessage.length > 0} />}\n {(!isSubmitting || submittingMessage.length === 0) && (\n <Text className=\"text\">{children}</Text>\n )}\n {isSubmitting && submittingMessage.length > 0 && (\n <TextSubmitting>{submittingMessage}</TextSubmitting>\n )}\n </ButtonComponent>\n );\n}\n","import React, { useEffect, useState, useCallback } from 'react';\nimport { AlertContainer, DismissButton } from './styles';\nimport { AlertType } from './styles';\n\nimport { HiX } from 'react-icons/hi';\n\ninterface AlertProps {\n type?: AlertType;\n children: React.ReactNode;\n className?: string;\n dismissible?: boolean;\n onDismiss?: () => void;\n autoDismiss?: number;\n}\n\nexport const Alert = ({\n type = 'info',\n children,\n className,\n dismissible = false,\n onDismiss,\n autoDismiss\n}: AlertProps) => {\n const [isClosing, setIsClosing] = useState(false);\n\n const handleDismiss = useCallback(() => {\n setIsClosing(true);\n setTimeout(() => onDismiss?.(), 300);\n }, [onDismiss]);\n\n useEffect(() => {\n if (autoDismiss) {\n const timer = setTimeout(handleDismiss, autoDismiss);\n return () => clearTimeout(timer);\n }\n }, [autoDismiss, handleDismiss]);\n\n return (\n <AlertContainer\n $type={type}\n $dismissible={dismissible}\n $isClosing={isClosing}\n className={className}\n role=\"alert\"\n >\n {children}\n {dismissible && (\n <DismissButton \n onClick={handleDismiss} \n aria-label=\"Dismiss alert\"\n >\n <HiX /> \n </DismissButton>\n )}\n </AlertContainer>\n );\n};","import styled, { css, keyframes } from \"styled-components\";\n\nexport type AlertType = \"error\" | \"warning\" | \"info\" | \"success\";\n\nconst fadeIn = keyframes`\n from { opacity: 0; transform: translateY(-10px); }\n to { opacity: 1; transform: translateY(0); }\n`;\n\nconst fadeOut = keyframes`\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(-10px); }\n`;\n\ninterface AlertContainerProps {\n $type: AlertType;\n $dismissible?: boolean;\n $isClosing: boolean;\n}\n\nconst typeStyles = {\n error: css`\n background-color: var(--red);\n border: 1px solid var(--red);\n color: var(--white);\n svg {\n color: var(--white);\n }\n `,\n warning: css`\n background-color: var(--yellow-500);\n border: 1px solid var(--yellow-400);\n color: var(--black);\n svg {\n color: var(--black);\n }\n `,\n info: css`\n background-color: var(--blue);\n border: 1px solid var(--blue);\n color: var(--white);\n svg {\n color: var(--white);\n }\n `,\n success: css`\n background-color: var(--green);\n border: 1px solid var(--green-2);\n color: var(--white);\n svg {\n color: var(--white);\n }\n `,\n};\n\nexport const AlertContainer = styled.div<AlertContainerProps>`\n position: fixed;\n width: 500px;\n top: 15px;\n right: 15px;\n padding: 1rem ${({ $dismissible }) => ($dismissible ? \"2.5rem\" : \"1rem\")} 1rem\n 1rem;\n margin-bottom: 1rem;\n animation: ${({ $isClosing }) => ($isClosing ? fadeOut : fadeIn)} 0.3s\n ease-out;\n animation-fill-mode: forwards;\n align-items: center;\n gap: 0.5rem;\n box-shadow: var(--shadow-500);\n border-radius: 0.5rem;\n font-size: 1rem;\n font-weight: 500;\n\n ${({ $type }) => typeStyles[$type]}\n`;\n\nexport const DismissButton = styled.button`\n position: absolute;\n background: transparent;\n right: 10px;\n border: none;\n cursor: pointer;\n color: inherit;\n opacity: 1;\n transition: opacity 0.2s;\n\n &:hover {\n opacity: 0.7;\n }\n\n svg {\n width: 1rem;\n height: 1rem;\n }\n`;\n"],"mappings":"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","names":["React","useState","styled","Input","styled","css","Text","jsx","jsxs","Button","Text","useEffect","useState","useCallback","styled","css","jsx","jsxs","useState","useCallback","useEffect","jsx","jsxs","React","useState","Input","Button"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Form/index.tsx","../src/components/hooks/useError.ts","../src/components/styles/utils.ts","../src/components/Form/styles.ts","../src/components/styles/global.ts","../src/components/Input/index.tsx","../src/components/Input/masks.ts","../src/components/Input/styles.ts","../src/components/Button/styles.ts","../src/components/Button/index.tsx","../src/components/Alert/index.tsx","../src/components/Alert/styles.ts"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useError } from \"../hooks/useError\";\nimport { useForm, SubmitHandler, Controller } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as yup from \"yup\";\n\nimport { \n FormContainer, \n HeaderContainer, \n ButtonContainer, \n Form, \n Title, \n Text \n} from \"./styles\";\nimport FontLoader, { GlobalStyles } from \"../styles/global\";\n\nimport { Input } from \"../Input\";\nimport { Button } from \"../Button\";\nimport { Alert } from \"../Alert\";\n\nexport interface MitreFormComponentProps {\n productId: string;\n apiUrl: string;\n apiToken: string;\n utm_source: string;\n utm_medium: string;\n utm_campaign: string;\n utm_term: string;\n showHeader?: boolean;\n colorPrimary?: string;\n textColor?: string;\n backgroundColor?: string;\n innerPadding?: string;\n}\n\nconst schema = yup.object().shape({\n name: yup.string().required(\"Nome é obrigatório\"),\n email: yup.string().required(\"Email é obrigatório\").email(\"Email inválido\"),\n phone: yup.string().required(\"Telefone é obrigatório\")\n .test(\n 'min-digits',\n 'Número de telefone inválido!',\n (value) => {\n const digitsOnly = value?.replace(/\\D/g, '') || '';\n //TODO melhorar essa lógica com algum regex\n return digitsOnly.length >= 8\n })\n});\n\nconst MitreFormComponent = React.forwardRef<HTMLDivElement, MitreFormComponentProps>(({\n productId,\n apiUrl,\n apiToken,\n utm_source,\n utm_medium,\n utm_campaign,\n utm_term,\n showHeader = true,\n colorPrimary = \"#F6C76B\",\n textColor = \"#2F2F2F\",\n backgroundColor = \"#cecece\",\n innerPadding = \"1rem\",\n}, ref) => {\n const [loading, setIsLoading] = useState(false);\n const { error, handleError, clearError } = useError();\n const [successMessage, setSuccessMessage] = useState('');\n\n const { control, register, handleSubmit, formState: { errors }, reset, watch } = useForm({\n resolver: yupResolver(schema),\n });\n\n const phoneValue = watch(\"phone\");\n\n const sendMessage: SubmitHandler<{ name: string; email: string; phone: string; }> = async (data) => {\n const { name, email, phone } = data;\n const message = \"Gostaria de mais informações sobre o produto\";\n\n try {\n setIsLoading(true);\n\n if (!productId || !utm_source || !utm_medium || !utm_campaign || !utm_term || !apiToken) {\n throw new Error(\"Parâmetros obrigatórios não informados\");\n }\n\n const response = await fetch(`${apiUrl}/leads`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Basic ${apiToken}`,\n },\n body: JSON.stringify({\n name,\n email,\n phone,\n message,\n productId,\n utm_source,\n utm_medium,\n utm_campaign,\n utm_term,\n }),\n });\n\n if (!response.ok) {\n throw new Error(\"Falha ao enviar a mensagem!\");\n }\n\n setSuccessMessage(\"Mensagem enviada com sucesso!\");\n reset({\n name: \"\", \n email: \"\",\n phone: \"\",\n });\n } catch (err) {\n handleError(err);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n <FontLoader />\n <GlobalStyles />\n\n {error && (\n <Alert \n type=\"error\" \n dismissible\n onDismiss={clearError}\n autoDismiss={5000}\n >\n {error!.message}\n </Alert>\n )}\n\n {successMessage && (\n <Alert \n type=\"success\"\n dismissible\n onDismiss={() => setSuccessMessage('')}\n autoDismiss={5000}\n >\n {successMessage}\n </Alert>\n )}\n\n <FormContainer $backgroundColor={backgroundColor} $innerPadding={innerPadding} ref={ref} >\n {showHeader && \n <HeaderContainer>\n <Title $textColor={textColor}>Atendimento por mensagem</Title>\n\n <Text $textColor={textColor}>Informe seus dados e retornaremos a mensagem.</Text>\n </HeaderContainer>\n }\n\n <Form $textColor={textColor} onSubmit={handleSubmit(sendMessage)} noValidate>\n <Input\n id=\"name\"\n label=\"Nome *\"\n placeholder=\"Digite seu nome\"\n {...register(\"name\")}\n borderColor={colorPrimary}\n textColor={textColor}\n error={errors.name?.message}\n autoComplete=\"name\"\n required\n />\n\n <Input\n id=\"email\"\n label=\"Email *\"\n type=\"email\"\n placeholder=\"exemplo@email.com\"\n {...register(\"email\")}\n borderColor={colorPrimary}\n textColor={textColor}\n error={errors.email?.message}\n autoComplete=\"email\"\n required\n />\n\n <Controller\n control={control}\n name=\"phone\"\n defaultValue=\"\"\n render={({ field, fieldState }) => (\n <Input\n id=\"phone\"\n label=\"Telefone *\"\n placeholder=\"(11) 00000-0000\"\n mask=\"phone\"\n borderColor={colorPrimary}\n textColor={textColor}\n error={fieldState.error?.message}\n required\n value={field.value}\n onChange={field.onChange}\n name={field.name}\n />\n )}\n />\n\n <h6>* Campos de preenchimento obrigatório.</h6>\n\n <ButtonContainer>\n <Button bgColor={colorPrimary} color={textColor} type=\"submit\" isSubmitting={loading}>\n Enviar mensagem\n </Button>\n </ButtonContainer>\n\n <p>A Mitre Realty respeita a sua privacidade e utiliza os seus dados pessoais para contatá-lo por e-mail ou telefone aqui registrados. Para saber mais, acesse a nossa{ ' '}\n <a\n href=\"https://www.mitrerealty.com.br/politica-de-privacidade\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Política de Privacidade\n </a>. Ao clicar em {'\"'}enviar{'\"'}, você concorda em permitir que a Mitre Realty, armazene e processe os dados pessoais fornecidos por você para finalidade informada</p>\n\n </Form>\n </FormContainer>\n </>\n );\n});\n\nMitreFormComponent.displayName = \"MitreFormComponent\";\n\nexport default MitreFormComponent;\n","import { useState } from \"react\";\n\nexport function useError() {\n const [error, setError] = useState<Error | null>(null);\n\n const handleError = (err: unknown) => {\n const errorObj = err instanceof Error ? err : new Error(String(err));\n setError(errorObj);\n console.error(errorObj);\n };\n\n const clearError = () => setError(null);\n\n return { error, handleError, clearError };\n}\n","type directionType = \"column\" | \"row\";\ntype alignItemsType = \"center\" | \"flex-start\";\n\ntype jutifyContentType = \"center\" | \"space-between\";\n\nexport function flex(\n direction: directionType = \"row\",\n alignItems?: alignItemsType,\n justifyContent?: jutifyContentType\n) {\n return `\n align-items:${alignItems || null};\n display:flex;\n flex-direction:${direction};\n justify-content:${justifyContent || null};\n `;\n}\n\nexport const alignX = `\n left:50%;\n transform:translateX(-50%);\n`;\n\nexport const alignXAndY = `\n left:50%;\n top:50%;\n transform:translate(-50%, -50%);\n`;\n\nexport const darkEffect = `\n &:hover {\n cursor:pointer;\n filter:brightness(98%);\n }\n\n &:active {\n filter:brightness(95%);\n }\n`;\n\nexport const opacityEffect = `\n &:hover {\n cursor:pointer;\n opacity:.9;\n }\n\n &:active {\n opacity:.7;\n }\n`;\n\nexport const modalZIndex = 9999;\n\nexport const breakpoints = {\n tablet: \"1024px\",\n};\n","import { flex, opacityEffect } from \"../styles/utils\";\nimport styled from \"styled-components\";\n\nexport const FormContainer = styled.div<{\n $backgroundColor: string;\n $innerPadding: string;\n}>`\n ${flex(\"column\")}\n align-items: stretch;\n justify-content: flex-start;\n overflow-x: hidden;\n overflow-y: auto;\n\n background: ${(props) => props.$backgroundColor || \" #cecece\"};\n\n padding: ${(props) => props.$innerPadding || \"1rem\"};\n\n /* Hide scrollbars for WebKit browsers */\n ::-webkit-scrollbar {\n display: none;\n }\n\n /* Hide scrollbars for Firefox */\n scrollbar-width: none;\n\n box-sizing: border-box;\n height: 100%;\n`;\n\nexport const HeaderContainer = styled.div`\n margin-bottom: 1rem;\n`;\n\nexport const ButtonContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n margin-top: 0.75rem;\n`;\n\nexport const Form = styled.form<{ $textColor: string }>`\n label {\n font-weight: 700;\n }\n\n input {\n background: white;\n margin-bottom: 0.75rem;\n }\n\n p {\n font-family: \"Montserrat\", sans-serif;\n font-style: italic;\n font-weight: 200;\n font-size: 0.8rem;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n text-align: start;\n }\n\n a {\n font-family: \"Montserrat\", sans-serif;\n font-style: italic;\n font-weight: 200;\n font-size: 0.8rem;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n }\n\n h6 {\n text-align: start;\n margin-left: 10px;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n }\n\n & > div {\n margin-bottom: 10px;,\n }\n\n button {\n ${opacityEffect}\n color: var(--black);\n font-weight: 600;\n border: none;\n border-radius: 8px;\n width: 60%;\n margin-top: 10px;\n margin-bottom: 10px;\n }\n`;\n\nexport const Title = styled.h2<{ $textColor: string }>`\n font-size: 1.25rem;\n font-weight: 700;\n line-height: 24px;\n letter-spacing: 0em;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n`;\n\nexport const Text = styled.p<{ $textColor: string }>`\n font-size: 1rem;\n font-weight: 400;\n line-height: 23px;\n letter-spacing: 0em;\n margin-top: 10px;\n color: ${(props) => props.$textColor || \"var(--black)\"};\n`;\n","import { createGlobalStyle } from \"styled-components\";\nimport React, { useEffect } from \"react\";\n\nexport const GlobalStyles = createGlobalStyle`\n :root {\n --red: #e52e4d;\n --white: #FFF;\n --black: #2F2F2F;\n --black-2:#1E1E1E;\n --alphaBlack: #000000;\n --black-2:#1E1E1E;\n --black-3:#353535;\n\n --yellow-400:#FFD789;\n --yellow-500: #F6C76B;\n --gray-40:#F0F0F0;\n --gray-45:#767676;\n --gray-50: #686A69;\n --gray-60: #8F8F8F;\n --gray-100: #B6B6B6;\n --gray-150: #B9B9B9;\n --gray-200: #D2D2D2;\n --gray-300: #EBEBEB;\n --gray-400: #ECECEC;\n --gray-500: #F4F4F4;\n --gray-550:#6F6F6F;\n --gray-600:#686868;\n --gray-700: #535353;\n --gray-800:#9D9D9D;\n --shadow-500: 0px 4px 8px rgba(91, 91, 91, 0.2);\n --green:#57C06E;\n --green-2:#2DCE68;\n --blue:#007BFF;\n }\n\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n html {\n scroll-behavior: smooth;\n\n @media (max-width: 1080px) {\n font-size: 93.75%;\n }\n @media (max-width: 720px) {\n font-size: 87.5%;\n }\n }\n\n body {\n background: var(--white);\n -webkit-font-smoothing: antialiased;\n }\n\n body, input, textarea, select, button {\n font-family: \"Montserrat\", sans-serif;\n font-weight: 400;\n } \n\n h1, h2, h3, h4, h5, h6, strong {\n font-weight: 600;\n }\n\n button {\n cursor: pointer;\n }\n\n [disabled] {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .hidden {\n overflow: hidden;\n }\n\n ::-webkit-scrollbar {\n -webkit-appearance: none;\n background: var(--gray-500);\n width: 6px;\n height: 10px;\n }\n\n ::-webkit-scrollbar-thumb {\n background-color: var(--gray-50);\n }\n\n .aligncenter {\n text-align: center;\n }\n\n .width-190px {\n width:190px;\n }\n\n .hidden-content {\n display:none !important;\n }\n\n .global-margin-bottom {\n margin-bottom:20px;\n }\n\n .background-light-gray {\n background:#F4F4F4;\n }\n\n .full-width-and-height {\n height:100%;\n width:100%;\n }\n\n .flex-direction-column {\n flex-direction:column;\n }\n\n .bold {\n font-weight:700;\n }\n\n .margin-center-x {\n margin:0 auto;\n }\n\n .border-none {\n border:none;\n }\n\n .text-center {\n text-align:center;\n }\n\n .relative {\n position:relative;\n }\n\n /* accessibility */\n body ._access-menu p._text-center{\n font-family: \"Montserrat\", sans-serif;\n font-style: italic;\n font-size: 1.2rem!important;\n margin-top: 6px;\n margin-bottom: 3px;\n } \n\n`;\n\nconst FontLoader: React.FC = () => {\n useEffect(() => {\n const link = document.createElement(\"link\");\n link.href =\n \"https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&display=swap\";\n link.rel = \"stylesheet\";\n document.head.appendChild(link);\n }, []);\n\n return null;\n};\n\nexport default FontLoader;\n","import {\n FormEvent,\n forwardRef,\n ForwardRefRenderFunction,\n InputHTMLAttributes,\n useCallback,\n useRef,\n} from \"react\";\nimport { FieldError } from \"react-hook-form\";\nimport { cep, cpf, currency, date } from \"./masks\";\n\n\nimport {\n FormControl,\n FormErrorMessage,\n FormLabel,\n Input as FormInput,\n} from \"./styles\";\n\ntype InputType =\n | \"text\"\n | \"email\"\n | \"password\"\n | \"number\"\n | \"tel\"\n | \"url\"\n | \"date\"\n | \"time\"\n | \"datetime-local\";\n\ninterface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n id: string;\n label?: string;\n error?: string | FieldError;\n showErrorMessage?: boolean;\n borderColor: string;\n textColor?: string;\n\n mask?: \"cep\" | \"currency\" | \"cpf\" | \"phone\" | \"date\";\n type?: InputType;\n}\n\nconst InputBase: ForwardRefRenderFunction<HTMLInputElement, InputProps> = (\n { id, label, error, showErrorMessage = true, borderColor, textColor, mask = \"\", type = \"text\", ...rest },\n ref\n) => {\n const phoneInputRef = useRef<{ input: HTMLInputElement }>(null);\n\n const handleKeyUp = useCallback(\n (e: FormEvent<HTMLInputElement>) => {\n if (mask === \"cep\") cep(e);\n if (mask === \"currency\") currency(e);\n if (mask === \"cpf\") cpf(e);\n if (mask === \"date\") date(e);\n },\n [mask]\n );\n\n return (\n <FormControl isInvalid={!!error}>\n {!!label && <FormLabel htmlFor={id} $textColor={textColor}>{label}</FormLabel>}\n\n {!mask ? (\n <FormInput\n id={id}\n ref={ref}\n type={type} \n $bordercolor={borderColor}\n aria-invalid={!!error && showErrorMessage ? \"true\" : \"false\"}\n autoComplete={rest.autoComplete || \"on\"}\n {...rest}\n />\n ) : mask === 'phone' ? (\n <></>\n ) : (\n <FormInput\n id={id}\n ref={ref}\n type={type} \n $bordercolor={borderColor}\n aria-invalid={!!error && showErrorMessage ? \"true\" : \"false\"}\n onKeyUp={handleKeyUp}\n autoComplete={rest.autoComplete || \"on\"}\n {...rest}\n />\n )}\n\n {!!error && showErrorMessage && (\n <FormErrorMessage data-testid=\"error-message\">\n {typeof error === 'string' ? error : error.message}\n </FormErrorMessage>\n )}\n </FormControl>\n );\n};\n\nexport const Input = forwardRef(InputBase);\n","import { FormEvent } from \"react\";\n\nexport function cep(e: FormEvent<HTMLInputElement>) {\n e.currentTarget.maxLength = 9;\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/^(\\d{5})(\\d)/, \"$1-$2\");\n e.currentTarget.value = value;\n return e;\n}\n\nexport function currency(e: FormEvent<HTMLInputElement>) {\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d)(\\d{2})$/, \"$1,$2\");\n value = value.replace(/(?=(\\d{3})+(\\D))\\B/g, \".\");\n\n e.currentTarget.value = value;\n return e;\n}\n\nexport function cpf(e: FormEvent<HTMLInputElement>) {\n e.currentTarget.maxLength = 14;\n let value = e.currentTarget.value;\n if (!value.match(/^(\\d{3}).(\\d{3}).(\\d{3})-(\\d{2})$/)) {\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d{3})(\\d)/, \"$1.$2\");\n value = value.replace(/(\\d{3})(\\d)/, \"$1.$2\");\n value = value.replace(/(\\d{3})(\\d{2})$/, \"$1-$2\");\n\n e.currentTarget.value = value;\n }\n return e;\n}\n\nexport function date(e: FormEvent<HTMLInputElement>) {\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n e.currentTarget.value = value;\n return e;\n}\n\nexport function phone(e: FormEvent<HTMLInputElement>) {\n let value = e.currentTarget.value;\n value = value.replace(/\\D/g, \"\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n value = value.replace(/(\\d{2})(\\d)/, \"$1/$2\");\n e.currentTarget.value = value;\n return e;\n}\n","import styled, { css } from \"styled-components\";\nimport { InputHTMLAttributes } from \"react\";\n\ntype InputProps = {\n isInvalid?: boolean;\n bordercolor?: string;\n};\n\nexport const FormLabel = styled.label<InputProps & { $textColor?: string }>`\n font-family: \"Montserrat\", sans-serif;\n font-style: normal;\n font-weight: 500;\n font-size: 1rem;\n color: ${(props) =>\n props.isInvalid ? \"var(--red)\" : props.$textColor || \"var(--black)\"};\n display: block;\n margin-bottom: 0.5rem;\n text-align: left;\n`;\n\nexport const Input = styled.input<\n InputHTMLAttributes<HTMLInputElement> & { $bordercolor?: string }\n>`\n font-family: \"Montserrat\", sans-serif;\n font-style: normal;\n font-weight: 500;\n font-size: 1rem;\n line-height: 1.5rem;\n background: var(--gray-500);\n color: var(--black);\n padding: 0.5rem;\n border-radius: 0.125rem;\n border: 1px solid transparent;\n display: block;\n height: 3.125rem;\n width: 100%;\n\n &:focus {\n border-radius: 0.125rem;\n border: 2px solid ${(props) => props.$bordercolor || \"var(--yellow-500)\"};\n outline: none;\n }\n\n &::placeholder {\n font-size: 1rem;\n line-height: 1.5rem;\n color: #b6b6b6;\n font-weight: 800;\n }\n\n /* Autofill styles */\n &:-webkit-autofill {\n background: var(--gray-500) !important;\n color: var(--black) !important;\n -webkit-text-fill-color: var(--black) !important;\n transition: background-color 5000s ease-in-out 0s; /* Prevent flashing */\n }\n\n &:-webkit-autofill::first-line {\n font-family: \"Montserrat\", sans-serif;\n font-size: 1rem;\n font-weight: 500;\n }\n`;\n\nexport const FormErrorMessage = styled.small`\n font-size: 0.75rem;\n line-height: 1.125rem;\n color: var(--red);\n margin-top: 0.25rem;\n display: block;\n`;\n\nexport const FormControl = styled.div.withConfig({\n shouldForwardProp: (prop) => ![\"isInvalid\", \"$bordercolor\"].includes(prop),\n})<{ isInvalid?: boolean; $bordercolor?: string }>`\n ${FormLabel} {\n ${(props) =>\n props.isInvalid &&\n css`\n color: var(--red);\n `};\n }\n\n ${Input} {\n ${(props) =>\n props.isInvalid &&\n css`\n border: 1px solid var(--red);\n\n &:not(:focus)::placeholder {\n color: var(--red);\n font-weight: 600;\n }\n `};\n\n &:focus {\n ${(props) =>\n props.isInvalid &&\n css`\n border: 1px solid var(--red);\n `};\n }\n }\n`;\n","import { darken } from \"polished\";\nimport styled, { css } from \"styled-components\";\n\ntype ButtonProps = {\n hasIcon?: boolean;\n isSubmitting?: boolean;\n hasSubmittingMessage?: boolean;\n bgColor?: string;\n bordercolor?: string;\n color?: string;\n height?: string;\n};\n\nexport const Icon = styled.span`\n font-size: 0;\n line-height: 0;\n transition: all 0.25s ease;\n\n transform: translate3d(-30px, 0px, 0px);\n visibility: hidden;\n opacity: 0;\n margin-right: 0.625rem;\n`;\n\nexport const Text = styled.span`\n font-family: \"Montserrat\", sans-serif;\n font-size: 1rem;\n line-height: 1.5rem;\n margin-bottom: -2px;\n\n transition: all 0.25s ease;\n`;\n\nexport const TextSubmitting = styled.span`\n font-family: \"Montserrat\", sans-serif;\n font-weight: 400;\n font-size: 1rem;\n\n transition: all 0.25s ease;\n`;\n\nexport const LoadingIcon = styled.span.withConfig({\n shouldForwardProp: (prop) => prop !== \"hasText\",\n})<{ hasText?: boolean }>`\n display: block;\n\n width: 1rem;\n height: 1rem;\n border: 0.125rem solid var(--white);\n border-radius: 50%;\n animation: loadingAnimation 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: var(--white) transparent transparent transparent;\n\n margin-right: ${(props) => (props.hasText ? \"0.625rem\" : \"0\")};\n\n @keyframes loadingAnimation {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nexport const Button = styled.button.withConfig({\n shouldForwardProp: (prop) =>\n ![\n \"hasIcon\",\n \"isSubmitting\",\n \"hasSubmittingMessage\",\n \"bgColor\",\n \"bordercolor\",\n \"color\",\n \"height\",\n ].includes(prop),\n})<ButtonProps>`\n background: ${(props) => darken(0.1, props?.bgColor || \"#F6C76B\")};\n color: ${(props) => props?.color || \"#2F2F2F\"};\n border: 1px solid ${(props) => darken(0.1, props?.bordercolor || \"#F6C76B\")};\n border-radius: 2px;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0 0.75rem;\n height: ${(props) => props?.height || \"3.125rem\"};\n position: relative;\n font-size: 0;\n line-height: 0;\n\n transition: all 0.25s;\n\n ${Icon} {\n display: ${(props) => (props?.hasIcon ? \"block\" : \"\")};\n }\n\n ${Text} {\n transform: ${(props) =>\n props?.hasIcon ? \"translate3d(-4.5px, 0px, 0px)\" : \"unset\"};\n\n @media print, screen and (min-width: 40em) {\n transform: ${(props) =>\n props?.hasIcon ? \"translate3d(-14.5px, 0px, 0px)\" : \"unset\"};\n }\n\n color: ${(props) => props?.color || \"#2F2F2F\"};\n }\n\n &:hover {\n background: ${(props) => darken(0.2, props?.bgColor || \"#F6C76B\")};\n border-color: ${(props) => darken(0.2, props?.bordercolor || \"#F6C76B\")};\n\n ${Icon} {\n opacity: 1;\n visibility: visible;\n transform: translate3d(0px, 0px, 0px);\n }\n\n ${Text} {\n transform: ${(props) =>\n props?.hasIcon ? \"translate3d(-5px, 0px, 0px)\" : \"unset\"};\n }\n }\n\n ${Text} {\n ${(props) =>\n props.isSubmitting &&\n !props.hasSubmittingMessage &&\n css`\n transform: unset;\n opacity: 0;\n `}\n }\n\n ${LoadingIcon} {\n ${(props) =>\n props.isSubmitting &&\n !props.hasSubmittingMessage &&\n css`\n display: flex;\n -webkit-box-align: center;\n align-items: center;\n position: absolute;\n `}\n }\n`;\n","import { ButtonHTMLAttributes, ReactElement, ReactNode } from \"react\";\n\nimport {\n Button as ButtonComponent,\n Icon,\n LoadingIcon,\n Text,\n TextSubmitting,\n} from \"./styles\";\n\ntype ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {\n children: ReactNode;\n icon?: ReactElement;\n isSubmitting?: boolean;\n submittingMessage?: string;\n bgColor?: string;\n bordercolor?: string;\n color?: string;\n height?: string;\n};\n\nexport function Button({\n children,\n icon,\n isSubmitting = false,\n submittingMessage = \"\",\n disabled = false,\n color = \"#2F2F2F\",\n ...rest\n}: ButtonProps) {\n return (\n <ButtonComponent\n isSubmitting={isSubmitting}\n hasSubmittingMessage={submittingMessage.length > 0}\n disabled={isSubmitting || disabled}\n aria-disabled={isSubmitting || disabled}\n hasIcon={!!icon}\n color={color}\n {...rest}\n >\n {icon && !isSubmitting && <Icon data-testid=\"button-icon\">{icon}</Icon>}\n {isSubmitting && <LoadingIcon hasText={submittingMessage.length > 0} />}\n {(!isSubmitting || submittingMessage.length === 0) && (\n <Text className=\"text\">{children}</Text>\n )}\n {isSubmitting && submittingMessage.length > 0 && (\n <TextSubmitting>{submittingMessage}</TextSubmitting>\n )}\n </ButtonComponent>\n );\n}\n","import React, { useEffect, useState, useCallback } from 'react';\nimport { AlertContainer, DismissButton } from './styles';\nimport { AlertType } from './styles';\n\nimport { HiX } from 'react-icons/hi';\n\ninterface AlertProps {\n type?: AlertType;\n children: React.ReactNode;\n className?: string;\n dismissible?: boolean;\n onDismiss?: () => void;\n autoDismiss?: number;\n}\n\nexport const Alert = ({\n type = 'info',\n children,\n className,\n dismissible = false,\n onDismiss,\n autoDismiss\n}: AlertProps) => {\n const [isClosing, setIsClosing] = useState(false);\n\n const handleDismiss = useCallback(() => {\n setIsClosing(true);\n setTimeout(() => onDismiss?.(), 300);\n }, [onDismiss]);\n\n useEffect(() => {\n if (autoDismiss) {\n const timer = setTimeout(handleDismiss, autoDismiss);\n return () => clearTimeout(timer);\n }\n }, [autoDismiss, handleDismiss]);\n\n return (\n <AlertContainer\n $type={type}\n $dismissible={dismissible}\n $isClosing={isClosing}\n className={className}\n role=\"alert\"\n >\n {children}\n {dismissible && (\n <DismissButton \n onClick={handleDismiss} \n aria-label=\"Dismiss alert\"\n >\n <HiX /> \n </DismissButton>\n )}\n </AlertContainer>\n );\n};","import styled, { css, keyframes } from \"styled-components\";\n\nexport type AlertType = \"error\" | \"warning\" | \"info\" | \"success\";\n\nconst fadeIn = keyframes`\n from { opacity: 0; transform: translateY(-10px); }\n to { opacity: 1; transform: translateY(0); }\n`;\n\nconst fadeOut = keyframes`\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(-10px); }\n`;\n\ninterface AlertContainerProps {\n $type: AlertType;\n $dismissible?: boolean;\n $isClosing: boolean;\n}\n\nconst typeStyles = {\n error: css`\n background-color: var(--red);\n border: 1px solid var(--red);\n color: var(--white);\n svg {\n color: var(--white);\n }\n `,\n warning: css`\n background-color: var(--yellow-500);\n border: 1px solid var(--yellow-400);\n color: var(--black);\n svg {\n color: var(--black);\n }\n `,\n info: css`\n background-color: var(--blue);\n border: 1px solid var(--blue);\n color: var(--white);\n svg {\n color: var(--white);\n }\n `,\n success: css`\n background-color: var(--green);\n border: 1px solid var(--green-2);\n color: var(--white);\n svg {\n color: var(--white);\n }\n `,\n};\n\nexport const AlertContainer = styled.div<AlertContainerProps>`\n position: fixed;\n width: 500px;\n top: 15px;\n right: 15px;\n padding: 1rem ${({ $dismissible }) => ($dismissible ? \"2.5rem\" : \"1rem\")} 1rem\n 1rem;\n margin-bottom: 1rem;\n animation: ${({ $isClosing }) => ($isClosing ? fadeOut : fadeIn)} 0.3s\n ease-out;\n animation-fill-mode: forwards;\n align-items: center;\n gap: 0.5rem;\n box-shadow: var(--shadow-500);\n border-radius: 0.5rem;\n font-size: 1rem;\n font-weight: 500;\n\n ${({ $type }) => typeStyles[$type]}\n`;\n\nexport const DismissButton = styled.button`\n position: absolute;\n background: transparent;\n right: 10px;\n border: none;\n cursor: pointer;\n color: inherit;\n opacity: 1;\n transition: opacity 0.2s;\n\n &:hover {\n opacity: 0.7;\n }\n\n svg {\n width: 1rem;\n height: 1rem;\n }\n`;\n"],"mappings":";AAAA,OAAOA,UAAS,YAAAC,iBAAgB;;;ACAhC,SAAS,gBAAgB;AAElB,SAAS,WAAW;AACzB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAuB,IAAI;AAErD,QAAM,cAAc,CAAC,QAAiB;AACpC,UAAM,WAAW,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AACnE,aAAS,QAAQ;AACjB,YAAQ,MAAM,QAAQ;AAAA,EACxB;AAEA,QAAM,aAAa,MAAM,SAAS,IAAI;AAEtC,SAAO,EAAE,OAAO,aAAa,WAAW;AAC1C;;;ADZA,SAAS,SAAwB,kBAAkB;AACnD,SAAS,mBAAmB;AAC5B,YAAY,SAAS;;;AECd,SAAS,KACd,YAA2B,OAC3B,YACA,gBACA;AACA,SAAO;AAAA,kBACS,cAAc,IAAI;AAAA;AAAA,qBAEf,SAAS;AAAA,sBACR,kBAAkB,IAAI;AAAA;AAE5C;AAwBO,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACvC7B,OAAO,YAAY;AAEZ,IAAM,gBAAgB,OAAO;AAAA,IAIhC,KAAK,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMF,CAAC,UAAU,MAAM,oBAAoB,UAAU;AAAA;AAAA,aAElD,CAAC,UAAU,MAAM,iBAAiB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAc9C,IAAM,kBAAkB,OAAO;AAAA;AAAA;AAI/B,IAAM,kBAAkB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS/B,IAAM,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAed,CAAC,UAAU,MAAM,cAAc,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAS7C,CAAC,UAAU,MAAM,cAAc,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAM7C,CAAC,UAAU,MAAM,cAAc,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQpD,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWZ,IAAM,QAAQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,WAKjB,CAAC,UAAU,MAAM,cAAc,cAAc;AAAA;AAGjD,IAAM,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAMhB,CAAC,UAAU,MAAM,cAAc,cAAc;AAAA;;;ACzGxD,SAAS,yBAAyB;AAClC,SAAgB,iBAAiB;AAE1B,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmJ5B,IAAM,aAAuB,MAAM;AACjC,YAAU,MAAM;AACd,UAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,SAAK,OACH;AACF,SAAK,MAAM;AACX,aAAS,KAAK,YAAY,IAAI;AAAA,EAChC,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;AAEA,IAAO,iBAAQ;;;AClKf;AAAA,EAEE;AAAA,EAGA;AAAA,EACA;AAAA,OACK;;;ACLA,SAAS,IAAI,GAAgC;AAClD,IAAE,cAAc,YAAY;AAC5B,MAAI,QAAQ,EAAE,cAAc;AAC5B,UAAQ,MAAM,QAAQ,OAAO,EAAE;AAC/B,UAAQ,MAAM,QAAQ,gBAAgB,OAAO;AAC7C,IAAE,cAAc,QAAQ;AACxB,SAAO;AACT;AAEO,SAAS,SAAS,GAAgC;AACvD,MAAI,QAAQ,EAAE,cAAc;AAC5B,UAAQ,MAAM,QAAQ,OAAO,EAAE;AAC/B,UAAQ,MAAM,QAAQ,gBAAgB,OAAO;AAC7C,UAAQ,MAAM,QAAQ,uBAAuB,GAAG;AAEhD,IAAE,cAAc,QAAQ;AACxB,SAAO;AACT;AAEO,SAAS,IAAI,GAAgC;AAClD,IAAE,cAAc,YAAY;AAC5B,MAAI,QAAQ,EAAE,cAAc;AAC5B,MAAI,CAAC,MAAM,MAAM,mCAAmC,GAAG;AACrD,YAAQ,MAAM,QAAQ,OAAO,EAAE;AAC/B,YAAQ,MAAM,QAAQ,eAAe,OAAO;AAC5C,YAAQ,MAAM,QAAQ,eAAe,OAAO;AAC5C,YAAQ,MAAM,QAAQ,mBAAmB,OAAO;AAEhD,MAAE,cAAc,QAAQ;AAAA,EAC1B;AACA,SAAO;AACT;AAEO,SAAS,KAAK,GAAgC;AACnD,MAAI,QAAQ,EAAE,cAAc;AAC5B,UAAQ,MAAM,QAAQ,OAAO,EAAE;AAC/B,UAAQ,MAAM,QAAQ,eAAe,OAAO;AAC5C,UAAQ,MAAM,QAAQ,eAAe,OAAO;AAC5C,IAAE,cAAc,QAAQ;AACxB,SAAO;AACT;;;AC1CA,OAAOC,WAAU,WAAW;AAQrB,IAAM,YAAYA,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,WAKrB,CAAC,UACR,MAAM,YAAY,eAAe,MAAM,cAAc,cAAc;AAAA;AAAA;AAAA;AAAA;AAMhE,IAAM,QAAQA,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAmBJ,CAAC,UAAU,MAAM,gBAAgB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BrE,IAAM,mBAAmBA,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhC,IAAM,cAAcA,QAAO,IAAI,WAAW;AAAA,EAC/C,mBAAmB,CAAC,SAAS,CAAC,CAAC,aAAa,cAAc,EAAE,SAAS,IAAI;AAC3E,CAAC;AAAA,IACG,SAAS;AAAA,MACP,CAAC,UACD,MAAM,aACN;AAAA;AAAA,OAEC;AAAA;AAAA;AAAA,IAGH,KAAK;AAAA,MACH,CAAC,UACD,MAAM,aACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOC;AAAA;AAAA;AAAA,QAGC,CAAC,UACD,MAAM,aACN;AAAA;AAAA,SAEC;AAAA;AAAA;AAAA;;;AF1CL,SAcI,UAbU,KADd;AAjBJ,IAAM,YAAoE,CACxE,EAAE,IAAI,OAAO,OAAO,mBAAmB,MAAM,aAAa,WAAW,OAAO,IAAI,OAAO,QAAQ,GAAG,KAAK,GACvG,QACG;AACH,QAAM,gBAAgB,OAAoC,IAAI;AAE9D,QAAM,cAAc;AAAA,IAClB,CAAC,MAAmC;AAClC,UAAI,SAAS,MAAO,KAAI,CAAC;AACzB,UAAI,SAAS,WAAY,UAAS,CAAC;AACnC,UAAI,SAAS,MAAO,KAAI,CAAC;AACzB,UAAI,SAAS,OAAQ,MAAK,CAAC;AAAA,IAC7B;AAAA,IACA,CAAC,IAAI;AAAA,EACP;AAEA,SACE,qBAAC,eAAY,WAAW,CAAC,CAAC,OACvB;AAAA,KAAC,CAAC,SAAS,oBAAC,aAAU,SAAS,IAAI,YAAY,WAAY,iBAAM;AAAA,IAEjE,CAAC,OACA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,gBAAc,CAAC,CAAC,SAAS,mBAAmB,SAAS;AAAA,QACrD,cAAc,KAAK,gBAAgB;AAAA,QAClC,GAAG;AAAA;AAAA,IACN,IACE,SAAS,UACX,gCAAE,IAEF;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,gBAAc,CAAC,CAAC,SAAS,mBAAmB,SAAS;AAAA,QACrD,SAAS;AAAA,QACT,cAAc,KAAK,gBAAgB;AAAA,QAClC,GAAG;AAAA;AAAA,IACN;AAAA,IAGD,CAAC,CAAC,SAAS,oBACV,oBAAC,oBAAiB,eAAY,iBAC3B,iBAAO,UAAU,WAAW,QAAQ,MAAM,SAC7C;AAAA,KAEJ;AAEJ;AAEO,IAAMC,SAAQ,WAAW,SAAS;;;AGhGzC,SAAS,cAAc;AACvB,OAAOC,WAAU,OAAAC,YAAW;AAYrB,IAAM,OAAOD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWpB,IAAME,QAAOF,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASpB,IAAM,iBAAiBA,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ9B,IAAM,cAAcA,QAAO,KAAK,WAAW;AAAA,EAChD,mBAAmB,CAAC,SAAS,SAAS;AACxC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAUiB,CAAC,UAAW,MAAM,UAAU,aAAa,GAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYxD,IAAM,SAASA,QAAO,OAAO,WAAW;AAAA,EAC7C,mBAAmB,CAAC,SAClB,CAAC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,IAAI;AACnB,CAAC;AAAA,gBACe,CAAC,UAAU,OAAO,KAAK,OAAO,WAAW,SAAS,CAAC;AAAA,WACxD,CAAC,UAAU,OAAO,SAAS,SAAS;AAAA,sBACzB,CAAC,UAAU,OAAO,KAAK,OAAO,eAAe,SAAS,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOjE,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAO9C,IAAI;AAAA,eACO,CAAC,UAAW,OAAO,UAAU,UAAU,EAAG;AAAA;AAAA;AAAA,IAGrDE,KAAI;AAAA,iBACS,CAAC,UACZ,OAAO,UAAU,kCAAkC,OAAO;AAAA;AAAA;AAAA,mBAG7C,CAAC,UACZ,OAAO,UAAU,mCAAmC,OAAO;AAAA;AAAA;AAAA,aAGtD,CAAC,UAAU,OAAO,SAAS,SAAS;AAAA;AAAA;AAAA;AAAA,kBAI/B,CAAC,UAAU,OAAO,KAAK,OAAO,WAAW,SAAS,CAAC;AAAA,oBACjD,CAAC,UAAU,OAAO,KAAK,OAAO,eAAe,SAAS,CAAC;AAAA;AAAA,MAErE,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMJA,KAAI;AAAA,mBACS,CAAC,UACZ,OAAO,UAAU,gCAAgC,OAAO;AAAA;AAAA;AAAA;AAAA,IAI5DA,KAAI;AAAA,MACF,CAAC,UACD,MAAM,gBACN,CAAC,MAAM,wBACPD;AAAA;AAAA;AAAA,OAGC;AAAA;AAAA;AAAA,IAGH,WAAW;AAAA,MACT,CAAC,UACD,MAAM,gBACN,CAAC,MAAM,wBACPA;AAAA;AAAA;AAAA;AAAA;AAAA,OAKC;AAAA;AAAA;;;ACjHH,SAS4B,OAAAE,MAT5B,QAAAC,aAAA;AAVG,SAASC,QAAO;AAAA,EACrB;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,GAAG;AACL,GAAgB;AACd,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,sBAAsB,kBAAkB,SAAS;AAAA,MACjD,UAAU,gBAAgB;AAAA,MAC1B,iBAAe,gBAAgB;AAAA,MAC/B,SAAS,CAAC,CAAC;AAAA,MACX;AAAA,MACC,GAAG;AAAA,MAEH;AAAA,gBAAQ,CAAC,gBAAgB,gBAAAD,KAAC,QAAK,eAAY,eAAe,gBAAK;AAAA,QAC/D,gBAAgB,gBAAAA,KAAC,eAAY,SAAS,kBAAkB,SAAS,GAAG;AAAA,SACnE,CAAC,gBAAgB,kBAAkB,WAAW,MAC9C,gBAAAA,KAACG,OAAA,EAAK,WAAU,QAAQ,UAAS;AAAA,QAElC,gBAAgB,kBAAkB,SAAS,KAC1C,gBAAAH,KAAC,kBAAgB,6BAAkB;AAAA;AAAA;AAAA,EAEvC;AAEJ;;;AClDA,SAAgB,aAAAI,YAAW,YAAAC,WAAU,eAAAC,oBAAmB;;;ACAxD,OAAOC,WAAU,OAAAC,MAAK,iBAAiB;AAIvC,IAAM,SAAS;AAAA;AAAA;AAAA;AAKf,IAAM,UAAU;AAAA;AAAA;AAAA;AAWhB,IAAM,aAAa;AAAA,EACjB,OAAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQP,SAASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQT,MAAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQN,SAASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQX;AAEO,IAAM,iBAAiBD,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKnB,CAAC,EAAE,aAAa,MAAO,eAAe,WAAW,MAAO;AAAA;AAAA;AAAA,eAG3D,CAAC,EAAE,WAAW,MAAO,aAAa,UAAU,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAU9D,CAAC,EAAE,MAAM,MAAM,WAAW,KAAK,CAAC;AAAA;AAG7B,IAAM,gBAAgBA,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ADxEpC,SAAS,WAAW;AAkChB,SAaM,OAAAE,MAbN,QAAAC,aAAA;AAvBG,IAAM,QAAQ,CAAC;AAAA,EACpB,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AACF,MAAkB;AAChB,QAAM,CAAC,WAAW,YAAY,IAAIC,UAAS,KAAK;AAEhD,QAAM,gBAAgBC,aAAY,MAAM;AACtC,iBAAa,IAAI;AACjB,eAAW,MAAM,YAAY,GAAG,GAAG;AAAA,EACrC,GAAG,CAAC,SAAS,CAAC;AAEd,EAAAC,WAAU,MAAM;AACd,QAAI,aAAa;AACf,YAAM,QAAQ,WAAW,eAAe,WAAW;AACnD,aAAO,MAAM,aAAa,KAAK;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,aAAa,aAAa,CAAC;AAE/B,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP,cAAc;AAAA,MACd,YAAY;AAAA,MACZ;AAAA,MACA,MAAK;AAAA,MAEJ;AAAA;AAAA,QACA,eACC,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,cAAW;AAAA,YAEX,0BAAAA,KAAC,OAAI;AAAA;AAAA,QACP;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;AViEM,qBAAAK,WACE,OAAAC,MA2BI,QAAAC,aA5BN;AAtFN,IAAM,SAAa,WAAO,EAAE,MAAM;AAAA,EAChC,MAAU,WAAO,EAAE,SAAS,0BAAoB;AAAA,EAChD,OAAW,WAAO,EAAE,SAAS,2BAAqB,EAAE,MAAM,mBAAgB;AAAA,EAC1E,OAAW,WAAO,EAAE,SAAS,8BAAwB,EACpD;AAAA,IACC;AAAA,IACA;AAAA,IACA,CAAC,UAAU;AACT,YAAM,aAAa,OAAO,QAAQ,OAAO,EAAE,KAAK;AAEhD,aAAO,WAAW,UAAU;AAAA,IAC9B;AAAA,EAAC;AACL,CAAC;AAED,IAAM,qBAAqBC,OAAM,WAAoD,CAAC;AAAA,EACpF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAc;AAAA,EACd,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,eAAe;AACjB,GAAG,QAAQ;AACT,QAAM,CAAC,SAAS,YAAY,IAAIC,UAAS,KAAK;AAC9C,QAAM,EAAE,OAAO,aAAa,WAAW,IAAI,SAAS;AACpD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAS,EAAE;AAEvD,QAAM,EAAE,SAAS,UAAU,cAAc,WAAW,EAAE,OAAO,GAAG,OAAO,MAAM,IAAI,QAAQ;AAAA,IACvF,UAAU,YAAY,MAAM;AAAA,EAC9B,CAAC;AAED,QAAM,aAAa,MAAM,OAAO;AAEhC,QAAM,cAA8E,OAAO,SAAS;AAClG,UAAM,EAAE,MAAM,OAAO,MAAM,IAAI;AAC/B,UAAM,UAAU;AAEhB,QAAI;AACF,mBAAa,IAAI;AAEjB,UAAI,CAAC,aAAa,CAAC,cAAc,CAAC,cAAc,CAAC,gBAAgB,CAAC,YAAY,CAAC,UAAU;AACvF,cAAM,IAAI,MAAM,iDAAwC;AAAA,MAC1D;AAEA,YAAM,WAAW,MAAM,MAAM,GAAG,MAAM,UAAU;AAAA,QAC9C,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,SAAS,QAAQ;AAAA,QAClC;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AAEA,wBAAkB,+BAA+B;AACjD,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MACT,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,kBAAY,GAAG;AAAA,IACjB,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAEA,SACI,gBAAAF,MAAAF,WAAA,EACE;AAAA,oBAAAC,KAAC,kBAAW;AAAA,IACZ,gBAAAA,KAAC,gBAAa;AAAA,IAEb,SACC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,aAAW;AAAA,QACX,WAAW;AAAA,QACX,aAAa;AAAA,QAEZ,gBAAO;AAAA;AAAA,IACV;AAAA,IAGD,kBACC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,aAAW;AAAA,QACX,WAAW,MAAM,kBAAkB,EAAE;AAAA,QACrC,aAAa;AAAA,QAEZ;AAAA;AAAA,IACH;AAAA,IAGF,gBAAAC,MAAC,iBAAc,kBAAkB,iBAAiB,eAAe,cAAc,KAC5E;AAAA,oBACC,gBAAAA,MAAC,mBACC;AAAA,wBAAAD,KAAC,SAAM,YAAY,WAAW,sCAAwB;AAAA,QAEtD,gBAAAA,KAAC,QAAK,YAAY,WAAW,2DAA6C;AAAA,SAC5E;AAAA,MAGF,gBAAAC,MAAC,QAAK,YAAY,WAAW,UAAU,aAAa,WAAW,GAAG,YAAU,MAC1E;AAAA,wBAAAD;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,OAAM;AAAA,YACN,aAAY;AAAA,YACX,GAAG,SAAS,MAAM;AAAA,YACnB,aAAa;AAAA,YACb;AAAA,YACA,OAAO,OAAO,MAAM;AAAA,YACpB,cAAa;AAAA,YACb,UAAQ;AAAA;AAAA,QACV;AAAA,QAEA,gBAAAJ;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,OAAM;AAAA,YACN,MAAK;AAAA,YACL,aAAY;AAAA,YACX,GAAG,SAAS,OAAO;AAAA,YACpB,aAAa;AAAA,YACb;AAAA,YACA,OAAO,OAAO,OAAO;AAAA,YACrB,cAAa;AAAA,YACb,UAAQ;AAAA;AAAA,QACV;AAAA,QAEA,gBAAAJ;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,MAAK;AAAA,YACL,cAAa;AAAA,YACb,QAAQ,CAAC,EAAE,OAAO,WAAW,MAC3B,gBAAAA;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,IAAG;AAAA,gBACH,OAAM;AAAA,gBACN,aAAY;AAAA,gBACZ,MAAK;AAAA,gBACL,aAAa;AAAA,gBACb;AAAA,gBACA,OAAO,WAAW,OAAO;AAAA,gBACzB,UAAQ;AAAA,gBACR,OAAO,MAAM;AAAA,gBACb,UAAU,MAAM;AAAA,gBAChB,MAAM,MAAM;AAAA;AAAA,YACd;AAAA;AAAA,QAEJ;AAAA,QAEA,gBAAAJ,KAAC,QAAG,uDAAsC;AAAA,QAE1C,gBAAAA,KAAC,mBACC,0BAAAA,KAACK,SAAA,EAAO,SAAS,cAAc,OAAO,WAAW,MAAK,UAAS,cAAc,SAAS,6BAEtF,GACF;AAAA,QAEA,gBAAAJ,MAAC,OAAE;AAAA;AAAA,UAAqK;AAAA,UACxK,gBAAAD;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,QAAO;AAAA,cACP,KAAI;AAAA,cACL;AAAA;AAAA,UAED;AAAA,UAAI;AAAA,UAAgB;AAAA,UAAI;AAAA,UAAO;AAAA,UAAI;AAAA,WAAmI;AAAA,SAExK;AAAA,OACF;AAAA,KACF;AAEN,CAAC;AAED,mBAAmB,cAAc;AAEjC,IAAO,eAAQ;","names":["React","useState","styled","Input","styled","css","Text","jsx","jsxs","Button","Text","useEffect","useState","useCallback","styled","css","jsx","jsxs","useState","useCallback","useEffect","Fragment","jsx","jsxs","React","useState","Input","Button"]}
|