@greatapps/common 1.1.257 → 1.1.259

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 (301) hide show
  1. package/dist/components/account/AccountModals.mjs.map +1 -1
  2. package/dist/components/account/ConfigurationsMyAccountModal.mjs +2 -2
  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 +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 +1 -1
  29. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  30. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  31. package/dist/components/modals/ModalManager.mjs.map +1 -1
  32. package/dist/components/modals/Modals.mjs.map +1 -1
  33. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  34. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  35. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  36. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  37. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  38. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  39. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  40. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  41. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  42. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  43. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  44. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  45. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  46. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  47. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  48. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  49. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  50. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  51. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  52. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  53. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  54. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  55. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  56. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  57. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  58. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  59. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  60. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  61. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  62. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  63. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  64. package/dist/components/ui/form/FormField.mjs.map +1 -1
  65. package/dist/components/ui/form/Input.mjs.map +1 -1
  66. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  67. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  68. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  69. package/dist/components/ui/form/Select.mjs +1 -1
  70. package/dist/components/ui/form/Select.mjs.map +1 -1
  71. package/dist/components/ui/form/Switch.mjs.map +1 -1
  72. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  73. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  74. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  75. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  76. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  77. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  78. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  79. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  80. package/dist/hooks/useDebounce.mjs.map +1 -1
  81. package/dist/hooks/useDebounceState.mjs.map +1 -1
  82. package/dist/hooks/useDebouncedEffect.mjs.map +1 -1
  83. package/dist/index.mjs.map +1 -1
  84. package/dist/infra/utils/clsx.mjs.map +1 -1
  85. package/dist/infra/utils/parser.mjs.map +1 -1
  86. package/dist/infra/utils/percentage.mjs.map +1 -1
  87. package/dist/middleware.mjs.map +1 -1
  88. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  89. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  90. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  91. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  92. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  93. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  94. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  95. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  96. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  97. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  98. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  99. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  100. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  101. package/dist/modules/cards/actions/list-cards.action.mjs.map +1 -1
  102. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  103. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  104. package/dist/modules/cards/types.mjs.map +1 -1
  105. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  106. package/dist/modules/plans/actions/find-plan-by-id.action.mjs.map +1 -1
  107. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  108. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  109. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  110. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  111. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  112. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  113. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  114. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  115. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  116. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  117. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  118. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  119. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  120. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  121. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  122. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  123. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  124. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  125. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  126. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  127. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  128. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  129. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  130. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  131. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  132. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  133. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  134. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  135. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  136. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  137. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  138. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  139. package/dist/modules/whitelabel/actions/find-whitelabel-styles.action.mjs.map +1 -1
  140. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  141. package/dist/modules/whitelabel/actions/revalidate-whitelabel-styles.action.mjs.map +1 -1
  142. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  143. package/dist/modules/whitelabel/services/whitelabel-styles.service.mjs.map +1 -1
  144. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  145. package/dist/store/useAccountModals.mjs.map +1 -1
  146. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  147. package/dist/store/useModalManager.mjs.map +1 -1
  148. package/dist/utils/countries.mjs.map +1 -1
  149. package/dist/utils/safeServerAction.mjs.map +1 -1
  150. package/dist/utils/withAction.mjs.map +1 -1
  151. package/package.json +89 -89
  152. package/src/components/account/AccountModals.tsx +17 -17
  153. package/src/components/account/ConfigurationsMyAccountModal.tsx +150 -150
  154. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  155. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
  156. package/src/components/account/DeleteAccountModal.tsx +130 -130
  157. package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
  158. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  159. package/src/components/account/TwoFactorAuthModal.tsx +223 -223
  160. package/src/components/account/hooks/useChangePhoneForm.tsx +81 -81
  161. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  162. package/src/components/account/sections/ChangeEmailModal.tsx +225 -225
  163. package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
  164. package/src/components/account/sections/ChangePhoneModal.tsx +231 -231
  165. package/src/components/account/sections/MyProfileSection.tsx +327 -327
  166. package/src/components/account/sections/PreferencesSection.tsx +273 -273
  167. package/src/components/account/sections/SecuritySection.tsx +160 -160
  168. package/src/components/embeds/CrispEmbed.tsx +101 -101
  169. package/src/components/embeds/FrillEmbed.tsx +119 -119
  170. package/src/components/handlers/SearchParamsHandler.tsx +61 -61
  171. package/src/components/layouts/AppMobileNavBar.tsx +118 -118
  172. package/src/components/layouts/AppNavBar.tsx +51 -51
  173. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  174. package/src/components/layouts/NavBar.tsx +120 -120
  175. package/src/components/layouts/NotificationsPopover.tsx +115 -115
  176. package/src/components/layouts/ProfilePopover.tsx +164 -164
  177. package/src/components/layouts/UsersSelectorPopover.tsx +238 -238
  178. package/src/components/modals/BuyCreditsModal.tsx +301 -301
  179. package/src/components/modals/ModalManager.tsx +29 -29
  180. package/src/components/modals/Modals.tsx +26 -26
  181. package/src/components/navigation/CancelledSubscriptionBanner.tsx +69 -69
  182. package/src/components/navigation/NavItemsContext.ts +20 -20
  183. package/src/components/navigation/ProjectSelectorPopover.tsx +157 -157
  184. package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
  185. package/src/components/navigation/subcomponents/ProjectSelector.tsx +156 -156
  186. package/src/components/pages/notifications/Notifications.tsx +160 -160
  187. package/src/components/ui/buttons/Button.tsx +57 -57
  188. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  189. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  190. package/src/components/ui/data-display/Accordion.tsx +81 -81
  191. package/src/components/ui/data-display/Badge.tsx +47 -47
  192. package/src/components/ui/data-display/Card.tsx +93 -93
  193. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  194. package/src/components/ui/data-display/CardItem.tsx +75 -75
  195. package/src/components/ui/data-display/Pagination.tsx +126 -126
  196. package/src/components/ui/data-display/PaymentInfoCard.tsx +186 -186
  197. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  198. package/src/components/ui/data-display/Separator.tsx +29 -29
  199. package/src/components/ui/data-display/Table.tsx +117 -117
  200. package/src/components/ui/data-display/Tabs.tsx +67 -67
  201. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  202. package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
  203. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  204. package/src/components/ui/feedback/Progress.tsx +40 -40
  205. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  206. package/src/components/ui/feedback/Toast.tsx +101 -101
  207. package/src/components/ui/form/Calendar.tsx +228 -228
  208. package/src/components/ui/form/Checkbox.tsx +31 -31
  209. package/src/components/ui/form/ComboboxField.tsx +154 -154
  210. package/src/components/ui/form/DatePicker.tsx +97 -97
  211. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  212. package/src/components/ui/form/FormField.tsx +131 -131
  213. package/src/components/ui/form/Input.tsx +20 -20
  214. package/src/components/ui/form/InputOtp.tsx +80 -80
  215. package/src/components/ui/form/PhoneInput.tsx +205 -205
  216. package/src/components/ui/form/RadioGroup.tsx +45 -45
  217. package/src/components/ui/form/Select.tsx +200 -200
  218. package/src/components/ui/form/Switch.tsx +32 -32
  219. package/src/components/ui/form/Textarea.tsx +19 -19
  220. package/src/components/ui/overlay/Command.tsx +185 -185
  221. package/src/components/ui/overlay/Dialog.tsx +151 -151
  222. package/src/components/ui/overlay/Popover.tsx +49 -49
  223. package/src/components/ui/overlay/Sheet.tsx +166 -166
  224. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  225. package/src/components/widgets/notifications/NotificationCard.tsx +68 -68
  226. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  227. package/src/hooks/useDebounce.ts +26 -26
  228. package/src/hooks/useDebounceState.ts +11 -11
  229. package/src/hooks/useDebouncedEffect.ts +69 -69
  230. package/src/index.ts +376 -376
  231. package/src/infra/utils/clsx.ts +6 -6
  232. package/src/infra/utils/parser.ts +52 -52
  233. package/src/infra/utils/percentage.ts +42 -42
  234. package/src/middleware.ts +4 -4
  235. package/src/modules/accounts/actions/account-management.action.ts +91 -91
  236. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  237. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  238. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  239. package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
  240. package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
  241. package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
  242. package/src/modules/accounts/hooks/useTimezones.ts +15 -15
  243. package/src/modules/accounts/services/account.service.ts +236 -236
  244. package/src/modules/accounts/types.ts +214 -214
  245. package/src/modules/auth/actions/validate-session.action.ts +56 -56
  246. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  247. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  248. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  249. package/src/modules/cards/actions/list-cards.action.ts +8 -8
  250. package/src/modules/cards/hooks/cards.hook.ts +14 -14
  251. package/src/modules/cards/services/cards.service.ts +32 -32
  252. package/src/modules/cards/types.ts +32 -32
  253. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  254. package/src/modules/plans/actions/find-plan-by-id.action.ts +8 -8
  255. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +17 -17
  256. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +13 -13
  257. package/src/modules/plans/services/plans.service.ts +36 -36
  258. package/src/modules/plans/types/plan.type.ts +21 -21
  259. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  260. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  261. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  262. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  263. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  264. package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
  265. package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
  266. package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
  267. package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
  268. package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
  269. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  270. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  271. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +26 -26
  272. package/src/modules/subscriptions/constants/query-keys.constants.ts +1 -1
  273. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  274. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
  275. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +16 -16
  276. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +25 -25
  277. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  278. package/src/modules/subscriptions/types/calculate-subscription.type.ts +75 -75
  279. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  280. package/src/modules/subscriptions/utils/periodicity.ts +52 -52
  281. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  282. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  283. package/src/modules/users/action/list-messages.action.ts +12 -12
  284. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  285. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  286. package/src/modules/users/hooks/messages.hook.ts +60 -60
  287. package/src/modules/users/services/messages.service.ts +48 -48
  288. package/src/modules/whitelabel/actions/find-whitelabel-styles.action.ts +14 -14
  289. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  290. package/src/modules/whitelabel/actions/revalidate-whitelabel-styles.action.ts +10 -10
  291. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  292. package/src/modules/whitelabel/schema.ts +83 -83
  293. package/src/modules/whitelabel/services/whitelabel-styles.service.ts +129 -129
  294. package/src/modules/whitelabel/styles-schema.ts +37 -37
  295. package/src/providers/whitelabel.provider.tsx +54 -54
  296. package/src/store/useAccountModals.ts +55 -55
  297. package/src/store/useBuyCreditsModal.ts +25 -25
  298. package/src/store/useModalManager.ts +104 -104
  299. package/src/utils/countries.ts +224 -224
  300. package/src/utils/safeServerAction.ts +21 -21
  301. 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
+ }