@greatapps/common 1.1.699 → 1.1.701
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/components/modals/HexaPromoModal.mjs +166 -0
- package/dist/components/modals/HexaPromoModal.mjs.map +1 -0
- package/dist/components/modals/HexaPromoModalGate.mjs +54 -0
- package/dist/components/modals/HexaPromoModalGate.mjs.map +1 -0
- package/dist/index.mjs +38 -32
- package/dist/index.mjs.map +1 -1
- package/dist/providers/auth.provider.mjs +2 -0
- package/dist/providers/auth.provider.mjs.map +1 -1
- package/dist/store/useHexaPromoModal.mjs +14 -0
- package/dist/store/useHexaPromoModal.mjs.map +1 -0
- package/dist/utils/cookies/hexa-promo.mjs +88 -0
- package/dist/utils/cookies/hexa-promo.mjs.map +1 -0
- package/package.json +1 -1
- package/src/components/modals/HexaPromoModal.tsx +212 -0
- package/src/components/modals/HexaPromoModalGate.tsx +80 -0
- package/src/index.ts +3 -0
- package/src/providers/auth.provider.tsx +3 -0
- package/src/store/useHexaPromoModal.ts +13 -0
- package/src/utils/cookies/hexa-promo.ts +114 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { toast } from "sonner";
|
|
4
|
+
import {
|
|
5
|
+
IconCheck,
|
|
6
|
+
IconCopy,
|
|
7
|
+
IconInfoCircle,
|
|
8
|
+
IconStar,
|
|
9
|
+
IconTicket,
|
|
10
|
+
IconX
|
|
11
|
+
} from "@tabler/icons-react";
|
|
12
|
+
import { Dialog, DialogClose, DialogContent, DialogTitle } from "../ui/overlay/Dialog";
|
|
13
|
+
import { Toast } from "../ui/feedback/Toast";
|
|
14
|
+
import { Button } from "../ui/buttons/Button";
|
|
15
|
+
import useCopyToClipboard from "../../hooks/copy-to-clipboard.hook";
|
|
16
|
+
import { useModalManager } from "../../store/useModalManager";
|
|
17
|
+
import { useWhitelabelUrls } from "../../providers/whitelabel.provider";
|
|
18
|
+
import { cn } from "../../infra/utils/clsx";
|
|
19
|
+
const COPY = {
|
|
20
|
+
title: "Rumo ao Hexa!",
|
|
21
|
+
subtitlePrefix: "Ofertas exclusivas at\xE9 ",
|
|
22
|
+
subtitleDate: "24/06",
|
|
23
|
+
mostChosen: "Mais escolhido",
|
|
24
|
+
couponLabel: "Cupom",
|
|
25
|
+
choosePlan: "Escolher plano",
|
|
26
|
+
couponCopied: "Cupom copiado!",
|
|
27
|
+
close: "Fechar",
|
|
28
|
+
footerPrefix: "V\xE1lido para a ",
|
|
29
|
+
footerBold: "primeira contrata\xE7\xE3o",
|
|
30
|
+
footerSuffix: " dos planos Essencial, Neg\xF3cio ou Ag\xEAncia"
|
|
31
|
+
};
|
|
32
|
+
const COMBOS = [
|
|
33
|
+
{
|
|
34
|
+
coupon: "MENSAL10",
|
|
35
|
+
name: "Combo convoca\xE7\xE3o",
|
|
36
|
+
highlighted: false,
|
|
37
|
+
features: ["10% OFF no plano mensal", "Webinars exclusivos"]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
coupon: "SEMESTRAL10",
|
|
41
|
+
name: "Combo Hexa",
|
|
42
|
+
highlighted: true,
|
|
43
|
+
features: ["10% OFF no plano semestral", "3 templates exclusivos", "Webinars exclusivos"]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
coupon: "ANUAL10",
|
|
47
|
+
name: "Combo escala\xE7\xE3o",
|
|
48
|
+
highlighted: false,
|
|
49
|
+
features: ["10% OFF no plano anual", "3 templates exclusivos"]
|
|
50
|
+
}
|
|
51
|
+
];
|
|
52
|
+
const GRADIENT = "linear-gradient(180deg, #08c44f 0%, #7bd237 46.6%, #ffe31b 100%)";
|
|
53
|
+
function HexaPromoModal() {
|
|
54
|
+
const { activeModal, closeModal } = useModalManager();
|
|
55
|
+
const { accountsUrl } = useWhitelabelUrls();
|
|
56
|
+
const isOpen = activeModal === "hexaPromoModal";
|
|
57
|
+
const goToPlans = (coupon) => {
|
|
58
|
+
closeModal();
|
|
59
|
+
const url = `${accountsUrl}/subscriptions?tab=plans&coupon=${encodeURIComponent(coupon)}`;
|
|
60
|
+
window.location.assign(url);
|
|
61
|
+
};
|
|
62
|
+
return /* @__PURE__ */ jsx(Dialog, { open: isOpen, onOpenChange: () => closeModal(), children: /* @__PURE__ */ jsxs(
|
|
63
|
+
DialogContent,
|
|
64
|
+
{
|
|
65
|
+
showCloseButton: false,
|
|
66
|
+
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
67
|
+
className: "border-0 bg-transparent p-0 shadow-none w-[calc(100%-32px)] sm:max-w-[940px] md:w-[924px] lg:w-[924px] max-h-[calc(100dvh-32px)] overflow-y-auto",
|
|
68
|
+
children: [
|
|
69
|
+
/* @__PURE__ */ jsx(DialogTitle, { className: "sr-only", children: COPY.title }),
|
|
70
|
+
/* @__PURE__ */ jsx("div", { className: "rounded-[12px] p-1", style: { background: GRADIENT }, children: /* @__PURE__ */ jsxs("div", { className: "relative overflow-hidden rounded-[10px] bg-white p-8 shadow-[0px_2px_10px_0px_rgba(26,26,26,0.05)]", children: [
|
|
71
|
+
/* @__PURE__ */ jsx(
|
|
72
|
+
"img",
|
|
73
|
+
{
|
|
74
|
+
src: "/promo/hexa-confetti.png",
|
|
75
|
+
alt: "",
|
|
76
|
+
"aria-hidden": true,
|
|
77
|
+
className: "pointer-events-none absolute -top-10 right-0 w-[280px] -rotate-16 select-none"
|
|
78
|
+
}
|
|
79
|
+
),
|
|
80
|
+
/* @__PURE__ */ jsxs(DialogClose, { className: "absolute right-3 top-3 z-10 flex size-8 items-center justify-center rounded-lg p-2 text-zinc-500 transition-colors hover:bg-zinc-100 hover:text-zinc-950 focus:outline-none", children: [
|
|
81
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: COPY.close }),
|
|
82
|
+
/* @__PURE__ */ jsx(IconX, { className: "size-[18px]" })
|
|
83
|
+
] }),
|
|
84
|
+
/* @__PURE__ */ jsxs("div", { className: "relative z-[1] flex w-fit items-center gap-[9px] rounded-lg bg-zinc-100 px-[9px] py-2", children: [
|
|
85
|
+
/* @__PURE__ */ jsx("img", { src: "/promo/hexa-logo.svg", alt: "", "aria-hidden": true, className: "size-6 select-none" }),
|
|
86
|
+
/* @__PURE__ */ jsx("img", { src: "/promo/hexa-flag.png", alt: "", "aria-hidden": true, className: "size-6 rounded select-none" })
|
|
87
|
+
] }),
|
|
88
|
+
/* @__PURE__ */ jsxs("div", { className: "relative z-[1] mt-4 flex flex-col gap-1", children: [
|
|
89
|
+
/* @__PURE__ */ jsx("h2", { className: "font-['Outfit'] text-[32px] font-semibold leading-8 text-zinc-950", children: COPY.title }),
|
|
90
|
+
/* @__PURE__ */ jsxs("p", { className: "paragraph-medium-medium text-zinc-950", children: [
|
|
91
|
+
COPY.subtitlePrefix,
|
|
92
|
+
/* @__PURE__ */ jsx("span", { className: "font-bold", children: COPY.subtitleDate })
|
|
93
|
+
] })
|
|
94
|
+
] }),
|
|
95
|
+
/* @__PURE__ */ jsx("div", { className: "relative z-[1] mt-10 flex flex-col items-stretch gap-3 md:flex-row", children: COMBOS.map((combo) => /* @__PURE__ */ jsx(ComboCard, { combo, onChoose: () => goToPlans(combo.coupon) }, combo.coupon)) }),
|
|
96
|
+
/* @__PURE__ */ jsxs("div", { className: "relative z-[1] mt-3 flex items-center justify-center gap-2.5 rounded-[10px] bg-zinc-100 p-3 text-center", children: [
|
|
97
|
+
/* @__PURE__ */ jsx(IconInfoCircle, { className: "size-4 shrink-0 text-zinc-950" }),
|
|
98
|
+
/* @__PURE__ */ jsxs("p", { className: "paragraph-small-medium text-zinc-950", children: [
|
|
99
|
+
COPY.footerPrefix,
|
|
100
|
+
/* @__PURE__ */ jsx("span", { className: "font-semibold", children: COPY.footerBold }),
|
|
101
|
+
COPY.footerSuffix
|
|
102
|
+
] })
|
|
103
|
+
] })
|
|
104
|
+
] }) })
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
) });
|
|
108
|
+
}
|
|
109
|
+
function ComboCard({ combo, onChoose }) {
|
|
110
|
+
const { isCopied, copy } = useCopyToClipboard({
|
|
111
|
+
onSuccess: () => {
|
|
112
|
+
toast.custom((t) => /* @__PURE__ */ jsx(Toast, { variant: "success", message: COPY.couponCopied, toastId: t }));
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return /* @__PURE__ */ jsxs(
|
|
116
|
+
"div",
|
|
117
|
+
{
|
|
118
|
+
className: cn(
|
|
119
|
+
"relative flex flex-1 flex-col rounded-[10px] border bg-white pb-3 md:w-[276px]",
|
|
120
|
+
combo.highlighted ? "border-cyan-500" : "border-zinc-200"
|
|
121
|
+
),
|
|
122
|
+
children: [
|
|
123
|
+
combo.highlighted && /* @__PURE__ */ jsxs("div", { className: "absolute left-1/2 top-0 z-[1] flex h-6 -translate-x-1/2 -translate-y-1/2 items-center justify-center gap-[5px] rounded-md border-4 border-white bg-cyan-100 px-2", children: [
|
|
124
|
+
/* @__PURE__ */ jsx(IconStar, { className: "size-3 text-cyan-600" }),
|
|
125
|
+
/* @__PURE__ */ jsx("span", { className: "paragraph-xsmall-semibold whitespace-nowrap text-cyan-600", children: COPY.mostChosen }),
|
|
126
|
+
/* @__PURE__ */ jsx(IconStar, { className: "size-3 text-cyan-600" })
|
|
127
|
+
] }),
|
|
128
|
+
/* @__PURE__ */ jsx("h3", { className: "border-b border-zinc-200 px-4 py-4 text-center font-['Outfit'] text-base font-semibold text-zinc-950", children: combo.name }),
|
|
129
|
+
/* @__PURE__ */ jsx("ul", { className: "flex flex-1 flex-col gap-5 px-5 pt-5", children: combo.features.map((feature) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2.5", children: [
|
|
130
|
+
/* @__PURE__ */ jsx(IconCheck, { className: "size-5 shrink-0 text-cyan-500" }),
|
|
131
|
+
/* @__PURE__ */ jsx("span", { className: "paragraph-small-medium text-zinc-950", children: feature })
|
|
132
|
+
] }, feature)) }),
|
|
133
|
+
/* @__PURE__ */ jsxs("div", { className: "mx-3 mt-5 flex items-center gap-3 rounded-lg bg-cyan-50 py-2 pl-3.5 pr-2.5", children: [
|
|
134
|
+
/* @__PURE__ */ jsx(IconTicket, { className: "size-5 shrink-0 text-cyan-600" }),
|
|
135
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
136
|
+
/* @__PURE__ */ jsx("span", { className: "paragraph-xsmall-medium text-zinc-400", children: COPY.couponLabel }),
|
|
137
|
+
/* @__PURE__ */ jsx("span", { className: "paragraph-small-semibold text-zinc-950", children: combo.coupon })
|
|
138
|
+
] }),
|
|
139
|
+
/* @__PURE__ */ jsx(
|
|
140
|
+
"button",
|
|
141
|
+
{
|
|
142
|
+
type: "button",
|
|
143
|
+
"aria-label": COPY.couponLabel,
|
|
144
|
+
onClick: () => copy(combo.coupon),
|
|
145
|
+
className: "flex size-8 shrink-0 items-center justify-center rounded-md text-zinc-500 transition-colors hover:bg-cyan-100 hover:text-zinc-950",
|
|
146
|
+
children: isCopied ? /* @__PURE__ */ jsx(IconCheck, { className: "size-[18px]" }) : /* @__PURE__ */ jsx(IconCopy, { className: "size-[18px]" })
|
|
147
|
+
}
|
|
148
|
+
)
|
|
149
|
+
] }),
|
|
150
|
+
/* @__PURE__ */ jsx("div", { className: "mx-3 mt-3", children: /* @__PURE__ */ jsx(
|
|
151
|
+
Button,
|
|
152
|
+
{
|
|
153
|
+
variant: combo.highlighted ? "default" : "secondary",
|
|
154
|
+
className: cn("h-11! w-full", combo.highlighted && "bg-cyan-500 text-white hover:bg-cyan-600"),
|
|
155
|
+
onClick: onChoose,
|
|
156
|
+
children: COPY.choosePlan
|
|
157
|
+
}
|
|
158
|
+
) })
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
export {
|
|
164
|
+
HexaPromoModal as default
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=HexaPromoModal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/modals/HexaPromoModal.tsx"],"sourcesContent":["'use client';\n\nimport { toast } from 'sonner';\nimport {\n IconCheck,\n IconCopy,\n IconInfoCircle,\n IconStar,\n IconTicket,\n IconX,\n} from '@tabler/icons-react';\nimport { Dialog, DialogClose, DialogContent, DialogTitle } from '../ui/overlay/Dialog';\nimport { Toast } from '../ui/feedback/Toast';\nimport { Button } from '../ui/buttons/Button';\nimport useCopyToClipboard from '../../hooks/copy-to-clipboard.hook';\nimport { useModalManager } from '../../store/useModalManager';\nimport { useWhitelabelUrls } from '../../providers/whitelabel.provider';\nimport { cn } from '../../infra/utils/clsx';\n\ninterface HexaCombo {\n coupon: string;\n name: string;\n features: string[];\n highlighted: boolean;\n}\n\n// Campanha \"Rumo ao Hexa\" — exclusiva da whitelabel 1 (público pt-br). O texto é fixo de\n// propósito: a modal precisa renderizar também no gapps, que não tem provider de next-intl.\nconst COPY = {\n title: 'Rumo ao Hexa!',\n subtitlePrefix: 'Ofertas exclusivas até ',\n subtitleDate: '24/06',\n mostChosen: 'Mais escolhido',\n couponLabel: 'Cupom',\n choosePlan: 'Escolher plano',\n couponCopied: 'Cupom copiado!',\n close: 'Fechar',\n footerPrefix: 'Válido para a ',\n footerBold: 'primeira contratação',\n footerSuffix: ' dos planos Essencial, Negócio ou Agência',\n};\n\nconst COMBOS: HexaCombo[] = [\n {\n coupon: 'MENSAL10',\n name: 'Combo convocação',\n highlighted: false,\n features: ['10% OFF no plano mensal', 'Webinars exclusivos'],\n },\n {\n coupon: 'SEMESTRAL10',\n name: 'Combo Hexa',\n highlighted: true,\n features: ['10% OFF no plano semestral', '3 templates exclusivos', 'Webinars exclusivos'],\n },\n {\n coupon: 'ANUAL10',\n name: 'Combo escalação',\n highlighted: false,\n features: ['10% OFF no plano anual', '3 templates exclusivos'],\n },\n];\n\n// Cores promocionais (verde/amarelo do Brasil) — específicas desta campanha, fora do design\n// system, por isso ficam hardcoded apenas aqui.\nconst GRADIENT = 'linear-gradient(180deg, #08c44f 0%, #7bd237 46.6%, #ffe31b 100%)';\n\nexport default function HexaPromoModal() {\n const { activeModal, closeModal } = useModalManager();\n const { accountsUrl } = useWhitelabelUrls();\n const isOpen = activeModal === 'hexaPromoModal';\n\n const goToPlans = (coupon: string) => {\n closeModal();\n const url = `${accountsUrl}/subscriptions?tab=plans&coupon=${encodeURIComponent(coupon)}`;\n window.location.assign(url);\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={() => closeModal()}>\n <DialogContent\n showCloseButton={false}\n onOpenAutoFocus={(e) => e.preventDefault()}\n className=\"border-0 bg-transparent p-0 shadow-none w-[calc(100%-32px)] sm:max-w-[940px] md:w-[924px] lg:w-[924px] max-h-[calc(100dvh-32px)] overflow-y-auto\"\n >\n <DialogTitle className=\"sr-only\">{COPY.title}</DialogTitle>\n\n <div className=\"rounded-[12px] p-1\" style={{ background: GRADIENT }}>\n <div className=\"relative overflow-hidden rounded-[10px] bg-white p-8 shadow-[0px_2px_10px_0px_rgba(26,26,26,0.05)]\">\n {/* Arte decorativa (festão/bandeira) no canto superior direito */}\n <img\n src=\"/promo/hexa-confetti.png\"\n alt=\"\"\n aria-hidden\n className=\"pointer-events-none absolute -top-10 right-0 w-[280px] -rotate-16 select-none\"\n />\n\n <DialogClose className=\"absolute right-3 top-3 z-10 flex size-8 items-center justify-center rounded-lg p-2 text-zinc-500 transition-colors hover:bg-zinc-100 hover:text-zinc-950 focus:outline-none\">\n <span className=\"sr-only\">{COPY.close}</span>\n <IconX className=\"size-[18px]\" />\n </DialogClose>\n\n {/* Header: logo + bandeira */}\n <div className=\"relative z-[1] flex w-fit items-center gap-[9px] rounded-lg bg-zinc-100 px-[9px] py-2\">\n <img src=\"/promo/hexa-logo.svg\" alt=\"\" aria-hidden className=\"size-6 select-none\" />\n <img src=\"/promo/hexa-flag.png\" alt=\"\" aria-hidden className=\"size-6 rounded select-none\" />\n </div>\n\n {/* Título */}\n <div className=\"relative z-[1] mt-4 flex flex-col gap-1\">\n <h2 className=\"font-['Outfit'] text-[32px] font-semibold leading-8 text-zinc-950\">\n {COPY.title}\n </h2>\n <p className=\"paragraph-medium-medium text-zinc-950\">\n {COPY.subtitlePrefix}\n <span className=\"font-bold\">{COPY.subtitleDate}</span>\n </p>\n </div>\n\n {/* Cards */}\n <div className=\"relative z-[1] mt-10 flex flex-col items-stretch gap-3 md:flex-row\">\n {COMBOS.map((combo) => (\n <ComboCard key={combo.coupon} combo={combo} onChoose={() => goToPlans(combo.coupon)} />\n ))}\n </div>\n\n {/* Rodapé informativo */}\n <div className=\"relative z-[1] mt-3 flex items-center justify-center gap-2.5 rounded-[10px] bg-zinc-100 p-3 text-center\">\n <IconInfoCircle className=\"size-4 shrink-0 text-zinc-950\" />\n <p className=\"paragraph-small-medium text-zinc-950\">\n {COPY.footerPrefix}\n <span className=\"font-semibold\">{COPY.footerBold}</span>\n {COPY.footerSuffix}\n </p>\n </div>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\ninterface ComboCardProps {\n combo: HexaCombo;\n onChoose: () => void;\n}\n\nfunction ComboCard({ combo, onChoose }: ComboCardProps) {\n const { isCopied, copy } = useCopyToClipboard({\n onSuccess: () => {\n toast.custom((t) => <Toast variant=\"success\" message={COPY.couponCopied} toastId={t} />);\n },\n });\n\n return (\n <div\n className={cn(\n 'relative flex flex-1 flex-col rounded-[10px] border bg-white pb-3 md:w-[276px]',\n combo.highlighted ? 'border-cyan-500' : 'border-zinc-200',\n )}\n >\n {combo.highlighted && (\n <div className=\"absolute left-1/2 top-0 z-[1] flex h-6 -translate-x-1/2 -translate-y-1/2 items-center justify-center gap-[5px] rounded-md border-4 border-white bg-cyan-100 px-2\">\n <IconStar className=\"size-3 text-cyan-600\" />\n <span className=\"paragraph-xsmall-semibold whitespace-nowrap text-cyan-600\">\n {COPY.mostChosen}\n </span>\n <IconStar className=\"size-3 text-cyan-600\" />\n </div>\n )}\n\n <h3 className=\"border-b border-zinc-200 px-4 py-4 text-center font-['Outfit'] text-base font-semibold text-zinc-950\">\n {combo.name}\n </h3>\n\n <ul className=\"flex flex-1 flex-col gap-5 px-5 pt-5\">\n {combo.features.map((feature) => (\n <li key={feature} className=\"flex items-center gap-2.5\">\n <IconCheck className=\"size-5 shrink-0 text-cyan-500\" />\n <span className=\"paragraph-small-medium text-zinc-950\">{feature}</span>\n </li>\n ))}\n </ul>\n\n <div className=\"mx-3 mt-5 flex items-center gap-3 rounded-lg bg-cyan-50 py-2 pl-3.5 pr-2.5\">\n <IconTicket className=\"size-5 shrink-0 text-cyan-600\" />\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"paragraph-xsmall-medium text-zinc-400\">{COPY.couponLabel}</span>\n <span className=\"paragraph-small-semibold text-zinc-950\">{combo.coupon}</span>\n </div>\n <button\n type=\"button\"\n aria-label={COPY.couponLabel}\n onClick={() => copy(combo.coupon)}\n className=\"flex size-8 shrink-0 items-center justify-center rounded-md text-zinc-500 transition-colors hover:bg-cyan-100 hover:text-zinc-950\"\n >\n {isCopied ? <IconCheck className=\"size-[18px]\" /> : <IconCopy className=\"size-[18px]\" />}\n </button>\n </div>\n\n <div className=\"mx-3 mt-3\">\n <Button\n variant={combo.highlighted ? 'default' : 'secondary'}\n className={cn('h-11! w-full', combo.highlighted && 'bg-cyan-500 text-white hover:bg-cyan-600')}\n onClick={onChoose}\n >\n {COPY.choosePlan}\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
3
|
+
import { useActiveSubscription } from "../../modules/subscriptions/hooks/find-active-subscription.hook";
|
|
4
|
+
import { useAuth } from "../../providers/auth.provider";
|
|
5
|
+
import { useWhitelabel } from "../../providers/whitelabel.provider";
|
|
6
|
+
import { useModalManager } from "../../store/useModalManager";
|
|
7
|
+
import {
|
|
8
|
+
getHexaPromoSeenDay,
|
|
9
|
+
getHexaPromoSince,
|
|
10
|
+
hexaPromoDayKey,
|
|
11
|
+
setHexaPromoSeenDay,
|
|
12
|
+
setHexaPromoSince
|
|
13
|
+
} from "../../utils/cookies/hexa-promo";
|
|
14
|
+
const ONLINE_DELAY_MS = 3 * 60 * 1e3;
|
|
15
|
+
const FORCE_OPEN_FOR_TEST = false;
|
|
16
|
+
function HexaPromoModalGate() {
|
|
17
|
+
const { isAuthenticated } = useAuth();
|
|
18
|
+
const { whitelabel } = useWhitelabel();
|
|
19
|
+
const { activeModal, openModal } = useModalManager();
|
|
20
|
+
const { data } = useActiveSubscription();
|
|
21
|
+
const subscription = data?.data?.[0] ?? null;
|
|
22
|
+
const eligible = isAuthenticated && whitelabel?.id === 1 && subscription?.type === "trial";
|
|
23
|
+
const forcedRef = useRef(false);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (typeof window === "undefined") return;
|
|
26
|
+
if (FORCE_OPEN_FOR_TEST) {
|
|
27
|
+
if (forcedRef.current || activeModal) return;
|
|
28
|
+
forcedRef.current = true;
|
|
29
|
+
openModal("hexaPromoModal");
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (!eligible) return;
|
|
33
|
+
if (activeModal) return;
|
|
34
|
+
const todayKey = hexaPromoDayKey();
|
|
35
|
+
if (getHexaPromoSeenDay() === todayKey) return;
|
|
36
|
+
let since = getHexaPromoSince();
|
|
37
|
+
if (!since || since.day !== todayKey) {
|
|
38
|
+
since = { day: todayKey, ms: Date.now() };
|
|
39
|
+
setHexaPromoSince(since.day, since.ms);
|
|
40
|
+
}
|
|
41
|
+
const remaining = Math.max(0, since.ms + ONLINE_DELAY_MS - Date.now());
|
|
42
|
+
const timer = setTimeout(() => {
|
|
43
|
+
if (getHexaPromoSeenDay() === todayKey) return;
|
|
44
|
+
setHexaPromoSeenDay(todayKey);
|
|
45
|
+
openModal("hexaPromoModal");
|
|
46
|
+
}, remaining);
|
|
47
|
+
return () => clearTimeout(timer);
|
|
48
|
+
}, [eligible, activeModal, openModal]);
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
HexaPromoModalGate as default
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=HexaPromoModalGate.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/modals/HexaPromoModalGate.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { useActiveSubscription } from '../../modules/subscriptions/hooks/find-active-subscription.hook';\nimport { useAuth } from '../../providers/auth.provider';\nimport { useWhitelabel } from '../../providers/whitelabel.provider';\nimport { useModalManager } from '../../store/useModalManager';\nimport {\n getHexaPromoSeenDay,\n getHexaPromoSince,\n hexaPromoDayKey,\n setHexaPromoSeenDay,\n setHexaPromoSince,\n} from '../../utils/cookies/hexa-promo';\n\n/** Janela de tempo online antes de abrir a modal (3 minutos). */\nconst ONLINE_DELAY_MS = 3 * 60 * 1000;\n\n/**\n * TESTE: quando `true`, a modal abre imediatamente ao carregar o app, ignorando\n * trial / whitelabel / timer de 3 min / cookies. Manter `false` em produção.\n */\nconst FORCE_OPEN_FOR_TEST = false;\n\n/**\n * Dispara a modal \"Rumo ao Hexa\" quando um usuário em **trial** da **whitelabel 1** fica\n * 3 minutos online. A janela é cumulativa entre gapps e gpages (timestamp compartilhado em\n * cookie no domínio pai) e a modal abre **uma única vez** — reabrindo só no dia seguinte ou\n * após logout/login. Montar este componente uma vez no layout de cada app consumidor.\n */\nexport default function HexaPromoModalGate() {\n const { isAuthenticated } = useAuth();\n const { whitelabel } = useWhitelabel();\n const { activeModal, openModal } = useModalManager();\n const { data } = useActiveSubscription();\n\n const subscription = data?.data?.[0] ?? null;\n const eligible =\n isAuthenticated && whitelabel?.id === 1 && subscription?.type === 'trial';\n\n const forcedRef = useRef(false);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n // TESTE: abre uma vez ao carregar, sem nenhuma condição.\n if (FORCE_OPEN_FOR_TEST) {\n if (forcedRef.current || activeModal) return;\n forcedRef.current = true;\n openModal('hexaPromoModal');\n return;\n }\n\n if (!eligible) return;\n // Outra modal aberta: não empilha em cima. Reavalia quando ela fechar (dep `activeModal`).\n if (activeModal) return;\n\n const todayKey = hexaPromoDayKey();\n if (getHexaPromoSeenDay() === todayKey) return; // já exibida hoje/nesta sessão\n\n // Início da janela compartilhado entre os apps; reinicia a cada novo dia.\n let since = getHexaPromoSince();\n if (!since || since.day !== todayKey) {\n since = { day: todayKey, ms: Date.now() };\n setHexaPromoSince(since.day, since.ms);\n }\n\n const remaining = Math.max(0, since.ms + ONLINE_DELAY_MS - Date.now());\n const timer = setTimeout(() => {\n // Recheca o cookie no disparo: se o outro app já abriu, não reabre aqui.\n if (getHexaPromoSeenDay() === todayKey) return;\n setHexaPromoSeenDay(todayKey);\n openModal('hexaPromoModal');\n }, remaining);\n\n return () => clearTimeout(timer);\n }, [eligible, activeModal, openModal]);\n\n return null;\n}\n"],"mappings":";AAEA,SAAS,WAAW,cAAc;AAClC,SAAS,6BAA6B;AACtC,SAAS,eAAe;AACxB,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,MAAM,kBAAkB,IAAI,KAAK;AAMjC,MAAM,sBAAsB;AAQb,SAAR,qBAAsC;AAC3C,QAAM,EAAE,gBAAgB,IAAI,QAAQ;AACpC,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,EAAE,aAAa,UAAU,IAAI,gBAAgB;AACnD,QAAM,EAAE,KAAK,IAAI,sBAAsB;AAEvC,QAAM,eAAe,MAAM,OAAO,CAAC,KAAK;AACxC,QAAM,WACJ,mBAAmB,YAAY,OAAO,KAAK,cAAc,SAAS;AAEpE,QAAM,YAAY,OAAO,KAAK;AAE9B,YAAU,MAAM;AACd,QAAI,OAAO,WAAW,YAAa;AAGnC,QAAI,qBAAqB;AACvB,UAAI,UAAU,WAAW,YAAa;AACtC,gBAAU,UAAU;AACpB,gBAAU,gBAAgB;AAC1B;AAAA,IACF;AAEA,QAAI,CAAC,SAAU;AAEf,QAAI,YAAa;AAEjB,UAAM,WAAW,gBAAgB;AACjC,QAAI,oBAAoB,MAAM,SAAU;AAGxC,QAAI,QAAQ,kBAAkB;AAC9B,QAAI,CAAC,SAAS,MAAM,QAAQ,UAAU;AACpC,cAAQ,EAAE,KAAK,UAAU,IAAI,KAAK,IAAI,EAAE;AACxC,wBAAkB,MAAM,KAAK,MAAM,EAAE;AAAA,IACvC;AAEA,UAAM,YAAY,KAAK,IAAI,GAAG,MAAM,KAAK,kBAAkB,KAAK,IAAI,CAAC;AACrE,UAAM,QAAQ,WAAW,MAAM;AAE7B,UAAI,oBAAoB,MAAM,SAAU;AACxC,0BAAoB,QAAQ;AAC5B,gBAAU,gBAAgB;AAAA,IAC5B,GAAG,SAAS;AAEZ,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC,GAAG,CAAC,UAAU,aAAa,SAAS,CAAC;AAErC,SAAO;AACT;","names":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -132,10 +132,13 @@ import {
|
|
|
132
132
|
import { useBuyCreditsModal } from "./store/useBuyCreditsModal";
|
|
133
133
|
import { useCreditsDisabledModal } from "./store/useCreditsDisabledModal";
|
|
134
134
|
import { usePaidPlanRequiredModal } from "./store/usePaidPlanRequiredModal";
|
|
135
|
+
import { useHexaPromoModal } from "./store/useHexaPromoModal";
|
|
135
136
|
import { default as default2 } from "./components/modals/BuyCreditsModal";
|
|
136
137
|
import { default as default3 } from "./components/modals/CreditsDisabledModal";
|
|
137
138
|
import { default as default4 } from "./components/modals/PaidPlanRequiredModal";
|
|
138
|
-
import { default as default5 } from "./components/modals/
|
|
139
|
+
import { default as default5 } from "./components/modals/HexaPromoModal";
|
|
140
|
+
import { default as default6 } from "./components/modals/HexaPromoModalGate";
|
|
141
|
+
import { default as default7 } from "./components/modals/cards/AddCardModal";
|
|
139
142
|
import { DeleteCardModal } from "./components/modals/cards/DeleteCardModal";
|
|
140
143
|
import { CannotDeleteCardModal } from "./components/modals/cards/CannotDeleteCardModal";
|
|
141
144
|
import {
|
|
@@ -169,13 +172,13 @@ import { AppNavBar } from "./components/layouts/AppNavBar";
|
|
|
169
172
|
import { AppMobileNavBar } from "./components/layouts/AppMobileNavBar";
|
|
170
173
|
import { SideBarNavigation } from "./components/layouts/SideBarNavigation";
|
|
171
174
|
import { MdSideBarNavigation } from "./components/layouts/MdSideBarNavigation";
|
|
172
|
-
import { default as
|
|
175
|
+
import { default as default8 } from "./components/widgets/notifications/NotificationCard";
|
|
173
176
|
import { NotificationsPopover } from "./components/layouts/NotificationsPopover";
|
|
174
177
|
import { NotificationPageContent } from "./components/pages/notifications/Notifications";
|
|
175
178
|
import { NotFoundPage } from "./components/pages/NotFoundPage";
|
|
176
179
|
import { UsersSelectorPopover } from "./components/layouts/UsersSelectorPopover";
|
|
177
180
|
import { ProfilePopover } from "./components/layouts/ProfilePopover";
|
|
178
|
-
import { default as
|
|
181
|
+
import { default as default9 } from "./components/layouts/WhitelabelCodes";
|
|
179
182
|
import { NavBarItem } from "./components/layouts/NavBarItem";
|
|
180
183
|
import { AppNavigation } from "./components/navigation/AppNavigation";
|
|
181
184
|
import { CancelledSubscriptionBanner } from "./components/navigation/CancelledSubscriptionBanner";
|
|
@@ -189,10 +192,10 @@ import {
|
|
|
189
192
|
useWlQueryKey,
|
|
190
193
|
useWlId
|
|
191
194
|
} from "./hooks/useAuthQueryKey";
|
|
192
|
-
import { default as
|
|
195
|
+
import { default as default10 } from "./hooks/copy-to-clipboard.hook";
|
|
193
196
|
import { Button, buttonVariants } from "./components/ui/buttons/Button";
|
|
194
197
|
import { CopyButton } from "./components/ui/buttons/CopyButton";
|
|
195
|
-
import { default as
|
|
198
|
+
import { default as default11 } from "./components/ui/buttons/CancelButton";
|
|
196
199
|
import {
|
|
197
200
|
Accordion,
|
|
198
201
|
AccordionItem,
|
|
@@ -237,8 +240,8 @@ import {
|
|
|
237
240
|
TabsContent
|
|
238
241
|
} from "./components/ui/data-display/Tabs";
|
|
239
242
|
import { UserAvatar } from "./components/ui/data-display/UserAvatar";
|
|
240
|
-
import { default as
|
|
241
|
-
import { default as
|
|
243
|
+
import { default as default12 } from "./components/ui/feedback/CircularProgress";
|
|
244
|
+
import { default as default13 } from "./components/ui/feedback/DefaultCircularProgress";
|
|
242
245
|
import { Progress } from "./components/ui/feedback/Progress";
|
|
243
246
|
import { LoadingOverlay } from "./components/ui/feedback/LoadingOverlay";
|
|
244
247
|
import { useBrandLoadingIcon } from "./hooks/useBrandLoadingIcon";
|
|
@@ -332,9 +335,9 @@ import { useMdSidebarStore } from "./store/useMdSidebarStore";
|
|
|
332
335
|
import { useDesktopSidebarStore } from "./store/useDesktopSidebarStore";
|
|
333
336
|
import { useModalManager } from "./store/useModalManager";
|
|
334
337
|
import { AccountSectionType } from "./enums/AccountSectionType";
|
|
335
|
-
import { default as
|
|
336
|
-
import { default as
|
|
337
|
-
import { default as
|
|
338
|
+
import { default as default14 } from "./hooks/usePasswordVisibility";
|
|
339
|
+
import { default as default15 } from "./hooks/useCountdownTimer";
|
|
340
|
+
import { default as default16 } from "./hooks/useIsMobile";
|
|
338
341
|
import { useDebounce } from "./hooks/useDebounce";
|
|
339
342
|
import { useDebouncedEffect } from "./hooks/useDebouncedEffect";
|
|
340
343
|
import { useDebounceState } from "./hooks/useDebounceState";
|
|
@@ -362,8 +365,8 @@ import { copyToClipboard, readFromClipboard } from "./utils/browser/clipboard";
|
|
|
362
365
|
import { FormField } from "./components/ui/form/FormField";
|
|
363
366
|
import { SelectField } from "./components/ui/form/SelectField";
|
|
364
367
|
import { ComboboxField } from "./components/ui/form/ComboboxField";
|
|
365
|
-
import { default as
|
|
366
|
-
import { default as
|
|
368
|
+
import { default as default17 } from "./components/ui/form/PhoneInput";
|
|
369
|
+
import { default as default18 } from "./components/ui/form/SwitchOptionFieldWithIcon";
|
|
367
370
|
import { TextAreaField } from "./components/ui/form/TextAreaField";
|
|
368
371
|
import {
|
|
369
372
|
useCurrentAccount,
|
|
@@ -380,13 +383,13 @@ import {
|
|
|
380
383
|
} from "./modules/accounts/hooks/useAccountManagement";
|
|
381
384
|
import { useViaCep } from "./modules/accounts/hooks/useViaCep";
|
|
382
385
|
import { useAccountToken } from "./modules/accounts/hooks/use-account-token.hook";
|
|
383
|
-
import { default as
|
|
386
|
+
import { default as default19 } from "./components/account/AccountModals";
|
|
384
387
|
import { useAccountModals } from "./store/useAccountModals";
|
|
385
388
|
import { ModalManager } from "./components/modals/ModalManager";
|
|
386
389
|
import { Modals } from "./components/modals/Modals";
|
|
387
|
-
import { default as
|
|
388
|
-
import { default as
|
|
389
|
-
import { default as
|
|
390
|
+
import { default as default20 } from "./components/account/TwoFactorAuthModal";
|
|
391
|
+
import { default as default21 } from "./components/account/DisableTwoFactorAuthModal";
|
|
392
|
+
import { default as default22 } from "./components/account/ConfirmGlobalPreferencesModal";
|
|
390
393
|
import { MyProfileSection } from "./components/account/sections/MyProfileSection";
|
|
391
394
|
import { PreferencesSection } from "./components/account/sections/PreferencesSection";
|
|
392
395
|
import { SecuritySection } from "./components/account/sections/SecuritySection";
|
|
@@ -434,9 +437,9 @@ export {
|
|
|
434
437
|
AccordionContent,
|
|
435
438
|
AccordionItem,
|
|
436
439
|
AccordionTrigger,
|
|
437
|
-
|
|
440
|
+
default19 as AccountModals,
|
|
438
441
|
AccountSectionType,
|
|
439
|
-
|
|
442
|
+
default7 as AddCardModal,
|
|
440
443
|
AppMobileNavBar,
|
|
441
444
|
AppNavBar,
|
|
442
445
|
AppNavigation,
|
|
@@ -451,7 +454,7 @@ export {
|
|
|
451
454
|
CURRENCY_OPTIONS,
|
|
452
455
|
Calendar,
|
|
453
456
|
CalendarDayButton,
|
|
454
|
-
|
|
457
|
+
default11 as CancelButton,
|
|
455
458
|
CancelledSubscriptionBanner,
|
|
456
459
|
CannotDeleteCardModal,
|
|
457
460
|
Card,
|
|
@@ -469,7 +472,7 @@ export {
|
|
|
469
472
|
ChangePhoneModal,
|
|
470
473
|
ChargeSchema,
|
|
471
474
|
Checkbox,
|
|
472
|
-
|
|
475
|
+
default12 as CircularProgress,
|
|
473
476
|
ClarityEmbed,
|
|
474
477
|
ComboboxField,
|
|
475
478
|
Command,
|
|
@@ -481,14 +484,14 @@ export {
|
|
|
481
484
|
CommandList,
|
|
482
485
|
CommandSeparator,
|
|
483
486
|
CommandShortcut,
|
|
484
|
-
|
|
487
|
+
default22 as ConfirmGlobalPreferencesModal,
|
|
485
488
|
CopyButton,
|
|
486
489
|
CreateCardRequestSchema,
|
|
487
490
|
default3 as CreditsDisabledModal,
|
|
488
491
|
CrispEmbed,
|
|
489
492
|
DatePicker,
|
|
490
493
|
DateRangePicker,
|
|
491
|
-
|
|
494
|
+
default13 as DefaultCircularProgress,
|
|
492
495
|
DeleteCardModal,
|
|
493
496
|
Dialog,
|
|
494
497
|
DialogClose,
|
|
@@ -500,13 +503,15 @@ export {
|
|
|
500
503
|
DialogPortal,
|
|
501
504
|
DialogTitle,
|
|
502
505
|
DialogTrigger,
|
|
503
|
-
|
|
506
|
+
default21 as DisableTwoFactorAuthModal,
|
|
504
507
|
EmbedWidgets,
|
|
505
508
|
FindCardsParamsSchema,
|
|
506
509
|
FindChargesParamsSchema,
|
|
507
510
|
FormField,
|
|
508
511
|
FrillEmbed,
|
|
509
512
|
GENDER_OPTIONS,
|
|
513
|
+
default5 as HexaPromoModal,
|
|
514
|
+
default6 as HexaPromoModalGate,
|
|
510
515
|
INFINITE_PROJECTS_QUERY_KEY,
|
|
511
516
|
ImageCropModal,
|
|
512
517
|
ImageTooSmallModal,
|
|
@@ -539,7 +544,7 @@ export {
|
|
|
539
544
|
NavBarItem,
|
|
540
545
|
NavigationProvider,
|
|
541
546
|
NotFoundPage,
|
|
542
|
-
|
|
547
|
+
default8 as NotificationCard,
|
|
543
548
|
NotificationPageContent,
|
|
544
549
|
NotificationsPopover,
|
|
545
550
|
OverdueInvoiceBanner,
|
|
@@ -558,7 +563,7 @@ export {
|
|
|
558
563
|
PayChargeInputSchema,
|
|
559
564
|
CardSchema as PaymentCardSchema,
|
|
560
565
|
PaymentInfoCard,
|
|
561
|
-
|
|
566
|
+
default17 as PhoneInput,
|
|
562
567
|
PixPendingDataSchema,
|
|
563
568
|
PlanItemSchema,
|
|
564
569
|
PlanSchema,
|
|
@@ -606,7 +611,7 @@ export {
|
|
|
606
611
|
SubscriptionPendingPixResponseSchema,
|
|
607
612
|
SubscriptionSchema,
|
|
608
613
|
Switch,
|
|
609
|
-
|
|
614
|
+
default18 as SwitchOptionFieldWithIcon,
|
|
610
615
|
TIME_FORMAT_OPTIONS,
|
|
611
616
|
Table,
|
|
612
617
|
TableBody,
|
|
@@ -628,12 +633,12 @@ export {
|
|
|
628
633
|
TooltipProvider,
|
|
629
634
|
TooltipTrigger,
|
|
630
635
|
TrialBanner,
|
|
631
|
-
|
|
636
|
+
default20 as TwoFactorAuthModal,
|
|
632
637
|
USER_QUERY_KEY,
|
|
633
638
|
UpcomingInvoiceBanner,
|
|
634
639
|
UserAvatar,
|
|
635
640
|
UsersSelectorPopover,
|
|
636
|
-
|
|
641
|
+
default9 as WhitelabelCodes,
|
|
637
642
|
badgeVariants,
|
|
638
643
|
base64ToFile,
|
|
639
644
|
buildCardFormSchema,
|
|
@@ -704,9 +709,9 @@ export {
|
|
|
704
709
|
useChargeAction,
|
|
705
710
|
useChargeById,
|
|
706
711
|
useCharges,
|
|
707
|
-
|
|
712
|
+
default10 as useCopyToClipboard,
|
|
708
713
|
useCountPages,
|
|
709
|
-
|
|
714
|
+
default15 as useCountdownTimer,
|
|
710
715
|
useCreateCard,
|
|
711
716
|
useCreateProject,
|
|
712
717
|
useCreateSetupIntent,
|
|
@@ -724,11 +729,12 @@ export {
|
|
|
724
729
|
useDesktopSidebarStore,
|
|
725
730
|
useHandleDeleteCard,
|
|
726
731
|
useHasPlanAddon,
|
|
732
|
+
useHexaPromoModal,
|
|
727
733
|
useIaCredits,
|
|
728
734
|
useImageUpload,
|
|
729
735
|
useInfiniteProjects,
|
|
730
736
|
useInvalidateUser,
|
|
731
|
-
|
|
737
|
+
default16 as useIsMobile,
|
|
732
738
|
useListAllAccountUsers,
|
|
733
739
|
useListAvailableUsers,
|
|
734
740
|
useListProjectUsers,
|
|
@@ -739,7 +745,7 @@ export {
|
|
|
739
745
|
useNavigationFallback,
|
|
740
746
|
usePaidPlanRequiredModal,
|
|
741
747
|
useParams,
|
|
742
|
-
|
|
748
|
+
default14 as usePasswordVisibility,
|
|
743
749
|
usePathname,
|
|
744
750
|
usePlanById,
|
|
745
751
|
usePlans,
|