@greatapps/common 1.1.372 → 1.1.374

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 (334) 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 +9 -1
  28. package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
  29. package/dist/components/layouts/SideBarNavigation.mjs.map +1 -1
  30. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  31. package/dist/components/layouts/WhitelabelCodes.mjs.map +1 -1
  32. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  33. package/dist/components/modals/ModalManager.mjs.map +1 -1
  34. package/dist/components/modals/Modals.mjs.map +1 -1
  35. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  36. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  37. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  38. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  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.map +1 -1
  42. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  43. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  44. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  45. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  46. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  47. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  48. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  49. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  50. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  51. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  52. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  53. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  54. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  55. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  56. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  57. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  58. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  59. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  60. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  61. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  62. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  63. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  64. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  65. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  66. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  67. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  68. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  69. package/dist/components/ui/form/FormField.mjs.map +1 -1
  70. package/dist/components/ui/form/Input.mjs.map +1 -1
  71. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  72. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  73. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  74. package/dist/components/ui/form/Select.mjs +1 -1
  75. package/dist/components/ui/form/Select.mjs.map +1 -1
  76. package/dist/components/ui/form/Switch.mjs.map +1 -1
  77. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  78. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  79. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  80. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  81. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  82. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  83. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  84. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  85. package/dist/hooks/useDebounce.mjs.map +1 -1
  86. package/dist/hooks/useDebounceState.mjs.map +1 -1
  87. package/dist/hooks/useDebouncedEffect.mjs.map +1 -1
  88. package/dist/index.mjs.map +1 -1
  89. package/dist/infra/utils/clsx.mjs.map +1 -1
  90. package/dist/infra/utils/date.mjs.map +1 -1
  91. package/dist/infra/utils/parser.mjs.map +1 -1
  92. package/dist/infra/utils/percentage.mjs.map +1 -1
  93. package/dist/middleware.mjs.map +1 -1
  94. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  95. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  96. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  97. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  98. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  99. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  100. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  101. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  102. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  103. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  104. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  105. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  106. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  107. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  108. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  109. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  110. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  111. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  112. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  113. package/dist/modules/cards/actions/list-cards.action.mjs.map +1 -1
  114. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  115. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  116. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  117. package/dist/modules/cards/types.mjs.map +1 -1
  118. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  119. package/dist/modules/plans/actions/find-plan-by-id.action.mjs.map +1 -1
  120. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  121. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  122. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  123. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  124. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  125. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  126. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  127. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  128. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  129. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  130. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  131. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  132. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  133. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  134. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  135. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  136. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  137. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  138. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  139. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  140. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  141. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  142. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  143. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  144. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  145. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  146. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  147. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  148. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  149. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  150. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  151. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  152. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  153. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  154. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  155. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  156. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  157. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  158. package/dist/store/useAccountModals.mjs.map +1 -1
  159. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  160. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  161. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  162. package/dist/store/useModalManager.mjs.map +1 -1
  163. package/dist/utils/constants/br-states.mjs.map +1 -1
  164. package/dist/utils/countries.mjs.map +1 -1
  165. package/dist/utils/safeServerAction.mjs.map +1 -1
  166. package/dist/utils/withAction.mjs.map +1 -1
  167. package/package.json +89 -89
  168. package/src/components/account/AccountModals.tsx +17 -17
  169. package/src/components/account/ConfigurationsMyAccountModal.tsx +146 -146
  170. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  171. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
  172. package/src/components/account/DeleteAccountModal.tsx +130 -130
  173. package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
  174. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  175. package/src/components/account/TwoFactorAuthModal.tsx +215 -215
  176. package/src/components/account/hooks/useChangePhoneForm.tsx +107 -107
  177. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  178. package/src/components/account/sections/ChangeEmailModal.tsx +225 -225
  179. package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
  180. package/src/components/account/sections/ChangePhoneModal.tsx +245 -245
  181. package/src/components/account/sections/MyProfileSection.tsx +327 -327
  182. package/src/components/account/sections/PreferencesSection.tsx +248 -248
  183. package/src/components/account/sections/SecuritySection.tsx +46 -46
  184. package/src/components/embeds/CrispEmbed.tsx +101 -101
  185. package/src/components/embeds/FrillEmbed.tsx +119 -119
  186. package/src/components/handlers/SearchParamsHandler.tsx +61 -61
  187. package/src/components/layouts/AppMobileNavBar.tsx +118 -118
  188. package/src/components/layouts/AppNavBar.tsx +46 -46
  189. package/src/components/layouts/CollapsibleSidebar.tsx +67 -67
  190. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  191. package/src/components/layouts/NavBar.tsx +172 -172
  192. package/src/components/layouts/NotificationsPopover.tsx +115 -115
  193. package/src/components/layouts/ProfilePopover.tsx +178 -170
  194. package/src/components/layouts/SideBarNavigation.tsx +62 -62
  195. package/src/components/layouts/UsersSelectorPopover.tsx +234 -234
  196. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  197. package/src/components/modals/BuyCreditsModal.tsx +314 -314
  198. package/src/components/modals/ModalManager.tsx +29 -29
  199. package/src/components/modals/Modals.tsx +26 -26
  200. package/src/components/modals/cards/AddCardModal.tsx +260 -260
  201. package/src/components/modals/cards/CardFormFields.tsx +294 -294
  202. package/src/components/navigation/CancelledSubscriptionBanner.tsx +60 -60
  203. package/src/components/navigation/NavItemsContext.ts +20 -20
  204. package/src/components/navigation/ProjectSelectorPopover.tsx +160 -160
  205. package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
  206. package/src/components/navigation/subcomponents/ProjectSelector.tsx +160 -160
  207. package/src/components/pages/NotFoundPage.tsx +50 -50
  208. package/src/components/pages/notifications/Notifications.tsx +160 -160
  209. package/src/components/ui/buttons/Button.tsx +57 -57
  210. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  211. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  212. package/src/components/ui/data-display/Accordion.tsx +81 -81
  213. package/src/components/ui/data-display/Badge.tsx +47 -47
  214. package/src/components/ui/data-display/Card.tsx +93 -93
  215. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  216. package/src/components/ui/data-display/CardItem.tsx +75 -75
  217. package/src/components/ui/data-display/Pagination.tsx +126 -126
  218. package/src/components/ui/data-display/PaymentInfoCard.tsx +186 -186
  219. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  220. package/src/components/ui/data-display/Separator.tsx +29 -29
  221. package/src/components/ui/data-display/Table.tsx +117 -117
  222. package/src/components/ui/data-display/Tabs.tsx +67 -67
  223. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  224. package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
  225. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  226. package/src/components/ui/feedback/Progress.tsx +40 -40
  227. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  228. package/src/components/ui/feedback/Toast.tsx +101 -101
  229. package/src/components/ui/form/Calendar.tsx +228 -228
  230. package/src/components/ui/form/Checkbox.tsx +31 -31
  231. package/src/components/ui/form/ComboboxField.tsx +154 -154
  232. package/src/components/ui/form/DatePicker.tsx +97 -97
  233. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  234. package/src/components/ui/form/FormField.tsx +131 -131
  235. package/src/components/ui/form/Input.tsx +20 -20
  236. package/src/components/ui/form/InputOtp.tsx +80 -80
  237. package/src/components/ui/form/PhoneInput.tsx +208 -208
  238. package/src/components/ui/form/RadioGroup.tsx +45 -45
  239. package/src/components/ui/form/Select.tsx +200 -200
  240. package/src/components/ui/form/Switch.tsx +32 -32
  241. package/src/components/ui/form/Textarea.tsx +19 -19
  242. package/src/components/ui/overlay/Command.tsx +185 -185
  243. package/src/components/ui/overlay/Dialog.tsx +151 -151
  244. package/src/components/ui/overlay/Popover.tsx +49 -49
  245. package/src/components/ui/overlay/Sheet.tsx +166 -166
  246. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  247. package/src/components/widgets/notifications/NotificationCard.tsx +68 -68
  248. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  249. package/src/hooks/useDebounce.ts +26 -26
  250. package/src/hooks/useDebounceState.ts +11 -11
  251. package/src/hooks/useDebouncedEffect.ts +69 -69
  252. package/src/index.ts +391 -391
  253. package/src/infra/utils/clsx.ts +6 -6
  254. package/src/infra/utils/date.ts +7 -7
  255. package/src/infra/utils/parser.ts +52 -52
  256. package/src/infra/utils/percentage.ts +42 -42
  257. package/src/middleware.ts +4 -4
  258. package/src/modules/accounts/actions/account-management.action.ts +107 -107
  259. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  260. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  261. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  262. package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
  263. package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
  264. package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
  265. package/src/modules/accounts/hooks/useTimezones.ts +15 -15
  266. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  267. package/src/modules/accounts/services/account.service.ts +239 -239
  268. package/src/modules/accounts/types.ts +225 -225
  269. package/src/modules/auth/actions/validate-session.action.ts +56 -56
  270. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  271. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  272. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  273. package/src/modules/auth/hooks/useManagementPermissions.ts +45 -45
  274. package/src/modules/auth/types/management-permission.type.ts +7 -7
  275. package/src/modules/auth/utils/assert-management-permission.ts +46 -46
  276. package/src/modules/auth/utils/assert-management-subscription.ts +27 -27
  277. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  278. package/src/modules/cards/actions/create-card.action.ts +9 -9
  279. package/src/modules/cards/actions/list-cards.action.ts +8 -8
  280. package/src/modules/cards/hooks/cards.hook.ts +14 -14
  281. package/src/modules/cards/hooks/create-card.hook.ts +18 -18
  282. package/src/modules/cards/services/cards.service.ts +51 -51
  283. package/src/modules/cards/types.ts +32 -32
  284. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  285. package/src/modules/plans/actions/find-plan-by-id.action.ts +8 -8
  286. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +17 -17
  287. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +13 -13
  288. package/src/modules/plans/services/plans.service.ts +36 -36
  289. package/src/modules/plans/types/plan.type.ts +21 -21
  290. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  291. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  292. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  293. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  294. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  295. package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
  296. package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
  297. package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
  298. package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
  299. package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
  300. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  301. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  302. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  303. package/src/modules/subscriptions/constants/query-keys.constants.ts +1 -1
  304. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  305. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
  306. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +16 -16
  307. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +25 -25
  308. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +39 -39
  309. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  310. package/src/modules/subscriptions/types/calculate-subscription.type.ts +75 -75
  311. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  312. package/src/modules/subscriptions/utils/has-subscription-expired.ts +8 -8
  313. package/src/modules/subscriptions/utils/periodicity.ts +52 -52
  314. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  315. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  316. package/src/modules/users/action/list-messages.action.ts +12 -12
  317. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  318. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  319. package/src/modules/users/hooks/messages.hook.ts +60 -60
  320. package/src/modules/users/services/messages.service.ts +48 -48
  321. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  322. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  323. package/src/modules/whitelabel/schema.ts +84 -84
  324. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  325. package/src/providers/whitelabel.provider.tsx +54 -54
  326. package/src/store/useAccountModals.ts +55 -55
  327. package/src/store/useBuyCreditsModal.ts +21 -21
  328. package/src/store/useDesktopSidebarStore.ts +47 -47
  329. package/src/store/useMdSidebarStore.ts +34 -34
  330. package/src/store/useModalManager.ts +104 -104
  331. package/src/utils/constants/br-states.ts +29 -29
  332. package/src/utils/countries.ts +224 -224
  333. package/src/utils/safeServerAction.ts +21 -21
  334. package/src/utils/withAction.ts +13 -13
