@greatapps/common 1.1.700 → 1.1.702

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 (563) hide show
  1. package/dist/components/account/ConfigurationsMyAccountModal.mjs +1 -1
  2. package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
  3. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
  4. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
  5. package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
  6. package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
  7. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
  8. package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -1
  9. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
  10. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
  11. package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
  12. package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
  13. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
  14. package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
  15. package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
  16. package/dist/components/account/sections/SecuritySection.mjs.map +1 -1
  17. package/dist/components/account/sections/TokenSection.mjs.map +1 -1
  18. package/dist/components/embeds/ClarityEmbed.mjs.map +1 -1
  19. package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
  20. package/dist/components/embeds/EmbedWidgets.mjs.map +1 -1
  21. package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
  22. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  23. package/dist/components/layouts/AppNavBar.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/CreditsDisabledModal.mjs.map +1 -1
  33. package/dist/components/modals/HexaPromoModal.mjs +2 -2
  34. package/dist/components/modals/HexaPromoModal.mjs.map +1 -1
  35. package/dist/components/modals/HexaPromoModalGate.mjs +8 -1
  36. package/dist/components/modals/HexaPromoModalGate.mjs.map +1 -1
  37. package/dist/components/modals/Modals.mjs.map +1 -1
  38. package/dist/components/modals/PaidPlanRequiredModal.mjs.map +1 -1
  39. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  40. package/dist/components/modals/cards/CannotDeleteCardModal.mjs.map +1 -1
  41. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  42. package/dist/components/modals/cards/DeleteCardModal.mjs.map +1 -1
  43. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  44. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  45. package/dist/components/navigation/OverdueInvoiceBanner.mjs.map +1 -1
  46. package/dist/components/navigation/PendingCancellationBanner.mjs.map +1 -1
  47. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  48. package/dist/components/navigation/SubscriptionBanner.mjs.map +1 -1
  49. package/dist/components/navigation/TrialBanner.mjs.map +1 -1
  50. package/dist/components/navigation/UpcomingInvoiceBanner.mjs.map +1 -1
  51. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  52. package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
  53. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  54. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  55. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  56. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  57. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  58. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  59. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  60. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  61. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  62. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  63. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  64. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  65. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  66. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  67. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  68. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  69. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  70. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  71. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  72. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  73. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  74. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  75. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  76. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  77. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  78. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  79. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  80. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  81. package/dist/components/ui/form/FormField.mjs.map +1 -1
  82. package/dist/components/ui/form/Input.mjs.map +1 -1
  83. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  84. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  85. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  86. package/dist/components/ui/form/Select.mjs +1 -1
  87. package/dist/components/ui/form/Select.mjs.map +1 -1
  88. package/dist/components/ui/form/Switch.mjs.map +1 -1
  89. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  90. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  91. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  92. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  93. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  94. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  95. package/dist/components/widgets/ImageUpload/ImageCropModal.mjs.map +1 -1
  96. package/dist/components/widgets/ImageUpload/ImageTooSmallModal.mjs.map +1 -1
  97. package/dist/components/widgets/ImageUpload/ImageUpload.mjs.map +1 -1
  98. package/dist/components/widgets/ImageUpload/index.mjs.map +1 -1
  99. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  100. package/dist/handlers.mjs.map +1 -1
  101. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  102. package/dist/hooks/useAuthQueryKey.mjs.map +1 -1
  103. package/dist/hooks/useBrandLoadingIcon.mjs.map +1 -1
  104. package/dist/hooks/useRouter.mjs.map +1 -1
  105. package/dist/http.mjs.map +1 -1
  106. package/dist/i18n/config.mjs.map +1 -1
  107. package/dist/i18n/country-language.mjs.map +1 -1
  108. package/dist/i18n/messages/en-us.mjs.map +1 -1
  109. package/dist/i18n/messages/es-es.mjs.map +1 -1
  110. package/dist/i18n/messages/index.mjs.map +1 -1
  111. package/dist/i18n/messages/pt-br.mjs.map +1 -1
  112. package/dist/i18n/normalize.mjs.map +1 -1
  113. package/dist/i18n/resolve-locale.mjs.map +1 -1
  114. package/dist/i18n.mjs.map +1 -1
  115. package/dist/index.mjs.map +1 -1
  116. package/dist/infra/http/api-fetch.mjs.map +1 -1
  117. package/dist/infra/route/parse-id.mjs.map +1 -1
  118. package/dist/infra/route/parse-numeric.mjs.map +1 -1
  119. package/dist/infra/route/safe-route-handler.mjs.map +1 -1
  120. package/dist/infra/route/search-params.mjs.map +1 -1
  121. package/dist/infra/utils/array.mjs.map +1 -1
  122. package/dist/infra/utils/date.mjs.map +1 -1
  123. package/dist/middleware.mjs.map +1 -1
  124. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  125. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  126. package/dist/modules/accounts/actions/get-account-token.action.mjs.map +1 -1
  127. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  128. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  129. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  130. package/dist/modules/accounts/hooks/use-account-token.hook.mjs.map +1 -1
  131. package/dist/modules/accounts/hooks/use-currency-formatter.hook.mjs.map +1 -1
  132. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  133. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  134. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  135. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  136. package/dist/modules/accounts/services/account-token.service.mjs.map +1 -1
  137. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  138. package/dist/modules/auth/actions/social-google-login.action.mjs.map +1 -1
  139. package/dist/modules/auth/actions/social-google-onboarding.action.mjs.map +1 -1
  140. package/dist/modules/auth/actions/unlink-google.action.mjs.map +1 -1
  141. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  142. package/dist/modules/auth/actions/verify-two-factor.action.mjs.map +1 -1
  143. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  144. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  145. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  146. package/dist/modules/auth/hooks/social-google-login.hook.mjs.map +1 -1
  147. package/dist/modules/auth/hooks/social-google-onboarding.hook.mjs.map +1 -1
  148. package/dist/modules/auth/hooks/unlink-google.hook.mjs.map +1 -1
  149. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  150. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -1
  151. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  152. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  153. package/dist/modules/auth/utils/assert-paid-subscription.mjs.map +1 -1
  154. package/dist/modules/auth/utils/assert-subscription-addon.mjs.map +1 -1
  155. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  156. package/dist/modules/auth/utils/require-token-not-expired.mjs.map +1 -1
  157. package/dist/modules/auth/utils/require-valid-session.mjs.map +1 -1
  158. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  159. package/dist/modules/cards/actions/create-setup-intent.action.mjs.map +1 -1
  160. package/dist/modules/cards/actions/delete-card.action.mjs.map +1 -1
  161. package/dist/modules/cards/actions/set-default-card.action.mjs.map +1 -1
  162. package/dist/modules/cards/handlers/find-card-by-id.handler.mjs.map +1 -1
  163. package/dist/modules/cards/handlers/list-cards.handler.mjs.map +1 -1
  164. package/dist/modules/cards/hooks/card-by-id.hook.mjs.map +1 -1
  165. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  166. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  167. package/dist/modules/cards/hooks/create-setup-intent.hook.mjs.map +1 -1
  168. package/dist/modules/cards/hooks/delete-card.hook.mjs.map +1 -1
  169. package/dist/modules/cards/hooks/delete-confirmation.hook.mjs.map +1 -1
  170. package/dist/modules/cards/hooks/handle-delete-card.hook.mjs.map +1 -1
  171. package/dist/modules/cards/hooks/set-default-card.hook.mjs.map +1 -1
  172. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  173. package/dist/modules/cards/types.mjs.map +1 -1
  174. package/dist/modules/charges/actions/charge-action.action.mjs.map +1 -1
  175. package/dist/modules/charges/handlers/find-charge-by-id.handler.mjs.map +1 -1
  176. package/dist/modules/charges/handlers/list-charges.handler.mjs.map +1 -1
  177. package/dist/modules/charges/hooks/charge-action.hook.mjs.map +1 -1
  178. package/dist/modules/charges/hooks/charge-by-id.hook.mjs.map +1 -1
  179. package/dist/modules/charges/hooks/charges.hook.mjs.map +1 -1
  180. package/dist/modules/charges/services/charges.service.mjs.map +1 -1
  181. package/dist/modules/charges/types/charge.type.mjs.map +1 -1
  182. package/dist/modules/ia-credits/handlers/list-ia-credits.handler.mjs.map +1 -1
  183. package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs.map +1 -1
  184. package/dist/modules/images/actions/process-image.action.mjs.map +1 -1
  185. package/dist/modules/images/constants/image.constants.mjs.map +1 -1
  186. package/dist/modules/images/hooks/use-image-upload.hook.mjs.map +1 -1
  187. package/dist/modules/images/services/image-processing.service.mjs.map +1 -1
  188. package/dist/modules/images/utils/base64.mjs.map +1 -1
  189. package/dist/modules/images/utils/compress-image.mjs.map +1 -1
  190. package/dist/modules/images/utils/crop-image.mjs.map +1 -1
  191. package/dist/modules/images/utils/validate-image.mjs.map +1 -1
  192. package/dist/modules/pages/constants/query-keys.constants.mjs.map +1 -1
  193. package/dist/modules/pages/handlers/count-pages.handler.mjs.map +1 -1
  194. package/dist/modules/pages/hooks/count-pages.hook.mjs.map +1 -1
  195. package/dist/modules/pages/services/pages.service.mjs.map +1 -1
  196. package/dist/modules/plans/handlers/find-plan-by-id.handler.mjs.map +1 -1
  197. package/dist/modules/plans/handlers/list-plans.handler.mjs.map +1 -1
  198. package/dist/modules/plans/hooks/list-plans.hook.mjs.map +1 -1
  199. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  200. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  201. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  202. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  203. package/dist/modules/plans/utils/map-api-plan-to-ui.mjs.map +1 -1
  204. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  205. package/dist/modules/projects/actions/create-project.action.mjs.map +1 -1
  206. package/dist/modules/projects/actions/delete-project.action.mjs.map +1 -1
  207. package/dist/modules/projects/actions/find-project.action.mjs.map +1 -1
  208. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  209. package/dist/modules/projects/actions/list-projects.action.mjs.map +1 -1
  210. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  211. package/dist/modules/projects/actions/update-project.action.mjs.map +1 -1
  212. package/dist/modules/projects/handlers/find-project.handler.mjs.map +1 -1
  213. package/dist/modules/projects/handlers/list-all-account-users.handler.mjs.map +1 -1
  214. package/dist/modules/projects/handlers/list-available-users.handler.mjs.map +1 -1
  215. package/dist/modules/projects/handlers/list-project-users.handler.mjs.map +1 -1
  216. package/dist/modules/projects/handlers/list-projects.handler.mjs.map +1 -1
  217. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  218. package/dist/modules/projects/hooks/create-project.hook.mjs.map +1 -1
  219. package/dist/modules/projects/hooks/delete-project.hook.mjs.map +1 -1
  220. package/dist/modules/projects/hooks/find-project.hook.mjs.map +1 -1
  221. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  222. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  223. package/dist/modules/projects/hooks/list-infinite-projects.hook.mjs.map +1 -1
  224. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  225. package/dist/modules/projects/hooks/list-projects.hook.mjs.map +1 -1
  226. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  227. package/dist/modules/projects/hooks/update-project.hook.mjs.map +1 -1
  228. package/dist/modules/projects/services/projects.service.mjs.map +1 -1
  229. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  230. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  231. package/dist/modules/subscriptions/actions/update-subscription-payment.action.mjs.map +1 -1
  232. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  233. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  234. package/dist/modules/subscriptions/constants/subscription.constants.mjs.map +1 -1
  235. package/dist/modules/subscriptions/handlers/list-subscriptions.handler.mjs.map +1 -1
  236. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  237. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  238. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  239. package/dist/modules/subscriptions/hooks/update-subscription-payment.hook.mjs.map +1 -1
  240. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs +2 -0
  241. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  242. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  243. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  244. package/dist/modules/subscriptions/types/pix-pending.type.mjs.map +1 -1
  245. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  246. package/dist/modules/subscriptions/utils/get-subscription-cancellation-state.mjs.map +1 -1
  247. package/dist/modules/subscriptions/utils/get-subscription-expiry-date.mjs.map +1 -1
  248. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  249. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  250. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  251. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  252. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  253. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  254. package/dist/modules/users/handlers/list-messages.handler.mjs.map +1 -1
  255. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  256. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  257. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  258. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  259. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  260. package/dist/providers/auth.provider.mjs.map +1 -1
  261. package/dist/providers/navigation.provider.mjs.map +1 -1
  262. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  263. package/dist/route.mjs.map +1 -1
  264. package/dist/store/useAccountModals.mjs.map +1 -1
  265. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  266. package/dist/store/useCreditsDisabledModal.mjs.map +1 -1
  267. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  268. package/dist/store/useHexaPromoModal.mjs.map +1 -1
  269. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  270. package/dist/store/usePaidPlanRequiredModal.mjs.map +1 -1
  271. package/dist/utils/constants/br-states.mjs.map +1 -1
  272. package/dist/utils/cookies/hexa-promo.mjs.map +1 -1
  273. package/dist/utils/countries.mjs.map +1 -1
  274. package/dist/utils/format/currency.mjs.map +1 -1
  275. package/dist/utils/intl/cookie-domain.mjs.map +1 -1
  276. package/dist/utils/intl/locale-cookie.mjs.map +1 -1
  277. package/dist/utils/next-navigation.mjs.map +1 -1
  278. package/dist/utils/redirect.mjs.map +1 -1
  279. package/dist/utils/safeMutationAction.mjs.map +1 -1
  280. package/dist/utils/safeServerAction.mjs.map +1 -1
  281. package/dist/utils/withAction.mjs.map +1 -1
  282. package/package.json +115 -115
  283. package/src/components/account/ConfigurationsMyAccountModal.tsx +179 -179
  284. package/src/components/account/ConfirmDeleteAccountModal.tsx +110 -110
  285. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +68 -68
  286. package/src/components/account/DeleteAccountModal.tsx +160 -160
  287. package/src/components/account/DisableTwoFactorAuthModal.tsx +92 -92
  288. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +51 -51
  289. package/src/components/account/TwoFactorAuthModal.tsx +220 -220
  290. package/src/components/account/hooks/useChangePhoneForm.tsx +113 -113
  291. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +116 -116
  292. package/src/components/account/sections/ChangeEmailModal.tsx +239 -239
  293. package/src/components/account/sections/ChangePasswordSection.tsx +68 -68
  294. package/src/components/account/sections/ChangePhoneModal.tsx +273 -273
  295. package/src/components/account/sections/MyProfileSection.tsx +276 -276
  296. package/src/components/account/sections/PreferencesSection.tsx +278 -278
  297. package/src/components/account/sections/SecuritySection.tsx +102 -102
  298. package/src/components/account/sections/TokenSection.tsx +85 -85
  299. package/src/components/embeds/ClarityEmbed.tsx +70 -70
  300. package/src/components/embeds/CrispEmbed.tsx +195 -195
  301. package/src/components/embeds/EmbedWidgets.tsx +62 -62
  302. package/src/components/embeds/FrillEmbed.tsx +146 -146
  303. package/src/components/layouts/AppMobileNavBar.tsx +214 -214
  304. package/src/components/layouts/AppNavBar.tsx +40 -40
  305. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  306. package/src/components/layouts/NavBar.tsx +228 -228
  307. package/src/components/layouts/NotificationsPopover.tsx +120 -120
  308. package/src/components/layouts/ProfilePopover.tsx +191 -191
  309. package/src/components/layouts/SideBarNavigation.tsx +65 -65
  310. package/src/components/layouts/UsersSelectorPopover.tsx +236 -236
  311. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  312. package/src/components/modals/BuyCreditsModal.tsx +390 -390
  313. package/src/components/modals/CreditsDisabledModal.tsx +62 -62
  314. package/src/components/modals/HexaPromoModal.tsx +212 -212
  315. package/src/components/modals/HexaPromoModalGate.tsx +93 -80
  316. package/src/components/modals/Modals.tsx +25 -25
  317. package/src/components/modals/PaidPlanRequiredModal.tsx +60 -60
  318. package/src/components/modals/cards/AddCardModal.tsx +420 -420
  319. package/src/components/modals/cards/CannotDeleteCardModal.tsx +124 -124
  320. package/src/components/modals/cards/CardFormFields.tsx +363 -363
  321. package/src/components/modals/cards/DeleteCardModal.tsx +136 -136
  322. package/src/components/navigation/CancelledSubscriptionBanner.tsx +62 -62
  323. package/src/components/navigation/NavItemsContext.ts +20 -20
  324. package/src/components/navigation/OverdueInvoiceBanner.tsx +51 -51
  325. package/src/components/navigation/PendingCancellationBanner.tsx +60 -60
  326. package/src/components/navigation/ProjectSelectorPopover.tsx +180 -180
  327. package/src/components/navigation/SubscriptionBanner.tsx +94 -94
  328. package/src/components/navigation/TrialBanner.tsx +54 -54
  329. package/src/components/navigation/UpcomingInvoiceBanner.tsx +55 -55
  330. package/src/components/navigation/shells/TabsMobileShell.tsx +74 -74
  331. package/src/components/navigation/subcomponents/BottomLinks.tsx +85 -85
  332. package/src/components/navigation/subcomponents/ProjectSelector.tsx +184 -184
  333. package/src/components/pages/NotFoundPage.tsx +75 -75
  334. package/src/components/pages/notifications/Notifications.tsx +190 -190
  335. package/src/components/ui/buttons/Button.tsx +77 -77
  336. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  337. package/src/components/ui/buttons/CopyButton.tsx +59 -59
  338. package/src/components/ui/data-display/Accordion.tsx +81 -81
  339. package/src/components/ui/data-display/Badge.tsx +47 -47
  340. package/src/components/ui/data-display/Card.tsx +93 -93
  341. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  342. package/src/components/ui/data-display/CardItem.tsx +135 -135
  343. package/src/components/ui/data-display/Pagination.tsx +126 -126
  344. package/src/components/ui/data-display/PaymentInfoCard.tsx +193 -193
  345. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  346. package/src/components/ui/data-display/Separator.tsx +29 -29
  347. package/src/components/ui/data-display/Table.tsx +117 -117
  348. package/src/components/ui/data-display/Tabs.tsx +67 -67
  349. package/src/components/ui/feedback/CircularProgress.tsx +79 -79
  350. package/src/components/ui/feedback/DefaultCircularProgress.tsx +67 -67
  351. package/src/components/ui/feedback/LoadingOverlay.tsx +30 -30
  352. package/src/components/ui/feedback/Progress.tsx +40 -40
  353. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  354. package/src/components/ui/feedback/Toast.tsx +104 -104
  355. package/src/components/ui/form/Calendar.tsx +228 -228
  356. package/src/components/ui/form/Checkbox.tsx +31 -31
  357. package/src/components/ui/form/ComboboxField.tsx +159 -159
  358. package/src/components/ui/form/DatePicker.tsx +100 -100
  359. package/src/components/ui/form/DateRangePicker.tsx +111 -111
  360. package/src/components/ui/form/FormField.tsx +133 -133
  361. package/src/components/ui/form/Input.tsx +20 -20
  362. package/src/components/ui/form/InputOtp.tsx +80 -80
  363. package/src/components/ui/form/PhoneInput.tsx +210 -210
  364. package/src/components/ui/form/RadioGroup.tsx +45 -45
  365. package/src/components/ui/form/Select.tsx +200 -200
  366. package/src/components/ui/form/Switch.tsx +32 -32
  367. package/src/components/ui/form/Textarea.tsx +19 -19
  368. package/src/components/ui/overlay/Command.tsx +185 -185
  369. package/src/components/ui/overlay/Dialog.tsx +153 -153
  370. package/src/components/ui/overlay/Popover.tsx +49 -49
  371. package/src/components/ui/overlay/Sheet.tsx +170 -170
  372. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  373. package/src/components/widgets/ImageUpload/ImageCropModal.tsx +392 -392
  374. package/src/components/widgets/ImageUpload/ImageTooSmallModal.tsx +62 -62
  375. package/src/components/widgets/ImageUpload/ImageUpload.tsx +131 -131
  376. package/src/components/widgets/ImageUpload/index.ts +3 -3
  377. package/src/components/widgets/notifications/NotificationCard.tsx +73 -73
  378. package/src/handlers.ts +22 -22
  379. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  380. package/src/hooks/useAuthQueryKey.ts +32 -32
  381. package/src/hooks/useBrandLoadingIcon.tsx +18 -18
  382. package/src/hooks/useRouter.ts +38 -38
  383. package/src/http.ts +1 -1
  384. package/src/i18n/config.ts +17 -17
  385. package/src/i18n/country-language.ts +60 -60
  386. package/src/i18n/messages/en-us.ts +519 -519
  387. package/src/i18n/messages/es-es.ts +520 -520
  388. package/src/i18n/messages/index.ts +24 -24
  389. package/src/i18n/messages/pt-br.ts +543 -543
  390. package/src/i18n/normalize.ts +15 -15
  391. package/src/i18n/resolve-locale.ts +77 -77
  392. package/src/i18n.ts +10 -10
  393. package/src/index.ts +587 -587
  394. package/src/infra/http/api-fetch.ts +39 -39
  395. package/src/infra/route/parse-id.ts +9 -9
  396. package/src/infra/route/parse-numeric.ts +16 -16
  397. package/src/infra/route/safe-route-handler.ts +16 -16
  398. package/src/infra/route/search-params.ts +9 -9
  399. package/src/infra/utils/array.ts +167 -167
  400. package/src/infra/utils/date.ts +59 -59
  401. package/src/middleware.ts +4 -4
  402. package/src/modules/accounts/actions/account-management.action.ts +109 -109
  403. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  404. package/src/modules/accounts/actions/get-account-token.action.ts +8 -8
  405. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  406. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  407. package/src/modules/accounts/hooks/current-account.hook.tsx +26 -26
  408. package/src/modules/accounts/hooks/use-account-token.hook.tsx +14 -14
  409. package/src/modules/accounts/hooks/use-currency-formatter.hook.tsx +32 -32
  410. package/src/modules/accounts/hooks/useAccountManagement.ts +95 -95
  411. package/src/modules/accounts/hooks/useCurrencies.ts +18 -18
  412. package/src/modules/accounts/hooks/useTimezones.ts +18 -18
  413. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  414. package/src/modules/accounts/services/account-token.service.ts +52 -52
  415. package/src/modules/accounts/services/account.service.ts +243 -243
  416. package/src/modules/accounts/types.ts +230 -230
  417. package/src/modules/auth/actions/social-google-login.action.ts +12 -12
  418. package/src/modules/auth/actions/social-google-onboarding.action.ts +13 -13
  419. package/src/modules/auth/actions/unlink-google.action.ts +8 -8
  420. package/src/modules/auth/actions/validate-session.action.ts +70 -70
  421. package/src/modules/auth/actions/verify-two-factor.action.ts +19 -19
  422. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  423. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  424. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  425. package/src/modules/auth/hooks/social-google-login.hook.tsx +13 -13
  426. package/src/modules/auth/hooks/social-google-onboarding.hook.tsx +13 -13
  427. package/src/modules/auth/hooks/unlink-google.hook.tsx +13 -13
  428. package/src/modules/auth/hooks/useManagementPermissions.ts +52 -52
  429. package/src/modules/auth/hooks/useUserQuery.ts +103 -103
  430. package/src/modules/auth/types/management-permission.type.ts +14 -14
  431. package/src/modules/auth/utils/assert-management-permission.ts +56 -56
  432. package/src/modules/auth/utils/assert-management-subscription.ts +38 -38
  433. package/src/modules/auth/utils/assert-paid-subscription.ts +47 -47
  434. package/src/modules/auth/utils/assert-subscription-addon.ts +42 -42
  435. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  436. package/src/modules/auth/utils/require-token-not-expired.ts +53 -53
  437. package/src/modules/auth/utils/require-valid-session.ts +35 -35
  438. package/src/modules/cards/actions/create-card.action.ts +9 -9
  439. package/src/modules/cards/actions/create-setup-intent.action.ts +8 -8
  440. package/src/modules/cards/actions/delete-card.action.ts +8 -8
  441. package/src/modules/cards/actions/set-default-card.action.ts +8 -8
  442. package/src/modules/cards/handlers/find-card-by-id.handler.ts +15 -15
  443. package/src/modules/cards/handlers/list-cards.handler.ts +10 -10
  444. package/src/modules/cards/hooks/card-by-id.hook.ts +17 -17
  445. package/src/modules/cards/hooks/cards.hook.ts +22 -22
  446. package/src/modules/cards/hooks/create-card.hook.ts +30 -30
  447. package/src/modules/cards/hooks/create-setup-intent.hook.ts +11 -11
  448. package/src/modules/cards/hooks/delete-card.hook.ts +52 -52
  449. package/src/modules/cards/hooks/delete-confirmation.hook.ts +40 -40
  450. package/src/modules/cards/hooks/handle-delete-card.hook.ts +47 -47
  451. package/src/modules/cards/hooks/set-default-card.hook.ts +55 -55
  452. package/src/modules/cards/services/cards.service.ts +136 -136
  453. package/src/modules/cards/types.ts +52 -52
  454. package/src/modules/charges/actions/charge-action.action.ts +13 -13
  455. package/src/modules/charges/handlers/find-charge-by-id.handler.ts +14 -14
  456. package/src/modules/charges/handlers/list-charges.handler.ts +15 -15
  457. package/src/modules/charges/hooks/charge-action.hook.ts +24 -24
  458. package/src/modules/charges/hooks/charge-by-id.hook.ts +19 -19
  459. package/src/modules/charges/hooks/charges.hook.ts +19 -19
  460. package/src/modules/charges/services/charges.service.ts +63 -63
  461. package/src/modules/charges/types/charge.type.ts +68 -68
  462. package/src/modules/ia-credits/handlers/list-ia-credits.handler.ts +14 -14
  463. package/src/modules/ia-credits/hooks/ia-credits.hook.ts +103 -103
  464. package/src/modules/images/actions/process-image.action.ts +40 -40
  465. package/src/modules/images/constants/image.constants.ts +11 -11
  466. package/src/modules/images/hooks/use-image-upload.hook.ts +153 -153
  467. package/src/modules/images/services/image-processing.service.ts +75 -75
  468. package/src/modules/images/types/image.type.ts +54 -54
  469. package/src/modules/images/utils/base64.ts +26 -26
  470. package/src/modules/images/utils/compress-image.ts +20 -20
  471. package/src/modules/images/utils/crop-image.ts +68 -68
  472. package/src/modules/images/utils/validate-image.ts +86 -86
  473. package/src/modules/pages/constants/query-keys.constants.ts +1 -1
  474. package/src/modules/pages/handlers/count-pages.handler.ts +12 -12
  475. package/src/modules/pages/hooks/count-pages.hook.ts +21 -21
  476. package/src/modules/pages/services/pages.service.ts +27 -27
  477. package/src/modules/plans/handlers/find-plan-by-id.handler.ts +14 -14
  478. package/src/modules/plans/handlers/list-plans.handler.ts +22 -22
  479. package/src/modules/plans/hooks/list-plans.hook.ts +23 -23
  480. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +14 -14
  481. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +39 -39
  482. package/src/modules/plans/services/plans.service.ts +136 -136
  483. package/src/modules/plans/types/plan.type.ts +79 -79
  484. package/src/modules/plans/utils/map-api-plan-to-ui.ts +167 -167
  485. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  486. package/src/modules/projects/actions/create-project.action.ts +9 -9
  487. package/src/modules/projects/actions/delete-project.action.ts +8 -8
  488. package/src/modules/projects/actions/find-project.action.ts +8 -8
  489. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  490. package/src/modules/projects/actions/list-projects.action.ts +16 -16
  491. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  492. package/src/modules/projects/actions/update-project.action.ts +9 -9
  493. package/src/modules/projects/handlers/find-project.handler.ts +15 -15
  494. package/src/modules/projects/handlers/list-all-account-users.handler.ts +23 -23
  495. package/src/modules/projects/handlers/list-available-users.handler.ts +26 -26
  496. package/src/modules/projects/handlers/list-project-users.handler.ts +26 -26
  497. package/src/modules/projects/handlers/list-projects.handler.ts +23 -23
  498. package/src/modules/projects/hooks/add-project-user.hook.ts +72 -72
  499. package/src/modules/projects/hooks/create-project.hook.ts +120 -120
  500. package/src/modules/projects/hooks/delete-project.hook.ts +58 -58
  501. package/src/modules/projects/hooks/find-project.hook.ts +18 -18
  502. package/src/modules/projects/hooks/list-all-account-users.hook.ts +40 -40
  503. package/src/modules/projects/hooks/list-available-users.hook.ts +39 -39
  504. package/src/modules/projects/hooks/list-infinite-projects.hook.ts +44 -44
  505. package/src/modules/projects/hooks/list-project-users.hook.ts +39 -39
  506. package/src/modules/projects/hooks/list-projects.hook.ts +23 -23
  507. package/src/modules/projects/hooks/remove-project-user.hook.ts +72 -72
  508. package/src/modules/projects/hooks/update-project.hook.ts +86 -86
  509. package/src/modules/projects/services/projects.service.ts +156 -156
  510. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  511. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  512. package/src/modules/subscriptions/actions/update-subscription-payment.action.ts +13 -13
  513. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  514. package/src/modules/subscriptions/constants/query-keys.constants.ts +3 -3
  515. package/src/modules/subscriptions/constants/subscription.constants.ts +1 -1
  516. package/src/modules/subscriptions/handlers/list-subscriptions.handler.ts +17 -17
  517. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  518. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +22 -22
  519. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +22 -22
  520. package/src/modules/subscriptions/hooks/update-subscription-payment.hook.ts +25 -25
  521. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +31 -28
  522. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +44 -44
  523. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  524. package/src/modules/subscriptions/types/calculate-subscription.type.ts +116 -116
  525. package/src/modules/subscriptions/types/pix-pending.type.ts +38 -38
  526. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  527. package/src/modules/subscriptions/utils/get-subscription-cancellation-state.ts +37 -37
  528. package/src/modules/subscriptions/utils/get-subscription-expiry-date.ts +33 -33
  529. package/src/modules/subscriptions/utils/has-subscription-expired.ts +11 -11
  530. package/src/modules/subscriptions/utils/periodicity.ts +79 -79
  531. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  532. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  533. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  534. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  535. package/src/modules/users/handlers/list-messages.handler.ts +39 -39
  536. package/src/modules/users/hooks/messages.hook.ts +69 -69
  537. package/src/modules/users/services/messages.service.ts +49 -49
  538. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  539. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  540. package/src/modules/whitelabel/schema.ts +84 -84
  541. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  542. package/src/providers/auth.provider.tsx +267 -267
  543. package/src/providers/navigation.provider.tsx +99 -99
  544. package/src/providers/whitelabel.provider.tsx +90 -90
  545. package/src/route.ts +4 -4
  546. package/src/store/useAccountModals.ts +85 -85
  547. package/src/store/useBuyCreditsModal.ts +21 -21
  548. package/src/store/useCreditsDisabledModal.ts +11 -11
  549. package/src/store/useDesktopSidebarStore.ts +47 -47
  550. package/src/store/useHexaPromoModal.ts +13 -13
  551. package/src/store/useMdSidebarStore.ts +34 -34
  552. package/src/store/usePaidPlanRequiredModal.ts +19 -19
  553. package/src/utils/constants/br-states.ts +29 -29
  554. package/src/utils/cookies/hexa-promo.ts +114 -114
  555. package/src/utils/countries.ts +224 -224
  556. package/src/utils/format/currency.ts +70 -70
  557. package/src/utils/intl/cookie-domain.ts +29 -29
  558. package/src/utils/intl/locale-cookie.ts +18 -18
  559. package/src/utils/next-navigation.ts +7 -7
  560. package/src/utils/redirect.ts +78 -78
  561. package/src/utils/safeMutationAction.ts +24 -24
  562. package/src/utils/safeServerAction.ts +21 -21
  563. package/src/utils/withAction.ts +13 -13
