mitre-form-component 0.0.17 → 0.0.19
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 +354 -47
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +350 -39
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -35,7 +35,7 @@ __export(index_exports, {
|
|
|
35
35
|
module.exports = __toCommonJS(index_exports);
|
|
36
36
|
|
|
37
37
|
// src/components/Form/index.tsx
|
|
38
|
-
var
|
|
38
|
+
var import_react5 = __toESM(require("react"), 1);
|
|
39
39
|
|
|
40
40
|
// src/components/hooks/useError.ts
|
|
41
41
|
var import_react = require("react");
|
|
@@ -325,21 +325,312 @@ var FontLoader = () => {
|
|
|
325
325
|
};
|
|
326
326
|
var global_default = FontLoader;
|
|
327
327
|
|
|
328
|
-
// src/components/
|
|
328
|
+
// src/components/Input/index.tsx
|
|
329
329
|
var import_react3 = require("react");
|
|
330
330
|
|
|
331
|
-
// src/components/
|
|
331
|
+
// src/components/Input/masks.ts
|
|
332
|
+
function cep(e) {
|
|
333
|
+
e.currentTarget.maxLength = 9;
|
|
334
|
+
let value = e.currentTarget.value;
|
|
335
|
+
value = value.replace(/\D/g, "");
|
|
336
|
+
value = value.replace(/^(\d{5})(\d)/, "$1-$2");
|
|
337
|
+
e.currentTarget.value = value;
|
|
338
|
+
return e;
|
|
339
|
+
}
|
|
340
|
+
function currency(e) {
|
|
341
|
+
let value = e.currentTarget.value;
|
|
342
|
+
value = value.replace(/\D/g, "");
|
|
343
|
+
value = value.replace(/(\d)(\d{2})$/, "$1,$2");
|
|
344
|
+
value = value.replace(/(?=(\d{3})+(\D))\B/g, ".");
|
|
345
|
+
e.currentTarget.value = value;
|
|
346
|
+
return e;
|
|
347
|
+
}
|
|
348
|
+
function cpf(e) {
|
|
349
|
+
e.currentTarget.maxLength = 14;
|
|
350
|
+
let value = e.currentTarget.value;
|
|
351
|
+
if (!value.match(/^(\d{3}).(\d{3}).(\d{3})-(\d{2})$/)) {
|
|
352
|
+
value = value.replace(/\D/g, "");
|
|
353
|
+
value = value.replace(/(\d{3})(\d)/, "$1.$2");
|
|
354
|
+
value = value.replace(/(\d{3})(\d)/, "$1.$2");
|
|
355
|
+
value = value.replace(/(\d{3})(\d{2})$/, "$1-$2");
|
|
356
|
+
e.currentTarget.value = value;
|
|
357
|
+
}
|
|
358
|
+
return e;
|
|
359
|
+
}
|
|
360
|
+
function date(e) {
|
|
361
|
+
let value = e.currentTarget.value;
|
|
362
|
+
value = value.replace(/\D/g, "");
|
|
363
|
+
value = value.replace(/(\d{2})(\d)/, "$1/$2");
|
|
364
|
+
value = value.replace(/(\d{2})(\d)/, "$1/$2");
|
|
365
|
+
e.currentTarget.value = value;
|
|
366
|
+
return e;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// src/components/Input/index.tsx
|
|
370
|
+
var import_style = require("react-phone-input-2/lib/style.css");
|
|
371
|
+
|
|
372
|
+
// src/components/Input/styles.ts
|
|
332
373
|
var import_styled_components3 = __toESM(require("styled-components"), 1);
|
|
333
|
-
var
|
|
374
|
+
var import_react_phone_input_2 = __toESM(require("react-phone-input-2"), 1);
|
|
375
|
+
var FormLabel = import_styled_components3.default.label`
|
|
376
|
+
font-family: "Montserrat", sans-serif;
|
|
377
|
+
font-style: normal;
|
|
378
|
+
font-weight: 500;
|
|
379
|
+
font-size: 1rem;
|
|
380
|
+
color: ${(props) => props.isInvalid ? "var(--red)" : props.$textColor || "var(--black)"};
|
|
381
|
+
display: block;
|
|
382
|
+
margin-bottom: 0.5rem;
|
|
383
|
+
text-align: left;
|
|
384
|
+
`;
|
|
385
|
+
var Input = import_styled_components3.default.input`
|
|
386
|
+
font-family: "Montserrat", sans-serif;
|
|
387
|
+
font-style: normal;
|
|
388
|
+
font-weight: 500;
|
|
389
|
+
font-size: 1rem;
|
|
390
|
+
line-height: 1.5rem;
|
|
391
|
+
background: var(--gray-500);
|
|
392
|
+
color: var(--black);
|
|
393
|
+
padding: 0.5rem;
|
|
394
|
+
border-radius: 0.125rem;
|
|
395
|
+
border: 1px solid transparent;
|
|
396
|
+
display: block;
|
|
397
|
+
height: 3.125rem;
|
|
398
|
+
width: 100%;
|
|
399
|
+
|
|
400
|
+
&:focus {
|
|
401
|
+
border-radius: 0.125rem;
|
|
402
|
+
border: 2px solid ${(props) => props.$bordercolor || "var(--yellow-500)"};
|
|
403
|
+
outline: none;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
&::placeholder {
|
|
407
|
+
font-size: 1rem;
|
|
408
|
+
line-height: 1.5rem;
|
|
409
|
+
color: #b6b6b6;
|
|
410
|
+
font-weight: 800;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/* Autofill styles */
|
|
414
|
+
&:-webkit-autofill {
|
|
415
|
+
background: var(--gray-500) !important;
|
|
416
|
+
color: var(--black) !important;
|
|
417
|
+
-webkit-text-fill-color: var(--black) !important;
|
|
418
|
+
transition: background-color 5000s ease-in-out 0s; /* Prevent flashing */
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
&:-webkit-autofill::first-line {
|
|
422
|
+
font-family: "Montserrat", sans-serif;
|
|
423
|
+
font-size: 1rem;
|
|
424
|
+
font-weight: 500;
|
|
425
|
+
}
|
|
426
|
+
`;
|
|
427
|
+
var FormPhoneInput = (0, import_styled_components3.default)(import_react_phone_input_2.default)`
|
|
428
|
+
.form-control {
|
|
429
|
+
background: white;
|
|
430
|
+
color: ${(props) => props.isInvalid ? "var(--red)" : props.$textColor || "var(--black)"};
|
|
431
|
+
padding: 0.5rem;
|
|
432
|
+
border-radius: 0.125rem;
|
|
433
|
+
border: 1px solid transparent;
|
|
434
|
+
height: 3.125rem;
|
|
435
|
+
width: 100%;
|
|
436
|
+
padding-left: 4rem;
|
|
437
|
+
font-family: "Montserrat", sans-serif;
|
|
438
|
+
font-style: normal;
|
|
439
|
+
font-weight: 500;
|
|
440
|
+
font-size: 1rem;
|
|
441
|
+
line-height: 1.5rem;
|
|
442
|
+
text &:focus,
|
|
443
|
+
&:focus-within {
|
|
444
|
+
border-radius: 0.125rem;
|
|
445
|
+
border: 2px solid
|
|
446
|
+
${(props) => !props.isValid ? "var(--red)" : props.$bordercolor || "var(--yellow-500)"};
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
&::placeholder {
|
|
450
|
+
font-size: 1rem;
|
|
451
|
+
line-height: 1.5rem;
|
|
452
|
+
color: #b6b6b6;
|
|
453
|
+
font-weight: 800;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/* Autofill styles */
|
|
457
|
+
&:-webkit-autofill {
|
|
458
|
+
background: var(--gray-500) !important;
|
|
459
|
+
color: var(--black) !important;
|
|
460
|
+
-webkit-text-fill-color: var(--black) !important;
|
|
461
|
+
transition: background-color 5000s ease-in-out 0s; /* Prevent flashing */
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
&:-webkit-autofill::first-line {
|
|
465
|
+
font-family: "Montserrat", sans-serif;
|
|
466
|
+
font-size: 1rem;
|
|
467
|
+
font-weight: 500;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
&:focus-within {
|
|
472
|
+
.form-control {
|
|
473
|
+
border: 2px solid
|
|
474
|
+
${(props) => props.isInvalid ? "var(--red)" : props.$bordercolor || "var(--yellow-500)"};
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
.flag-dropdown {
|
|
479
|
+
background: white;
|
|
480
|
+
border: none;
|
|
481
|
+
padding: 0.5rem;
|
|
482
|
+
margin: 0.25rem;
|
|
483
|
+
cursor: pointer;
|
|
484
|
+
|
|
485
|
+
&:focus-within {
|
|
486
|
+
outline: none;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
`;
|
|
490
|
+
var FormErrorMessage = import_styled_components3.default.small`
|
|
491
|
+
font-size: 0.75rem;
|
|
492
|
+
line-height: 1.125rem;
|
|
493
|
+
color: var(--red);
|
|
494
|
+
margin-top: 0.25rem;
|
|
495
|
+
display: block;
|
|
496
|
+
`;
|
|
497
|
+
var FormControl = import_styled_components3.default.div.withConfig({
|
|
498
|
+
shouldForwardProp: (prop) => !["isInvalid", "$bordercolor"].includes(prop)
|
|
499
|
+
})`
|
|
500
|
+
${FormLabel} {
|
|
501
|
+
${(props) => props.isInvalid && import_styled_components3.css`
|
|
502
|
+
color: var(--red);
|
|
503
|
+
`};
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
${Input} {
|
|
507
|
+
${(props) => props.isInvalid && import_styled_components3.css`
|
|
508
|
+
border: 1px solid var(--red);
|
|
509
|
+
|
|
510
|
+
&:not(:focus)::placeholder {
|
|
511
|
+
color: var(--red);
|
|
512
|
+
font-weight: 600;
|
|
513
|
+
}
|
|
514
|
+
`};
|
|
515
|
+
|
|
516
|
+
&:focus {
|
|
517
|
+
${(props) => props.isInvalid && import_styled_components3.css`
|
|
518
|
+
border: 1px solid var(--red);
|
|
519
|
+
`};
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
${FormPhoneInput} {
|
|
524
|
+
${(props) => props.isInvalid && import_styled_components3.css`
|
|
525
|
+
border: 1px solid var(--red);
|
|
526
|
+
|
|
527
|
+
&:not(:focus)::placeholder {
|
|
528
|
+
color: var(--red);
|
|
529
|
+
font-weight: 600;
|
|
530
|
+
}
|
|
531
|
+
`};
|
|
532
|
+
|
|
533
|
+
&:focus {
|
|
534
|
+
${(props) => props.isInvalid && import_styled_components3.css`
|
|
535
|
+
border: 1px solid var(--red);
|
|
536
|
+
`};
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
`;
|
|
540
|
+
|
|
541
|
+
// src/components/Input/index.tsx
|
|
542
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
543
|
+
var InputBase = ({ id, label, error, showErrorMessage = true, borderColor, textColor, mask = "", type = "text", ...rest }, ref) => {
|
|
544
|
+
const phoneInputRef = (0, import_react3.useRef)(null);
|
|
545
|
+
const { onChange, name } = rest;
|
|
546
|
+
const handleKeyUp = (0, import_react3.useCallback)(
|
|
547
|
+
(e) => {
|
|
548
|
+
if (mask === "cep") cep(e);
|
|
549
|
+
if (mask === "currency") currency(e);
|
|
550
|
+
if (mask === "cpf") cpf(e);
|
|
551
|
+
if (mask === "date") date(e);
|
|
552
|
+
},
|
|
553
|
+
[mask]
|
|
554
|
+
);
|
|
555
|
+
const handlePhoneChange = (0, import_react3.useCallback)((value) => {
|
|
556
|
+
onChange?.({ target: { value, name } });
|
|
557
|
+
if (phoneInputRef.current?.input) {
|
|
558
|
+
phoneInputRef.current.input.value = value;
|
|
559
|
+
}
|
|
560
|
+
}, [onChange, name]);
|
|
561
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(FormControl, { isInvalid: !!error, children: [
|
|
562
|
+
!!label && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FormLabel, { htmlFor: id, $textColor: textColor, children: label }),
|
|
563
|
+
!mask ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
564
|
+
Input,
|
|
565
|
+
{
|
|
566
|
+
id,
|
|
567
|
+
ref,
|
|
568
|
+
type,
|
|
569
|
+
$bordercolor: borderColor,
|
|
570
|
+
"aria-invalid": !!error && showErrorMessage ? "true" : "false",
|
|
571
|
+
autoComplete: rest.autoComplete || "on",
|
|
572
|
+
...rest
|
|
573
|
+
}
|
|
574
|
+
) : mask === "phone" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
575
|
+
FormPhoneInput,
|
|
576
|
+
{
|
|
577
|
+
country: "br",
|
|
578
|
+
$bordercolor: borderColor,
|
|
579
|
+
placeholder: rest.placeholder,
|
|
580
|
+
"aria-invalid": !!error && showErrorMessage ? "true" : "false",
|
|
581
|
+
isInvalid: !!error,
|
|
582
|
+
onChange: handlePhoneChange,
|
|
583
|
+
masks: {
|
|
584
|
+
br: "(..) .....-...."
|
|
585
|
+
},
|
|
586
|
+
inputProps: {
|
|
587
|
+
id,
|
|
588
|
+
name: "phone",
|
|
589
|
+
required: true,
|
|
590
|
+
autoFocus: true,
|
|
591
|
+
autoComplete: "tel",
|
|
592
|
+
ref: phoneInputRef
|
|
593
|
+
},
|
|
594
|
+
dropdownStyle: {
|
|
595
|
+
color: textColor
|
|
596
|
+
},
|
|
597
|
+
disableCountryGuess: true,
|
|
598
|
+
disableCountryCode: true,
|
|
599
|
+
value: rest.value
|
|
600
|
+
}
|
|
601
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
602
|
+
Input,
|
|
603
|
+
{
|
|
604
|
+
id,
|
|
605
|
+
ref,
|
|
606
|
+
type,
|
|
607
|
+
$bordercolor: borderColor,
|
|
608
|
+
"aria-invalid": !!error && showErrorMessage ? "true" : "false",
|
|
609
|
+
onKeyUp: handleKeyUp,
|
|
610
|
+
autoComplete: rest.autoComplete || "on",
|
|
611
|
+
...rest
|
|
612
|
+
}
|
|
613
|
+
),
|
|
614
|
+
!!error && showErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FormErrorMessage, { "data-testid": "error-message", children: typeof error === "string" ? error : error.message })
|
|
615
|
+
] });
|
|
616
|
+
};
|
|
617
|
+
var Input2 = (0, import_react3.forwardRef)(InputBase);
|
|
618
|
+
|
|
619
|
+
// src/components/Alert/index.tsx
|
|
620
|
+
var import_react4 = require("react");
|
|
621
|
+
|
|
622
|
+
// src/components/Alert/styles.ts
|
|
623
|
+
var import_styled_components4 = __toESM(require("styled-components"), 1);
|
|
624
|
+
var fadeIn = import_styled_components4.keyframes`
|
|
334
625
|
from { opacity: 0; transform: translateY(-10px); }
|
|
335
626
|
to { opacity: 1; transform: translateY(0); }
|
|
336
627
|
`;
|
|
337
|
-
var fadeOut =
|
|
628
|
+
var fadeOut = import_styled_components4.keyframes`
|
|
338
629
|
from { opacity: 1; transform: translateY(0); }
|
|
339
630
|
to { opacity: 0; transform: translateY(-10px); }
|
|
340
631
|
`;
|
|
341
632
|
var typeStyles = {
|
|
342
|
-
error:
|
|
633
|
+
error: import_styled_components4.css`
|
|
343
634
|
background-color: var(--red);
|
|
344
635
|
border: 1px solid var(--red);
|
|
345
636
|
color: var(--white);
|
|
@@ -347,7 +638,7 @@ var typeStyles = {
|
|
|
347
638
|
color: var(--white);
|
|
348
639
|
}
|
|
349
640
|
`,
|
|
350
|
-
warning:
|
|
641
|
+
warning: import_styled_components4.css`
|
|
351
642
|
background-color: var(--yellow-500);
|
|
352
643
|
border: 1px solid var(--yellow-400);
|
|
353
644
|
color: var(--black);
|
|
@@ -355,7 +646,7 @@ var typeStyles = {
|
|
|
355
646
|
color: var(--black);
|
|
356
647
|
}
|
|
357
648
|
`,
|
|
358
|
-
info:
|
|
649
|
+
info: import_styled_components4.css`
|
|
359
650
|
background-color: var(--blue);
|
|
360
651
|
border: 1px solid var(--blue);
|
|
361
652
|
color: var(--white);
|
|
@@ -363,7 +654,7 @@ var typeStyles = {
|
|
|
363
654
|
color: var(--white);
|
|
364
655
|
}
|
|
365
656
|
`,
|
|
366
|
-
success:
|
|
657
|
+
success: import_styled_components4.css`
|
|
367
658
|
background-color: var(--green);
|
|
368
659
|
border: 1px solid var(--green-2);
|
|
369
660
|
color: var(--white);
|
|
@@ -372,7 +663,7 @@ var typeStyles = {
|
|
|
372
663
|
}
|
|
373
664
|
`
|
|
374
665
|
};
|
|
375
|
-
var AlertContainer =
|
|
666
|
+
var AlertContainer = import_styled_components4.default.div`
|
|
376
667
|
position: fixed;
|
|
377
668
|
width: 500px;
|
|
378
669
|
top: 15px;
|
|
@@ -392,7 +683,7 @@ var AlertContainer = import_styled_components3.default.div`
|
|
|
392
683
|
|
|
393
684
|
${({ $type }) => typeStyles[$type]}
|
|
394
685
|
`;
|
|
395
|
-
var DismissButton =
|
|
686
|
+
var DismissButton = import_styled_components4.default.button`
|
|
396
687
|
position: absolute;
|
|
397
688
|
background: transparent;
|
|
398
689
|
right: 10px;
|
|
@@ -414,7 +705,7 @@ var DismissButton = import_styled_components3.default.button`
|
|
|
414
705
|
|
|
415
706
|
// src/components/Alert/index.tsx
|
|
416
707
|
var import_hi = require("react-icons/hi");
|
|
417
|
-
var
|
|
708
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
418
709
|
var Alert = ({
|
|
419
710
|
type = "info",
|
|
420
711
|
children,
|
|
@@ -423,18 +714,18 @@ var Alert = ({
|
|
|
423
714
|
onDismiss,
|
|
424
715
|
autoDismiss
|
|
425
716
|
}) => {
|
|
426
|
-
const [isClosing, setIsClosing] = (0,
|
|
427
|
-
const handleDismiss = (0,
|
|
717
|
+
const [isClosing, setIsClosing] = (0, import_react4.useState)(false);
|
|
718
|
+
const handleDismiss = (0, import_react4.useCallback)(() => {
|
|
428
719
|
setIsClosing(true);
|
|
429
720
|
setTimeout(() => onDismiss?.(), 300);
|
|
430
721
|
}, [onDismiss]);
|
|
431
|
-
(0,
|
|
722
|
+
(0, import_react4.useEffect)(() => {
|
|
432
723
|
if (autoDismiss) {
|
|
433
724
|
const timer = setTimeout(handleDismiss, autoDismiss);
|
|
434
725
|
return () => clearTimeout(timer);
|
|
435
726
|
}
|
|
436
727
|
}, [autoDismiss, handleDismiss]);
|
|
437
|
-
return /* @__PURE__ */ (0,
|
|
728
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
438
729
|
AlertContainer,
|
|
439
730
|
{
|
|
440
731
|
$type: type,
|
|
@@ -444,12 +735,12 @@ var Alert = ({
|
|
|
444
735
|
role: "alert",
|
|
445
736
|
children: [
|
|
446
737
|
children,
|
|
447
|
-
dismissible && /* @__PURE__ */ (0,
|
|
738
|
+
dismissible && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
448
739
|
DismissButton,
|
|
449
740
|
{
|
|
450
741
|
onClick: handleDismiss,
|
|
451
742
|
"aria-label": "Dismiss alert",
|
|
452
|
-
children: /* @__PURE__ */ (0,
|
|
743
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_hi.HiX, {})
|
|
453
744
|
}
|
|
454
745
|
)
|
|
455
746
|
]
|
|
@@ -458,7 +749,7 @@ var Alert = ({
|
|
|
458
749
|
};
|
|
459
750
|
|
|
460
751
|
// src/components/Form/index.tsx
|
|
461
|
-
var
|
|
752
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
462
753
|
var schema = yup.object().shape({
|
|
463
754
|
name: yup.string().required("Nome \xE9 obrigat\xF3rio"),
|
|
464
755
|
email: yup.string().required("Email \xE9 obrigat\xF3rio").email("Email inv\xE1lido"),
|
|
@@ -471,7 +762,7 @@ var schema = yup.object().shape({
|
|
|
471
762
|
}
|
|
472
763
|
)
|
|
473
764
|
});
|
|
474
|
-
var MitreFormComponent =
|
|
765
|
+
var MitreFormComponent = import_react5.default.forwardRef(({
|
|
475
766
|
productId,
|
|
476
767
|
apiUrl,
|
|
477
768
|
apiToken,
|
|
@@ -485,9 +776,9 @@ var MitreFormComponent = import_react4.default.forwardRef(({
|
|
|
485
776
|
backgroundColor = "#cecece",
|
|
486
777
|
innerPadding = "1rem"
|
|
487
778
|
}, ref) => {
|
|
488
|
-
const [loading, setIsLoading] = (0,
|
|
779
|
+
const [loading, setIsLoading] = (0, import_react5.useState)(false);
|
|
489
780
|
const { error, handleError, clearError } = useError();
|
|
490
|
-
const [successMessage, setSuccessMessage] = (0,
|
|
781
|
+
const [successMessage, setSuccessMessage] = (0, import_react5.useState)("");
|
|
491
782
|
const { register, handleSubmit, formState: { errors }, reset, watch } = (0, import_react_hook_form.useForm)({
|
|
492
783
|
resolver: (0, import_yup.yupResolver)(schema)
|
|
493
784
|
});
|
|
@@ -529,10 +820,10 @@ var MitreFormComponent = import_react4.default.forwardRef(({
|
|
|
529
820
|
setIsLoading(false);
|
|
530
821
|
}
|
|
531
822
|
};
|
|
532
|
-
return /* @__PURE__ */ (0,
|
|
533
|
-
/* @__PURE__ */ (0,
|
|
534
|
-
/* @__PURE__ */ (0,
|
|
535
|
-
error && /* @__PURE__ */ (0,
|
|
823
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
|
|
824
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(global_default, {}),
|
|
825
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(GlobalStyles, {}),
|
|
826
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
536
827
|
Alert,
|
|
537
828
|
{
|
|
538
829
|
type: "error",
|
|
@@ -542,7 +833,7 @@ var MitreFormComponent = import_react4.default.forwardRef(({
|
|
|
542
833
|
children: error.message
|
|
543
834
|
}
|
|
544
835
|
),
|
|
545
|
-
successMessage && /* @__PURE__ */ (0,
|
|
836
|
+
successMessage && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
546
837
|
Alert,
|
|
547
838
|
{
|
|
548
839
|
type: "success",
|
|
@@ -552,30 +843,46 @@ var MitreFormComponent = import_react4.default.forwardRef(({
|
|
|
552
843
|
children: successMessage
|
|
553
844
|
}
|
|
554
845
|
),
|
|
555
|
-
/* @__PURE__ */ (0,
|
|
556
|
-
/* @__PURE__ */ (0,
|
|
557
|
-
/* @__PURE__ */ (0,
|
|
558
|
-
/* @__PURE__ */ (0,
|
|
846
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(FormContainer, { ref, children: [
|
|
847
|
+
showHeader && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(HeaderContainer, { children: [
|
|
848
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Title, { children: "Atendimento por mensagem" }),
|
|
849
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Text, { children: "Informe seus dados e retornaremos a mensagem." })
|
|
559
850
|
] }),
|
|
560
|
-
/* @__PURE__ */ (0,
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
"A Mitre Realty respeita a sua privacidade e utiliza os seus dados pessoais para contat\xE1-lo por e-mail ou telefone aqui registrados. Para saber mais, acesse a nossa",
|
|
564
|
-
" ",
|
|
565
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
566
|
-
"a",
|
|
851
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Form, { onSubmit: handleSubmit(sendMessage), noValidate: true, children: [
|
|
852
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
853
|
+
Input2,
|
|
567
854
|
{
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
855
|
+
id: "name",
|
|
856
|
+
label: "Nome *",
|
|
857
|
+
placeholder: "Digite seu nome",
|
|
858
|
+
...register("name"),
|
|
859
|
+
borderColor: colorPrimary,
|
|
860
|
+
textColor,
|
|
861
|
+
error: errors.name?.message,
|
|
862
|
+
autoComplete: "name",
|
|
863
|
+
required: true
|
|
572
864
|
}
|
|
573
865
|
),
|
|
574
|
-
"
|
|
575
|
-
|
|
576
|
-
"
|
|
577
|
-
|
|
578
|
-
|
|
866
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h6", { children: "* Campos de preenchimento obrigat\xF3rio." }),
|
|
867
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ButtonContainer, {}),
|
|
868
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { children: [
|
|
869
|
+
"A Mitre Realty respeita a sua privacidade e utiliza os seus dados pessoais para contat\xE1-lo por e-mail ou telefone aqui registrados. Para saber mais, acesse a nossa",
|
|
870
|
+
" ",
|
|
871
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
872
|
+
"a",
|
|
873
|
+
{
|
|
874
|
+
href: "https://www.mitrerealty.com.br/politica-de-privacidade",
|
|
875
|
+
target: "_blank",
|
|
876
|
+
rel: "noopener noreferrer",
|
|
877
|
+
children: "Pol\xEDtica de Privacidade"
|
|
878
|
+
}
|
|
879
|
+
),
|
|
880
|
+
". Ao clicar em ",
|
|
881
|
+
'"',
|
|
882
|
+
"enviar",
|
|
883
|
+
'"',
|
|
884
|
+
", voc\xEA concorda em permitir que a Mitre Realty, armazene e processe os dados pessoais fornecidos por voc\xEA para finalidade informada"
|
|
885
|
+
] })
|
|
579
886
|
] })
|
|
580
887
|
] })
|
|
581
888
|
] });
|
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/Alert/index.tsx","../src/components/Alert/styles.ts"],"sourcesContent":["import MitreFormComponent from \"./components/Form\";\n\nexport default MitreFormComponent;\n//export type { MitreFormComponentProps } from \"./components/Form\";\n","import React, { useState } from \"react\";\nimport { useError } from \"../hooks/useError\";\nimport { useForm, SubmitHandler } 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 { 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 { 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 } 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 ref={ref} >\n <HeaderContainer>\n <Title >Atendimento por mensagem</Title>\n\n <Text >Informe seus dados e retornaremos a mensagem.</Text>\n </HeaderContainer>\n\n \n\n <h6>* Campos de preenchimento obrigatório.</h6>\n\n <ButtonContainer>\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 </FormContainer>\n </>\n );\n});\n\nMitreFormComponent.displayName = \"MitreFormComponent\";\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 ${flex(\"column\")}\n align-items: stretch;\n justify-content: flex-start;\n overflow-x: hidden;\n overflow-y: auto;\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`\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 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 }\n\n h6 {\n text-align: start;\n margin-left: 10px;\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`\n font-size: 1.25rem;\n font-weight: 700;\n line-height: 24px;\n letter-spacing: 0em;\n`;\n\nexport const Text = styled.p`\n font-size: 1rem;\n font-weight: 400;\n line-height: 23px;\n letter-spacing: 0em;\n margin-top: 10px;\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 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","import_jsx_runtime","React"]}
|
|
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/Alert/index.tsx","../src/components/Alert/styles.ts"],"sourcesContent":["import MitreFormComponent from \"./components/Form\";\n\nexport default MitreFormComponent;\n//export type { MitreFormComponentProps } from \"./components/Form\";\n","import React, { useState } from \"react\";\nimport { useError } from \"../hooks/useError\";\nimport { useForm, SubmitHandler } 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 { 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 { 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 } 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 ref={ref} >\n {showHeader && \n <HeaderContainer>\n <Title >Atendimento por mensagem</Title>\n\n <Text>Informe seus dados e retornaremos a mensagem.</Text>\n </HeaderContainer>\n }\n\n <Form 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\n <h6>* Campos de preenchimento obrigatório.</h6>\n\n <ButtonContainer>\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 </Form>\n </FormContainer>\n </>\n );\n});\n\nMitreFormComponent.displayName = \"MitreFormComponent\";\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 ${flex(\"column\")}\n align-items: stretch;\n justify-content: flex-start;\n overflow-x: hidden;\n overflow-y: auto;\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`\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 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 }\n\n h6 {\n text-align: start;\n margin-left: 10px;\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`\n font-size: 1.25rem;\n font-weight: 700;\n line-height: 24px;\n letter-spacing: 0em;\n`;\n\nexport const Text = styled.p`\n font-size: 1rem;\n font-weight: 400;\n line-height: 23px;\n letter-spacing: 0em;\n margin-top: 10px;\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 'react-phone-input-2/lib/style.css'\n\nimport {\n FormControl,\n FormErrorMessage,\n FormLabel,\n Input as FormInput,\n FormPhoneInput\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 const { onChange, name } = rest;\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 const handlePhoneChange = useCallback((value: string) => {\n onChange?.({ target: { value, name } } as React.ChangeEvent<HTMLInputElement>);\n\n if (phoneInputRef.current?.input) {\n phoneInputRef.current.input.value = value;\n }\n }, [onChange, name]);\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 $bordercolor={borderColor}\n placeholder={rest.placeholder}\n aria-invalid={!!error && showErrorMessage ? \"true\" : \"false\"}\n isInvalid={!!error}\n onChange={handlePhoneChange}\n masks={{\n br: \"(..) .....-....\",}}\n inputProps={{\n id,\n name: 'phone',\n required: true,\n autoFocus: true,\n autoComplete: \"tel\",\n ref: phoneInputRef,\n }}\n //TODO no futuro enviar com o ddi, só retirar o disableCountryCode e disableCountryGuess\n dropdownStyle={{\n color: textColor,\n }}\n disableCountryGuess={true}\n disableCountryCode={true}\n value={rest.value as string} \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\nimport PhoneInput from \"react-phone-input-2\";\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 FormPhoneInput = styled(PhoneInput)<\n InputProps & { $bordercolor?: string; $textColor?: string }\n>`\n .form-control {\n background: white;\n color: ${(props) =>\n props.isInvalid ? \"var(--red)\" : props.$textColor || \"var(--black)\"};\n padding: 0.5rem;\n border-radius: 0.125rem;\n border: 1px solid transparent;\n height: 3.125rem;\n width: 100%;\n padding-left: 4rem;\n font-family: \"Montserrat\", sans-serif;\n font-style: normal;\n font-weight: 500;\n font-size: 1rem;\n line-height: 1.5rem;\n text &:focus,\n &:focus-within {\n border-radius: 0.125rem;\n border: 2px solid\n ${(props) =>\n !props.isValid\n ? \"var(--red)\"\n : props.$bordercolor || \"var(--yellow-500)\"};\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\n &:focus-within {\n .form-control {\n border: 2px solid\n ${(props) =>\n props.isInvalid\n ? \"var(--red)\"\n : props.$bordercolor || \"var(--yellow-500)\"};\n }\n }\n\n .flag-dropdown {\n background: white;\n border: none;\n padding: 0.5rem;\n margin: 0.25rem;\n cursor: pointer;\n\n &:focus-within {\n outline: none;\n }\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 ${FormPhoneInput} {\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 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","PhoneInput","Input","import_react","import_styled_components","styled","import_jsx_runtime","import_jsx_runtime","React","Input"]}
|
package/dist/index.js
CHANGED
|
@@ -289,11 +289,306 @@ var FontLoader = () => {
|
|
|
289
289
|
};
|
|
290
290
|
var global_default = FontLoader;
|
|
291
291
|
|
|
292
|
+
// src/components/Input/index.tsx
|
|
293
|
+
import {
|
|
294
|
+
forwardRef,
|
|
295
|
+
useCallback,
|
|
296
|
+
useRef
|
|
297
|
+
} from "react";
|
|
298
|
+
|
|
299
|
+
// src/components/Input/masks.ts
|
|
300
|
+
function cep(e) {
|
|
301
|
+
e.currentTarget.maxLength = 9;
|
|
302
|
+
let value = e.currentTarget.value;
|
|
303
|
+
value = value.replace(/\D/g, "");
|
|
304
|
+
value = value.replace(/^(\d{5})(\d)/, "$1-$2");
|
|
305
|
+
e.currentTarget.value = value;
|
|
306
|
+
return e;
|
|
307
|
+
}
|
|
308
|
+
function currency(e) {
|
|
309
|
+
let value = e.currentTarget.value;
|
|
310
|
+
value = value.replace(/\D/g, "");
|
|
311
|
+
value = value.replace(/(\d)(\d{2})$/, "$1,$2");
|
|
312
|
+
value = value.replace(/(?=(\d{3})+(\D))\B/g, ".");
|
|
313
|
+
e.currentTarget.value = value;
|
|
314
|
+
return e;
|
|
315
|
+
}
|
|
316
|
+
function cpf(e) {
|
|
317
|
+
e.currentTarget.maxLength = 14;
|
|
318
|
+
let value = e.currentTarget.value;
|
|
319
|
+
if (!value.match(/^(\d{3}).(\d{3}).(\d{3})-(\d{2})$/)) {
|
|
320
|
+
value = value.replace(/\D/g, "");
|
|
321
|
+
value = value.replace(/(\d{3})(\d)/, "$1.$2");
|
|
322
|
+
value = value.replace(/(\d{3})(\d)/, "$1.$2");
|
|
323
|
+
value = value.replace(/(\d{3})(\d{2})$/, "$1-$2");
|
|
324
|
+
e.currentTarget.value = value;
|
|
325
|
+
}
|
|
326
|
+
return e;
|
|
327
|
+
}
|
|
328
|
+
function date(e) {
|
|
329
|
+
let value = e.currentTarget.value;
|
|
330
|
+
value = value.replace(/\D/g, "");
|
|
331
|
+
value = value.replace(/(\d{2})(\d)/, "$1/$2");
|
|
332
|
+
value = value.replace(/(\d{2})(\d)/, "$1/$2");
|
|
333
|
+
e.currentTarget.value = value;
|
|
334
|
+
return e;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// src/components/Input/index.tsx
|
|
338
|
+
import "react-phone-input-2/lib/style.css";
|
|
339
|
+
|
|
340
|
+
// src/components/Input/styles.ts
|
|
341
|
+
import styled2, { css } from "styled-components";
|
|
342
|
+
import PhoneInput from "react-phone-input-2";
|
|
343
|
+
var FormLabel = styled2.label`
|
|
344
|
+
font-family: "Montserrat", sans-serif;
|
|
345
|
+
font-style: normal;
|
|
346
|
+
font-weight: 500;
|
|
347
|
+
font-size: 1rem;
|
|
348
|
+
color: ${(props) => props.isInvalid ? "var(--red)" : props.$textColor || "var(--black)"};
|
|
349
|
+
display: block;
|
|
350
|
+
margin-bottom: 0.5rem;
|
|
351
|
+
text-align: left;
|
|
352
|
+
`;
|
|
353
|
+
var Input = styled2.input`
|
|
354
|
+
font-family: "Montserrat", sans-serif;
|
|
355
|
+
font-style: normal;
|
|
356
|
+
font-weight: 500;
|
|
357
|
+
font-size: 1rem;
|
|
358
|
+
line-height: 1.5rem;
|
|
359
|
+
background: var(--gray-500);
|
|
360
|
+
color: var(--black);
|
|
361
|
+
padding: 0.5rem;
|
|
362
|
+
border-radius: 0.125rem;
|
|
363
|
+
border: 1px solid transparent;
|
|
364
|
+
display: block;
|
|
365
|
+
height: 3.125rem;
|
|
366
|
+
width: 100%;
|
|
367
|
+
|
|
368
|
+
&:focus {
|
|
369
|
+
border-radius: 0.125rem;
|
|
370
|
+
border: 2px solid ${(props) => props.$bordercolor || "var(--yellow-500)"};
|
|
371
|
+
outline: none;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
&::placeholder {
|
|
375
|
+
font-size: 1rem;
|
|
376
|
+
line-height: 1.5rem;
|
|
377
|
+
color: #b6b6b6;
|
|
378
|
+
font-weight: 800;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/* Autofill styles */
|
|
382
|
+
&:-webkit-autofill {
|
|
383
|
+
background: var(--gray-500) !important;
|
|
384
|
+
color: var(--black) !important;
|
|
385
|
+
-webkit-text-fill-color: var(--black) !important;
|
|
386
|
+
transition: background-color 5000s ease-in-out 0s; /* Prevent flashing */
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
&:-webkit-autofill::first-line {
|
|
390
|
+
font-family: "Montserrat", sans-serif;
|
|
391
|
+
font-size: 1rem;
|
|
392
|
+
font-weight: 500;
|
|
393
|
+
}
|
|
394
|
+
`;
|
|
395
|
+
var FormPhoneInput = styled2(PhoneInput)`
|
|
396
|
+
.form-control {
|
|
397
|
+
background: white;
|
|
398
|
+
color: ${(props) => props.isInvalid ? "var(--red)" : props.$textColor || "var(--black)"};
|
|
399
|
+
padding: 0.5rem;
|
|
400
|
+
border-radius: 0.125rem;
|
|
401
|
+
border: 1px solid transparent;
|
|
402
|
+
height: 3.125rem;
|
|
403
|
+
width: 100%;
|
|
404
|
+
padding-left: 4rem;
|
|
405
|
+
font-family: "Montserrat", sans-serif;
|
|
406
|
+
font-style: normal;
|
|
407
|
+
font-weight: 500;
|
|
408
|
+
font-size: 1rem;
|
|
409
|
+
line-height: 1.5rem;
|
|
410
|
+
text &:focus,
|
|
411
|
+
&:focus-within {
|
|
412
|
+
border-radius: 0.125rem;
|
|
413
|
+
border: 2px solid
|
|
414
|
+
${(props) => !props.isValid ? "var(--red)" : props.$bordercolor || "var(--yellow-500)"};
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
&::placeholder {
|
|
418
|
+
font-size: 1rem;
|
|
419
|
+
line-height: 1.5rem;
|
|
420
|
+
color: #b6b6b6;
|
|
421
|
+
font-weight: 800;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/* Autofill styles */
|
|
425
|
+
&:-webkit-autofill {
|
|
426
|
+
background: var(--gray-500) !important;
|
|
427
|
+
color: var(--black) !important;
|
|
428
|
+
-webkit-text-fill-color: var(--black) !important;
|
|
429
|
+
transition: background-color 5000s ease-in-out 0s; /* Prevent flashing */
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
&:-webkit-autofill::first-line {
|
|
433
|
+
font-family: "Montserrat", sans-serif;
|
|
434
|
+
font-size: 1rem;
|
|
435
|
+
font-weight: 500;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
&:focus-within {
|
|
440
|
+
.form-control {
|
|
441
|
+
border: 2px solid
|
|
442
|
+
${(props) => props.isInvalid ? "var(--red)" : props.$bordercolor || "var(--yellow-500)"};
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
.flag-dropdown {
|
|
447
|
+
background: white;
|
|
448
|
+
border: none;
|
|
449
|
+
padding: 0.5rem;
|
|
450
|
+
margin: 0.25rem;
|
|
451
|
+
cursor: pointer;
|
|
452
|
+
|
|
453
|
+
&:focus-within {
|
|
454
|
+
outline: none;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
`;
|
|
458
|
+
var FormErrorMessage = styled2.small`
|
|
459
|
+
font-size: 0.75rem;
|
|
460
|
+
line-height: 1.125rem;
|
|
461
|
+
color: var(--red);
|
|
462
|
+
margin-top: 0.25rem;
|
|
463
|
+
display: block;
|
|
464
|
+
`;
|
|
465
|
+
var FormControl = styled2.div.withConfig({
|
|
466
|
+
shouldForwardProp: (prop) => !["isInvalid", "$bordercolor"].includes(prop)
|
|
467
|
+
})`
|
|
468
|
+
${FormLabel} {
|
|
469
|
+
${(props) => props.isInvalid && css`
|
|
470
|
+
color: var(--red);
|
|
471
|
+
`};
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
${Input} {
|
|
475
|
+
${(props) => props.isInvalid && css`
|
|
476
|
+
border: 1px solid var(--red);
|
|
477
|
+
|
|
478
|
+
&:not(:focus)::placeholder {
|
|
479
|
+
color: var(--red);
|
|
480
|
+
font-weight: 600;
|
|
481
|
+
}
|
|
482
|
+
`};
|
|
483
|
+
|
|
484
|
+
&:focus {
|
|
485
|
+
${(props) => props.isInvalid && css`
|
|
486
|
+
border: 1px solid var(--red);
|
|
487
|
+
`};
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
${FormPhoneInput} {
|
|
492
|
+
${(props) => props.isInvalid && css`
|
|
493
|
+
border: 1px solid var(--red);
|
|
494
|
+
|
|
495
|
+
&:not(:focus)::placeholder {
|
|
496
|
+
color: var(--red);
|
|
497
|
+
font-weight: 600;
|
|
498
|
+
}
|
|
499
|
+
`};
|
|
500
|
+
|
|
501
|
+
&:focus {
|
|
502
|
+
${(props) => props.isInvalid && css`
|
|
503
|
+
border: 1px solid var(--red);
|
|
504
|
+
`};
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
`;
|
|
508
|
+
|
|
509
|
+
// src/components/Input/index.tsx
|
|
510
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
511
|
+
var InputBase = ({ id, label, error, showErrorMessage = true, borderColor, textColor, mask = "", type = "text", ...rest }, ref) => {
|
|
512
|
+
const phoneInputRef = useRef(null);
|
|
513
|
+
const { onChange, name } = rest;
|
|
514
|
+
const handleKeyUp = useCallback(
|
|
515
|
+
(e) => {
|
|
516
|
+
if (mask === "cep") cep(e);
|
|
517
|
+
if (mask === "currency") currency(e);
|
|
518
|
+
if (mask === "cpf") cpf(e);
|
|
519
|
+
if (mask === "date") date(e);
|
|
520
|
+
},
|
|
521
|
+
[mask]
|
|
522
|
+
);
|
|
523
|
+
const handlePhoneChange = useCallback((value) => {
|
|
524
|
+
onChange?.({ target: { value, name } });
|
|
525
|
+
if (phoneInputRef.current?.input) {
|
|
526
|
+
phoneInputRef.current.input.value = value;
|
|
527
|
+
}
|
|
528
|
+
}, [onChange, name]);
|
|
529
|
+
return /* @__PURE__ */ jsxs(FormControl, { isInvalid: !!error, children: [
|
|
530
|
+
!!label && /* @__PURE__ */ jsx(FormLabel, { htmlFor: id, $textColor: textColor, children: label }),
|
|
531
|
+
!mask ? /* @__PURE__ */ jsx(
|
|
532
|
+
Input,
|
|
533
|
+
{
|
|
534
|
+
id,
|
|
535
|
+
ref,
|
|
536
|
+
type,
|
|
537
|
+
$bordercolor: borderColor,
|
|
538
|
+
"aria-invalid": !!error && showErrorMessage ? "true" : "false",
|
|
539
|
+
autoComplete: rest.autoComplete || "on",
|
|
540
|
+
...rest
|
|
541
|
+
}
|
|
542
|
+
) : mask === "phone" ? /* @__PURE__ */ jsx(
|
|
543
|
+
FormPhoneInput,
|
|
544
|
+
{
|
|
545
|
+
country: "br",
|
|
546
|
+
$bordercolor: borderColor,
|
|
547
|
+
placeholder: rest.placeholder,
|
|
548
|
+
"aria-invalid": !!error && showErrorMessage ? "true" : "false",
|
|
549
|
+
isInvalid: !!error,
|
|
550
|
+
onChange: handlePhoneChange,
|
|
551
|
+
masks: {
|
|
552
|
+
br: "(..) .....-...."
|
|
553
|
+
},
|
|
554
|
+
inputProps: {
|
|
555
|
+
id,
|
|
556
|
+
name: "phone",
|
|
557
|
+
required: true,
|
|
558
|
+
autoFocus: true,
|
|
559
|
+
autoComplete: "tel",
|
|
560
|
+
ref: phoneInputRef
|
|
561
|
+
},
|
|
562
|
+
dropdownStyle: {
|
|
563
|
+
color: textColor
|
|
564
|
+
},
|
|
565
|
+
disableCountryGuess: true,
|
|
566
|
+
disableCountryCode: true,
|
|
567
|
+
value: rest.value
|
|
568
|
+
}
|
|
569
|
+
) : /* @__PURE__ */ jsx(
|
|
570
|
+
Input,
|
|
571
|
+
{
|
|
572
|
+
id,
|
|
573
|
+
ref,
|
|
574
|
+
type,
|
|
575
|
+
$bordercolor: borderColor,
|
|
576
|
+
"aria-invalid": !!error && showErrorMessage ? "true" : "false",
|
|
577
|
+
onKeyUp: handleKeyUp,
|
|
578
|
+
autoComplete: rest.autoComplete || "on",
|
|
579
|
+
...rest
|
|
580
|
+
}
|
|
581
|
+
),
|
|
582
|
+
!!error && showErrorMessage && /* @__PURE__ */ jsx(FormErrorMessage, { "data-testid": "error-message", children: typeof error === "string" ? error : error.message })
|
|
583
|
+
] });
|
|
584
|
+
};
|
|
585
|
+
var Input2 = forwardRef(InputBase);
|
|
586
|
+
|
|
292
587
|
// src/components/Alert/index.tsx
|
|
293
|
-
import { useEffect as useEffect2, useState as useState2, useCallback } from "react";
|
|
588
|
+
import { useEffect as useEffect2, useState as useState2, useCallback as useCallback2 } from "react";
|
|
294
589
|
|
|
295
590
|
// src/components/Alert/styles.ts
|
|
296
|
-
import
|
|
591
|
+
import styled3, { css as css2, keyframes } from "styled-components";
|
|
297
592
|
var fadeIn = keyframes`
|
|
298
593
|
from { opacity: 0; transform: translateY(-10px); }
|
|
299
594
|
to { opacity: 1; transform: translateY(0); }
|
|
@@ -303,7 +598,7 @@ var fadeOut = keyframes`
|
|
|
303
598
|
to { opacity: 0; transform: translateY(-10px); }
|
|
304
599
|
`;
|
|
305
600
|
var typeStyles = {
|
|
306
|
-
error:
|
|
601
|
+
error: css2`
|
|
307
602
|
background-color: var(--red);
|
|
308
603
|
border: 1px solid var(--red);
|
|
309
604
|
color: var(--white);
|
|
@@ -311,7 +606,7 @@ var typeStyles = {
|
|
|
311
606
|
color: var(--white);
|
|
312
607
|
}
|
|
313
608
|
`,
|
|
314
|
-
warning:
|
|
609
|
+
warning: css2`
|
|
315
610
|
background-color: var(--yellow-500);
|
|
316
611
|
border: 1px solid var(--yellow-400);
|
|
317
612
|
color: var(--black);
|
|
@@ -319,7 +614,7 @@ var typeStyles = {
|
|
|
319
614
|
color: var(--black);
|
|
320
615
|
}
|
|
321
616
|
`,
|
|
322
|
-
info:
|
|
617
|
+
info: css2`
|
|
323
618
|
background-color: var(--blue);
|
|
324
619
|
border: 1px solid var(--blue);
|
|
325
620
|
color: var(--white);
|
|
@@ -327,7 +622,7 @@ var typeStyles = {
|
|
|
327
622
|
color: var(--white);
|
|
328
623
|
}
|
|
329
624
|
`,
|
|
330
|
-
success:
|
|
625
|
+
success: css2`
|
|
331
626
|
background-color: var(--green);
|
|
332
627
|
border: 1px solid var(--green-2);
|
|
333
628
|
color: var(--white);
|
|
@@ -336,7 +631,7 @@ var typeStyles = {
|
|
|
336
631
|
}
|
|
337
632
|
`
|
|
338
633
|
};
|
|
339
|
-
var AlertContainer =
|
|
634
|
+
var AlertContainer = styled3.div`
|
|
340
635
|
position: fixed;
|
|
341
636
|
width: 500px;
|
|
342
637
|
top: 15px;
|
|
@@ -356,7 +651,7 @@ var AlertContainer = styled2.div`
|
|
|
356
651
|
|
|
357
652
|
${({ $type }) => typeStyles[$type]}
|
|
358
653
|
`;
|
|
359
|
-
var DismissButton =
|
|
654
|
+
var DismissButton = styled3.button`
|
|
360
655
|
position: absolute;
|
|
361
656
|
background: transparent;
|
|
362
657
|
right: 10px;
|
|
@@ -378,7 +673,7 @@ var DismissButton = styled2.button`
|
|
|
378
673
|
|
|
379
674
|
// src/components/Alert/index.tsx
|
|
380
675
|
import { HiX } from "react-icons/hi";
|
|
381
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
676
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
382
677
|
var Alert = ({
|
|
383
678
|
type = "info",
|
|
384
679
|
children,
|
|
@@ -388,7 +683,7 @@ var Alert = ({
|
|
|
388
683
|
autoDismiss
|
|
389
684
|
}) => {
|
|
390
685
|
const [isClosing, setIsClosing] = useState2(false);
|
|
391
|
-
const handleDismiss =
|
|
686
|
+
const handleDismiss = useCallback2(() => {
|
|
392
687
|
setIsClosing(true);
|
|
393
688
|
setTimeout(() => onDismiss?.(), 300);
|
|
394
689
|
}, [onDismiss]);
|
|
@@ -398,7 +693,7 @@ var Alert = ({
|
|
|
398
693
|
return () => clearTimeout(timer);
|
|
399
694
|
}
|
|
400
695
|
}, [autoDismiss, handleDismiss]);
|
|
401
|
-
return /* @__PURE__ */
|
|
696
|
+
return /* @__PURE__ */ jsxs2(
|
|
402
697
|
AlertContainer,
|
|
403
698
|
{
|
|
404
699
|
$type: type,
|
|
@@ -408,12 +703,12 @@ var Alert = ({
|
|
|
408
703
|
role: "alert",
|
|
409
704
|
children: [
|
|
410
705
|
children,
|
|
411
|
-
dismissible && /* @__PURE__ */
|
|
706
|
+
dismissible && /* @__PURE__ */ jsx2(
|
|
412
707
|
DismissButton,
|
|
413
708
|
{
|
|
414
709
|
onClick: handleDismiss,
|
|
415
710
|
"aria-label": "Dismiss alert",
|
|
416
|
-
children: /* @__PURE__ */
|
|
711
|
+
children: /* @__PURE__ */ jsx2(HiX, {})
|
|
417
712
|
}
|
|
418
713
|
)
|
|
419
714
|
]
|
|
@@ -422,7 +717,7 @@ var Alert = ({
|
|
|
422
717
|
};
|
|
423
718
|
|
|
424
719
|
// src/components/Form/index.tsx
|
|
425
|
-
import { Fragment, jsx as
|
|
720
|
+
import { Fragment, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
426
721
|
var schema = yup.object().shape({
|
|
427
722
|
name: yup.string().required("Nome \xE9 obrigat\xF3rio"),
|
|
428
723
|
email: yup.string().required("Email \xE9 obrigat\xF3rio").email("Email inv\xE1lido"),
|
|
@@ -493,10 +788,10 @@ var MitreFormComponent = React3.forwardRef(({
|
|
|
493
788
|
setIsLoading(false);
|
|
494
789
|
}
|
|
495
790
|
};
|
|
496
|
-
return /* @__PURE__ */
|
|
497
|
-
/* @__PURE__ */
|
|
498
|
-
/* @__PURE__ */
|
|
499
|
-
error && /* @__PURE__ */
|
|
791
|
+
return /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
792
|
+
/* @__PURE__ */ jsx3(global_default, {}),
|
|
793
|
+
/* @__PURE__ */ jsx3(GlobalStyles, {}),
|
|
794
|
+
error && /* @__PURE__ */ jsx3(
|
|
500
795
|
Alert,
|
|
501
796
|
{
|
|
502
797
|
type: "error",
|
|
@@ -506,7 +801,7 @@ var MitreFormComponent = React3.forwardRef(({
|
|
|
506
801
|
children: error.message
|
|
507
802
|
}
|
|
508
803
|
),
|
|
509
|
-
successMessage && /* @__PURE__ */
|
|
804
|
+
successMessage && /* @__PURE__ */ jsx3(
|
|
510
805
|
Alert,
|
|
511
806
|
{
|
|
512
807
|
type: "success",
|
|
@@ -516,30 +811,46 @@ var MitreFormComponent = React3.forwardRef(({
|
|
|
516
811
|
children: successMessage
|
|
517
812
|
}
|
|
518
813
|
),
|
|
519
|
-
/* @__PURE__ */
|
|
520
|
-
/* @__PURE__ */
|
|
521
|
-
/* @__PURE__ */
|
|
522
|
-
/* @__PURE__ */
|
|
814
|
+
/* @__PURE__ */ jsxs3(FormContainer, { ref, children: [
|
|
815
|
+
showHeader && /* @__PURE__ */ jsxs3(HeaderContainer, { children: [
|
|
816
|
+
/* @__PURE__ */ jsx3(Title, { children: "Atendimento por mensagem" }),
|
|
817
|
+
/* @__PURE__ */ jsx3(Text, { children: "Informe seus dados e retornaremos a mensagem." })
|
|
523
818
|
] }),
|
|
524
|
-
/* @__PURE__ */
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
"A Mitre Realty respeita a sua privacidade e utiliza os seus dados pessoais para contat\xE1-lo por e-mail ou telefone aqui registrados. Para saber mais, acesse a nossa",
|
|
528
|
-
" ",
|
|
529
|
-
/* @__PURE__ */ jsx2(
|
|
530
|
-
"a",
|
|
819
|
+
/* @__PURE__ */ jsxs3(Form, { onSubmit: handleSubmit(sendMessage), noValidate: true, children: [
|
|
820
|
+
/* @__PURE__ */ jsx3(
|
|
821
|
+
Input2,
|
|
531
822
|
{
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
823
|
+
id: "name",
|
|
824
|
+
label: "Nome *",
|
|
825
|
+
placeholder: "Digite seu nome",
|
|
826
|
+
...register("name"),
|
|
827
|
+
borderColor: colorPrimary,
|
|
828
|
+
textColor,
|
|
829
|
+
error: errors.name?.message,
|
|
830
|
+
autoComplete: "name",
|
|
831
|
+
required: true
|
|
536
832
|
}
|
|
537
833
|
),
|
|
538
|
-
"
|
|
539
|
-
|
|
540
|
-
"
|
|
541
|
-
|
|
542
|
-
|
|
834
|
+
/* @__PURE__ */ jsx3("h6", { children: "* Campos de preenchimento obrigat\xF3rio." }),
|
|
835
|
+
/* @__PURE__ */ jsx3(ButtonContainer, {}),
|
|
836
|
+
/* @__PURE__ */ jsxs3("p", { children: [
|
|
837
|
+
"A Mitre Realty respeita a sua privacidade e utiliza os seus dados pessoais para contat\xE1-lo por e-mail ou telefone aqui registrados. Para saber mais, acesse a nossa",
|
|
838
|
+
" ",
|
|
839
|
+
/* @__PURE__ */ jsx3(
|
|
840
|
+
"a",
|
|
841
|
+
{
|
|
842
|
+
href: "https://www.mitrerealty.com.br/politica-de-privacidade",
|
|
843
|
+
target: "_blank",
|
|
844
|
+
rel: "noopener noreferrer",
|
|
845
|
+
children: "Pol\xEDtica de Privacidade"
|
|
846
|
+
}
|
|
847
|
+
),
|
|
848
|
+
". Ao clicar em ",
|
|
849
|
+
'"',
|
|
850
|
+
"enviar",
|
|
851
|
+
'"',
|
|
852
|
+
", voc\xEA concorda em permitir que a Mitre Realty, armazene e processe os dados pessoais fornecidos por voc\xEA para finalidade informada"
|
|
853
|
+
] })
|
|
543
854
|
] })
|
|
544
855
|
] })
|
|
545
856
|
] });
|
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/Alert/index.tsx","../src/components/Alert/styles.ts","../src/index.ts"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useError } from \"../hooks/useError\";\nimport { useForm, SubmitHandler } 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 { 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 { 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 } 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 ref={ref} >\n <HeaderContainer>\n <Title >Atendimento por mensagem</Title>\n\n <Text >Informe seus dados e retornaremos a mensagem.</Text>\n </HeaderContainer>\n\n \n\n <h6>* Campos de preenchimento obrigatório.</h6>\n\n <ButtonContainer>\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 </FormContainer>\n </>\n );\n});\n\nMitreFormComponent.displayName = \"MitreFormComponent\";\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 ${flex(\"column\")}\n align-items: stretch;\n justify-content: flex-start;\n overflow-x: hidden;\n overflow-y: auto;\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`\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 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 }\n\n h6 {\n text-align: start;\n margin-left: 10px;\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`\n font-size: 1.25rem;\n font-weight: 700;\n line-height: 24px;\n letter-spacing: 0em;\n`;\n\nexport const Text = styled.p`\n font-size: 1rem;\n font-weight: 400;\n line-height: 23px;\n letter-spacing: 0em;\n margin-top: 10px;\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 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","import MitreFormComponent from \"./components/Form\";\n\nexport default MitreFormComponent;\n//export type { MitreFormComponentProps } from \"./components/Form\";\n"],"mappings":"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","names":["React","useState","useEffect","useState","styled","useState","useEffect","jsx","jsxs","React","useState"]}
|
|
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/Alert/index.tsx","../src/components/Alert/styles.ts","../src/index.ts"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useError } from \"../hooks/useError\";\nimport { useForm, SubmitHandler } 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 { 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 { 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 } 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 ref={ref} >\n {showHeader && \n <HeaderContainer>\n <Title >Atendimento por mensagem</Title>\n\n <Text>Informe seus dados e retornaremos a mensagem.</Text>\n </HeaderContainer>\n }\n\n <Form 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\n <h6>* Campos de preenchimento obrigatório.</h6>\n\n <ButtonContainer>\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 </Form>\n </FormContainer>\n </>\n );\n});\n\nMitreFormComponent.displayName = \"MitreFormComponent\";\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 ${flex(\"column\")}\n align-items: stretch;\n justify-content: flex-start;\n overflow-x: hidden;\n overflow-y: auto;\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`\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 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 }\n\n h6 {\n text-align: start;\n margin-left: 10px;\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`\n font-size: 1.25rem;\n font-weight: 700;\n line-height: 24px;\n letter-spacing: 0em;\n`;\n\nexport const Text = styled.p`\n font-size: 1rem;\n font-weight: 400;\n line-height: 23px;\n letter-spacing: 0em;\n margin-top: 10px;\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 'react-phone-input-2/lib/style.css'\n\nimport {\n FormControl,\n FormErrorMessage,\n FormLabel,\n Input as FormInput,\n FormPhoneInput\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 const { onChange, name } = rest;\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 const handlePhoneChange = useCallback((value: string) => {\n onChange?.({ target: { value, name } } as React.ChangeEvent<HTMLInputElement>);\n\n if (phoneInputRef.current?.input) {\n phoneInputRef.current.input.value = value;\n }\n }, [onChange, name]);\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 $bordercolor={borderColor}\n placeholder={rest.placeholder}\n aria-invalid={!!error && showErrorMessage ? \"true\" : \"false\"}\n isInvalid={!!error}\n onChange={handlePhoneChange}\n masks={{\n br: \"(..) .....-....\",}}\n inputProps={{\n id,\n name: 'phone',\n required: true,\n autoFocus: true,\n autoComplete: \"tel\",\n ref: phoneInputRef,\n }}\n //TODO no futuro enviar com o ddi, só retirar o disableCountryCode e disableCountryGuess\n dropdownStyle={{\n color: textColor,\n }}\n disableCountryGuess={true}\n disableCountryCode={true}\n value={rest.value as string} \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\nimport PhoneInput from \"react-phone-input-2\";\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 FormPhoneInput = styled(PhoneInput)<\n InputProps & { $bordercolor?: string; $textColor?: string }\n>`\n .form-control {\n background: white;\n color: ${(props) =>\n props.isInvalid ? \"var(--red)\" : props.$textColor || \"var(--black)\"};\n padding: 0.5rem;\n border-radius: 0.125rem;\n border: 1px solid transparent;\n height: 3.125rem;\n width: 100%;\n padding-left: 4rem;\n font-family: \"Montserrat\", sans-serif;\n font-style: normal;\n font-weight: 500;\n font-size: 1rem;\n line-height: 1.5rem;\n text &:focus,\n &:focus-within {\n border-radius: 0.125rem;\n border: 2px solid\n ${(props) =>\n !props.isValid\n ? \"var(--red)\"\n : props.$bordercolor || \"var(--yellow-500)\"};\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\n &:focus-within {\n .form-control {\n border: 2px solid\n ${(props) =>\n props.isInvalid\n ? \"var(--red)\"\n : props.$bordercolor || \"var(--yellow-500)\"};\n }\n }\n\n .flag-dropdown {\n background: white;\n border: none;\n padding: 0.5rem;\n margin: 0.25rem;\n cursor: pointer;\n\n &:focus-within {\n outline: none;\n }\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 ${FormPhoneInput} {\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 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","import MitreFormComponent from \"./components/Form\";\n\nexport default MitreFormComponent;\n//export type { MitreFormComponentProps } from \"./components/Form\";\n"],"mappings":"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","names":["React","useState","styled","Input","useEffect","useState","useCallback","styled","css","jsx","jsxs","useState","useCallback","useEffect","jsx","jsxs","React","useState","Input"]}
|