@@ -1,294 +1,294 @@
1
- 'use client';
2
-
3
- import { UseFormReturn } from 'react-hook-form';
4
- import { useViaCep } from '../../../modules/accounts/hooks/useViaCep';
5
- import { FormField } from '../../ui/form/FormField';
6
- import { SelectField } from '../../ui/form/SelectField';
7
- import { formatCPF, formatCNPJ, formatPostalCode } from '../../../utils/format/masks';
8
- import z from 'zod';
9
- import { CardCvcElement, CardExpiryElement, CardNumberElement } from '@stripe/react-stripe-js';
10
-
11
- const stripeElementOptions = {
12
- style: {
13
- base: {
14
- fontSize: '16px',
15
- color: '#030712',
16
- fontFamily: 'Inter, sans-serif',
17
- '::placeholder': {
18
- color: '#9ca3af',
19
- },
20
- },
21
- },
22
- };
23
-
24
- export const cardFormSchema = z
25
- .object({
26
- name: z.string().min(1, 'Nome é obrigatório'),
27
- country: z.string().min(1, 'País é obrigatório'),
28
- personType: z.enum(['pf', 'pj']),
29
- cpf: z.string().optional(),
30
- cnpj: z.string().optional(),
31
- fullName: z.string().min(1, 'Nome completo é obrigatório'),
32
- cep: z.string().min(9, 'CEP é obrigatório'),
33
- street: z.string().min(1, 'Endereço é obrigatório'),
34
- streetNumber: z.string().min(1, 'Número é obrigatório'),
35
- city: z.string().min(1, 'Cidade é obrigatória'),
36
- state: z.string().min(1, 'UF é obrigatório'),
37
- complement: z.string().optional(),
38
- })
39
- .refine(
40
- (data) => {
41
- if (data.personType === 'pf') return !!data.cpf && data.cpf.length >= 14;
42
- return !!data.cnpj && data.cnpj.length >= 18;
43
- },
44
- {
45
- message: 'Documento é obrigatório',
46
- path: ['cpf'],
47
- }
48
- );
49
-
50
- export type CardFormData = z.infer<typeof cardFormSchema>;
51
-
52
- export type StripeElementsStatus = {
53
- cardNumber: boolean;
54
- cardExpiry: boolean;
55
- cardCvc: boolean;
56
- };
57
-
58
- export const STEP1_FIELDS = ['name', 'country', 'personType', 'cpf', 'cnpj'] as const;
59
-
60
- type CardFormFieldsProps = {
61
- readonly form: UseFormReturn<CardFormData>;
62
- readonly onStripeChange: (field: keyof StripeElementsStatus, complete: boolean) => void;
63
- readonly stripeErrors: { cardNumber?: string; cardExpiry?: string; cardCvc?: string };
64
- };
65
-
66
- export function CardFormFields({ form, onStripeChange, stripeErrors }: CardFormFieldsProps) {
67
- const {
68
- register,
69
- watch,
70
- setValue,
71
- formState: { errors },
72
- } = form;
73
-
74
- const personType = watch('personType');
75
-
76
- return (
77
- <div className="flex flex-col gap-5">
78
- <FormField
79
- label="Nome impresso no cartão"
80
- placeholder="Digite aqui"
81
- {...register('name')}
82
- error={!!errors.name}
83
- errorMessage={errors.name?.message}
84
- />
85
-
86
- <div className="flex flex-col gap-1.5">
87
- <label className="paragraph-xsmall-semibold text-zinc-600">Número do cartão</label>
88
- <div className="h-10 px-3 flex items-center w-full border border-zinc-200 rounded-lg bg-white transition-colors focus-within:border-zinc-400 relative">
89
- <div className="w-full">
90
- <CardNumberElement
91
- options={{ ...stripeElementOptions, showIcon: true }}
92
- onChange={(e: { complete: boolean }) => onStripeChange('cardNumber', e.complete)}
93
- />
94
- </div>
95
- </div>
96
- {stripeErrors.cardNumber && (
97
- <p className="paragraph-xsmall-semibold text-red-600">{stripeErrors.cardNumber}</p>
98
- )}
99
- </div>
100
-
101
- <div className="flex gap-4">
102
- <div className="flex-1 flex flex-col gap-1.5">
103
- <label className="paragraph-xsmall-semibold text-zinc-600">Data de validade</label>
104
- <div className="h-10 px-3 flex items-center w-full border border-zinc-200 rounded-lg bg-white transition-colors focus-within:border-zinc-400">
105
- <div className="w-full">
106
- <CardExpiryElement
107
- options={stripeElementOptions}
108
- onChange={(e: { complete: boolean }) => onStripeChange('cardExpiry', e.complete)}
109
- />
110
- </div>
111
- </div>
112
- {stripeErrors.cardExpiry && (
113
- <p className="paragraph-xsmall-semibold text-red-600">{stripeErrors.cardExpiry}</p>
114
- )}
115
- </div>
116
-
117
- <div className="flex-1 flex flex-col gap-1.5">
118
- <label className="paragraph-xsmall-semibold text-zinc-600">CVC</label>
119
- <div className="h-10 px-3 flex items-center w-full border border-zinc-200 rounded-lg bg-white transition-colors focus-within:border-zinc-400">
120
- <div className="w-full">
121
- <CardCvcElement
122
- options={stripeElementOptions}
123
- onChange={(e: { complete: boolean }) => onStripeChange('cardCvc', e.complete)}
124
- />
125
- </div>
126
- </div>
127
- {stripeErrors.cardCvc && (
128
- <p className="paragraph-xsmall-semibold text-red-600">{stripeErrors.cardCvc}</p>
129
- )}
130
- </div>
131
- </div>
132
-
133
- <SelectField
134
- label="País"
135
- placeholder="Selecione"
136
- value={watch('country')}
137
- onChange={(value) => setValue('country', value as string)}
138
- options={[
139
- { value: 'BR', label: 'Brasil' },
140
- { value: 'ES', label: 'Espanha' },
141
- { value: 'US', label: 'Estados Unidos' },
142
- ]}
143
- />
144
-
145
- <div className="flex gap-4">
146
- <SelectField
147
- label="Tipo de pessoa"
148
- placeholder="Selecione"
149
- value={personType}
150
- onChange={(value) => {
151
- setValue('personType', value as 'pf' | 'pj');
152
- setValue('cpf', '');
153
- setValue('cnpj', '');
154
- }}
155
- options={[
156
- { value: 'pf', label: 'Pessoa física' },
157
- { value: 'pj', label: 'Pessoa jurídica' },
158
- ]}
159
- containerClassName="flex-1"
160
- />
161
- <div className="flex-1">
162
- {personType === 'pj' ? (
163
- <FormField
164
- label="CNPJ"
165
- placeholder="__.___.___/____-__"
166
- {...register('cnpj', {
167
- onChange: (e) => {
168
- setValue('cnpj', formatCNPJ(e.target.value));
169
- },
170
- })}
171
- error={!!errors.cpf}
172
- errorMessage={errors.cpf?.message}
173
- />
174
- ) : (
175
- <FormField
176
- label="CPF"
177
- placeholder="___.___.___-__"
178
- {...register('cpf', {
179
- onChange: (e) => {
180
- setValue('cpf', formatCPF(e.target.value));
181
- },
182
- })}
183
- error={!!errors.cpf}
184
- errorMessage={errors.cpf?.message}
185
- />
186
- )}
187
- </div>
188
- </div>
189
- </div>
190
- );
191
- }
192
-
193
- type BillingFormFieldsProps = {
194
- readonly form: UseFormReturn<CardFormData>;
195
- };
196
-
197
- export function BillingFormFields({ form }: BillingFormFieldsProps) {
198
- const {
199
- register,
200
- setValue,
201
- formState: { errors },
202
- } = form;
203
-
204
- const { mutateAsync: lookupCep } = useViaCep();
205
-
206
- const handleCepChange = (rawValue: string) => {
207
- const masked = formatPostalCode(rawValue);
208
- setValue('cep', masked);
209
-
210
- const digits = rawValue.replace(/\D/g, '');
211
- if (digits.length === 8) {
212
- lookupCep(digits).then((data) => {
213
- setValue('street', data.logradouro, { shouldValidate: true });
214
- setValue('city', data.localidade, { shouldValidate: true });
215
- setValue('state', data.uf, { shouldValidate: true });
216
- }).catch(() => {
217
- // silently ignore — user can fill manually
218
- });
219
- }
220
- };
221
-
222
- return (
223
- <div className="flex flex-col gap-5">
224
- <FormField
225
- label="Nome completo"
226
- placeholder="Digite aqui"
227
- {...register('fullName')}
228
- error={!!errors.fullName}
229
- errorMessage={errors.fullName?.message}
230
- />
231
-
232
- <FormField
233
- label="CEP"
234
- placeholder="_____-___"
235
- {...register('cep', {
236
- onChange: (e) => handleCepChange(e.target.value),
237
- })}
238
- error={!!errors.cep}
239
- errorMessage={errors.cep?.message}
240
- />
241
-
242
- <div className="flex gap-4">
243
- <div className="flex-[4]">
244
- <FormField
245
- label="Endereço"
246
- placeholder=""
247
- {...register('street')}
248
- error={!!errors.street}
249
- errorMessage={errors.street?.message}
250
- />
251
- </div>
252
- <div className="flex-[1]">
253
- <FormField
254
- label="Número"
255
- placeholder=""
256
- {...register('streetNumber')}
257
- error={!!errors.streetNumber}
258
- errorMessage={errors.streetNumber?.message}
259
- />
260
- </div>
261
- </div>
262
-
263
- <div className="flex gap-4">
264
- <div className="flex-1">
265
- <FormField
266
- label="Cidade"
267
- placeholder=""
268
- {...register('city')}
269
- error={!!errors.city}
270
- errorMessage={errors.city?.message}
271
- />
272
- </div>
273
- <div className="flex-1">
274
- <FormField
275
- label="UF"
276
- placeholder=""
277
- {...register('state')}
278
- error={!!errors.state}
279
- errorMessage={errors.state?.message}
280
- />
281
- </div>
282
- </div>
283
-
284
- <FormField
285
- label="Complemento"
286
- optional
287
- placeholder=""
288
- {...register('complement')}
289
- error={!!errors.complement}
290
- errorMessage={errors.complement?.message}
291
- />
292
- </div>
293
- );
294
- }
1
+ 'use client';
2
+
3
+ import { UseFormReturn } from 'react-hook-form';
4
+ import { useViaCep } from '../../../modules/accounts/hooks/useViaCep';
5
+ import { FormField } from '../../ui/form/FormField';
6
+ import { SelectField } from '../../ui/form/SelectField';
7
+ import { formatCPF, formatCNPJ, formatPostalCode } from '../../../utils/format/masks';
8
+ import z from 'zod';
9
+ import { CardCvcElement, CardExpiryElement, CardNumberElement } from '@stripe/react-stripe-js';
10
+
11
+ const stripeElementOptions = {
12
+ style: {
13
+ base: {
14
+ fontSize: '16px',
15
+ color: '#030712',
16
+ fontFamily: 'Inter, sans-serif',
17
+ '::placeholder': {
18
+ color: '#9ca3af',
19
+ },
20
+ },
21
+ },
22
+ };
23
+
24
+ export const cardFormSchema = z
25
+ .object({
26
+ name: z.string().min(1, 'Nome é obrigatório'),
27
+ country: z.string().min(1, 'País é obrigatório'),
28
+ personType: z.enum(['pf', 'pj']),
29
+ cpf: z.string().optional(),
30
+ cnpj: z.string().optional(),
31
+ fullName: z.string().min(1, 'Nome completo é obrigatório'),
32
+ cep: z.string().min(9, 'CEP é obrigatório'),
33
+ street: z.string().min(1, 'Endereço é obrigatório'),
34
+ streetNumber: z.string().min(1, 'Número é obrigatório'),
35
+ city: z.string().min(1, 'Cidade é obrigatória'),
36
+ state: z.string().min(1, 'UF é obrigatório'),
37
+ complement: z.string().optional(),
38
+ })
39
+ .refine(
40
+ (data) => {
41
+ if (data.personType === 'pf') return !!data.cpf && data.cpf.length >= 14;
42
+ return !!data.cnpj && data.cnpj.length >= 18;
43
+ },
44
+ {
45
+ message: 'Documento é obrigatório',
46
+ path: ['cpf'],
47
+ }
48
+ );
49
+
50
+ export type CardFormData = z.infer<typeof cardFormSchema>;
51
+
52
+ export type StripeElementsStatus = {
53
+ cardNumber: boolean;
54
+ cardExpiry: boolean;
55
+ cardCvc: boolean;
56
+ };
57
+
58
+ export const STEP1_FIELDS = ['name', 'country', 'personType', 'cpf', 'cnpj'] as const;
59
+
60
+ type CardFormFieldsProps = {
61
+ readonly form: UseFormReturn<CardFormData>;
62
+ readonly onStripeChange: (field: keyof StripeElementsStatus, complete: boolean) => void;
63
+ readonly stripeErrors: { cardNumber?: string; cardExpiry?: string; cardCvc?: string };
64
+ };
65
+
66
+ export function CardFormFields({ form, onStripeChange, stripeErrors }: CardFormFieldsProps) {
67
+ const {
68
+ register,
69
+ watch,
70
+ setValue,
71
+ formState: { errors },
72
+ } = form;
73
+
74
+ const personType = watch('personType');
75
+
76
+ return (
77
+ <div className="flex flex-col gap-5">
78
+ <FormField
79
+ label="Nome impresso no cartão"
80
+ placeholder="Digite aqui"
81
+ {...register('name')}
82
+ error={!!errors.name}
83
+ errorMessage={errors.name?.message}
84
+ />
85
+
86
+ <div className="flex flex-col gap-1.5">
87
+ <label className="paragraph-xsmall-semibold text-zinc-600">Número do cartão</label>
88
+ <div className="h-10 px-3 flex items-center w-full border border-zinc-200 rounded-lg bg-white transition-colors focus-within:border-zinc-400 relative">
89
+ <div className="w-full">
90
+ <CardNumberElement
91
+ options={{ ...stripeElementOptions, showIcon: true }}
92
+ onChange={(e: { complete: boolean }) => onStripeChange('cardNumber', e.complete)}
93
+ />
94
+ </div>
95
+ </div>
96
+ {stripeErrors.cardNumber && (
97
+ <p className="paragraph-xsmall-semibold text-red-600">{stripeErrors.cardNumber}</p>
98
+ )}
99
+ </div>
100
+
101
+ <div className="flex gap-4">
102
+ <div className="flex-1 flex flex-col gap-1.5">
103
+ <label className="paragraph-xsmall-semibold text-zinc-600">Data de validade</label>
104
+ <div className="h-10 px-3 flex items-center w-full border border-zinc-200 rounded-lg bg-white transition-colors focus-within:border-zinc-400">
105
+ <div className="w-full">
106
+ <CardExpiryElement
107
+ options={stripeElementOptions}
108
+ onChange={(e: { complete: boolean }) => onStripeChange('cardExpiry', e.complete)}
109
+ />
110
+ </div>
111
+ </div>
112
+ {stripeErrors.cardExpiry && (
113
+ <p className="paragraph-xsmall-semibold text-red-600">{stripeErrors.cardExpiry}</p>
114
+ )}
115
+ </div>
116
+
117
+ <div className="flex-1 flex flex-col gap-1.5">
118
+ <label className="paragraph-xsmall-semibold text-zinc-600">CVC</label>
119
+ <div className="h-10 px-3 flex items-center w-full border border-zinc-200 rounded-lg bg-white transition-colors focus-within:border-zinc-400">
120
+ <div className="w-full">
121
+ <CardCvcElement
122
+ options={stripeElementOptions}
123
+ onChange={(e: { complete: boolean }) => onStripeChange('cardCvc', e.complete)}
124
+ />
125
+ </div>
126
+ </div>
127
+ {stripeErrors.cardCvc && (
128
+ <p className="paragraph-xsmall-semibold text-red-600">{stripeErrors.cardCvc}</p>
129
+ )}
130
+ </div>
131
+ </div>
132
+
133
+ <SelectField
134
+ label="País"
135
+ placeholder="Selecione"
136
+ value={watch('country')}
137
+ onChange={(value) => setValue('country', value as string)}
138
+ options={[
139
+ { value: 'BR', label: 'Brasil' },
140
+ { value: 'ES', label: 'Espanha' },
141
+ { value: 'US', label: 'Estados Unidos' },
142
+ ]}
143
+ />
144
+
145
+ <div className="flex gap-4">
146
+ <SelectField
147
+ label="Tipo de pessoa"
148
+ placeholder="Selecione"
149
+ value={personType}
150
+ onChange={(value) => {
151
+ setValue('personType', value as 'pf' | 'pj');
152
+ setValue('cpf', '');
153
+ setValue('cnpj', '');
154
+ }}
155
+ options={[
156
+ { value: 'pf', label: 'Pessoa física' },
157
+ { value: 'pj', label: 'Pessoa jurídica' },
158
+ ]}
159
+ containerClassName="flex-1"
160
+ />
161
+ <div className="flex-1">
162
+ {personType === 'pj' ? (
163
+ <FormField
164
+ label="CNPJ"
165
+ placeholder="__.___.___/____-__"
166
+ {...register('cnpj', {
167
+ onChange: (e) => {
168
+ setValue('cnpj', formatCNPJ(e.target.value));
169
+ },
170
+ })}
171
+ error={!!errors.cpf}
172
+ errorMessage={errors.cpf?.message}
173
+ />
174
+ ) : (
175
+ <FormField
176
+ label="CPF"
177
+ placeholder="___.___.___-__"
178
+ {...register('cpf', {
179
+ onChange: (e) => {
180
+ setValue('cpf', formatCPF(e.target.value));
181
+ },
182
+ })}
183
+ error={!!errors.cpf}
184
+ errorMessage={errors.cpf?.message}
185
+ />
186
+ )}
187
+ </div>
188
+ </div>
189
+ </div>
190
+ );
191
+ }
192
+
193
+ type BillingFormFieldsProps = {
194
+ readonly form: UseFormReturn<CardFormData>;
195
+ };
196
+
197
+ export function BillingFormFields({ form }: BillingFormFieldsProps) {
198
+ const {
199
+ register,
200
+ setValue,
201
+ formState: { errors },
202
+ } = form;
203
+
204
+ const { mutateAsync: lookupCep } = useViaCep();
205
+
206
+ const handleCepChange = (rawValue: string) => {
207
+ const masked = formatPostalCode(rawValue);
208
+ setValue('cep', masked);
209
+
210
+ const digits = rawValue.replace(/\D/g, '');
211
+ if (digits.length === 8) {
212
+ lookupCep(digits).then((data) => {
213
+ setValue('street', data.logradouro, { shouldValidate: true });
214
+ setValue('city', data.localidade, { shouldValidate: true });
215
+ setValue('state', data.uf, { shouldValidate: true });
216
+ }).catch(() => {
217
+ // silently ignore — user can fill manually
218
+ });
219
+ }
220
+ };
221
+
222
+ return (
223
+ <div className="flex flex-col gap-5">
224
+ <FormField
225
+ label="Nome completo"
226
+ placeholder="Digite aqui"
227
+ {...register('fullName')}
228
+ error={!!errors.fullName}
229
+ errorMessage={errors.fullName?.message}
230
+ />
231
+
232
+ <FormField
233
+ label="CEP"
234
+ placeholder="_____-___"
235
+ {...register('cep', {
236
+ onChange: (e) => handleCepChange(e.target.value),
237
+ })}
238
+ error={!!errors.cep}
239
+ errorMessage={errors.cep?.message}
240
+ />
241
+
242
+ <div className="flex gap-4">
243
+ <div className="flex-[4]">
244
+ <FormField
245
+ label="Endereço"
246
+ placeholder=""
247
+ {...register('street')}
248
+ error={!!errors.street}
249
+ errorMessage={errors.street?.message}
250
+ />
251
+ </div>
252
+ <div className="flex-[1]">
253
+ <FormField
254
+ label="Número"
255
+ placeholder=""
256
+ {...register('streetNumber')}
257
+ error={!!errors.streetNumber}
258
+ errorMessage={errors.streetNumber?.message}
259
+ />
260
+ </div>
261
+ </div>
262
+
263
+ <div className="flex gap-4">
264
+ <div className="flex-1">
265
+ <FormField
266
+ label="Cidade"
267
+ placeholder=""
268
+ {...register('city')}
269
+ error={!!errors.city}
270
+ errorMessage={errors.city?.message}
271
+ />
272
+ </div>
273
+ <div className="flex-1">
274
+ <FormField
275
+ label="UF"
276
+ placeholder=""
277
+ {...register('state')}
278
+ error={!!errors.state}
279
+ errorMessage={errors.state?.message}
280
+ />
281
+ </div>
282
+ </div>
283
+
284
+ <FormField
285
+ label="Complemento"
286
+ optional
287
+ placeholder=""
288
+ {...register('complement')}
289
+ error={!!errors.complement}
290
+ errorMessage={errors.complement?.message}
291
+ />
292
+ </div>
293
+ );
294
+ }