@greatapps/common 1.1.382 → 1.1.384

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