@greatapps/common 1.1.255 → 1.1.257

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 (303) hide show
  1. package/dist/components/account/AccountModals.mjs.map +1 -1
  2. package/dist/components/account/ConfigurationsMyAccountModal.mjs +1 -1
  3. package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
  4. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
  5. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
  6. package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
  7. package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
  8. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
  9. package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -1
  10. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
  11. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
  12. package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
  13. package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
  14. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
  15. package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
  16. package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
  17. package/dist/components/account/sections/SecuritySection.mjs.map +1 -1
  18. package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
  19. package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
  20. package/dist/components/handlers/SearchParamsHandler.mjs.map +1 -1
  21. package/dist/components/layouts/AppMobileNavBar.mjs +3 -2
  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/modals/ModalManager.mjs.map +1 -1
  31. package/dist/components/modals/Modals.mjs.map +1 -1
  32. package/dist/components/navigation/AppNavigation.mjs +2 -1
  33. package/dist/components/navigation/AppNavigation.mjs.map +1 -1
  34. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  35. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  36. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  37. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  38. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  39. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  40. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  41. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  42. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  43. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  44. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  45. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  46. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  47. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  48. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  49. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  50. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  51. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  52. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  53. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  54. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  55. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  56. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  57. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  58. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  59. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  60. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  61. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  62. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  63. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  64. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  65. package/dist/components/ui/form/FormField.mjs.map +1 -1
  66. package/dist/components/ui/form/Input.mjs.map +1 -1
  67. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  68. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  69. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  70. package/dist/components/ui/form/Select.mjs +1 -1
  71. package/dist/components/ui/form/Select.mjs.map +1 -1
  72. package/dist/components/ui/form/Switch.mjs.map +1 -1
  73. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  74. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  75. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  76. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  77. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  78. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  79. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  80. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  81. package/dist/hooks/useDebounce.mjs.map +1 -1
  82. package/dist/hooks/useDebounceState.mjs.map +1 -1
  83. package/dist/hooks/useDebouncedEffect.mjs.map +1 -1
  84. package/dist/index.mjs.map +1 -1
  85. package/dist/infra/utils/clsx.mjs.map +1 -1
  86. package/dist/infra/utils/parser.mjs.map +1 -1
  87. package/dist/infra/utils/percentage.mjs.map +1 -1
  88. package/dist/middleware.mjs.map +1 -1
  89. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  90. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  91. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  92. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  93. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  94. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  95. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  96. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  97. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  98. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  99. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  100. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  101. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  102. package/dist/modules/cards/actions/list-cards.action.mjs.map +1 -1
  103. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  104. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  105. package/dist/modules/cards/types.mjs.map +1 -1
  106. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  107. package/dist/modules/plans/actions/find-plan-by-id.action.mjs.map +1 -1
  108. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  109. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  110. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  111. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  112. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  113. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  114. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  115. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  116. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  117. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  118. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  119. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  120. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  121. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  122. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  123. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  124. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  125. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  126. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  127. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  128. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  129. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  130. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  131. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  132. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  133. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  134. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  135. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  136. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  137. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  138. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  139. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  140. package/dist/modules/whitelabel/actions/find-whitelabel-styles.action.mjs.map +1 -1
  141. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  142. package/dist/modules/whitelabel/actions/revalidate-whitelabel-styles.action.mjs.map +1 -1
  143. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  144. package/dist/modules/whitelabel/services/whitelabel-styles.service.mjs.map +1 -1
  145. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  146. package/dist/store/useAccountModals.mjs.map +1 -1
  147. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  148. package/dist/store/useModalManager.mjs.map +1 -1
  149. package/dist/utils/countries.mjs.map +1 -1
  150. package/dist/utils/safeServerAction.mjs.map +1 -1
  151. package/dist/utils/withAction.mjs.map +1 -1
  152. package/package.json +89 -89
  153. package/src/components/account/AccountModals.tsx +17 -17
  154. package/src/components/account/ConfigurationsMyAccountModal.tsx +150 -150
  155. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  156. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
  157. package/src/components/account/DeleteAccountModal.tsx +130 -130
  158. package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
  159. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  160. package/src/components/account/TwoFactorAuthModal.tsx +223 -223
  161. package/src/components/account/hooks/useChangePhoneForm.tsx +81 -81
  162. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  163. package/src/components/account/sections/ChangeEmailModal.tsx +225 -225
  164. package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
  165. package/src/components/account/sections/ChangePhoneModal.tsx +231 -231
  166. package/src/components/account/sections/MyProfileSection.tsx +327 -327
  167. package/src/components/account/sections/PreferencesSection.tsx +273 -273
  168. package/src/components/account/sections/SecuritySection.tsx +160 -160
  169. package/src/components/embeds/CrispEmbed.tsx +101 -101
  170. package/src/components/embeds/FrillEmbed.tsx +119 -119
  171. package/src/components/handlers/SearchParamsHandler.tsx +61 -61
  172. package/src/components/layouts/AppMobileNavBar.tsx +118 -114
  173. package/src/components/layouts/AppNavBar.tsx +51 -51
  174. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  175. package/src/components/layouts/NavBar.tsx +120 -120
  176. package/src/components/layouts/NotificationsPopover.tsx +115 -115
  177. package/src/components/layouts/ProfilePopover.tsx +164 -164
  178. package/src/components/layouts/UsersSelectorPopover.tsx +238 -238
  179. package/src/components/modals/BuyCreditsModal.tsx +301 -301
  180. package/src/components/modals/ModalManager.tsx +29 -29
  181. package/src/components/modals/Modals.tsx +26 -26
  182. package/src/components/navigation/AppNavigation.tsx +2 -3
  183. package/src/components/navigation/CancelledSubscriptionBanner.tsx +69 -69
  184. package/src/components/navigation/NavItemsContext.ts +20 -20
  185. package/src/components/navigation/ProjectSelectorPopover.tsx +157 -157
  186. package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
  187. package/src/components/navigation/subcomponents/ProjectSelector.tsx +156 -156
  188. package/src/components/pages/notifications/Notifications.tsx +160 -160
  189. package/src/components/ui/buttons/Button.tsx +57 -57
  190. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  191. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  192. package/src/components/ui/data-display/Accordion.tsx +81 -81
  193. package/src/components/ui/data-display/Badge.tsx +47 -47
  194. package/src/components/ui/data-display/Card.tsx +93 -93
  195. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  196. package/src/components/ui/data-display/CardItem.tsx +75 -75
  197. package/src/components/ui/data-display/Pagination.tsx +126 -126
  198. package/src/components/ui/data-display/PaymentInfoCard.tsx +186 -186
  199. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  200. package/src/components/ui/data-display/Separator.tsx +29 -29
  201. package/src/components/ui/data-display/Table.tsx +117 -117
  202. package/src/components/ui/data-display/Tabs.tsx +67 -67
  203. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  204. package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
  205. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  206. package/src/components/ui/feedback/Progress.tsx +40 -40
  207. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  208. package/src/components/ui/feedback/Toast.tsx +101 -101
  209. package/src/components/ui/form/Calendar.tsx +228 -228
  210. package/src/components/ui/form/Checkbox.tsx +31 -31
  211. package/src/components/ui/form/ComboboxField.tsx +154 -154
  212. package/src/components/ui/form/DatePicker.tsx +97 -97
  213. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  214. package/src/components/ui/form/FormField.tsx +131 -131
  215. package/src/components/ui/form/Input.tsx +20 -20
  216. package/src/components/ui/form/InputOtp.tsx +80 -80
  217. package/src/components/ui/form/PhoneInput.tsx +205 -205
  218. package/src/components/ui/form/RadioGroup.tsx +45 -45
  219. package/src/components/ui/form/Select.tsx +200 -200
  220. package/src/components/ui/form/Switch.tsx +32 -32
  221. package/src/components/ui/form/Textarea.tsx +19 -19
  222. package/src/components/ui/overlay/Command.tsx +185 -185
  223. package/src/components/ui/overlay/Dialog.tsx +151 -151
  224. package/src/components/ui/overlay/Popover.tsx +49 -49
  225. package/src/components/ui/overlay/Sheet.tsx +166 -166
  226. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  227. package/src/components/widgets/notifications/NotificationCard.tsx +68 -68
  228. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  229. package/src/hooks/useDebounce.ts +26 -26
  230. package/src/hooks/useDebounceState.ts +11 -11
  231. package/src/hooks/useDebouncedEffect.ts +69 -69
  232. package/src/index.ts +376 -376
  233. package/src/infra/utils/clsx.ts +6 -6
  234. package/src/infra/utils/parser.ts +52 -52
  235. package/src/infra/utils/percentage.ts +42 -42
  236. package/src/middleware.ts +4 -4
  237. package/src/modules/accounts/actions/account-management.action.ts +91 -91
  238. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  239. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  240. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  241. package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
  242. package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
  243. package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
  244. package/src/modules/accounts/hooks/useTimezones.ts +15 -15
  245. package/src/modules/accounts/services/account.service.ts +236 -236
  246. package/src/modules/accounts/types.ts +214 -214
  247. package/src/modules/auth/actions/validate-session.action.ts +56 -56
  248. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  249. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  250. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  251. package/src/modules/cards/actions/list-cards.action.ts +8 -8
  252. package/src/modules/cards/hooks/cards.hook.ts +14 -14
  253. package/src/modules/cards/services/cards.service.ts +32 -32
  254. package/src/modules/cards/types.ts +32 -32
  255. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  256. package/src/modules/plans/actions/find-plan-by-id.action.ts +8 -8
  257. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +17 -17
  258. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +13 -13
  259. package/src/modules/plans/services/plans.service.ts +36 -36
  260. package/src/modules/plans/types/plan.type.ts +21 -21
  261. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  262. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  263. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  264. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  265. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  266. package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
  267. package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
  268. package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
  269. package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
  270. package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
  271. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  272. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  273. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +26 -26
  274. package/src/modules/subscriptions/constants/query-keys.constants.ts +1 -1
  275. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  276. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
  277. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +16 -16
  278. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +25 -25
  279. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  280. package/src/modules/subscriptions/types/calculate-subscription.type.ts +75 -75
  281. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  282. package/src/modules/subscriptions/utils/periodicity.ts +52 -52
  283. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  284. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  285. package/src/modules/users/action/list-messages.action.ts +12 -12
  286. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  287. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  288. package/src/modules/users/hooks/messages.hook.ts +60 -60
  289. package/src/modules/users/services/messages.service.ts +48 -48
  290. package/src/modules/whitelabel/actions/find-whitelabel-styles.action.ts +14 -14
  291. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  292. package/src/modules/whitelabel/actions/revalidate-whitelabel-styles.action.ts +10 -10
  293. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  294. package/src/modules/whitelabel/schema.ts +83 -81
  295. package/src/modules/whitelabel/services/whitelabel-styles.service.ts +129 -129
  296. package/src/modules/whitelabel/styles-schema.ts +37 -37
  297. package/src/providers/whitelabel.provider.tsx +54 -54
  298. package/src/store/useAccountModals.ts +55 -55
  299. package/src/store/useBuyCreditsModal.ts +25 -25
  300. package/src/store/useModalManager.ts +104 -104
  301. package/src/utils/countries.ts +224 -224
  302. package/src/utils/safeServerAction.ts +21 -21
  303. package/src/utils/withAction.ts +13 -13
