@greatapps/common 1.1.382 → 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,101 +1,101 @@
1
- 'use client';
2
-
3
- import { useEffect, useRef } from 'react';
4
- import { useAuth } from '../../providers/auth.provider';
5
- import { useWhitelabel } from '../../providers/whitelabel.provider';
6
- import { useActiveSubscription } from '../../modules/subscriptions/hooks/find-active-subscription.hook';
7
-
8
- const V4_WHITELABEL_ID = 367568;
9
-
10
- const CRISP_WEBSITE_ID = '3339a3ec-b4c6-4aac-8b86-45668fb7655c';
11
- const CRISP_SCRIPT_URL = 'https://client.crisp.chat/l.js';
12
- const CRISP_LOAD_DELAY = 800;
13
-
14
- function safeCrispPush(args: any[]) {
15
- try {
16
- const $crisp = (window as any)?.$crisp;
17
- if ($crisp) $crisp.push(args);
18
- } catch {}
19
- }
20
-
21
- export function openCrispHelpdesk() {
22
- safeCrispPush(['do', 'helpdesk:search']);
23
- }
24
-
25
- export function hideCrisp() {
26
- safeCrispPush(['do', 'chat:hide']);
27
- }
28
-
29
- export function showCrisp() {
30
- safeCrispPush(['do', 'chat:show']);
31
- }
32
-
33
- export function CrispEmbed() {
34
- const { user, account } = useAuth();
35
- const { whitelabel } = useWhitelabel();
36
- const { data: subscriptionData } = useActiveSubscription();
37
- const scriptLoadedRef = useRef(false);
38
-
39
- const subscription = subscriptionData?.data?.[0] ?? null;
40
- const isV4 = whitelabel?.id === V4_WHITELABEL_ID;
41
-
42
- // Load Crisp script (once, with 800ms delay)
43
- useEffect(() => {
44
- if (!user || scriptLoadedRef.current) return;
45
-
46
- try {
47
- const win = window as any;
48
- win.$crisp = [];
49
- win.CRISP_WEBSITE_ID = CRISP_WEBSITE_ID;
50
- win.$crisp.push(['config', 'container:index', [100]]);
51
-
52
- const timeout = setTimeout(() => {
53
- try {
54
- if (document.querySelector(`script[src="${CRISP_SCRIPT_URL}"]`)) return;
55
- const s = document.createElement('script');
56
- s.src = CRISP_SCRIPT_URL;
57
- s.async = true;
58
- document.head.appendChild(s);
59
- scriptLoadedRef.current = true;
60
- } catch {}
61
- }, CRISP_LOAD_DELAY);
62
-
63
- return () => clearTimeout(timeout);
64
- } catch {}
65
- }, [user]);
66
-
67
- // Identify user
68
- useEffect(() => {
69
- try {
70
- const $crisp = (window as any)?.$crisp;
71
- if (!user || !$crisp) return;
72
-
73
- if (user.email) $crisp.push(['set', 'user:email', user.email]);
74
-
75
- const fullName = `${user.name ?? ''} ${user.last_name ?? ''}`.trim();
76
- if (fullName) $crisp.push(['set', 'user:nickname', fullName]);
77
-
78
- if (account?.name) $crisp.push(['set', 'user:company', account.name]);
79
-
80
- const phone = `${user.ddi ?? ''}${user.phone ?? ''}`.trim();
81
- if (phone) $crisp.push(['set', 'user:phone', phone]);
82
-
83
- if (user.photo && user.photo.startsWith('http')) {
84
- $crisp.push(['set', 'user:avatar', user.photo]);
85
- }
86
-
87
- if (isV4) {
88
- $crisp.push(['set', 'session:segments', [['company_v4']]]);
89
- $crisp.push(['set', 'session:data', [[['Company', 'V4']]]]);
90
- } else {
91
- const planName = subscription?.plan_name ?? '';
92
- if (planName) $crisp.push(['set', 'session:segments', [[`plano_${planName}`]]]);
93
- if (user.profile) $crisp.push(['set', 'session:segments', [[`usuario_${user.profile}`]]]);
94
- if (planName) $crisp.push(['set', 'session:data', [[['Plano', planName]]]]);
95
- if (user.profile) $crisp.push(['set', 'session:data', [[['Usuario', user.profile]]]]);
96
- }
97
- } catch {}
98
- }, [user, account, isV4, subscription?.plan_name]);
99
-
100
- return null;
101
- }
1
+ 'use client';
2
+
3
+ import { useEffect, useRef } from 'react';
4
+ import { useAuth } from '../../providers/auth.provider';
5
+ import { useWhitelabel } from '../../providers/whitelabel.provider';
6
+ import { useActiveSubscription } from '../../modules/subscriptions/hooks/find-active-subscription.hook';
7
+
8
+ const V4_WHITELABEL_ID = 367568;
9
+
10
+ const CRISP_WEBSITE_ID = '3339a3ec-b4c6-4aac-8b86-45668fb7655c';
11
+ const CRISP_SCRIPT_URL = 'https://client.crisp.chat/l.js';
12
+ const CRISP_LOAD_DELAY = 800;
13
+
14
+ function safeCrispPush(args: any[]) {
15
+ try {
16
+ const $crisp = (window as any)?.$crisp;
17
+ if ($crisp) $crisp.push(args);
18
+ } catch {}
19
+ }
20
+
21
+ export function openCrispHelpdesk() {
22
+ safeCrispPush(['do', 'helpdesk:search']);
23
+ }
24
+
25
+ export function hideCrisp() {
26
+ safeCrispPush(['do', 'chat:hide']);
27
+ }
28
+
29
+ export function showCrisp() {
30
+ safeCrispPush(['do', 'chat:show']);
31
+ }
32
+
33
+ export function CrispEmbed() {
34
+ const { user, account } = useAuth();
35
+ const { whitelabel } = useWhitelabel();
36
+ const { data: subscriptionData } = useActiveSubscription();
37
+ const scriptLoadedRef = useRef(false);
38
+
39
+ const subscription = subscriptionData?.data?.[0] ?? null;
40
+ const isV4 = whitelabel?.id === V4_WHITELABEL_ID;
41
+
42
+ // Load Crisp script (once, with 800ms delay)
43
+ useEffect(() => {
44
+ if (!user || scriptLoadedRef.current) return;
45
+
46
+ try {
47
+ const win = window as any;
48
+ win.$crisp = [];
49
+ win.CRISP_WEBSITE_ID = CRISP_WEBSITE_ID;
50
+ win.$crisp.push(['config', 'container:index', [100]]);
51
+
52
+ const timeout = setTimeout(() => {
53
+ try {
54
+ if (document.querySelector(`script[src="${CRISP_SCRIPT_URL}"]`)) return;
55
+ const s = document.createElement('script');
56
+ s.src = CRISP_SCRIPT_URL;
57
+ s.async = true;
58
+ document.head.appendChild(s);
59
+ scriptLoadedRef.current = true;
60
+ } catch {}
61
+ }, CRISP_LOAD_DELAY);
62
+
63
+ return () => clearTimeout(timeout);
64
+ } catch {}
65
+ }, [user]);
66
+
67
+ // Identify user
68
+ useEffect(() => {
69
+ try {
70
+ const $crisp = (window as any)?.$crisp;
71
+ if (!user || !$crisp) return;
72
+
73
+ if (user.email) $crisp.push(['set', 'user:email', user.email]);
74
+
75
+ const fullName = `${user.name ?? ''} ${user.last_name ?? ''}`.trim();
76
+ if (fullName) $crisp.push(['set', 'user:nickname', fullName]);
77
+
78
+ if (account?.name) $crisp.push(['set', 'user:company', account.name]);
79
+
80
+ const phone = `${user.ddi ?? ''}${user.phone ?? ''}`.trim();
81
+ if (phone) $crisp.push(['set', 'user:phone', phone]);
82
+
83
+ if (user.photo && user.photo.startsWith('http')) {
84
+ $crisp.push(['set', 'user:avatar', user.photo]);
85
+ }
86
+
87
+ if (isV4) {
88
+ $crisp.push(['set', 'session:segments', [['company_v4']]]);
89
+ $crisp.push(['set', 'session:data', [[['Company', 'V4']]]]);
90
+ } else {
91
+ const planName = subscription?.plan_name ?? '';
92
+ if (planName) $crisp.push(['set', 'session:segments', [[`plano_${planName}`]]]);
93
+ if (user.profile) $crisp.push(['set', 'session:segments', [[`usuario_${user.profile}`]]]);
94
+ if (planName) $crisp.push(['set', 'session:data', [[['Plano', planName]]]]);
95
+ if (user.profile) $crisp.push(['set', 'session:data', [[['Usuario', user.profile]]]]);
96
+ }
97
+ } catch {}
98
+ }, [user, account, isV4, subscription?.plan_name]);
99
+
100
+ return null;
101
+ }
@@ -1,119 +1,119 @@
1
- 'use client';
2
-
3
- import { useEffect, useRef } from 'react';
4
- import { useAuth } from '../../providers/auth.provider';
5
- import { useWhitelabel } from '../../providers/whitelabel.provider';
6
- import { useActiveSubscription } from '../../modules/subscriptions/hooks/find-active-subscription.hook';
7
-
8
- const V4_WHITELABEL_ID = 367568;
9
-
10
- const FRILL_SCRIPT_URL = 'https://widget.frill.co/v2/container.js';
11
- const FRILL_KEY = '2f77f232-a120-438e-8ef6-01912ffd1b99';
12
-
13
- const SURVEYS = [{ key: '7f59dbf6-b665-458a-80e2-778de47efe1c' }];
14
- const WIDGETS = [
15
- { key: '4a5ba13b-1150-49fe-aa15-f9a2da0ba909' },
16
- { key: '720c0912-e6a4-495c-835e-3ff1f59d6dfc' },
17
- ];
18
-
19
- function initFrillLoader() {
20
- try {
21
- const win = window as any;
22
- if (win.Frill) return;
23
-
24
- let counter = 0;
25
- const queue: Record<number, any> = {};
26
-
27
- win.Frill = function (action: string, params: any) {
28
- let instance: any;
29
- const id = counter++;
30
- const promise: any = new Promise((resolve, reject) => {
31
- queue[id] = {
32
- params: [action, params],
33
- resolve: (f: any) => {
34
- instance = f;
35
- resolve(f);
36
- },
37
- reject,
38
- };
39
- });
40
- promise.destroy = () => {
41
- delete queue[id];
42
- instance?.destroy();
43
- };
44
- return promise;
45
- };
46
- win.Frill.q = queue;
47
- } catch {}
48
- }
49
-
50
- function loadFrillScript() {
51
- try {
52
- if (document.querySelector(`script[src="${FRILL_SCRIPT_URL}"]`)) return;
53
- const anchor = document.getElementsByTagName('script')[0];
54
- const script = document.createElement('script');
55
- script.type = 'text/javascript';
56
- script.async = true;
57
- script.src = FRILL_SCRIPT_URL;
58
- anchor?.parentNode?.insertBefore(script, anchor);
59
- } catch {}
60
- }
61
-
62
- export function FrillEmbed() {
63
- const { user } = useAuth();
64
- const { whitelabel } = useWhitelabel();
65
- const { data: subscriptionData } = useActiveSubscription();
66
- const containerRef = useRef<any>(null);
67
-
68
- const subscription = subscriptionData?.data?.[0] ?? null;
69
- const isV4 = whitelabel?.id === V4_WHITELABEL_ID;
70
-
71
- useEffect(() => {
72
- if (!user) return;
73
-
74
- try {
75
- initFrillLoader();
76
-
77
- if (document.readyState === 'complete' || document.readyState === 'interactive') {
78
- loadFrillScript();
79
- } else {
80
- document.addEventListener('DOMContentLoaded', loadFrillScript);
81
- }
82
-
83
- const userData: Record<string, any> = {
84
- id: String(user.id ?? ''),
85
- };
86
- if (user.email) userData.email = user.email;
87
- if (user.name || user.last_name) {
88
- userData.name = `${user.name ?? ''} ${user.last_name ?? ''}`.trim();
89
- }
90
- userData.attributes = isV4
91
- ? { company: 'V4' }
92
- : { profile: user.profile ?? '', plan: subscription?.plan_name ?? '' };
93
-
94
- const config: Record<string, any> = { key: FRILL_KEY, user: userData };
95
- if (!isV4) {
96
- config.surveys = SURVEYS;
97
- config.widgets = WIDGETS;
98
- }
99
-
100
- const win = window as any;
101
- const containerPromise = win.Frill('container', config);
102
- win.Frill('identify', userData);
103
-
104
- containerPromise.then((widget: any) => {
105
- containerRef.current = widget;
106
- }).catch(() => {});
107
- } catch {}
108
-
109
- return () => {
110
- try {
111
- containerRef.current?.destroy();
112
- containerRef.current = null;
113
- document.removeEventListener('DOMContentLoaded', loadFrillScript);
114
- } catch {}
115
- };
116
- }, [user, isV4, subscription?.plan_name]);
117
-
118
- return null;
119
- }
1
+ 'use client';
2
+
3
+ import { useEffect, useRef } from 'react';
4
+ import { useAuth } from '../../providers/auth.provider';
5
+ import { useWhitelabel } from '../../providers/whitelabel.provider';
6
+ import { useActiveSubscription } from '../../modules/subscriptions/hooks/find-active-subscription.hook';
7
+
8
+ const V4_WHITELABEL_ID = 367568;
9
+
10
+ const FRILL_SCRIPT_URL = 'https://widget.frill.co/v2/container.js';
11
+ const FRILL_KEY = '2f77f232-a120-438e-8ef6-01912ffd1b99';
12
+
13
+ const SURVEYS = [{ key: '7f59dbf6-b665-458a-80e2-778de47efe1c' }];
14
+ const WIDGETS = [
15
+ { key: '4a5ba13b-1150-49fe-aa15-f9a2da0ba909' },
16
+ { key: '720c0912-e6a4-495c-835e-3ff1f59d6dfc' },
17
+ ];
18
+
19
+ function initFrillLoader() {
20
+ try {
21
+ const win = window as any;
22
+ if (win.Frill) return;
23
+
24
+ let counter = 0;
25
+ const queue: Record<number, any> = {};
26
+
27
+ win.Frill = function (action: string, params: any) {
28
+ let instance: any;
29
+ const id = counter++;
30
+ const promise: any = new Promise((resolve, reject) => {
31
+ queue[id] = {
32
+ params: [action, params],
33
+ resolve: (f: any) => {
34
+ instance = f;
35
+ resolve(f);
36
+ },
37
+ reject,
38
+ };
39
+ });
40
+ promise.destroy = () => {
41
+ delete queue[id];
42
+ instance?.destroy();
43
+ };
44
+ return promise;
45
+ };
46
+ win.Frill.q = queue;
47
+ } catch {}
48
+ }
49
+
50
+ function loadFrillScript() {
51
+ try {
52
+ if (document.querySelector(`script[src="${FRILL_SCRIPT_URL}"]`)) return;
53
+ const anchor = document.getElementsByTagName('script')[0];
54
+ const script = document.createElement('script');
55
+ script.type = 'text/javascript';
56
+ script.async = true;
57
+ script.src = FRILL_SCRIPT_URL;
58
+ anchor?.parentNode?.insertBefore(script, anchor);
59
+ } catch {}
60
+ }
61
+
62
+ export function FrillEmbed() {
63
+ const { user } = useAuth();
64
+ const { whitelabel } = useWhitelabel();
65
+ const { data: subscriptionData } = useActiveSubscription();
66
+ const containerRef = useRef<any>(null);
67
+
68
+ const subscription = subscriptionData?.data?.[0] ?? null;
69
+ const isV4 = whitelabel?.id === V4_WHITELABEL_ID;
70
+
71
+ useEffect(() => {
72
+ if (!user) return;
73
+
74
+ try {
75
+ initFrillLoader();
76
+
77
+ if (document.readyState === 'complete' || document.readyState === 'interactive') {
78
+ loadFrillScript();
79
+ } else {
80
+ document.addEventListener('DOMContentLoaded', loadFrillScript);
81
+ }
82
+
83
+ const userData: Record<string, any> = {
84
+ id: String(user.id ?? ''),
85
+ };
86
+ if (user.email) userData.email = user.email;
87
+ if (user.name || user.last_name) {
88
+ userData.name = `${user.name ?? ''} ${user.last_name ?? ''}`.trim();
89
+ }
90
+ userData.attributes = isV4
91
+ ? { company: 'V4' }
92
+ : { profile: user.profile ?? '', plan: subscription?.plan_name ?? '' };
93
+
94
+ const config: Record<string, any> = { key: FRILL_KEY, user: userData };
95
+ if (!isV4) {
96
+ config.surveys = SURVEYS;
97
+ config.widgets = WIDGETS;
98
+ }
99
+
100
+ const win = window as any;
101
+ const containerPromise = win.Frill('container', config);
102
+ win.Frill('identify', userData);
103
+
104
+ containerPromise.then((widget: any) => {
105
+ containerRef.current = widget;
106
+ }).catch(() => {});
107
+ } catch {}
108
+
109
+ return () => {
110
+ try {
111
+ containerRef.current?.destroy();
112
+ containerRef.current = null;
113
+ document.removeEventListener('DOMContentLoaded', loadFrillScript);
114
+ } catch {}
115
+ };
116
+ }, [user, isV4, subscription?.plan_name]);
117
+
118
+ return null;
119
+ }
@@ -1,61 +1,61 @@
1
- "use client";
2
-
3
- import { Suspense, useEffect } from "react";
4
- import { useSearchParams } from "next/navigation";
5
-
6
- interface SearchParamsHandlerProps {
7
- handlers: {
8
- [key: string]: () => void;
9
- };
10
- }
11
-
12
- /**
13
- * SearchParamsHandler
14
- *
15
- * Este componente é responsável por ler os parâmetros da URL e executar callbacks
16
- * correspondentes a cada parâmetro encontrado.
17
- *
18
- * Por que precisamos deste componente?
19
- * - O Next.js 16 exige que useSearchParams() seja envolvido em um <Suspense> boundary
20
- * - Isso evita erros de prerendering durante o build
21
- * - Permite que URLs como "/page?tab=performance" naveguem diretamente para uma aba específica
22
- *
23
- * Exemplo de como funciona
24
- * 1. Usa useSearchParams() para ler o parâmetro "tab" da URL
25
- * 2. Monitora mudanças nos parâmetros com useEffect
26
- * 3. Quando encontra um parâmetro "tab", chama onTabChange com o valor
27
- * 4. Retorna null porque não renderiza nada na tela
28
- *
29
- * Exemplo de uso:
30
- * <Suspense fallback={null}>
31
- * <SearchParamsHandler handlers={{ tab: () => console.log("Tab changed") }} />
32
- * </Suspense>
33
- *
34
- * Exemplos de URL:
35
- * - /greatpages/123?tab=performance → abre a aba "performance"
36
- * - /greatpages/123?tab=leads → abre a aba "leads"
37
- */
38
- export function SearchParamsHandler(options: SearchParamsHandlerProps) {
39
- return (
40
- <Suspense fallback={null}>
41
- <SearchParamsHandlerChildren {...options} />
42
- </Suspense>
43
- );
44
- }
45
-
46
- export function SearchParamsHandlerChildren(options: SearchParamsHandlerProps) {
47
- const searchParams = useSearchParams();
48
-
49
- useEffect(() => {
50
- Object.keys(options.handlers).forEach((key) => {
51
- const value = searchParams.get(key);
52
-
53
- if (value) {
54
- options.handlers[key]();
55
- }
56
- });
57
- // eslint-disable-next-line react-hooks/exhaustive-deps
58
- }, [searchParams]);
59
-
60
- return null;
61
- }
1
+ "use client";
2
+
3
+ import { Suspense, useEffect } from "react";
4
+ import { useSearchParams } from "next/navigation";
5
+
6
+ interface SearchParamsHandlerProps {
7
+ handlers: {
8
+ [key: string]: () => void;
9
+ };
10
+ }
11
+
12
+ /**
13
+ * SearchParamsHandler
14
+ *
15
+ * Este componente é responsável por ler os parâmetros da URL e executar callbacks
16
+ * correspondentes a cada parâmetro encontrado.
17
+ *
18
+ * Por que precisamos deste componente?
19
+ * - O Next.js 16 exige que useSearchParams() seja envolvido em um <Suspense> boundary
20
+ * - Isso evita erros de prerendering durante o build
21
+ * - Permite que URLs como "/page?tab=performance" naveguem diretamente para uma aba específica
22
+ *
23
+ * Exemplo de como funciona
24
+ * 1. Usa useSearchParams() para ler o parâmetro "tab" da URL
25
+ * 2. Monitora mudanças nos parâmetros com useEffect
26
+ * 3. Quando encontra um parâmetro "tab", chama onTabChange com o valor
27
+ * 4. Retorna null porque não renderiza nada na tela
28
+ *
29
+ * Exemplo de uso:
30
+ * <Suspense fallback={null}>
31
+ * <SearchParamsHandler handlers={{ tab: () => console.log("Tab changed") }} />
32
+ * </Suspense>
33
+ *
34
+ * Exemplos de URL:
35
+ * - /greatpages/123?tab=performance → abre a aba "performance"
36
+ * - /greatpages/123?tab=leads → abre a aba "leads"
37
+ */
38
+ export function SearchParamsHandler(options: SearchParamsHandlerProps) {
39
+ return (
40
+ <Suspense fallback={null}>
41
+ <SearchParamsHandlerChildren {...options} />
42
+ </Suspense>
43
+ );
44
+ }
45
+
46
+ export function SearchParamsHandlerChildren(options: SearchParamsHandlerProps) {
47
+ const searchParams = useSearchParams();
48
+
49
+ useEffect(() => {
50
+ Object.keys(options.handlers).forEach((key) => {
51
+ const value = searchParams.get(key);
52
+
53
+ if (value) {
54
+ options.handlers[key]();
55
+ }
56
+ });
57
+ // eslint-disable-next-line react-hooks/exhaustive-deps
58
+ }, [searchParams]);
59
+
60
+ return null;
61
+ }