@greatapps/common 1.1.260 → 1.1.262

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/dist/components/account/ConfigurationsMyAccountModal.mjs +1 -1
  2. package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
  3. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
  4. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
  5. package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
  6. package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
  7. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
  8. package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -1
  9. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
  10. package/dist/components/account/hooks/useConfigurationsModal.mjs +3 -2
  11. package/dist/components/account/hooks/useConfigurationsModal.mjs.map +1 -1
  12. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
  13. package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
  14. package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
  15. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
  16. package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
  17. package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
  18. package/dist/components/account/sections/SecuritySection.mjs.map +1 -1
  19. package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
  20. package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
  21. package/dist/components/layouts/AppMobileNavBar.mjs +1 -1
  22. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  23. package/dist/components/layouts/AppNavBar.mjs.map +1 -1
  24. package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -1
  25. package/dist/components/layouts/NavBar.mjs.map +1 -1
  26. package/dist/components/layouts/NotificationsPopover.mjs.map +1 -1
  27. package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
  28. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  29. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  30. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  31. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  32. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  33. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  34. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  35. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  36. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  37. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  38. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  39. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  40. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  41. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  42. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  43. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  44. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  45. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  46. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  47. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  48. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  49. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  50. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  51. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  52. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  53. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  54. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  55. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  56. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  57. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  58. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  59. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  60. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  61. package/dist/components/ui/form/FormField.mjs.map +1 -1
  62. package/dist/components/ui/form/Input.mjs.map +1 -1
  63. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  64. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  65. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  66. package/dist/components/ui/form/Select.mjs +1 -1
  67. package/dist/components/ui/form/Select.mjs.map +1 -1
  68. package/dist/components/ui/form/Switch.mjs.map +1 -1
  69. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  70. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  71. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  72. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  73. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  74. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  75. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  76. package/dist/index.mjs.map +1 -1
  77. package/dist/middleware.mjs.map +1 -1
  78. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  79. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  80. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  81. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  82. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  83. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  84. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  85. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  86. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  87. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  88. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  89. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  90. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  91. package/dist/modules/cards/actions/list-cards.action.mjs.map +1 -1
  92. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  93. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  94. package/dist/modules/cards/types.mjs.map +1 -1
  95. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  96. package/dist/modules/plans/actions/find-plan-by-id.action.mjs.map +1 -1
  97. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  98. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  99. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  100. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  101. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  102. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  103. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  104. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  105. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  106. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  107. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  108. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  109. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  110. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  111. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  112. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  113. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  114. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  115. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  116. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  117. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  118. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  119. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  120. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  121. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  122. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  123. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  124. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  125. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  126. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  127. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  128. package/dist/modules/whitelabel/actions/find-whitelabel-styles.action.mjs.map +1 -1
  129. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  130. package/dist/modules/whitelabel/actions/revalidate-whitelabel-styles.action.mjs.map +1 -1
  131. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  132. package/dist/modules/whitelabel/services/whitelabel-styles.service.mjs.map +1 -1
  133. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  134. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  135. package/dist/utils/countries.mjs.map +1 -1
  136. package/dist/utils/safeServerAction.mjs.map +1 -1
  137. package/dist/utils/withAction.mjs.map +1 -1
  138. package/package.json +89 -89
  139. package/src/components/account/ConfigurationsMyAccountModal.tsx +150 -150
  140. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  141. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
  142. package/src/components/account/DeleteAccountModal.tsx +130 -130
  143. package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
  144. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  145. package/src/components/account/TwoFactorAuthModal.tsx +223 -223
  146. package/src/components/account/hooks/useChangePhoneForm.tsx +81 -81
  147. package/src/components/account/hooks/useConfigurationsModal.ts +11 -6
  148. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  149. package/src/components/account/sections/ChangeEmailModal.tsx +225 -225
  150. package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
  151. package/src/components/account/sections/ChangePhoneModal.tsx +231 -231
  152. package/src/components/account/sections/MyProfileSection.tsx +327 -327
  153. package/src/components/account/sections/PreferencesSection.tsx +273 -273
  154. package/src/components/account/sections/SecuritySection.tsx +160 -160
  155. package/src/components/embeds/CrispEmbed.tsx +101 -101
  156. package/src/components/embeds/FrillEmbed.tsx +119 -119
  157. package/src/components/layouts/AppMobileNavBar.tsx +118 -118
  158. package/src/components/layouts/AppNavBar.tsx +51 -51
  159. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  160. package/src/components/layouts/NavBar.tsx +120 -120
  161. package/src/components/layouts/NotificationsPopover.tsx +115 -115
  162. package/src/components/layouts/ProfilePopover.tsx +164 -164
  163. package/src/components/layouts/UsersSelectorPopover.tsx +238 -238
  164. package/src/components/modals/BuyCreditsModal.tsx +301 -301
  165. package/src/components/navigation/CancelledSubscriptionBanner.tsx +69 -69
  166. package/src/components/navigation/NavItemsContext.ts +20 -20
  167. package/src/components/navigation/ProjectSelectorPopover.tsx +157 -157
  168. package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
  169. package/src/components/navigation/subcomponents/ProjectSelector.tsx +156 -156
  170. package/src/components/pages/notifications/Notifications.tsx +160 -160
  171. package/src/components/ui/buttons/Button.tsx +57 -57
  172. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  173. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  174. package/src/components/ui/data-display/Accordion.tsx +81 -81
  175. package/src/components/ui/data-display/Badge.tsx +47 -47
  176. package/src/components/ui/data-display/Card.tsx +93 -93
  177. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  178. package/src/components/ui/data-display/CardItem.tsx +75 -75
  179. package/src/components/ui/data-display/Pagination.tsx +126 -126
  180. package/src/components/ui/data-display/PaymentInfoCard.tsx +186 -186
  181. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  182. package/src/components/ui/data-display/Separator.tsx +29 -29
  183. package/src/components/ui/data-display/Table.tsx +117 -117
  184. package/src/components/ui/data-display/Tabs.tsx +67 -67
  185. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  186. package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
  187. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  188. package/src/components/ui/feedback/Progress.tsx +40 -40
  189. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  190. package/src/components/ui/feedback/Toast.tsx +101 -101
  191. package/src/components/ui/form/Calendar.tsx +228 -228
  192. package/src/components/ui/form/Checkbox.tsx +31 -31
  193. package/src/components/ui/form/ComboboxField.tsx +154 -154
  194. package/src/components/ui/form/DatePicker.tsx +97 -97
  195. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  196. package/src/components/ui/form/FormField.tsx +131 -131
  197. package/src/components/ui/form/Input.tsx +20 -20
  198. package/src/components/ui/form/InputOtp.tsx +80 -80
  199. package/src/components/ui/form/PhoneInput.tsx +205 -205
  200. package/src/components/ui/form/RadioGroup.tsx +45 -45
  201. package/src/components/ui/form/Select.tsx +200 -200
  202. package/src/components/ui/form/Switch.tsx +32 -32
  203. package/src/components/ui/form/Textarea.tsx +19 -19
  204. package/src/components/ui/overlay/Command.tsx +185 -185
  205. package/src/components/ui/overlay/Dialog.tsx +151 -151
  206. package/src/components/ui/overlay/Popover.tsx +49 -49
  207. package/src/components/ui/overlay/Sheet.tsx +166 -166
  208. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  209. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  210. package/src/index.ts +376 -376
  211. package/src/middleware.ts +4 -4
  212. package/src/modules/accounts/actions/account-management.action.ts +91 -91
  213. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  214. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  215. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  216. package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
  217. package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
  218. package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
  219. package/src/modules/accounts/hooks/useTimezones.ts +15 -15
  220. package/src/modules/accounts/services/account.service.ts +236 -236
  221. package/src/modules/accounts/types.ts +214 -214
  222. package/src/modules/auth/actions/validate-session.action.ts +56 -56
  223. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  224. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  225. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  226. package/src/modules/cards/actions/list-cards.action.ts +8 -8
  227. package/src/modules/cards/hooks/cards.hook.ts +14 -14
  228. package/src/modules/cards/services/cards.service.ts +32 -32
  229. package/src/modules/cards/types.ts +32 -32
  230. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  231. package/src/modules/plans/actions/find-plan-by-id.action.ts +8 -8
  232. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +17 -17
  233. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +13 -13
  234. package/src/modules/plans/services/plans.service.ts +36 -36
  235. package/src/modules/plans/types/plan.type.ts +21 -21
  236. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  237. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  238. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  239. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  240. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  241. package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
  242. package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
  243. package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
  244. package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
  245. package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
  246. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  247. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  248. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +26 -26
  249. package/src/modules/subscriptions/constants/query-keys.constants.ts +1 -1
  250. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  251. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
  252. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +16 -16
  253. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +25 -25
  254. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  255. package/src/modules/subscriptions/types/calculate-subscription.type.ts +75 -75
  256. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  257. package/src/modules/subscriptions/utils/periodicity.ts +52 -52
  258. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  259. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  260. package/src/modules/users/action/list-messages.action.ts +12 -12
  261. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  262. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  263. package/src/modules/users/hooks/messages.hook.ts +60 -60
  264. package/src/modules/whitelabel/actions/find-whitelabel-styles.action.ts +14 -14
  265. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  266. package/src/modules/whitelabel/actions/revalidate-whitelabel-styles.action.ts +10 -10
  267. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  268. package/src/modules/whitelabel/schema.ts +83 -83
  269. package/src/modules/whitelabel/services/whitelabel-styles.service.ts +129 -129
  270. package/src/modules/whitelabel/styles-schema.ts +37 -37
  271. package/src/providers/whitelabel.provider.tsx +54 -54
  272. package/src/store/useBuyCreditsModal.ts +25 -25
  273. package/src/utils/countries.ts +224 -224
  274. package/src/utils/safeServerAction.ts +21 -21
  275. package/src/utils/withAction.ts +13 -13
