@greatapps/common 1.1.379 → 1.1.381

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 (347) 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.map +1 -1
  22. package/dist/components/layouts/AppNavBar.mjs.map +1 -1
  23. package/dist/components/layouts/CollapsibleSidebar.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/SideBarNavigation.mjs.map +1 -1
  29. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  30. package/dist/components/layouts/WhitelabelCodes.mjs.map +1 -1
  31. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  32. package/dist/components/modals/ModalManager.mjs.map +1 -1
  33. package/dist/components/modals/Modals.mjs.map +1 -1
  34. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  35. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  36. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  37. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  38. package/dist/components/navigation/ProjectSelectorPopover.mjs +69 -40
  39. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  40. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  41. package/dist/components/navigation/subcomponents/ProjectSelector.mjs +59 -32
  42. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  43. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  44. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  45. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  46. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  47. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  48. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  49. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  50. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  51. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  52. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  53. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  54. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  55. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  56. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  57. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  58. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  59. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  60. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  61. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  62. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  63. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  64. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  65. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  66. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  67. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  68. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  69. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  70. package/dist/components/ui/form/FormField.mjs.map +1 -1
  71. package/dist/components/ui/form/Input.mjs.map +1 -1
  72. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  73. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  74. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  75. package/dist/components/ui/form/Select.mjs +1 -1
  76. package/dist/components/ui/form/Select.mjs.map +1 -1
  77. package/dist/components/ui/form/Switch.mjs.map +1 -1
  78. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  79. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  80. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  81. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  82. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  83. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  84. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  85. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  86. package/dist/hooks/useDebounce.mjs.map +1 -1
  87. package/dist/hooks/useDebounceState.mjs.map +1 -1
  88. package/dist/hooks/useDebouncedEffect.mjs.map +1 -1
  89. package/dist/index.mjs.map +1 -1
  90. package/dist/infra/utils/clsx.mjs.map +1 -1
  91. package/dist/infra/utils/date.mjs.map +1 -1
  92. package/dist/infra/utils/parser.mjs.map +1 -1
  93. package/dist/infra/utils/percentage.mjs.map +1 -1
  94. package/dist/middleware.mjs.map +1 -1
  95. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  96. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  97. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  98. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  99. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  100. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  101. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  102. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  103. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  104. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  105. package/dist/modules/accounts/services/two-factor.service.mjs +3 -2
  106. package/dist/modules/accounts/services/two-factor.service.mjs.map +1 -1
  107. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  108. package/dist/modules/auth/actions/verify-two-factor.action.mjs +2 -2
  109. package/dist/modules/auth/actions/verify-two-factor.action.mjs.map +1 -1
  110. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  111. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  112. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  113. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  114. package/dist/modules/auth/hooks/useUserQuery.mjs +2 -2
  115. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -1
  116. package/dist/modules/auth/services/auth.service.mjs +3 -2
  117. package/dist/modules/auth/services/auth.service.mjs.map +1 -1
  118. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  119. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  120. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  121. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  122. package/dist/modules/cards/actions/list-cards.action.mjs.map +1 -1
  123. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  124. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  125. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  126. package/dist/modules/cards/types.mjs.map +1 -1
  127. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  128. package/dist/modules/plans/actions/find-plan-by-id.action.mjs.map +1 -1
  129. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  130. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  131. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  132. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  133. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  134. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  135. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  136. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  137. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  138. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  139. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  140. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  141. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  142. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  143. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  144. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  145. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  146. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  147. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  148. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  149. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  150. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  151. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  152. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  153. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  154. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  155. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  156. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  157. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  158. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  159. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  160. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  161. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  162. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  163. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  164. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  165. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  166. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  167. package/dist/store/useAccountModals.mjs.map +1 -1
  168. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  169. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  170. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  171. package/dist/store/useModalManager.mjs.map +1 -1
  172. package/dist/utils/constants/br-states.mjs.map +1 -1
  173. package/dist/utils/countries.mjs.map +1 -1
  174. package/dist/utils/safeServerAction.mjs.map +1 -1
  175. package/dist/utils/withAction.mjs.map +1 -1
  176. package/package.json +89 -89
  177. package/src/components/account/AccountModals.tsx +17 -17
  178. package/src/components/account/ConfigurationsMyAccountModal.tsx +146 -146
  179. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  180. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
  181. package/src/components/account/DeleteAccountModal.tsx +130 -130
  182. package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
  183. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  184. package/src/components/account/TwoFactorAuthModal.tsx +215 -215
  185. package/src/components/account/hooks/useChangePhoneForm.tsx +107 -107
  186. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  187. package/src/components/account/sections/ChangeEmailModal.tsx +225 -225
  188. package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
  189. package/src/components/account/sections/ChangePhoneModal.tsx +245 -245
  190. package/src/components/account/sections/MyProfileSection.tsx +327 -327
  191. package/src/components/account/sections/PreferencesSection.tsx +248 -248
  192. package/src/components/account/sections/SecuritySection.tsx +46 -46
  193. package/src/components/embeds/CrispEmbed.tsx +101 -101
  194. package/src/components/embeds/FrillEmbed.tsx +119 -119
  195. package/src/components/handlers/SearchParamsHandler.tsx +61 -61
  196. package/src/components/layouts/AppMobileNavBar.tsx +118 -118
  197. package/src/components/layouts/AppNavBar.tsx +46 -46
  198. package/src/components/layouts/CollapsibleSidebar.tsx +67 -67
  199. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  200. package/src/components/layouts/NavBar.tsx +172 -172
  201. package/src/components/layouts/NotificationsPopover.tsx +115 -115
  202. package/src/components/layouts/ProfilePopover.tsx +174 -174
  203. package/src/components/layouts/SideBarNavigation.tsx +62 -62
  204. package/src/components/layouts/UsersSelectorPopover.tsx +234 -234
  205. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  206. package/src/components/modals/BuyCreditsModal.tsx +314 -314
  207. package/src/components/modals/ModalManager.tsx +29 -29
  208. package/src/components/modals/Modals.tsx +26 -26
  209. package/src/components/modals/cards/AddCardModal.tsx +260 -260
  210. package/src/components/modals/cards/CardFormFields.tsx +294 -294
  211. package/src/components/navigation/CancelledSubscriptionBanner.tsx +60 -60
  212. package/src/components/navigation/NavItemsContext.ts +20 -20
  213. package/src/components/navigation/ProjectSelectorPopover.tsx +194 -160
  214. package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
  215. package/src/components/navigation/subcomponents/ProjectSelector.tsx +190 -160
  216. package/src/components/pages/NotFoundPage.tsx +67 -67
  217. package/src/components/pages/notifications/Notifications.tsx +160 -160
  218. package/src/components/ui/buttons/Button.tsx +57 -57
  219. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  220. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  221. package/src/components/ui/data-display/Accordion.tsx +81 -81
  222. package/src/components/ui/data-display/Badge.tsx +47 -47
  223. package/src/components/ui/data-display/Card.tsx +93 -93
  224. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  225. package/src/components/ui/data-display/CardItem.tsx +75 -75
  226. package/src/components/ui/data-display/Pagination.tsx +126 -126
  227. package/src/components/ui/data-display/PaymentInfoCard.tsx +186 -186
  228. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  229. package/src/components/ui/data-display/Separator.tsx +29 -29
  230. package/src/components/ui/data-display/Table.tsx +117 -117
  231. package/src/components/ui/data-display/Tabs.tsx +67 -67
  232. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  233. package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
  234. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  235. package/src/components/ui/feedback/Progress.tsx +40 -40
  236. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  237. package/src/components/ui/feedback/Toast.tsx +101 -101
  238. package/src/components/ui/form/Calendar.tsx +228 -228
  239. package/src/components/ui/form/Checkbox.tsx +31 -31
  240. package/src/components/ui/form/ComboboxField.tsx +154 -154
  241. package/src/components/ui/form/DatePicker.tsx +97 -97
  242. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  243. package/src/components/ui/form/FormField.tsx +131 -131
  244. package/src/components/ui/form/Input.tsx +20 -20
  245. package/src/components/ui/form/InputOtp.tsx +80 -80
  246. package/src/components/ui/form/PhoneInput.tsx +208 -208
  247. package/src/components/ui/form/RadioGroup.tsx +45 -45
  248. package/src/components/ui/form/Select.tsx +200 -200
  249. package/src/components/ui/form/Switch.tsx +32 -32
  250. package/src/components/ui/form/Textarea.tsx +19 -19
  251. package/src/components/ui/overlay/Command.tsx +185 -185
  252. package/src/components/ui/overlay/Dialog.tsx +151 -151
  253. package/src/components/ui/overlay/Popover.tsx +49 -49
  254. package/src/components/ui/overlay/Sheet.tsx +166 -166
  255. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  256. package/src/components/widgets/notifications/NotificationCard.tsx +68 -68
  257. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  258. package/src/hooks/useDebounce.ts +26 -26
  259. package/src/hooks/useDebounceState.ts +11 -11
  260. package/src/hooks/useDebouncedEffect.ts +69 -69
  261. package/src/index.ts +391 -391
  262. package/src/infra/utils/clsx.ts +6 -6
  263. package/src/infra/utils/date.ts +7 -7
  264. package/src/infra/utils/parser.ts +52 -52
  265. package/src/infra/utils/percentage.ts +42 -42
  266. package/src/middleware.ts +4 -4
  267. package/src/modules/accounts/actions/account-management.action.ts +107 -107
  268. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  269. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  270. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  271. package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
  272. package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
  273. package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
  274. package/src/modules/accounts/hooks/useTimezones.ts +15 -15
  275. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  276. package/src/modules/accounts/services/account.service.ts +239 -239
  277. package/src/modules/accounts/services/two-factor.service.ts +3 -2
  278. package/src/modules/accounts/types.ts +225 -225
  279. package/src/modules/auth/actions/validate-session.action.ts +56 -56
  280. package/src/modules/auth/actions/verify-two-factor.action.ts +2 -2
  281. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  282. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  283. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  284. package/src/modules/auth/hooks/useManagementPermissions.ts +45 -45
  285. package/src/modules/auth/hooks/useUserQuery.ts +2 -2
  286. package/src/modules/auth/services/auth.service.ts +3 -1
  287. package/src/modules/auth/types/management-permission.type.ts +7 -7
  288. package/src/modules/auth/utils/assert-management-permission.ts +46 -46
  289. package/src/modules/auth/utils/assert-management-subscription.ts +27 -27
  290. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  291. package/src/modules/cards/actions/create-card.action.ts +9 -9
  292. package/src/modules/cards/actions/list-cards.action.ts +8 -8
  293. package/src/modules/cards/hooks/cards.hook.ts +14 -14
  294. package/src/modules/cards/hooks/create-card.hook.ts +18 -18
  295. package/src/modules/cards/services/cards.service.ts +51 -51
  296. package/src/modules/cards/types.ts +32 -32
  297. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  298. package/src/modules/plans/actions/find-plan-by-id.action.ts +8 -8
  299. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +17 -17
  300. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +13 -13
  301. package/src/modules/plans/services/plans.service.ts +36 -36
  302. package/src/modules/plans/types/plan.type.ts +21 -21
  303. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  304. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  305. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  306. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  307. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  308. package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
  309. package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
  310. package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
  311. package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
  312. package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
  313. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  314. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  315. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  316. package/src/modules/subscriptions/constants/query-keys.constants.ts +1 -1
  317. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  318. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
  319. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +16 -16
  320. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +25 -25
  321. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +39 -39
  322. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  323. package/src/modules/subscriptions/types/calculate-subscription.type.ts +75 -75
  324. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  325. package/src/modules/subscriptions/utils/has-subscription-expired.ts +8 -8
  326. package/src/modules/subscriptions/utils/periodicity.ts +52 -52
  327. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  328. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  329. package/src/modules/users/action/list-messages.action.ts +12 -12
  330. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  331. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  332. package/src/modules/users/hooks/messages.hook.ts +60 -60
  333. package/src/modules/users/services/messages.service.ts +48 -48
  334. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  335. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  336. package/src/modules/whitelabel/schema.ts +84 -84
  337. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  338. package/src/providers/whitelabel.provider.tsx +54 -54
  339. package/src/store/useAccountModals.ts +55 -55
  340. package/src/store/useBuyCreditsModal.ts +21 -21
  341. package/src/store/useDesktopSidebarStore.ts +47 -47
  342. package/src/store/useMdSidebarStore.ts +34 -34
  343. package/src/store/useModalManager.ts +104 -104
  344. package/src/utils/constants/br-states.ts +29 -29
  345. package/src/utils/countries.ts +224 -224
  346. package/src/utils/safeServerAction.ts +21 -21
  347. package/src/utils/withAction.ts +13 -13