@@ -1,130 +1,130 @@
1
- 'use client';
2
-
3
- import { useState, useCallback } from 'react';
4
- import { IconLock, IconAlertTriangle } from '@tabler/icons-react';
5
- import { toast } from 'sonner';
6
- import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
7
- import { Button } from '../ui/buttons/Button';
8
- import { FormField } from '../ui/form/FormField';
9
- import { SelectField } from '../ui/form/SelectField';
10
- import { TextAreaField } from '../ui/form/TextAreaField';
11
- import { Toast } from '../ui/feedback/Toast';
12
- import usePasswordVisibility from '../../hooks/usePasswordVisibility';
13
- import { useAccountModals } from '../../store/useAccountModals';
14
- import { AccountSectionType } from '../../enums/AccountSectionType';
15
-
16
- const REASON_OPTIONS = [
17
- { value: 'sem-funcao', label: 'A ferramenta não possui uma função que eu preciso' },
18
- { value: 'problemas', label: 'Encontrei problemas técnicos ou erros no sistema' },
19
- { value: 'suporte', label: 'Tive problemas com o suporte ou atendimento' },
20
- { value: 'demora', label: 'As atualizações demoram mais do que o esperado' },
21
- { value: 'temporario', label: 'O cancelamento é temporário' },
22
- { value: 'outro', label: 'Outro motivo' },
23
- ];
24
-
25
- export default function DeleteAccountModal() {
26
- const { activeModal, pagesCount, openConfigurations, openConfirmDelete, close } = useAccountModals();
27
- const open = activeModal === 'deleteAccount';
28
-
29
- const [reason, setReason] = useState('');
30
- const [description, setDescription] = useState('');
31
- const [password, setPassword] = useState('');
32
- const { showPassword, togglePassword } = usePasswordVisibility();
33
-
34
- const isFormValid = Boolean(reason && description && password);
35
-
36
- const resetForm = useCallback(() => {
37
- setReason('');
38
- setDescription('');
39
- setPassword('');
40
- }, []);
41
-
42
- const handleClose = () => {
43
- resetForm();
44
- openConfigurations(AccountSectionType.SECURITY);
45
- };
46
-
47
- const handleDelete = (e: React.FormEvent) => {
48
- e.preventDefault();
49
- if (!isFormValid) {
50
- toast.custom((t) => (
51
- <Toast variant="error" message="Preencha todos os campos obrigatórios" toastId={t} />
52
- ));
53
- return;
54
- }
55
- resetForm();
56
- openConfirmDelete(pagesCount);
57
- };
58
-
59
- return (
60
- <Dialog open={open} onOpenChange={handleClose}>
61
- <DialogContent className="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-lg 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%] overflow-y-auto">
62
- <form onSubmit={handleDelete} className="flex flex-col flex-1 lg:flex-none">
63
- <div className="flex flex-col gap-6 p-4 lg:p-6 flex-1 lg:flex-none">
64
- <DialogHeader className="p-0">
65
- <div className="flex items-center justify-center w-fit bg-red-50 rounded-lg p-2.5 mb-5">
66
- <IconAlertTriangle size={20} className="text-red-500" />
67
- </div>
68
- <DialogTitle>Excluir conta</DialogTitle>
69
- <DialogDescription className="paragraph-small-regular">
70
- Esta ação é <span className="font-semibold text-gray-950">irreversível</span>. Ao
71
- confirmar, sua conta e todos os seus dados serão excluídos.
72
- </DialogDescription>
73
- </DialogHeader>
74
-
75
- <SelectField
76
- label="Motivo do cancelamento"
77
- required
78
- placeholder="Selecione"
79
- options={REASON_OPTIONS}
80
- value={reason}
81
- onChange={(value) => setReason(value as string)}
82
- className="h-10!"
83
- />
84
-
85
- <div>
86
- <TextAreaField
87
- label="Descreva o que levou a tomar essa decisão"
88
- required
89
- placeholder="Explique sua decisão..."
90
- value={description}
91
- onChange={(e) => setDescription(e.target.value)}
92
- rows={4}
93
- maxLength={400}
94
- />
95
- <span className="paragraph-xsmall-medium text-gray-600 text-left mt-1 block">
96
- {description.length}/400 caracteres
97
- </span>
98
- </div>
99
-
100
- <FormField
101
- className="text-gray-600"
102
- label="Senha"
103
- type="password"
104
- placeholder="Informe sua senha"
105
- leftIcon={IconLock}
106
- value={password}
107
- onChange={(e) => setPassword(e.target.value)}
108
- classnameContainer="h-10!"
109
- showPassword={showPassword}
110
- onTogglePassword={togglePassword}
111
- />
112
- </div>
113
-
114
- <div className="flex flex-row items-center gap-2 p-4 lg:p-6 border-t border-gray-200 bg-white mt-auto lg:mt-0">
115
- <Button
116
- variant="default"
117
- className="h-10 flex-1 bg-gray-950 text-white hover:bg-gray-800"
118
- type="submit"
119
- >
120
- Excluir conta
121
- </Button>
122
- <Button variant="secondary" className="h-10 flex-1" type="button" onClick={handleClose}>
123
- Fechar
124
- </Button>
125
- </div>
126
- </form>
127
- </DialogContent>
128
- </Dialog>
129
- );
130
- }
1
+ 'use client';
2
+
3
+ import { useState, useCallback } from 'react';
4
+ import { IconLock, IconAlertTriangle } from '@tabler/icons-react';
5
+ import { toast } from 'sonner';
6
+ import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
7
+ import { Button } from '../ui/buttons/Button';
8
+ import { FormField } from '../ui/form/FormField';
9
+ import { SelectField } from '../ui/form/SelectField';
10
+ import { TextAreaField } from '../ui/form/TextAreaField';
11
+ import { Toast } from '../ui/feedback/Toast';
12
+ import usePasswordVisibility from '../../hooks/usePasswordVisibility';
13
+ import { useAccountModals } from '../../store/useAccountModals';
14
+ import { AccountSectionType } from '../../enums/AccountSectionType';
15
+
16
+ const REASON_OPTIONS = [
17
+ { value: 'sem-funcao', label: 'A ferramenta não possui uma função que eu preciso' },
18
+ { value: 'problemas', label: 'Encontrei problemas técnicos ou erros no sistema' },
19
+ { value: 'suporte', label: 'Tive problemas com o suporte ou atendimento' },
20
+ { value: 'demora', label: 'As atualizações demoram mais do que o esperado' },
21
+ { value: 'temporario', label: 'O cancelamento é temporário' },
22
+ { value: 'outro', label: 'Outro motivo' },
23
+ ];
24
+
25
+ export default function DeleteAccountModal() {
26
+ const { activeModal, pagesCount, openConfigurations, openConfirmDelete, close } = useAccountModals();
27
+ const open = activeModal === 'deleteAccount';
28
+
29
+ const [reason, setReason] = useState('');
30
+ const [description, setDescription] = useState('');
31
+ const [password, setPassword] = useState('');
32
+ const { showPassword, togglePassword } = usePasswordVisibility();
33
+
34
+ const isFormValid = Boolean(reason && description && password);
35
+
36
+ const resetForm = useCallback(() => {
37
+ setReason('');
38
+ setDescription('');
39
+ setPassword('');
40
+ }, []);
41
+
42
+ const handleClose = () => {
43
+ resetForm();
44
+ openConfigurations(AccountSectionType.SECURITY);
45
+ };
46
+
47
+ const handleDelete = (e: React.FormEvent) => {
48
+ e.preventDefault();
49
+ if (!isFormValid) {
50
+ toast.custom((t) => (
51
+ <Toast variant="error" message="Preencha todos os campos obrigatórios" toastId={t} />
52
+ ));
53
+ return;
54
+ }
55
+ resetForm();
56
+ openConfirmDelete(pagesCount);
57
+ };
58
+
59
+ return (
60
+ <Dialog open={open} onOpenChange={handleClose}>
61
+ <DialogContent className="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-lg 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%] overflow-y-auto">
62
+ <form onSubmit={handleDelete} className="flex flex-col flex-1 lg:flex-none">
63
+ <div className="flex flex-col gap-6 p-4 lg:p-6 flex-1 lg:flex-none">
64
+ <DialogHeader className="p-0">
65
+ <div className="flex items-center justify-center w-fit bg-red-50 rounded-lg p-2.5 mb-5">
66
+ <IconAlertTriangle size={20} className="text-red-500" />
67
+ </div>
68
+ <DialogTitle>Excluir conta</DialogTitle>
69
+ <DialogDescription className="paragraph-small-regular">
70
+ Esta ação é <span className="font-semibold text-gray-950">irreversível</span>. Ao
71
+ confirmar, sua conta e todos os seus dados serão excluídos.
72
+ </DialogDescription>
73
+ </DialogHeader>
74
+
75
+ <SelectField
76
+ label="Motivo do cancelamento"
77
+ required
78
+ placeholder="Selecione"
79
+ options={REASON_OPTIONS}
80
+ value={reason}
81
+ onChange={(value) => setReason(value as string)}
82
+ className="h-10!"
83
+ />
84
+
85
+ <div>
86
+ <TextAreaField
87
+ label="Descreva o que levou a tomar essa decisão"
88
+ required
89
+ placeholder="Explique sua decisão..."
90
+ value={description}
91
+ onChange={(e) => setDescription(e.target.value)}
92
+ rows={4}
93
+ maxLength={400}
94
+ />
95
+ <span className="paragraph-xsmall-medium text-gray-600 text-left mt-1 block">
96
+ {description.length}/400 caracteres
97
+ </span>
98
+ </div>
99
+
100
+ <FormField
101
+ className="text-gray-600"
102
+ label="Senha"
103
+ type="password"
104
+ placeholder="Informe sua senha"
105
+ leftIcon={IconLock}
106
+ value={password}
107
+ onChange={(e) => setPassword(e.target.value)}
108
+ classnameContainer="h-10!"
109
+ showPassword={showPassword}
110
+ onTogglePassword={togglePassword}
111
+ />
112
+ </div>
113
+
114
+ <div className="flex flex-row items-center gap-2 p-4 lg:p-6 border-t border-gray-200 bg-white mt-auto lg:mt-0">
115
+ <Button
116
+ variant="default"
117
+ className="h-10 flex-1 bg-gray-950 text-white hover:bg-gray-800"
118
+ type="submit"
119
+ >
120
+ Excluir conta
121
+ </Button>
122
+ <Button variant="secondary" className="h-10 flex-1" type="button" onClick={handleClose}>
123
+ Fechar
124
+ </Button>
125
+ </div>
126
+ </form>
127
+ </DialogContent>
128
+ </Dialog>
129
+ );
130
+ }
@@ -1,86 +1,86 @@
1
- 'use client';
2
-
3
- import { IconShieldCheck } from '@tabler/icons-react';
4
- import { Button } from '../ui/buttons/Button';
5
- import {
6
- Dialog,
7
- DialogContent,
8
- DialogDescription,
9
- DialogHeader,
10
- DialogTitle,
11
- } from '../ui/overlay/Dialog';
12
- import { InputOTP, InputOTPGroup, InputOTPSlot } from '../ui/form/InputOtp';
13
- import useDisableTwoFactorAuthForm from './hooks/useDisableTwoFactorAuthForm';
14
-
15
- interface DisableTwoFactorAuthModalProps {
16
- open: boolean;
17
- onClose: () => void;
18
- onSuccess?: () => void;
19
- }
20
-
21
- export default function DisableTwoFactorAuthModal({
22
- open,
23
- onClose,
24
- onSuccess,
25
- }: DisableTwoFactorAuthModalProps) {
26
- const { code, setCode, isValid, isLoading, handleClose, handleSubmit } =
27
- useDisableTwoFactorAuthForm({ onClose, onSuccess });
28
-
29
- return (
30
- <Dialog open={open} onOpenChange={handleClose}>
31
- <DialogContent overlayClassName="z-[1010]" 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-dvh top-0 bottom-0 left-0 right-0 translate-x-0 translate-y-0 lg:max-w-117.5 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%]">
32
- <form
33
- onSubmit={(e) => {
34
- e.preventDefault();
35
- handleSubmit();
36
- }}
37
- className="flex flex-col flex-1 lg:flex-none"
38
- >
39
- <div className="flex flex-col gap-4 lg:gap-5 p-4 lg:p-5 flex-1 lg:flex-none">
40
- <div className="flex items-center justify-center w-fit bg-gray-50 rounded-lg p-2">
41
- <IconShieldCheck size={20} className="text-gray-600" />
42
- </div>
43
- <DialogHeader className="p-0 gap-2">
44
- <DialogTitle className="paragraph-medium-semibold text-gray-950">
45
- Desabilitar autenticação 2FA
46
- </DialogTitle>
47
- <DialogDescription className="paragraph-small-regular text-gray-600">
48
- Informe o código de 6 dígitos do seu aplicativo autenticador para confirmar a
49
- desativação.
50
- </DialogDescription>
51
- </DialogHeader>
52
-
53
- <div className="flex flex-col gap-2">
54
- <span className="paragraph-small-medium text-gray-700">Código do autenticador</span>
55
- <InputOTP maxLength={6} value={code} onChange={setCode}>
56
- <InputOTPGroup className="gap-2">
57
- {Array.from({ length: 6 }).map((_, i) => (
58
- <InputOTPSlot
59
- key={i}
60
- index={i}
61
- className="w-11! lg:w-12! h-13! lg:h-14! rounded-lg! text-lg border-gray-200"
62
- />
63
- ))}
64
- </InputOTPGroup>
65
- </InputOTP>
66
- </div>
67
- </div>
68
-
69
- <div className="flex flex-row items-center gap-2 p-4 lg:p-5 border-t border-gray-200 mt-auto lg:mt-0">
70
- <Button className="h-10! flex-1" disabled={!isValid || isLoading} type="submit">
71
- {isLoading ? 'Desabilitando...' : 'Desabilitar 2FA'}
72
- </Button>
73
- <Button
74
- variant="secondary"
75
- className="h-10! flex-1"
76
- type="button"
77
- onClick={handleClose}
78
- >
79
- Cancelar
80
- </Button>
81
- </div>
82
- </form>
83
- </DialogContent>
84
- </Dialog>
85
- );
86
- }
1
+ 'use client';
2
+
3
+ import { IconShieldCheck } from '@tabler/icons-react';
4
+ import { Button } from '../ui/buttons/Button';
5
+ import {
6
+ Dialog,
7
+ DialogContent,
8
+ DialogDescription,
9
+ DialogHeader,
10
+ DialogTitle,
11
+ } from '../ui/overlay/Dialog';
12
+ import { InputOTP, InputOTPGroup, InputOTPSlot } from '../ui/form/InputOtp';
13
+ import useDisableTwoFactorAuthForm from './hooks/useDisableTwoFactorAuthForm';
14
+
15
+ interface DisableTwoFactorAuthModalProps {
16
+ open: boolean;
17
+ onClose: () => void;
18
+ onSuccess?: () => void;
19
+ }
20
+
21
+ export default function DisableTwoFactorAuthModal({
22
+ open,
23
+ onClose,
24
+ onSuccess,
25
+ }: DisableTwoFactorAuthModalProps) {
26
+ const { code, setCode, isValid, isLoading, handleClose, handleSubmit } =
27
+ useDisableTwoFactorAuthForm({ onClose, onSuccess });
28
+
29
+ return (
30
+ <Dialog open={open} onOpenChange={handleClose}>
31
+ <DialogContent overlayClassName="z-[1010]" 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-dvh top-0 bottom-0 left-0 right-0 translate-x-0 translate-y-0 lg:max-w-117.5 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%]">
32
+ <form
33
+ onSubmit={(e) => {
34
+ e.preventDefault();
35
+ handleSubmit();
36
+ }}
37
+ className="flex flex-col flex-1 lg:flex-none"
38
+ >
39
+ <div className="flex flex-col gap-4 lg:gap-5 p-4 lg:p-5 flex-1 lg:flex-none">
40
+ <div className="flex items-center justify-center w-fit bg-gray-50 rounded-lg p-2">
41
+ <IconShieldCheck size={20} className="text-gray-600" />
42
+ </div>
43
+ <DialogHeader className="p-0 gap-2">
44
+ <DialogTitle className="paragraph-medium-semibold text-gray-950">
45
+ Desabilitar autenticação 2FA
46
+ </DialogTitle>
47
+ <DialogDescription className="paragraph-small-regular text-gray-600">
48
+ Informe o código de 6 dígitos do seu aplicativo autenticador para confirmar a
49
+ desativação.
50
+ </DialogDescription>
51
+ </DialogHeader>
52
+
53
+ <div className="flex flex-col gap-2">
54
+ <span className="paragraph-small-medium text-gray-700">Código do autenticador</span>
55
+ <InputOTP maxLength={6} value={code} onChange={setCode}>
56
+ <InputOTPGroup className="gap-2">
57
+ {Array.from({ length: 6 }).map((_, i) => (
58
+ <InputOTPSlot
59
+ key={i}
60
+ index={i}
61
+ className="w-11! lg:w-12! h-13! lg:h-14! rounded-lg! text-lg border-gray-200"
62
+ />
63
+ ))}
64
+ </InputOTPGroup>
65
+ </InputOTP>
66
+ </div>
67
+ </div>
68
+
69
+ <div className="flex flex-row items-center gap-2 p-4 lg:p-5 border-t border-gray-200 mt-auto lg:mt-0">
70
+ <Button className="h-10! flex-1" disabled={!isValid || isLoading} type="submit">
71
+ {isLoading ? 'Desabilitando...' : 'Desabilitar 2FA'}
72
+ </Button>
73
+ <Button
74
+ variant="secondary"
75
+ className="h-10! flex-1"
76
+ type="button"
77
+ onClick={handleClose}
78
+ >
79
+ Cancelar
80
+ </Button>
81
+ </div>
82
+ </form>
83
+ </DialogContent>
84
+ </Dialog>
85
+ );
86
+ }
@@ -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
+ }