@greatapps/common 1.1.381 → 1.1.383

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 +26 -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 +28 -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,60 +1,60 @@
1
- 'use client';
2
-
3
- import { useState, useEffect, useCallback } from 'react';
4
- import { IconAlertOctagon, IconX } from '@tabler/icons-react';
5
- import { formatShortDate } from '../../infra/utils/date';
6
- import { useActiveSubscription } from '../../modules/subscriptions/hooks/find-active-subscription.hook';
7
-
8
- interface CancelledSubscriptionBannerProps {
9
- onReactivate?: () => void;
10
- }
11
-
12
- export function CancelledSubscriptionBanner({ onReactivate }: CancelledSubscriptionBannerProps) {
13
- const { data: { data: [subscription] = [] } = {} } = useActiveSubscription();
14
- const [visible, setVisible] = useState(true);
15
- const [animated, setAnimated] = useState(false);
16
-
17
- useEffect(() => {
18
- const timer = setTimeout(() => setAnimated(true), 50);
19
- return () => clearTimeout(timer);
20
- }, []);
21
-
22
- const dismiss = useCallback(() => setVisible(false), []);
23
- const dueDate = new Date(subscription?.date_due);
24
- const today = new Date();
25
- const isPastDue = today >= dueDate;
26
- const formattedDate = formatShortDate(dueDate);
27
-
28
- if (!subscription?.date_cancellation || isPastDue || !visible) return null;
29
-
30
- return (
31
- <div className="fixed top-[80px] md:top-0 lg:left-[273px] left-0 right-0 z-[60] flex justify-center pointer-events-none px-4 lg:px-0">
32
- <div
33
- className={`flex flex-col sm:flex-row items-start sm:items-center justify-between bg-red-500 rounded-lg px-3 py-2 sm:py-1 w-full lg:w-[805px] max-w-full pointer-events-auto transition-transform duration-500 ease-out gap-2 sm:gap-0 ${animated ? 'translate-y-0 md:translate-y-9' : '-translate-y-full'}`}
34
- >
35
- <div className="flex items-center gap-2 flex-1 w-full sm:w-auto">
36
- <IconAlertOctagon size={16} className="text-white shrink-0" />
37
- <span className="paragraph-xsmall-semibold text-white">
38
- {isPastDue
39
- ? 'Sua assinatura foi cancelada e suas páginas foram retiradas do ar.'
40
- : `Assinatura cancelada! Suas páginas serão retiradas do ar no dia ${formattedDate}!`}
41
- </span>
42
- </div>
43
- <div className="flex items-center gap-1.5 w-full sm:w-auto justify-between sm:justify-start">
44
- <button
45
- type="button"
46
- className="flex items-center justify-center p-1.5 cursor-pointer"
47
- onClick={onReactivate}
48
- >
49
- <span className="paragraph-xsmall-semibold text-white underline">
50
- Reativar assinatura
51
- </span>
52
- </button>
53
- <button type="button" className="cursor-pointer shrink-0" onClick={dismiss}>
54
- <IconX size={18} className="text-red-200" />
55
- </button>
56
- </div>
57
- </div>
58
- </div>
59
- );
60
- }
1
+ 'use client';
2
+
3
+ import { useState, useEffect, useCallback } from 'react';
4
+ import { IconAlertOctagon, IconX } from '@tabler/icons-react';
5
+ import { formatShortDate } from '../../infra/utils/date';
6
+ import { useActiveSubscription } from '../../modules/subscriptions/hooks/find-active-subscription.hook';
7
+
8
+ interface CancelledSubscriptionBannerProps {
9
+ onReactivate?: () => void;
10
+ }
11
+
12
+ export function CancelledSubscriptionBanner({ onReactivate }: CancelledSubscriptionBannerProps) {
13
+ const { data: { data: [subscription] = [] } = {} } = useActiveSubscription();
14
+ const [visible, setVisible] = useState(true);
15
+ const [animated, setAnimated] = useState(false);
16
+
17
+ useEffect(() => {
18
+ const timer = setTimeout(() => setAnimated(true), 50);
19
+ return () => clearTimeout(timer);
20
+ }, []);
21
+
22
+ const dismiss = useCallback(() => setVisible(false), []);
23
+ const dueDate = new Date(subscription?.date_due);
24
+ const today = new Date();
25
+ const isPastDue = today >= dueDate;
26
+ const formattedDate = formatShortDate(dueDate);
27
+
28
+ if (!subscription?.date_cancellation || isPastDue || !visible) return null;
29
+
30
+ return (
31
+ <div className="fixed top-[80px] md:top-0 lg:left-[273px] left-0 right-0 z-[60] flex justify-center pointer-events-none px-4 lg:px-0">
32
+ <div
33
+ className={`flex flex-col sm:flex-row items-start sm:items-center justify-between bg-red-500 rounded-lg px-3 py-2 sm:py-1 w-full lg:w-[805px] max-w-full pointer-events-auto transition-transform duration-500 ease-out gap-2 sm:gap-0 ${animated ? 'translate-y-0 md:translate-y-9' : '-translate-y-full'}`}
34
+ >
35
+ <div className="flex items-center gap-2 flex-1 w-full sm:w-auto">
36
+ <IconAlertOctagon size={16} className="text-white shrink-0" />
37
+ <span className="paragraph-xsmall-semibold text-white">
38
+ {isPastDue
39
+ ? 'Sua assinatura foi cancelada e suas páginas foram retiradas do ar.'
40
+ : `Assinatura cancelada! Suas páginas serão retiradas do ar no dia ${formattedDate}!`}
41
+ </span>
42
+ </div>
43
+ <div className="flex items-center gap-1.5 w-full sm:w-auto justify-between sm:justify-start">
44
+ <button
45
+ type="button"
46
+ className="flex items-center justify-center p-1.5 cursor-pointer"
47
+ onClick={onReactivate}
48
+ >
49
+ <span className="paragraph-xsmall-semibold text-white underline">
50
+ Reativar assinatura
51
+ </span>
52
+ </button>
53
+ <button type="button" className="cursor-pointer shrink-0" onClick={dismiss}>
54
+ <IconX size={18} className="text-red-200" />
55
+ </button>
56
+ </div>
57
+ </div>
58
+ </div>
59
+ );
60
+ }
@@ -1,20 +1,20 @@
1
- 'use client';
2
-
3
- import { createContext, useContext } from 'react';
4
- import type { NavItemConfig } from './subcomponents/NavItems';
5
-
6
- interface NavItemsContextValue {
7
- navItems: NavItemConfig[];
8
- setNavItems: (items: NavItemConfig[]) => void;
9
- mobileVariant: 'sheet' | 'tabs';
10
- }
11
-
12
- export const NavItemsContext = createContext<NavItemsContextValue>({
13
- navItems: [],
14
- setNavItems: () => {},
15
- mobileVariant: 'sheet',
16
- });
17
-
18
- export function useNavItemsContext(): NavItemsContextValue {
19
- return useContext(NavItemsContext);
20
- }
1
+ 'use client';
2
+
3
+ import { createContext, useContext } from 'react';
4
+ import type { NavItemConfig } from './subcomponents/NavItems';
5
+
6
+ interface NavItemsContextValue {
7
+ navItems: NavItemConfig[];
8
+ setNavItems: (items: NavItemConfig[]) => void;
9
+ mobileVariant: 'sheet' | 'tabs';
10
+ }
11
+
12
+ export const NavItemsContext = createContext<NavItemsContextValue>({
13
+ navItems: [],
14
+ setNavItems: () => {},
15
+ mobileVariant: 'sheet',
16
+ });
17
+
18
+ export function useNavItemsContext(): NavItemsContextValue {
19
+ return useContext(NavItemsContext);
20
+ }
@@ -1,194 +1,191 @@
1
- 'use client';
2
-
3
- import { Dispatch, RefObject, SetStateAction, UIEvent, useCallback } from 'react';
4
- import { ADDON_IDS } from '../../modules/subscriptions/constants/addons.constants';
5
- import { useHasPlanAddon } from '../../modules/plans/hooks/use-has-plan-addon.hook';
6
- import {
7
- Button,
8
- Command,
9
- CommandEmpty,
10
- CommandInput,
11
- CommandItem,
12
- CommandList,
13
- Popover,
14
- PopoverContent,
15
- PopoverTrigger,
16
- UserAvatar,
17
- } from '../../index';
18
- import { IconCheck, IconChevronDown, IconFolderOpen, IconPlus } from '@tabler/icons-react';
19
- import type { NavigationProject } from './types';
20
-
21
- interface ProjectSelectorPopoverProps {
22
- open: boolean;
23
- setOpen: Dispatch<SetStateAction<boolean>>;
24
- titleRef?: RefObject<HTMLSpanElement | null>;
25
- projects: NavigationProject[];
26
- selectedProject: NavigationProject | null;
27
- isLoading?: boolean;
28
- isFetchingNextPage?: boolean;
29
- hasNextPage?: boolean;
30
- onLoadMore?: () => void | Promise<unknown>;
31
- onSelectProject: (project: NavigationProject) => void;
32
- onAddProject?: () => void;
33
- onManageProjects?: () => void;
34
- children?: React.ReactNode;
35
- }
36
-
37
- function ProjectItemSkeleton() {
38
- return (
39
- <div className="flex items-center justify-between px-2 py-2 gap-2">
40
- <div className="flex items-center gap-2 flex-1">
41
- <div className="skeleton size-9 rounded-lg shrink-0" />
42
- <div className="skeleton h-4 w-36 rounded" />
43
- </div>
44
- <div className="skeleton size-4 rounded-full shrink-0" />
45
- </div>
46
- );
47
- }
48
-
49
- export function ProjectSelectorPopover({
50
- open,
51
- setOpen,
52
- titleRef,
53
- projects,
54
- selectedProject,
55
- isLoading,
56
- isFetchingNextPage,
57
- hasNextPage,
58
- onLoadMore,
59
- onSelectProject,
60
- onAddProject,
61
- onManageProjects,
62
- children,
63
- }: ProjectSelectorPopoverProps) {
64
- const { hasAddon: canAddProject } = useHasPlanAddon(ADDON_IDS.PROJECTS);
65
- const handleListScroll = useCallback((event: UIEvent<HTMLDivElement>) => {
66
- if (!hasNextPage || isFetchingNextPage || !onLoadMore) return;
67
-
68
- const target = event.currentTarget;
69
- const distanceToBottom = target.scrollHeight - target.scrollTop - target.clientHeight;
70
-
71
- if (distanceToBottom <= 80) {
72
- onLoadMore();
73
- }
74
- }, [hasNextPage, isFetchingNextPage, onLoadMore]);
75
-
76
- return (
77
- <Popover open={open} onOpenChange={setOpen}>
78
- <PopoverTrigger asChild>
79
- {children ?? (
80
- <button className="cursor-pointer">
81
- <IconChevronDown
82
- size={20}
83
- className={`transition-transform duration-200 ${open ? 'rotate-180 text-gray-950' : 'text-gray-400'}`}
84
- />
85
- </button>
86
- )}
87
- </PopoverTrigger>
88
- <PopoverContent
89
- className="w-[296px] p-0 bg-white rounded-2xl shadow-md border border-gray-200"
90
- align="start"
91
- sideOffset={8}
92
- onOpenAutoFocus={(e: Event) => e.preventDefault()}
93
- onInteractOutside={(event: Event) => {
94
- if (titleRef?.current?.contains(event.target as Node)) {
95
- event.preventDefault();
96
- }
97
- }}
98
- >
99
- <div className="flex flex-col p-3 gap-2">
100
- <div className="flex items-center justify-between">
101
- <span className="paragraph-small-semibold">Projetos</span>
102
- {(onAddProject || onManageProjects) && (
103
- <div className="flex items-center gap-1.5">
104
- {canAddProject && onAddProject && (
105
- <Button
106
- variant="secondary"
107
- className="h-8! paragraph-small-semibold text-gray-950"
108
- onClick={onAddProject}
109
- >
110
- <IconPlus size={16} />
111
- Adicionar
112
- </Button>
113
- )}
114
- </div>
115
- )}
116
- </div>
117
- <Command className="gap-2">
118
- <CommandInput placeholder="Busque aqui" />
119
- <CommandList
120
- className="custom-scrollbar paragraph-small-medium text-gray-600 h-[227px]"
121
- onScroll={handleListScroll}
122
- >
123
- {isLoading ? (
124
- <>
125
- <ProjectItemSkeleton />
126
- <ProjectItemSkeleton />
127
- <ProjectItemSkeleton />
128
- <ProjectItemSkeleton />
129
- </>
130
- ) : projects.length === 0 ? (
131
- <div className="flex flex-col items-center justify-center gap-2 h-full text-gray-400 py-4">
132
- <IconFolderOpen size={28} className="text-gray-300" />
133
- <span className="paragraph-small-medium text-center text-gray-500">
134
- Nenhum projeto encontrado.
135
- <br />
136
- Crie um projeto para começar.
137
- </span>
138
- </div>
139
- ) : (
140
- <>
141
- <CommandEmpty>Nenhum resultado encontrado.</CommandEmpty>
142
- {projects.map((project) => {
143
- const isSelected = selectedProject?.id === project.id;
144
- return (
145
- <CommandItem
146
- key={project.id}
147
- value={`${project.title}-${project.id}`}
148
- keywords={[project.title]}
149
- className={isSelected ? 'bg-gray-50 min-h-[39px]' : 'min-h-[39px]'}
150
- onSelect={() => onSelectProject(project)}
151
- >
152
- <div className="flex items-center justify-between w-full cursor-pointer">
153
- <div className="flex items-center gap-2 w-full">
154
- <UserAvatar
155
- photo={project.photo}
156
- name={project.title}
157
- size={36}
158
- />
159
- {project.title}
160
- </div>
161
- {isSelected && (
162
- <IconCheck className="size-4 text-gray-950" />
163
- )}
164
- </div>
165
- </CommandItem>
166
- );
167
- })}
168
- {isFetchingNextPage && (
169
- <>
170
- <ProjectItemSkeleton />
171
- <ProjectItemSkeleton />
172
- </>
173
- )}
174
- </>
175
- )}
176
- </CommandList>
177
- </Command>
178
- {onManageProjects && (
179
- <>
180
- <div className="border-t border-gray-200" />
181
- <Button
182
- variant="ghost"
183
- className="h-10! paragraph-small-medium text-gray-600 hover:text-gray-950 hover:bg-zinc-50 w-full justify-center"
184
- onClick={onManageProjects}
185
- >
186
- Gerenciar projetos
187
- </Button>
188
- </>
189
- )}
190
- </div>
191
- </PopoverContent>
192
- </Popover>
193
- );
194
- }
1
+ 'use client';
2
+
3
+ import { Dispatch, RefObject, SetStateAction, UIEvent, useCallback } from 'react';
4
+ import {
5
+ Button,
6
+ Command,
7
+ CommandEmpty,
8
+ CommandInput,
9
+ CommandItem,
10
+ CommandList,
11
+ Popover,
12
+ PopoverContent,
13
+ PopoverTrigger,
14
+ UserAvatar,
15
+ } from '../../index';
16
+ import { IconCheck, IconChevronDown, IconFolderOpen, IconPlus } from '@tabler/icons-react';
17
+ import type { NavigationProject } from './types';
18
+
19
+ interface ProjectSelectorPopoverProps {
20
+ open: boolean;
21
+ setOpen: Dispatch<SetStateAction<boolean>>;
22
+ titleRef?: RefObject<HTMLSpanElement | null>;
23
+ projects: NavigationProject[];
24
+ selectedProject: NavigationProject | null;
25
+ isLoading?: boolean;
26
+ isFetchingNextPage?: boolean;
27
+ hasNextPage?: boolean;
28
+ onLoadMore?: () => void | Promise<unknown>;
29
+ onSelectProject: (project: NavigationProject) => void;
30
+ onAddProject?: () => void;
31
+ onManageProjects?: () => void;
32
+ children?: React.ReactNode;
33
+ }
34
+
35
+ function ProjectItemSkeleton() {
36
+ return (
37
+ <div className="flex items-center justify-between px-2 py-2 gap-2">
38
+ <div className="flex items-center gap-2 flex-1">
39
+ <div className="skeleton size-9 rounded-lg shrink-0" />
40
+ <div className="skeleton h-4 w-36 rounded" />
41
+ </div>
42
+ <div className="skeleton size-4 rounded-full shrink-0" />
43
+ </div>
44
+ );
45
+ }
46
+
47
+ export function ProjectSelectorPopover({
48
+ open,
49
+ setOpen,
50
+ titleRef,
51
+ projects,
52
+ selectedProject,
53
+ isLoading,
54
+ isFetchingNextPage,
55
+ hasNextPage,
56
+ onLoadMore,
57
+ onSelectProject,
58
+ onAddProject,
59
+ onManageProjects,
60
+ children,
61
+ }: ProjectSelectorPopoverProps) {
62
+ const handleListScroll = useCallback((event: UIEvent<HTMLDivElement>) => {
63
+ if (!hasNextPage || isFetchingNextPage || !onLoadMore) return;
64
+
65
+ const target = event.currentTarget;
66
+ const distanceToBottom = target.scrollHeight - target.scrollTop - target.clientHeight;
67
+
68
+ if (distanceToBottom <= 80) {
69
+ onLoadMore();
70
+ }
71
+ }, [hasNextPage, isFetchingNextPage, onLoadMore]);
72
+
73
+ return (
74
+ <Popover open={open} onOpenChange={setOpen}>
75
+ <PopoverTrigger asChild>
76
+ {children ?? (
77
+ <button className="cursor-pointer">
78
+ <IconChevronDown
79
+ size={20}
80
+ className={`transition-transform duration-200 ${open ? 'rotate-180 text-gray-950' : 'text-gray-400'}`}
81
+ />
82
+ </button>
83
+ )}
84
+ </PopoverTrigger>
85
+ <PopoverContent
86
+ className="w-[296px] p-0 bg-white rounded-2xl shadow-md border border-gray-200"
87
+ align="start"
88
+ sideOffset={8}
89
+ onOpenAutoFocus={(e: Event) => e.preventDefault()}
90
+ onInteractOutside={(event: Event) => {
91
+ if (titleRef?.current?.contains(event.target as Node)) {
92
+ event.preventDefault();
93
+ }
94
+ }}
95
+ >
96
+ <div className="flex flex-col p-3 gap-2">
97
+ <div className="flex items-center justify-between">
98
+ <span className="paragraph-small-semibold">Projetos</span>
99
+ {(onAddProject || onManageProjects) && (
100
+ <div className="flex items-center gap-1.5">
101
+ {onAddProject && (
102
+ <Button
103
+ variant="secondary"
104
+ className="h-8! paragraph-small-semibold text-gray-950"
105
+ onClick={onAddProject}
106
+ >
107
+ <IconPlus size={16} />
108
+ Adicionar
109
+ </Button>
110
+ )}
111
+ </div>
112
+ )}
113
+ </div>
114
+ <Command className="gap-2">
115
+ <CommandInput placeholder="Busque aqui" />
116
+ <CommandList
117
+ className="custom-scrollbar paragraph-small-medium text-gray-600 h-[227px]"
118
+ onScroll={handleListScroll}
119
+ >
120
+ {isLoading ? (
121
+ <>
122
+ <ProjectItemSkeleton />
123
+ <ProjectItemSkeleton />
124
+ <ProjectItemSkeleton />
125
+ <ProjectItemSkeleton />
126
+ </>
127
+ ) : projects.length === 0 ? (
128
+ <div className="flex flex-col items-center justify-center gap-2 h-full text-gray-400 py-4">
129
+ <IconFolderOpen size={28} className="text-gray-300" />
130
+ <span className="paragraph-small-medium text-center text-gray-500">
131
+ Nenhum projeto encontrado.
132
+ <br />
133
+ Crie um projeto para começar.
134
+ </span>
135
+ </div>
136
+ ) : (
137
+ <>
138
+ <CommandEmpty>Nenhum resultado encontrado.</CommandEmpty>
139
+ {projects.map((project) => {
140
+ const isSelected = selectedProject?.id === project.id;
141
+ return (
142
+ <CommandItem
143
+ key={project.id}
144
+ value={`${project.title}-${project.id}`}
145
+ keywords={[project.title]}
146
+ className={isSelected ? 'bg-gray-50 min-h-[39px]' : 'min-h-[39px]'}
147
+ onSelect={() => onSelectProject(project)}
148
+ >
149
+ <div className="flex items-center justify-between w-full cursor-pointer">
150
+ <div className="flex items-center gap-2 w-full">
151
+ <UserAvatar
152
+ photo={project.photo}
153
+ name={project.title}
154
+ size={36}
155
+ />
156
+ {project.title}
157
+ </div>
158
+ {isSelected && (
159
+ <IconCheck className="size-4 text-gray-950" />
160
+ )}
161
+ </div>
162
+ </CommandItem>
163
+ );
164
+ })}
165
+ {isFetchingNextPage && (
166
+ <>
167
+ <ProjectItemSkeleton />
168
+ <ProjectItemSkeleton />
169
+ </>
170
+ )}
171
+ </>
172
+ )}
173
+ </CommandList>
174
+ </Command>
175
+ {onManageProjects && (
176
+ <>
177
+ <div className="border-t border-gray-200" />
178
+ <Button
179
+ variant="ghost"
180
+ className="h-10! paragraph-small-medium text-gray-600 hover:text-gray-950 hover:bg-zinc-50 w-full justify-center"
181
+ onClick={onManageProjects}
182
+ >
183
+ Gerenciar projetos
184
+ </Button>
185
+ </>
186
+ )}
187
+ </div>
188
+ </PopoverContent>
189
+ </Popover>
190
+ );
191
+ }