@greatapps/common 1.1.697 → 1.1.698

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 (554) 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/Modals.mjs.map +1 -1
  34. package/dist/components/modals/PaidPlanRequiredModal.mjs.map +1 -1
  35. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  36. package/dist/components/modals/cards/CannotDeleteCardModal.mjs.map +1 -1
  37. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  38. package/dist/components/modals/cards/DeleteCardModal.mjs.map +1 -1
  39. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  40. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  41. package/dist/components/navigation/OverdueInvoiceBanner.mjs.map +1 -1
  42. package/dist/components/navigation/PendingCancellationBanner.mjs.map +1 -1
  43. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  44. package/dist/components/navigation/SubscriptionBanner.mjs.map +1 -1
  45. package/dist/components/navigation/TrialBanner.mjs.map +1 -1
  46. package/dist/components/navigation/UpcomingInvoiceBanner.mjs.map +1 -1
  47. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  48. package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
  49. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  50. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  51. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  52. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  53. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  54. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  55. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  56. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  57. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  58. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  59. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  60. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  61. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  62. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  63. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  64. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  65. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  66. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  67. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  68. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  69. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  70. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  71. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  72. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  73. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  74. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  75. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  76. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  77. package/dist/components/ui/form/FormField.mjs.map +1 -1
  78. package/dist/components/ui/form/Input.mjs.map +1 -1
  79. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  80. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  81. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  82. package/dist/components/ui/form/Select.mjs +1 -1
  83. package/dist/components/ui/form/Select.mjs.map +1 -1
  84. package/dist/components/ui/form/Switch.mjs.map +1 -1
  85. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  86. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  87. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  88. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  89. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  90. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  91. package/dist/components/widgets/ImageUpload/ImageCropModal.mjs.map +1 -1
  92. package/dist/components/widgets/ImageUpload/ImageTooSmallModal.mjs.map +1 -1
  93. package/dist/components/widgets/ImageUpload/ImageUpload.mjs.map +1 -1
  94. package/dist/components/widgets/ImageUpload/index.mjs.map +1 -1
  95. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  96. package/dist/handlers.mjs.map +1 -1
  97. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  98. package/dist/hooks/useAuthQueryKey.mjs.map +1 -1
  99. package/dist/hooks/useBrandLoadingIcon.mjs.map +1 -1
  100. package/dist/hooks/useRouter.mjs.map +1 -1
  101. package/dist/http.mjs.map +1 -1
  102. package/dist/i18n/config.mjs.map +1 -1
  103. package/dist/i18n/country-language.mjs.map +1 -1
  104. package/dist/i18n/messages/en-us.mjs.map +1 -1
  105. package/dist/i18n/messages/es-es.mjs.map +1 -1
  106. package/dist/i18n/messages/index.mjs.map +1 -1
  107. package/dist/i18n/messages/pt-br.mjs.map +1 -1
  108. package/dist/i18n/normalize.mjs.map +1 -1
  109. package/dist/i18n/resolve-locale.mjs.map +1 -1
  110. package/dist/i18n.mjs.map +1 -1
  111. package/dist/index.mjs.map +1 -1
  112. package/dist/infra/http/api-fetch.mjs.map +1 -1
  113. package/dist/infra/route/parse-id.mjs.map +1 -1
  114. package/dist/infra/route/parse-numeric.mjs.map +1 -1
  115. package/dist/infra/route/safe-route-handler.mjs.map +1 -1
  116. package/dist/infra/route/search-params.mjs.map +1 -1
  117. package/dist/infra/utils/array.mjs.map +1 -1
  118. package/dist/infra/utils/date.mjs.map +1 -1
  119. package/dist/middleware.mjs.map +1 -1
  120. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  121. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  122. package/dist/modules/accounts/actions/get-account-token.action.mjs.map +1 -1
  123. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  124. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  125. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  126. package/dist/modules/accounts/hooks/use-account-token.hook.mjs.map +1 -1
  127. package/dist/modules/accounts/hooks/use-currency-formatter.hook.mjs.map +1 -1
  128. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  129. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  130. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  131. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  132. package/dist/modules/accounts/services/account-token.service.mjs.map +1 -1
  133. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  134. package/dist/modules/auth/actions/social-google-login.action.mjs.map +1 -1
  135. package/dist/modules/auth/actions/social-google-onboarding.action.mjs.map +1 -1
  136. package/dist/modules/auth/actions/unlink-google.action.mjs.map +1 -1
  137. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  138. package/dist/modules/auth/actions/verify-two-factor.action.mjs.map +1 -1
  139. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  140. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  141. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  142. package/dist/modules/auth/hooks/social-google-login.hook.mjs.map +1 -1
  143. package/dist/modules/auth/hooks/social-google-onboarding.hook.mjs.map +1 -1
  144. package/dist/modules/auth/hooks/unlink-google.hook.mjs.map +1 -1
  145. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  146. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -1
  147. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  148. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  149. package/dist/modules/auth/utils/assert-paid-subscription.mjs.map +1 -1
  150. package/dist/modules/auth/utils/assert-subscription-addon.mjs.map +1 -1
  151. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  152. package/dist/modules/auth/utils/require-token-not-expired.mjs.map +1 -1
  153. package/dist/modules/auth/utils/require-valid-session.mjs.map +1 -1
  154. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  155. package/dist/modules/cards/actions/create-setup-intent.action.mjs.map +1 -1
  156. package/dist/modules/cards/actions/delete-card.action.mjs.map +1 -1
  157. package/dist/modules/cards/actions/set-default-card.action.mjs.map +1 -1
  158. package/dist/modules/cards/handlers/find-card-by-id.handler.mjs.map +1 -1
  159. package/dist/modules/cards/handlers/list-cards.handler.mjs.map +1 -1
  160. package/dist/modules/cards/hooks/card-by-id.hook.mjs.map +1 -1
  161. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  162. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  163. package/dist/modules/cards/hooks/create-setup-intent.hook.mjs.map +1 -1
  164. package/dist/modules/cards/hooks/delete-card.hook.mjs.map +1 -1
  165. package/dist/modules/cards/hooks/delete-confirmation.hook.mjs.map +1 -1
  166. package/dist/modules/cards/hooks/handle-delete-card.hook.mjs.map +1 -1
  167. package/dist/modules/cards/hooks/set-default-card.hook.mjs.map +1 -1
  168. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  169. package/dist/modules/cards/types.mjs.map +1 -1
  170. package/dist/modules/charges/actions/charge-action.action.mjs.map +1 -1
  171. package/dist/modules/charges/handlers/find-charge-by-id.handler.mjs.map +1 -1
  172. package/dist/modules/charges/handlers/list-charges.handler.mjs.map +1 -1
  173. package/dist/modules/charges/hooks/charge-action.hook.mjs.map +1 -1
  174. package/dist/modules/charges/hooks/charge-by-id.hook.mjs.map +1 -1
  175. package/dist/modules/charges/hooks/charges.hook.mjs.map +1 -1
  176. package/dist/modules/charges/services/charges.service.mjs.map +1 -1
  177. package/dist/modules/charges/types/charge.type.mjs.map +1 -1
  178. package/dist/modules/ia-credits/handlers/list-ia-credits.handler.mjs.map +1 -1
  179. package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs.map +1 -1
  180. package/dist/modules/images/actions/process-image.action.mjs.map +1 -1
  181. package/dist/modules/images/constants/image.constants.mjs.map +1 -1
  182. package/dist/modules/images/hooks/use-image-upload.hook.mjs.map +1 -1
  183. package/dist/modules/images/services/image-processing.service.mjs.map +1 -1
  184. package/dist/modules/images/utils/base64.mjs.map +1 -1
  185. package/dist/modules/images/utils/compress-image.mjs.map +1 -1
  186. package/dist/modules/images/utils/crop-image.mjs.map +1 -1
  187. package/dist/modules/images/utils/validate-image.mjs.map +1 -1
  188. package/dist/modules/pages/constants/query-keys.constants.mjs.map +1 -1
  189. package/dist/modules/pages/handlers/count-pages.handler.mjs.map +1 -1
  190. package/dist/modules/pages/hooks/count-pages.hook.mjs.map +1 -1
  191. package/dist/modules/pages/services/pages.service.mjs.map +1 -1
  192. package/dist/modules/plans/handlers/find-plan-by-id.handler.mjs.map +1 -1
  193. package/dist/modules/plans/handlers/list-plans.handler.mjs.map +1 -1
  194. package/dist/modules/plans/hooks/list-plans.hook.mjs.map +1 -1
  195. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  196. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  197. package/dist/modules/plans/services/plans.service.mjs +1 -1
  198. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  199. package/dist/modules/plans/types/plan.type.mjs +5 -1
  200. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  201. package/dist/modules/plans/utils/map-api-plan-to-ui.mjs.map +1 -1
  202. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  203. package/dist/modules/projects/actions/create-project.action.mjs.map +1 -1
  204. package/dist/modules/projects/actions/delete-project.action.mjs.map +1 -1
  205. package/dist/modules/projects/actions/find-project.action.mjs.map +1 -1
  206. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  207. package/dist/modules/projects/actions/list-projects.action.mjs.map +1 -1
  208. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  209. package/dist/modules/projects/actions/update-project.action.mjs.map +1 -1
  210. package/dist/modules/projects/handlers/find-project.handler.mjs.map +1 -1
  211. package/dist/modules/projects/handlers/list-all-account-users.handler.mjs.map +1 -1
  212. package/dist/modules/projects/handlers/list-available-users.handler.mjs.map +1 -1
  213. package/dist/modules/projects/handlers/list-project-users.handler.mjs.map +1 -1
  214. package/dist/modules/projects/handlers/list-projects.handler.mjs.map +1 -1
  215. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  216. package/dist/modules/projects/hooks/create-project.hook.mjs.map +1 -1
  217. package/dist/modules/projects/hooks/delete-project.hook.mjs.map +1 -1
  218. package/dist/modules/projects/hooks/find-project.hook.mjs.map +1 -1
  219. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  220. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  221. package/dist/modules/projects/hooks/list-infinite-projects.hook.mjs.map +1 -1
  222. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  223. package/dist/modules/projects/hooks/list-projects.hook.mjs.map +1 -1
  224. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  225. package/dist/modules/projects/hooks/update-project.hook.mjs.map +1 -1
  226. package/dist/modules/projects/services/projects.service.mjs.map +1 -1
  227. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  228. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  229. package/dist/modules/subscriptions/actions/update-subscription-payment.action.mjs.map +1 -1
  230. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  231. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  232. package/dist/modules/subscriptions/constants/subscription.constants.mjs.map +1 -1
  233. package/dist/modules/subscriptions/handlers/list-subscriptions.handler.mjs.map +1 -1
  234. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  235. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  236. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  237. package/dist/modules/subscriptions/hooks/update-subscription-payment.hook.mjs.map +1 -1
  238. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  239. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  240. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  241. package/dist/modules/subscriptions/types/pix-pending.type.mjs.map +1 -1
  242. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  243. package/dist/modules/subscriptions/utils/get-subscription-cancellation-state.mjs.map +1 -1
  244. package/dist/modules/subscriptions/utils/get-subscription-expiry-date.mjs.map +1 -1
  245. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  246. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  247. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  248. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  249. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  250. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  251. package/dist/modules/users/handlers/list-messages.handler.mjs.map +1 -1
  252. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  253. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  254. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  255. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  256. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  257. package/dist/providers/auth.provider.mjs.map +1 -1
  258. package/dist/providers/navigation.provider.mjs.map +1 -1
  259. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  260. package/dist/route.mjs.map +1 -1
  261. package/dist/store/useAccountModals.mjs.map +1 -1
  262. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  263. package/dist/store/useCreditsDisabledModal.mjs.map +1 -1
  264. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  265. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  266. package/dist/store/usePaidPlanRequiredModal.mjs.map +1 -1
  267. package/dist/utils/constants/br-states.mjs.map +1 -1
  268. package/dist/utils/countries.mjs.map +1 -1
  269. package/dist/utils/format/currency.mjs.map +1 -1
  270. package/dist/utils/intl/cookie-domain.mjs.map +1 -1
  271. package/dist/utils/intl/locale-cookie.mjs.map +1 -1
  272. package/dist/utils/next-navigation.mjs.map +1 -1
  273. package/dist/utils/redirect.mjs.map +1 -1
  274. package/dist/utils/safeMutationAction.mjs.map +1 -1
  275. package/dist/utils/safeServerAction.mjs.map +1 -1
  276. package/dist/utils/withAction.mjs.map +1 -1
  277. package/package.json +115 -115
  278. package/src/components/account/ConfigurationsMyAccountModal.tsx +179 -179
  279. package/src/components/account/ConfirmDeleteAccountModal.tsx +110 -110
  280. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +68 -68
  281. package/src/components/account/DeleteAccountModal.tsx +160 -160
  282. package/src/components/account/DisableTwoFactorAuthModal.tsx +92 -92
  283. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +51 -51
  284. package/src/components/account/TwoFactorAuthModal.tsx +220 -220
  285. package/src/components/account/hooks/useChangePhoneForm.tsx +113 -113
  286. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +116 -116
  287. package/src/components/account/sections/ChangeEmailModal.tsx +239 -239
  288. package/src/components/account/sections/ChangePasswordSection.tsx +68 -68
  289. package/src/components/account/sections/ChangePhoneModal.tsx +273 -273
  290. package/src/components/account/sections/MyProfileSection.tsx +276 -276
  291. package/src/components/account/sections/PreferencesSection.tsx +278 -278
  292. package/src/components/account/sections/SecuritySection.tsx +102 -102
  293. package/src/components/account/sections/TokenSection.tsx +85 -85
  294. package/src/components/embeds/ClarityEmbed.tsx +70 -70
  295. package/src/components/embeds/CrispEmbed.tsx +195 -195
  296. package/src/components/embeds/EmbedWidgets.tsx +62 -62
  297. package/src/components/embeds/FrillEmbed.tsx +146 -146
  298. package/src/components/layouts/AppMobileNavBar.tsx +214 -214
  299. package/src/components/layouts/AppNavBar.tsx +40 -40
  300. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  301. package/src/components/layouts/NavBar.tsx +228 -228
  302. package/src/components/layouts/NotificationsPopover.tsx +120 -120
  303. package/src/components/layouts/ProfilePopover.tsx +191 -191
  304. package/src/components/layouts/SideBarNavigation.tsx +65 -65
  305. package/src/components/layouts/UsersSelectorPopover.tsx +236 -236
  306. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  307. package/src/components/modals/BuyCreditsModal.tsx +390 -390
  308. package/src/components/modals/CreditsDisabledModal.tsx +62 -62
  309. package/src/components/modals/Modals.tsx +25 -25
  310. package/src/components/modals/PaidPlanRequiredModal.tsx +60 -60
  311. package/src/components/modals/cards/AddCardModal.tsx +420 -420
  312. package/src/components/modals/cards/CannotDeleteCardModal.tsx +124 -124
  313. package/src/components/modals/cards/CardFormFields.tsx +363 -363
  314. package/src/components/modals/cards/DeleteCardModal.tsx +136 -136
  315. package/src/components/navigation/CancelledSubscriptionBanner.tsx +62 -62
  316. package/src/components/navigation/NavItemsContext.ts +20 -20
  317. package/src/components/navigation/OverdueInvoiceBanner.tsx +51 -51
  318. package/src/components/navigation/PendingCancellationBanner.tsx +60 -60
  319. package/src/components/navigation/ProjectSelectorPopover.tsx +180 -180
  320. package/src/components/navigation/SubscriptionBanner.tsx +94 -94
  321. package/src/components/navigation/TrialBanner.tsx +54 -54
  322. package/src/components/navigation/UpcomingInvoiceBanner.tsx +55 -55
  323. package/src/components/navigation/shells/TabsMobileShell.tsx +74 -74
  324. package/src/components/navigation/subcomponents/BottomLinks.tsx +85 -85
  325. package/src/components/navigation/subcomponents/ProjectSelector.tsx +184 -184
  326. package/src/components/pages/NotFoundPage.tsx +75 -75
  327. package/src/components/pages/notifications/Notifications.tsx +190 -190
  328. package/src/components/ui/buttons/Button.tsx +77 -77
  329. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  330. package/src/components/ui/buttons/CopyButton.tsx +59 -59
  331. package/src/components/ui/data-display/Accordion.tsx +81 -81
  332. package/src/components/ui/data-display/Badge.tsx +47 -47
  333. package/src/components/ui/data-display/Card.tsx +93 -93
  334. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  335. package/src/components/ui/data-display/CardItem.tsx +135 -135
  336. package/src/components/ui/data-display/Pagination.tsx +126 -126
  337. package/src/components/ui/data-display/PaymentInfoCard.tsx +193 -193
  338. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  339. package/src/components/ui/data-display/Separator.tsx +29 -29
  340. package/src/components/ui/data-display/Table.tsx +117 -117
  341. package/src/components/ui/data-display/Tabs.tsx +67 -67
  342. package/src/components/ui/feedback/CircularProgress.tsx +79 -79
  343. package/src/components/ui/feedback/DefaultCircularProgress.tsx +67 -67
  344. package/src/components/ui/feedback/LoadingOverlay.tsx +30 -30
  345. package/src/components/ui/feedback/Progress.tsx +40 -40
  346. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  347. package/src/components/ui/feedback/Toast.tsx +104 -104
  348. package/src/components/ui/form/Calendar.tsx +228 -228
  349. package/src/components/ui/form/Checkbox.tsx +31 -31
  350. package/src/components/ui/form/ComboboxField.tsx +159 -159
  351. package/src/components/ui/form/DatePicker.tsx +100 -100
  352. package/src/components/ui/form/DateRangePicker.tsx +111 -111
  353. package/src/components/ui/form/FormField.tsx +133 -133
  354. package/src/components/ui/form/Input.tsx +20 -20
  355. package/src/components/ui/form/InputOtp.tsx +80 -80
  356. package/src/components/ui/form/PhoneInput.tsx +210 -210
  357. package/src/components/ui/form/RadioGroup.tsx +45 -45
  358. package/src/components/ui/form/Select.tsx +200 -200
  359. package/src/components/ui/form/Switch.tsx +32 -32
  360. package/src/components/ui/form/Textarea.tsx +19 -19
  361. package/src/components/ui/overlay/Command.tsx +185 -185
  362. package/src/components/ui/overlay/Dialog.tsx +153 -153
  363. package/src/components/ui/overlay/Popover.tsx +49 -49
  364. package/src/components/ui/overlay/Sheet.tsx +170 -170
  365. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  366. package/src/components/widgets/ImageUpload/ImageCropModal.tsx +392 -392
  367. package/src/components/widgets/ImageUpload/ImageTooSmallModal.tsx +62 -62
  368. package/src/components/widgets/ImageUpload/ImageUpload.tsx +131 -131
  369. package/src/components/widgets/ImageUpload/index.ts +3 -3
  370. package/src/components/widgets/notifications/NotificationCard.tsx +73 -73
  371. package/src/handlers.ts +22 -22
  372. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  373. package/src/hooks/useAuthQueryKey.ts +32 -32
  374. package/src/hooks/useBrandLoadingIcon.tsx +18 -18
  375. package/src/hooks/useRouter.ts +38 -38
  376. package/src/http.ts +1 -1
  377. package/src/i18n/config.ts +17 -17
  378. package/src/i18n/country-language.ts +60 -60
  379. package/src/i18n/messages/en-us.ts +519 -519
  380. package/src/i18n/messages/es-es.ts +520 -520
  381. package/src/i18n/messages/index.ts +24 -24
  382. package/src/i18n/messages/pt-br.ts +543 -543
  383. package/src/i18n/normalize.ts +15 -15
  384. package/src/i18n/resolve-locale.ts +77 -77
  385. package/src/i18n.ts +10 -10
  386. package/src/index.ts +584 -584
  387. package/src/infra/http/api-fetch.ts +39 -39
  388. package/src/infra/route/parse-id.ts +9 -9
  389. package/src/infra/route/parse-numeric.ts +16 -16
  390. package/src/infra/route/safe-route-handler.ts +16 -16
  391. package/src/infra/route/search-params.ts +9 -9
  392. package/src/infra/utils/array.ts +167 -167
  393. package/src/infra/utils/date.ts +59 -59
  394. package/src/middleware.ts +4 -4
  395. package/src/modules/accounts/actions/account-management.action.ts +109 -109
  396. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  397. package/src/modules/accounts/actions/get-account-token.action.ts +8 -8
  398. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  399. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  400. package/src/modules/accounts/hooks/current-account.hook.tsx +26 -26
  401. package/src/modules/accounts/hooks/use-account-token.hook.tsx +14 -14
  402. package/src/modules/accounts/hooks/use-currency-formatter.hook.tsx +32 -32
  403. package/src/modules/accounts/hooks/useAccountManagement.ts +95 -95
  404. package/src/modules/accounts/hooks/useCurrencies.ts +18 -18
  405. package/src/modules/accounts/hooks/useTimezones.ts +18 -18
  406. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  407. package/src/modules/accounts/services/account-token.service.ts +52 -52
  408. package/src/modules/accounts/services/account.service.ts +243 -243
  409. package/src/modules/accounts/types.ts +230 -230
  410. package/src/modules/auth/actions/social-google-login.action.ts +12 -12
  411. package/src/modules/auth/actions/social-google-onboarding.action.ts +13 -13
  412. package/src/modules/auth/actions/unlink-google.action.ts +8 -8
  413. package/src/modules/auth/actions/validate-session.action.ts +70 -70
  414. package/src/modules/auth/actions/verify-two-factor.action.ts +19 -19
  415. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  416. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  417. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  418. package/src/modules/auth/hooks/social-google-login.hook.tsx +13 -13
  419. package/src/modules/auth/hooks/social-google-onboarding.hook.tsx +13 -13
  420. package/src/modules/auth/hooks/unlink-google.hook.tsx +13 -13
  421. package/src/modules/auth/hooks/useManagementPermissions.ts +52 -52
  422. package/src/modules/auth/hooks/useUserQuery.ts +103 -103
  423. package/src/modules/auth/types/management-permission.type.ts +14 -14
  424. package/src/modules/auth/utils/assert-management-permission.ts +56 -56
  425. package/src/modules/auth/utils/assert-management-subscription.ts +38 -38
  426. package/src/modules/auth/utils/assert-paid-subscription.ts +47 -47
  427. package/src/modules/auth/utils/assert-subscription-addon.ts +42 -42
  428. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  429. package/src/modules/auth/utils/require-token-not-expired.ts +53 -53
  430. package/src/modules/auth/utils/require-valid-session.ts +35 -35
  431. package/src/modules/cards/actions/create-card.action.ts +9 -9
  432. package/src/modules/cards/actions/create-setup-intent.action.ts +8 -8
  433. package/src/modules/cards/actions/delete-card.action.ts +8 -8
  434. package/src/modules/cards/actions/set-default-card.action.ts +8 -8
  435. package/src/modules/cards/handlers/find-card-by-id.handler.ts +15 -15
  436. package/src/modules/cards/handlers/list-cards.handler.ts +10 -10
  437. package/src/modules/cards/hooks/card-by-id.hook.ts +17 -17
  438. package/src/modules/cards/hooks/cards.hook.ts +22 -22
  439. package/src/modules/cards/hooks/create-card.hook.ts +30 -30
  440. package/src/modules/cards/hooks/create-setup-intent.hook.ts +11 -11
  441. package/src/modules/cards/hooks/delete-card.hook.ts +52 -52
  442. package/src/modules/cards/hooks/delete-confirmation.hook.ts +40 -40
  443. package/src/modules/cards/hooks/handle-delete-card.hook.ts +47 -47
  444. package/src/modules/cards/hooks/set-default-card.hook.ts +55 -55
  445. package/src/modules/cards/services/cards.service.ts +136 -136
  446. package/src/modules/cards/types.ts +52 -52
  447. package/src/modules/charges/actions/charge-action.action.ts +13 -13
  448. package/src/modules/charges/handlers/find-charge-by-id.handler.ts +14 -14
  449. package/src/modules/charges/handlers/list-charges.handler.ts +15 -15
  450. package/src/modules/charges/hooks/charge-action.hook.ts +24 -24
  451. package/src/modules/charges/hooks/charge-by-id.hook.ts +19 -19
  452. package/src/modules/charges/hooks/charges.hook.ts +19 -19
  453. package/src/modules/charges/services/charges.service.ts +63 -63
  454. package/src/modules/charges/types/charge.type.ts +68 -68
  455. package/src/modules/ia-credits/handlers/list-ia-credits.handler.ts +14 -14
  456. package/src/modules/ia-credits/hooks/ia-credits.hook.ts +103 -103
  457. package/src/modules/images/actions/process-image.action.ts +40 -40
  458. package/src/modules/images/constants/image.constants.ts +11 -11
  459. package/src/modules/images/hooks/use-image-upload.hook.ts +153 -153
  460. package/src/modules/images/services/image-processing.service.ts +75 -75
  461. package/src/modules/images/types/image.type.ts +54 -54
  462. package/src/modules/images/utils/base64.ts +26 -26
  463. package/src/modules/images/utils/compress-image.ts +20 -20
  464. package/src/modules/images/utils/crop-image.ts +68 -68
  465. package/src/modules/images/utils/validate-image.ts +86 -86
  466. package/src/modules/pages/constants/query-keys.constants.ts +1 -1
  467. package/src/modules/pages/handlers/count-pages.handler.ts +12 -12
  468. package/src/modules/pages/hooks/count-pages.hook.ts +21 -21
  469. package/src/modules/pages/services/pages.service.ts +27 -27
  470. package/src/modules/plans/handlers/find-plan-by-id.handler.ts +14 -14
  471. package/src/modules/plans/handlers/list-plans.handler.ts +22 -22
  472. package/src/modules/plans/hooks/list-plans.hook.ts +23 -23
  473. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +14 -14
  474. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +39 -39
  475. package/src/modules/plans/services/plans.service.ts +136 -135
  476. package/src/modules/plans/types/plan.type.ts +79 -75
  477. package/src/modules/plans/utils/map-api-plan-to-ui.ts +167 -167
  478. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  479. package/src/modules/projects/actions/create-project.action.ts +9 -9
  480. package/src/modules/projects/actions/delete-project.action.ts +8 -8
  481. package/src/modules/projects/actions/find-project.action.ts +8 -8
  482. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  483. package/src/modules/projects/actions/list-projects.action.ts +16 -16
  484. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  485. package/src/modules/projects/actions/update-project.action.ts +9 -9
  486. package/src/modules/projects/handlers/find-project.handler.ts +15 -15
  487. package/src/modules/projects/handlers/list-all-account-users.handler.ts +23 -23
  488. package/src/modules/projects/handlers/list-available-users.handler.ts +26 -26
  489. package/src/modules/projects/handlers/list-project-users.handler.ts +26 -26
  490. package/src/modules/projects/handlers/list-projects.handler.ts +23 -23
  491. package/src/modules/projects/hooks/add-project-user.hook.ts +72 -72
  492. package/src/modules/projects/hooks/create-project.hook.ts +120 -120
  493. package/src/modules/projects/hooks/delete-project.hook.ts +58 -58
  494. package/src/modules/projects/hooks/find-project.hook.ts +18 -18
  495. package/src/modules/projects/hooks/list-all-account-users.hook.ts +40 -40
  496. package/src/modules/projects/hooks/list-available-users.hook.ts +39 -39
  497. package/src/modules/projects/hooks/list-infinite-projects.hook.ts +44 -44
  498. package/src/modules/projects/hooks/list-project-users.hook.ts +39 -39
  499. package/src/modules/projects/hooks/list-projects.hook.ts +23 -23
  500. package/src/modules/projects/hooks/remove-project-user.hook.ts +72 -72
  501. package/src/modules/projects/hooks/update-project.hook.ts +86 -86
  502. package/src/modules/projects/services/projects.service.ts +156 -156
  503. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  504. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  505. package/src/modules/subscriptions/actions/update-subscription-payment.action.ts +13 -13
  506. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  507. package/src/modules/subscriptions/constants/query-keys.constants.ts +3 -3
  508. package/src/modules/subscriptions/constants/subscription.constants.ts +1 -1
  509. package/src/modules/subscriptions/handlers/list-subscriptions.handler.ts +17 -17
  510. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  511. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +22 -22
  512. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +22 -22
  513. package/src/modules/subscriptions/hooks/update-subscription-payment.hook.ts +25 -25
  514. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +28 -28
  515. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +44 -44
  516. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  517. package/src/modules/subscriptions/types/calculate-subscription.type.ts +116 -116
  518. package/src/modules/subscriptions/types/pix-pending.type.ts +38 -38
  519. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  520. package/src/modules/subscriptions/utils/get-subscription-cancellation-state.ts +37 -37
  521. package/src/modules/subscriptions/utils/get-subscription-expiry-date.ts +33 -33
  522. package/src/modules/subscriptions/utils/has-subscription-expired.ts +11 -11
  523. package/src/modules/subscriptions/utils/periodicity.ts +79 -79
  524. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  525. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  526. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  527. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  528. package/src/modules/users/handlers/list-messages.handler.ts +39 -39
  529. package/src/modules/users/hooks/messages.hook.ts +69 -69
  530. package/src/modules/users/services/messages.service.ts +49 -49
  531. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  532. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  533. package/src/modules/whitelabel/schema.ts +84 -84
  534. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  535. package/src/providers/auth.provider.tsx +264 -264
  536. package/src/providers/navigation.provider.tsx +99 -99
  537. package/src/providers/whitelabel.provider.tsx +90 -90
  538. package/src/route.ts +4 -4
  539. package/src/store/useAccountModals.ts +85 -85
  540. package/src/store/useBuyCreditsModal.ts +21 -21
  541. package/src/store/useCreditsDisabledModal.ts +11 -11
  542. package/src/store/useDesktopSidebarStore.ts +47 -47
  543. package/src/store/useMdSidebarStore.ts +34 -34
  544. package/src/store/usePaidPlanRequiredModal.ts +19 -19
  545. package/src/utils/constants/br-states.ts +29 -29
  546. package/src/utils/countries.ts +224 -224
  547. package/src/utils/format/currency.ts +70 -70
  548. package/src/utils/intl/cookie-domain.ts +29 -29
  549. package/src/utils/intl/locale-cookie.ts +18 -18
  550. package/src/utils/next-navigation.ts +7 -7
  551. package/src/utils/redirect.ts +78 -78
  552. package/src/utils/safeMutationAction.ts +24 -24
  553. package/src/utils/safeServerAction.ts +21 -21
  554. 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
+ }