@greatapps/common 1.1.372 → 1.1.375

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,160 +1,160 @@
1
- 'use client';
2
-
3
- import { IconBell, IconCheck, IconLoader2 } from '@tabler/icons-react';
4
- import { Button } from "../../ui/buttons/Button";
5
- import {
6
- Tabs,
7
- TabsContent,
8
- TabsList,
9
- TabsTrigger,
10
- } from "../../ui/data-display/Tabs";
11
- import { useInfiniteMessages, useMarkAllMessagesAsRead } from "../../../modules/users/hooks/messages.hook";
12
- import NotificationCard from "../../widgets/notifications/NotificationCard";
13
- import { Toast } from "../../ui/feedback/Toast";
14
- import { formatDistanceToNow } from "date-fns";
15
- import { ptBR } from "date-fns/locale";
16
- import { toast } from "sonner";
17
- import React from "react";
18
-
19
- function NotificationsList({
20
- pages,
21
- isFetchingNextPage,
22
- hasNextPage,
23
- fetchNextPage,
24
- }: {
25
- pages: ReturnType<typeof useInfiniteMessages>["data"];
26
- isFetchingNextPage: boolean;
27
- hasNextPage: boolean;
28
- fetchNextPage: () => void;
29
- }) {
30
- const notifications = pages?.pages.flatMap((p) => p.data) ?? [];
31
-
32
- const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {
33
- const target = e.currentTarget;
34
- const nearBottom =
35
- target.scrollTop + target.clientHeight >= target.scrollHeight - 50;
36
- if (!nearBottom) return;
37
- if (hasNextPage && !isFetchingNextPage) {
38
- fetchNextPage();
39
- }
40
- };
41
-
42
- return (
43
- <div
44
- className="flex flex-col border border-gray-200 rounded-lg w-full bg-white max-h-[70vh] overflow-y-auto custom-scrollbar"
45
- onScroll={handleScroll}
46
- >
47
- {notifications.map((notification, index) => (
48
- <NotificationCard
49
- key={notification.id}
50
- icon={<IconBell size={20} className="text-pages-600" />}
51
- iconBgColor="bg-cyan-100"
52
- title={notification.subject}
53
- description={notification.message}
54
- gapPx={8}
55
- time={formatDistanceToNow(new Date(notification.datetime_add), {
56
- addSuffix: true,
57
- locale: ptBR,
58
- })}
59
- isUnread={notification.status === 1}
60
- showBorder={index < notifications.length - 1}
61
- />
62
- ))}
63
- {isFetchingNextPage && (
64
- <div className="flex items-center justify-center py-4">
65
- <IconLoader2 size={20} className="animate-spin text-gray-400" />
66
- </div>
67
- )}
68
- </div>
69
- );
70
- }
71
-
72
- export function NotificationPageContent() {
73
- const unreadNotifications = useInfiniteMessages({
74
- readed: false,
75
- type: "notification",
76
- order: "desc",
77
- });
78
- const allNotifications = useInfiniteMessages({
79
- type: "notification",
80
- order: "desc",
81
- });
82
-
83
- const totalAll = allNotifications.data?.pages[0]?.total ?? 0;
84
- const totalUnread = unreadNotifications.data?.pages[0]?.total ?? 0;
85
-
86
- const { mutate: markAllAsRead, isPending: isMarkingAll } = useMarkAllMessagesAsRead();
87
-
88
- const handleMarkAllAsRead = () => {
89
- markAllAsRead(undefined, {
90
- onSuccess: () => {
91
- toast.custom((t) => (
92
- <Toast variant="success" message="Todas as notificações foram marcadas como lidas" toastId={t} />
93
- ));
94
- },
95
- onError: () => {
96
- toast.custom((t) => (
97
- <Toast variant="error" message="Erro ao marcar notificações como lidas" toastId={t} />
98
- ));
99
- },
100
- });
101
- };
102
-
103
- return (
104
- <div className="flex flex-col gap-6 lg:gap-8">
105
- <div className="flex items-center justify-between gap-4">
106
- <div className="flex flex-col gap-2">
107
- <h1 className="title-large-semibold text-gray-950">
108
- Notificações
109
- </h1>
110
- <p className="paragraph-small-regular text-gray-600 hidden lg:block">
111
- Tenha controle total sobre páginas, experiências e conversões.
112
- </p>
113
- </div>
114
- <Button
115
- variant={"secondary"}
116
- className="h-10! lg:h-12! shrink-0"
117
- onClick={handleMarkAllAsRead}
118
- disabled={isMarkingAll || totalUnread === 0}
119
- >
120
- {isMarkingAll ? <IconLoader2 size={20} className="animate-spin" /> : <IconCheck size={20} />}
121
- <span className="lg:block hidden">Marcar todos como lidos</span>
122
- <span className="lg:hidden">Marcar como lidos</span>
123
- </Button>
124
- </div>
125
- <Tabs
126
- defaultValue="all"
127
- className="flex flex-col w-full bg-transparent gap-6 lg:gap-8"
128
- >
129
- <TabsList className="h-auto pb-0 bg-transparent">
130
- <TabsTrigger className="gap-2" value="all">
131
- Todas as notificações{" "}
132
- <span className="text-gray-500">({totalAll})</span>
133
- </TabsTrigger>
134
- <TabsTrigger className="gap-2" value="unreads" disabled={totalUnread === 0}>
135
- Não lidas{" "}
136
- <span className="text-gray-500">({totalUnread})</span>
137
- </TabsTrigger>
138
- </TabsList>
139
-
140
- <TabsContent value="all">
141
- <NotificationsList
142
- pages={allNotifications.data}
143
- isFetchingNextPage={allNotifications.isFetchingNextPage}
144
- hasNextPage={allNotifications.hasNextPage}
145
- fetchNextPage={allNotifications.fetchNextPage}
146
- />
147
- </TabsContent>
148
-
149
- <TabsContent value="unreads">
150
- <NotificationsList
151
- pages={unreadNotifications.data}
152
- isFetchingNextPage={unreadNotifications.isFetchingNextPage}
153
- hasNextPage={unreadNotifications.hasNextPage}
154
- fetchNextPage={unreadNotifications.fetchNextPage}
155
- />
156
- </TabsContent>
157
- </Tabs>
158
- </div>
159
- );
160
- }
1
+ 'use client';
2
+
3
+ import { IconBell, IconCheck, IconLoader2 } from '@tabler/icons-react';
4
+ import { Button } from "../../ui/buttons/Button";
5
+ import {
6
+ Tabs,
7
+ TabsContent,
8
+ TabsList,
9
+ TabsTrigger,
10
+ } from "../../ui/data-display/Tabs";
11
+ import { useInfiniteMessages, useMarkAllMessagesAsRead } from "../../../modules/users/hooks/messages.hook";
12
+ import NotificationCard from "../../widgets/notifications/NotificationCard";
13
+ import { Toast } from "../../ui/feedback/Toast";
14
+ import { formatDistanceToNow } from "date-fns";
15
+ import { ptBR } from "date-fns/locale";
16
+ import { toast } from "sonner";
17
+ import React from "react";
18
+
19
+ function NotificationsList({
20
+ pages,
21
+ isFetchingNextPage,
22
+ hasNextPage,
23
+ fetchNextPage,
24
+ }: {
25
+ pages: ReturnType<typeof useInfiniteMessages>["data"];
26
+ isFetchingNextPage: boolean;
27
+ hasNextPage: boolean;
28
+ fetchNextPage: () => void;
29
+ }) {
30
+ const notifications = pages?.pages.flatMap((p) => p.data) ?? [];
31
+
32
+ const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {
33
+ const target = e.currentTarget;
34
+ const nearBottom =
35
+ target.scrollTop + target.clientHeight >= target.scrollHeight - 50;
36
+ if (!nearBottom) return;
37
+ if (hasNextPage && !isFetchingNextPage) {
38
+ fetchNextPage();
39
+ }
40
+ };
41
+
42
+ return (
43
+ <div
44
+ className="flex flex-col border border-gray-200 rounded-lg w-full bg-white max-h-[70vh] overflow-y-auto custom-scrollbar"
45
+ onScroll={handleScroll}
46
+ >
47
+ {notifications.map((notification, index) => (
48
+ <NotificationCard
49
+ key={notification.id}
50
+ icon={<IconBell size={20} className="text-pages-600" />}
51
+ iconBgColor="bg-cyan-100"
52
+ title={notification.subject}
53
+ description={notification.message}
54
+ gapPx={8}
55
+ time={formatDistanceToNow(new Date(notification.datetime_add), {
56
+ addSuffix: true,
57
+ locale: ptBR,
58
+ })}
59
+ isUnread={notification.status === 1}
60
+ showBorder={index < notifications.length - 1}
61
+ />
62
+ ))}
63
+ {isFetchingNextPage && (
64
+ <div className="flex items-center justify-center py-4">
65
+ <IconLoader2 size={20} className="animate-spin text-gray-400" />
66
+ </div>
67
+ )}
68
+ </div>
69
+ );
70
+ }
71
+
72
+ export function NotificationPageContent() {
73
+ const unreadNotifications = useInfiniteMessages({
74
+ readed: false,
75
+ type: "notification",
76
+ order: "desc",
77
+ });
78
+ const allNotifications = useInfiniteMessages({
79
+ type: "notification",
80
+ order: "desc",
81
+ });
82
+
83
+ const totalAll = allNotifications.data?.pages[0]?.total ?? 0;
84
+ const totalUnread = unreadNotifications.data?.pages[0]?.total ?? 0;
85
+
86
+ const { mutate: markAllAsRead, isPending: isMarkingAll } = useMarkAllMessagesAsRead();
87
+
88
+ const handleMarkAllAsRead = () => {
89
+ markAllAsRead(undefined, {
90
+ onSuccess: () => {
91
+ toast.custom((t) => (
92
+ <Toast variant="success" message="Todas as notificações foram marcadas como lidas" toastId={t} />
93
+ ));
94
+ },
95
+ onError: () => {
96
+ toast.custom((t) => (
97
+ <Toast variant="error" message="Erro ao marcar notificações como lidas" toastId={t} />
98
+ ));
99
+ },
100
+ });
101
+ };
102
+
103
+ return (
104
+ <div className="flex flex-col gap-6 lg:gap-8">
105
+ <div className="flex items-center justify-between gap-4">
106
+ <div className="flex flex-col gap-2">
107
+ <h1 className="title-large-semibold text-gray-950">
108
+ Notificações
109
+ </h1>
110
+ <p className="paragraph-small-regular text-gray-600 hidden lg:block">
111
+ Tenha controle total sobre páginas, experiências e conversões.
112
+ </p>
113
+ </div>
114
+ <Button
115
+ variant={"secondary"}
116
+ className="h-10! lg:h-12! shrink-0"
117
+ onClick={handleMarkAllAsRead}
118
+ disabled={isMarkingAll || totalUnread === 0}
119
+ >
120
+ {isMarkingAll ? <IconLoader2 size={20} className="animate-spin" /> : <IconCheck size={20} />}
121
+ <span className="lg:block hidden">Marcar todos como lidos</span>
122
+ <span className="lg:hidden">Marcar como lidos</span>
123
+ </Button>
124
+ </div>
125
+ <Tabs
126
+ defaultValue="all"
127
+ className="flex flex-col w-full bg-transparent gap-6 lg:gap-8"
128
+ >
129
+ <TabsList className="h-auto pb-0 bg-transparent">
130
+ <TabsTrigger className="gap-2" value="all">
131
+ Todas as notificações{" "}
132
+ <span className="text-gray-500">({totalAll})</span>
133
+ </TabsTrigger>
134
+ <TabsTrigger className="gap-2" value="unreads" disabled={totalUnread === 0}>
135
+ Não lidas{" "}
136
+ <span className="text-gray-500">({totalUnread})</span>
137
+ </TabsTrigger>
138
+ </TabsList>
139
+
140
+ <TabsContent value="all">
141
+ <NotificationsList
142
+ pages={allNotifications.data}
143
+ isFetchingNextPage={allNotifications.isFetchingNextPage}
144
+ hasNextPage={allNotifications.hasNextPage}
145
+ fetchNextPage={allNotifications.fetchNextPage}
146
+ />
147
+ </TabsContent>
148
+
149
+ <TabsContent value="unreads">
150
+ <NotificationsList
151
+ pages={unreadNotifications.data}
152
+ isFetchingNextPage={unreadNotifications.isFetchingNextPage}
153
+ hasNextPage={unreadNotifications.hasNextPage}
154
+ fetchNextPage={unreadNotifications.fetchNextPage}
155
+ />
156
+ </TabsContent>
157
+ </Tabs>
158
+ </div>
159
+ );
160
+ }
@@ -1,57 +1,57 @@
1
- 'use client';
2
-
3
- import * as React from "react"
4
- import { Slot } from "@radix-ui/react-slot"
5
- import { cva, type VariantProps } from "class-variance-authority"
6
- import { cn } from "../../../infra/utils/clsx"
7
-
8
- const buttonVariants = cva(
9
- "paragraph-small-semibold cursor-pointer flex items-center justify-center gap-1.5 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
10
- {
11
- variants: {
12
- variant: {
13
- default: " bg-gray-950 text-white hover:bg-gray-950/90",
14
- secondary:
15
- "bg-white text-gray-950 border-gray-200 hover:border-gray-400 border",
16
- ghost:
17
- "text-gray-600 hover:bg-accent hover:text-gray-950 dark:hover:bg-accent/50",
18
- brand: "bg-cyan-300 hover:bg-cyan-200 text-gray-950",
19
- },
20
- size: {
21
- default: "h-12 px-4 py-2 has-[>svg]:px-3",
22
- sm: "rounded-md gap-1.5 px-2 py-2 has-[>svg]:px-2.5",
23
- lg: "rounded-md px-6 has-[>svg]:px-4",
24
- icon: "size-9",
25
- "icon-sm": "size-8",
26
- "icon-lg": "size-10",
27
- },
28
- },
29
- defaultVariants: {
30
- variant: "default",
31
- size: "default",
32
- },
33
- }
34
- )
35
-
36
- function Button({
37
- className,
38
- variant,
39
- size,
40
- asChild = false,
41
- ...props
42
- }: React.ComponentProps<"button"> &
43
- VariantProps<typeof buttonVariants> & {
44
- asChild?: boolean
45
- }) {
46
- const Comp = asChild ? Slot : "button"
47
-
48
- return (
49
- <Comp
50
- data-slot="button"
51
- className={cn(buttonVariants({ variant, size, className }))}
52
- {...props}
53
- />
54
- )
55
- }
56
-
57
- export { Button, buttonVariants }
1
+ 'use client';
2
+
3
+ import * as React from "react"
4
+ import { Slot } from "@radix-ui/react-slot"
5
+ import { cva, type VariantProps } from "class-variance-authority"
6
+ import { cn } from "../../../infra/utils/clsx"
7
+
8
+ const buttonVariants = cva(
9
+ "paragraph-small-semibold cursor-pointer flex items-center justify-center gap-1.5 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
10
+ {
11
+ variants: {
12
+ variant: {
13
+ default: " bg-gray-950 text-white hover:bg-gray-950/90",
14
+ secondary:
15
+ "bg-white text-gray-950 border-gray-200 hover:border-gray-400 border",
16
+ ghost:
17
+ "text-gray-600 hover:bg-accent hover:text-gray-950 dark:hover:bg-accent/50",
18
+ brand: "bg-cyan-300 hover:bg-cyan-200 text-gray-950",
19
+ },
20
+ size: {
21
+ default: "h-12 px-4 py-2 has-[>svg]:px-3",
22
+ sm: "rounded-md gap-1.5 px-2 py-2 has-[>svg]:px-2.5",
23
+ lg: "rounded-md px-6 has-[>svg]:px-4",
24
+ icon: "size-9",
25
+ "icon-sm": "size-8",
26
+ "icon-lg": "size-10",
27
+ },
28
+ },
29
+ defaultVariants: {
30
+ variant: "default",
31
+ size: "default",
32
+ },
33
+ }
34
+ )
35
+
36
+ function Button({
37
+ className,
38
+ variant,
39
+ size,
40
+ asChild = false,
41
+ ...props
42
+ }: React.ComponentProps<"button"> &
43
+ VariantProps<typeof buttonVariants> & {
44
+ asChild?: boolean
45
+ }) {
46
+ const Comp = asChild ? Slot : "button"
47
+
48
+ return (
49
+ <Comp
50
+ data-slot="button"
51
+ className={cn(buttonVariants({ variant, size, className }))}
52
+ {...props}
53
+ />
54
+ )
55
+ }
56
+
57
+ export { Button, buttonVariants }
@@ -1,14 +1,14 @@
1
- 'use client';
2
-
3
- import * as React from "react";
4
-
5
- export default function CancelButton({
6
- ...props
7
- }: React.ComponentProps<"button">) {
8
- return (
9
- <button
10
- className="flex h-8 px-2 justify-center items-center rounded-lg bg-red-50 text-red-600 font-semibold text-sm px-3 cursor-pointer hover:bg-red-100"
11
- {...props}
12
- />
13
- );
14
- }
1
+ 'use client';
2
+
3
+ import * as React from "react";
4
+
5
+ export default function CancelButton({
6
+ ...props
7
+ }: React.ComponentProps<"button">) {
8
+ return (
9
+ <button
10
+ className="flex h-8 px-2 justify-center items-center rounded-lg bg-red-50 text-red-600 font-semibold text-sm px-3 cursor-pointer hover:bg-red-100"
11
+ {...props}
12
+ />
13
+ );
14
+ }
@@ -1,54 +1,54 @@
1
- 'use client';
2
-
3
- import { IconCheck, IconCopy } from '@tabler/icons-react';
4
- import { toast } from "sonner";
5
- import { Toast } from "../feedback/Toast";
6
- import { Tooltip, TooltipContent, TooltipTrigger } from "../overlay/Tooltip";
7
- import useCopyToClipboard from "../../../hooks/copy-to-clipboard.hook";
8
- import { cn } from "../../../infra/utils/clsx";
9
-
10
- interface CopyButtonProps {
11
- textToCopy: string;
12
- size?: number;
13
- className?: string;
14
- tooltipText?: string;
15
- successMessage?: string;
16
- }
17
-
18
- export function CopyButton({
19
- textToCopy,
20
- size = 14,
21
- className,
22
- tooltipText = "Copiar link",
23
- successMessage = "Link copiado",
24
- }: CopyButtonProps) {
25
- const { isCopied, copy } = useCopyToClipboard({
26
- onSuccess: () => {
27
- toast.custom((t) => (
28
- <Toast variant="success" message={successMessage} toastId={t} />
29
- ));
30
- },
31
- onError: () => {
32
- toast.custom((t) => (
33
- <Toast variant="error" message="Não foi possível copiar o link" toastId={t} />
34
- ));
35
- },
36
- });
37
-
38
- return (
39
- <Tooltip>
40
- <TooltipTrigger
41
- asChild
42
- onClick={(e: React.MouseEvent) => {
43
- e.stopPropagation();
44
- copy(textToCopy);
45
- }}
46
- >
47
- <span className={cn("cursor-pointer text-gray-500", className)}>
48
- {isCopied ? <IconCheck size={size} /> : <IconCopy size={size} />}
49
- </span>
50
- </TooltipTrigger>
51
- <TooltipContent>{isCopied ? "Copiado!" : tooltipText}</TooltipContent>
52
- </Tooltip>
53
- );
54
- }
1
+ 'use client';
2
+
3
+ import { IconCheck, IconCopy } from '@tabler/icons-react';
4
+ import { toast } from "sonner";
5
+ import { Toast } from "../feedback/Toast";
6
+ import { Tooltip, TooltipContent, TooltipTrigger } from "../overlay/Tooltip";
7
+ import useCopyToClipboard from "../../../hooks/copy-to-clipboard.hook";
8
+ import { cn } from "../../../infra/utils/clsx";
9
+
10
+ interface CopyButtonProps {
11
+ textToCopy: string;
12
+ size?: number;
13
+ className?: string;
14
+ tooltipText?: string;
15
+ successMessage?: string;
16
+ }
17
+
18
+ export function CopyButton({
19
+ textToCopy,
20
+ size = 14,
21
+ className,
22
+ tooltipText = "Copiar link",
23
+ successMessage = "Link copiado",
24
+ }: CopyButtonProps) {
25
+ const { isCopied, copy } = useCopyToClipboard({
26
+ onSuccess: () => {
27
+ toast.custom((t) => (
28
+ <Toast variant="success" message={successMessage} toastId={t} />
29
+ ));
30
+ },
31
+ onError: () => {
32
+ toast.custom((t) => (
33
+ <Toast variant="error" message="Não foi possível copiar o link" toastId={t} />
34
+ ));
35
+ },
36
+ });
37
+
38
+ return (
39
+ <Tooltip>
40
+ <TooltipTrigger
41
+ asChild
42
+ onClick={(e: React.MouseEvent) => {
43
+ e.stopPropagation();
44
+ copy(textToCopy);
45
+ }}
46
+ >
47
+ <span className={cn("cursor-pointer text-gray-500", className)}>
48
+ {isCopied ? <IconCheck size={size} /> : <IconCopy size={size} />}
49
+ </span>
50
+ </TooltipTrigger>
51
+ <TooltipContent>{isCopied ? "Copiado!" : tooltipText}</TooltipContent>
52
+ </Tooltip>
53
+ );
54
+ }