@@ -1,167 +1,167 @@
1
- import type {
2
- Plan,
3
- PlanFeature,
4
- PlanMainFeatures,
5
- PlanPricingByPeriod,
6
- UiPlan,
7
- } from "../types/plan.type";
8
- import { ADDON_IDS } from "../../subscriptions/constants/addons.constants";
9
- import {
10
- formatCurrencyNumber,
11
- type CurrencyCode,
12
- } from "../../../utils/format/currency";
13
-
14
- export type PlanBillingPeriod = "monthly" | "semiannual" | "annual";
15
-
16
- type TranslateFn = (key: any, values?: Record<string, string | number>) => string;
17
-
18
- const BASE_FEATURES_KEYS = [
19
- { icon: "check", key: "plans.features.unlimitedVisits", fallback: "Visitas ilimitadas" },
20
- { icon: "check", key: "plans.features.unlimitedLeads", fallback: "Leads ilimitadas" },
21
- { icon: "check", key: "plans.features.sharePages", fallback: "Compartilhar páginas", tooltip: "sharePages" },
22
- { icon: "check", key: "plans.features.hosting", fallback: "Hospedagem inclusa" },
23
- // SSL (HTTPS) + CDN — brand/acronym: never translated
24
- { icon: "check", key: null, fallback: "SSL (HTTPS) + CDN" },
25
- { icon: "check", key: "plans.features.freeTemplates", fallback: "Templates gratuitos" },
26
- ] as const;
27
-
28
- function buildBaseFeatures(translate?: TranslateFn): PlanFeature[] {
29
- return BASE_FEATURES_KEYS.map(({ icon, key, fallback, ...rest }) => {
30
- const text = key && translate ? translate(`common.${key}`) : fallback;
31
- const feature: PlanFeature = { icon, text };
32
- if ("tooltip" in rest && rest.tooltip) feature.tooltip = rest.tooltip;
33
- return feature;
34
- });
35
- }
36
-
37
- function buildMainFeaturesFromItems(
38
- items: Plan["items"],
39
- translate?: TranslateFn
40
- ): PlanMainFeatures {
41
- const pagesItem = items.find((i) => i.id_addon === ADDON_IDS.PAGES);
42
- const domainsItem = items.find((i) => i.id_addon === ADDON_IDS.DOMAINS);
43
-
44
- const pagesQty = pagesItem?.quantity ?? 0;
45
- const domainsQty = domainsItem?.quantity ?? 1;
46
-
47
- let pages: string;
48
- if (pagesQty === 0) {
49
- pages = translate
50
- ? translate("common.plans.mainFeatures.pagesUnlimited")
51
- : "Páginas ilimitadas";
52
- } else if (pagesQty === 1) {
53
- pages = translate
54
- ? translate("common.plans.mainFeatures.pageSingular")
55
- : "1 página";
56
- } else {
57
- pages = translate
58
- ? translate("common.plans.mainFeatures.pagesPlural", { count: pagesQty })
59
- : `${pagesQty} páginas`;
60
- }
61
-
62
- let domains: string;
63
- if (domainsQty >= 999) {
64
- domains = translate
65
- ? translate("common.plans.mainFeatures.domainsUnlimited")
66
- : "Domínios ilimitados";
67
- } else if (domainsQty === 1) {
68
- domains = translate
69
- ? translate("common.plans.mainFeatures.domainSingular")
70
- : "1 domínio externo";
71
- } else {
72
- domains = translate
73
- ? translate("common.plans.mainFeatures.domainsPlural", { count: domainsQty })
74
- : `${domainsQty} domínios externos`;
75
- }
76
-
77
- const users = translate
78
- ? translate("common.plans.mainFeatures.usersUnlimited")
79
- : "Usuários ilimitados";
80
-
81
- return { pages, domains, users };
82
- }
83
-
84
- function computePricingByPeriod(apiPlan: Plan, currency: CurrencyCode): PlanPricingByPeriod {
85
- // Backend agora resolve value por moeda da conta; mapper apenas lê.
86
- // value pode ser null (ex.: conta USD, preço USD não cadastrado).
87
- const monthly = apiPlan.value;
88
- if (monthly == null) {
89
- return { monthly: 0, semiannual: 0, annual: 0 };
90
- }
91
- const round2 = (n: number) => Math.round(n * 100) / 100;
92
- return {
93
- monthly,
94
- semiannual: round2(monthly * (1 - apiPlan.discount_semester / 100)),
95
- annual: round2(monthly * (1 - apiPlan.discount_annual / 100)),
96
- };
97
- }
98
-
99
- function buildUiPlan(plan: Plan, currency: CurrencyCode, translate?: TranslateFn): UiPlan {
100
- const popular = plan.id === 2 || plan.id_plan === 2;
101
- const buttonVariant = popular ? "brand" : "default";
102
-
103
- const pricingByPeriod = computePricingByPeriod(plan, currency);
104
- const monthlyFinal = pricingByPeriod.monthly;
105
-
106
- const lowerName = plan.name.toLowerCase();
107
- const hasProjectAndOnboarding =
108
- lowerName.includes("agência") || lowerName.includes("agencia");
109
-
110
- const onboardingText = translate
111
- ? translate("common.plans.features.onboarding")
112
- : "Reunião de Onboarding";
113
- const projectMgmtText = translate
114
- ? translate("common.plans.features.projectManagement")
115
- : "Gestão de projetos";
116
-
117
- const features: PlanFeature[] = [
118
- ...buildBaseFeatures(translate),
119
- hasProjectAndOnboarding
120
- ? { icon: "check", text: onboardingText }
121
- : { icon: "x", text: onboardingText, disabled: true },
122
- hasProjectAndOnboarding
123
- ? { icon: "check", text: projectMgmtText, tooltip: "projectManagement" }
124
- : { icon: "x", text: projectMgmtText, disabled: true, tooltip: "projectManagement" },
125
- ];
126
-
127
- const currencyAwareItems = plan.items.map((item) => ({
128
- ...item,
129
- value: item.value ?? 0,
130
- }));
131
-
132
- const priceUnavailable = plan.value == null;
133
- const unavailableLabel = translate ? translate("common.plans.usdNotConfigured") : "USD não configurado";
134
-
135
- return {
136
- planId: plan.id,
137
- name: plan.name,
138
- isPopular: popular,
139
- buttonVariant,
140
- mainFeatures: buildMainFeaturesFromItems(plan.items, translate),
141
- features,
142
- originalPrice: priceUnavailable ? unavailableLabel : formatCurrencyNumber(monthlyFinal, 2, currency),
143
- price: priceUnavailable ? unavailableLabel : formatCurrencyNumber(monthlyFinal, 2, currency),
144
- pricingByPeriod,
145
- priceUnavailable,
146
- items: currencyAwareItems,
147
- };
148
- }
149
-
150
- /**
151
- * Mapeia um plano da API para UiPlan em BRL.
152
- * Assinatura de 1 argumento — seguro em `plans.map(mapApiPlanToUiPlan)`.
153
- * Passa `translate` opcional para i18n; sem ele cai nos literais pt-br (back-compat).
154
- */
155
- export function mapApiPlanToUiPlan(plan: Plan, translate?: TranslateFn): UiPlan {
156
- return buildUiPlan(plan, "brl", translate);
157
- }
158
-
159
- /**
160
- * Variante currency-aware: a moeda vem do gateway da conta (getCurrencyForGateway).
161
- * Fábrica para uso ergonômico em `.map`: `plans.map(mapApiPlanToUiPlanForCurrency(currency, translate))`.
162
- * Mantida separada de mapApiPlanToUiPlan para não quebrar callers que passam a fn direto pro `.map`.
163
- */
164
- export const mapApiPlanToUiPlanForCurrency =
165
- (currency: CurrencyCode, translate?: TranslateFn) =>
166
- (plan: Plan): UiPlan =>
167
- buildUiPlan(plan, currency, translate);
1
+ import type {
2
+ Plan,
3
+ PlanFeature,
4
+ PlanMainFeatures,
5
+ PlanPricingByPeriod,
6
+ UiPlan,
7
+ } from "../types/plan.type";
8
+ import { ADDON_IDS } from "../../subscriptions/constants/addons.constants";
9
+ import {
10
+ formatCurrencyNumber,
11
+ type CurrencyCode,
12
+ } from "../../../utils/format/currency";
13
+
14
+ export type PlanBillingPeriod = "monthly" | "semiannual" | "annual";
15
+
16
+ type TranslateFn = (key: any, values?: Record<string, string | number>) => string;
17
+
18
+ const BASE_FEATURES_KEYS = [
19
+ { icon: "check", key: "plans.features.unlimitedVisits", fallback: "Visitas ilimitadas" },
20
+ { icon: "check", key: "plans.features.unlimitedLeads", fallback: "Leads ilimitadas" },
21
+ { icon: "check", key: "plans.features.sharePages", fallback: "Compartilhar páginas", tooltip: "sharePages" },
22
+ { icon: "check", key: "plans.features.hosting", fallback: "Hospedagem inclusa" },
23
+ // SSL (HTTPS) + CDN — brand/acronym: never translated
24
+ { icon: "check", key: null, fallback: "SSL (HTTPS) + CDN" },
25
+ { icon: "check", key: "plans.features.freeTemplates", fallback: "Templates gratuitos" },
26
+ ] as const;
27
+
28
+ function buildBaseFeatures(translate?: TranslateFn): PlanFeature[] {
29
+ return BASE_FEATURES_KEYS.map(({ icon, key, fallback, ...rest }) => {
30
+ const text = key && translate ? translate(`common.${key}`) : fallback;
31
+ const feature: PlanFeature = { icon, text };
32
+ if ("tooltip" in rest && rest.tooltip) feature.tooltip = rest.tooltip;
33
+ return feature;
34
+ });
35
+ }
36
+
37
+ function buildMainFeaturesFromItems(
38
+ items: Plan["items"],
39
+ translate?: TranslateFn
40
+ ): PlanMainFeatures {
41
+ const pagesItem = items.find((i) => i.id_addon === ADDON_IDS.PAGES);
42
+ const domainsItem = items.find((i) => i.id_addon === ADDON_IDS.DOMAINS);
43
+
44
+ const pagesQty = pagesItem?.quantity ?? 0;
45
+ const domainsQty = domainsItem?.quantity ?? 1;
46
+
47
+ let pages: string;
48
+ if (pagesQty === 0) {
49
+ pages = translate
50
+ ? translate("common.plans.mainFeatures.pagesUnlimited")
51
+ : "Páginas ilimitadas";
52
+ } else if (pagesQty === 1) {
53
+ pages = translate
54
+ ? translate("common.plans.mainFeatures.pageSingular")
55
+ : "1 página";
56
+ } else {
57
+ pages = translate
58
+ ? translate("common.plans.mainFeatures.pagesPlural", { count: pagesQty })
59
+ : `${pagesQty} páginas`;
60
+ }
61
+
62
+ let domains: string;
63
+ if (domainsQty >= 999) {
64
+ domains = translate
65
+ ? translate("common.plans.mainFeatures.domainsUnlimited")
66
+ : "Domínios ilimitados";
67
+ } else if (domainsQty === 1) {
68
+ domains = translate
69
+ ? translate("common.plans.mainFeatures.domainSingular")
70
+ : "1 domínio externo";
71
+ } else {
72
+ domains = translate
73
+ ? translate("common.plans.mainFeatures.domainsPlural", { count: domainsQty })
74
+ : `${domainsQty} domínios externos`;
75
+ }
76
+
77
+ const users = translate
78
+ ? translate("common.plans.mainFeatures.usersUnlimited")
79
+ : "Usuários ilimitados";
80
+
81
+ return { pages, domains, users };
82
+ }
83
+
84
+ function computePricingByPeriod(apiPlan: Plan, currency: CurrencyCode): PlanPricingByPeriod {
85
+ // Backend agora resolve value por moeda da conta; mapper apenas lê.
86
+ // value pode ser null (ex.: conta USD, preço USD não cadastrado).
87
+ const monthly = apiPlan.value;
88
+ if (monthly == null) {
89
+ return { monthly: 0, semiannual: 0, annual: 0 };
90
+ }
91
+ const round2 = (n: number) => Math.round(n * 100) / 100;
92
+ return {
93
+ monthly,
94
+ semiannual: round2(monthly * (1 - apiPlan.discount_semester / 100)),
95
+ annual: round2(monthly * (1 - apiPlan.discount_annual / 100)),
96
+ };
97
+ }
98
+
99
+ function buildUiPlan(plan: Plan, currency: CurrencyCode, translate?: TranslateFn): UiPlan {
100
+ const popular = plan.id === 2 || plan.id_plan === 2;
101
+ const buttonVariant = popular ? "brand" : "default";
102
+
103
+ const pricingByPeriod = computePricingByPeriod(plan, currency);
104
+ const monthlyFinal = pricingByPeriod.monthly;
105
+
106
+ const lowerName = plan.name.toLowerCase();
107
+ const hasProjectAndOnboarding =
108
+ lowerName.includes("agência") || lowerName.includes("agencia");
109
+
110
+ const onboardingText = translate
111
+ ? translate("common.plans.features.onboarding")
112
+ : "Reunião de Onboarding";
113
+ const projectMgmtText = translate
114
+ ? translate("common.plans.features.projectManagement")
115
+ : "Gestão de projetos";
116
+
117
+ const features: PlanFeature[] = [
118
+ ...buildBaseFeatures(translate),
119
+ hasProjectAndOnboarding
120
+ ? { icon: "check", text: onboardingText }
121
+ : { icon: "x", text: onboardingText, disabled: true },
122
+ hasProjectAndOnboarding
123
+ ? { icon: "check", text: projectMgmtText, tooltip: "projectManagement" }
124
+ : { icon: "x", text: projectMgmtText, disabled: true, tooltip: "projectManagement" },
125
+ ];
126
+
127
+ const currencyAwareItems = plan.items.map((item) => ({
128
+ ...item,
129
+ value: item.value ?? 0,
130
+ }));
131
+
132
+ const priceUnavailable = plan.value == null;
133
+ const unavailableLabel = translate ? translate("common.plans.usdNotConfigured") : "USD não configurado";
134
+
135
+ return {
136
+ planId: plan.id,
137
+ name: plan.name,
138
+ isPopular: popular,
139
+ buttonVariant,
140
+ mainFeatures: buildMainFeaturesFromItems(plan.items, translate),
141
+ features,
142
+ originalPrice: priceUnavailable ? unavailableLabel : formatCurrencyNumber(monthlyFinal, 2, currency),
143
+ price: priceUnavailable ? unavailableLabel : formatCurrencyNumber(monthlyFinal, 2, currency),
144
+ pricingByPeriod,
145
+ priceUnavailable,
146
+ items: currencyAwareItems,
147
+ };
148
+ }
149
+
150
+ /**
151
+ * Mapeia um plano da API para UiPlan em BRL.
152
+ * Assinatura de 1 argumento — seguro em `plans.map(mapApiPlanToUiPlan)`.
153
+ * Passa `translate` opcional para i18n; sem ele cai nos literais pt-br (back-compat).
154
+ */
155
+ export function mapApiPlanToUiPlan(plan: Plan, translate?: TranslateFn): UiPlan {
156
+ return buildUiPlan(plan, "brl", translate);
157
+ }
158
+
159
+ /**
160
+ * Variante currency-aware: a moeda vem do gateway da conta (getCurrencyForGateway).
161
+ * Fábrica para uso ergonômico em `.map`: `plans.map(mapApiPlanToUiPlanForCurrency(currency, translate))`.
162
+ * Mantida separada de mapApiPlanToUiPlan para não quebrar callers que passam a fn direto pro `.map`.
163
+ */
164
+ export const mapApiPlanToUiPlanForCurrency =
165
+ (currency: CurrencyCode, translate?: TranslateFn) =>
166
+ (plan: Plan): UiPlan =>
167
+ buildUiPlan(plan, currency, translate);
@@ -1,9 +1,9 @@
1
- 'use server';
2
-
3
- import { safeMutationAction } from '../../../utils/safeMutationAction';
4
- import { projectUsersService } from '../services/project-users.service';
5
- import type { AddRemoveProjectUsersParams } from '../types';
6
-
7
- export async function addProjectUserAction(params: AddRemoveProjectUsersParams) {
8
- return safeMutationAction(() => projectUsersService.addToProject(params));
9
- }
1
+ 'use server';
2
+
3
+ import { safeMutationAction } from '../../../utils/safeMutationAction';
4
+ import { projectUsersService } from '../services/project-users.service';
5
+ import type { AddRemoveProjectUsersParams } from '../types';
6
+
7
+ export async function addProjectUserAction(params: AddRemoveProjectUsersParams) {
8
+ return safeMutationAction(() => projectUsersService.addToProject(params));
9
+ }
@@ -1,9 +1,9 @@
1
- 'use server';
2
-
3
- import { safeMutationAction } from '../../../utils/safeMutationAction';
4
- import { projectsService } from '../services/projects.service';
5
- import type { CreateProjectRequest } from '../types';
6
-
7
- export async function createProjectAction(data: CreateProjectRequest) {
8
- return safeMutationAction(() => projectsService.create(data));
9
- }
1
+ 'use server';
2
+
3
+ import { safeMutationAction } from '../../../utils/safeMutationAction';
4
+ import { projectsService } from '../services/projects.service';
5
+ import type { CreateProjectRequest } from '../types';
6
+
7
+ export async function createProjectAction(data: CreateProjectRequest) {
8
+ return safeMutationAction(() => projectsService.create(data));
9
+ }
@@ -1,8 +1,8 @@
1
- 'use server';
2
-
3
- import { safeMutationAction } from '../../../utils/safeMutationAction';
4
- import { projectsService } from '../services/projects.service';
5
-
6
- export async function deleteProjectAction(projectId: number, moveToProjectId: number) {
7
- return safeMutationAction(() => projectsService.delete(projectId, moveToProjectId));
8
- }
1
+ 'use server';
2
+
3
+ import { safeMutationAction } from '../../../utils/safeMutationAction';
4
+ import { projectsService } from '../services/projects.service';
5
+
6
+ export async function deleteProjectAction(projectId: number, moveToProjectId: number) {
7
+ return safeMutationAction(() => projectsService.delete(projectId, moveToProjectId));
8
+ }
@@ -1,8 +1,8 @@
1
- 'use server';
2
-
3
- import { safeServerAction } from '../../../utils/safeServerAction';
4
- import { projectsService } from '../services/projects.service';
5
-
6
- export async function findProjectAction(projectId: number) {
7
- return safeServerAction(() => projectsService.findById(projectId));
8
- }
1
+ 'use server';
2
+
3
+ import { safeServerAction } from '../../../utils/safeServerAction';
4
+ import { projectsService } from '../services/projects.service';
5
+
6
+ export async function findProjectAction(projectId: number) {
7
+ return safeServerAction(() => projectsService.findById(projectId));
8
+ }
@@ -1,9 +1,9 @@
1
- 'use server';
2
-
3
- import { safeServerAction } from '../../../utils/safeServerAction';
4
- import { projectUsersService } from '../services/project-users.service';
5
- import type { ListUsersParams } from '../types';
6
-
7
- export async function listProjectUsersAction(projectId: number, params: ListUsersParams = {}) {
8
- return safeServerAction(() => projectUsersService.listInProject(projectId, params));
9
- }
1
+ 'use server';
2
+
3
+ import { safeServerAction } from '../../../utils/safeServerAction';
4
+ import { projectUsersService } from '../services/project-users.service';
5
+ import type { ListUsersParams } from '../types';
6
+
7
+ export async function listProjectUsersAction(projectId: number, params: ListUsersParams = {}) {
8
+ return safeServerAction(() => projectUsersService.listInProject(projectId, params));
9
+ }
@@ -1,16 +1,16 @@
1
- 'use server';
2
-
3
- import { safeServerAction } from '../../../utils/safeServerAction';
4
- import { projectsService } from '../services/projects.service';
5
-
6
- export interface ListProjectsActionParams {
7
- page?: number;
8
- limit?: number;
9
- sort?: string;
10
- search?: string;
11
- deleted?: number;
12
- }
13
-
14
- export async function listProjectsAction(params?: ListProjectsActionParams) {
15
- return safeServerAction(() => projectsService.list(params));
16
- }
1
+ 'use server';
2
+
3
+ import { safeServerAction } from '../../../utils/safeServerAction';
4
+ import { projectsService } from '../services/projects.service';
5
+
6
+ export interface ListProjectsActionParams {
7
+ page?: number;
8
+ limit?: number;
9
+ sort?: string;
10
+ search?: string;
11
+ deleted?: number;
12
+ }
13
+
14
+ export async function listProjectsAction(params?: ListProjectsActionParams) {
15
+ return safeServerAction(() => projectsService.list(params));
16
+ }
@@ -1,9 +1,9 @@
1
- 'use server';
2
-
3
- import { safeMutationAction } from '../../../utils/safeMutationAction';
4
- import { projectUsersService } from '../services/project-users.service';
5
- import type { AddRemoveProjectUsersParams } from '../types';
6
-
7
- export async function removeProjectUserAction(params: AddRemoveProjectUsersParams) {
8
- return safeMutationAction(() => projectUsersService.removeFromProject(params));
9
- }
1
+ 'use server';
2
+
3
+ import { safeMutationAction } from '../../../utils/safeMutationAction';
4
+ import { projectUsersService } from '../services/project-users.service';
5
+ import type { AddRemoveProjectUsersParams } from '../types';
6
+
7
+ export async function removeProjectUserAction(params: AddRemoveProjectUsersParams) {
8
+ return safeMutationAction(() => projectUsersService.removeFromProject(params));
9
+ }
@@ -1,9 +1,9 @@
1
- 'use server';
2
-
3
- import { safeMutationAction } from '../../../utils/safeMutationAction';
4
- import { projectsService } from '../services/projects.service';
5
- import type { UpdateProjectRequest } from '../types';
6
-
7
- export async function updateProjectAction(projectId: number, data: UpdateProjectRequest) {
8
- return safeMutationAction(() => projectsService.update(projectId, data));
9
- }
1
+ 'use server';
2
+
3
+ import { safeMutationAction } from '../../../utils/safeMutationAction';
4
+ import { projectsService } from '../services/projects.service';
5
+ import type { UpdateProjectRequest } from '../types';
6
+
7
+ export async function updateProjectAction(projectId: number, data: UpdateProjectRequest) {
8
+ return safeMutationAction(() => projectsService.update(projectId, data));
9
+ }
@@ -1,15 +1,15 @@
1
- import 'server-only';
2
-
3
- import type { NextRequest } from 'next/server';
4
- import { parseId } from '../../../infra/route/parse-id';
5
- import { safeRouteHandler } from '../../../infra/route/safe-route-handler';
6
- import { projectsService } from '../services/projects.service';
7
-
8
- export function createFindProjectHandler() {
9
- return async function GET(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
10
- return safeRouteHandler(async () => {
11
- const { id } = await params;
12
- return projectsService.findById(parseId(id));
13
- });
14
- };
15
- }
1
+ import 'server-only';
2
+
3
+ import type { NextRequest } from 'next/server';
4
+ import { parseId } from '../../../infra/route/parse-id';
5
+ import { safeRouteHandler } from '../../../infra/route/safe-route-handler';
6
+ import { projectsService } from '../services/projects.service';
7
+
8
+ export function createFindProjectHandler() {
9
+ return async function GET(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
10
+ return safeRouteHandler(async () => {
11
+ const { id } = await params;
12
+ return projectsService.findById(parseId(id));
13
+ });
14
+ };
15
+ }
@@ -1,23 +1,23 @@
1
- import 'server-only';
2
-
3
- import type { NextRequest } from 'next/server';
4
- import { parseNumericFields } from '../../../infra/route/parse-numeric';
5
- import { safeRouteHandler } from '../../../infra/route/safe-route-handler';
6
- import { searchParamsToParams } from '../../../infra/route/search-params';
7
- import { projectUsersService } from '../services/project-users.service';
8
- import type { ListUsersParams } from '../types';
9
-
10
- const NUMERIC_FIELDS = ['page', 'limit'] as const;
11
-
12
- export function createListAllAccountUsersHandler() {
13
- return async function GET(req: NextRequest) {
14
- return safeRouteHandler(() =>
15
- projectUsersService.listAllAccountUsers(
16
- parseNumericFields<ListUsersParams>(
17
- searchParamsToParams<ListUsersParams>(req.nextUrl.searchParams),
18
- NUMERIC_FIELDS
19
- )
20
- )
21
- );
22
- };
23
- }
1
+ import 'server-only';
2
+
3
+ import type { NextRequest } from 'next/server';
4
+ import { parseNumericFields } from '../../../infra/route/parse-numeric';
5
+ import { safeRouteHandler } from '../../../infra/route/safe-route-handler';
6
+ import { searchParamsToParams } from '../../../infra/route/search-params';
7
+ import { projectUsersService } from '../services/project-users.service';
8
+ import type { ListUsersParams } from '../types';
9
+
10
+ const NUMERIC_FIELDS = ['page', 'limit'] as const;
11
+
12
+ export function createListAllAccountUsersHandler() {
13
+ return async function GET(req: NextRequest) {
14
+ return safeRouteHandler(() =>
15
+ projectUsersService.listAllAccountUsers(
16
+ parseNumericFields<ListUsersParams>(
17
+ searchParamsToParams<ListUsersParams>(req.nextUrl.searchParams),
18
+ NUMERIC_FIELDS
19
+ )
20
+ )
21
+ );
22
+ };
23
+ }
@@ -1,26 +1,26 @@
1
- import 'server-only';
2
-
3
- import type { NextRequest } from 'next/server';
4
- import { parseId } from '../../../infra/route/parse-id';
5
- import { parseNumericFields } from '../../../infra/route/parse-numeric';
6
- import { safeRouteHandler } from '../../../infra/route/safe-route-handler';
7
- import { searchParamsToParams } from '../../../infra/route/search-params';
8
- import { projectUsersService } from '../services/project-users.service';
9
- import type { ListUsersParams } from '../types';
10
-
11
- const NUMERIC_FIELDS = ['page', 'limit'] as const;
12
-
13
- export function createListAvailableUsersHandler() {
14
- return async function GET(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
15
- return safeRouteHandler(async () => {
16
- const { id } = await params;
17
- return projectUsersService.listNotInProject(
18
- parseId(id),
19
- parseNumericFields<ListUsersParams>(
20
- searchParamsToParams<ListUsersParams>(req.nextUrl.searchParams),
21
- NUMERIC_FIELDS
22
- )
23
- );
24
- });
25
- };
26
- }
1
+ import 'server-only';
2
+
3
+ import type { NextRequest } from 'next/server';
4
+ import { parseId } from '../../../infra/route/parse-id';
5
+ import { parseNumericFields } from '../../../infra/route/parse-numeric';
6
+ import { safeRouteHandler } from '../../../infra/route/safe-route-handler';
7
+ import { searchParamsToParams } from '../../../infra/route/search-params';
8
+ import { projectUsersService } from '../services/project-users.service';
9
+ import type { ListUsersParams } from '../types';
10
+
11
+ const NUMERIC_FIELDS = ['page', 'limit'] as const;
12
+
13
+ export function createListAvailableUsersHandler() {
14
+ return async function GET(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
15
+ return safeRouteHandler(async () => {
16
+ const { id } = await params;
17
+ return projectUsersService.listNotInProject(
18
+ parseId(id),
19
+ parseNumericFields<ListUsersParams>(
20
+ searchParamsToParams<ListUsersParams>(req.nextUrl.searchParams),
21
+ NUMERIC_FIELDS
22
+ )
23
+ );
24
+ });
25
+ };
26
+ }