@@ -1,49 +1,49 @@
1
- 'use client';
2
-
3
- import { IconAlertTriangle } from '@tabler/icons-react';
4
- import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
5
- import { Button } from '../ui/buttons/Button';
6
- import { useAccountModals } from '../../store/useAccountModals';
7
-
8
- export default function IsntPossibleDeleteAccountModal() {
9
- const { activeModal, close, config } = useAccountModals();
10
- const { onGoToSubscription } = config;
11
- const open = activeModal === 'isntPossibleDelete';
12
-
13
- return (
14
- <Dialog open={open} onOpenChange={close}>
15
- <DialogContent className="max-w-[calc(100%-2rem)]! w-full rounded-lg border sm:max-w-[400px]! lg:max-w-[470px]! lg:top-[50%]! lg:left-[50%]! lg:right-auto! lg:bottom-auto! lg:translate-x-[-50%]! lg:translate-y-[-50%]!">
16
- <div className="flex flex-col gap-5">
17
- <div className="flex items-center justify-center w-fit bg-red-50 rounded-lg p-2.5">
18
- <IconAlertTriangle size={20} className="text-red-500" />
19
- </div>
20
- <DialogHeader className="p-0 gap-2">
21
- <DialogTitle className="paragraph-medium-semibold text-gray-950">
22
- Não é possível excluir a conta
23
- </DialogTitle>
24
- <DialogDescription className="paragraph-small-regular text-gray-600">
25
- Você tem uma assinatura ativa. Para excluir sua conta,{' '}
26
- <span className="font-semibold text-gray-950">primeiro cancele a assinatura</span> na
27
- página Assinatura e depois tente novamente.
28
- </DialogDescription>
29
- </DialogHeader>
30
- </div>
31
-
32
- <div className="h-px bg-gray-200 -mx-6" />
33
-
34
- <div className="flex flex-row items-center gap-2">
35
- <Button className="h-10 flex-1" onClick={close}>
36
- Ok, entendi
37
- </Button>
38
- <Button
39
- variant="secondary"
40
- className="h-10 flex-1"
41
- onClick={onGoToSubscription ?? close}
42
- >
43
- Ir para assinatura
44
- </Button>
45
- </div>
46
- </DialogContent>
47
- </Dialog>
48
- );
49
- }
1
+ 'use client';
2
+
3
+ import { IconAlertTriangle } from '@tabler/icons-react';
4
+ import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
5
+ import { Button } from '../ui/buttons/Button';
6
+ import { useAccountModals } from '../../store/useAccountModals';
7
+
8
+ export default function IsntPossibleDeleteAccountModal() {
9
+ const { activeModal, close, config } = useAccountModals();
10
+ const { onGoToSubscription } = config;
11
+ const open = activeModal === 'isntPossibleDelete';
12
+
13
+ return (
14
+ <Dialog open={open} onOpenChange={close}>
15
+ <DialogContent className="max-w-[calc(100%-2rem)]! w-full rounded-lg border sm:max-w-[400px]! lg:max-w-[470px]! lg:top-[50%]! lg:left-[50%]! lg:right-auto! lg:bottom-auto! lg:translate-x-[-50%]! lg:translate-y-[-50%]!">
16
+ <div className="flex flex-col gap-5">
17
+ <div className="flex items-center justify-center w-fit bg-red-50 rounded-lg p-2.5">
18
+ <IconAlertTriangle size={20} className="text-red-500" />
19
+ </div>
20
+ <DialogHeader className="p-0 gap-2">
21
+ <DialogTitle className="paragraph-medium-semibold text-gray-950">
22
+ Não é possível excluir a conta
23
+ </DialogTitle>
24
+ <DialogDescription className="paragraph-small-regular text-gray-600">
25
+ Você tem uma assinatura ativa. Para excluir sua conta,{' '}
26
+ <span className="font-semibold text-gray-950">primeiro cancele a assinatura</span> na
27
+ página Assinatura e depois tente novamente.
28
+ </DialogDescription>
29
+ </DialogHeader>
30
+ </div>
31
+
32
+ <div className="h-px bg-gray-200 -mx-6" />
33
+
34
+ <div className="flex flex-row items-center gap-2">
35
+ <Button className="h-10 flex-1" onClick={close}>
36
+ Ok, entendi
37
+ </Button>
38
+ <Button
39
+ variant="secondary"
40
+ className="h-10 flex-1"
41
+ onClick={onGoToSubscription ?? close}
42
+ >
43
+ Ir para assinatura
44
+ </Button>
45
+ </div>
46
+ </DialogContent>
47
+ </Dialog>
48
+ );
49
+ }
@@ -1,223 +1,223 @@
1
- 'use client';
2
-
3
- import { IconArrowLeft, IconX, IconCopy, IconRefresh } from '@tabler/icons-react';
4
- import { Button } from '../ui/buttons/Button';
5
- import { Dialog, DialogContent, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
6
- import { Separator } from '../ui/data-display/Separator';
7
- import { InputOTP, InputOTPGroup, InputOTPSlot } from '../ui/form/InputOtp';
8
- import useTwoFactorAuthForm from './hooks/useTwoFactorAuthForm';
9
-
10
- interface TwoFactorAuthModalProps {
11
- open: boolean;
12
- onClose: () => void;
13
- onSuccess?: () => void;
14
- }
15
-
16
- export default function TwoFactorAuthModal({ open, onClose, onSuccess }: TwoFactorAuthModalProps) {
17
- const {
18
- code,
19
- setCode,
20
- isCodeComplete,
21
- isGenerating,
22
- isConfirming,
23
- generateFailed,
24
- retryGenerate,
25
- qrcode,
26
- backupCodes,
27
- step,
28
- handleSubmit,
29
- handleFinalize,
30
- handleCopyCodes,
31
- resetForm,
32
- } = useTwoFactorAuthForm({ onSuccess, open });
33
-
34
- const handleClose = () => {
35
- resetForm();
36
- onClose();
37
- };
38
-
39
- if (step === 'recovery') {
40
- return (
41
- <Dialog open={open} onOpenChange={handleClose}>
42
- <DialogContent
43
- showCloseButton={false}
44
- overlayClassName="z-[1010]"
45
- className="z-[1011] flex flex-col p-0 gap-0 max-w-full sm:max-w-full border-0 rounded-t-2xl rounded-b-none h-[100dvh] top-0 bottom-0 left-0 right-0 translate-x-0 translate-y-0 lg:max-w-[470px] lg:h-auto lg:rounded-lg lg:border lg:top-[50%] lg:left-[50%] lg:right-auto lg:bottom-auto lg:translate-x-[-50%] lg:translate-y-[-50%]"
46
- >
47
- <DialogHeader className="sr-only">
48
- <DialogTitle>Códigos de segurança</DialogTitle>
49
- </DialogHeader>
50
- <div className="flex items-center justify-center px-4 py-3 relative border-b border-gray-200 lg:border-b-0">
51
- <span className="paragraph-medium-semibold text-gray-950 text-center">
52
- Códigos de segurança
53
- </span>
54
- <Button
55
- type="button"
56
- variant="ghost"
57
- className="size-8! p-0 absolute right-4"
58
- onClick={handleClose}
59
- >
60
- <IconX size={18} />
61
- </Button>
62
- </div>
63
-
64
- <div className="flex flex-col gap-5 lg:gap-6 px-4 lg:px-5 py-5 lg:py-6 flex-1 lg:flex-none">
65
- <div className="flex flex-col gap-2">
66
- <h3 className="paragraph-medium-semibold text-gray-950 max-w-[269px]">
67
- Salve estes códigos de recuperação de emergência
68
- </h3>
69
- <div className="paragraph-small-regular text-gray-600">
70
- <p>
71
- Se você perder acesso ao seu telefone, não será possível fazer login em sua conta
72
- sem um código de dois fatores.
73
- </p>
74
- <br />
75
- <p>Imprima, copie ou escreva em um local seguro os códigos abaixo.</p>
76
- </div>
77
- </div>
78
-
79
- <div className="bg-gray-50 rounded-lg p-4 flex flex-col gap-4">
80
- <div className="paragraph-small-medium text-gray-950 whitespace-nowrap">
81
- {backupCodes.map((backupCode, i) => (
82
- <p key={i}>{backupCode}</p>
83
- ))}
84
- </div>
85
- <Button
86
- type="button"
87
- variant="secondary"
88
- className="h-8! w-fit"
89
- onClick={handleCopyCodes}
90
- >
91
- <IconCopy size={16} />
92
- Copiar códigos
93
- </Button>
94
- </div>
95
- </div>
96
-
97
- <div className="flex items-center p-4 lg:p-5 border-t border-gray-200 justify-between mt-auto lg:mt-0">
98
- <Button variant="secondary" className="h-10!" type="button" onClick={handleClose}>
99
- Cancelar
100
- </Button>
101
- <Button className="h-10!" type="button" onClick={handleFinalize}>
102
- Finalizar
103
- </Button>
104
- </div>
105
- </DialogContent>
106
- </Dialog>
107
- );
108
- }
109
-
110
- return (
111
- <Dialog open={open} onOpenChange={handleClose}>
112
- <DialogContent
113
- showCloseButton={false}
114
- overlayClassName="z-[1010]"
115
- className="z-[1011] flex flex-col p-0 gap-0 max-w-full sm:max-w-full border-0 rounded-t-2xl rounded-b-none h-[100dvh] top-0 bottom-0 left-0 right-0 translate-x-0 translate-y-0 lg:max-w-[470px] lg:h-auto lg:max-h-[90vh] lg:rounded-lg lg:border lg:top-[50%] lg:left-[50%] lg:right-auto lg:bottom-auto lg:translate-x-[-50%] lg:translate-y-[-50%]"
116
- >
117
- <DialogHeader className="sr-only">
118
- <DialogTitle>Autenticação de dois fatores</DialogTitle>
119
- </DialogHeader>
120
- <div className="shrink-0 flex items-center justify-center px-4 py-3 relative border-b border-gray-200 lg:border-b-0">
121
- <Button
122
- type="button"
123
- variant="ghost"
124
- className="size-8! p-0 absolute left-4"
125
- onClick={handleClose}
126
- >
127
- <IconArrowLeft size={20} />
128
- </Button>
129
- <span className="paragraph-medium-semibold text-gray-950 text-center">
130
- Autenticação de dois fatores
131
- </span>
132
- <Button
133
- type="button"
134
- variant="ghost"
135
- className="size-8! p-0 absolute right-4"
136
- onClick={handleClose}
137
- >
138
- <IconX size={18} />
139
- </Button>
140
- </div>
141
-
142
- <form
143
- className="flex-1 min-h-0 flex flex-col"
144
- onSubmit={(e) => {
145
- e.preventDefault();
146
- if (isCodeComplete) handleSubmit();
147
- }}
148
- >
149
- <div className="flex-1 min-h-0 overflow-y-auto overscroll-contain lg:overflow-visible">
150
- <div className="flex flex-col items-center gap-4 lg:gap-8 px-4 lg:px-5 py-4 lg:py-6 pb-60 lg:pb-6">
151
- <p className="paragraph-small-regular text-gray-950 text-center max-w-full lg:max-w-[412px]">
152
- Instale um aplicativo autenticador no seu celular (ex.:{' '}
153
- <a
154
- href="https://support.google.com/accounts/answer/1066447"
155
- target="_blank"
156
- rel="noopener noreferrer"
157
- className="paragraph-small-medium underline"
158
- >
159
- Google Authenticator
160
- </a>
161
- ), escaneie o QR Code ao lado ou copie a chave no aplicativo e, em seguida, digite o
162
- código de 6 dígitos gerado para continuar.
163
- </p>
164
-
165
- <div className="border border-gray-200 rounded-lg overflow-hidden p-2 lg:p-3 flex items-center justify-center w-[136px] h-[136px] lg:w-[203px] lg:h-[203px]">
166
- {generateFailed ? (
167
- <button
168
- type="button"
169
- onClick={() => retryGenerate()}
170
- className="flex flex-col items-center gap-1.5 text-center"
171
- >
172
- <IconRefresh size={20} className="text-gray-400" />
173
- <span className="paragraph-xsmall-medium text-gray-500">Tentar novamente</span>
174
- </button>
175
- ) : isGenerating || !qrcode ? (
176
- <div className="skeleton w-full h-full rounded" />
177
- ) : (
178
- // eslint-disable-next-line @next/next/no-img-element
179
- <img
180
- src={qrcode}
181
- alt="QR Code para autenticação de dois fatores"
182
- className="w-full h-full"
183
- />
184
- )}
185
- </div>
186
-
187
- <div className="flex items-center gap-3 w-full">
188
- <Separator className="flex-1" />
189
- <span className="paragraph-xsmall-medium text-gray-500 opacity-80 whitespace-nowrap">
190
- Cole os 6 dígitos abaixo
191
- </span>
192
- <Separator className="flex-1" />
193
- </div>
194
-
195
- <div className="scroll-mt-20">
196
- <InputOTP maxLength={6} value={code} onChange={setCode}>
197
- <InputOTPGroup className="gap-2">
198
- {Array.from({ length: 6 }).map((_, i) => (
199
- <InputOTPSlot
200
- key={i}
201
- index={i}
202
- className="w-11! lg:w-12! h-13! lg:h-14! rounded-lg! text-lg border-gray-200"
203
- />
204
- ))}
205
- </InputOTPGroup>
206
- </InputOTP>
207
- </div>
208
- </div>
209
- </div>
210
-
211
- <div className="shrink-0 flex items-center p-4 lg:p-5 border-t border-gray-200 justify-between gap-2 bg-white">
212
- <Button variant="secondary" className="h-10!" type="button" onClick={handleClose}>
213
- Cancelar
214
- </Button>
215
- <Button type="submit" className="h-10!" disabled={!isCodeComplete || isConfirming}>
216
- {isConfirming ? 'Ativando...' : 'Ativar autenticação'}
217
- </Button>
218
- </div>
219
- </form>
220
- </DialogContent>
221
- </Dialog>
222
- );
223
- }
1
+ 'use client';
2
+
3
+ import { IconArrowLeft, IconX, IconCopy, IconRefresh } from '@tabler/icons-react';
4
+ import { Button } from '../ui/buttons/Button';
5
+ import { Dialog, DialogContent, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
6
+ import { Separator } from '../ui/data-display/Separator';
7
+ import { InputOTP, InputOTPGroup, InputOTPSlot } from '../ui/form/InputOtp';
8
+ import useTwoFactorAuthForm from './hooks/useTwoFactorAuthForm';
9
+
10
+ interface TwoFactorAuthModalProps {
11
+ open: boolean;
12
+ onClose: () => void;
13
+ onSuccess?: () => void;
14
+ }
15
+
16
+ export default function TwoFactorAuthModal({ open, onClose, onSuccess }: TwoFactorAuthModalProps) {
17
+ const {
18
+ code,
19
+ setCode,
20
+ isCodeComplete,
21
+ isGenerating,
22
+ isConfirming,
23
+ generateFailed,
24
+ retryGenerate,
25
+ qrcode,
26
+ backupCodes,
27
+ step,
28
+ handleSubmit,
29
+ handleFinalize,
30
+ handleCopyCodes,
31
+ resetForm,
32
+ } = useTwoFactorAuthForm({ onSuccess, open });
33
+
34
+ const handleClose = () => {
35
+ resetForm();
36
+ onClose();
37
+ };
38
+
39
+ if (step === 'recovery') {
40
+ return (
41
+ <Dialog open={open} onOpenChange={handleClose}>
42
+ <DialogContent
43
+ showCloseButton={false}
44
+ overlayClassName="z-[1010]"
45
+ className="z-[1011] flex flex-col p-0 gap-0 max-w-full sm:max-w-full border-0 rounded-t-2xl rounded-b-none h-[100dvh] top-0 bottom-0 left-0 right-0 translate-x-0 translate-y-0 lg:max-w-[470px] lg:h-auto lg:rounded-lg lg:border lg:top-[50%] lg:left-[50%] lg:right-auto lg:bottom-auto lg:translate-x-[-50%] lg:translate-y-[-50%]"
46
+ >
47
+ <DialogHeader className="sr-only">
48
+ <DialogTitle>Códigos de segurança</DialogTitle>
49
+ </DialogHeader>
50
+ <div className="flex items-center justify-center px-4 py-3 relative border-b border-gray-200 lg:border-b-0">
51
+ <span className="paragraph-medium-semibold text-gray-950 text-center">
52
+ Códigos de segurança
53
+ </span>
54
+ <Button
55
+ type="button"
56
+ variant="ghost"
57
+ className="size-8! p-0 absolute right-4"
58
+ onClick={handleClose}
59
+ >
60
+ <IconX size={18} />
61
+ </Button>
62
+ </div>
63
+
64
+ <div className="flex flex-col gap-5 lg:gap-6 px-4 lg:px-5 py-5 lg:py-6 flex-1 lg:flex-none">
65
+ <div className="flex flex-col gap-2">
66
+ <h3 className="paragraph-medium-semibold text-gray-950 max-w-[269px]">
67
+ Salve estes códigos de recuperação de emergência
68
+ </h3>
69
+ <div className="paragraph-small-regular text-gray-600">
70
+ <p>
71
+ Se você perder acesso ao seu telefone, não será possível fazer login em sua conta
72
+ sem um código de dois fatores.
73
+ </p>
74
+ <br />
75
+ <p>Imprima, copie ou escreva em um local seguro os códigos abaixo.</p>
76
+ </div>
77
+ </div>
78
+
79
+ <div className="bg-gray-50 rounded-lg p-4 flex flex-col gap-4">
80
+ <div className="paragraph-small-medium text-gray-950 whitespace-nowrap">
81
+ {backupCodes.map((backupCode, i) => (
82
+ <p key={i}>{backupCode}</p>
83
+ ))}
84
+ </div>
85
+ <Button
86
+ type="button"
87
+ variant="secondary"
88
+ className="h-8! w-fit"
89
+ onClick={handleCopyCodes}
90
+ >
91
+ <IconCopy size={16} />
92
+ Copiar códigos
93
+ </Button>
94
+ </div>
95
+ </div>
96
+
97
+ <div className="flex items-center p-4 lg:p-5 border-t border-gray-200 justify-between mt-auto lg:mt-0">
98
+ <Button variant="secondary" className="h-10!" type="button" onClick={handleClose}>
99
+ Cancelar
100
+ </Button>
101
+ <Button className="h-10!" type="button" onClick={handleFinalize}>
102
+ Finalizar
103
+ </Button>
104
+ </div>
105
+ </DialogContent>
106
+ </Dialog>
107
+ );
108
+ }
109
+
110
+ return (
111
+ <Dialog open={open} onOpenChange={handleClose}>
112
+ <DialogContent
113
+ showCloseButton={false}
114
+ overlayClassName="z-[1010]"
115
+ className="z-[1011] flex flex-col p-0 gap-0 max-w-full sm:max-w-full border-0 rounded-t-2xl rounded-b-none h-[100dvh] top-0 bottom-0 left-0 right-0 translate-x-0 translate-y-0 lg:max-w-[470px] lg:h-auto lg:max-h-[90vh] lg:rounded-lg lg:border lg:top-[50%] lg:left-[50%] lg:right-auto lg:bottom-auto lg:translate-x-[-50%] lg:translate-y-[-50%]"
116
+ >
117
+ <DialogHeader className="sr-only">
118
+ <DialogTitle>Autenticação de dois fatores</DialogTitle>
119
+ </DialogHeader>
120
+ <div className="shrink-0 flex items-center justify-center px-4 py-3 relative border-b border-gray-200 lg:border-b-0">
121
+ <Button
122
+ type="button"
123
+ variant="ghost"
124
+ className="size-8! p-0 absolute left-4"
125
+ onClick={handleClose}
126
+ >
127
+ <IconArrowLeft size={20} />
128
+ </Button>
129
+ <span className="paragraph-medium-semibold text-gray-950 text-center">
130
+ Autenticação de dois fatores
131
+ </span>
132
+ <Button
133
+ type="button"
134
+ variant="ghost"
135
+ className="size-8! p-0 absolute right-4"
136
+ onClick={handleClose}
137
+ >
138
+ <IconX size={18} />
139
+ </Button>
140
+ </div>
141
+
142
+ <form
143
+ className="flex-1 min-h-0 flex flex-col"
144
+ onSubmit={(e) => {
145
+ e.preventDefault();
146
+ if (isCodeComplete) handleSubmit();
147
+ }}
148
+ >
149
+ <div className="flex-1 min-h-0 overflow-y-auto overscroll-contain lg:overflow-visible">
150
+ <div className="flex flex-col items-center gap-4 lg:gap-8 px-4 lg:px-5 py-4 lg:py-6 pb-60 lg:pb-6">
151
+ <p className="paragraph-small-regular text-gray-950 text-center max-w-full lg:max-w-[412px]">
152
+ Instale um aplicativo autenticador no seu celular (ex.:{' '}
153
+ <a
154
+ href="https://support.google.com/accounts/answer/1066447"
155
+ target="_blank"
156
+ rel="noopener noreferrer"
157
+ className="paragraph-small-medium underline"
158
+ >
159
+ Google Authenticator
160
+ </a>
161
+ ), escaneie o QR Code ao lado ou copie a chave no aplicativo e, em seguida, digite o
162
+ código de 6 dígitos gerado para continuar.
163
+ </p>
164
+
165
+ <div className="border border-gray-200 rounded-lg overflow-hidden p-2 lg:p-3 flex items-center justify-center w-[136px] h-[136px] lg:w-[203px] lg:h-[203px]">
166
+ {generateFailed ? (
167
+ <button
168
+ type="button"
169
+ onClick={() => retryGenerate()}
170
+ className="flex flex-col items-center gap-1.5 text-center"
171
+ >
172
+ <IconRefresh size={20} className="text-gray-400" />
173
+ <span className="paragraph-xsmall-medium text-gray-500">Tentar novamente</span>
174
+ </button>
175
+ ) : isGenerating || !qrcode ? (
176
+ <div className="skeleton w-full h-full rounded" />
177
+ ) : (
178
+ // eslint-disable-next-line @next/next/no-img-element
179
+ <img
180
+ src={qrcode}
181
+ alt="QR Code para autenticação de dois fatores"
182
+ className="w-full h-full"
183
+ />
184
+ )}
185
+ </div>
186
+
187
+ <div className="flex items-center gap-3 w-full">
188
+ <Separator className="flex-1" />
189
+ <span className="paragraph-xsmall-medium text-gray-500 opacity-80 whitespace-nowrap">
190
+ Cole os 6 dígitos abaixo
191
+ </span>
192
+ <Separator className="flex-1" />
193
+ </div>
194
+
195
+ <div className="scroll-mt-20">
196
+ <InputOTP maxLength={6} value={code} onChange={setCode}>
197
+ <InputOTPGroup className="gap-2">
198
+ {Array.from({ length: 6 }).map((_, i) => (
199
+ <InputOTPSlot
200
+ key={i}
201
+ index={i}
202
+ className="w-11! lg:w-12! h-13! lg:h-14! rounded-lg! text-lg border-gray-200"
203
+ />
204
+ ))}
205
+ </InputOTPGroup>
206
+ </InputOTP>
207
+ </div>
208
+ </div>
209
+ </div>
210
+
211
+ <div className="shrink-0 flex items-center p-4 lg:p-5 border-t border-gray-200 justify-between gap-2 bg-white">
212
+ <Button variant="secondary" className="h-10!" type="button" onClick={handleClose}>
213
+ Cancelar
214
+ </Button>
215
+ <Button type="submit" className="h-10!" disabled={!isCodeComplete || isConfirming}>
216
+ {isConfirming ? 'Ativando...' : 'Ativar autenticação'}
217
+ </Button>
218
+ </div>
219
+ </form>
220
+ </DialogContent>
221
+ </Dialog>
222
+ );
223
+ }