@@ -1,248 +1,248 @@
1
- 'use client';
2
-
3
- import { useState, useEffect } from 'react';
4
- import { useForm } from 'react-hook-form';
5
- import { toast } from 'sonner';
6
- import { IconLock } from '@tabler/icons-react';
7
- import { cn } from '../../../infra/utils/clsx';
8
- import { Button } from '../../ui/buttons/Button';
9
- import { Separator } from '../../ui/data-display/Separator';
10
- import { Toast } from '../../ui/feedback/Toast';
11
- import { FormField } from '../../ui/form/FormField';
12
- import { ComboboxField } from '../../ui/form/ComboboxField';
13
- import { SelectField } from '../../ui/form/SelectField';
14
- import ConfirmGlobalPreferencesModal from '../ConfirmGlobalPreferencesModal';
15
- import { useAuth } from '../../../providers/auth.provider';
16
- import { UserProfile } from '../../../modules/users/schema';
17
- import type { UpdateAccountRequest } from '../../../modules/accounts/types';
18
- import {
19
- useUpdateAccountUser,
20
- useUpdateAccount,
21
- } from '../../../modules/accounts/hooks/useAccountManagement';
22
- import {
23
- LANGUAGE_OPTIONS,
24
- TIME_FORMAT_OPTIONS,
25
- } from '../constants';
26
- import { useTimezones } from '../../../modules/accounts/hooks/useTimezones';
27
- import { useCurrencies } from '../../../modules/accounts/hooks/useCurrencies';
28
-
29
- interface PreferencesFormValues {
30
- companyName: string;
31
- language: string;
32
- currency: string;
33
- timezone: string;
34
- timeFormat: string;
35
- receive_sms: boolean;
36
- receive_email: boolean;
37
- }
38
-
39
- interface PreferencesSectionProps {
40
- onClose: () => void;
41
- }
42
-
43
- export function PreferencesSection({ onClose }: PreferencesSectionProps) {
44
- const { data: timezones = [] } = useTimezones();
45
- const { data: currencies = [] } = useCurrencies();
46
- const { user, account } = useAuth();
47
- const isOwner = user?.profile === UserProfile.owner;
48
- const canEditPreferences = isOwner || user?.profile === UserProfile.admin;
49
- const updateAccountUser = useUpdateAccountUser();
50
- const updateAccount = useUpdateAccount();
51
- const [confirmGlobalOpen, setConfirmGlobalOpen] = useState(false);
52
- const [pendingSubmit, setPendingSubmit] = useState<{
53
- data: PreferencesFormValues;
54
- accountFields: UpdateAccountRequest;
55
- } | null>(null);
56
- const [isSaving, setIsSaving] = useState(false);
57
-
58
- const { watch, setValue, handleSubmit, reset, formState: { dirtyFields } } =
59
- useForm<PreferencesFormValues>({
60
- defaultValues: {
61
- companyName: '',
62
- language: '',
63
- currency: '',
64
- timezone: '',
65
- timeFormat: '24h',
66
- receive_sms: false,
67
- receive_email: false,
68
- },
69
- });
70
-
71
- useEffect(() => {
72
- if (!user || !account) return;
73
- reset({
74
- companyName: account.name ?? '',
75
- language: LANGUAGE_OPTIONS.find(
76
- (o) => o.apiValue === user.language?.toLowerCase()
77
- )?.value ?? 'pt-BR',
78
- currency: account.currency,
79
- timezone: account.timezone,
80
- timeFormat: '24h',
81
- receive_sms: user.receive_sms ?? false,
82
- receive_email: user.receive_email ?? false,
83
- });
84
- }, [user, account, reset]);
85
-
86
- const doSave = async (data: PreferencesFormValues, accountFields: UpdateAccountRequest) => {
87
- setIsSaving(true);
88
- try {
89
- const apiLanguage = LANGUAGE_OPTIONS.find((o) => o.value === data.language)?.apiValue ?? data.language.toLowerCase();
90
- await updateAccountUser.mutateAsync({
91
- language: apiLanguage,
92
- receive_sms: data.receive_sms,
93
- receive_email: data.receive_email,
94
- });
95
-
96
- if (canEditPreferences && Object.keys(accountFields).length > 0) {
97
- await updateAccount.mutateAsync(accountFields);
98
- }
99
-
100
- reset(data);
101
- toast.custom((t) => (
102
- <Toast variant="success" message="Preferências salvas com sucesso" toastId={t} />
103
- ));
104
- onClose();
105
- } catch (error) {
106
- toast.custom((t) => (
107
- <Toast
108
- variant="error"
109
- message={error instanceof Error ? error.message : 'Erro ao salvar preferências'}
110
- toastId={t}
111
- />
112
- ));
113
- } finally {
114
- setIsSaving(false);
115
- }
116
- };
117
-
118
- const onSubmit = (data: PreferencesFormValues) => {
119
- const accountFields: UpdateAccountRequest = {
120
- ...(isOwner && dirtyFields.companyName && { name: data.companyName }),
121
- ...(canEditPreferences && dirtyFields.currency && { currency: data.currency }),
122
- ...(canEditPreferences && dirtyFields.timezone && { timezone: data.timezone }),
123
- };
124
- const globalFieldChanged = Object.keys(accountFields).length > 0;
125
-
126
- if (globalFieldChanged) {
127
- setPendingSubmit({ data, accountFields });
128
- setConfirmGlobalOpen(true);
129
- } else {
130
- doSave(data, accountFields);
131
- }
132
- };
133
-
134
- const handleConfirmGlobal = () => {
135
- setConfirmGlobalOpen(false);
136
- if (pendingSubmit) {
137
- doSave(pendingSubmit.data, pendingSubmit.accountFields);
138
- setPendingSubmit(null);
139
- }
140
- };
141
-
142
- const handleCancelGlobal = () => {
143
- setConfirmGlobalOpen(false);
144
- setPendingSubmit(null);
145
- };
146
-
147
- return (
148
- <>
149
- <form onSubmit={handleSubmit(onSubmit)} className="flex flex-col h-full">
150
- <div className="overflow-y-auto overscroll-contain px-4 pb-4 lg:p-5 flex flex-col gap-5 lg:gap-6 flex-1">
151
- <span className="paragraph-medium-semibold text-gray-950">Preferências</span>
152
- <div className="flex flex-col gap-8">
153
- <div className="flex flex-col lg:flex-row items-center gap-3">
154
- <FormField
155
- label="Nome da empresa"
156
- placeholder="Digite o nome da empresa"
157
- classnameContainer={cn('w-full', !isOwner && 'cursor-not-allowed opacity-50')}
158
- value={watch('companyName')}
159
- onChange={(e) => setValue('companyName', e.target.value, { shouldDirty: true })}
160
- disabled={!isOwner}
161
- />
162
- </div>
163
-
164
- <div className="flex flex-col lg:flex-row items-center gap-3">
165
- <ComboboxField
166
- label="Idioma"
167
- placeholder="Selecione o idioma"
168
- searchPlaceholder="Buscar idioma..."
169
- containerClassName="w-full"
170
- options={LANGUAGE_OPTIONS}
171
- value={watch('language')}
172
- onChange={(value) => setValue('language', value, { shouldDirty: true })}
173
- />
174
- <ComboboxField
175
- label="Moeda"
176
- placeholder="Selecione a moeda"
177
- searchPlaceholder="Buscar moeda..."
178
- containerClassName="w-full"
179
- options={currencies}
180
- value={watch('currency')}
181
- onChange={(value) => setValue('currency', value, { shouldDirty: true })}
182
- icon={!canEditPreferences ? <IconLock className="size-4 text-gray-400" /> : undefined}
183
- disabled={!canEditPreferences}
184
- />
185
- </div>
186
-
187
- <Separator />
188
-
189
- <div className="flex flex-col gap-4">
190
- <span className="paragraph-medium-semibold text-gray-950">Exibição hora</span>
191
- <div className="flex flex-col lg:flex-row items-center gap-3">
192
- <ComboboxField
193
- label="Fuso horário"
194
- placeholder="Selecione o fuso horário"
195
- searchPlaceholder="Buscar fuso horário..."
196
- containerClassName="w-full"
197
- options={timezones}
198
- value={watch('timezone')}
199
- onChange={(value) => setValue('timezone', value, { shouldDirty: true })}
200
- icon={!canEditPreferences ? <IconLock className="size-4 text-gray-400" /> : undefined}
201
- disabled={!canEditPreferences}
202
- />
203
- <SelectField
204
- label="Formato hora"
205
- placeholder="Selecione o formato"
206
- className="h-10!"
207
- containerClassName="w-full"
208
- options={TIME_FORMAT_OPTIONS}
209
- value={watch('timeFormat')}
210
- onChange={(value) =>
211
- setValue('timeFormat', value as string, { shouldDirty: true })
212
- }
213
- icon={<IconLock className="size-4 text-gray-400" />}
214
- disabled
215
- />
216
- </div>
217
- </div>
218
-
219
- </div>
220
- </div>
221
-
222
- <div className="fixed bottom-0 left-0 right-0 lg:absolute flex items-center h-20 px-4 lg:px-5 border-t border-gray-200 justify-between bg-white z-10">
223
- <Button
224
- variant="secondary"
225
- className="h-10!"
226
- type="button"
227
- disabled={isSaving}
228
- onClick={() => {
229
- reset();
230
- onClose();
231
- }}
232
- >
233
- Cancelar
234
- </Button>
235
- <Button className="h-10!" type="submit" disabled={isSaving}>
236
- {isSaving ? 'Salvando...' : 'Salvar alterações'}
237
- </Button>
238
- </div>
239
- </form>
240
-
241
- <ConfirmGlobalPreferencesModal
242
- open={confirmGlobalOpen}
243
- onConfirm={handleConfirmGlobal}
244
- onCancel={handleCancelGlobal}
245
- />
246
- </>
247
- );
248
- }
1
+ 'use client';
2
+
3
+ import { useState, useEffect } from 'react';
4
+ import { useForm } from 'react-hook-form';
5
+ import { toast } from 'sonner';
6
+ import { IconLock } from '@tabler/icons-react';
7
+ import { cn } from '../../../infra/utils/clsx';
8
+ import { Button } from '../../ui/buttons/Button';
9
+ import { Separator } from '../../ui/data-display/Separator';
10
+ import { Toast } from '../../ui/feedback/Toast';
11
+ import { FormField } from '../../ui/form/FormField';
12
+ import { ComboboxField } from '../../ui/form/ComboboxField';
13
+ import { SelectField } from '../../ui/form/SelectField';
14
+ import ConfirmGlobalPreferencesModal from '../ConfirmGlobalPreferencesModal';
15
+ import { useAuth } from '../../../providers/auth.provider';
16
+ import { UserProfile } from '../../../modules/users/schema';
17
+ import type { UpdateAccountRequest } from '../../../modules/accounts/types';
18
+ import {
19
+ useUpdateAccountUser,
20
+ useUpdateAccount,
21
+ } from '../../../modules/accounts/hooks/useAccountManagement';
22
+ import {
23
+ LANGUAGE_OPTIONS,
24
+ TIME_FORMAT_OPTIONS,
25
+ } from '../constants';
26
+ import { useTimezones } from '../../../modules/accounts/hooks/useTimezones';
27
+ import { useCurrencies } from '../../../modules/accounts/hooks/useCurrencies';
28
+
29
+ interface PreferencesFormValues {
30
+ companyName: string;
31
+ language: string;
32
+ currency: string;
33
+ timezone: string;
34
+ timeFormat: string;
35
+ receive_sms: boolean;
36
+ receive_email: boolean;
37
+ }
38
+
39
+ interface PreferencesSectionProps {
40
+ onClose: () => void;
41
+ }
42
+
43
+ export function PreferencesSection({ onClose }: PreferencesSectionProps) {
44
+ const { data: timezones = [] } = useTimezones();
45
+ const { data: currencies = [] } = useCurrencies();
46
+ const { user, account } = useAuth();
47
+ const isOwner = user?.profile === UserProfile.owner;
48
+ const canEditPreferences = isOwner || user?.profile === UserProfile.admin;
49
+ const updateAccountUser = useUpdateAccountUser();
50
+ const updateAccount = useUpdateAccount();
51
+ const [confirmGlobalOpen, setConfirmGlobalOpen] = useState(false);
52
+ const [pendingSubmit, setPendingSubmit] = useState<{
53
+ data: PreferencesFormValues;
54
+ accountFields: UpdateAccountRequest;
55
+ } | null>(null);
56
+ const [isSaving, setIsSaving] = useState(false);
57
+
58
+ const { watch, setValue, handleSubmit, reset, formState: { dirtyFields } } =
59
+ useForm<PreferencesFormValues>({
60
+ defaultValues: {
61
+ companyName: '',
62
+ language: '',
63
+ currency: '',
64
+ timezone: '',
65
+ timeFormat: '24h',
66
+ receive_sms: false,
67
+ receive_email: false,
68
+ },
69
+ });
70
+
71
+ useEffect(() => {
72
+ if (!user || !account) return;
73
+ reset({
74
+ companyName: account.name ?? '',
75
+ language: LANGUAGE_OPTIONS.find(
76
+ (o) => o.apiValue === user.language?.toLowerCase()
77
+ )?.value ?? 'pt-BR',
78
+ currency: account.currency,
79
+ timezone: account.timezone,
80
+ timeFormat: '24h',
81
+ receive_sms: user.receive_sms ?? false,
82
+ receive_email: user.receive_email ?? false,
83
+ });
84
+ }, [user, account, reset]);
85
+
86
+ const doSave = async (data: PreferencesFormValues, accountFields: UpdateAccountRequest) => {
87
+ setIsSaving(true);
88
+ try {
89
+ const apiLanguage = LANGUAGE_OPTIONS.find((o) => o.value === data.language)?.apiValue ?? data.language.toLowerCase();
90
+ await updateAccountUser.mutateAsync({
91
+ language: apiLanguage,
92
+ receive_sms: data.receive_sms,
93
+ receive_email: data.receive_email,
94
+ });
95
+
96
+ if (canEditPreferences && Object.keys(accountFields).length > 0) {
97
+ await updateAccount.mutateAsync(accountFields);
98
+ }
99
+
100
+ reset(data);
101
+ toast.custom((t) => (
102
+ <Toast variant="success" message="Preferências salvas com sucesso" toastId={t} />
103
+ ));
104
+ onClose();
105
+ } catch (error) {
106
+ toast.custom((t) => (
107
+ <Toast
108
+ variant="error"
109
+ message={error instanceof Error ? error.message : 'Erro ao salvar preferências'}
110
+ toastId={t}
111
+ />
112
+ ));
113
+ } finally {
114
+ setIsSaving(false);
115
+ }
116
+ };
117
+
118
+ const onSubmit = (data: PreferencesFormValues) => {
119
+ const accountFields: UpdateAccountRequest = {
120
+ ...(isOwner && dirtyFields.companyName && { name: data.companyName }),
121
+ ...(canEditPreferences && dirtyFields.currency && { currency: data.currency }),
122
+ ...(canEditPreferences && dirtyFields.timezone && { timezone: data.timezone }),
123
+ };
124
+ const globalFieldChanged = Object.keys(accountFields).length > 0;
125
+
126
+ if (globalFieldChanged) {
127
+ setPendingSubmit({ data, accountFields });
128
+ setConfirmGlobalOpen(true);
129
+ } else {
130
+ doSave(data, accountFields);
131
+ }
132
+ };
133
+
134
+ const handleConfirmGlobal = () => {
135
+ setConfirmGlobalOpen(false);
136
+ if (pendingSubmit) {
137
+ doSave(pendingSubmit.data, pendingSubmit.accountFields);
138
+ setPendingSubmit(null);
139
+ }
140
+ };
141
+
142
+ const handleCancelGlobal = () => {
143
+ setConfirmGlobalOpen(false);
144
+ setPendingSubmit(null);
145
+ };
146
+
147
+ return (
148
+ <>
149
+ <form onSubmit={handleSubmit(onSubmit)} className="flex flex-col h-full">
150
+ <div className="overflow-y-auto overscroll-contain px-4 pb-4 lg:p-5 flex flex-col gap-5 lg:gap-6 flex-1">
151
+ <span className="paragraph-medium-semibold text-gray-950">Preferências</span>
152
+ <div className="flex flex-col gap-8">
153
+ <div className="flex flex-col lg:flex-row items-center gap-3">
154
+ <FormField
155
+ label="Nome da empresa"
156
+ placeholder="Digite o nome da empresa"
157
+ classnameContainer={cn('w-full', !isOwner && 'cursor-not-allowed opacity-50')}
158
+ value={watch('companyName')}
159
+ onChange={(e) => setValue('companyName', e.target.value, { shouldDirty: true })}
160
+ disabled={!isOwner}
161
+ />
162
+ </div>
163
+
164
+ <div className="flex flex-col lg:flex-row items-center gap-3">
165
+ <ComboboxField
166
+ label="Idioma"
167
+ placeholder="Selecione o idioma"
168
+ searchPlaceholder="Buscar idioma..."
169
+ containerClassName="w-full"
170
+ options={LANGUAGE_OPTIONS}
171
+ value={watch('language')}
172
+ onChange={(value) => setValue('language', value, { shouldDirty: true })}
173
+ />
174
+ <ComboboxField
175
+ label="Moeda"
176
+ placeholder="Selecione a moeda"
177
+ searchPlaceholder="Buscar moeda..."
178
+ containerClassName="w-full"
179
+ options={currencies}
180
+ value={watch('currency')}
181
+ onChange={(value) => setValue('currency', value, { shouldDirty: true })}
182
+ icon={!canEditPreferences ? <IconLock className="size-4 text-gray-400" /> : undefined}
183
+ disabled={!canEditPreferences}
184
+ />
185
+ </div>
186
+
187
+ <Separator />
188
+
189
+ <div className="flex flex-col gap-4">
190
+ <span className="paragraph-medium-semibold text-gray-950">Exibição hora</span>
191
+ <div className="flex flex-col lg:flex-row items-center gap-3">
192
+ <ComboboxField
193
+ label="Fuso horário"
194
+ placeholder="Selecione o fuso horário"
195
+ searchPlaceholder="Buscar fuso horário..."
196
+ containerClassName="w-full"
197
+ options={timezones}
198
+ value={watch('timezone')}
199
+ onChange={(value) => setValue('timezone', value, { shouldDirty: true })}
200
+ icon={!canEditPreferences ? <IconLock className="size-4 text-gray-400" /> : undefined}
201
+ disabled={!canEditPreferences}
202
+ />
203
+ <SelectField
204
+ label="Formato hora"
205
+ placeholder="Selecione o formato"
206
+ className="h-10!"
207
+ containerClassName="w-full"
208
+ options={TIME_FORMAT_OPTIONS}
209
+ value={watch('timeFormat')}
210
+ onChange={(value) =>
211
+ setValue('timeFormat', value as string, { shouldDirty: true })
212
+ }
213
+ icon={<IconLock className="size-4 text-gray-400" />}
214
+ disabled
215
+ />
216
+ </div>
217
+ </div>
218
+
219
+ </div>
220
+ </div>
221
+
222
+ <div className="fixed bottom-0 left-0 right-0 lg:absolute flex items-center h-20 px-4 lg:px-5 border-t border-gray-200 justify-between bg-white z-10">
223
+ <Button
224
+ variant="secondary"
225
+ className="h-10!"
226
+ type="button"
227
+ disabled={isSaving}
228
+ onClick={() => {
229
+ reset();
230
+ onClose();
231
+ }}
232
+ >
233
+ Cancelar
234
+ </Button>
235
+ <Button className="h-10!" type="submit" disabled={isSaving}>
236
+ {isSaving ? 'Salvando...' : 'Salvar alterações'}
237
+ </Button>
238
+ </div>
239
+ </form>
240
+
241
+ <ConfirmGlobalPreferencesModal
242
+ open={confirmGlobalOpen}
243
+ onConfirm={handleConfirmGlobal}
244
+ onCancel={handleCancelGlobal}
245
+ />
246
+ </>
247
+ );
248
+ }
@@ -1,46 +1,46 @@
1
- 'use client';
2
-
3
- import { IconAlertTriangle } from '@tabler/icons-react';
4
- import { Button } from '../../ui/buttons/Button';
5
- import { useAuth } from '../../../providers/auth.provider';
6
- import { AccountSectionType } from '../../../enums/AccountSectionType';
7
-
8
- interface SecuritySectionProps {
9
- setActiveSection: (section: AccountSectionType) => void;
10
- onClose: () => void;
11
- onDeleteAccount?: () => void;
12
- }
13
-
14
- export function SecuritySection({
15
- onClose,
16
- onDeleteAccount,
17
- }: SecuritySectionProps) {
18
- return (
19
- <div className="h-full overflow-y-auto overscroll-contain px-4 pb-20 lg:p-5 lg:pt-5 flex flex-col gap-5 lg:gap-6 lg:pb-31 lg:overscroll-auto">
20
- <span className="paragraph-medium-semibold text-gray-950 hidden lg:block">Segurança</span>
21
-
22
- <div className="flex flex-col items-center lg:items-start gap-4">
23
- <div className="size-10 rounded-lg bg-red-50 flex items-center justify-center">
24
- <IconAlertTriangle size={20} className="text-red-500" />
25
- </div>
26
-
27
- <div className="flex flex-col gap-2">
28
- <span className="paragraph-medium-semibold text-gray-950">Excluir conta</span>
29
- <span className="paragraph-small-regular text-gray-600">
30
- Esta ação é permanente e não pode ser desfeita. Todos os seus dados, projetos e configurações serão removidos definitivamente.
31
- </span>
32
- </div>
33
-
34
- {onDeleteAccount && (
35
- <button
36
- type="button"
37
- className="paragraph-small-semibold text-red-600 bg-red-50 rounded-lg px-3 py-2 cursor-pointer hover:bg-red-100 transition-colors w-fit"
38
- onClick={onDeleteAccount}
39
- >
40
- Excluir minha conta
41
- </button>
42
- )}
43
- </div>
44
- </div>
45
- );
46
- }
1
+ 'use client';
2
+
3
+ import { IconAlertTriangle } from '@tabler/icons-react';
4
+ import { Button } from '../../ui/buttons/Button';
5
+ import { useAuth } from '../../../providers/auth.provider';
6
+ import { AccountSectionType } from '../../../enums/AccountSectionType';
7
+
8
+ interface SecuritySectionProps {
9
+ setActiveSection: (section: AccountSectionType) => void;
10
+ onClose: () => void;
11
+ onDeleteAccount?: () => void;
12
+ }
13
+
14
+ export function SecuritySection({
15
+ onClose,
16
+ onDeleteAccount,
17
+ }: SecuritySectionProps) {
18
+ return (
19
+ <div className="h-full overflow-y-auto overscroll-contain px-4 pb-20 lg:p-5 lg:pt-5 flex flex-col gap-5 lg:gap-6 lg:pb-31 lg:overscroll-auto">
20
+ <span className="paragraph-medium-semibold text-gray-950 hidden lg:block">Segurança</span>
21
+
22
+ <div className="flex flex-col items-center lg:items-start gap-4">
23
+ <div className="size-10 rounded-lg bg-red-50 flex items-center justify-center">
24
+ <IconAlertTriangle size={20} className="text-red-500" />
25
+ </div>
26
+
27
+ <div className="flex flex-col gap-2">
28
+ <span className="paragraph-medium-semibold text-gray-950">Excluir conta</span>
29
+ <span className="paragraph-small-regular text-gray-600">
30
+ Esta ação é permanente e não pode ser desfeita. Todos os seus dados, projetos e configurações serão removidos definitivamente.
31
+ </span>
32
+ </div>
33
+
34
+ {onDeleteAccount && (
35
+ <button
36
+ type="button"
37
+ className="paragraph-small-semibold text-red-600 bg-red-50 rounded-lg px-3 py-2 cursor-pointer hover:bg-red-100 transition-colors w-fit"
38
+ onClick={onDeleteAccount}
39
+ >
40
+ Excluir minha conta
41
+ </button>
42
+ )}
43
+ </div>
44
+ </div>
45
+ );
46
+ }